diff --git a/app/mobile/layout.tsx b/app/mobile/layout.tsx index 1e5a4fe..6e12e88 100644 --- a/app/mobile/layout.tsx +++ b/app/mobile/layout.tsx @@ -1,50 +1,37 @@ 'use client'; -import Link from 'next/link'; -import { usePathname } from 'next/navigation'; -import { LayoutDashboard, Ticket, DollarSign, Menu } from 'lucide-react'; +/* Mobile shell — phase 02 (SHELL-01, SHELL-05). + * + * Header: (sticky, brand + Bell + avatar) + * Body:
(scrollable, padded so content clears the bottom nav) + * Foot: (fixed, 4 tabs + More) + * Drawer: opened from BOTH the header avatar and the More cell. + * + * The drawer's open state lives here so a single Sheet instance is shared + * between the two triggers — no duplicate Sheets, no prop-drilling sagas. */ -const NAV = [ - { href: '/mobile/dashboard', label: 'Dashboard', icon: LayoutDashboard }, - { href: '/mobile/tickets', label: 'Tickets', icon: Ticket }, - { href: '/mobile/finance', label: 'Finance', icon: DollarSign }, -]; +import { useState } from 'react'; +import { HeaderBar } from '@/components/mobile/HeaderBar'; +import { BottomNav } from '@/components/mobile/BottomNav'; +import { MoreDrawer } from '@/components/mobile/MoreDrawer'; export default function MobileLayout({ children }: { children: React.ReactNode }) { - const pathname = usePathname(); + const [drawerOpen, setDrawerOpen] = useState(false); return (
- {/* Top bar */} -
- Pulse - - - -
+ setDrawerOpen(true)} /> - {/* Page content */} -
+ {/* SHELL-05: scrollable content area; bottom padding = bottom-nav (h-16 + = 64px = pb-16) plus the device safe-area inset, so content never + hides under the bar. */} +
{children}
- {/* Bottom nav */} - + setDrawerOpen(true)} /> + +
); }