docs(storybook): MobileDrawer story for mobile-shell-parity verification

MOBILE-SHELL-PARITY subtask 5. Automated visual evidence via Playwright-CT is
not feasible — the CT harness loads only Vuetify styles (no Tailwind / PrimeVue
theme / PrimeVue plugin), so an AppSidebar screenshot renders unstyled. Add a
MobileDrawer Storybook story instead (Storybook DOES register PrimeVue + load
Tailwind via preview.ts) as the manual visual-verification target for all three
defects: single non-overlapping close X, expanded brand row/logo, and the
bottom-anchored WorkspaceSwitcher. Narrow the window <1024px to mount the drawer
(no viewport addon in this repo's Storybook).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-03 03:50:50 +02:00
parent 31e79f79c3
commit 08bfce76fc

View File

@@ -68,3 +68,52 @@ export const Collapsed: Story = {
`,
}),
}
/**
* Mobile (< lg) drawer, open — MOBILE-SHELL-PARITY visual verification target.
*
* Verify against the desktop sidebar:
* - defect 2: a SINGLE close control (X, "Sluit menu") at the top-right of
* the brand row, NOT overlapping the logo. PrimeVue's default header X is
* force-hidden (`header: '!hidden'`), so there must be no second X.
* - defect 1: the brand row renders EXPANDED (logo + "Crewli" wordmark +
* Beta pill) regardless of the desktop collapse state.
* - defect 3: the WorkspaceSwitcher is anchored at the BOTTOM of the drawer,
* fully visible (not clipped).
*
* The Drawer mounts only when isMobile (viewport < 1024px). This repo's
* Storybook has no viewport addon, so narrow the browser window to < 1024px
* (≈ 375px) to render the drawer. The parameters.viewport hint below takes
* effect if @storybook/addon-viewport is later added to .storybook/main.ts.
*/
export const MobileDrawer: Story = {
parameters: {
viewport: {
viewports: {
mobile375: { name: 'Mobile 375', styles: { width: '375px', height: '720px' } },
},
defaultViewport: 'mobile375',
},
},
decorators: [
withPinia(() => {
const auth = useAuthStore()
auth.user = userFixture
auth.organisations = [orgA]
const shellUi = useShellUiStore()
shellUi.sidebarCollapsed = false
shellUi.mobileOpen = true
}),
],
render: () => ({
components: { AppSidebar },
template: `
<div class="h-[720px]">
<AppSidebar />
</div>
`,
}),
}