Storybook stories for the `MobileNavPanel` component, covering default chrome, custom styling, disabled footer states, and a short-viewport scrolling regression test. ## Key Components | Export | Description | |---|---| | `Default` | Standard panel with auth footer (`Sign Up` button) using `bg-ods-card` chrome | | `CustomChrome` | Flamingo-style panel with custom `className` override via `config.className` | | `DisabledFooter` | TMCG-style panel with a disabled footer button and a `StatusBadge` "Coming Soon" indicator | | `ShortViewportLongList` | Regression story validating scroll + pinned footer behavior on short viewports (~660px tall) with 30 items | | `PanelHarness` | Internal render helper managing `isOpen` state with a toggle button | ## Usage Example ```typescript import { MobileNavPanel } from '../components/navigation/mobile-nav-panel' import type { MobileNavConfig } from '../types/navigation' const sections: MobileNavConfig['sections'] = [ { title: 'Product', items: [ { id: 'home', label: 'Home', href: '/', isActive: true }, { id: 'pricing', label: 'Pricing', href: '/pricing' }, ], }, ] function MyNav() { const [open, setOpen] = useState(false) return ( setOpen(false), footer: , }} /> ) } ``` ## Notes - All stories use `layout: 'fullscreen'` for realistic viewport simulation. - `PanelHarness` wraps each story to provide controlled open/close state without boilerplate. - `ShortViewportLongList` exists specifically to guard against regressions where the footer scrolls off-screen; test it at ~660px viewport height. - `config.className` accepts Tailwind classes to override default panel chrome per-product (OpenMSP vs Flamingo vs TMCG). **Source:** [`MobileNavPanel.stories.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/MobileNavPanel.stories.tsx)