import { useEffect, useState } from 'react'; import { Link, Outlet, useRouterState } from '@tanstack/react-router'; import { useUiStore } from '@/stores/uiStore'; import { CommandPalette } from '@/components/CommandPalette'; import { useActiveCampaign, useCampaigns } from '@/features/campaigns/hooks'; import { cn } from '@/lib/cn'; import { ErrorBoundary } from '@/components/ui/ErrorBoundary'; import { RollTray } from '@/components/ui/RollTray'; import { Select } from '@/components/ui/Input'; import { Button } from '@/components/ui/Button'; const NAV = [ { to: '/', label: 'Campaigns', exact: true }, { to: '/dashboard', label: 'Dashboard', exact: false }, { to: '/characters', label: 'Characters', exact: false }, { to: '/combat', label: 'Combat', exact: false }, { to: '/dice', label: 'Dice', exact: false }, { to: '/compendium', label: 'Compendium', exact: false }, ] as const; function CampaignSwitcher() { const campaigns = useCampaigns(); const active = useActiveCampaign(); const setActive = useUiStore((s) => s.setActiveCampaign); if (campaigns.length === 0) { return No campaigns yet; } return ( ); } function ThemeToggle() { const theme = useUiStore((s) => s.theme); const toggle = useUiStore((s) => s.toggleTheme); return ( ); } export function RootLayout() { const pathname = useRouterState({ select: (s) => s.location.pathname }); const [paletteOpen, setPaletteOpen] = useState(false); // Global Ctrl/Cmd+K opens the command palette. useEffect(() => { const onKey = (e: KeyboardEvent) => { if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === 'k') { e.preventDefault(); setPaletteOpen((v) => !v); } }; window.addEventListener('keydown', onKey); return () => window.removeEventListener('keydown', onKey); }, []); return (