diff --git a/src/App.tsx b/src/App.tsx index cbe000e..edeacc9 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -10,6 +10,8 @@ const UrgencyView = lazy(() => import('./views/UrgencyView').then(m => ({ defaul const PriorityView = lazy(() => import('./views/PriorityView').then(m => ({ default: m.PriorityView }))); const MatrixView = lazy(() => import('./views/MatrixView').then(m => ({ default: m.MatrixView }))); const SettingsView = lazy(() => import('./views/SettingsView').then(m => ({ default: m.SettingsView }))); +const SnowballView = lazy(() => import('./views/SnowballView').then(m => ({ default: m.SnowballView }))); +const DigInView = lazy(() => import('./views/DigInView').then(m => ({ default: m.DigInView }))); const App: Component = () => { // Basic routing state @@ -34,6 +36,8 @@ const App: Component = () => { import('./views/PriorityView'); import('./views/MatrixView'); import('./views/SettingsView'); + import('./views/SnowballView'); + import('./views/DigInView'); // Remove splash screen after high priority work is done const splash = document.getElementById('splash'); @@ -52,6 +56,8 @@ const App: Component = () => { + + diff --git a/src/components/Navigation.tsx b/src/components/Navigation.tsx index c21814f..0308d45 100644 --- a/src/components/Navigation.tsx +++ b/src/components/Navigation.tsx @@ -1,7 +1,8 @@ import { type Component, For, Show } from "solid-js"; -import { LayoutDashboard, ListTodo, Settings, Clock, ArrowUpCircle, PanelLeftClose } from "lucide-solid"; +import { LayoutDashboard, ListTodo, Settings, Clock, ArrowUpCircle, PanelLeftClose, Snowflake, Pickaxe, ChevronDown, Gauge, TrendingUp } from "lucide-solid"; import { cn } from "@/lib/utils"; import { Button } from "./ui/button"; +import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover"; interface NavItem { icon: any; @@ -9,29 +10,99 @@ interface NavItem { view: string; } -const navItems: NavItem[] = [ +// Desktop nav items (all) +const desktopNavItems: NavItem[] = [ { icon: ListTodo, label: "Focus", view: "critical" }, { icon: Clock, label: "Time", view: "urgency" }, { icon: ArrowUpCircle, label: "Priority", view: "priority" }, { icon: LayoutDashboard, label: "Matrix", view: "matrix" }, + { icon: Snowflake, label: "Snowball", view: "snowball" }, + { icon: Pickaxe, label: "Dig In", view: "dig_in" }, +]; + +// Mobile nav groups +interface MobileNavGroup { + icon: any; + label: string; + items?: NavItem[]; + view?: string; // Direct navigation (no sub-items) +} + +const mobileNavGroups: MobileNavGroup[] = [ + { icon: ListTodo, label: "Focus", view: "critical" }, + { icon: LayoutDashboard, label: "Matrix", view: "matrix" }, + { + icon: TrendingUp, label: "Value", items: [ + { icon: ArrowUpCircle, label: "Priority", view: "priority" }, + { icon: Clock, label: "Time", view: "urgency" }, + ] + }, + { + icon: Gauge, label: "Flow", items: [ + { icon: Snowflake, label: "Snowball", view: "snowball" }, + { icon: Pickaxe, label: "Dig In", view: "dig_in" }, + ] + }, { icon: Settings, label: "Settings", view: "settings" }, ]; export const BottomNav: Component<{ currentView: string; setView: (v: string) => void }> = (props) => { + const isGroupActive = (group: MobileNavGroup) => { + if (group.view) return props.currentView === group.view; + return group.items?.some(item => props.currentView === item.view) ?? false; + }; + return ( @@ -81,7 +152,7 @@ export const Sidebar: Component<{