import type { Meta, StoryObj } from '@storybook/nextjs-vite';
import { fn } from 'storybook/test';
import { TimeTrackerProvider } from '../components/features/time-tracker';
import { AppHeader } from '../components/navigation/app-header';
const trackerCallbacks = {
onSelectedTicketChange: fn(),
onNotesChange: fn(),
onStart: fn(),
onPause: fn(),
onResume: fn(),
onCancel: fn(),
onSubmit: fn(),
};
const meta = {
title: 'Navigation/AppHeader',
component: AppHeader,
parameters: {
layout: 'fullscreen',
docs: {
description: {
component:
'Console top bar built on the unified `TopNavigation` shell (Figma 2797-5978): 48px mobile / 56px md+, ' +
'cell model with per-cell dividers. Cells left→right: burger + logo (mobile only), global search (md+), ' +
'organizations filter (lg+), time tracker, notifications, user menu (md+), Mingo AI. ' +
'Resize the viewport across 800px / 1280px to see the responsive arrangement.',
},
},
},
tags: ['autodocs'],
args: {
isMobileMenuOpen: false,
onToggleMobileMenu: fn(),
},
decorators: [
Story => (
),
],
} satisfies Meta;
export default meta;
type Story = StoryObj;
/**
* Everything the console mounts: search, organizations filter, notifications,
* user menu and the Mingo AI launcher.
*/
export const Default: Story = {
args: {
showSearch: true,
onSearch: fn(),
showOrganizations: true,
organizations: [
{ id: '1', name: 'Acme Corp' },
{ id: '2', name: 'Globex' },
],
selectedOrgId: '1',
onOrgChange: fn(),
showNotifications: true,
unreadCount: 3,
showUser: true,
userName: 'Jane Doe',
userEmail: 'jane@example.com',
onProfile: fn(),
onLogout: fn(),
showMingoAI: true,
onMingoAI: fn(),
},
};
/**
* Minimal bar — no search or organizations, so the center zone is just the
* spacer pushing the action cells right (the current OpenFrame FE setup).
*/
export const Minimal: Story = {
args: {
showNotifications: true,
showUser: true,
userName: 'Jane Doe',
userEmail: 'jane@example.com',
showMingoAI: true,
onMingoAI: fn(),
},
};
/**
* Idle time tracker: a square icon cell, same footprint as the other cells.
*/
export const WithTimeTrackerIdle: Story = {
args: {
...Minimal.args,
showTimeTracker: true,
},
render: args => (
),
};
/**
* Active time tracker per the ODS spec: on mobile the cell keeps its square
* icon-only footprint (accent icon, no digits); from md up it becomes a fixed
* 144px cell with the live mono clock.
*/
export const WithTimeTrackerActive: Story = {
args: {
...Minimal.args,
showTimeTracker: true,
},
render: args => (
),
};
/**
* Disabled (subscription-lock) state: every cell is dimmed and inert except
* the mobile burger toggle.
*/
export const Disabled: Story = {
args: {
...Default.args,
disabled: true,
},
};