From 764c8c9e9f219b0c390a1ada250c3082a6013ab1 Mon Sep 17 00:00:00 2001 From: Alexej Wolff Date: Wed, 11 Feb 2026 16:51:17 +0100 Subject: [PATCH] feat: move delete session to settings with confirmation, increase mobile font --- src/pages/GamePage.css | 134 +++++++++++++++++++++++++++++++++++++++++ src/pages/GamePage.tsx | 77 +++++++++++++++++------ 2 files changed, 193 insertions(+), 18 deletions(-) diff --git a/src/pages/GamePage.css b/src/pages/GamePage.css index 9b0d386..336ecd8 100644 --- a/src/pages/GamePage.css +++ b/src/pages/GamePage.css @@ -200,6 +200,140 @@ gap: 0.4rem; } +.header-settings { + position: relative; +} + +.settings-btn { + width: 36px; + height: 36px; + display: flex; + align-items: center; + justify-content: center; + background: rgba(255, 255, 255, 0.08); + border: none; + border-radius: 50%; + font-size: 1rem; + cursor: pointer; + transition: all 0.2s; +} + +.settings-btn:hover { + background: rgba(255, 255, 255, 0.15); +} + +.settings-menu { + position: absolute; + top: 100%; + right: 0; + margin-top: 0.5rem; + background: #141414; + border: 1px solid rgba(255, 255, 255, 0.1); + border-radius: 12px; + min-width: 240px; + box-shadow: 0 8px 32px rgba(0, 0, 0, 0.5); + z-index: 100; + overflow: hidden; +} + +.settings-menu-header { + padding: 0.75rem 1rem; + border-bottom: 1px solid rgba(255, 255, 255, 0.08); + font-size: 0.85rem; + color: #999; + font-weight: 500; +} + +.settings-menu-content { + padding: 0.5rem; +} + +.settings-item { + width: 100%; + display: flex; + align-items: center; + gap: 0.5rem; + padding: 0.75rem 1rem; + background: none; + border: none; + border-radius: 8px; + color: #ddd; + font-size: 0.9rem; + cursor: pointer; + text-align: left; + transition: all 0.2s; +} + +.settings-item:hover:not(:disabled) { + background: rgba(255, 255, 255, 0.08); +} + +.settings-item:disabled { + opacity: 0.4; + cursor: not-allowed; +} + +.settings-item.danger { + color: #f87171; +} + +.settings-item.danger:hover:not(:disabled) { + background: rgba(239, 68, 68, 0.12); +} + +.settings-item-hint { + font-size: 0.75rem; + color: #666; + margin-left: auto; +} + +.delete-confirm { + padding: 0.5rem; +} + +.delete-confirm p { + margin: 0 0 0.75rem 0; + font-size: 0.85rem; + color: #f87171; + text-align: center; +} + +.delete-confirm-buttons { + display: flex; + gap: 0.5rem; +} + +.confirm-btn { + flex: 1; + padding: 0.6rem 1rem; + border: none; + border-radius: 8px; + font-size: 0.85rem; + font-weight: 500; + cursor: pointer; + transition: all 0.2s; +} + +.confirm-btn.cancel { + background: rgba(255, 255, 255, 0.1); + color: #999; +} + +.confirm-btn.cancel:hover { + background: rgba(255, 255, 255, 0.15); + color: #fff; +} + +.confirm-btn.delete { + background: rgba(239, 68, 68, 0.2); + color: #f87171; +} + +.confirm-btn.delete:hover { + background: rgba(239, 68, 68, 0.35); + color: #fff; +} + .stat-badge { padding: 0.35rem 0.65rem; border-radius: 16px; diff --git a/src/pages/GamePage.tsx b/src/pages/GamePage.tsx index 8119566..26b18a3 100644 --- a/src/pages/GamePage.tsx +++ b/src/pages/GamePage.tsx @@ -64,6 +64,8 @@ export default function GamePage() { const [showScrollButton, setShowScrollButton] = useState(false); const [editingMessageId, setEditingMessageId] = useState(null); const [editContent, setEditContent] = useState(""); + const [showSettings, setShowSettings] = useState(false); + const [deleteConfirmStep, setDeleteConfirmStep] = useState(0); const abortControllerRef = useRef(null); const messagesEndRef = useRef(null); const messagesContainerRef = useRef(null); @@ -628,10 +630,7 @@ export default function GamePage() { const handleDeleteSession = async (sessionId: string) => { if (!id || sessionsList.length <= 1) { alert("Нельзя удалить единственную сессию"); - return; - } - - if (!confirm("Удалить эту сессию? Это действие нельзя отменить.")) { + setDeleteConfirmStep(0); return; } @@ -716,18 +715,6 @@ export default function GamePage() { {s.messagesCount} сообщ. - {sessionsList.length > 1 && ( - - )} ))} @@ -739,8 +726,62 @@ export default function GamePage() { 🎟️ {formatTokens(estimateTokens(session?.messages || []))} - - +
+ + {showSettings && ( +
+
Настройки сессии
+
+ {deleteConfirmStep === 0 && ( + + )} + {deleteConfirmStep === 1 && ( +
+

Вы уверены? Это действие нельзя отменить.

+
+ + +
+
+ )} +
+
+ )} +