From d418b9bbd29634e692b02567f0a2ccf82db42428 Mon Sep 17 00:00:00 2001 From: AnRil Date: Sat, 16 May 2026 18:42:05 +0700 Subject: [PATCH] =?UTF-8?q?redesign(ui):=20phase=202=20=E2=80=94=20=D0=B2?= =?UTF-8?q?=D1=81=D0=B5=20=D0=B2=D1=82=D0=BE=D1=80=D0=B8=D1=87=D0=BD=D1=8B?= =?UTF-8?q?=D0=B5=20=D1=81=D1=82=D1=80=D0=B0=D0=BD=D0=B8=D1=86=D1=8B=20?= =?UTF-8?q?=D0=B8=20UI-=D0=BF=D1=80=D0=B8=D0=BC=D0=B8=D1=82=D0=B8=D0=B2?= =?UTF-8?q?=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Распространили esports-HUD язык на оставшиеся экраны и общие UI: - Modal: neon border accent/25 с двойным glow (cyan + violet), gradient-divider, gradient-stripe слева от заголовка, defeat hover на закрытие - Switch: bg-gradient-brand с shadow-glow в on-состоянии - Exercises: hero с gradient-text, статистика в моноширинном шрифте (active count, total reps за цикл), HUD-список с анимированным появлением, hover-row с accent tint - Games: game cards с gradient orb-иконкой + glow на интегрированных, shadow-glow-victory + анимированная LIVE точка для активной интеграции, новые status badges (LIVE / READY / QUEUED / INSTALLED / NOT FOUND) в display-шрифте, ошибки в защитных цветах (xp/defeat) - Challenges: hero + formula-row "stat × N → reps" в моноширинном шрифте, gradient-preview карточка в редакторе с большим итоговым числом в text-gradient-brand - Settings: hero, секции с иконкой в accent-плашке, заголовки секций в display-шрифте uppercase tracking-wide - ExerciseEditor: preview-карточка с gradient-orb иконкой в шапке модала, моноширинные input для чисел, scale-up на выбранной иконке Все правки используют существующие токены из phase 1 — никаких новых CSS-переменных или конфигов. Откат phase 2 один: git revert HEAD Откат до начала редизайна: git reset --hard 688a86b Co-Authored-By: Claude Opus 4.7 --- .../src/components/ExerciseEditor.tsx | 46 +++- src/renderer/src/components/ui/Modal.tsx | 41 ++- src/renderer/src/components/ui/Switch.tsx | 8 +- src/renderer/src/pages/Challenges.tsx | 178 +++++++++---- src/renderer/src/pages/Exercises.tsx | 116 ++++++--- src/renderer/src/pages/Games.tsx | 246 +++++++++++++----- src/renderer/src/pages/Settings.tsx | 66 +++-- 7 files changed, 521 insertions(+), 180 deletions(-) diff --git a/src/renderer/src/components/ExerciseEditor.tsx b/src/renderer/src/components/ExerciseEditor.tsx index 09a81ab..507c9ac 100644 --- a/src/renderer/src/components/ExerciseEditor.tsx +++ b/src/renderer/src/components/ExerciseEditor.tsx @@ -1,4 +1,5 @@ import { useEffect, useState } from 'react' +import { Zap } from 'lucide-react' import type { Exercise } from '@shared/types' import { Modal } from './ui/Modal' import { Button } from './ui/Button' @@ -27,7 +28,12 @@ type Props = { onSave: (draft: Draft) => void } -export function ExerciseEditor({ open, exercise, onClose, onSave }: Props): JSX.Element { +export function ExerciseEditor({ + open, + exercise, + onClose, + onSave +}: Props): JSX.Element { const [draft, setDraft] = useState(EMPTY) useEffect(() => { @@ -63,6 +69,32 @@ export function ExerciseEditor({ open, exercise, onClose, onSave }: Props): JSX. } >
+ {/* Preview card */} +
+
+
+
+
+
+ +
+
+
+
+ Preview +
+
+ {draft.name || 'Без названия'} +
+
+ + {draft.reps} + повторов · каждые {draft.intervalMinutes} мин +
+
+
+
+ setDraft({ ...draft, reps: Math.max(1, Number(e.target.value) || 1) }) } - className="input" + className="input font-mono-num font-semibold" /> @@ -96,7 +128,7 @@ export function ExerciseEditor({ open, exercise, onClose, onSave }: Props): JSX. intervalMinutes: Math.max(1, Number(e.target.value) || 1) }) } - className="input" + className="input font-mono-num font-semibold" />
@@ -109,10 +141,10 @@ export function ExerciseEditor({ open, exercise, onClose, onSave }: Props): JSX. type="button" onClick={() => setDraft({ ...draft, icon: name })} className={[ - 'h-10 w-10 grid place-items-center rounded-lg border transition-colors', + 'h-10 w-10 grid place-items-center rounded-lg border transition-all', draft.icon === name - ? 'border-accent bg-accent/15 text-accent' - : 'border-border bg-surface-elevated text-muted hover:text-text' + ? 'border-accent bg-accent/15 text-accent shadow-glow scale-105' + : 'border-border bg-surface-elevated text-muted hover:text-text hover:border-accent/40' ].join(' ')} > @@ -152,7 +184,7 @@ function Field({ }): JSX.Element { return (