diff --git a/src/client/src/App.tsx b/src/client/src/App.tsx index b252692..c566360 100644 --- a/src/client/src/App.tsx +++ b/src/client/src/App.tsx @@ -79,7 +79,10 @@ export const App: React.FC = () => {
-

MTG Peasant Drafter

+

+ MTG Peasant Drafter + ALPHA +

Pack Generator & Tournament Manager

diff --git a/src/client/src/modules/draft/DeckBuilderView.tsx b/src/client/src/modules/draft/DeckBuilderView.tsx index 3c8ead6..1b0f773 100644 --- a/src/client/src/modules/draft/DeckBuilderView.tsx +++ b/src/client/src/modules/draft/DeckBuilderView.tsx @@ -1,6 +1,6 @@ import React, { useState, useMemo, useEffect } from 'react'; import { socketService } from '../../services/SocketService'; -import { Save, Layers, Clock, Columns, LayoutTemplate, List, LayoutGrid, ChevronDown, Check } from 'lucide-react'; +import { Save, Layers, Clock, Columns, LayoutTemplate, List, LayoutGrid, ChevronDown, Check, ChevronLeft, Eye } from 'lucide-react'; import { StackView } from '../../components/StackView'; import { FoilOverlay } from '../../components/CardPreview'; import { DraftCard } from '../../services/PackGeneratorService'; @@ -249,6 +249,13 @@ export const DeckBuilderView: React.FC = ({ initialPool, a }, [cardWidth]); const [sortDropdownOpen, setSortDropdownOpen] = useState(false); + const [isSidebarCollapsed, setIsSidebarCollapsed] = useState(() => { + return localStorage.getItem('draft_sidebarCollapsed') === 'true'; + }); + + useEffect(() => { + localStorage.setItem('draft_sidebarCollapsed', isSidebarCollapsed.toString()); + }, [isSidebarCollapsed]); // --- Resize State --- const [sidebarWidth, setSidebarWidth] = useState(() => { @@ -731,73 +738,100 @@ export const DeckBuilderView: React.FC = ({ initialPool, a
{/* Zoom Sidebar */} -
- {/* Front content ... */} -
-
+ +
+ ) : ( +
+ {/* Collapse Button */} + - {/* Back Face (Card Back) */} + {/* Front content ... */} +
- Card Back + {/* Front Face (Hovered Card) */} +
+ {(hoveredCard || displayCard) && ( +
+ {(hoveredCard +
+

{(hoveredCard || displayCard).name}

+

{(hoveredCard || displayCard).typeLine || (hoveredCard || displayCard).type_line}

+ {(hoveredCard || displayCard).oracle_text && ( +
+ {(hoveredCard || displayCard).oracle_text.split('\n').map((line: string, i: number) =>

{line}

)} +
+ )} +
+
+ )} +
+ + {/* Back Face (Card Back) */} +
+ Card Back +
-
- {/* Resize Handle */} -
handleResizeStart('sidebar', e)} - onTouchStart={(e) => handleResizeStart('sidebar', e)} - > -
+ {/* Resize Handle */} +
handleResizeStart('sidebar', e)} + onTouchStart={(e) => handleResizeStart('sidebar', e)} + > +
+
-
+ )} {/* Content Area */} {layout === 'vertical' ? ( diff --git a/src/client/src/modules/draft/DraftView.tsx b/src/client/src/modules/draft/DraftView.tsx index e4cc513..fae6267 100644 --- a/src/client/src/modules/draft/DraftView.tsx +++ b/src/client/src/modules/draft/DraftView.tsx @@ -1,7 +1,7 @@ import React, { useState, useEffect, useRef } from 'react'; import { socketService } from '../../services/SocketService'; -import { LogOut, Columns, LayoutTemplate } from 'lucide-react'; +import { LogOut, Columns, LayoutTemplate, ChevronLeft, Eye } from 'lucide-react'; import { Modal } from '../../components/Modal'; import { FoilOverlay, FloatingPreview } from '../../components/CardPreview'; import { useCardTouch } from '../../utils/interaction'; @@ -103,9 +103,15 @@ export const DraftView: React.FC = ({ draftState, currentPlayerI } }, [cardScale]); - const [layout, setLayout] = useState<'vertical' | 'horizontal'>('horizontal'); + const [layout, setLayout] = useState<'vertical' | 'horizontal'>('vertical'); // Default to vertical for consistency + const [isSidebarCollapsed, setIsSidebarCollapsed] = useState(() => { + return localStorage.getItem('draft_sidebarCollapsed') === 'true'; + }); // Persist settings + useEffect(() => { + localStorage.setItem('draft_sidebarCollapsed', isSidebarCollapsed.toString()); + }, [isSidebarCollapsed]); useEffect(() => { localStorage.setItem('draft_poolHeight', poolHeight.toString()); }, [poolHeight]); @@ -310,71 +316,97 @@ export const DraftView: React.FC = ({ draftState, currentPlayerI
{/* Dedicated Zoom Zone (Left Sidebar) */} -
-
-
+ +
+ ) : ( +
+ {/* Collapse Button */} + - {/* Back Face (Card Back) */} +
- Card Back + {/* Front Face (Hovered Card) */} +
+ {(hoveredCard || displayCard) && ( +
+ {(hoveredCard +
+

{(hoveredCard || displayCard).name}

+

{(hoveredCard || displayCard).typeLine || (hoveredCard || displayCard).type_line}

+ {(hoveredCard || displayCard).oracle_text && ( +
+ {(hoveredCard || displayCard).oracle_text.split('\n').map((line: string, i: number) =>

{line}

)} +
+ )} +
+
+ )} +
+ + {/* Back Face (Card Back) */} +
+ Card Back +
+ {/* Resize Handle for Sidebar */} +
handleResizeStart('sidebar', e)} + onTouchStart={(e) => handleResizeStart('sidebar', e)} + > +
+
- {/* Resize Handle for Sidebar */} -
handleResizeStart('sidebar', e)} - onTouchStart={(e) => handleResizeStart('sidebar', e)} - > -
-
-
+ )} {/* Main Content Area: Handles both Pack and Pool based on layout */} {layout === 'vertical' ? (