import { useEffect, useState } from 'react' import { getRooms } from '../pages/storageUtils' // Added getRooms import import { useEditor } from 'tldraw' // Added useEditor import import { colors } from '../constants/theme' // Corrected path import { FolderIcon, SettingsIcon, CloseIcon } from './Icons' // Added ShareIcon import { RoomList } from './RoomList' import { SettingsMenu } from './SettingsMenu' type Tab = 'none' | 'files' | 'settings' interface NavButtonProps { children: React.ReactNode onClick: () => void active: boolean title: string theme: any } function NavButton({ children, onClick, active, title, theme }: NavButtonProps) { const [hovered, setHovered] = useState(false) return ( setHovered(true)} onMouseLeave={() => setHovered(false)} style={{ width: 40, height: 40, display: 'flex', alignItems: 'center', justifyContent: 'center', background: active ? colors.selected : (hovered ? theme.hover : theme.bg), color: active ? '#fff' : theme.text, border: `1px solid ${active ? colors.selected : theme.border}`, borderRadius: 8, cursor: 'pointer', boxShadow: '0 2px 4px rgba(0,0,0,0.1)', transition: 'background 0.15s, border-color 0.15s', }} > {children} ) } export function NavigationDock({ roomId }: { roomId: string }) { const editor = useEditor() const [activeTab, setActiveTab] = useState('none') const [isDark, setIsDark] = useState(false) const [roomName, setRoomName] = useState('') // Check dark mode useEffect(() => { const checkDark = () => { if (!editor?.user) return const prefs = editor.user.getUserPreferences() setIsDark(prefs.colorScheme === 'dark') } checkDark() const interval = setInterval(checkDark, 1000) return () => clearInterval(interval) }, [editor]) // Monitor Room Name useEffect(() => { const updateName = () => { const rooms = getRooms() const room = rooms.find(r => r.id === roomId) setRoomName(room?.name || 'Untitled Board') } updateName() window.addEventListener('tldraw-room-update', updateName) // Also listen for storage events in case it changes in another tab window.addEventListener('storage', updateName) return () => { window.removeEventListener('tldraw-room-update', updateName) window.removeEventListener('storage', updateName) } }, [roomId]) const theme = { bg: isDark ? colors.panelBgDark : colors.panelBg, border: isDark ? colors.borderDark : colors.border, hover: isDark ? colors.hoverDark : colors.hover, text: isDark ? colors.textDark : colors.text, } const isOpen = activeTab !== 'none' const close = () => setActiveTab('none') const getTitle = () => { switch(activeTab) { case 'files': return 'My Boards' case 'settings': return 'Settings' default: return '' } } return ( <> {/* DOCK BUTTONS */} setActiveTab(activeTab === 'files' ? 'none' : 'files')} title="Your Boards" theme={theme} > setActiveTab(activeTab === 'settings' ? 'none' : 'settings')} title="Settings" theme={theme} > {/* BACKDROP */} {isOpen && ( )} {/* SIDEBAR PANEL */} {/* HEADER */} {getTitle()} {roomName} {/* CONTENT */} {activeTab === 'files' && ( )} {activeTab === 'settings' && ( )} > ) }