From d9a3a1cd1f805d8dc98e9b89e213e6396dcd7784 Mon Sep 17 00:00:00 2001 From: aurinex Date: Sat, 13 Dec 2025 18:59:30 +0500 Subject: [PATCH] minor fix marketplace + xyi ego znaet --- .erb/configs/webpack.config.renderer.dev.ts | 7 + .erb/configs/webpack.config.renderer.prod.ts | 7 + src/renderer/App.tsx | 2 +- {assets => src/renderer}/assets.d.ts | 13 + .../Icons/GradientVisibilityToggleIcon.tsx | 0 src/renderer/assets/sounds/buy.mp3 | Bin 0 -> 23240 bytes src/renderer/assets/sounds/sell.mp3 | Bin 0 -> 7940 bytes src/renderer/components/CoinsDisplay.tsx | 30 +-- src/renderer/components/Login/AuthForm.tsx | 3 +- .../components/Login/MemorySlider.tsx | 192 ++++++++++++-- .../components/Settings/SettingsModal.tsx | 9 +- src/renderer/pages/DailyReward.tsx | 249 ++++++++++-------- src/renderer/pages/LaunchPage.tsx | 54 ++-- src/renderer/pages/Marketplace.tsx | 99 +++---- src/renderer/pages/Shop.tsx | 7 + src/renderer/utils/sounds.ts | 13 + 16 files changed, 459 insertions(+), 226 deletions(-) rename {assets => src/renderer}/assets.d.ts (74%) rename src/renderer/{components => assets}/Icons/GradientVisibilityToggleIcon.tsx (100%) create mode 100644 src/renderer/assets/sounds/buy.mp3 create mode 100644 src/renderer/assets/sounds/sell.mp3 create mode 100644 src/renderer/utils/sounds.ts diff --git a/.erb/configs/webpack.config.renderer.dev.ts b/.erb/configs/webpack.config.renderer.dev.ts index a6ca87e..4194e06 100644 --- a/.erb/configs/webpack.config.renderer.dev.ts +++ b/.erb/configs/webpack.config.renderer.dev.ts @@ -112,6 +112,13 @@ const configuration: webpack.Configuration = { 'file-loader', ], }, + { + test: /\.(mp3|wav|ogg)$/i, + type: 'asset/resource', + generator: { + filename: 'assets/sounds/[name][ext]', + }, + } ], }, plugins: [ diff --git a/.erb/configs/webpack.config.renderer.prod.ts b/.erb/configs/webpack.config.renderer.prod.ts index 3cebf30..1536358 100644 --- a/.erb/configs/webpack.config.renderer.prod.ts +++ b/.erb/configs/webpack.config.renderer.prod.ts @@ -88,6 +88,13 @@ const configuration: webpack.Configuration = { 'file-loader', ], }, + { + test: /\.(mp3|wav|ogg)$/i, + type: 'asset/resource', + generator: { + filename: 'assets/sounds/[name][ext]', + }, + } ], }, diff --git a/src/renderer/App.tsx b/src/renderer/App.tsx index 747ebe8..a006b34 100644 --- a/src/renderer/App.tsx +++ b/src/renderer/App.tsx @@ -133,7 +133,7 @@ const AppLayout = () => { display: 'flex', flexDirection: 'column', alignItems: 'center', - justifyContent: location.pathname === '/profile' + justifyContent: location.pathname === '/profile' || location.pathname.startsWith('/launch') ? 'center' : 'flex-start', overflowX: 'hidden', diff --git a/assets/assets.d.ts b/src/renderer/assets.d.ts similarity index 74% rename from assets/assets.d.ts rename to src/renderer/assets.d.ts index 251085e..c8b7e3e 100644 --- a/assets/assets.d.ts +++ b/src/renderer/assets.d.ts @@ -33,3 +33,16 @@ declare module '*.css' { const content: Styles; export default content; } + +declare module '*.mp3' { + const src: string; + export default src; +} +declare module '*.wav' { + const src: string; + export default src; +} +declare module '*.ogg' { + const src: string; + export default src; +} \ No newline at end of file diff --git a/src/renderer/components/Icons/GradientVisibilityToggleIcon.tsx b/src/renderer/assets/Icons/GradientVisibilityToggleIcon.tsx similarity index 100% rename from src/renderer/components/Icons/GradientVisibilityToggleIcon.tsx rename to src/renderer/assets/Icons/GradientVisibilityToggleIcon.tsx diff --git a/src/renderer/assets/sounds/buy.mp3 b/src/renderer/assets/sounds/buy.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..87a2016eb2a0798a98d9e34bb6be0cbe996380ef GIT binary patch literal 23240 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 literal 0 HcmV?d00001 diff --git a/src/renderer/components/CoinsDisplay.tsx b/src/renderer/components/CoinsDisplay.tsx index 9e1e6b6..1840d6a 100644 --- a/src/renderer/components/CoinsDisplay.tsx +++ b/src/renderer/components/CoinsDisplay.tsx @@ -53,28 +53,28 @@ export default function CoinsDisplay({ switch (size) { case 'small': return { - containerPadding: '4px 8px', - iconSize: '16px', - fontSize: '12px', - borderRadius: '12px', - gap: '6px', + containerPadding: '0.4vw 0.8vw', + iconSize: '1.4vw', + fontSize: '1vw', + borderRadius: '2vw', + gap: '0.6vw', }; case 'large': return { - containerPadding: '8px 16px', - iconSize: '28px', - fontSize: '18px', - borderRadius: '20px', - gap: '10px', + containerPadding: '0.4vw 1.2vw', + iconSize: '2.2vw', + fontSize: '1.6vw', + borderRadius: '1.8vw', + gap: '0.8vw', }; case 'medium': default: return { - containerPadding: '6px 12px', - iconSize: '24px', - fontSize: '16px', - borderRadius: '16px', - gap: '8px', + containerPadding: '0.4vw 1vw', + iconSize: '2vw', + fontSize: '1.4vw', + borderRadius: '1.6vw', + gap: '0.6vw', }; } }; diff --git a/src/renderer/components/Login/AuthForm.tsx b/src/renderer/components/Login/AuthForm.tsx index 731a989..8d2316f 100644 --- a/src/renderer/components/Login/AuthForm.tsx +++ b/src/renderer/components/Login/AuthForm.tsx @@ -3,8 +3,7 @@ import { Box, Button, TextField, Typography, InputAdornment, IconButton } from ' import VisibilityOffIcon from '@mui/icons-material/VisibilityOff'; import VisibilityIcon from '@mui/icons-material/Visibility'; import GradientTextField from '../GradientTextField'; -import GradientVisibilityToggleIcon from '../Icons/GradientVisibilityToggleIcon' -import GradientVisibilityIcon from '../Icons/GradientVisibilityIcon' +import GradientVisibilityToggleIcon from '../../assets/Icons/GradientVisibilityToggleIcon' interface AuthFormProps { config: { diff --git a/src/renderer/components/Login/MemorySlider.tsx b/src/renderer/components/Login/MemorySlider.tsx index 4911179..30f94c1 100644 --- a/src/renderer/components/Login/MemorySlider.tsx +++ b/src/renderer/components/Login/MemorySlider.tsx @@ -1,25 +1,187 @@ -import { Slider } from '@mui/material'; +import React from 'react'; +import { Box, Slider, Typography } from '@mui/material'; interface MemorySliderProps { memory: number; onChange: (e: Event, value: number | number[]) => void; + min?: number; + max?: number; + step?: number; } -const MemorySlider = ({ memory, onChange }: MemorySliderProps) => { +const gradientPrimary = + 'linear-gradient(71deg, #F27121 0%, #E940CD 70%, #8A2387 100%)'; + +const formatMb = (v: number) => `${v} MB`; +const formatGb = (v: number) => `${(v / 1024).toFixed(v % 1024 === 0 ? 0 : 1)} GB`; + +const MemorySlider = ({ + memory, + onChange, + min = 1024, + max = 32768, + step = 1024, +}: MemorySliderProps) => { + // marks только на “красивых” значениях, чтобы не было каши + const marks = [ + { value: 1024, label: '1 GB' }, + { value: 4096, label: '4 GB' }, + { value: 8192, label: '8 GB' }, + { value: 16384, label: '16 GB' }, + { value: 32768, label: '32 GB' }, + ].filter((m) => m.value >= min && m.value <= max); + return ( - + + {/* Header */} + + + Память + + + + {memory >= 1024 ? formatGb(memory) : formatMb(memory)} + + + + (v >= 1024 ? formatGb(v as number) : formatMb(v as number))} + shiftStep={step} + step={step} + marks={marks} + min={min} + max={max} + value={memory} + onChange={onChange} + sx={{ + px: '0.2vw', + + // rail (фон полосы) + '& .MuiSlider-rail': { + opacity: 1, + height: '0.9vh', + borderRadius: '999vw', + backgroundColor: 'rgba(255,255,255,0.10)', + boxShadow: 'inset 0 0.25vh 0.6vh rgba(0,0,0,0.45)', + }, + + // track (заполненная часть) + '& .MuiSlider-track': { + height: '0.9vh', + borderRadius: '999vw', + border: 'none', + background: gradientPrimary, + boxShadow: '0 0.6vh 1.6vh rgba(233,64,205,0.18)', + }, + + // thumb (ползунок) + '& .MuiSlider-thumb': { + width: '1.6vw', + height: '1.6vw', + minWidth: 14, + minHeight: 14, + borderRadius: '999vw', + background: 'rgba(10,10,20,0.92)', + border: '0.22vw solid rgba(255,255,255,0.18)', + boxShadow: + '0 0.9vh 2.4vh rgba(0,0,0,0.55), 0 0 1.2vw rgba(242,113,33,0.20)', + transition: 'transform 0.18s ease, box-shadow 0.18s ease, border-color 0.18s ease', + '&:hover': { + // transform: 'scale(1.06)', + borderColor: 'rgba(242,113,33,0.55)', + boxShadow: + '0 1.1vh 2.8vh rgba(0,0,0,0.62), 0 0 1.6vw rgba(233,64,205,0.28)', + }, + + // внутренний “свет” + '&:before': { + content: '""', + position: 'absolute', + inset: '18%', + borderRadius: '999vw', + background: gradientPrimary, + opacity: 0.85, + filter: 'blur(0.3vw)', + }, + }, + + // value label (плашка значения) + '& .MuiSlider-valueLabel': { + fontFamily: 'Benzin-Bold, system-ui, -apple-system, Segoe UI, Roboto, Arial', + fontSize: '0.85vw', + borderRadius: '1.2vw', + padding: '0.4vh 0.8vw', + color: '#fff', + background: 'rgba(0,0,0,0.55)', + border: '1px solid rgba(255,255,255,0.10)', + backdropFilter: 'blur(10px)', + boxShadow: '0 1.2vh 3vh rgba(0,0,0,0.55)', + '&:before': { display: 'none' }, + }, + + // marks (точки) + '& .MuiSlider-mark': { + width: '0.35vw', + height: '0.35vw', + minWidth: 4, + minHeight: 4, + borderRadius: '999vw', + backgroundColor: 'rgba(255,255,255,0.18)', + }, + '& .MuiSlider-markActive': { + backgroundColor: 'rgba(255,255,255,0.55)', + }, + + // mark labels (подписи) + '& .MuiSlider-markLabel': { + color: 'rgba(255,255,255,0.55)', + fontSize: '0.75vw', + marginTop: '1vh', + userSelect: 'none', + }, + + // focus outline + '& .MuiSlider-thumb.Mui-focusVisible': { + outline: 'none', + boxShadow: + '0 0 0 0.25vw rgba(242,113,33,0.20), 0 1.1vh 2.8vh rgba(0,0,0,0.62)', + }, + }} + /> + + {/* Subtext */} + + Шаг: {formatGb(step)} • Рекомендуем: 4–8 GB для большинства сборок + + ); }; diff --git a/src/renderer/components/Settings/SettingsModal.tsx b/src/renderer/components/Settings/SettingsModal.tsx index 71264b2..ca98873 100644 --- a/src/renderer/components/Settings/SettingsModal.tsx +++ b/src/renderer/components/Settings/SettingsModal.tsx @@ -10,7 +10,7 @@ interface SettingsModalProps { memory: number; preserveFiles: string[]; }; - onConfigChange: (newConfig: { + onConfigChange: (updater: (prev: { memory: number; preserveFiles: string[] }) => { memory: number; preserveFiles: string[]; }) => void; @@ -58,7 +58,7 @@ const SettingsModal = ({ packName={packName} initialSelected={config.preserveFiles} onSelectionChange={(selected) => { - onConfigChange({ ...config, preserveFiles: selected }); + onConfigChange((prev) => ({ ...prev, preserveFiles: selected })); }} /> @@ -66,8 +66,9 @@ const SettingsModal = ({ { - onConfigChange({ ...config, memory: value as number }); + onChange={(_, value) => { + const next = Array.isArray(value) ? value[0] : value; + onConfigChange((prev) => ({ ...prev, memory: next })); }} />