From 3cbf2444feafe8f093761f8eed4a5c86c43dd11d Mon Sep 17 00:00:00 2001 From: Matt Ciaccio Date: Wed, 29 Apr 2026 14:15:25 +0200 Subject: [PATCH] feat(mobile): add MoreSheet (3-column grid of long-tail nav items in a bottom drawer) --- src/components/layout/mobile/more-sheet.tsx | 85 +++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 src/components/layout/mobile/more-sheet.tsx diff --git a/src/components/layout/mobile/more-sheet.tsx b/src/components/layout/mobile/more-sheet.tsx new file mode 100644 index 0000000..d0d03d3 --- /dev/null +++ b/src/components/layout/mobile/more-sheet.tsx @@ -0,0 +1,85 @@ +'use client'; + +import Link from 'next/link'; +import { usePathname } from 'next/navigation'; +import { + Building2, + Bookmark, + Receipt, + FileText, + FolderOpen, + Mail, + Bell, + ShieldAlert, + BarChart3, + Settings, + Shield, +} from 'lucide-react'; + +import { + Drawer, + DrawerContent, + DrawerHeader, + DrawerTitle, + DrawerClose, +} from '@/components/shared/drawer'; + +type MoreItem = { + label: string; + icon: typeof Building2; + segment: string; +}; + +const MORE_ITEMS: MoreItem[] = [ + { label: 'Companies', icon: Building2, segment: 'companies' }, + { label: 'Interests', icon: Bookmark, segment: 'interests' }, + { label: 'Invoices', icon: FileText, segment: 'invoices' }, + { label: 'Expenses', icon: Receipt, segment: 'expenses' }, + { label: 'Documents', icon: FolderOpen, segment: 'documents' }, + { label: 'Email', icon: Mail, segment: 'email' }, + { label: 'Alerts', icon: ShieldAlert, segment: 'alerts' }, + { label: 'Reports', icon: BarChart3, segment: 'reports' }, + { label: 'Reminders', icon: Bell, segment: 'reminders' }, + { label: 'Settings', icon: Settings, segment: 'settings' }, + { label: 'Admin', icon: Shield, segment: 'admin' }, +]; + +export function MoreSheet({ + open, + onOpenChange, +}: { + open: boolean; + onOpenChange: (next: boolean) => void; +}) { + const pathname = usePathname(); + const portSlug = pathname.split('/').filter(Boolean)[0] ?? 'port-nimara'; + + return ( + + + + More + +
    + {MORE_ITEMS.map((item) => { + const Icon = item.icon; + return ( +
  • + + + + {item.label} + + +
  • + ); + })} +
+
+
+ ); +}