@goliapkg/gds 2.1.2 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/dist/a11y-CoNNB_xa.js +6 -0
  2. package/dist/a11y-CoNNB_xa.js.map +1 -0
  3. package/dist/{avatar-Ct8OOGx6.js → avatar-oCar1zX6.js} +2 -2
  4. package/dist/{avatar-Ct8OOGx6.js.map → avatar-oCar1zX6.js.map} +1 -1
  5. package/dist/{badge-BCvi5RVF.js → badge-B3ijD3ch.js} +2 -2
  6. package/dist/{badge-BCvi5RVF.js.map → badge-B3ijD3ch.js.map} +1 -1
  7. package/dist/{button-BD3VHhwq.js → button-fRpdsI_4.js} +15 -41
  8. package/dist/button-fRpdsI_4.js.map +1 -0
  9. package/dist/dist-qdXk1a7h.js +35 -0
  10. package/dist/dist-qdXk1a7h.js.map +1 -0
  11. package/dist/{dom-17XgfxMq.js → dom-DkPgnDHP.js} +1 -1
  12. package/dist/{dom-17XgfxMq.js.map → dom-DkPgnDHP.js.map} +1 -1
  13. package/dist/editor/index.d.ts +11 -0
  14. package/dist/editor/index.d.ts.map +1 -0
  15. package/dist/editor/index.js +1250 -0
  16. package/dist/editor/index.js.map +1 -0
  17. package/dist/email-composer-field-UoKh5XMX.js +178 -0
  18. package/dist/email-composer-field-UoKh5XMX.js.map +1 -0
  19. package/dist/{gesture-I79dlTuS.js → gesture-CVcSA-iZ.js} +1 -1
  20. package/dist/{gesture-I79dlTuS.js.map → gesture-CVcSA-iZ.js.map} +1 -1
  21. package/dist/{highlight-BAGZc-4h.js → highlight-pgwGrmcq.js} +1 -1
  22. package/dist/{highlight-BAGZc-4h.js.map → highlight-pgwGrmcq.js.map} +1 -1
  23. package/dist/{hooks-BE-_EmDI.js → hooks-CejfTXVD.js} +1 -1
  24. package/dist/{hooks-BE-_EmDI.js.map → hooks-CejfTXVD.js.map} +1 -1
  25. package/dist/{icon-button-Bns79124.js → icon-button-CR2GECEZ.js} +3 -3
  26. package/dist/{icon-button-Bns79124.js.map → icon-button-CR2GECEZ.js.map} +1 -1
  27. package/dist/index.js +30 -27
  28. package/dist/l2-primitives/index.js +11 -11
  29. package/dist/{l2-primitives-Cn0KNxbB.js → l2-primitives-D503ozjH.js} +4 -4
  30. package/dist/{l2-primitives-Cn0KNxbB.js.map → l2-primitives-D503ozjH.js.map} +1 -1
  31. package/dist/l3-atoms/index.js +6 -5
  32. package/dist/{l3-atoms-BCJNqPHk.js → l3-atoms-CumlHlnP.js} +54 -53
  33. package/dist/{l3-atoms-BCJNqPHk.js.map → l3-atoms-CumlHlnP.js.map} +1 -1
  34. package/dist/l4-molecules/index.js +5 -4
  35. package/dist/{l4-molecules-DtNnQaFU.js → l4-molecules-CWwgFWmO.js} +125 -124
  36. package/dist/{l4-molecules-DtNnQaFU.js.map → l4-molecules-CWwgFWmO.js.map} +1 -1
  37. package/dist/l5-organisms/index.d.ts +0 -10
  38. package/dist/l5-organisms/index.d.ts.map +1 -1
  39. package/dist/l5-organisms/index.js +2 -2
  40. package/dist/{l5-organisms-Bu2Z8LSj.js → l5-organisms-QcvIAoHr.js} +1310 -2548
  41. package/dist/l5-organisms-QcvIAoHr.js.map +1 -0
  42. package/dist/l6-charts/index.js +1 -1
  43. package/dist/{l6-charts-uSpVyFWS.js → l6-charts-DKNVGuo0.js} +1 -1
  44. package/dist/{l6-charts-uSpVyFWS.js.map → l6-charts-DKNVGuo0.js.map} +1 -1
  45. package/dist/l7-patterns/index.js +1 -1
  46. package/dist/{l7-patterns-CwonNW9o.js → l7-patterns-CM3FUxjA.js} +34 -34
  47. package/dist/{l7-patterns-CwonNW9o.js.map → l7-patterns-CM3FUxjA.js.map} +1 -1
  48. package/dist/loading-dots-CjzCz938.js +24 -0
  49. package/dist/loading-dots-CjzCz938.js.map +1 -0
  50. package/dist/motion-CKB1OKVd.js +22 -0
  51. package/dist/motion-CKB1OKVd.js.map +1 -0
  52. package/dist/{portal-Bbl6F_Wj.js → portal-B7bfstxv.js} +1 -1
  53. package/dist/{portal-Bbl6F_Wj.js.map → portal-B7bfstxv.js.map} +1 -1
  54. package/dist/{progress-dZIQEiTw.js → progress-B81FKPw5.js} +2 -2
  55. package/dist/{progress-dZIQEiTw.js.map → progress-B81FKPw5.js.map} +1 -1
  56. package/dist/{resize-handle-BjSNhgJK.js → resize-handle-BFffbhyG.js} +2 -2
  57. package/dist/{resize-handle-BjSNhgJK.js.map → resize-handle-BFffbhyG.js.map} +1 -1
  58. package/dist/{sanitize-BF45M9xp.js → sanitize-CO5dRqZX.js} +1 -1
  59. package/dist/{sanitize-BF45M9xp.js.map → sanitize-CO5dRqZX.js.map} +1 -1
  60. package/dist/{separator-CRll1Ycp.js → separator-wAUWmxji.js} +2 -2
  61. package/dist/{separator-CRll1Ycp.js.map → separator-wAUWmxji.js.map} +1 -1
  62. package/dist/{skeleton-C9FFZSYN.js → skeleton-DhqLfA7r.js} +1 -1
  63. package/dist/{skeleton-C9FFZSYN.js.map → skeleton-DhqLfA7r.js.map} +1 -1
  64. package/dist/{spinner-C15eER04.js → spinner-BimzKtfC.js} +3 -3
  65. package/dist/{spinner-C15eER04.js.map → spinner-BimzKtfC.js.map} +1 -1
  66. package/dist/{stepper-DJ8pn-9D.js → stepper-BINbai2f.js} +4 -4
  67. package/dist/{stepper-DJ8pn-9D.js.map → stepper-BINbai2f.js.map} +1 -1
  68. package/dist/{switch-BAS-GXJV.js → switch-COzaggYE.js} +3 -3
  69. package/dist/{switch-BAS-GXJV.js.map → switch-COzaggYE.js.map} +1 -1
  70. package/dist/{textarea-Btdu41rY.js → textarea-DD1huKel.js} +3 -3
  71. package/dist/{textarea-Btdu41rY.js.map → textarea-DD1huKel.js.map} +1 -1
  72. package/dist/toast-BujeTn1T.js +442 -0
  73. package/dist/toast-BujeTn1T.js.map +1 -0
  74. package/dist/{loading-dots-C1LPHGa0.js → tooltip-BlvhLCp0.js} +2 -17
  75. package/dist/tooltip-BlvhLCp0.js.map +1 -0
  76. package/dist/utils/index.js +8 -7
  77. package/package.json +5 -1
  78. package/dist/button-BD3VHhwq.js.map +0 -1
  79. package/dist/l5-organisms-Bu2Z8LSj.js.map +0 -1
  80. package/dist/loading-dots-C1LPHGa0.js.map +0 -1
  81. package/dist/motion-DUPegem-.js +0 -22
  82. package/dist/motion-DUPegem-.js.map +0 -1
  83. package/dist/toast-QxCZG0Oy.js +0 -614
  84. package/dist/toast-QxCZG0Oy.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"l7-patterns-CwonNW9o.js","names":[],"sources":["../src/l7-patterns/action-bar.tsx","../src/l7-patterns/admin-layout.tsx","../src/l7-patterns/analytics-dashboard.tsx","../src/l7-patterns/app-shell.tsx","../src/l7-patterns/bento-grid.tsx","../src/l7-patterns/calendar-view.tsx","../src/l7-patterns/comparison-table.tsx","../src/l7-patterns/composition-pattern.tsx","../src/l7-patterns/cta-banner.tsx","../src/l7-patterns/dashboard-layout.tsx","../src/l7-patterns/data-export-card.tsx","../src/l7-patterns/devops-layout.tsx","../src/l7-patterns/empty-state.tsx","../src/l7-patterns/faq.tsx","../src/l7-patterns/feature-card.tsx","../src/l7-patterns/footer.tsx","../src/l7-patterns/form-layout.tsx","../src/l7-patterns/form-pattern.tsx","../src/l7-patterns/glass-panel.tsx","../src/l7-patterns/grid-layout.tsx","../src/l7-patterns/hero.tsx","../src/l7-patterns/hr-dashboard.tsx","../src/l7-patterns/inbox-layout.tsx","../src/l7-patterns/metric-card.tsx","../src/l7-patterns/kpi-dashboard.tsx","../src/l7-patterns/loading-states.tsx","../src/l7-patterns/login-form.tsx","../src/l7-patterns/mail-composer.tsx","../src/l7-patterns/masonry.tsx","../src/l7-patterns/media-grid.tsx","../src/l7-patterns/mini-dashboard.tsx","../src/l7-patterns/monitor-grid.tsx","../src/l7-patterns/nav-bar.tsx","../src/l7-patterns/notification-list.tsx","../src/l7-patterns/onboarding-card.tsx","../src/l7-patterns/page-header.tsx","../src/l7-patterns/panel-group.tsx","../src/l7-patterns/payroll-dashboard.tsx","../src/l7-patterns/pricing-card.tsx","../src/l7-patterns/profile-card.tsx","../src/l7-patterns/project-dashboard.tsx","../src/l7-patterns/responsive-container.tsx","../src/l7-patterns/server-overview.tsx","../src/l7-patterns/settings-layout.tsx","../src/l7-patterns/sidebar.tsx","../src/l7-patterns/skeleton-pattern.tsx","../src/l7-patterns/splash-screen.tsx","../src/l7-patterns/split-view.tsx","../src/l7-patterns/stat.tsx","../src/l7-patterns/stat-grid.tsx","../src/l7-patterns/stats-card.tsx","../src/l7-patterns/status-page.tsx","../src/l7-patterns/stepper-form.tsx","../src/l7-patterns/sticky-header.tsx","../src/l7-patterns/testimonial.tsx","../src/l7-patterns/timeline-steps.tsx","../src/l7-patterns/toolbar.tsx","../src/l7-patterns/wizard-layout.tsx"],"sourcesContent":["// action-bar — sticky bottom/top action bar for forms and bulk operations\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\ntype ActionBarPosition = 'bottom' | 'top'\ntype ActionBarJustify = 'between' | 'center' | 'end' | 'start'\n\nexport type ActionBarProps = {\n children: ReactNode\n className?: string\n glass?: boolean\n justify?: ActionBarJustify\n position?: ActionBarPosition\n}\n\nconst justifyMap: Record<ActionBarJustify, string> = {\n between: 'justify-between',\n center: 'justify-center',\n end: 'justify-end',\n start: 'justify-start',\n}\n\nexport const ActionBar = forwardRef<HTMLDivElement, ActionBarProps>(\n function ActionBar(\n { children, className, glass = true, justify = 'end', position = 'bottom' },\n ref\n ) {\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-pad-x-lg gds-pad-y sticky z-10 flex items-center',\n position === 'bottom' ? 'bottom-0 border-t' : 'top-0 border-b',\n justifyMap[justify],\n glass === true\n ? cx(glassClass(glass), 'bg-bg/60 border-white/10')\n : 'border-border bg-surface',\n className\n )}\n data-component=\"action-bar\"\n >\n {children}\n </div>\n )\n }\n)\n","// admin-layout — full admin application layout with sidebar + topbar + content\n// supports mobile responsive drawer mode via Sheet\nimport type { ReactNode } from 'react'\nimport { forwardRef, useState } from 'react'\n\nimport { Sheet } from '../l4-molecules/sheet'\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\nimport { useIsMobile } from '../utils/hooks'\n\ntype AdminLayoutProps = {\n sidebar: ReactNode\n topbar?: ReactNode\n children: ReactNode\n sidebarWidth?: number\n sidebarCollapsible?: boolean\n sidebarDefaultCollapsed?: boolean\n mobileDrawer?: boolean\n topbarHeight?: number\n topbarSticky?: boolean\n logo?: ReactNode\n className?: string\n}\n\n// simple 3-line hamburger icon — no lucide dependency in L7\nfunction HamburgerIcon() {\n return (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n >\n <path d=\"M3 5h14M3 10h14M3 15h14\" />\n </svg>\n )\n}\n\n// collapse/expand chevron icon\nfunction CollapseIcon({ collapsed }: { collapsed: boolean }) {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={cx(\n 'transition-transform duration-200',\n collapsed && 'rotate-180'\n )}\n >\n <path d=\"M10 3L5 8l5 5\" />\n </svg>\n )\n}\n\nconst AdminLayout = forwardRef<HTMLDivElement, AdminLayoutProps>(\n function AdminLayout(\n {\n sidebar,\n topbar,\n children,\n sidebarWidth = 240,\n sidebarCollapsible = true,\n sidebarDefaultCollapsed = false,\n mobileDrawer = true,\n topbarHeight = 48,\n topbarSticky = true,\n logo,\n className,\n },\n ref\n ) {\n const isMobile = useIsMobile()\n const [drawerOpen, setDrawerOpen] = useState(false)\n const [collapsed, setCollapsed] = useState(sidebarDefaultCollapsed)\n\n const showMobileDrawer = mobileDrawer && isMobile\n const effectiveSidebarWidth = collapsed ? 56 : sidebarWidth\n\n return (\n <div\n ref={ref}\n className={cx('bg-bg flex h-screen min-h-0', className)}\n data-component=\"admin-layout\"\n >\n {/* desktop sidebar */}\n {!showMobileDrawer && (\n <aside\n className=\"border-border bg-surface relative shrink-0 overflow-y-auto border-r transition-[width] duration-200\"\n style={{ width: effectiveSidebarWidth }}\n >\n {logo !== undefined && (\n <div\n className=\"border-border flex items-center border-b px-3\"\n style={{ height: topbarHeight }}\n >\n {logo}\n </div>\n )}\n <div className={cx(collapsed && 'overflow-hidden')}>{sidebar}</div>\n {sidebarCollapsible && (\n <button\n type=\"button\"\n onClick={() => setCollapsed((prev) => !prev)}\n className={cx(\n 'text-fg-muted hover:text-fg hover:bg-surface-hover absolute right-2 bottom-3 flex h-6 w-6 items-center justify-center rounded-md',\n focusCls\n )}\n aria-label={collapsed ? 'Expand sidebar' : 'Collapse sidebar'}\n >\n <CollapseIcon collapsed={collapsed} />\n </button>\n )}\n </aside>\n )}\n\n {/* mobile drawer */}\n {showMobileDrawer && (\n <Sheet\n open={drawerOpen}\n onClose={() => setDrawerOpen(false)}\n side=\"left\"\n width={sidebarWidth}\n >\n {logo !== undefined && <div className=\"mb-2\">{logo}</div>}\n {sidebar}\n </Sheet>\n )}\n\n <div className=\"flex min-w-0 flex-1 flex-col\">\n {/* topbar — always render if mobile (for hamburger), or if topbar content provided */}\n {(topbar !== undefined || showMobileDrawer) && (\n <header\n className={cx(\n 'border-border bg-surface/80 z-10 flex shrink-0 items-center border-b backdrop-blur-sm',\n topbarSticky && 'sticky top-0'\n )}\n style={{ height: topbarHeight }}\n >\n {showMobileDrawer && (\n <button\n type=\"button\"\n onClick={() => setDrawerOpen(true)}\n className={cx(\n 'text-fg-muted hover:text-fg hover:bg-surface-hover ml-2 flex h-9 w-9 items-center justify-center rounded-md',\n focusCls\n )}\n aria-label=\"Open sidebar menu\"\n data-testid=\"admin-layout-hamburger\"\n >\n <HamburgerIcon />\n </button>\n )}\n {topbar !== undefined && (\n <div className=\"min-w-0 flex-1\">{topbar}</div>\n )}\n </header>\n )}\n <main className=\"flex-1 overflow-auto\">{children}</main>\n </div>\n </div>\n )\n }\n)\n\nexport { AdminLayout }\nexport type { AdminLayoutProps }\n","import type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype AnalyticsDashboardProps = {\n charts?: ReactNode\n className?: string\n data?: ReactNode\n metrics?: ReactNode\n}\n\nconst AnalyticsDashboard = forwardRef<HTMLDivElement, AnalyticsDashboardProps>(\n function AnalyticsDashboard({ charts, className, data, metrics }, ref) {\n return (\n <div\n className={cx('gds-gap flex flex-col', className)}\n data-component=\"analytics-dashboard\"\n ref={ref}\n >\n {metrics !== undefined && (\n <section className=\"gds-gap flex flex-wrap\" data-slot=\"metrics\">\n {metrics}\n </section>\n )}\n {charts !== undefined && (\n <section className=\"gds-gap flex flex-col\" data-slot=\"charts\">\n {charts}\n </section>\n )}\n {data !== undefined && (\n <section className=\"gds-gap flex flex-col\" data-slot=\"data\">\n {data}\n </section>\n )}\n </div>\n )\n }\n)\n\nexport { AnalyticsDashboard }\nexport type { AnalyticsDashboardProps }\n","// app-shell — root application layout with sidebar, content, status bar, and mobile nav\n// the outermost frame for mailrs-style applications\n// desktop: sidebar + content + optional status bar\n// mobile: content + bottom nav, sidebar hidden\n\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\nimport { useIsMobile } from '../utils/hooks'\n\nexport type AppShellProps = React.HTMLAttributes<HTMLDivElement> & {\n /** sidebar slot (left or right) */\n sidebar?: ReactNode\n /** main content area */\n children: ReactNode\n /** bottom status bar (hidden on mobile) */\n statusBar?: ReactNode\n /** bottom navigation on mobile (hidden on desktop) */\n mobileNav?: ReactNode\n\n /** sidebar width in px, default 56 (icon-only like mailrs) */\n sidebarWidth?: number\n /** sidebar position */\n sidebarPosition?: 'left' | 'right'\n\n /** add padding around content, default true */\n padded?: boolean\n /** gap between sidebar and content in px, default 0 */\n gap?: number\n\n /** frosted glass effect */\n glass?: boolean\n className?: string\n}\n\nexport const AppShell = forwardRef<HTMLDivElement, AppShellProps>(\n function AppShell(\n {\n sidebar,\n children,\n statusBar,\n mobileNav,\n sidebarWidth = 56,\n sidebarPosition = 'left',\n padded = false,\n gap = 0,\n glass,\n className,\n ...props\n },\n ref\n ) {\n const isMobile = useIsMobile()\n\n return (\n <div\n {...props}\n ref={ref}\n className={cx(\n 'bg-bg fixed inset-0 flex flex-col',\n glassClass(glass),\n className\n )}\n data-component=\"app-shell\"\n >\n {/* main area: sidebar + content */}\n <div\n className={cx(\n 'flex min-h-0 flex-1',\n sidebarPosition === 'right' && 'flex-row-reverse'\n )}\n style={gap > 0 ? { gap } : undefined}\n >\n {/* sidebar — hidden on mobile */}\n {sidebar !== undefined && !isMobile && (\n <div\n className=\"shrink-0 overflow-hidden\"\n style={{ width: sidebarWidth }}\n >\n {sidebar}\n </div>\n )}\n\n {/* content area */}\n <div\n className={cx(\n 'flex min-w-0 flex-1 flex-col overflow-hidden',\n padded && 'p-1.5 md:p-1.5'\n )}\n >\n {children}\n </div>\n </div>\n\n {/* status bar — desktop only */}\n {statusBar !== undefined && !isMobile && (\n <div\n className=\"border-border bg-bg-secondary shrink-0 border-t\"\n data-component=\"app-shell-status-bar\"\n >\n {statusBar}\n </div>\n )}\n\n {/* mobile nav — bottom, mobile only */}\n {mobileNav !== undefined && isMobile && (\n <div\n className=\"border-border bg-bg-secondary shrink-0 border-t\"\n data-component=\"app-shell-mobile-nav\"\n >\n {mobileNav}\n </div>\n )}\n </div>\n )\n }\n)\n","// bento-grid — bento box grid layout where items can span multiple rows/columns\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype BentoGap = 'default' | 'lg' | 'sm'\n\nexport type BentoGridProps = {\n children: ReactNode\n columns?: number\n gap?: BentoGap\n className?: string\n}\n\nconst gapMap: Record<BentoGap, string> = {\n sm: 'gds-gap-sm',\n default: 'gds-gap',\n lg: 'gds-gap-lg',\n}\n\nconst colClass = (n: number): string => {\n const map: Record<number, string> = {\n 1: 'grid-cols-1',\n 2: 'grid-cols-2',\n 3: 'grid-cols-3',\n 4: 'grid-cols-4',\n 5: 'grid-cols-5',\n 6: 'grid-cols-6',\n }\n return map[n] ?? `grid-cols-${n}`\n}\n\nexport const BentoGrid = forwardRef<HTMLDivElement, BentoGridProps>(\n function BentoGrid(\n { children, columns = 4, gap = 'default', className },\n ref\n ) {\n return (\n <div\n ref={ref}\n className={cx(\n 'grid auto-rows-[minmax(120px,auto)]',\n colClass(columns),\n gapMap[gap],\n className\n )}\n data-component=\"bento-grid\"\n >\n {children}\n </div>\n )\n }\n)\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype CalendarEvent = {\n color?: string\n date: number\n label: string\n}\n\ntype CalendarViewProps = React.HTMLAttributes<HTMLDivElement> & {\n events?: CalendarEvent[]\n month: number\n onDateClick?: (date: number) => void\n year: number\n}\n\nconst WEEKDAYS = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']\n\nexport const CalendarView = forwardRef<HTMLDivElement, CalendarViewProps>(\n function CalendarView(\n { className, events = [], month, onDateClick, year, ...props },\n ref\n ) {\n const firstDay = new Date(year, month - 1, 1).getDay()\n const daysInMonth = new Date(year, month, 0).getDate()\n const cells: (number | null)[] = []\n\n for (let i = 0; i < firstDay; i++) cells.push(null)\n for (let d = 1; d <= daysInMonth; d++) cells.push(d)\n\n const eventsByDate = new Map<number, CalendarEvent[]>()\n for (const ev of events) {\n const existing = eventsByDate.get(ev.date) ?? []\n eventsByDate.set(ev.date, [...existing, ev])\n }\n\n return (\n <div\n className={cx('flex flex-col gap-1', className)}\n data-component=\"calendar-view\"\n ref={ref}\n {...props}\n >\n <div className=\"grid grid-cols-7 gap-1\">\n {WEEKDAYS.map((d) => (\n <div\n className=\"text-fg-muted py-1 text-center text-xs font-medium\"\n key={d}\n >\n {d}\n </div>\n ))}\n {cells.map((day, i) => {\n const dayEvents = day !== null ? (eventsByDate.get(day) ?? []) : []\n return (\n <div\n className={cx(\n 'flex min-h-[36px] flex-col items-center rounded p-1 text-xs',\n day !== null && 'text-fg hover:bg-accent/10 cursor-pointer',\n day === null && 'pointer-events-none'\n )}\n key={i}\n onClick={() => {\n if (day !== null && onDateClick !== undefined)\n onDateClick(day)\n }}\n >\n {day !== null && <span>{day}</span>}\n {dayEvents.length > 0 && (\n <div className=\"mt-0.5 flex gap-0.5\">\n {dayEvents.slice(0, 3).map((ev, j) => (\n <span\n className=\"h-1 w-1 rounded-full\"\n key={j}\n style={{\n backgroundColor: ev.color ?? 'var(--color-accent)',\n }}\n title={ev.label}\n />\n ))}\n </div>\n )}\n </div>\n )\n })}\n </div>\n </div>\n )\n }\n)\n\nexport type { CalendarEvent, CalendarViewProps }\n","// comparison-table — feature comparison grid for pricing and plan comparison\nimport { cx } from '../utils/cx'\n\nexport type ComparisonPlan = {\n name: string\n values: (boolean | string)[]\n}\n\nexport type ComparisonTableProps = {\n features: string[]\n plans: ComparisonPlan[]\n highlightColumn?: number\n glass?: boolean\n className?: string\n}\n\nexport function ComparisonTable({\n features,\n plans,\n highlightColumn,\n glass,\n className,\n}: ComparisonTableProps) {\n return (\n <div\n data-component=\"comparison-table\"\n className={cx(\n 'gds-radius-card border-border overflow-hidden border',\n glass === true && 'bg-white/5 backdrop-blur-md',\n className\n )}\n >\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"border-border bg-bg-tertiary/30 border-b\">\n <th className=\"text-fg-muted px-4 py-3 text-left text-xs font-medium\">\n Feature\n </th>\n {plans.map((plan, i) => (\n <th\n key={plan.name}\n className={cx(\n 'text-fg px-4 py-3 text-center text-xs font-semibold',\n i === highlightColumn && 'bg-accent/5'\n )}\n >\n {plan.name}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {features.map((feature, fi) => (\n <tr\n key={feature}\n className={cx(\n fi < features.length - 1 && 'border-border/50 border-b'\n )}\n >\n <td className=\"text-fg px-4 py-2.5 text-xs\">{feature}</td>\n {plans.map((plan, pi) => {\n const val = plan.values[fi]\n return (\n <td\n key={plan.name}\n className={cx(\n 'px-4 py-2.5 text-center',\n pi === highlightColumn && 'bg-accent/5'\n )}\n >\n {typeof val === 'boolean' ? (\n val === true ? (\n <svg\n className=\"text-success mx-auto\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n data-icon=\"check\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n ) : (\n <svg\n className=\"text-fg-muted/40 mx-auto\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n data-icon=\"dash\"\n >\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\n </svg>\n )\n ) : (\n <span className=\"text-fg text-xs\">{val}</span>\n )}\n </td>\n )\n })}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )\n}\n","// composition-pattern — header + sidebar + content + footer layout composition\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\nexport type CompositionPatternProps = {\n header?: ReactNode\n sidebar?: ReactNode\n content: ReactNode\n footer?: ReactNode\n sidebarPosition?: 'left' | 'right'\n sidebarWidth?: number | string\n glass?: boolean\n className?: string\n}\n\nexport const CompositionPattern = forwardRef<\n HTMLDivElement,\n CompositionPatternProps\n>(function CompositionPattern(\n {\n header,\n sidebar,\n content,\n footer,\n sidebarPosition = 'left',\n sidebarWidth = 240,\n glass,\n className,\n },\n ref\n) {\n const width =\n typeof sidebarWidth === 'number' ? `${sidebarWidth}px` : sidebarWidth\n const isRight = sidebarPosition === 'right'\n\n const sidebarEl =\n sidebar !== undefined ? (\n <div\n className={cx(\n 'shrink-0 overflow-auto',\n isRight ? 'border-border border-l' : 'border-border border-r'\n )}\n style={{ width }}\n >\n {sidebar}\n </div>\n ) : null\n\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-ctx flex h-full flex-col',\n glassClass(glass),\n className\n )}\n data-component=\"composition-pattern\"\n >\n {header !== undefined && (\n <div className=\"border-border shrink-0 border-b\">{header}</div>\n )}\n <div className=\"flex min-h-0 flex-1\">\n {isRight ? null : sidebarEl}\n <div className=\"flex-1 overflow-auto\">{content}</div>\n {isRight ? sidebarEl : null}\n </div>\n {footer !== undefined && (\n <div className=\"border-border shrink-0 border-t\">{footer}</div>\n )}\n </div>\n )\n})\n","// cta-banner — call-to-action banner with prominent message and action buttons\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\ntype CTABannerVariant = 'default' | 'accent' | 'gradient'\n\nexport type CTABannerProps = {\n title: string\n description?: string\n actions: ReactNode\n variant?: CTABannerVariant\n glass?: boolean\n className?: string\n}\n\nexport const CTABanner = forwardRef<HTMLDivElement, CTABannerProps>(\n function CTABanner(\n { title, description, actions, variant = 'default', glass, className },\n ref\n ) {\n const variantClass =\n variant === 'accent'\n ? 'bg-accent text-accent-fg'\n : variant === 'gradient'\n ? 'bg-gradient-to-r from-accent to-success text-accent-fg'\n : glass === true\n ? cx(glassClass(glass), 'border border-white/10 bg-bg/60')\n : 'border border-border bg-surface'\n\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-ctx gds-radius-card gds-pad-x-lg gds-pad-y-lg w-full text-center',\n variantClass,\n className\n )}\n data-component=\"cta-banner\"\n data-variant={variant}\n >\n <h2\n className={cx(\n 'text-xl font-bold',\n variant === 'default' && 'text-fg'\n )}\n >\n {title}\n </h2>\n {description !== undefined && (\n <p\n className={cx(\n 'gds-text-body mt-2',\n variant === 'default' ? 'text-fg-muted' : 'opacity-80'\n )}\n >\n {description}\n </p>\n )}\n <div className=\"mt-4 flex items-center justify-center gap-3\">\n {actions}\n </div>\n </div>\n )\n }\n)\n","// dashboard-layout — full page layout with sidebar + header + content\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype DashboardLayoutProps = {\n sidebar: ReactNode\n header?: ReactNode\n children: ReactNode\n sidebarWidth?: number\n className?: string\n}\n\nconst DashboardLayout = forwardRef<HTMLDivElement, DashboardLayoutProps>(\n function DashboardLayout(\n { sidebar, header, children, sidebarWidth = 240, className },\n ref\n ) {\n return (\n <div\n ref={ref}\n className={cx('bg-bg flex h-full min-h-0', className)}\n data-component=\"dashboard-layout\"\n >\n <aside\n className=\"border-border bg-surface shrink-0 overflow-y-auto border-r\"\n style={{ width: sidebarWidth }}\n >\n {sidebar}\n </aside>\n <div className=\"flex min-w-0 flex-1 flex-col\">\n {header !== undefined && (\n <header className=\"border-border bg-surface/80 sticky top-0 z-10 shrink-0 border-b backdrop-blur-sm\">\n {header}\n </header>\n )}\n <main className=\"flex-1 overflow-auto\">{children}</main>\n </div>\n </div>\n )\n }\n)\n\nexport { DashboardLayout }\nexport type { DashboardLayoutProps }\n","// data-export-card — format selector + date range + export button\nimport { forwardRef, useState } from 'react'\n\nimport { Button } from '../l2-primitives/button'\nimport { cx } from '../utils/cx'\n\ntype DateRange = {\n from: string\n to: string\n}\n\ntype DataExportCardProps = Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'title'\n> & {\n formats: string[]\n onExport: (format: string, dateRange?: DateRange) => void\n title?: string\n}\n\nconst DataExportCard = forwardRef<HTMLDivElement, DataExportCardProps>(\n function DataExportCard(\n { formats, onExport, title = 'Export Data', className, ...props },\n ref\n ) {\n const [format, setFormat] = useState(formats[0] ?? '')\n const [from, setFrom] = useState('')\n const [to, setTo] = useState('')\n\n function handleExport() {\n const dateRange = from !== '' && to !== '' ? { from, to } : undefined\n onExport(format, dateRange)\n }\n\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-ctx border-border bg-surface gds-pad gds-shadow rounded-lg border',\n className\n )}\n data-component=\"data-export-card\"\n {...props}\n >\n <h3 className=\"gds-heading text-fg mb-3 font-medium select-none\">\n {title}\n </h3>\n <div className=\"flex flex-col gap-3\">\n <div className=\"flex flex-col gap-1\">\n <label className=\"text-fg-muted text-xs select-none\">Format</label>\n <select\n value={format}\n onChange={(e) => setFormat(e.target.value)}\n className=\"border-border bg-bg gds-text-body text-fg rounded border px-2 py-1.5\"\n >\n {formats.map((f) => (\n <option key={f} value={f}>\n {f}\n </option>\n ))}\n </select>\n </div>\n <div className=\"flex gap-2\">\n <div className=\"flex flex-1 flex-col gap-1\">\n <label className=\"text-fg-muted text-xs select-none\">From</label>\n <input\n type=\"date\"\n value={from}\n onChange={(e) => setFrom(e.target.value)}\n className=\"border-border bg-bg gds-text-body text-fg rounded border px-2 py-1.5\"\n />\n </div>\n <div className=\"flex flex-1 flex-col gap-1\">\n <label className=\"text-fg-muted text-xs select-none\">To</label>\n <input\n type=\"date\"\n value={to}\n onChange={(e) => setTo(e.target.value)}\n className=\"border-border bg-bg gds-text-body text-fg rounded border px-2 py-1.5\"\n />\n </div>\n </div>\n <Button type=\"button\" onClick={handleExport} className=\"mt-1\">\n Export\n </Button>\n </div>\n </div>\n )\n }\n)\n\nexport { DataExportCard }\nexport type { DataExportCardProps, DateRange }\n","import type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype DevOpsTab = { id: string; label: string }\n\ntype DevOpsLayoutProps = React.HTMLAttributes<HTMLDivElement> & {\n activeTab: string\n children: ReactNode\n onTabChange: (id: string) => void\n statusBar?: ReactNode\n tabs: DevOpsTab[]\n}\n\nexport const DevOpsLayout = forwardRef<HTMLDivElement, DevOpsLayoutProps>(\n function DevOpsLayout(\n { activeTab, children, className, onTabChange, statusBar, tabs, ...props },\n ref\n ) {\n return (\n <div\n className={cx('flex h-full flex-col', className)}\n data-component=\"devops-layout\"\n ref={ref}\n {...props}\n >\n <div className=\"border-border flex items-center gap-1 border-b px-2\">\n {tabs.map((tab) => (\n <button\n key={tab.id}\n className={cx(\n 'gds-text-label px-3 py-2 font-medium transition-colors',\n tab.id === activeTab\n ? 'border-accent text-accent border-b-2'\n : 'text-fg-muted hover:text-fg'\n )}\n onClick={() => onTabChange(tab.id)}\n type=\"button\"\n >\n {tab.label}\n </button>\n ))}\n </div>\n {statusBar !== undefined && (\n <div className=\"border-border border-b px-3 py-2\">{statusBar}</div>\n )}\n <div className=\"flex-1 overflow-auto\">{children}</div>\n </div>\n )\n }\n)\n\nexport type { DevOpsLayoutProps, DevOpsTab }\n","// empty-state — placeholder for sections with no content\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type EmptyStateProps = {\n title: string\n description?: string\n icon?: ReactNode\n action?: ReactNode\n className?: string\n}\n\nexport const EmptyState = forwardRef<HTMLDivElement, EmptyStateProps>(\n function EmptyState({ title, description, icon, action, className }, ref) {\n return (\n <div\n ref={ref}\n className={cx(\n 'flex flex-col items-center justify-center py-12',\n className\n )}\n data-component=\"empty-state\"\n >\n {icon !== undefined && (\n <div className=\"text-fg-muted/20 mb-3 flex h-12 w-12 items-center justify-center\">\n {icon}\n </div>\n )}\n <p className=\"gds-text-body text-fg font-medium\">{title}</p>\n {description !== undefined && (\n <p className=\"gds-text-body text-fg-muted mt-1\">{description}</p>\n )}\n {action !== undefined && <div className=\"mt-4\">{action}</div>}\n </div>\n )\n }\n)\n","// faq — frequently asked questions section with expandable answers\nimport { forwardRef } from 'react'\n\nimport { Accordion, AccordionItem } from '../l4-molecules/accordion'\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\nexport type FAQItem = {\n question: string\n answer: string\n}\n\nexport type FAQProps = {\n items: FAQItem[]\n title?: string\n glass?: boolean\n className?: string\n}\n\nexport const FAQ = forwardRef<HTMLDivElement, FAQProps>(function FAQ(\n { items, title = 'FAQ', glass, className },\n ref\n) {\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-ctx gds-radius-card gds-pad-x-lg gds-pad-y-lg border',\n glass === true\n ? cx(glassClass(glass), 'bg-bg/60 border-white/10')\n : 'border-border bg-surface',\n className\n )}\n data-component=\"faq\"\n >\n <h2 className=\"gds-heading text-fg mb-4 font-semibold\">{title}</h2>\n <Accordion type=\"single\">\n {items.map((item, i) => (\n <AccordionItem key={i} id={`faq-${i}`} title={item.question}>\n {item.answer}\n </AccordionItem>\n ))}\n </Accordion>\n </div>\n )\n})\n","// feature-card — feature showcase card with icon, title, description, and optional CTA\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\nexport type FeatureCardProps = {\n icon?: ReactNode\n title: string\n description?: string\n action?: ReactNode\n glass?: boolean\n className?: string\n}\n\nexport const FeatureCard = forwardRef<HTMLDivElement, FeatureCardProps>(\n function FeatureCard(\n { icon, title, description, action, glass, className },\n ref\n ) {\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-ctx gds-radius-card gds-pad-x-lg gds-pad-y-lg flex flex-col border',\n glass === true\n ? cx(glassClass(glass), 'bg-bg/60 border-white/10')\n : 'border-border bg-surface',\n className\n )}\n data-component=\"feature-card\"\n >\n {icon !== undefined && <div className=\"text-accent mb-3\">{icon}</div>}\n <p className=\"text-fg font-semibold\">{title}</p>\n {description !== undefined && (\n <p className=\"gds-text-body text-fg-muted mt-1\">{description}</p>\n )}\n {action !== undefined && <div className=\"mt-auto pt-4\">{action}</div>}\n </div>\n )\n }\n)\n","// footer — site footer with link columns and copyright\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\ntype FooterColumn = {\n title: string\n links: { label: string; href: string }[]\n}\n\nexport type FooterProps = {\n columns?: FooterColumn[]\n copyright?: string\n logo?: ReactNode\n glass?: boolean\n className?: string\n}\n\nexport const Footer = forwardRef<HTMLElement, FooterProps>(function Footer(\n { columns, copyright, logo, glass, className },\n ref\n) {\n return (\n <footer\n ref={ref}\n className={cx('w-full py-10', glass && glassClass(true), className)}\n data-component=\"footer\"\n >\n {columns !== undefined && columns.length > 0 && (\n <div className=\"grid grid-cols-2 gap-8 sm:grid-cols-3 lg:grid-cols-4\">\n {columns.map((col) => (\n <div key={col.title}>\n <h3 className=\"text-fg text-sm font-semibold\">{col.title}</h3>\n <ul className=\"mt-3 space-y-2\">\n {col.links.map((link) => (\n <li key={link.href}>\n <a\n href={link.href}\n className=\"text-fg-muted hover:text-fg text-sm\"\n >\n {link.label}\n </a>\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n )}\n <div\n className={cx(\n 'border-border flex items-center gap-3 border-t pt-6',\n columns !== undefined && columns.length > 0 && 'mt-8'\n )}\n >\n {logo !== undefined && <div>{logo}</div>}\n {copyright !== undefined && (\n <p className=\"text-fg-muted text-xs\">{copyright}</p>\n )}\n </div>\n </footer>\n )\n})\n","// form-layout — standard form container with header, body, and action footer\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type FormLayoutProps = {\n title?: string\n description?: string\n children: ReactNode\n actions?: ReactNode\n className?: string\n}\n\nexport const FormLayout = forwardRef<HTMLDivElement, FormLayoutProps>(\n function FormLayout(\n { title, description, children, actions, className },\n ref\n ) {\n const hasHeader = title !== undefined || description !== undefined\n\n return (\n <div\n ref={ref}\n className={cx('flex flex-col', className)}\n data-component=\"form-layout\"\n >\n {hasHeader && (\n <div className=\"mb-4\">\n {title !== undefined && (\n <h2 className=\"gds-text-body text-fg font-semibold\">{title}</h2>\n )}\n {description !== undefined && (\n <p className=\"gds-text-body text-fg-muted mt-0.5\">\n {description}\n </p>\n )}\n </div>\n )}\n <div className=\"gds-gap-lg flex flex-col\">{children}</div>\n {actions !== undefined && (\n <div className=\"gds-gap-sm mt-6 flex justify-end\">{actions}</div>\n )}\n </div>\n )\n }\n)\n","// form-pattern — sectioned form layout with title, description, and action bar\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { Separator } from '../l2-primitives/separator'\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\ntype FormSection = {\n title: string\n fields: ReactNode\n}\n\nexport type FormPatternProps = {\n title?: string\n description?: string\n sections: FormSection[]\n actions?: ReactNode\n glass?: boolean\n className?: string\n}\n\nexport const FormPattern = forwardRef<HTMLDivElement, FormPatternProps>(\n function FormPattern(\n { title, description, sections, actions, glass, className },\n ref\n ) {\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-ctx gds-pad gds-radius-card flex flex-col',\n glassClass(glass),\n className\n )}\n data-component=\"form-pattern\"\n >\n {(title !== undefined || description !== undefined) && (\n <div className=\"mb-4\">\n {title !== undefined && (\n <h2 className=\"gds-heading text-fg font-semibold\">{title}</h2>\n )}\n {description !== undefined && (\n <p className=\"gds-text-body text-fg-muted mt-1\">{description}</p>\n )}\n </div>\n )}\n {sections.map((section, i) => (\n <div key={section.title}>\n {i > 0 && <Separator className=\"my-4\" />}\n <div className=\"gds-gap flex flex-col\">\n <h3 className=\"gds-text-body text-fg font-medium\">\n {section.title}\n </h3>\n {section.fields}\n </div>\n </div>\n ))}\n {actions !== undefined && (\n <>\n <Separator className=\"my-4\" />\n <div className=\"gds-gap-sm flex justify-end\">{actions}</div>\n </>\n )}\n </div>\n )\n }\n)\n\nexport type { FormSection }\n","// glass-panel — translucent container with depth-aware glass material\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\ntype GlassPanelBlur = 'default' | 'lg' | 'sm'\ntype GlassPanelPadding = 'default' | 'lg' | 'none' | 'sm'\n\nconst paddingMap: Record<GlassPanelPadding, string> = {\n none: '',\n sm: 'gds-pad-x gds-pad-y',\n default: 'gds-pad-x-lg gds-pad-y-lg',\n lg: 'p-6',\n}\n\nconst blurToGlass: Record<GlassPanelBlur, Parameters<typeof glassClass>[0]> = {\n sm: 'sm',\n default: true,\n lg: 'lg',\n}\n\nexport type GlassPanelProps = {\n children: ReactNode\n blur?: GlassPanelBlur\n padding?: GlassPanelPadding\n className?: string\n}\n\nexport const GlassPanel = forwardRef<HTMLDivElement, GlassPanelProps>(\n function GlassPanel(\n { children, blur = 'default', padding = 'default', className },\n ref\n ) {\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-ctx gds-radius-card border border-white/10',\n glassClass(blurToGlass[blur]),\n paddingMap[padding],\n className\n )}\n data-component=\"glass-panel\"\n >\n {children}\n </div>\n )\n }\n)\n","// grid-layout — responsive grid layout with configurable columns and breakpoints\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype ResponsiveColumns = {\n sm?: number\n md?: number\n lg?: number\n xl?: number\n}\n\ntype GridGap = 'default' | 'lg' | 'sm'\n\nexport type GridLayoutProps = {\n children: ReactNode\n columns?: number | ResponsiveColumns\n gap?: GridGap\n className?: string\n}\n\nconst gapMap: Record<GridGap, string> = {\n sm: 'gds-gap-sm',\n default: 'gds-gap',\n lg: 'gds-gap-lg',\n}\n\nconst colClass = (n: number): string => {\n const map: Record<number, string> = {\n 1: 'grid-cols-1',\n 2: 'grid-cols-2',\n 3: 'grid-cols-3',\n 4: 'grid-cols-4',\n 5: 'grid-cols-5',\n 6: 'grid-cols-6',\n }\n return map[n] ?? `grid-cols-${n}`\n}\n\nconst responsiveColClass = (prefix: string, n: number): string => {\n const map: Record<number, string> = {\n 1: `${prefix}:grid-cols-1`,\n 2: `${prefix}:grid-cols-2`,\n 3: `${prefix}:grid-cols-3`,\n 4: `${prefix}:grid-cols-4`,\n 5: `${prefix}:grid-cols-5`,\n 6: `${prefix}:grid-cols-6`,\n }\n return map[n] ?? `${prefix}:grid-cols-${n}`\n}\n\nfunction buildColumnClasses(columns: number | ResponsiveColumns): string {\n if (typeof columns === 'number') {\n return colClass(columns)\n }\n\n const parts: string[] = []\n if (columns.sm !== undefined) parts.push(responsiveColClass('sm', columns.sm))\n if (columns.md !== undefined) parts.push(responsiveColClass('md', columns.md))\n if (columns.lg !== undefined) parts.push(responsiveColClass('lg', columns.lg))\n if (columns.xl !== undefined) parts.push(responsiveColClass('xl', columns.xl))\n\n // add base grid-cols-1 for mobile when using responsive\n if (parts.length > 0) {\n parts.unshift('grid-cols-1')\n }\n\n return parts.join(' ')\n}\n\nexport const GridLayout = forwardRef<HTMLDivElement, GridLayoutProps>(\n function GridLayout(\n { children, columns = { sm: 1, md: 2, lg: 3 }, gap = 'default', className },\n ref\n ) {\n return (\n <div\n ref={ref}\n className={cx(\n 'grid',\n buildColumnClasses(columns),\n gapMap[gap],\n className\n )}\n data-component=\"grid-layout\"\n >\n {children}\n </div>\n )\n }\n)\n","// hero — landing page above-the-fold section\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\nexport type HeroProps = {\n title: string\n subtitle?: string\n actions?: ReactNode\n media?: ReactNode\n align?: 'left' | 'center'\n glass?: boolean\n className?: string\n}\n\nexport const Hero = forwardRef<HTMLDivElement, HeroProps>(function Hero(\n { title, subtitle, actions, media, align = 'center', glass, className },\n ref\n) {\n const isCenter = align === 'center'\n\n return (\n <section\n ref={ref}\n className={cx(\n 'w-full py-16',\n isCenter ? 'text-center' : 'flex items-center gap-12',\n glass && glassClass(true),\n className\n )}\n data-component=\"hero\"\n data-variant={align}\n >\n <div className={cx(isCenter ? 'mx-auto max-w-2xl' : 'flex-1')}>\n <h1 className=\"text-fg text-4xl font-bold\">{title}</h1>\n {subtitle !== undefined && (\n <p className=\"text-fg-muted mt-3 text-lg\">{subtitle}</p>\n )}\n {actions !== undefined && <div className=\"mt-6\">{actions}</div>}\n {isCenter && media !== undefined && <div className=\"mt-8\">{media}</div>}\n </div>\n {!isCenter && media !== undefined && (\n <div className=\"flex-1\">{media}</div>\n )}\n </section>\n )\n})\n","import type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype HRDashboardProps = React.HTMLAttributes<HTMLDivElement> & {\n departments?: ReactNode\n onboarding?: ReactNode\n stats?: ReactNode\n}\n\nexport const HRDashboard = forwardRef<HTMLDivElement, HRDashboardProps>(\n function HRDashboard(\n { className, departments, onboarding, stats, ...props },\n ref\n ) {\n return (\n <div\n className={cx('gds-ctx gds-gap flex flex-col', className)}\n data-component=\"hr-dashboard\"\n ref={ref}\n {...props}\n >\n {stats !== undefined && (\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-3\">{stats}</div>\n )}\n <div className=\"grid grid-cols-1 gap-4 lg:grid-cols-2\">\n {onboarding !== undefined && (\n <div className=\"gds-radius-card border-border bg-surface gds-pad border\">\n {onboarding}\n </div>\n )}\n {departments !== undefined && (\n <div className=\"gds-radius-card border-border bg-surface gds-pad border\">\n {departments}\n </div>\n )}\n </div>\n </div>\n )\n }\n)\n\nexport type { HRDashboardProps }\n","// inbox-layout — responsive 3-pane email layout with resizable divider\n// v2: complete rewrite from simple 2-pane to full-featured inbox layout\n// desktop: sidebar? + list + detail with drag-resize\n// mobile: one pane at a time with swipe/back navigation\n\nimport type { ReactNode } from 'react'\nimport { forwardRef, useCallback, useEffect, useRef, useState } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\nimport { useIsMobile } from '../utils/hooks'\n\nexport type InboxLayoutProps = React.HTMLAttributes<HTMLDivElement> & {\n /** left sidebar (e.g. app navigation) */\n sidebar?: ReactNode\n /** conversation list pane */\n list: ReactNode\n /** detail/thread pane — null shows empty state */\n detail?: ReactNode\n\n /** list pane width in px, default 360 */\n listWidth?: number\n /** min list width, default 280 */\n listMinWidth?: number\n /** max list width, default 500 */\n listMaxWidth?: number\n /** enable drag resize between list and detail, default true */\n resizable?: boolean\n\n /** which pane to show on mobile */\n mobileView?: 'detail' | 'list'\n /** callback when mobile view changes */\n onMobileViewChange?: (view: 'detail' | 'list') => void\n\n /** shown when detail is null */\n emptyState?: ReactNode\n\n /** batch action bar at bottom of list pane */\n batchActions?: ReactNode\n\n /** frosted glass effect */\n glass?: boolean\n className?: string\n}\n\nexport const InboxLayout = forwardRef<HTMLDivElement, InboxLayoutProps>(\n function InboxLayout(\n {\n sidebar,\n list,\n detail,\n listWidth: initialListWidth = 360,\n listMinWidth = 280,\n listMaxWidth = 500,\n resizable = true,\n mobileView = 'list',\n onMobileViewChange,\n emptyState,\n batchActions,\n glass,\n className,\n ...props\n },\n ref\n ) {\n const isMobile = useIsMobile()\n const [listWidth, setListWidth] = useState(initialListWidth)\n const isDragging = useRef(false)\n const dragStart = useRef({ x: 0, width: 0 })\n\n // drag resize handlers\n const handleDragStart = useCallback(\n (e: React.MouseEvent) => {\n e.preventDefault()\n isDragging.current = true\n dragStart.current = { x: e.clientX, width: listWidth }\n document.body.style.cursor = 'col-resize'\n document.body.style.userSelect = 'none'\n },\n [listWidth]\n )\n\n useEffect(() => {\n const handleMouseMove = (e: MouseEvent) => {\n if (!isDragging.current) return\n const delta = e.clientX - dragStart.current.x\n const newWidth = Math.max(\n listMinWidth,\n Math.min(listMaxWidth, dragStart.current.width + delta)\n )\n setListWidth(newWidth)\n }\n\n const handleMouseUp = () => {\n if (!isDragging.current) return\n isDragging.current = false\n document.body.style.cursor = ''\n document.body.style.userSelect = ''\n }\n\n document.addEventListener('mousemove', handleMouseMove)\n document.addEventListener('mouseup', handleMouseUp)\n return () => {\n document.removeEventListener('mousemove', handleMouseMove)\n document.removeEventListener('mouseup', handleMouseUp)\n // reset body styles if unmounted during drag\n if (isDragging.current) {\n isDragging.current = false\n document.body.style.cursor = ''\n document.body.style.userSelect = ''\n }\n }\n }, [listMinWidth, listMaxWidth])\n\n // double-click divider resets width\n const handleDividerDoubleClick = useCallback(() => {\n setListWidth(initialListWidth)\n }, [initialListWidth])\n\n // mobile back button handler\n const handleMobileBack = useCallback(() => {\n if (onMobileViewChange !== undefined) {\n onMobileViewChange('list')\n }\n }, [onMobileViewChange])\n\n // mobile: show one pane at a time\n if (isMobile) {\n return (\n <div\n {...props}\n ref={ref}\n className={cx('flex h-full flex-col overflow-hidden', className)}\n data-component=\"inbox-layout\"\n data-state={mobileView}\n data-mobile-view={mobileView}\n >\n {mobileView === 'list' && (\n <div className=\"min-h-0 flex-1 overflow-y-auto\">\n {list}\n {batchActions !== undefined && (\n <div className=\"animate-slide-up sticky bottom-0\">\n {batchActions}\n </div>\n )}\n </div>\n )}\n {mobileView === 'detail' && (\n <div className=\"flex min-h-0 flex-1 flex-col overflow-hidden\">\n <button\n type=\"button\"\n className=\"text-accent border-border flex items-center gap-1.5 border-b px-3 py-2 text-sm hover:bg-white/[0.04]\"\n onClick={handleMobileBack}\n aria-label=\"Back to message list\"\n >\n <svg\n width=\"14\"\n height=\"14\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n viewBox=\"0 0 24 24\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"15 18 9 12 15 6\" />\n </svg>\n Back\n </button>\n <div className=\"min-h-0 flex-1 overflow-y-auto\">\n {detail ?? emptyState ?? null}\n </div>\n </div>\n )}\n </div>\n )\n }\n\n // desktop: multi-pane layout\n return (\n <div\n {...props}\n ref={ref}\n className={cx(\n 'flex h-full overflow-hidden',\n glassClass(glass),\n className\n )}\n data-component=\"inbox-layout\"\n data-state={detail !== undefined ? 'detail' : 'list'}\n >\n {/* sidebar */}\n {sidebar !== undefined && <div className=\"shrink-0\">{sidebar}</div>}\n\n {/* list pane */}\n <div\n className=\"border-border flex shrink-0 flex-col overflow-hidden border-r\"\n style={{ width: listWidth }}\n >\n <div className=\"min-h-0 flex-1 overflow-y-auto\">{list}</div>\n {batchActions !== undefined && (\n <div className=\"border-border animate-slide-up shrink-0 border-t\">\n {batchActions}\n </div>\n )}\n </div>\n\n {/* resize divider */}\n {resizable && (\n <div\n className=\"hover:bg-accent/20 active:bg-accent/30 focus:bg-accent/20 w-1 shrink-0 cursor-col-resize bg-transparent transition-colors focus:outline-none\"\n onMouseDown={handleDragStart}\n onDoubleClick={handleDividerDoubleClick}\n onKeyDown={(e) => {\n const step = e.shiftKey ? 50 : 10\n if (e.key === 'ArrowLeft') {\n e.preventDefault()\n setListWidth((prev) => Math.max(listMinWidth, prev - step))\n } else if (e.key === 'ArrowRight') {\n e.preventDefault()\n setListWidth((prev) => Math.min(listMaxWidth, prev + step))\n } else if (e.key === 'Home') {\n e.preventDefault()\n setListWidth(listMinWidth)\n } else if (e.key === 'End') {\n e.preventDefault()\n setListWidth(listMaxWidth)\n }\n }}\n role=\"separator\"\n aria-orientation=\"vertical\"\n aria-label=\"Resize list pane\"\n aria-valuenow={listWidth}\n aria-valuemin={listMinWidth}\n aria-valuemax={listMaxWidth}\n tabIndex={0}\n />\n )}\n\n {/* detail pane */}\n <div className=\"min-w-0 flex-1 overflow-y-auto\">\n {detail ?? emptyState ?? null}\n </div>\n </div>\n )\n }\n)\n","// metric-card — single KPI display with optional trend indicator\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\nexport type MetricCardProps = {\n title: string\n value: string | number\n change?: number\n changeLabel?: string\n icon?: ReactNode\n glass?: boolean\n className?: string\n}\n\nexport const MetricCard = forwardRef<HTMLDivElement, MetricCardProps>(\n function MetricCard(\n { title, value, change, changeLabel, icon, glass, className },\n ref\n ) {\n const isPositive = change !== undefined && change >= 0\n\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-radius-card gds-pad-x-lg gds-pad-y-lg relative border',\n glass === true\n ? cx(glassClass(glass), 'bg-bg/60 border-white/10')\n : 'border-border bg-surface',\n className\n )}\n data-component=\"metric-card\"\n >\n {icon !== undefined && (\n <div className=\"text-fg-muted/40 absolute top-4 right-4\">{icon}</div>\n )}\n <p className=\"gds-text-body text-fg-muted\">{title}</p>\n <p className=\"text-fg mt-1 text-2xl font-bold\">{value}</p>\n {change !== undefined && (\n <p\n className={cx(\n 'gds-text-body mt-1',\n isPositive ? 'text-success' : 'text-danger'\n )}\n >\n {isPositive ? '+' : ''}\n {change}%{changeLabel !== undefined ? ` ${changeLabel}` : ''}\n </p>\n )}\n </div>\n )\n }\n)\n","// kpi-dashboard — pre-composed KPI layout with metrics, chart, and table slots\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\nimport { MetricCard } from './metric-card'\n\ntype KPIMetric = {\n title: string\n value: string\n change?: number\n}\n\ntype KPIDashboardProps = {\n title?: string\n metrics?: KPIMetric[]\n chart?: ReactNode\n table?: ReactNode\n glass?: boolean\n className?: string\n}\n\nconst KPIDashboard = forwardRef<HTMLDivElement, KPIDashboardProps>(\n function KPIDashboard(\n { title, metrics, chart, table, glass, className },\n ref\n ) {\n return (\n <div\n ref={ref}\n className={cx('gds-ctx gds-gap flex flex-col', className)}\n data-component=\"kpi-dashboard\"\n >\n {title !== undefined && (\n <h2 className=\"gds-heading text-fg font-semibold\">{title}</h2>\n )}\n {metrics !== undefined && metrics.length > 0 && (\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4\">\n {metrics.map((m) => (\n <MetricCard\n key={m.title}\n change={m.change}\n glass={glass}\n title={m.title}\n value={m.value}\n />\n ))}\n </div>\n )}\n {chart !== undefined && (\n <div\n className={cx(\n 'gds-radius-card gds-pad border',\n glass === true\n ? cx(glassClass(glass), 'bg-bg/60 border-white/10')\n : 'border-border bg-surface'\n )}\n >\n {chart}\n </div>\n )}\n {table !== undefined && (\n <div\n className={cx(\n 'gds-radius-card gds-pad border',\n glass === true\n ? cx(glassClass(glass), 'bg-bg/60 border-white/10')\n : 'border-border bg-surface'\n )}\n >\n {table}\n </div>\n )}\n </div>\n )\n }\n)\n\nexport { KPIDashboard }\nexport type { KPIDashboardProps, KPIMetric }\n","// loading-states — pre-composed loading state patterns for common UI contexts\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { Button } from '../l2-primitives/button'\nimport { Spinner } from '../l2-primitives/spinner'\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\ntype LoadingStatesVariant = 'button' | 'inline' | 'overlay' | 'page'\n\nexport type LoadingStatesProps = {\n variant: LoadingStatesVariant\n message?: string\n glass?: boolean\n className?: string\n}\n\nfunction PageLoading({\n message,\n glass,\n className,\n}: Omit<LoadingStatesProps, 'variant'>) {\n return (\n <div\n className={cx(\n 'flex min-h-[200px] flex-col items-center justify-center gap-3',\n glassClass(glass),\n className\n )}\n >\n <Spinner size=\"lg\" />\n {message !== undefined && (\n <p className=\"gds-text-body text-fg-muted\">{message}</p>\n )}\n </div>\n )\n}\n\nfunction InlineLoading({\n message,\n className,\n}: Omit<LoadingStatesProps, 'variant'>) {\n return (\n <div className={cx('inline-flex items-center gap-2', className)}>\n <Spinner size=\"sm\" />\n {message !== undefined && (\n <span className=\"gds-text-body text-fg-muted\">{message}</span>\n )}\n </div>\n )\n}\n\nfunction ButtonLoading({\n message,\n className,\n}: Omit<LoadingStatesProps, 'variant'>) {\n return (\n <div className={className}>\n <Button loading disabled>\n {message ?? 'Loading...'}\n </Button>\n </div>\n )\n}\n\nfunction OverlayLoading({\n message,\n glass,\n className,\n}: Omit<LoadingStatesProps, 'variant'>) {\n return (\n <div\n className={cx(\n 'absolute inset-0 flex flex-col items-center justify-center gap-3',\n glass === true ? glassClass(glass) : 'bg-bg/80',\n className\n )}\n >\n <Spinner size=\"lg\" />\n {message !== undefined && (\n <p className=\"gds-text-body text-fg-muted\">{message}</p>\n )}\n </div>\n )\n}\n\nconst variantMap: Record<\n LoadingStatesVariant,\n (props: Omit<LoadingStatesProps, 'variant'>) => ReactNode\n> = {\n page: PageLoading,\n inline: InlineLoading,\n button: ButtonLoading,\n overlay: OverlayLoading,\n}\n\nexport const LoadingStates = forwardRef<HTMLDivElement, LoadingStatesProps>(\n function LoadingStates({ variant, message, glass, className }, ref) {\n return (\n <div ref={ref} data-component=\"loading-states\" data-variant={variant}>\n {variantMap[variant]({ message, glass, className })}\n </div>\n )\n }\n)\n\nexport type { LoadingStatesVariant }\n","// login-form — pre-composed login form\nimport { forwardRef, useState } from 'react'\n\nimport { Button } from '../l2-primitives/button'\nimport { Input } from '../l2-primitives/input'\nimport { Label } from '../l2-primitives/label'\nimport { Checkbox } from '../l3-atoms/checkbox'\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\ntype LoginFormData = {\n email: string\n password: string\n remember: boolean\n}\n\ntype LoginFormProps = Omit<\n React.HTMLAttributes<HTMLFormElement>,\n 'onSubmit'\n> & {\n onSubmit: (data: LoginFormData) => void\n title?: string\n error?: string\n loading?: boolean\n glass?: boolean\n}\n\nexport const LoginForm = forwardRef<HTMLFormElement, LoginFormProps>(\n function LoginForm(\n {\n onSubmit,\n title = 'Sign in',\n error,\n loading = false,\n glass = false,\n className,\n ...props\n },\n ref\n ) {\n const [email, setEmail] = useState('')\n const [password, setPassword] = useState('')\n const [remember, setRemember] = useState(false)\n\n function handleSubmit(e: React.FormEvent) {\n e.preventDefault()\n onSubmit({ email, password, remember })\n }\n\n return (\n <form\n ref={ref}\n className={cx(\n 'border-border flex w-full max-w-sm flex-col gap-4 rounded-lg border p-6',\n glassClass(glass),\n !glass && 'bg-bg',\n className\n )}\n data-component=\"login-form\"\n onSubmit={handleSubmit}\n {...props}\n >\n <h2 className=\"text-fg gds-heading text-center font-semibold\">\n {title}\n </h2>\n {error !== undefined && (\n <div className=\"bg-danger/10 text-danger rounded-md px-3 py-2 text-xs\">\n {error}\n </div>\n )}\n <div className=\"flex flex-col gap-1\">\n <Label>Email</Label>\n <Input\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n placeholder=\"you@example.com\"\n required\n />\n </div>\n <div className=\"flex flex-col gap-1\">\n <Label>Password</Label>\n <Input\n type=\"password\"\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n placeholder=\"••••••••\"\n required\n />\n </div>\n <Checkbox\n checked={remember}\n onChange={setRemember}\n label=\"Remember me\"\n />\n <Button type=\"submit\" disabled={loading} className=\"w-full\">\n {loading ? 'Signing in...' : 'Sign in'}\n </Button>\n </form>\n )\n }\n)\n\nexport type { LoginFormData, LoginFormProps }\n","// mail-composer — email compose form with to, subject, body, and send\nimport { forwardRef, useCallback, useRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type MailComposerData = {\n to: string\n subject: string\n body: string\n}\n\nexport type MailComposerProps = {\n onSend: (data: MailComposerData) => void\n defaultTo?: string\n className?: string\n}\n\nexport const MailComposer = forwardRef<HTMLFormElement, MailComposerProps>(\n function MailComposer({ onSend, defaultTo, className }, ref) {\n const toRef = useRef<HTMLInputElement>(null)\n const subjectRef = useRef<HTMLInputElement>(null)\n const bodyRef = useRef<HTMLTextAreaElement>(null)\n\n const handleSubmit = useCallback(\n (e: React.FormEvent) => {\n e.preventDefault()\n onSend({\n to: toRef.current?.value ?? '',\n subject: subjectRef.current?.value ?? '',\n body: bodyRef.current?.value ?? '',\n })\n },\n [onSend]\n )\n\n const inputCls =\n 'w-full rounded-md border border-border bg-transparent px-3 py-2 gds-text-body text-fg placeholder:text-fg-muted/40 focus:border-accent focus:outline-none'\n\n return (\n <form\n ref={ref}\n className={cx('flex flex-col gap-3', className)}\n data-component=\"mail-composer\"\n onSubmit={handleSubmit}\n >\n <input\n ref={toRef}\n type=\"email\"\n placeholder=\"To\"\n defaultValue={defaultTo ?? ''}\n className={inputCls}\n />\n <input\n ref={subjectRef}\n type=\"text\"\n placeholder=\"Subject\"\n className={inputCls}\n />\n <textarea\n ref={bodyRef}\n placeholder=\"Body\"\n rows={6}\n className={cx(inputCls, 'resize-none')}\n />\n <div className=\"flex justify-end\">\n <button\n type=\"submit\"\n className=\"bg-accent gds-text-body text-accent-fg hover:bg-accent/90 rounded-md px-4 py-2 font-medium transition-colors\"\n >\n Send\n </button>\n </div>\n </form>\n )\n }\n)\n","// masonry — CSS columns-based masonry layout\nimport type { CSSProperties, ReactNode } from 'react'\nimport { Children, forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type MasonryProps = {\n children: ReactNode\n columns?: number\n gap?: number\n className?: string\n}\n\nexport const Masonry = forwardRef<HTMLDivElement, MasonryProps>(\n function Masonry({ children, columns = 3, gap = 16, className }, ref) {\n const containerStyle: CSSProperties = {\n columnCount: columns,\n columnGap: `${gap}px`,\n }\n\n const itemStyle: CSSProperties = {\n breakInside: 'avoid',\n marginBottom: `${gap}px`,\n }\n\n return (\n <div\n ref={ref}\n className={cx(className)}\n style={containerStyle}\n data-component=\"masonry\"\n >\n {Children.map(children, (child) => {\n if (child === null || child === undefined) return null\n return <div style={itemStyle}>{child}</div>\n })}\n </div>\n )\n }\n)\n","// media-grid — responsive image/media grid layout for galleries\nimport type { ReactNode } from 'react'\nimport { Children, forwardRef } from 'react'\n\nimport { AspectRatio } from '../l2-primitives/aspect-ratio'\nimport { cx } from '../utils/cx'\n\ntype GridGap = 'default' | 'lg' | 'sm'\n\ntype ResponsiveColumns = {\n lg?: number\n md?: number\n sm?: number\n}\n\nexport type MediaGridProps = {\n aspectRatio?: number\n children: ReactNode\n className?: string\n columns?: number | ResponsiveColumns\n gap?: GridGap\n}\n\nconst gapMap: Record<GridGap, string> = {\n default: 'gds-gap',\n lg: 'gds-gap-lg',\n sm: 'gds-gap-sm',\n}\n\nfunction buildCols(columns: number | ResponsiveColumns): string {\n if (typeof columns === 'number') {\n return `grid-cols-${columns}`\n }\n const parts = ['grid-cols-1']\n if (columns.sm !== undefined) parts.push(`sm:grid-cols-${columns.sm}`)\n if (columns.md !== undefined) parts.push(`md:grid-cols-${columns.md}`)\n if (columns.lg !== undefined) parts.push(`lg:grid-cols-${columns.lg}`)\n return parts.join(' ')\n}\n\nexport const MediaGrid = forwardRef<HTMLDivElement, MediaGridProps>(\n function MediaGrid(\n {\n aspectRatio = 1,\n children,\n className,\n columns = { sm: 2, md: 3, lg: 4 },\n gap = 'default',\n },\n ref\n ) {\n return (\n <div\n ref={ref}\n className={cx('grid', buildCols(columns), gapMap[gap], className)}\n data-component=\"media-grid\"\n >\n {Children.map(children, (child) => (\n <AspectRatio\n ratio={aspectRatio}\n className=\"overflow-hidden rounded-lg\"\n >\n {child}\n </AspectRatio>\n ))}\n </div>\n )\n }\n)\n","// mini-dashboard — section-level container with optional title header\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\nexport type MiniDashboardProps = {\n title?: string\n children: ReactNode\n glass?: boolean\n className?: string\n}\n\nexport const MiniDashboard = forwardRef<HTMLDivElement, MiniDashboardProps>(\n function MiniDashboard({ title, children, glass, className }, ref) {\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-ctx gds-radius-card border',\n glass === true\n ? cx(glassClass(glass), 'bg-bg/60 border-white/10')\n : 'border-border bg-surface',\n 'gds-pad-x-lg gds-pad-y-lg',\n className\n )}\n data-component=\"mini-dashboard\"\n >\n {title !== undefined && (\n <h2 className=\"gds-text-body text-fg mb-3 font-semibold\">{title}</h2>\n )}\n {children}\n </div>\n )\n }\n)\n","// monitor-grid — responsive grid layout for service/server monitoring cards\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type MonitorGridProps = {\n children: ReactNode\n columns?: number\n className?: string\n}\n\nexport const MonitorGrid = forwardRef<HTMLDivElement, MonitorGridProps>(\n function MonitorGrid({ children, columns, className }, ref) {\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-gap grid',\n columns !== undefined\n ? `grid-cols-${columns}`\n : 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4',\n className\n )}\n data-component=\"monitor-grid\"\n >\n {children}\n </div>\n )\n }\n)\n","// nav-bar — top navigation bar with logo, links, and actions\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\ntype NavLink = {\n label: string\n href: string\n active?: boolean\n}\n\nexport type NavBarProps = {\n logo?: ReactNode\n links?: NavLink[]\n actions?: ReactNode\n sticky?: boolean\n glass?: boolean\n className?: string\n}\n\nexport const NavBar = forwardRef<HTMLElement, NavBarProps>(function NavBar(\n { logo, links, actions, sticky = true, glass = true, className },\n ref\n) {\n return (\n <nav\n ref={ref}\n className={cx(\n 'flex w-full items-center justify-between px-6 py-3',\n sticky && 'sticky top-0 z-40',\n glass && glassClass(true),\n className\n )}\n data-component=\"nav-bar\"\n >\n {logo !== undefined && <div className=\"flex-shrink-0\">{logo}</div>}\n {links !== undefined && links.length > 0 && (\n <div className=\"flex items-center gap-6\">\n {links.map((link) => (\n <a\n key={link.href}\n href={link.href}\n className={cx(\n 'text-sm transition-colors',\n link.active\n ? 'text-accent font-medium'\n : 'text-fg-muted hover:text-fg'\n )}\n >\n {link.label}\n </a>\n ))}\n </div>\n )}\n {actions !== undefined && (\n <div className=\"flex items-center gap-3\">{actions}</div>\n )}\n </nav>\n )\n})\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype NotificationEntry = {\n id: string\n message?: string\n read?: boolean\n timestamp: string\n title: string\n}\n\ntype NotificationListProps = React.HTMLAttributes<HTMLDivElement> & {\n notifications: NotificationEntry[]\n onRead?: (id: string) => void\n onReadAll?: () => void\n}\n\nexport const NotificationList = forwardRef<\n HTMLDivElement,\n NotificationListProps\n>(function NotificationList(\n { className, notifications, onRead, onReadAll, ...props },\n ref\n) {\n return (\n <div\n className={cx(\n 'gds-ctx gds-radius-card border-border bg-surface border',\n className\n )}\n data-component=\"notification-list\"\n ref={ref}\n {...props}\n >\n <div className=\"border-border flex items-center justify-between border-b px-4 py-2.5\">\n <span className=\"text-fg text-sm font-semibold\">Notifications</span>\n {onReadAll !== undefined && (\n <button\n className=\"text-accent text-xs hover:underline\"\n onClick={onReadAll}\n type=\"button\"\n >\n Mark all read\n </button>\n )}\n </div>\n {notifications.length === 0 ? (\n <div className=\"text-fg-muted px-4 py-6 text-center text-xs\">\n No notifications\n </div>\n ) : (\n <div className=\"divide-border divide-y\">\n {notifications.map((n) => (\n <div\n key={n.id}\n className={cx(\n 'flex gap-3 px-4 py-2.5',\n n.read !== true && 'border-l-accent border-l-2',\n onRead !== undefined && 'hover:bg-bg-tertiary cursor-pointer'\n )}\n onClick={onRead !== undefined ? () => onRead(n.id) : undefined}\n >\n <div className=\"min-w-0 flex-1\">\n <div className=\"text-fg text-xs font-medium\">{n.title}</div>\n {n.message !== undefined && (\n <div className=\"text-fg-muted mt-0.5 text-xs\">\n {n.message}\n </div>\n )}\n <div className=\"text-fg-muted mt-1 text-[10px]\">\n {n.timestamp}\n </div>\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n )\n})\n\nexport type { NotificationEntry, NotificationListProps }\n","import type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype OnboardingStep = {\n action?: ReactNode\n completed: boolean\n label: string\n}\n\ntype OnboardingCardProps = React.HTMLAttributes<HTMLDivElement> & {\n steps: OnboardingStep[]\n title?: string\n}\n\nexport const OnboardingCard = forwardRef<HTMLDivElement, OnboardingCardProps>(\n function OnboardingCard(\n { className, steps, title = 'Getting Started', ...props },\n ref\n ) {\n const done = steps.filter((s) => s.completed).length\n const pct = steps.length > 0 ? Math.round((done / steps.length) * 100) : 0\n\n return (\n <div\n className={cx(\n 'gds-ctx border-border bg-surface gds-pad rounded-lg border',\n className\n )}\n data-component=\"onboarding-card\"\n ref={ref}\n {...props}\n >\n <div className=\"mb-3 flex items-center justify-between\">\n <h3 className=\"gds-heading text-fg font-semibold\">{title}</h3>\n <span className=\"gds-text-label text-fg-muted\">\n {done}/{steps.length}\n </span>\n </div>\n <div className=\"bg-border mb-4 h-1.5 w-full overflow-hidden rounded-full\">\n <div\n className=\"bg-accent h-full rounded-full transition-all\"\n style={{ width: `${pct}%` }}\n />\n </div>\n <ul className=\"gds-gap flex flex-col\">\n {steps.map((step, i) => (\n <li className=\"gds-gap flex items-center justify-between\" key={i}>\n <div className=\"gds-gap-sm flex items-center\">\n <span\n className={cx(\n 'flex h-5 w-5 shrink-0 items-center justify-center rounded-full text-xs',\n step.completed\n ? 'bg-success text-white'\n : 'border-border text-fg-muted border'\n )}\n >\n {step.completed ? '\\u2713' : i + 1}\n </span>\n <span\n className={cx(\n 'text-sm',\n step.completed ? 'text-fg-muted line-through' : 'text-fg'\n )}\n >\n {step.label}\n </span>\n </div>\n {step.action !== undefined && !step.completed && step.action}\n </li>\n ))}\n </ul>\n </div>\n )\n }\n)\n\nexport type { OnboardingCardProps, OnboardingStep }\n","// page-header — standard page header with title, breadcrumb, and actions\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype PageHeaderBreadcrumbItem = {\n href?: string\n label: string\n}\n\ntype PageHeaderProps = {\n actions?: ReactNode\n breadcrumb?: PageHeaderBreadcrumbItem[]\n className?: string\n subtitle?: string\n title: string\n}\n\nconst separator = (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n >\n <path d=\"M4.5 3l3 3-3 3\" />\n </svg>\n)\n\nexport const PageHeader = forwardRef<HTMLDivElement, PageHeaderProps>(\n function PageHeader(\n { actions, breadcrumb, className, subtitle, title },\n ref\n ) {\n return (\n <div\n ref={ref}\n className={cx('gds-gap-sm flex flex-col', className)}\n data-component=\"page-header\"\n >\n {breadcrumb !== undefined && breadcrumb.length > 0 && (\n <nav aria-label=\"Breadcrumb\">\n <ol className=\"gds-gap-sm text-fg-muted flex items-center text-[11px]\">\n {breadcrumb.map((item, i) => (\n <li key={i} className=\"gds-gap-sm flex items-center\">\n {i > 0 && (\n <span className=\"text-fg-muted/50\" aria-hidden=\"true\">\n {separator}\n </span>\n )}\n {item.href !== undefined ? (\n <a\n href={item.href}\n className=\"hover:text-fg transition-colors\"\n >\n {item.label}\n </a>\n ) : (\n <span>{item.label}</span>\n )}\n </li>\n ))}\n </ol>\n </nav>\n )}\n <div className=\"gds-gap flex items-center justify-between\">\n <div className=\"min-w-0\">\n <h1 className=\"gds-heading text-fg font-semibold\">{title}</h1>\n {subtitle !== undefined && (\n <p className=\"gds-text-body text-fg-muted mt-0.5\">{subtitle}</p>\n )}\n </div>\n {actions !== undefined && (\n <div className=\"gds-gap-sm flex shrink-0 items-center\">\n {actions}\n </div>\n )}\n </div>\n </div>\n )\n }\n)\n\nexport type { PageHeaderBreadcrumbItem, PageHeaderProps }\n","// panel-group + panel — layout primitives for multi-pane content areas\n// PaneGroup is a flex container, Pane is a flex child\n// fixed-width panels on desktop, full-width stacked on mobile\n\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { useIsMobile } from '../utils/hooks'\n\n// ---- Pane ----\n\nexport type PaneProps = React.HTMLAttributes<HTMLDivElement> & {\n children: ReactNode\n /** fixed width in px (desktop only), omit for flex-1 */\n width?: number\n /** minimum width in px */\n minWidth?: number\n /** maximum width in px */\n maxWidth?: number\n /** center content horizontally */\n center?: boolean\n /** enable vertical scroll, default true */\n scrollable?: boolean\n className?: string\n}\n\nexport const Pane = forwardRef<HTMLDivElement, PaneProps>(function Pane(\n {\n children,\n width,\n minWidth,\n maxWidth,\n center,\n scrollable = true,\n className,\n ...props\n },\n ref\n) {\n const isMobile = useIsMobile()\n\n const style: React.CSSProperties = {}\n if (width !== undefined && !isMobile) {\n style.width = width\n style.flexShrink = 0\n }\n if (minWidth !== undefined && !isMobile) style.minWidth = minWidth\n if (maxWidth !== undefined && !isMobile) style.maxWidth = maxWidth\n\n return (\n <div\n {...props}\n ref={ref}\n className={cx(\n width === undefined && 'flex-1',\n isMobile && 'w-full',\n scrollable && 'min-h-0 overflow-y-auto',\n center === true && 'flex justify-center',\n className\n )}\n data-component=\"panel\"\n style={Object.keys(style).length > 0 ? style : undefined}\n >\n {children}\n </div>\n )\n})\n\n// ---- PaneGroup ----\n\nexport type PaneGroupProps = React.HTMLAttributes<HTMLDivElement> & {\n children: ReactNode\n /** layout direction, default 'horizontal' */\n direction?: 'horizontal' | 'vertical'\n className?: string\n}\n\nexport const PaneGroup = forwardRef<HTMLDivElement, PaneGroupProps>(\n function PaneGroup(\n { children, direction = 'horizontal', className, ...props },\n ref\n ) {\n const isMobile = useIsMobile()\n\n // on mobile, horizontal groups stack vertically\n const isVertical = direction === 'vertical' || isMobile\n\n return (\n <div\n {...props}\n ref={ref}\n className={cx(\n 'flex min-h-0 flex-1',\n isVertical ? 'flex-col' : 'flex-row',\n className\n )}\n data-component=\"panel-group\"\n >\n {children}\n </div>\n )\n }\n)\n","import type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype PayrollDashboardProps = React.HTMLAttributes<HTMLDivElement> & {\n chart?: ReactNode\n metrics?: ReactNode\n transactions?: ReactNode\n}\n\nexport const PayrollDashboard = forwardRef<\n HTMLDivElement,\n PayrollDashboardProps\n>(function PayrollDashboard(\n { chart, className, metrics, transactions, ...props },\n ref\n) {\n return (\n <div\n className={cx('gds-ctx gds-gap flex flex-col', className)}\n data-component=\"payroll-dashboard\"\n ref={ref}\n {...props}\n >\n {metrics !== undefined && (\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-3\">{metrics}</div>\n )}\n <div className=\"grid grid-cols-1 gap-4 lg:grid-cols-2\">\n {chart !== undefined && (\n <div className=\"gds-radius-card border-border bg-surface gds-pad border\">\n {chart}\n </div>\n )}\n {transactions !== undefined && (\n <div className=\"gds-radius-card border-border bg-surface gds-pad border\">\n {transactions}\n </div>\n )}\n </div>\n </div>\n )\n})\n\nexport type { PayrollDashboardProps }\n","// pricing-card — pricing tier card with name, price, features list, and CTA\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\nexport type PricingCardProps = {\n name: string\n price: string\n period?: string\n features: string[]\n action?: ReactNode\n highlighted?: boolean\n glass?: boolean\n className?: string\n}\n\nexport const PricingCard = forwardRef<HTMLDivElement, PricingCardProps>(\n function PricingCard(\n {\n name,\n price,\n period = '/month',\n features,\n action,\n highlighted,\n glass,\n className,\n },\n ref\n ) {\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-ctx gds-radius-card gds-pad-x-lg gds-pad-y-lg flex flex-col border',\n highlighted === true && 'border-accent ring-accent ring-1',\n highlighted !== true &&\n (glass === true\n ? cx(glassClass(glass), 'bg-bg/60 border-white/10')\n : 'border-border bg-surface'),\n glass === true &&\n highlighted === true &&\n cx(glassClass(glass), 'bg-bg/60'),\n className\n )}\n data-component=\"pricing-card\"\n data-highlighted={highlighted === true ? 'true' : undefined}\n >\n <p className=\"text-fg font-semibold\">{name}</p>\n <div className=\"mt-2 flex items-baseline gap-1\">\n <span className=\"text-fg text-3xl font-bold\">{price}</span>\n <span className=\"gds-text-body text-fg-muted\">{period}</span>\n </div>\n {features.length > 0 && (\n <ul className=\"mt-4 flex flex-col gap-2\">\n {features.map((feature) => (\n <li\n key={feature}\n className=\"gds-text-body text-fg-muted flex items-center gap-2\"\n >\n <svg\n className=\"text-success h-4 w-4 shrink-0\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n >\n <path\n d=\"M3 8l3 3 7-7\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n {feature}\n </li>\n ))}\n </ul>\n )}\n {action !== undefined && <div className=\"mt-auto pt-4\">{action}</div>}\n </div>\n )\n }\n)\n","// profile-card — user profile card with avatar, name, role, stats, actions\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { Avatar } from '../l3-atoms/avatar'\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\ntype ProfileStat = {\n label: string\n value: string\n}\n\nexport type ProfileCardProps = {\n actions?: ReactNode\n avatar?: string\n className?: string\n glass?: boolean\n name: string\n role?: string\n stats?: ProfileStat[]\n}\n\nexport const ProfileCard = forwardRef<HTMLDivElement, ProfileCardProps>(\n function ProfileCard(\n { actions, avatar, className, glass, name, role, stats },\n ref\n ) {\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-ctx gds-pad gds-radius-card flex flex-col items-center border',\n glass === true\n ? cx(glassClass(glass), 'bg-bg/60 border-white/10')\n : 'border-border bg-surface',\n className\n )}\n data-component=\"profile-card\"\n >\n <Avatar name={name} src={avatar} size=\"lg\" />\n <p className=\"text-fg mt-3 text-sm font-semibold\">{name}</p>\n {role !== undefined && (\n <p className=\"text-fg-muted mt-0.5 text-xs\">{role}</p>\n )}\n {stats !== undefined && stats.length > 0 && (\n <div className=\"gds-gap mt-3 flex w-full justify-center\">\n {stats.map((stat) => (\n <div key={stat.label} className=\"flex flex-col items-center\">\n <span className=\"text-fg text-sm font-bold\">{stat.value}</span>\n <span className=\"text-fg-muted text-[10px]\">{stat.label}</span>\n </div>\n ))}\n </div>\n )}\n {actions !== undefined && (\n <div className=\"gds-gap mt-3 flex w-full justify-center\">\n {actions}\n </div>\n )}\n </div>\n )\n }\n)\n","import type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype ProjectDashboardProps = {\n activity?: ReactNode\n className?: string\n progress?: ReactNode\n tasks?: ReactNode\n team?: ReactNode\n}\n\nconst ProjectDashboard = forwardRef<HTMLDivElement, ProjectDashboardProps>(\n function ProjectDashboard(\n { activity, className, progress, tasks, team },\n ref\n ) {\n return (\n <div\n className={cx('gds-gap grid grid-cols-2', className)}\n data-component=\"project-dashboard\"\n ref={ref}\n >\n {progress !== undefined && (\n <section data-slot=\"progress\">{progress}</section>\n )}\n {team !== undefined && <section data-slot=\"team\">{team}</section>}\n {activity !== undefined && (\n <section data-slot=\"activity\">{activity}</section>\n )}\n {tasks !== undefined && <section data-slot=\"tasks\">{tasks}</section>}\n </div>\n )\n }\n)\n\nexport { ProjectDashboard }\nexport type { ProjectDashboardProps }\n","// responsive-container — renders different children based on viewport width\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type ResponsiveContainerProps = {\n mobile: ReactNode\n tablet?: ReactNode\n desktop: ReactNode\n className?: string\n}\n\nexport const ResponsiveContainer = forwardRef<\n HTMLDivElement,\n ResponsiveContainerProps\n>(function ResponsiveContainer({ mobile, tablet, desktop, className }, ref) {\n const tabletContent = tablet ?? mobile\n\n return (\n <div\n ref={ref}\n className={cx(className)}\n data-component=\"responsive-container\"\n >\n <div className=\"block sm:hidden\">{mobile}</div>\n <div className=\"hidden sm:block lg:hidden\">{tabletContent}</div>\n <div className=\"hidden lg:block\">{desktop}</div>\n </div>\n )\n})\n","import { forwardRef } from 'react'\n\nimport { Progress } from '../l2-primitives/progress'\nimport { cx } from '../utils/cx'\n\ntype ServerInfo = {\n location: string\n metrics?: { cpu: number; disk: number; mem: number }\n name: string\n status: 'offline' | 'online'\n}\n\ntype ServerOverviewProps = React.HTMLAttributes<HTMLDivElement> & {\n servers: ServerInfo[]\n}\n\nfunction bv(v: number): 'danger' | 'success' | 'warning' {\n if (v >= 90) return 'danger'\n if (v >= 70) return 'warning'\n return 'success'\n}\n\nconst rowCls = 'flex items-center gap-2'\nconst labelCls = 'w-8 text-[10px] text-fg-muted'\nconst valueCls = 'w-8 text-right text-[10px] font-mono text-fg-muted'\n\nfunction MetricRow({ label, value }: { label: string; value: number }) {\n return (\n <div className={rowCls}>\n <span className={labelCls}>{label}</span>\n <Progress value={value} variant={bv(value)} size=\"sm\" />\n <span className={valueCls}>{value}%</span>\n </div>\n )\n}\n\nexport const ServerOverview = forwardRef<HTMLDivElement, ServerOverviewProps>(\n function ServerOverview({ className, servers, ...props }, ref) {\n return (\n <div\n className={cx('grid gap-3 sm:grid-cols-2 lg:grid-cols-3', className)}\n data-component=\"server-overview\"\n ref={ref}\n {...props}\n >\n {servers.map((s) => (\n <div\n key={s.name}\n className=\"border-border bg-surface gds-ctx rounded-lg border p-3\"\n >\n <div className=\"mb-2 flex items-center justify-between\">\n <span className=\"gds-text-label text-fg font-medium\">\n {s.name}\n </span>\n <span className=\"inline-flex items-center gap-1.5\">\n <span\n className={cx(\n 'h-2 w-2 rounded-full',\n s.status === 'online' ? 'bg-success' : 'bg-danger'\n )}\n />\n <span className=\"text-fg-muted text-xs\">{s.status}</span>\n </span>\n </div>\n <div className=\"text-fg-muted mb-2 text-xs\">{s.location}</div>\n {s.metrics !== undefined && (\n <div className=\"flex flex-col gap-1.5\">\n <MetricRow label=\"CPU\" value={s.metrics.cpu} />\n <MetricRow label=\"MEM\" value={s.metrics.mem} />\n <MetricRow label=\"DISK\" value={s.metrics.disk} />\n </div>\n )}\n </div>\n ))}\n </div>\n )\n }\n)\n\nexport type { ServerInfo, ServerOverviewProps }\n","// settings-layout — sidebar nav + content area for settings pages\nimport type { KeyboardEvent, ReactNode } from 'react'\nimport { useCallback, useRef, useState } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype SettingsSection = {\n content: ReactNode\n id: string\n label: string\n}\n\ntype SettingsLayoutProps = {\n activeSection?: string\n animated?: boolean\n className?: string\n defaultSection?: string\n navWidth?: number\n onSectionChange?: (sectionId: string) => void\n sections: SettingsSection[]\n stickyNav?: boolean\n}\n\nexport function SettingsLayout({\n activeSection: controlledActiveId,\n animated = true,\n className,\n defaultSection,\n navWidth = 192,\n onSectionChange,\n sections,\n stickyNav = true,\n}: SettingsLayoutProps) {\n const isControlled =\n controlledActiveId !== undefined && onSectionChange !== undefined\n const [internalId, setInternalId] = useState(\n defaultSection ?? sections[0]?.id ?? ''\n )\n const activeId = isControlled ? controlledActiveId : internalId\n const currentSection = sections.find((s) => s.id === activeId)\n const navItemsRef = useRef<Map<string, HTMLButtonElement>>(new Map())\n const animationKey = useRef(0)\n\n const handleSelect = useCallback(\n (sectionId: string) => {\n if (isControlled) {\n onSectionChange(sectionId)\n } else {\n setInternalId(sectionId)\n }\n if (onSectionChange !== undefined && !isControlled) {\n onSectionChange(sectionId)\n }\n animationKey.current += 1\n },\n [isControlled, onSectionChange]\n )\n\n const handleNavKeyDown = useCallback(\n (e: KeyboardEvent<HTMLUListElement>) => {\n if (e.key !== 'ArrowUp' && e.key !== 'ArrowDown') {\n return\n }\n e.preventDefault()\n const currentIndex = sections.findIndex((s) => s.id === activeId)\n if (currentIndex < 0) {\n return\n }\n let nextIndex = currentIndex\n if (e.key === 'ArrowDown') {\n nextIndex = currentIndex < sections.length - 1 ? currentIndex + 1 : 0\n }\n if (e.key === 'ArrowUp') {\n nextIndex = currentIndex > 0 ? currentIndex - 1 : sections.length - 1\n }\n const nextSection = sections[nextIndex]\n if (nextSection === undefined) {\n return\n }\n handleSelect(nextSection.id)\n const btn = navItemsRef.current.get(nextSection.id)\n if (btn !== undefined) {\n btn.focus()\n }\n },\n [activeId, handleSelect, sections]\n )\n\n const setNavItemRef = useCallback(\n (id: string, el: HTMLButtonElement | null) => {\n if (el !== null) {\n navItemsRef.current.set(id, el)\n } else {\n navItemsRef.current.delete(id)\n }\n },\n []\n )\n\n return (\n <div\n className={cx('flex gap-6', className)}\n data-component=\"settings-layout\"\n >\n <nav\n className=\"shrink-0\"\n style={{\n width: navWidth,\n ...(stickyNav\n ? { position: 'sticky' as const, top: 0, alignSelf: 'flex-start' }\n : {}),\n }}\n >\n <ul\n className=\"flex flex-col gap-0.5\"\n role=\"list\"\n onKeyDown={handleNavKeyDown}\n >\n {sections.map((section) => (\n <li key={section.id}>\n <button\n ref={(el) => setNavItemRef(section.id, el)}\n type=\"button\"\n className={cx(\n 'gds-text-body w-full rounded-md px-3 py-2 text-left transition-colors',\n section.id === activeId\n ? 'bg-accent/10 text-accent font-medium'\n : 'text-fg-muted hover:bg-bg-tertiary hover:text-fg'\n )}\n onClick={() => handleSelect(section.id)}\n >\n {section.label}\n </button>\n </li>\n ))}\n </ul>\n </nav>\n <div\n key={animated ? `${activeId}-${animationKey.current}` : undefined}\n className={cx('min-w-0 flex-1', animated && 'animate-fade-in')}\n >\n {currentSection !== undefined ? currentSection.content : null}\n </div>\n </div>\n )\n}\n\nexport type { SettingsLayoutProps, SettingsSection }\n","// sidebar — collapsible navigation panel with item support\nimport type { ReactNode } from 'react'\nimport { createContext, forwardRef, useContext, useState } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\n// context for sidebar collapsed state — children can react to it\ntype SidebarContextValue = { collapsed: boolean }\nconst SidebarContext = createContext<SidebarContextValue>({ collapsed: false })\n\nexport type SidebarItemProps = {\n icon: ReactNode\n label: string\n badge?: number | string\n active?: boolean\n onClick?: () => void\n href?: string\n className?: string\n}\n\n// sidebar item — shows icon + label when expanded, icon + tooltip when collapsed\nexport function SidebarItem({\n icon,\n label,\n badge,\n active,\n onClick,\n href,\n className,\n}: SidebarItemProps) {\n const { collapsed } = useContext(SidebarContext)\n const [showTooltip, setShowTooltip] = useState(false)\n\n const content = (\n <>\n <span className=\"flex h-5 w-5 shrink-0 items-center justify-center\">\n {icon}\n </span>\n {!collapsed && (\n <span className=\"gds-text-body flex-1 truncate\">{label}</span>\n )}\n {!collapsed && badge !== undefined && (\n <span className=\"bg-accent/15 gds-text-caption text-accent shrink-0 rounded-full px-1.5 py-px font-medium\">\n {badge}\n </span>\n )}\n {collapsed && badge !== undefined && (\n <span className=\"bg-danger absolute -top-0.5 -right-0.5 h-2 w-2 rounded-full\" />\n )}\n </>\n )\n\n const baseCls = cx(\n 'relative flex items-center gap-2.5 rounded-md px-2.5 py-2 text-left transition-colors select-none',\n active === true\n ? 'bg-accent/15 text-accent font-medium'\n : 'text-fg-muted hover:bg-white/[0.04] hover:text-fg',\n collapsed && 'justify-center px-0',\n className\n )\n\n const tooltipEl =\n collapsed && showTooltip ? (\n <div className=\"bg-bg-secondary border-border gds-text-label text-fg pointer-events-none absolute top-1/2 left-full z-50 ml-2 -translate-y-1/2 rounded-md border px-2.5 py-1 whitespace-nowrap shadow-lg\">\n {label}\n {badge !== undefined && (\n <span className=\"text-accent ml-1.5 font-medium\">{badge}</span>\n )}\n </div>\n ) : null\n\n const hoverHandlers = collapsed\n ? {\n onMouseEnter: () => setShowTooltip(true),\n onMouseLeave: () => setShowTooltip(false),\n }\n : {}\n\n if (href !== undefined) {\n return (\n <div className=\"relative\" {...hoverHandlers}>\n <a\n href={href}\n className={baseCls}\n data-component=\"sidebar-item\"\n data-state={active === true ? 'active' : undefined}\n >\n {content}\n </a>\n {tooltipEl}\n </div>\n )\n }\n\n return (\n <div className=\"relative\" {...hoverHandlers}>\n <button\n type=\"button\"\n onClick={onClick}\n className={cx(baseCls, 'w-full')}\n data-component=\"sidebar-item\"\n data-state={active === true ? 'active' : undefined}\n >\n {content}\n </button>\n {tooltipEl}\n </div>\n )\n}\n\nexport type SidebarProps = {\n children: ReactNode\n collapsed?: boolean\n onCollapse?: (collapsed: boolean) => void\n width?: number\n collapsedWidth?: number\n position?: 'left' | 'right'\n glass?: boolean\n className?: string\n /** v2: structured nav items (alternative to children) */\n items?: SidebarItemProps[]\n /** v2: show tooltip on hover when collapsed, default true */\n showTooltipOnCollapse?: boolean\n}\n\nexport const Sidebar = forwardRef<HTMLDivElement, SidebarProps>(\n function Sidebar(\n {\n children,\n collapsed = false,\n onCollapse,\n width = 240,\n collapsedWidth = 56,\n position = 'left',\n glass,\n className,\n items,\n },\n ref\n ) {\n const currentWidth = collapsed ? collapsedWidth : width\n\n return (\n <SidebarContext value={{ collapsed }}>\n <div\n ref={ref}\n className={cx(\n 'flex flex-col overflow-hidden transition-[width] duration-200',\n position === 'left' ? 'border-r' : 'border-l',\n glass === true\n ? cx(glassClass(glass), 'bg-bg/60 border-white/10')\n : 'border-border bg-surface',\n className\n )}\n data-collapsed={collapsed}\n data-component=\"sidebar\"\n style={{ width: currentWidth }}\n >\n <div className=\"flex-1 overflow-x-hidden overflow-y-auto\">\n {items !== undefined && (\n <nav className=\"flex flex-col gap-0.5 p-2\">\n {items.map((item) => (\n <SidebarItem key={item.label} {...item} />\n ))}\n </nav>\n )}\n {children}\n </div>\n {onCollapse !== undefined && (\n <button\n className=\"border-border/50 text-fg-muted hover:text-fg flex h-10 items-center justify-center border-t transition-colors\"\n type=\"button\"\n onClick={() => onCollapse(!collapsed)}\n aria-label={collapsed ? 'Expand sidebar' : 'Collapse sidebar'}\n >\n <svg\n className={cx(\n 'transition-transform duration-200',\n collapsed && 'rotate-180',\n position === 'right' && 'rotate-180',\n collapsed && position === 'right' && 'rotate-0'\n )}\n fill=\"none\"\n height=\"14\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n viewBox=\"0 0 24 24\"\n width=\"14\"\n >\n <polyline points=\"15 18 9 12 15 6\" />\n </svg>\n </button>\n )}\n </div>\n </SidebarContext>\n )\n }\n)\n","// skeleton-pattern — pre-composed skeleton loading patterns\nimport { forwardRef } from 'react'\n\nimport { Skeleton } from '../l2-primitives/skeleton'\nimport { cx } from '../utils/cx'\n\ntype SkeletonPatternVariant = 'card' | 'list' | 'profile' | 'table'\n\nexport type SkeletonPatternProps = {\n variant: SkeletonPatternVariant\n count?: number\n glass?: boolean\n className?: string\n}\n\nfunction CardSkeleton() {\n return (\n <div className=\"gds-gap gds-ctx gds-pad gds-radius-card flex flex-col\">\n <Skeleton variant=\"rect\" height={120} />\n <Skeleton variant=\"text\" width=\"60%\" />\n <Skeleton variant=\"text\" lines={2} />\n </div>\n )\n}\n\nfunction ListRow() {\n return (\n <div className=\"flex items-center gap-3\">\n <Skeleton variant=\"circle\" />\n <div className=\"flex flex-1 flex-col gap-2\">\n <Skeleton variant=\"text\" width=\"40%\" />\n <Skeleton variant=\"text\" width=\"80%\" />\n </div>\n </div>\n )\n}\n\nfunction ProfileSkeleton() {\n return (\n <div className=\"gds-gap gds-ctx gds-pad flex flex-col items-center\">\n <Skeleton variant=\"circle\" width={64} height={64} />\n <Skeleton variant=\"text\" width=\"30%\" />\n <Skeleton variant=\"text\" lines={3} />\n </div>\n )\n}\n\nfunction TableSkeleton({ rows }: { rows: number }) {\n return (\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex gap-4\">\n <Skeleton variant=\"text\" width=\"25%\" />\n <Skeleton variant=\"text\" width=\"25%\" />\n <Skeleton variant=\"text\" width=\"25%\" />\n <Skeleton variant=\"text\" width=\"25%\" />\n </div>\n {Array.from({ length: rows }, (_, i) => (\n <div key={i} className=\"flex gap-4\">\n <Skeleton variant=\"text\" width=\"25%\" />\n <Skeleton variant=\"text\" width=\"25%\" />\n <Skeleton variant=\"text\" width=\"25%\" />\n <Skeleton variant=\"text\" width=\"25%\" />\n </div>\n ))}\n </div>\n )\n}\n\nexport const SkeletonPattern = forwardRef<HTMLDivElement, SkeletonPatternProps>(\n function SkeletonPattern({ variant, count = 1, glass, className }, ref) {\n const glassClass = glass ? 'backdrop-blur-md bg-white/5' : undefined\n\n if (variant === 'card') {\n return (\n <div\n ref={ref}\n className={cx('gds-ctx gds-radius-card', glassClass, className)}\n data-component=\"skeleton-pattern\"\n data-variant=\"card\"\n >\n <CardSkeleton />\n </div>\n )\n }\n\n if (variant === 'list') {\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-gap gds-ctx gds-pad flex flex-col',\n glassClass,\n className\n )}\n data-component=\"skeleton-pattern\"\n data-variant=\"list\"\n >\n {Array.from({ length: count }, (_, i) => (\n <ListRow key={i} />\n ))}\n </div>\n )\n }\n\n if (variant === 'profile') {\n return (\n <div\n ref={ref}\n className={cx(glassClass, className)}\n data-component=\"skeleton-pattern\"\n data-variant=\"profile\"\n >\n <ProfileSkeleton />\n </div>\n )\n }\n\n return (\n <div\n ref={ref}\n className={cx('gds-ctx gds-pad', glassClass, className)}\n data-component=\"skeleton-pattern\"\n data-variant=\"table\"\n >\n <TableSkeleton rows={count} />\n </div>\n )\n }\n)\n\nexport type { SkeletonPatternVariant }\n","// splash-screen — full-screen loading splash during app initialization\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type SplashScreenProps = React.HTMLAttributes<HTMLDivElement> & {\n logo?: ReactNode\n message?: string\n title?: string\n visible: boolean\n}\n\n// inline spinner to avoid circular dependency with L2\nfunction SplashSpinner() {\n return (\n <svg\n className=\"text-accent h-5 w-5 animate-spin\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n}\n\nexport const SplashScreen = forwardRef<HTMLDivElement, SplashScreenProps>(\n function SplashScreen(\n { className, logo, message, title, visible, ...props },\n ref\n ) {\n return (\n <div\n ref={ref}\n className={cx(\n 'bg-bg fixed inset-0 z-[9999] flex flex-col items-center justify-center transition-opacity duration-300',\n visible === true ? 'opacity-100' : 'pointer-events-none opacity-0',\n className\n )}\n data-component=\"splash-screen\"\n data-visible={visible}\n {...props}\n >\n {logo !== undefined && <div className=\"mb-6\">{logo}</div>}\n {title !== undefined && (\n <h1 className=\"text-fg mb-2 text-lg font-semibold\">{title}</h1>\n )}\n {message !== undefined && (\n <p className=\"text-fg-muted mb-8 text-sm\">{message}</p>\n )}\n <SplashSpinner />\n </div>\n )\n }\n)\n","import type { ReactNode } from 'react'\nimport { forwardRef, useCallback, useRef, useState } from 'react'\n\nimport { ResizeHandle } from '../l3-atoms/resize-handle'\nimport { cx } from '../utils/cx'\n\ntype SplitViewProps = React.HTMLAttributes<HTMLDivElement> & {\n defaultSplit?: number\n left: ReactNode\n minLeft?: number\n minRight?: number\n right: ReactNode\n}\n\nexport const SplitView = forwardRef<HTMLDivElement, SplitViewProps>(\n function SplitView(\n {\n className,\n defaultSplit = 50,\n left,\n minLeft = 20,\n minRight = 20,\n right,\n ...props\n },\n ref\n ) {\n const [split, setSplit] = useState(defaultSplit)\n const containerRef = useRef<HTMLDivElement>(null)\n\n const handleResize = useCallback(\n (delta: number) => {\n const container = containerRef.current\n if (container === null) return\n const width = container.offsetWidth\n if (width === 0) return\n const pctDelta = (delta / width) * 100\n setSplit((prev) => {\n const next = prev + pctDelta\n if (next < minLeft) return minLeft\n if (next > 100 - minRight) return 100 - minRight\n return next\n })\n },\n [minLeft, minRight]\n )\n\n return (\n <div\n className={cx('flex h-full w-full', className)}\n data-component=\"split-view\"\n ref={(el) => {\n ;(\n containerRef as React.MutableRefObject<HTMLDivElement | null>\n ).current = el\n if (typeof ref === 'function') ref(el)\n else if (ref !== null && ref !== undefined)\n (ref as React.MutableRefObject<HTMLDivElement | null>).current = el\n }}\n {...props}\n >\n <div className=\"overflow-auto\" style={{ width: `${split}%` }}>\n {left}\n </div>\n <ResizeHandle orientation=\"vertical\" onResize={handleResize} />\n <div className=\"overflow-auto\" style={{ width: `${100 - split}%` }}>\n {right}\n </div>\n </div>\n )\n }\n)\n\nexport type { SplitViewProps }\n","// stat — KPI card with animated counter, trend, sparkline, and motion\nimport type { ReactNode } from 'react'\nimport { forwardRef, useEffect, useMemo, useRef, useState } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype StatProps = {\n animated?: boolean\n change?: string\n changeType?: 'down' | 'neutral' | 'up'\n className?: string\n description?: string\n footer?: ReactNode\n glass?: boolean\n icon?: ReactNode\n label: string\n motion?: 'counter' | 'fade' | 'slide-up'\n pulse?: boolean\n size?: 'default' | 'lg' | 'sm'\n sparkData?: number[]\n trend?: number\n unit?: string\n value: number | string\n}\n\nconst valueSizes = { default: 'text-2xl', lg: 'text-3xl', sm: 'text-lg' }\n\nconst changeColors = {\n down: 'text-danger',\n neutral: 'text-fg-muted',\n up: 'text-success',\n}\n\n// inline arrow SVGs\nfunction ArrowUpIcon() {\n return (\n <svg\n className=\"h-3 w-3\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M12 19V5M5 12l7-7 7 7\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )\n}\nfunction ArrowDownIcon() {\n return (\n <svg\n className=\"h-3 w-3\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M12 5v14M19 12l-7 7-7-7\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )\n}\nfunction MinusIcon() {\n return (\n <svg\n className=\"h-3 w-3\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M5 12h14\" strokeLinecap=\"round\" />\n </svg>\n )\n}\n\nconst changeIcons = { down: ArrowDownIcon, neutral: MinusIcon, up: ArrowUpIcon }\n\nfunction sparklinePath(data: number[], w: number, h: number): string {\n if (data.length < 2) return ''\n const min = Math.min(...data)\n const max = Math.max(...data)\n const range = max - min || 1\n const step = w / (data.length - 1)\n return data\n .map(\n (v, i) =>\n `${i === 0 ? 'M' : 'L'}${(i * step).toFixed(1)},${(h - ((v - min) / range) * h).toFixed(1)}`\n )\n .join(' ')\n}\n\nfunction useAnimatedValue(\n target: number,\n enabled: boolean,\n duration: number = 500\n): number {\n const [display, setDisplay] = useState(target)\n const prevRef = useRef(target)\n const rafRef = useRef<number>(0)\n\n useEffect(() => {\n if (!enabled) {\n setDisplay(target)\n return\n }\n const from = prevRef.current\n prevRef.current = target\n if (from === target) return\n const startTime = performance.now()\n const diff = target - from\n const animate = (now: number) => {\n const progress = Math.min(1, (now - startTime) / duration)\n const eased = 1 - Math.pow(1 - progress, 3)\n setDisplay(from + diff * eased)\n if (progress < 1) {\n rafRef.current = requestAnimationFrame(animate)\n } else {\n setDisplay(target)\n }\n }\n rafRef.current = requestAnimationFrame(animate)\n return () => cancelAnimationFrame(rafRef.current)\n }, [target, enabled, duration])\n\n return display\n}\n\nexport const Stat = forwardRef<HTMLDivElement, StatProps>(function Stat(\n {\n animated = false,\n change,\n changeType = 'neutral',\n className,\n description,\n footer,\n glass = false,\n icon,\n label,\n motion: motionProp,\n pulse = false,\n size = 'default',\n sparkData,\n trend,\n unit,\n value,\n },\n ref\n) {\n const ChangeIcon = changeIcons[changeType]\n const trendDir =\n trend !== undefined\n ? trend > 0\n ? 'up'\n : trend < 0\n ? 'down'\n : 'neutral'\n : null\n const trendColor = trendDir !== null ? changeColors[trendDir] : null\n const sparkColor =\n trendDir === 'up'\n ? 'var(--gds-success)'\n : trendDir === 'down'\n ? 'var(--gds-danger)'\n : 'var(--gds-fg-muted)'\n\n const path = useMemo(\n () =>\n sparkData !== undefined && sparkData.length >= 2\n ? sparklinePath(sparkData, 80, 24)\n : null,\n [sparkData]\n )\n\n const numericValue = typeof value === 'number' ? value : null\n const animatedValue = useAnimatedValue(\n numericValue ?? 0,\n animated && numericValue !== null\n )\n const displayValue =\n animated && numericValue !== null\n ? Number.isInteger(animatedValue)\n ? animatedValue.toLocaleString()\n : animatedValue.toLocaleString(undefined, { maximumFractionDigits: 2 })\n : value\n\n const motionCls =\n motionProp === 'fade'\n ? 'animate-fade-in'\n : motionProp === 'slide-up'\n ? 'animate-slide-up'\n : ''\n\n return (\n <div\n className={cx(\n 'select-none',\n glass\n ? 'rounded-lg border border-white/10 bg-white/5 p-4 shadow-lg backdrop-blur-xl'\n : 'space-y-1',\n pulse && 'animate-pulse',\n motionCls,\n className\n )}\n data-component=\"stat\"\n ref={ref}\n >\n <div className=\"flex items-start justify-between\">\n <div className=\"text-fg-muted text-xs\">{label}</div>\n {icon !== undefined && (\n <span className=\"text-fg-muted/30 h-4 w-4\">{icon}</span>\n )}\n </div>\n\n <div className=\"flex items-end gap-3\">\n <div className={cx('text-fg font-bold tabular-nums', valueSizes[size])}>\n {displayValue}\n {unit !== undefined && (\n <span className=\"text-fg-muted ml-1 text-xs font-normal\">\n {unit}\n </span>\n )}\n </div>\n {trend !== undefined && trendDir !== null && (\n <div\n className={cx(\n 'mb-0.5 flex items-center gap-0.5 text-xs font-medium',\n trendColor\n )}\n >\n {trendDir === 'up' && <ArrowUpIcon />}\n {trendDir === 'down' && <ArrowDownIcon />}\n {trendDir === 'neutral' && <MinusIcon />}\n <span>\n {trendDir === 'neutral'\n ? '0%'\n : `${trend > 0 ? '+' : ''}${trend}%`}\n </span>\n </div>\n )}\n </div>\n\n {change !== undefined && trend === undefined && (\n <div\n className={cx(\n 'inline-flex items-center gap-0.5 text-xs font-medium',\n changeColors[changeType]\n )}\n >\n <ChangeIcon />\n {change}\n </div>\n )}\n\n {path !== null && (\n <svg className=\"mt-1\" height={24} viewBox=\"0 0 80 24\" width={80}>\n <path\n d={path}\n fill=\"none\"\n stroke={sparkColor}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n />\n </svg>\n )}\n\n {description !== undefined && (\n <div className=\"text-fg-muted text-[11px]\">{description}</div>\n )}\n {footer !== undefined && (\n <div className=\"border-border/20 text-fg-muted/50 mt-3 border-t pt-2 text-[10px]\">\n {footer}\n </div>\n )}\n </div>\n )\n})\n\nexport type { StatProps }\n","// stat-grid — responsive grid layout for metric cards and stat widgets\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nconst colsMap = {\n 2: 'grid-cols-2',\n 3: 'grid-cols-3',\n 4: 'grid-cols-4',\n} as const\n\nexport type StatGridProps = {\n children: ReactNode\n columns?: 2 | 3 | 4\n className?: string\n}\n\nexport const StatGrid = forwardRef<HTMLDivElement, StatGridProps>(\n function StatGrid({ children, columns = 3, className }, ref) {\n return (\n <div\n ref={ref}\n className={cx('gds-gap-lg grid', colsMap[columns], className)}\n data-component=\"stat-grid\"\n >\n {children}\n </div>\n )\n }\n)\n","// stats-card — rich KPI card with icon, value, trend, and sparkline\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\nexport type StatsCardProps = {\n icon?: ReactNode\n label: string\n value: string | number\n trend?: number\n sparkData?: number[]\n glass?: boolean\n className?: string\n}\n\nfunction MiniSparkline({ data }: { data: number[] }) {\n const h = 24\n const w = 64\n if (data.length < 2) return null\n const max = Math.max(...data)\n const min = Math.min(...data)\n const range = max - min\n const points = data\n .map((v, i) => {\n const x = (i / (data.length - 1)) * w\n const y = range > 0 ? h - ((v - min) / range) * h : h / 2\n return `${x},${y}`\n })\n .join(' ')\n\n return (\n <svg className=\"mt-2\" height={h} viewBox={`0 0 ${w} ${h}`} width={w}>\n <polyline\n fill=\"none\"\n points={points}\n stroke=\"var(--gds-accent)\"\n strokeWidth={1.5}\n />\n </svg>\n )\n}\n\nexport const StatsCard = forwardRef<HTMLDivElement, StatsCardProps>(\n function StatsCard(\n { icon, label, value, trend, sparkData, glass, className },\n ref\n ) {\n const isPositive = trend !== undefined && trend >= 0\n\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-ctx gds-radius-card gds-pad-x-lg gds-pad-y-lg relative border',\n glass === true\n ? cx(glassClass(glass), 'bg-bg/60 border-white/10')\n : 'border-border bg-surface',\n className\n )}\n data-component=\"stats-card\"\n >\n <div className=\"flex items-start justify-between\">\n <div className=\"flex items-center gap-2\">\n {icon !== undefined && (\n <div className=\"text-fg-muted/50\">{icon}</div>\n )}\n <p className=\"gds-text-body text-fg-muted\">{label}</p>\n </div>\n {trend !== undefined && (\n <span\n className={cx(\n 'inline-flex items-center gap-0.5 rounded-full px-1.5 py-0.5 text-[10px] font-medium',\n isPositive\n ? 'bg-success/10 text-success'\n : 'bg-danger/10 text-danger'\n )}\n >\n {isPositive ? '\\u2191' : '\\u2193'}\n {isPositive ? '+' : ''}\n {trend}%\n </span>\n )}\n </div>\n <p className=\"text-fg mt-1 text-2xl font-bold\">{value}</p>\n {sparkData !== undefined && sparkData.length >= 2 && (\n <MiniSparkline data={sparkData} />\n )}\n </div>\n )\n }\n)\n","// status-page — full-page status display for 404, 500, maintenance, etc.\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type StatusPageProps = {\n code?: string | number\n title: string\n description?: string\n action?: ReactNode\n secondaryAction?: ReactNode\n illustration?: ReactNode\n className?: string\n}\n\nexport const StatusPage = forwardRef<HTMLDivElement, StatusPageProps>(\n function StatusPage(\n {\n code,\n title,\n description,\n action,\n secondaryAction,\n illustration,\n className,\n },\n ref\n ) {\n return (\n <div\n ref={ref}\n className={cx(\n 'flex min-h-[60vh] flex-col items-center justify-center gap-4 text-center',\n className\n )}\n data-component=\"status-page\"\n >\n {illustration !== undefined && (\n <div className=\"mb-2\">{illustration}</div>\n )}\n {code !== undefined && (\n <p className=\"text-fg-muted/10 text-6xl font-bold\">{code}</p>\n )}\n <h1 className=\"text-fg text-xl font-semibold\">{title}</h1>\n {description !== undefined && (\n <p className=\"text-fg-muted max-w-md\">{description}</p>\n )}\n {(action !== undefined || secondaryAction !== undefined) && (\n <div className=\"mt-2 flex items-center gap-3\">\n {action}\n {secondaryAction}\n </div>\n )}\n </div>\n )\n }\n)\n","// stepper-form — multi-step form wizard with prev/next navigation\nimport type { ReactNode } from 'react'\nimport { forwardRef, useState } from 'react'\n\nimport { Button } from '../l2-primitives/button'\nimport { Stepper } from '../l4-molecules/stepper'\nimport { cx } from '../utils/cx'\n\ntype StepperFormStep = {\n title: string\n description?: string\n content: ReactNode\n}\n\nexport type StepperFormProps = React.HTMLAttributes<HTMLDivElement> & {\n steps: StepperFormStep[]\n onComplete?: () => void\n completeLabel?: string\n glass?: boolean\n}\n\nexport const StepperForm = forwardRef<HTMLDivElement, StepperFormProps>(\n function StepperForm(\n {\n steps,\n onComplete,\n completeLabel = 'Complete',\n glass = false,\n className,\n ...props\n },\n ref\n ) {\n const [current, setCurrent] = useState(0)\n const isFirst = current === 0\n const isLast = current === steps.length - 1\n\n const stepDefs = steps.map((s) => ({\n label: s.title,\n description: s.description,\n }))\n\n return (\n <div\n ref={ref}\n className={cx(\n 'border-border flex flex-col rounded-lg border p-6',\n glass ? 'bg-bg/80 backdrop-blur-xl' : 'bg-bg-secondary',\n className\n )}\n data-component=\"stepper-form\"\n {...props}\n >\n {/* stepper indicator */}\n <Stepper steps={stepDefs} current={current} className=\"mb-6\" />\n\n {/* step content */}\n <div className=\"min-h-[120px] flex-1\">{steps[current]?.content}</div>\n\n {/* navigation */}\n <div className=\"mt-6 flex items-center justify-between\">\n <Button\n variant=\"secondary\"\n size=\"sm\"\n disabled={isFirst}\n onClick={() => setCurrent((c) => c - 1)}\n >\n Previous\n </Button>\n\n {isLast ? (\n <Button size=\"sm\" onClick={onComplete}>\n {completeLabel}\n </Button>\n ) : (\n <Button size=\"sm\" onClick={() => setCurrent((c) => c + 1)}>\n Next\n </Button>\n )}\n </div>\n </div>\n )\n }\n)\n","import { forwardRef, useEffect, useState } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\ntype StickyHeaderProps = React.HTMLAttributes<HTMLDivElement> & {\n glass?: boolean\n threshold?: number\n}\n\nexport const StickyHeader = forwardRef<HTMLDivElement, StickyHeaderProps>(\n function StickyHeader(\n { children, className, glass = true, threshold = 0, ...props },\n ref\n ) {\n const [isSticky, setIsSticky] = useState(false)\n\n useEffect(() => {\n function handleScroll() {\n setIsSticky(window.scrollY > threshold)\n }\n window.addEventListener('scroll', handleScroll, { passive: true })\n return () => window.removeEventListener('scroll', handleScroll)\n }, [threshold])\n\n return (\n <div\n className={cx(\n 'sticky top-0 z-40 transition-[background-color,box-shadow] duration-200',\n isSticky && 'bg-bg/80 shadow-md',\n isSticky && glass && glassClass(true),\n className\n )}\n data-component=\"sticky-header\"\n data-sticky={isSticky}\n ref={ref}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\n\nexport type { StickyHeaderProps }\n","// testimonial — customer review/endorsement quote card\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\nexport type TestimonialProps = {\n quote: string\n author: string\n role?: string\n avatar?: string\n rating?: number\n glass?: boolean\n className?: string\n}\n\nexport const Testimonial = forwardRef<HTMLDivElement, TestimonialProps>(\n function Testimonial(\n { quote, author, role, avatar, rating, glass, className },\n ref\n ) {\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-ctx gds-radius-card gds-pad-x-lg gds-pad-y-lg border',\n glass === true\n ? cx(glassClass(glass), 'bg-bg/60 border-white/10')\n : 'border-border bg-surface',\n className\n )}\n data-component=\"testimonial\"\n >\n <svg\n className=\"text-fg-muted mb-3 h-6 w-6 opacity-30\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n >\n <path d=\"M4.583 17.321C3.553 16.227 3 15 3 13.011c0-3.5 2.457-6.637 6.03-8.188l.893 1.378C7.06 7.752 6.14 9.87 5.94 11.501c.26-.058.527-.088.8-.088 1.656 0 2.96 1.283 2.96 2.87 0 1.586-1.304 2.87-2.96 2.87-.83 0-1.572-.358-2.157-.832zM14.583 17.321C13.553 16.227 13 15 13 13.011c0-3.5 2.457-6.637 6.03-8.188l.893 1.378c-2.863 1.551-3.783 3.669-3.983 5.3.26-.058.527-.088.8-.088 1.656 0 2.96 1.283 2.96 2.87 0 1.586-1.304 2.87-2.96 2.87-.83 0-1.572-.358-2.157-.832z\" />\n </svg>\n <p className=\"gds-text-body text-fg italic\">{quote}</p>\n {rating !== undefined && (\n <div className=\"mt-3 flex gap-0.5\">\n {Array.from({ length: 5 }, (_, i) => (\n <svg\n key={i}\n className={cx(\n 'h-4 w-4',\n i < rating ? 'text-warning' : 'text-fg-muted/30'\n )}\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n >\n <path d=\"M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z\" />\n </svg>\n ))}\n </div>\n )}\n <div className=\"mt-4 flex items-center gap-3\">\n {avatar !== undefined && (\n <img\n src={avatar}\n alt={author}\n className=\"h-10 w-10 rounded-full object-cover\"\n />\n )}\n <div>\n <p className=\"text-fg text-sm font-medium\">{author}</p>\n {role !== undefined && (\n <p className=\"text-fg-muted text-xs\">{role}</p>\n )}\n </div>\n </div>\n </div>\n )\n }\n)\n","// timeline-steps — horizontal step indicator for order tracking and milestones\nimport { cx } from '../utils/cx'\n\nexport type TimelineStep = {\n label: string\n description?: string\n status: 'completed' | 'current' | 'upcoming'\n}\n\nexport type TimelineStepsProps = {\n steps: TimelineStep[]\n className?: string\n}\n\nexport function TimelineSteps({ steps, className }: TimelineStepsProps) {\n return (\n <div\n data-component=\"timeline-steps\"\n className={cx('flex items-start', className)}\n >\n {steps.map((step, i) => (\n <div key={step.label} className=\"flex flex-1 items-start\">\n <div className=\"flex flex-col items-center\">\n <div\n data-status={step.status}\n className={cx(\n 'flex h-8 w-8 shrink-0 items-center justify-center rounded-full text-xs font-semibold',\n step.status === 'completed' && 'bg-success text-white',\n step.status === 'current' &&\n 'bg-accent text-accent-fg animate-pulse',\n step.status === 'upcoming' && 'bg-bg-tertiary text-fg-muted'\n )}\n >\n {step.status === 'completed' ? (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n ) : (\n i + 1\n )}\n </div>\n <div className=\"mt-2 text-center\">\n <div className=\"text-fg text-xs font-medium\">{step.label}</div>\n {step.description !== undefined && (\n <div className=\"text-fg-muted mt-0.5 text-[10px]\">\n {step.description}\n </div>\n )}\n </div>\n </div>\n {i < steps.length - 1 && (\n <div\n className={cx(\n 'mx-2 mt-4 h-0.5 flex-1',\n step.status === 'completed' ? 'bg-success' : 'bg-border'\n )}\n />\n )}\n </div>\n ))}\n </div>\n )\n}\n","// toolbar — horizontal toolbar with icon buttons, separators, and groups\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\ntype ToolbarPosition = 'bottom' | 'floating' | 'top'\n\nexport type ToolbarProps = React.HTMLAttributes<HTMLDivElement> & {\n children: ReactNode\n glass?: boolean\n position?: ToolbarPosition\n}\n\nexport const Toolbar = forwardRef<HTMLDivElement, ToolbarProps>(\n function Toolbar(\n { children, className, glass, position = 'top', ...props },\n ref\n ) {\n const isFloating = position === 'floating'\n const resolvedGlass = glass ?? isFloating\n\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-gap-sm gds-pad-x gds-pad-y-sm flex items-center',\n position === 'top' && 'border-border border-b',\n position === 'bottom' && 'border-border border-t',\n isFloating && 'gds-shadow-lg rounded-full',\n resolvedGlass === true\n ? cx(glassClass(resolvedGlass), 'bg-bg/60 border-white/10')\n : !isFloating && 'bg-surface',\n isFloating &&\n resolvedGlass !== true &&\n 'border-border bg-surface border',\n className\n )}\n data-component=\"toolbar\"\n data-position={position}\n role=\"toolbar\"\n {...props}\n >\n {children}\n </div>\n )\n }\n)\n","// wizard-layout — full-page wizard with step indicator, content, and actions\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { ProgressSteps } from '../l4-molecules/progress-steps'\nimport { cx } from '../utils/cx'\n\ntype WizardLayoutProps = React.HTMLAttributes<HTMLDivElement> & {\n actions?: ReactNode\n children: ReactNode\n currentStep: number\n steps: string[]\n}\n\nexport const WizardLayout = forwardRef<HTMLDivElement, WizardLayoutProps>(\n function WizardLayout(\n { steps, currentStep, children, actions, className, ...props },\n ref\n ) {\n return (\n <div\n ref={ref}\n className={cx('gds-gap flex min-h-0 flex-1 flex-col', className)}\n data-component=\"wizard-layout\"\n {...props}\n >\n <div className=\"gds-pad-x shrink-0\">\n <ProgressSteps steps={steps} current={currentStep} />\n </div>\n <div className=\"gds-pad-x min-h-0 flex-1 overflow-auto\">{children}</div>\n {actions !== undefined && (\n <div className=\"gds-gap gds-pad-x gds-pad-y border-border flex shrink-0 items-center justify-end border-t\">\n {actions}\n </div>\n )}\n </div>\n )\n }\n)\n\nexport type { WizardLayoutProps }\n"],"mappings":"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"}
1
+ {"version":3,"file":"l7-patterns-CM3FUxjA.js","names":[],"sources":["../src/l7-patterns/action-bar.tsx","../src/l7-patterns/admin-layout.tsx","../src/l7-patterns/analytics-dashboard.tsx","../src/l7-patterns/app-shell.tsx","../src/l7-patterns/bento-grid.tsx","../src/l7-patterns/calendar-view.tsx","../src/l7-patterns/comparison-table.tsx","../src/l7-patterns/composition-pattern.tsx","../src/l7-patterns/cta-banner.tsx","../src/l7-patterns/dashboard-layout.tsx","../src/l7-patterns/data-export-card.tsx","../src/l7-patterns/devops-layout.tsx","../src/l7-patterns/empty-state.tsx","../src/l7-patterns/faq.tsx","../src/l7-patterns/feature-card.tsx","../src/l7-patterns/footer.tsx","../src/l7-patterns/form-layout.tsx","../src/l7-patterns/form-pattern.tsx","../src/l7-patterns/glass-panel.tsx","../src/l7-patterns/grid-layout.tsx","../src/l7-patterns/hero.tsx","../src/l7-patterns/hr-dashboard.tsx","../src/l7-patterns/inbox-layout.tsx","../src/l7-patterns/metric-card.tsx","../src/l7-patterns/kpi-dashboard.tsx","../src/l7-patterns/loading-states.tsx","../src/l7-patterns/login-form.tsx","../src/l7-patterns/mail-composer.tsx","../src/l7-patterns/masonry.tsx","../src/l7-patterns/media-grid.tsx","../src/l7-patterns/mini-dashboard.tsx","../src/l7-patterns/monitor-grid.tsx","../src/l7-patterns/nav-bar.tsx","../src/l7-patterns/notification-list.tsx","../src/l7-patterns/onboarding-card.tsx","../src/l7-patterns/page-header.tsx","../src/l7-patterns/panel-group.tsx","../src/l7-patterns/payroll-dashboard.tsx","../src/l7-patterns/pricing-card.tsx","../src/l7-patterns/profile-card.tsx","../src/l7-patterns/project-dashboard.tsx","../src/l7-patterns/responsive-container.tsx","../src/l7-patterns/server-overview.tsx","../src/l7-patterns/settings-layout.tsx","../src/l7-patterns/sidebar.tsx","../src/l7-patterns/skeleton-pattern.tsx","../src/l7-patterns/splash-screen.tsx","../src/l7-patterns/split-view.tsx","../src/l7-patterns/stat.tsx","../src/l7-patterns/stat-grid.tsx","../src/l7-patterns/stats-card.tsx","../src/l7-patterns/status-page.tsx","../src/l7-patterns/stepper-form.tsx","../src/l7-patterns/sticky-header.tsx","../src/l7-patterns/testimonial.tsx","../src/l7-patterns/timeline-steps.tsx","../src/l7-patterns/toolbar.tsx","../src/l7-patterns/wizard-layout.tsx"],"sourcesContent":["// action-bar — sticky bottom/top action bar for forms and bulk operations\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\ntype ActionBarPosition = 'bottom' | 'top'\ntype ActionBarJustify = 'between' | 'center' | 'end' | 'start'\n\nexport type ActionBarProps = {\n children: ReactNode\n className?: string\n glass?: boolean\n justify?: ActionBarJustify\n position?: ActionBarPosition\n}\n\nconst justifyMap: Record<ActionBarJustify, string> = {\n between: 'justify-between',\n center: 'justify-center',\n end: 'justify-end',\n start: 'justify-start',\n}\n\nexport const ActionBar = forwardRef<HTMLDivElement, ActionBarProps>(\n function ActionBar(\n { children, className, glass = true, justify = 'end', position = 'bottom' },\n ref\n ) {\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-pad-x-lg gds-pad-y sticky z-10 flex items-center',\n position === 'bottom' ? 'bottom-0 border-t' : 'top-0 border-b',\n justifyMap[justify],\n glass === true\n ? cx(glassClass(glass), 'bg-bg/60 border-white/10')\n : 'border-border bg-surface',\n className\n )}\n data-component=\"action-bar\"\n >\n {children}\n </div>\n )\n }\n)\n","// admin-layout — full admin application layout with sidebar + topbar + content\n// supports mobile responsive drawer mode via Sheet\nimport type { ReactNode } from 'react'\nimport { forwardRef, useState } from 'react'\n\nimport { Sheet } from '../l4-molecules/sheet'\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\nimport { useIsMobile } from '../utils/hooks'\n\ntype AdminLayoutProps = {\n sidebar: ReactNode\n topbar?: ReactNode\n children: ReactNode\n sidebarWidth?: number\n sidebarCollapsible?: boolean\n sidebarDefaultCollapsed?: boolean\n mobileDrawer?: boolean\n topbarHeight?: number\n topbarSticky?: boolean\n logo?: ReactNode\n className?: string\n}\n\n// simple 3-line hamburger icon — no lucide dependency in L7\nfunction HamburgerIcon() {\n return (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n >\n <path d=\"M3 5h14M3 10h14M3 15h14\" />\n </svg>\n )\n}\n\n// collapse/expand chevron icon\nfunction CollapseIcon({ collapsed }: { collapsed: boolean }) {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={cx(\n 'transition-transform duration-200',\n collapsed && 'rotate-180'\n )}\n >\n <path d=\"M10 3L5 8l5 5\" />\n </svg>\n )\n}\n\nconst AdminLayout = forwardRef<HTMLDivElement, AdminLayoutProps>(\n function AdminLayout(\n {\n sidebar,\n topbar,\n children,\n sidebarWidth = 240,\n sidebarCollapsible = true,\n sidebarDefaultCollapsed = false,\n mobileDrawer = true,\n topbarHeight = 48,\n topbarSticky = true,\n logo,\n className,\n },\n ref\n ) {\n const isMobile = useIsMobile()\n const [drawerOpen, setDrawerOpen] = useState(false)\n const [collapsed, setCollapsed] = useState(sidebarDefaultCollapsed)\n\n const showMobileDrawer = mobileDrawer && isMobile\n const effectiveSidebarWidth = collapsed ? 56 : sidebarWidth\n\n return (\n <div\n ref={ref}\n className={cx('bg-bg flex h-screen min-h-0', className)}\n data-component=\"admin-layout\"\n >\n {/* desktop sidebar */}\n {!showMobileDrawer && (\n <aside\n className=\"border-border bg-surface relative shrink-0 overflow-y-auto border-r transition-[width] duration-200\"\n style={{ width: effectiveSidebarWidth }}\n >\n {logo !== undefined && (\n <div\n className=\"border-border flex items-center border-b px-3\"\n style={{ height: topbarHeight }}\n >\n {logo}\n </div>\n )}\n <div className={cx(collapsed && 'overflow-hidden')}>{sidebar}</div>\n {sidebarCollapsible && (\n <button\n type=\"button\"\n onClick={() => setCollapsed((prev) => !prev)}\n className={cx(\n 'text-fg-muted hover:text-fg hover:bg-surface-hover absolute right-2 bottom-3 flex h-6 w-6 items-center justify-center rounded-md',\n focusCls\n )}\n aria-label={collapsed ? 'Expand sidebar' : 'Collapse sidebar'}\n >\n <CollapseIcon collapsed={collapsed} />\n </button>\n )}\n </aside>\n )}\n\n {/* mobile drawer */}\n {showMobileDrawer && (\n <Sheet\n open={drawerOpen}\n onClose={() => setDrawerOpen(false)}\n side=\"left\"\n width={sidebarWidth}\n >\n {logo !== undefined && <div className=\"mb-2\">{logo}</div>}\n {sidebar}\n </Sheet>\n )}\n\n <div className=\"flex min-w-0 flex-1 flex-col\">\n {/* topbar — always render if mobile (for hamburger), or if topbar content provided */}\n {(topbar !== undefined || showMobileDrawer) && (\n <header\n className={cx(\n 'border-border bg-surface/80 z-10 flex shrink-0 items-center border-b backdrop-blur-sm',\n topbarSticky && 'sticky top-0'\n )}\n style={{ height: topbarHeight }}\n >\n {showMobileDrawer && (\n <button\n type=\"button\"\n onClick={() => setDrawerOpen(true)}\n className={cx(\n 'text-fg-muted hover:text-fg hover:bg-surface-hover ml-2 flex h-9 w-9 items-center justify-center rounded-md',\n focusCls\n )}\n aria-label=\"Open sidebar menu\"\n data-testid=\"admin-layout-hamburger\"\n >\n <HamburgerIcon />\n </button>\n )}\n {topbar !== undefined && (\n <div className=\"min-w-0 flex-1\">{topbar}</div>\n )}\n </header>\n )}\n <main className=\"flex-1 overflow-auto\">{children}</main>\n </div>\n </div>\n )\n }\n)\n\nexport { AdminLayout }\nexport type { AdminLayoutProps }\n","import type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype AnalyticsDashboardProps = {\n charts?: ReactNode\n className?: string\n data?: ReactNode\n metrics?: ReactNode\n}\n\nconst AnalyticsDashboard = forwardRef<HTMLDivElement, AnalyticsDashboardProps>(\n function AnalyticsDashboard({ charts, className, data, metrics }, ref) {\n return (\n <div\n className={cx('gds-gap flex flex-col', className)}\n data-component=\"analytics-dashboard\"\n ref={ref}\n >\n {metrics !== undefined && (\n <section className=\"gds-gap flex flex-wrap\" data-slot=\"metrics\">\n {metrics}\n </section>\n )}\n {charts !== undefined && (\n <section className=\"gds-gap flex flex-col\" data-slot=\"charts\">\n {charts}\n </section>\n )}\n {data !== undefined && (\n <section className=\"gds-gap flex flex-col\" data-slot=\"data\">\n {data}\n </section>\n )}\n </div>\n )\n }\n)\n\nexport { AnalyticsDashboard }\nexport type { AnalyticsDashboardProps }\n","// app-shell — root application layout with sidebar, content, status bar, and mobile nav\n// the outermost frame for mailrs-style applications\n// desktop: sidebar + content + optional status bar\n// mobile: content + bottom nav, sidebar hidden\n\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\nimport { useIsMobile } from '../utils/hooks'\n\nexport type AppShellProps = React.HTMLAttributes<HTMLDivElement> & {\n /** sidebar slot (left or right) */\n sidebar?: ReactNode\n /** main content area */\n children: ReactNode\n /** bottom status bar (hidden on mobile) */\n statusBar?: ReactNode\n /** bottom navigation on mobile (hidden on desktop) */\n mobileNav?: ReactNode\n\n /** sidebar width in px, default 56 (icon-only like mailrs) */\n sidebarWidth?: number\n /** sidebar position */\n sidebarPosition?: 'left' | 'right'\n\n /** add padding around content, default true */\n padded?: boolean\n /** gap between sidebar and content in px, default 0 */\n gap?: number\n\n /** frosted glass effect */\n glass?: boolean\n className?: string\n}\n\nexport const AppShell = forwardRef<HTMLDivElement, AppShellProps>(\n function AppShell(\n {\n sidebar,\n children,\n statusBar,\n mobileNav,\n sidebarWidth = 56,\n sidebarPosition = 'left',\n padded = false,\n gap = 0,\n glass,\n className,\n ...props\n },\n ref\n ) {\n const isMobile = useIsMobile()\n\n return (\n <div\n {...props}\n ref={ref}\n className={cx(\n 'bg-bg fixed inset-0 flex flex-col',\n glassClass(glass),\n className\n )}\n data-component=\"app-shell\"\n >\n {/* main area: sidebar + content */}\n <div\n className={cx(\n 'flex min-h-0 flex-1',\n sidebarPosition === 'right' && 'flex-row-reverse'\n )}\n style={gap > 0 ? { gap } : undefined}\n >\n {/* sidebar — hidden on mobile */}\n {sidebar !== undefined && !isMobile && (\n <div\n className=\"shrink-0 overflow-hidden\"\n style={{ width: sidebarWidth }}\n >\n {sidebar}\n </div>\n )}\n\n {/* content area */}\n <div\n className={cx(\n 'flex min-w-0 flex-1 flex-col overflow-hidden',\n padded && 'p-1.5 md:p-1.5'\n )}\n >\n {children}\n </div>\n </div>\n\n {/* status bar — desktop only */}\n {statusBar !== undefined && !isMobile && (\n <div\n className=\"border-border bg-bg-secondary shrink-0 border-t\"\n data-component=\"app-shell-status-bar\"\n >\n {statusBar}\n </div>\n )}\n\n {/* mobile nav — bottom, mobile only */}\n {mobileNav !== undefined && isMobile && (\n <div\n className=\"border-border bg-bg-secondary shrink-0 border-t\"\n data-component=\"app-shell-mobile-nav\"\n >\n {mobileNav}\n </div>\n )}\n </div>\n )\n }\n)\n","// bento-grid — bento box grid layout where items can span multiple rows/columns\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype BentoGap = 'default' | 'lg' | 'sm'\n\nexport type BentoGridProps = {\n children: ReactNode\n columns?: number\n gap?: BentoGap\n className?: string\n}\n\nconst gapMap: Record<BentoGap, string> = {\n sm: 'gds-gap-sm',\n default: 'gds-gap',\n lg: 'gds-gap-lg',\n}\n\nconst colClass = (n: number): string => {\n const map: Record<number, string> = {\n 1: 'grid-cols-1',\n 2: 'grid-cols-2',\n 3: 'grid-cols-3',\n 4: 'grid-cols-4',\n 5: 'grid-cols-5',\n 6: 'grid-cols-6',\n }\n return map[n] ?? `grid-cols-${n}`\n}\n\nexport const BentoGrid = forwardRef<HTMLDivElement, BentoGridProps>(\n function BentoGrid(\n { children, columns = 4, gap = 'default', className },\n ref\n ) {\n return (\n <div\n ref={ref}\n className={cx(\n 'grid auto-rows-[minmax(120px,auto)]',\n colClass(columns),\n gapMap[gap],\n className\n )}\n data-component=\"bento-grid\"\n >\n {children}\n </div>\n )\n }\n)\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype CalendarEvent = {\n color?: string\n date: number\n label: string\n}\n\ntype CalendarViewProps = React.HTMLAttributes<HTMLDivElement> & {\n events?: CalendarEvent[]\n month: number\n onDateClick?: (date: number) => void\n year: number\n}\n\nconst WEEKDAYS = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']\n\nexport const CalendarView = forwardRef<HTMLDivElement, CalendarViewProps>(\n function CalendarView(\n { className, events = [], month, onDateClick, year, ...props },\n ref\n ) {\n const firstDay = new Date(year, month - 1, 1).getDay()\n const daysInMonth = new Date(year, month, 0).getDate()\n const cells: (number | null)[] = []\n\n for (let i = 0; i < firstDay; i++) cells.push(null)\n for (let d = 1; d <= daysInMonth; d++) cells.push(d)\n\n const eventsByDate = new Map<number, CalendarEvent[]>()\n for (const ev of events) {\n const existing = eventsByDate.get(ev.date) ?? []\n eventsByDate.set(ev.date, [...existing, ev])\n }\n\n return (\n <div\n className={cx('flex flex-col gap-1', className)}\n data-component=\"calendar-view\"\n ref={ref}\n {...props}\n >\n <div className=\"grid grid-cols-7 gap-1\">\n {WEEKDAYS.map((d) => (\n <div\n className=\"text-fg-muted py-1 text-center text-xs font-medium\"\n key={d}\n >\n {d}\n </div>\n ))}\n {cells.map((day, i) => {\n const dayEvents = day !== null ? (eventsByDate.get(day) ?? []) : []\n return (\n <div\n className={cx(\n 'flex min-h-[36px] flex-col items-center rounded p-1 text-xs',\n day !== null && 'text-fg hover:bg-accent/10 cursor-pointer',\n day === null && 'pointer-events-none'\n )}\n key={i}\n onClick={() => {\n if (day !== null && onDateClick !== undefined)\n onDateClick(day)\n }}\n >\n {day !== null && <span>{day}</span>}\n {dayEvents.length > 0 && (\n <div className=\"mt-0.5 flex gap-0.5\">\n {dayEvents.slice(0, 3).map((ev, j) => (\n <span\n className=\"h-1 w-1 rounded-full\"\n key={j}\n style={{\n backgroundColor: ev.color ?? 'var(--color-accent)',\n }}\n title={ev.label}\n />\n ))}\n </div>\n )}\n </div>\n )\n })}\n </div>\n </div>\n )\n }\n)\n\nexport type { CalendarEvent, CalendarViewProps }\n","// comparison-table — feature comparison grid for pricing and plan comparison\nimport { cx } from '../utils/cx'\n\nexport type ComparisonPlan = {\n name: string\n values: (boolean | string)[]\n}\n\nexport type ComparisonTableProps = {\n features: string[]\n plans: ComparisonPlan[]\n highlightColumn?: number\n glass?: boolean\n className?: string\n}\n\nexport function ComparisonTable({\n features,\n plans,\n highlightColumn,\n glass,\n className,\n}: ComparisonTableProps) {\n return (\n <div\n data-component=\"comparison-table\"\n className={cx(\n 'gds-radius-card border-border overflow-hidden border',\n glass === true && 'bg-white/5 backdrop-blur-md',\n className\n )}\n >\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"border-border bg-bg-tertiary/30 border-b\">\n <th className=\"text-fg-muted px-4 py-3 text-left text-xs font-medium\">\n Feature\n </th>\n {plans.map((plan, i) => (\n <th\n key={plan.name}\n className={cx(\n 'text-fg px-4 py-3 text-center text-xs font-semibold',\n i === highlightColumn && 'bg-accent/5'\n )}\n >\n {plan.name}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {features.map((feature, fi) => (\n <tr\n key={feature}\n className={cx(\n fi < features.length - 1 && 'border-border/50 border-b'\n )}\n >\n <td className=\"text-fg px-4 py-2.5 text-xs\">{feature}</td>\n {plans.map((plan, pi) => {\n const val = plan.values[fi]\n return (\n <td\n key={plan.name}\n className={cx(\n 'px-4 py-2.5 text-center',\n pi === highlightColumn && 'bg-accent/5'\n )}\n >\n {typeof val === 'boolean' ? (\n val === true ? (\n <svg\n className=\"text-success mx-auto\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n data-icon=\"check\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n ) : (\n <svg\n className=\"text-fg-muted/40 mx-auto\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n data-icon=\"dash\"\n >\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\n </svg>\n )\n ) : (\n <span className=\"text-fg text-xs\">{val}</span>\n )}\n </td>\n )\n })}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )\n}\n","// composition-pattern — header + sidebar + content + footer layout composition\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\nexport type CompositionPatternProps = {\n header?: ReactNode\n sidebar?: ReactNode\n content: ReactNode\n footer?: ReactNode\n sidebarPosition?: 'left' | 'right'\n sidebarWidth?: number | string\n glass?: boolean\n className?: string\n}\n\nexport const CompositionPattern = forwardRef<\n HTMLDivElement,\n CompositionPatternProps\n>(function CompositionPattern(\n {\n header,\n sidebar,\n content,\n footer,\n sidebarPosition = 'left',\n sidebarWidth = 240,\n glass,\n className,\n },\n ref\n) {\n const width =\n typeof sidebarWidth === 'number' ? `${sidebarWidth}px` : sidebarWidth\n const isRight = sidebarPosition === 'right'\n\n const sidebarEl =\n sidebar !== undefined ? (\n <div\n className={cx(\n 'shrink-0 overflow-auto',\n isRight ? 'border-border border-l' : 'border-border border-r'\n )}\n style={{ width }}\n >\n {sidebar}\n </div>\n ) : null\n\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-ctx flex h-full flex-col',\n glassClass(glass),\n className\n )}\n data-component=\"composition-pattern\"\n >\n {header !== undefined && (\n <div className=\"border-border shrink-0 border-b\">{header}</div>\n )}\n <div className=\"flex min-h-0 flex-1\">\n {isRight ? null : sidebarEl}\n <div className=\"flex-1 overflow-auto\">{content}</div>\n {isRight ? sidebarEl : null}\n </div>\n {footer !== undefined && (\n <div className=\"border-border shrink-0 border-t\">{footer}</div>\n )}\n </div>\n )\n})\n","// cta-banner — call-to-action banner with prominent message and action buttons\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\ntype CTABannerVariant = 'default' | 'accent' | 'gradient'\n\nexport type CTABannerProps = {\n title: string\n description?: string\n actions: ReactNode\n variant?: CTABannerVariant\n glass?: boolean\n className?: string\n}\n\nexport const CTABanner = forwardRef<HTMLDivElement, CTABannerProps>(\n function CTABanner(\n { title, description, actions, variant = 'default', glass, className },\n ref\n ) {\n const variantClass =\n variant === 'accent'\n ? 'bg-accent text-accent-fg'\n : variant === 'gradient'\n ? 'bg-gradient-to-r from-accent to-success text-accent-fg'\n : glass === true\n ? cx(glassClass(glass), 'border border-white/10 bg-bg/60')\n : 'border border-border bg-surface'\n\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-ctx gds-radius-card gds-pad-x-lg gds-pad-y-lg w-full text-center',\n variantClass,\n className\n )}\n data-component=\"cta-banner\"\n data-variant={variant}\n >\n <h2\n className={cx(\n 'text-xl font-bold',\n variant === 'default' && 'text-fg'\n )}\n >\n {title}\n </h2>\n {description !== undefined && (\n <p\n className={cx(\n 'gds-text-body mt-2',\n variant === 'default' ? 'text-fg-muted' : 'opacity-80'\n )}\n >\n {description}\n </p>\n )}\n <div className=\"mt-4 flex items-center justify-center gap-3\">\n {actions}\n </div>\n </div>\n )\n }\n)\n","// dashboard-layout — full page layout with sidebar + header + content\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype DashboardLayoutProps = {\n sidebar: ReactNode\n header?: ReactNode\n children: ReactNode\n sidebarWidth?: number\n className?: string\n}\n\nconst DashboardLayout = forwardRef<HTMLDivElement, DashboardLayoutProps>(\n function DashboardLayout(\n { sidebar, header, children, sidebarWidth = 240, className },\n ref\n ) {\n return (\n <div\n ref={ref}\n className={cx('bg-bg flex h-full min-h-0', className)}\n data-component=\"dashboard-layout\"\n >\n <aside\n className=\"border-border bg-surface shrink-0 overflow-y-auto border-r\"\n style={{ width: sidebarWidth }}\n >\n {sidebar}\n </aside>\n <div className=\"flex min-w-0 flex-1 flex-col\">\n {header !== undefined && (\n <header className=\"border-border bg-surface/80 sticky top-0 z-10 shrink-0 border-b backdrop-blur-sm\">\n {header}\n </header>\n )}\n <main className=\"flex-1 overflow-auto\">{children}</main>\n </div>\n </div>\n )\n }\n)\n\nexport { DashboardLayout }\nexport type { DashboardLayoutProps }\n","// data-export-card — format selector + date range + export button\nimport { forwardRef, useState } from 'react'\n\nimport { Button } from '../l2-primitives/button'\nimport { cx } from '../utils/cx'\n\ntype DateRange = {\n from: string\n to: string\n}\n\ntype DataExportCardProps = Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'title'\n> & {\n formats: string[]\n onExport: (format: string, dateRange?: DateRange) => void\n title?: string\n}\n\nconst DataExportCard = forwardRef<HTMLDivElement, DataExportCardProps>(\n function DataExportCard(\n { formats, onExport, title = 'Export Data', className, ...props },\n ref\n ) {\n const [format, setFormat] = useState(formats[0] ?? '')\n const [from, setFrom] = useState('')\n const [to, setTo] = useState('')\n\n function handleExport() {\n const dateRange = from !== '' && to !== '' ? { from, to } : undefined\n onExport(format, dateRange)\n }\n\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-ctx border-border bg-surface gds-pad gds-shadow rounded-lg border',\n className\n )}\n data-component=\"data-export-card\"\n {...props}\n >\n <h3 className=\"gds-heading text-fg mb-3 font-medium select-none\">\n {title}\n </h3>\n <div className=\"flex flex-col gap-3\">\n <div className=\"flex flex-col gap-1\">\n <label className=\"text-fg-muted text-xs select-none\">Format</label>\n <select\n value={format}\n onChange={(e) => setFormat(e.target.value)}\n className=\"border-border bg-bg gds-text-body text-fg rounded border px-2 py-1.5\"\n >\n {formats.map((f) => (\n <option key={f} value={f}>\n {f}\n </option>\n ))}\n </select>\n </div>\n <div className=\"flex gap-2\">\n <div className=\"flex flex-1 flex-col gap-1\">\n <label className=\"text-fg-muted text-xs select-none\">From</label>\n <input\n type=\"date\"\n value={from}\n onChange={(e) => setFrom(e.target.value)}\n className=\"border-border bg-bg gds-text-body text-fg rounded border px-2 py-1.5\"\n />\n </div>\n <div className=\"flex flex-1 flex-col gap-1\">\n <label className=\"text-fg-muted text-xs select-none\">To</label>\n <input\n type=\"date\"\n value={to}\n onChange={(e) => setTo(e.target.value)}\n className=\"border-border bg-bg gds-text-body text-fg rounded border px-2 py-1.5\"\n />\n </div>\n </div>\n <Button type=\"button\" onClick={handleExport} className=\"mt-1\">\n Export\n </Button>\n </div>\n </div>\n )\n }\n)\n\nexport { DataExportCard }\nexport type { DataExportCardProps, DateRange }\n","import type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype DevOpsTab = { id: string; label: string }\n\ntype DevOpsLayoutProps = React.HTMLAttributes<HTMLDivElement> & {\n activeTab: string\n children: ReactNode\n onTabChange: (id: string) => void\n statusBar?: ReactNode\n tabs: DevOpsTab[]\n}\n\nexport const DevOpsLayout = forwardRef<HTMLDivElement, DevOpsLayoutProps>(\n function DevOpsLayout(\n { activeTab, children, className, onTabChange, statusBar, tabs, ...props },\n ref\n ) {\n return (\n <div\n className={cx('flex h-full flex-col', className)}\n data-component=\"devops-layout\"\n ref={ref}\n {...props}\n >\n <div className=\"border-border flex items-center gap-1 border-b px-2\">\n {tabs.map((tab) => (\n <button\n key={tab.id}\n className={cx(\n 'gds-text-label px-3 py-2 font-medium transition-colors',\n tab.id === activeTab\n ? 'border-accent text-accent border-b-2'\n : 'text-fg-muted hover:text-fg'\n )}\n onClick={() => onTabChange(tab.id)}\n type=\"button\"\n >\n {tab.label}\n </button>\n ))}\n </div>\n {statusBar !== undefined && (\n <div className=\"border-border border-b px-3 py-2\">{statusBar}</div>\n )}\n <div className=\"flex-1 overflow-auto\">{children}</div>\n </div>\n )\n }\n)\n\nexport type { DevOpsLayoutProps, DevOpsTab }\n","// empty-state — placeholder for sections with no content\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type EmptyStateProps = {\n title: string\n description?: string\n icon?: ReactNode\n action?: ReactNode\n className?: string\n}\n\nexport const EmptyState = forwardRef<HTMLDivElement, EmptyStateProps>(\n function EmptyState({ title, description, icon, action, className }, ref) {\n return (\n <div\n ref={ref}\n className={cx(\n 'flex flex-col items-center justify-center py-12',\n className\n )}\n data-component=\"empty-state\"\n >\n {icon !== undefined && (\n <div className=\"text-fg-muted/20 mb-3 flex h-12 w-12 items-center justify-center\">\n {icon}\n </div>\n )}\n <p className=\"gds-text-body text-fg font-medium\">{title}</p>\n {description !== undefined && (\n <p className=\"gds-text-body text-fg-muted mt-1\">{description}</p>\n )}\n {action !== undefined && <div className=\"mt-4\">{action}</div>}\n </div>\n )\n }\n)\n","// faq — frequently asked questions section with expandable answers\nimport { forwardRef } from 'react'\n\nimport { Accordion, AccordionItem } from '../l4-molecules/accordion'\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\nexport type FAQItem = {\n question: string\n answer: string\n}\n\nexport type FAQProps = {\n items: FAQItem[]\n title?: string\n glass?: boolean\n className?: string\n}\n\nexport const FAQ = forwardRef<HTMLDivElement, FAQProps>(function FAQ(\n { items, title = 'FAQ', glass, className },\n ref\n) {\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-ctx gds-radius-card gds-pad-x-lg gds-pad-y-lg border',\n glass === true\n ? cx(glassClass(glass), 'bg-bg/60 border-white/10')\n : 'border-border bg-surface',\n className\n )}\n data-component=\"faq\"\n >\n <h2 className=\"gds-heading text-fg mb-4 font-semibold\">{title}</h2>\n <Accordion type=\"single\">\n {items.map((item, i) => (\n <AccordionItem key={i} id={`faq-${i}`} title={item.question}>\n {item.answer}\n </AccordionItem>\n ))}\n </Accordion>\n </div>\n )\n})\n","// feature-card — feature showcase card with icon, title, description, and optional CTA\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\nexport type FeatureCardProps = {\n icon?: ReactNode\n title: string\n description?: string\n action?: ReactNode\n glass?: boolean\n className?: string\n}\n\nexport const FeatureCard = forwardRef<HTMLDivElement, FeatureCardProps>(\n function FeatureCard(\n { icon, title, description, action, glass, className },\n ref\n ) {\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-ctx gds-radius-card gds-pad-x-lg gds-pad-y-lg flex flex-col border',\n glass === true\n ? cx(glassClass(glass), 'bg-bg/60 border-white/10')\n : 'border-border bg-surface',\n className\n )}\n data-component=\"feature-card\"\n >\n {icon !== undefined && <div className=\"text-accent mb-3\">{icon}</div>}\n <p className=\"text-fg font-semibold\">{title}</p>\n {description !== undefined && (\n <p className=\"gds-text-body text-fg-muted mt-1\">{description}</p>\n )}\n {action !== undefined && <div className=\"mt-auto pt-4\">{action}</div>}\n </div>\n )\n }\n)\n","// footer — site footer with link columns and copyright\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\ntype FooterColumn = {\n title: string\n links: { label: string; href: string }[]\n}\n\nexport type FooterProps = {\n columns?: FooterColumn[]\n copyright?: string\n logo?: ReactNode\n glass?: boolean\n className?: string\n}\n\nexport const Footer = forwardRef<HTMLElement, FooterProps>(function Footer(\n { columns, copyright, logo, glass, className },\n ref\n) {\n return (\n <footer\n ref={ref}\n className={cx('w-full py-10', glass && glassClass(true), className)}\n data-component=\"footer\"\n >\n {columns !== undefined && columns.length > 0 && (\n <div className=\"grid grid-cols-2 gap-8 sm:grid-cols-3 lg:grid-cols-4\">\n {columns.map((col) => (\n <div key={col.title}>\n <h3 className=\"text-fg text-sm font-semibold\">{col.title}</h3>\n <ul className=\"mt-3 space-y-2\">\n {col.links.map((link) => (\n <li key={link.href}>\n <a\n href={link.href}\n className=\"text-fg-muted hover:text-fg text-sm\"\n >\n {link.label}\n </a>\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n )}\n <div\n className={cx(\n 'border-border flex items-center gap-3 border-t pt-6',\n columns !== undefined && columns.length > 0 && 'mt-8'\n )}\n >\n {logo !== undefined && <div>{logo}</div>}\n {copyright !== undefined && (\n <p className=\"text-fg-muted text-xs\">{copyright}</p>\n )}\n </div>\n </footer>\n )\n})\n","// form-layout — standard form container with header, body, and action footer\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type FormLayoutProps = {\n title?: string\n description?: string\n children: ReactNode\n actions?: ReactNode\n className?: string\n}\n\nexport const FormLayout = forwardRef<HTMLDivElement, FormLayoutProps>(\n function FormLayout(\n { title, description, children, actions, className },\n ref\n ) {\n const hasHeader = title !== undefined || description !== undefined\n\n return (\n <div\n ref={ref}\n className={cx('flex flex-col', className)}\n data-component=\"form-layout\"\n >\n {hasHeader && (\n <div className=\"mb-4\">\n {title !== undefined && (\n <h2 className=\"gds-text-body text-fg font-semibold\">{title}</h2>\n )}\n {description !== undefined && (\n <p className=\"gds-text-body text-fg-muted mt-0.5\">\n {description}\n </p>\n )}\n </div>\n )}\n <div className=\"gds-gap-lg flex flex-col\">{children}</div>\n {actions !== undefined && (\n <div className=\"gds-gap-sm mt-6 flex justify-end\">{actions}</div>\n )}\n </div>\n )\n }\n)\n","// form-pattern — sectioned form layout with title, description, and action bar\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { Separator } from '../l2-primitives/separator'\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\ntype FormSection = {\n title: string\n fields: ReactNode\n}\n\nexport type FormPatternProps = {\n title?: string\n description?: string\n sections: FormSection[]\n actions?: ReactNode\n glass?: boolean\n className?: string\n}\n\nexport const FormPattern = forwardRef<HTMLDivElement, FormPatternProps>(\n function FormPattern(\n { title, description, sections, actions, glass, className },\n ref\n ) {\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-ctx gds-pad gds-radius-card flex flex-col',\n glassClass(glass),\n className\n )}\n data-component=\"form-pattern\"\n >\n {(title !== undefined || description !== undefined) && (\n <div className=\"mb-4\">\n {title !== undefined && (\n <h2 className=\"gds-heading text-fg font-semibold\">{title}</h2>\n )}\n {description !== undefined && (\n <p className=\"gds-text-body text-fg-muted mt-1\">{description}</p>\n )}\n </div>\n )}\n {sections.map((section, i) => (\n <div key={section.title}>\n {i > 0 && <Separator className=\"my-4\" />}\n <div className=\"gds-gap flex flex-col\">\n <h3 className=\"gds-text-body text-fg font-medium\">\n {section.title}\n </h3>\n {section.fields}\n </div>\n </div>\n ))}\n {actions !== undefined && (\n <>\n <Separator className=\"my-4\" />\n <div className=\"gds-gap-sm flex justify-end\">{actions}</div>\n </>\n )}\n </div>\n )\n }\n)\n\nexport type { FormSection }\n","// glass-panel — translucent container with depth-aware glass material\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\ntype GlassPanelBlur = 'default' | 'lg' | 'sm'\ntype GlassPanelPadding = 'default' | 'lg' | 'none' | 'sm'\n\nconst paddingMap: Record<GlassPanelPadding, string> = {\n none: '',\n sm: 'gds-pad-x gds-pad-y',\n default: 'gds-pad-x-lg gds-pad-y-lg',\n lg: 'p-6',\n}\n\nconst blurToGlass: Record<GlassPanelBlur, Parameters<typeof glassClass>[0]> = {\n sm: 'sm',\n default: true,\n lg: 'lg',\n}\n\nexport type GlassPanelProps = {\n children: ReactNode\n blur?: GlassPanelBlur\n padding?: GlassPanelPadding\n className?: string\n}\n\nexport const GlassPanel = forwardRef<HTMLDivElement, GlassPanelProps>(\n function GlassPanel(\n { children, blur = 'default', padding = 'default', className },\n ref\n ) {\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-ctx gds-radius-card border border-white/10',\n glassClass(blurToGlass[blur]),\n paddingMap[padding],\n className\n )}\n data-component=\"glass-panel\"\n >\n {children}\n </div>\n )\n }\n)\n","// grid-layout — responsive grid layout with configurable columns and breakpoints\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype ResponsiveColumns = {\n sm?: number\n md?: number\n lg?: number\n xl?: number\n}\n\ntype GridGap = 'default' | 'lg' | 'sm'\n\nexport type GridLayoutProps = {\n children: ReactNode\n columns?: number | ResponsiveColumns\n gap?: GridGap\n className?: string\n}\n\nconst gapMap: Record<GridGap, string> = {\n sm: 'gds-gap-sm',\n default: 'gds-gap',\n lg: 'gds-gap-lg',\n}\n\nconst colClass = (n: number): string => {\n const map: Record<number, string> = {\n 1: 'grid-cols-1',\n 2: 'grid-cols-2',\n 3: 'grid-cols-3',\n 4: 'grid-cols-4',\n 5: 'grid-cols-5',\n 6: 'grid-cols-6',\n }\n return map[n] ?? `grid-cols-${n}`\n}\n\nconst responsiveColClass = (prefix: string, n: number): string => {\n const map: Record<number, string> = {\n 1: `${prefix}:grid-cols-1`,\n 2: `${prefix}:grid-cols-2`,\n 3: `${prefix}:grid-cols-3`,\n 4: `${prefix}:grid-cols-4`,\n 5: `${prefix}:grid-cols-5`,\n 6: `${prefix}:grid-cols-6`,\n }\n return map[n] ?? `${prefix}:grid-cols-${n}`\n}\n\nfunction buildColumnClasses(columns: number | ResponsiveColumns): string {\n if (typeof columns === 'number') {\n return colClass(columns)\n }\n\n const parts: string[] = []\n if (columns.sm !== undefined) parts.push(responsiveColClass('sm', columns.sm))\n if (columns.md !== undefined) parts.push(responsiveColClass('md', columns.md))\n if (columns.lg !== undefined) parts.push(responsiveColClass('lg', columns.lg))\n if (columns.xl !== undefined) parts.push(responsiveColClass('xl', columns.xl))\n\n // add base grid-cols-1 for mobile when using responsive\n if (parts.length > 0) {\n parts.unshift('grid-cols-1')\n }\n\n return parts.join(' ')\n}\n\nexport const GridLayout = forwardRef<HTMLDivElement, GridLayoutProps>(\n function GridLayout(\n { children, columns = { sm: 1, md: 2, lg: 3 }, gap = 'default', className },\n ref\n ) {\n return (\n <div\n ref={ref}\n className={cx(\n 'grid',\n buildColumnClasses(columns),\n gapMap[gap],\n className\n )}\n data-component=\"grid-layout\"\n >\n {children}\n </div>\n )\n }\n)\n","// hero — landing page above-the-fold section\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\nexport type HeroProps = {\n title: string\n subtitle?: string\n actions?: ReactNode\n media?: ReactNode\n align?: 'left' | 'center'\n glass?: boolean\n className?: string\n}\n\nexport const Hero = forwardRef<HTMLDivElement, HeroProps>(function Hero(\n { title, subtitle, actions, media, align = 'center', glass, className },\n ref\n) {\n const isCenter = align === 'center'\n\n return (\n <section\n ref={ref}\n className={cx(\n 'w-full py-16',\n isCenter ? 'text-center' : 'flex items-center gap-12',\n glass && glassClass(true),\n className\n )}\n data-component=\"hero\"\n data-variant={align}\n >\n <div className={cx(isCenter ? 'mx-auto max-w-2xl' : 'flex-1')}>\n <h1 className=\"text-fg text-4xl font-bold\">{title}</h1>\n {subtitle !== undefined && (\n <p className=\"text-fg-muted mt-3 text-lg\">{subtitle}</p>\n )}\n {actions !== undefined && <div className=\"mt-6\">{actions}</div>}\n {isCenter && media !== undefined && <div className=\"mt-8\">{media}</div>}\n </div>\n {!isCenter && media !== undefined && (\n <div className=\"flex-1\">{media}</div>\n )}\n </section>\n )\n})\n","import type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype HRDashboardProps = React.HTMLAttributes<HTMLDivElement> & {\n departments?: ReactNode\n onboarding?: ReactNode\n stats?: ReactNode\n}\n\nexport const HRDashboard = forwardRef<HTMLDivElement, HRDashboardProps>(\n function HRDashboard(\n { className, departments, onboarding, stats, ...props },\n ref\n ) {\n return (\n <div\n className={cx('gds-ctx gds-gap flex flex-col', className)}\n data-component=\"hr-dashboard\"\n ref={ref}\n {...props}\n >\n {stats !== undefined && (\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-3\">{stats}</div>\n )}\n <div className=\"grid grid-cols-1 gap-4 lg:grid-cols-2\">\n {onboarding !== undefined && (\n <div className=\"gds-radius-card border-border bg-surface gds-pad border\">\n {onboarding}\n </div>\n )}\n {departments !== undefined && (\n <div className=\"gds-radius-card border-border bg-surface gds-pad border\">\n {departments}\n </div>\n )}\n </div>\n </div>\n )\n }\n)\n\nexport type { HRDashboardProps }\n","// inbox-layout — responsive 3-pane email layout with resizable divider\n// v2: complete rewrite from simple 2-pane to full-featured inbox layout\n// desktop: sidebar? + list + detail with drag-resize\n// mobile: one pane at a time with swipe/back navigation\n\nimport type { ReactNode } from 'react'\nimport { forwardRef, useCallback, useEffect, useRef, useState } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\nimport { useIsMobile } from '../utils/hooks'\n\nexport type InboxLayoutProps = React.HTMLAttributes<HTMLDivElement> & {\n /** left sidebar (e.g. app navigation) */\n sidebar?: ReactNode\n /** conversation list pane */\n list: ReactNode\n /** detail/thread pane — null shows empty state */\n detail?: ReactNode\n\n /** list pane width in px, default 360 */\n listWidth?: number\n /** min list width, default 280 */\n listMinWidth?: number\n /** max list width, default 500 */\n listMaxWidth?: number\n /** enable drag resize between list and detail, default true */\n resizable?: boolean\n\n /** which pane to show on mobile */\n mobileView?: 'detail' | 'list'\n /** callback when mobile view changes */\n onMobileViewChange?: (view: 'detail' | 'list') => void\n\n /** shown when detail is null */\n emptyState?: ReactNode\n\n /** batch action bar at bottom of list pane */\n batchActions?: ReactNode\n\n /** frosted glass effect */\n glass?: boolean\n className?: string\n}\n\nexport const InboxLayout = forwardRef<HTMLDivElement, InboxLayoutProps>(\n function InboxLayout(\n {\n sidebar,\n list,\n detail,\n listWidth: initialListWidth = 360,\n listMinWidth = 280,\n listMaxWidth = 500,\n resizable = true,\n mobileView = 'list',\n onMobileViewChange,\n emptyState,\n batchActions,\n glass,\n className,\n ...props\n },\n ref\n ) {\n const isMobile = useIsMobile()\n const [listWidth, setListWidth] = useState(initialListWidth)\n const isDragging = useRef(false)\n const dragStart = useRef({ x: 0, width: 0 })\n\n // drag resize handlers\n const handleDragStart = useCallback(\n (e: React.MouseEvent) => {\n e.preventDefault()\n isDragging.current = true\n dragStart.current = { x: e.clientX, width: listWidth }\n document.body.style.cursor = 'col-resize'\n document.body.style.userSelect = 'none'\n },\n [listWidth]\n )\n\n useEffect(() => {\n const handleMouseMove = (e: MouseEvent) => {\n if (!isDragging.current) return\n const delta = e.clientX - dragStart.current.x\n const newWidth = Math.max(\n listMinWidth,\n Math.min(listMaxWidth, dragStart.current.width + delta)\n )\n setListWidth(newWidth)\n }\n\n const handleMouseUp = () => {\n if (!isDragging.current) return\n isDragging.current = false\n document.body.style.cursor = ''\n document.body.style.userSelect = ''\n }\n\n document.addEventListener('mousemove', handleMouseMove)\n document.addEventListener('mouseup', handleMouseUp)\n return () => {\n document.removeEventListener('mousemove', handleMouseMove)\n document.removeEventListener('mouseup', handleMouseUp)\n // reset body styles if unmounted during drag\n if (isDragging.current) {\n isDragging.current = false\n document.body.style.cursor = ''\n document.body.style.userSelect = ''\n }\n }\n }, [listMinWidth, listMaxWidth])\n\n // double-click divider resets width\n const handleDividerDoubleClick = useCallback(() => {\n setListWidth(initialListWidth)\n }, [initialListWidth])\n\n // mobile back button handler\n const handleMobileBack = useCallback(() => {\n if (onMobileViewChange !== undefined) {\n onMobileViewChange('list')\n }\n }, [onMobileViewChange])\n\n // mobile: show one pane at a time\n if (isMobile) {\n return (\n <div\n {...props}\n ref={ref}\n className={cx('flex h-full flex-col overflow-hidden', className)}\n data-component=\"inbox-layout\"\n data-state={mobileView}\n data-mobile-view={mobileView}\n >\n {mobileView === 'list' && (\n <div className=\"min-h-0 flex-1 overflow-y-auto\">\n {list}\n {batchActions !== undefined && (\n <div className=\"animate-slide-up sticky bottom-0\">\n {batchActions}\n </div>\n )}\n </div>\n )}\n {mobileView === 'detail' && (\n <div className=\"flex min-h-0 flex-1 flex-col overflow-hidden\">\n <button\n type=\"button\"\n className=\"text-accent border-border flex items-center gap-1.5 border-b px-3 py-2 text-sm hover:bg-white/[0.04]\"\n onClick={handleMobileBack}\n aria-label=\"Back to message list\"\n >\n <svg\n width=\"14\"\n height=\"14\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n viewBox=\"0 0 24 24\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"15 18 9 12 15 6\" />\n </svg>\n Back\n </button>\n <div className=\"min-h-0 flex-1 overflow-y-auto\">\n {detail ?? emptyState ?? null}\n </div>\n </div>\n )}\n </div>\n )\n }\n\n // desktop: multi-pane layout\n return (\n <div\n {...props}\n ref={ref}\n className={cx(\n 'flex h-full overflow-hidden',\n glassClass(glass),\n className\n )}\n data-component=\"inbox-layout\"\n data-state={detail !== undefined ? 'detail' : 'list'}\n >\n {/* sidebar */}\n {sidebar !== undefined && <div className=\"shrink-0\">{sidebar}</div>}\n\n {/* list pane */}\n <div\n className=\"border-border flex shrink-0 flex-col overflow-hidden border-r\"\n style={{ width: listWidth }}\n >\n <div className=\"min-h-0 flex-1 overflow-y-auto\">{list}</div>\n {batchActions !== undefined && (\n <div className=\"border-border animate-slide-up shrink-0 border-t\">\n {batchActions}\n </div>\n )}\n </div>\n\n {/* resize divider */}\n {resizable && (\n <div\n className=\"hover:bg-accent/20 active:bg-accent/30 focus:bg-accent/20 w-1 shrink-0 cursor-col-resize bg-transparent transition-colors focus:outline-none\"\n onMouseDown={handleDragStart}\n onDoubleClick={handleDividerDoubleClick}\n onKeyDown={(e) => {\n const step = e.shiftKey ? 50 : 10\n if (e.key === 'ArrowLeft') {\n e.preventDefault()\n setListWidth((prev) => Math.max(listMinWidth, prev - step))\n } else if (e.key === 'ArrowRight') {\n e.preventDefault()\n setListWidth((prev) => Math.min(listMaxWidth, prev + step))\n } else if (e.key === 'Home') {\n e.preventDefault()\n setListWidth(listMinWidth)\n } else if (e.key === 'End') {\n e.preventDefault()\n setListWidth(listMaxWidth)\n }\n }}\n role=\"separator\"\n aria-orientation=\"vertical\"\n aria-label=\"Resize list pane\"\n aria-valuenow={listWidth}\n aria-valuemin={listMinWidth}\n aria-valuemax={listMaxWidth}\n tabIndex={0}\n />\n )}\n\n {/* detail pane */}\n <div className=\"min-w-0 flex-1 overflow-y-auto\">\n {detail ?? emptyState ?? null}\n </div>\n </div>\n )\n }\n)\n","// metric-card — single KPI display with optional trend indicator\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\nexport type MetricCardProps = {\n title: string\n value: string | number\n change?: number\n changeLabel?: string\n icon?: ReactNode\n glass?: boolean\n className?: string\n}\n\nexport const MetricCard = forwardRef<HTMLDivElement, MetricCardProps>(\n function MetricCard(\n { title, value, change, changeLabel, icon, glass, className },\n ref\n ) {\n const isPositive = change !== undefined && change >= 0\n\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-radius-card gds-pad-x-lg gds-pad-y-lg relative border',\n glass === true\n ? cx(glassClass(glass), 'bg-bg/60 border-white/10')\n : 'border-border bg-surface',\n className\n )}\n data-component=\"metric-card\"\n >\n {icon !== undefined && (\n <div className=\"text-fg-muted/40 absolute top-4 right-4\">{icon}</div>\n )}\n <p className=\"gds-text-body text-fg-muted\">{title}</p>\n <p className=\"text-fg mt-1 text-2xl font-bold\">{value}</p>\n {change !== undefined && (\n <p\n className={cx(\n 'gds-text-body mt-1',\n isPositive ? 'text-success' : 'text-danger'\n )}\n >\n {isPositive ? '+' : ''}\n {change}%{changeLabel !== undefined ? ` ${changeLabel}` : ''}\n </p>\n )}\n </div>\n )\n }\n)\n","// kpi-dashboard — pre-composed KPI layout with metrics, chart, and table slots\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\nimport { MetricCard } from './metric-card'\n\ntype KPIMetric = {\n title: string\n value: string\n change?: number\n}\n\ntype KPIDashboardProps = {\n title?: string\n metrics?: KPIMetric[]\n chart?: ReactNode\n table?: ReactNode\n glass?: boolean\n className?: string\n}\n\nconst KPIDashboard = forwardRef<HTMLDivElement, KPIDashboardProps>(\n function KPIDashboard(\n { title, metrics, chart, table, glass, className },\n ref\n ) {\n return (\n <div\n ref={ref}\n className={cx('gds-ctx gds-gap flex flex-col', className)}\n data-component=\"kpi-dashboard\"\n >\n {title !== undefined && (\n <h2 className=\"gds-heading text-fg font-semibold\">{title}</h2>\n )}\n {metrics !== undefined && metrics.length > 0 && (\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4\">\n {metrics.map((m) => (\n <MetricCard\n key={m.title}\n change={m.change}\n glass={glass}\n title={m.title}\n value={m.value}\n />\n ))}\n </div>\n )}\n {chart !== undefined && (\n <div\n className={cx(\n 'gds-radius-card gds-pad border',\n glass === true\n ? cx(glassClass(glass), 'bg-bg/60 border-white/10')\n : 'border-border bg-surface'\n )}\n >\n {chart}\n </div>\n )}\n {table !== undefined && (\n <div\n className={cx(\n 'gds-radius-card gds-pad border',\n glass === true\n ? cx(glassClass(glass), 'bg-bg/60 border-white/10')\n : 'border-border bg-surface'\n )}\n >\n {table}\n </div>\n )}\n </div>\n )\n }\n)\n\nexport { KPIDashboard }\nexport type { KPIDashboardProps, KPIMetric }\n","// loading-states — pre-composed loading state patterns for common UI contexts\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { Button } from '../l2-primitives/button'\nimport { Spinner } from '../l2-primitives/spinner'\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\ntype LoadingStatesVariant = 'button' | 'inline' | 'overlay' | 'page'\n\nexport type LoadingStatesProps = {\n variant: LoadingStatesVariant\n message?: string\n glass?: boolean\n className?: string\n}\n\nfunction PageLoading({\n message,\n glass,\n className,\n}: Omit<LoadingStatesProps, 'variant'>) {\n return (\n <div\n className={cx(\n 'flex min-h-[200px] flex-col items-center justify-center gap-3',\n glassClass(glass),\n className\n )}\n >\n <Spinner size=\"lg\" />\n {message !== undefined && (\n <p className=\"gds-text-body text-fg-muted\">{message}</p>\n )}\n </div>\n )\n}\n\nfunction InlineLoading({\n message,\n className,\n}: Omit<LoadingStatesProps, 'variant'>) {\n return (\n <div className={cx('inline-flex items-center gap-2', className)}>\n <Spinner size=\"sm\" />\n {message !== undefined && (\n <span className=\"gds-text-body text-fg-muted\">{message}</span>\n )}\n </div>\n )\n}\n\nfunction ButtonLoading({\n message,\n className,\n}: Omit<LoadingStatesProps, 'variant'>) {\n return (\n <div className={className}>\n <Button loading disabled>\n {message ?? 'Loading...'}\n </Button>\n </div>\n )\n}\n\nfunction OverlayLoading({\n message,\n glass,\n className,\n}: Omit<LoadingStatesProps, 'variant'>) {\n return (\n <div\n className={cx(\n 'absolute inset-0 flex flex-col items-center justify-center gap-3',\n glass === true ? glassClass(glass) : 'bg-bg/80',\n className\n )}\n >\n <Spinner size=\"lg\" />\n {message !== undefined && (\n <p className=\"gds-text-body text-fg-muted\">{message}</p>\n )}\n </div>\n )\n}\n\nconst variantMap: Record<\n LoadingStatesVariant,\n (props: Omit<LoadingStatesProps, 'variant'>) => ReactNode\n> = {\n page: PageLoading,\n inline: InlineLoading,\n button: ButtonLoading,\n overlay: OverlayLoading,\n}\n\nexport const LoadingStates = forwardRef<HTMLDivElement, LoadingStatesProps>(\n function LoadingStates({ variant, message, glass, className }, ref) {\n return (\n <div ref={ref} data-component=\"loading-states\" data-variant={variant}>\n {variantMap[variant]({ message, glass, className })}\n </div>\n )\n }\n)\n\nexport type { LoadingStatesVariant }\n","// login-form — pre-composed login form\nimport { forwardRef, useState } from 'react'\n\nimport { Button } from '../l2-primitives/button'\nimport { Input } from '../l2-primitives/input'\nimport { Label } from '../l2-primitives/label'\nimport { Checkbox } from '../l3-atoms/checkbox'\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\ntype LoginFormData = {\n email: string\n password: string\n remember: boolean\n}\n\ntype LoginFormProps = Omit<\n React.HTMLAttributes<HTMLFormElement>,\n 'onSubmit'\n> & {\n onSubmit: (data: LoginFormData) => void\n title?: string\n error?: string\n loading?: boolean\n glass?: boolean\n}\n\nexport const LoginForm = forwardRef<HTMLFormElement, LoginFormProps>(\n function LoginForm(\n {\n onSubmit,\n title = 'Sign in',\n error,\n loading = false,\n glass = false,\n className,\n ...props\n },\n ref\n ) {\n const [email, setEmail] = useState('')\n const [password, setPassword] = useState('')\n const [remember, setRemember] = useState(false)\n\n function handleSubmit(e: React.FormEvent) {\n e.preventDefault()\n onSubmit({ email, password, remember })\n }\n\n return (\n <form\n ref={ref}\n className={cx(\n 'border-border flex w-full max-w-sm flex-col gap-4 rounded-lg border p-6',\n glassClass(glass),\n !glass && 'bg-bg',\n className\n )}\n data-component=\"login-form\"\n onSubmit={handleSubmit}\n {...props}\n >\n <h2 className=\"text-fg gds-heading text-center font-semibold\">\n {title}\n </h2>\n {error !== undefined && (\n <div className=\"bg-danger/10 text-danger rounded-md px-3 py-2 text-xs\">\n {error}\n </div>\n )}\n <div className=\"flex flex-col gap-1\">\n <Label>Email</Label>\n <Input\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n placeholder=\"you@example.com\"\n required\n />\n </div>\n <div className=\"flex flex-col gap-1\">\n <Label>Password</Label>\n <Input\n type=\"password\"\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n placeholder=\"••••••••\"\n required\n />\n </div>\n <Checkbox\n checked={remember}\n onChange={setRemember}\n label=\"Remember me\"\n />\n <Button type=\"submit\" disabled={loading} className=\"w-full\">\n {loading ? 'Signing in...' : 'Sign in'}\n </Button>\n </form>\n )\n }\n)\n\nexport type { LoginFormData, LoginFormProps }\n","// mail-composer — email compose form with to, subject, body, and send\nimport { forwardRef, useCallback, useRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type MailComposerData = {\n to: string\n subject: string\n body: string\n}\n\nexport type MailComposerProps = {\n onSend: (data: MailComposerData) => void\n defaultTo?: string\n className?: string\n}\n\nexport const MailComposer = forwardRef<HTMLFormElement, MailComposerProps>(\n function MailComposer({ onSend, defaultTo, className }, ref) {\n const toRef = useRef<HTMLInputElement>(null)\n const subjectRef = useRef<HTMLInputElement>(null)\n const bodyRef = useRef<HTMLTextAreaElement>(null)\n\n const handleSubmit = useCallback(\n (e: React.FormEvent) => {\n e.preventDefault()\n onSend({\n to: toRef.current?.value ?? '',\n subject: subjectRef.current?.value ?? '',\n body: bodyRef.current?.value ?? '',\n })\n },\n [onSend]\n )\n\n const inputCls =\n 'w-full rounded-md border border-border bg-transparent px-3 py-2 gds-text-body text-fg placeholder:text-fg-muted/40 focus:border-accent focus:outline-none'\n\n return (\n <form\n ref={ref}\n className={cx('flex flex-col gap-3', className)}\n data-component=\"mail-composer\"\n onSubmit={handleSubmit}\n >\n <input\n ref={toRef}\n type=\"email\"\n placeholder=\"To\"\n defaultValue={defaultTo ?? ''}\n className={inputCls}\n />\n <input\n ref={subjectRef}\n type=\"text\"\n placeholder=\"Subject\"\n className={inputCls}\n />\n <textarea\n ref={bodyRef}\n placeholder=\"Body\"\n rows={6}\n className={cx(inputCls, 'resize-none')}\n />\n <div className=\"flex justify-end\">\n <button\n type=\"submit\"\n className=\"bg-accent gds-text-body text-accent-fg hover:bg-accent/90 rounded-md px-4 py-2 font-medium transition-colors\"\n >\n Send\n </button>\n </div>\n </form>\n )\n }\n)\n","// masonry — CSS columns-based masonry layout\nimport type { CSSProperties, ReactNode } from 'react'\nimport { Children, forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type MasonryProps = {\n children: ReactNode\n columns?: number\n gap?: number\n className?: string\n}\n\nexport const Masonry = forwardRef<HTMLDivElement, MasonryProps>(\n function Masonry({ children, columns = 3, gap = 16, className }, ref) {\n const containerStyle: CSSProperties = {\n columnCount: columns,\n columnGap: `${gap}px`,\n }\n\n const itemStyle: CSSProperties = {\n breakInside: 'avoid',\n marginBottom: `${gap}px`,\n }\n\n return (\n <div\n ref={ref}\n className={cx(className)}\n style={containerStyle}\n data-component=\"masonry\"\n >\n {Children.map(children, (child) => {\n if (child === null || child === undefined) return null\n return <div style={itemStyle}>{child}</div>\n })}\n </div>\n )\n }\n)\n","// media-grid — responsive image/media grid layout for galleries\nimport type { ReactNode } from 'react'\nimport { Children, forwardRef } from 'react'\n\nimport { AspectRatio } from '../l2-primitives/aspect-ratio'\nimport { cx } from '../utils/cx'\n\ntype GridGap = 'default' | 'lg' | 'sm'\n\ntype ResponsiveColumns = {\n lg?: number\n md?: number\n sm?: number\n}\n\nexport type MediaGridProps = {\n aspectRatio?: number\n children: ReactNode\n className?: string\n columns?: number | ResponsiveColumns\n gap?: GridGap\n}\n\nconst gapMap: Record<GridGap, string> = {\n default: 'gds-gap',\n lg: 'gds-gap-lg',\n sm: 'gds-gap-sm',\n}\n\nfunction buildCols(columns: number | ResponsiveColumns): string {\n if (typeof columns === 'number') {\n return `grid-cols-${columns}`\n }\n const parts = ['grid-cols-1']\n if (columns.sm !== undefined) parts.push(`sm:grid-cols-${columns.sm}`)\n if (columns.md !== undefined) parts.push(`md:grid-cols-${columns.md}`)\n if (columns.lg !== undefined) parts.push(`lg:grid-cols-${columns.lg}`)\n return parts.join(' ')\n}\n\nexport const MediaGrid = forwardRef<HTMLDivElement, MediaGridProps>(\n function MediaGrid(\n {\n aspectRatio = 1,\n children,\n className,\n columns = { sm: 2, md: 3, lg: 4 },\n gap = 'default',\n },\n ref\n ) {\n return (\n <div\n ref={ref}\n className={cx('grid', buildCols(columns), gapMap[gap], className)}\n data-component=\"media-grid\"\n >\n {Children.map(children, (child) => (\n <AspectRatio\n ratio={aspectRatio}\n className=\"overflow-hidden rounded-lg\"\n >\n {child}\n </AspectRatio>\n ))}\n </div>\n )\n }\n)\n","// mini-dashboard — section-level container with optional title header\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\nexport type MiniDashboardProps = {\n title?: string\n children: ReactNode\n glass?: boolean\n className?: string\n}\n\nexport const MiniDashboard = forwardRef<HTMLDivElement, MiniDashboardProps>(\n function MiniDashboard({ title, children, glass, className }, ref) {\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-ctx gds-radius-card border',\n glass === true\n ? cx(glassClass(glass), 'bg-bg/60 border-white/10')\n : 'border-border bg-surface',\n 'gds-pad-x-lg gds-pad-y-lg',\n className\n )}\n data-component=\"mini-dashboard\"\n >\n {title !== undefined && (\n <h2 className=\"gds-text-body text-fg mb-3 font-semibold\">{title}</h2>\n )}\n {children}\n </div>\n )\n }\n)\n","// monitor-grid — responsive grid layout for service/server monitoring cards\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type MonitorGridProps = {\n children: ReactNode\n columns?: number\n className?: string\n}\n\nexport const MonitorGrid = forwardRef<HTMLDivElement, MonitorGridProps>(\n function MonitorGrid({ children, columns, className }, ref) {\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-gap grid',\n columns !== undefined\n ? `grid-cols-${columns}`\n : 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4',\n className\n )}\n data-component=\"monitor-grid\"\n >\n {children}\n </div>\n )\n }\n)\n","// nav-bar — top navigation bar with logo, links, and actions\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\ntype NavLink = {\n label: string\n href: string\n active?: boolean\n}\n\nexport type NavBarProps = {\n logo?: ReactNode\n links?: NavLink[]\n actions?: ReactNode\n sticky?: boolean\n glass?: boolean\n className?: string\n}\n\nexport const NavBar = forwardRef<HTMLElement, NavBarProps>(function NavBar(\n { logo, links, actions, sticky = true, glass = true, className },\n ref\n) {\n return (\n <nav\n ref={ref}\n className={cx(\n 'flex w-full items-center justify-between px-6 py-3',\n sticky && 'sticky top-0 z-40',\n glass && glassClass(true),\n className\n )}\n data-component=\"nav-bar\"\n >\n {logo !== undefined && <div className=\"flex-shrink-0\">{logo}</div>}\n {links !== undefined && links.length > 0 && (\n <div className=\"flex items-center gap-6\">\n {links.map((link) => (\n <a\n key={link.href}\n href={link.href}\n className={cx(\n 'text-sm transition-colors',\n link.active\n ? 'text-accent font-medium'\n : 'text-fg-muted hover:text-fg'\n )}\n >\n {link.label}\n </a>\n ))}\n </div>\n )}\n {actions !== undefined && (\n <div className=\"flex items-center gap-3\">{actions}</div>\n )}\n </nav>\n )\n})\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype NotificationEntry = {\n id: string\n message?: string\n read?: boolean\n timestamp: string\n title: string\n}\n\ntype NotificationListProps = React.HTMLAttributes<HTMLDivElement> & {\n notifications: NotificationEntry[]\n onRead?: (id: string) => void\n onReadAll?: () => void\n}\n\nexport const NotificationList = forwardRef<\n HTMLDivElement,\n NotificationListProps\n>(function NotificationList(\n { className, notifications, onRead, onReadAll, ...props },\n ref\n) {\n return (\n <div\n className={cx(\n 'gds-ctx gds-radius-card border-border bg-surface border',\n className\n )}\n data-component=\"notification-list\"\n ref={ref}\n {...props}\n >\n <div className=\"border-border flex items-center justify-between border-b px-4 py-2.5\">\n <span className=\"text-fg text-sm font-semibold\">Notifications</span>\n {onReadAll !== undefined && (\n <button\n className=\"text-accent text-xs hover:underline\"\n onClick={onReadAll}\n type=\"button\"\n >\n Mark all read\n </button>\n )}\n </div>\n {notifications.length === 0 ? (\n <div className=\"text-fg-muted px-4 py-6 text-center text-xs\">\n No notifications\n </div>\n ) : (\n <div className=\"divide-border divide-y\">\n {notifications.map((n) => (\n <div\n key={n.id}\n className={cx(\n 'flex gap-3 px-4 py-2.5',\n n.read !== true && 'border-l-accent border-l-2',\n onRead !== undefined && 'hover:bg-bg-tertiary cursor-pointer'\n )}\n onClick={onRead !== undefined ? () => onRead(n.id) : undefined}\n >\n <div className=\"min-w-0 flex-1\">\n <div className=\"text-fg text-xs font-medium\">{n.title}</div>\n {n.message !== undefined && (\n <div className=\"text-fg-muted mt-0.5 text-xs\">\n {n.message}\n </div>\n )}\n <div className=\"text-fg-muted mt-1 text-[10px]\">\n {n.timestamp}\n </div>\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n )\n})\n\nexport type { NotificationEntry, NotificationListProps }\n","import type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype OnboardingStep = {\n action?: ReactNode\n completed: boolean\n label: string\n}\n\ntype OnboardingCardProps = React.HTMLAttributes<HTMLDivElement> & {\n steps: OnboardingStep[]\n title?: string\n}\n\nexport const OnboardingCard = forwardRef<HTMLDivElement, OnboardingCardProps>(\n function OnboardingCard(\n { className, steps, title = 'Getting Started', ...props },\n ref\n ) {\n const done = steps.filter((s) => s.completed).length\n const pct = steps.length > 0 ? Math.round((done / steps.length) * 100) : 0\n\n return (\n <div\n className={cx(\n 'gds-ctx border-border bg-surface gds-pad rounded-lg border',\n className\n )}\n data-component=\"onboarding-card\"\n ref={ref}\n {...props}\n >\n <div className=\"mb-3 flex items-center justify-between\">\n <h3 className=\"gds-heading text-fg font-semibold\">{title}</h3>\n <span className=\"gds-text-label text-fg-muted\">\n {done}/{steps.length}\n </span>\n </div>\n <div className=\"bg-border mb-4 h-1.5 w-full overflow-hidden rounded-full\">\n <div\n className=\"bg-accent h-full rounded-full transition-all\"\n style={{ width: `${pct}%` }}\n />\n </div>\n <ul className=\"gds-gap flex flex-col\">\n {steps.map((step, i) => (\n <li className=\"gds-gap flex items-center justify-between\" key={i}>\n <div className=\"gds-gap-sm flex items-center\">\n <span\n className={cx(\n 'flex h-5 w-5 shrink-0 items-center justify-center rounded-full text-xs',\n step.completed\n ? 'bg-success text-white'\n : 'border-border text-fg-muted border'\n )}\n >\n {step.completed ? '\\u2713' : i + 1}\n </span>\n <span\n className={cx(\n 'text-sm',\n step.completed ? 'text-fg-muted line-through' : 'text-fg'\n )}\n >\n {step.label}\n </span>\n </div>\n {step.action !== undefined && !step.completed && step.action}\n </li>\n ))}\n </ul>\n </div>\n )\n }\n)\n\nexport type { OnboardingCardProps, OnboardingStep }\n","// page-header — standard page header with title, breadcrumb, and actions\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype PageHeaderBreadcrumbItem = {\n href?: string\n label: string\n}\n\ntype PageHeaderProps = {\n actions?: ReactNode\n breadcrumb?: PageHeaderBreadcrumbItem[]\n className?: string\n subtitle?: string\n title: string\n}\n\nconst separator = (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n >\n <path d=\"M4.5 3l3 3-3 3\" />\n </svg>\n)\n\nexport const PageHeader = forwardRef<HTMLDivElement, PageHeaderProps>(\n function PageHeader(\n { actions, breadcrumb, className, subtitle, title },\n ref\n ) {\n return (\n <div\n ref={ref}\n className={cx('gds-gap-sm flex flex-col', className)}\n data-component=\"page-header\"\n >\n {breadcrumb !== undefined && breadcrumb.length > 0 && (\n <nav aria-label=\"Breadcrumb\">\n <ol className=\"gds-gap-sm text-fg-muted flex items-center text-[11px]\">\n {breadcrumb.map((item, i) => (\n <li key={i} className=\"gds-gap-sm flex items-center\">\n {i > 0 && (\n <span className=\"text-fg-muted/50\" aria-hidden=\"true\">\n {separator}\n </span>\n )}\n {item.href !== undefined ? (\n <a\n href={item.href}\n className=\"hover:text-fg transition-colors\"\n >\n {item.label}\n </a>\n ) : (\n <span>{item.label}</span>\n )}\n </li>\n ))}\n </ol>\n </nav>\n )}\n <div className=\"gds-gap flex items-center justify-between\">\n <div className=\"min-w-0\">\n <h1 className=\"gds-heading text-fg font-semibold\">{title}</h1>\n {subtitle !== undefined && (\n <p className=\"gds-text-body text-fg-muted mt-0.5\">{subtitle}</p>\n )}\n </div>\n {actions !== undefined && (\n <div className=\"gds-gap-sm flex shrink-0 items-center\">\n {actions}\n </div>\n )}\n </div>\n </div>\n )\n }\n)\n\nexport type { PageHeaderBreadcrumbItem, PageHeaderProps }\n","// panel-group + panel — layout primitives for multi-pane content areas\n// PaneGroup is a flex container, Pane is a flex child\n// fixed-width panels on desktop, full-width stacked on mobile\n\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { useIsMobile } from '../utils/hooks'\n\n// ---- Pane ----\n\nexport type PaneProps = React.HTMLAttributes<HTMLDivElement> & {\n children: ReactNode\n /** fixed width in px (desktop only), omit for flex-1 */\n width?: number\n /** minimum width in px */\n minWidth?: number\n /** maximum width in px */\n maxWidth?: number\n /** center content horizontally */\n center?: boolean\n /** enable vertical scroll, default true */\n scrollable?: boolean\n className?: string\n}\n\nexport const Pane = forwardRef<HTMLDivElement, PaneProps>(function Pane(\n {\n children,\n width,\n minWidth,\n maxWidth,\n center,\n scrollable = true,\n className,\n ...props\n },\n ref\n) {\n const isMobile = useIsMobile()\n\n const style: React.CSSProperties = {}\n if (width !== undefined && !isMobile) {\n style.width = width\n style.flexShrink = 0\n }\n if (minWidth !== undefined && !isMobile) style.minWidth = minWidth\n if (maxWidth !== undefined && !isMobile) style.maxWidth = maxWidth\n\n return (\n <div\n {...props}\n ref={ref}\n className={cx(\n width === undefined && 'flex-1',\n isMobile && 'w-full',\n scrollable && 'min-h-0 overflow-y-auto',\n center === true && 'flex justify-center',\n className\n )}\n data-component=\"panel\"\n style={Object.keys(style).length > 0 ? style : undefined}\n >\n {children}\n </div>\n )\n})\n\n// ---- PaneGroup ----\n\nexport type PaneGroupProps = React.HTMLAttributes<HTMLDivElement> & {\n children: ReactNode\n /** layout direction, default 'horizontal' */\n direction?: 'horizontal' | 'vertical'\n className?: string\n}\n\nexport const PaneGroup = forwardRef<HTMLDivElement, PaneGroupProps>(\n function PaneGroup(\n { children, direction = 'horizontal', className, ...props },\n ref\n ) {\n const isMobile = useIsMobile()\n\n // on mobile, horizontal groups stack vertically\n const isVertical = direction === 'vertical' || isMobile\n\n return (\n <div\n {...props}\n ref={ref}\n className={cx(\n 'flex min-h-0 flex-1',\n isVertical ? 'flex-col' : 'flex-row',\n className\n )}\n data-component=\"panel-group\"\n >\n {children}\n </div>\n )\n }\n)\n","import type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype PayrollDashboardProps = React.HTMLAttributes<HTMLDivElement> & {\n chart?: ReactNode\n metrics?: ReactNode\n transactions?: ReactNode\n}\n\nexport const PayrollDashboard = forwardRef<\n HTMLDivElement,\n PayrollDashboardProps\n>(function PayrollDashboard(\n { chart, className, metrics, transactions, ...props },\n ref\n) {\n return (\n <div\n className={cx('gds-ctx gds-gap flex flex-col', className)}\n data-component=\"payroll-dashboard\"\n ref={ref}\n {...props}\n >\n {metrics !== undefined && (\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-3\">{metrics}</div>\n )}\n <div className=\"grid grid-cols-1 gap-4 lg:grid-cols-2\">\n {chart !== undefined && (\n <div className=\"gds-radius-card border-border bg-surface gds-pad border\">\n {chart}\n </div>\n )}\n {transactions !== undefined && (\n <div className=\"gds-radius-card border-border bg-surface gds-pad border\">\n {transactions}\n </div>\n )}\n </div>\n </div>\n )\n})\n\nexport type { PayrollDashboardProps }\n","// pricing-card — pricing tier card with name, price, features list, and CTA\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\nexport type PricingCardProps = {\n name: string\n price: string\n period?: string\n features: string[]\n action?: ReactNode\n highlighted?: boolean\n glass?: boolean\n className?: string\n}\n\nexport const PricingCard = forwardRef<HTMLDivElement, PricingCardProps>(\n function PricingCard(\n {\n name,\n price,\n period = '/month',\n features,\n action,\n highlighted,\n glass,\n className,\n },\n ref\n ) {\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-ctx gds-radius-card gds-pad-x-lg gds-pad-y-lg flex flex-col border',\n highlighted === true && 'border-accent ring-accent ring-1',\n highlighted !== true &&\n (glass === true\n ? cx(glassClass(glass), 'bg-bg/60 border-white/10')\n : 'border-border bg-surface'),\n glass === true &&\n highlighted === true &&\n cx(glassClass(glass), 'bg-bg/60'),\n className\n )}\n data-component=\"pricing-card\"\n data-highlighted={highlighted === true ? 'true' : undefined}\n >\n <p className=\"text-fg font-semibold\">{name}</p>\n <div className=\"mt-2 flex items-baseline gap-1\">\n <span className=\"text-fg text-3xl font-bold\">{price}</span>\n <span className=\"gds-text-body text-fg-muted\">{period}</span>\n </div>\n {features.length > 0 && (\n <ul className=\"mt-4 flex flex-col gap-2\">\n {features.map((feature) => (\n <li\n key={feature}\n className=\"gds-text-body text-fg-muted flex items-center gap-2\"\n >\n <svg\n className=\"text-success h-4 w-4 shrink-0\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n >\n <path\n d=\"M3 8l3 3 7-7\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n {feature}\n </li>\n ))}\n </ul>\n )}\n {action !== undefined && <div className=\"mt-auto pt-4\">{action}</div>}\n </div>\n )\n }\n)\n","// profile-card — user profile card with avatar, name, role, stats, actions\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { Avatar } from '../l3-atoms/avatar'\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\ntype ProfileStat = {\n label: string\n value: string\n}\n\nexport type ProfileCardProps = {\n actions?: ReactNode\n avatar?: string\n className?: string\n glass?: boolean\n name: string\n role?: string\n stats?: ProfileStat[]\n}\n\nexport const ProfileCard = forwardRef<HTMLDivElement, ProfileCardProps>(\n function ProfileCard(\n { actions, avatar, className, glass, name, role, stats },\n ref\n ) {\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-ctx gds-pad gds-radius-card flex flex-col items-center border',\n glass === true\n ? cx(glassClass(glass), 'bg-bg/60 border-white/10')\n : 'border-border bg-surface',\n className\n )}\n data-component=\"profile-card\"\n >\n <Avatar name={name} src={avatar} size=\"lg\" />\n <p className=\"text-fg mt-3 text-sm font-semibold\">{name}</p>\n {role !== undefined && (\n <p className=\"text-fg-muted mt-0.5 text-xs\">{role}</p>\n )}\n {stats !== undefined && stats.length > 0 && (\n <div className=\"gds-gap mt-3 flex w-full justify-center\">\n {stats.map((stat) => (\n <div key={stat.label} className=\"flex flex-col items-center\">\n <span className=\"text-fg text-sm font-bold\">{stat.value}</span>\n <span className=\"text-fg-muted text-[10px]\">{stat.label}</span>\n </div>\n ))}\n </div>\n )}\n {actions !== undefined && (\n <div className=\"gds-gap mt-3 flex w-full justify-center\">\n {actions}\n </div>\n )}\n </div>\n )\n }\n)\n","import type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype ProjectDashboardProps = {\n activity?: ReactNode\n className?: string\n progress?: ReactNode\n tasks?: ReactNode\n team?: ReactNode\n}\n\nconst ProjectDashboard = forwardRef<HTMLDivElement, ProjectDashboardProps>(\n function ProjectDashboard(\n { activity, className, progress, tasks, team },\n ref\n ) {\n return (\n <div\n className={cx('gds-gap grid grid-cols-2', className)}\n data-component=\"project-dashboard\"\n ref={ref}\n >\n {progress !== undefined && (\n <section data-slot=\"progress\">{progress}</section>\n )}\n {team !== undefined && <section data-slot=\"team\">{team}</section>}\n {activity !== undefined && (\n <section data-slot=\"activity\">{activity}</section>\n )}\n {tasks !== undefined && <section data-slot=\"tasks\">{tasks}</section>}\n </div>\n )\n }\n)\n\nexport { ProjectDashboard }\nexport type { ProjectDashboardProps }\n","// responsive-container — renders different children based on viewport width\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type ResponsiveContainerProps = {\n mobile: ReactNode\n tablet?: ReactNode\n desktop: ReactNode\n className?: string\n}\n\nexport const ResponsiveContainer = forwardRef<\n HTMLDivElement,\n ResponsiveContainerProps\n>(function ResponsiveContainer({ mobile, tablet, desktop, className }, ref) {\n const tabletContent = tablet ?? mobile\n\n return (\n <div\n ref={ref}\n className={cx(className)}\n data-component=\"responsive-container\"\n >\n <div className=\"block sm:hidden\">{mobile}</div>\n <div className=\"hidden sm:block lg:hidden\">{tabletContent}</div>\n <div className=\"hidden lg:block\">{desktop}</div>\n </div>\n )\n})\n","import { forwardRef } from 'react'\n\nimport { Progress } from '../l2-primitives/progress'\nimport { cx } from '../utils/cx'\n\ntype ServerInfo = {\n location: string\n metrics?: { cpu: number; disk: number; mem: number }\n name: string\n status: 'offline' | 'online'\n}\n\ntype ServerOverviewProps = React.HTMLAttributes<HTMLDivElement> & {\n servers: ServerInfo[]\n}\n\nfunction bv(v: number): 'danger' | 'success' | 'warning' {\n if (v >= 90) return 'danger'\n if (v >= 70) return 'warning'\n return 'success'\n}\n\nconst rowCls = 'flex items-center gap-2'\nconst labelCls = 'w-8 text-[10px] text-fg-muted'\nconst valueCls = 'w-8 text-right text-[10px] font-mono text-fg-muted'\n\nfunction MetricRow({ label, value }: { label: string; value: number }) {\n return (\n <div className={rowCls}>\n <span className={labelCls}>{label}</span>\n <Progress value={value} variant={bv(value)} size=\"sm\" />\n <span className={valueCls}>{value}%</span>\n </div>\n )\n}\n\nexport const ServerOverview = forwardRef<HTMLDivElement, ServerOverviewProps>(\n function ServerOverview({ className, servers, ...props }, ref) {\n return (\n <div\n className={cx('grid gap-3 sm:grid-cols-2 lg:grid-cols-3', className)}\n data-component=\"server-overview\"\n ref={ref}\n {...props}\n >\n {servers.map((s) => (\n <div\n key={s.name}\n className=\"border-border bg-surface gds-ctx rounded-lg border p-3\"\n >\n <div className=\"mb-2 flex items-center justify-between\">\n <span className=\"gds-text-label text-fg font-medium\">\n {s.name}\n </span>\n <span className=\"inline-flex items-center gap-1.5\">\n <span\n className={cx(\n 'h-2 w-2 rounded-full',\n s.status === 'online' ? 'bg-success' : 'bg-danger'\n )}\n />\n <span className=\"text-fg-muted text-xs\">{s.status}</span>\n </span>\n </div>\n <div className=\"text-fg-muted mb-2 text-xs\">{s.location}</div>\n {s.metrics !== undefined && (\n <div className=\"flex flex-col gap-1.5\">\n <MetricRow label=\"CPU\" value={s.metrics.cpu} />\n <MetricRow label=\"MEM\" value={s.metrics.mem} />\n <MetricRow label=\"DISK\" value={s.metrics.disk} />\n </div>\n )}\n </div>\n ))}\n </div>\n )\n }\n)\n\nexport type { ServerInfo, ServerOverviewProps }\n","// settings-layout — sidebar nav + content area for settings pages\nimport type { KeyboardEvent, ReactNode } from 'react'\nimport { useCallback, useRef, useState } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype SettingsSection = {\n content: ReactNode\n id: string\n label: string\n}\n\ntype SettingsLayoutProps = {\n activeSection?: string\n animated?: boolean\n className?: string\n defaultSection?: string\n navWidth?: number\n onSectionChange?: (sectionId: string) => void\n sections: SettingsSection[]\n stickyNav?: boolean\n}\n\nexport function SettingsLayout({\n activeSection: controlledActiveId,\n animated = true,\n className,\n defaultSection,\n navWidth = 192,\n onSectionChange,\n sections,\n stickyNav = true,\n}: SettingsLayoutProps) {\n const isControlled =\n controlledActiveId !== undefined && onSectionChange !== undefined\n const [internalId, setInternalId] = useState(\n defaultSection ?? sections[0]?.id ?? ''\n )\n const activeId = isControlled ? controlledActiveId : internalId\n const currentSection = sections.find((s) => s.id === activeId)\n const navItemsRef = useRef<Map<string, HTMLButtonElement>>(new Map())\n const animationKey = useRef(0)\n\n const handleSelect = useCallback(\n (sectionId: string) => {\n if (isControlled) {\n onSectionChange(sectionId)\n } else {\n setInternalId(sectionId)\n }\n if (onSectionChange !== undefined && !isControlled) {\n onSectionChange(sectionId)\n }\n animationKey.current += 1\n },\n [isControlled, onSectionChange]\n )\n\n const handleNavKeyDown = useCallback(\n (e: KeyboardEvent<HTMLUListElement>) => {\n if (e.key !== 'ArrowUp' && e.key !== 'ArrowDown') {\n return\n }\n e.preventDefault()\n const currentIndex = sections.findIndex((s) => s.id === activeId)\n if (currentIndex < 0) {\n return\n }\n let nextIndex = currentIndex\n if (e.key === 'ArrowDown') {\n nextIndex = currentIndex < sections.length - 1 ? currentIndex + 1 : 0\n }\n if (e.key === 'ArrowUp') {\n nextIndex = currentIndex > 0 ? currentIndex - 1 : sections.length - 1\n }\n const nextSection = sections[nextIndex]\n if (nextSection === undefined) {\n return\n }\n handleSelect(nextSection.id)\n const btn = navItemsRef.current.get(nextSection.id)\n if (btn !== undefined) {\n btn.focus()\n }\n },\n [activeId, handleSelect, sections]\n )\n\n const setNavItemRef = useCallback(\n (id: string, el: HTMLButtonElement | null) => {\n if (el !== null) {\n navItemsRef.current.set(id, el)\n } else {\n navItemsRef.current.delete(id)\n }\n },\n []\n )\n\n return (\n <div\n className={cx('flex gap-6', className)}\n data-component=\"settings-layout\"\n >\n <nav\n className=\"shrink-0\"\n style={{\n width: navWidth,\n ...(stickyNav\n ? { position: 'sticky' as const, top: 0, alignSelf: 'flex-start' }\n : {}),\n }}\n >\n <ul\n className=\"flex flex-col gap-0.5\"\n role=\"list\"\n onKeyDown={handleNavKeyDown}\n >\n {sections.map((section) => (\n <li key={section.id}>\n <button\n ref={(el) => setNavItemRef(section.id, el)}\n type=\"button\"\n className={cx(\n 'gds-text-body w-full rounded-md px-3 py-2 text-left transition-colors',\n section.id === activeId\n ? 'bg-accent/10 text-accent font-medium'\n : 'text-fg-muted hover:bg-bg-tertiary hover:text-fg'\n )}\n onClick={() => handleSelect(section.id)}\n >\n {section.label}\n </button>\n </li>\n ))}\n </ul>\n </nav>\n <div\n key={animated ? `${activeId}-${animationKey.current}` : undefined}\n className={cx('min-w-0 flex-1', animated && 'animate-fade-in')}\n >\n {currentSection !== undefined ? currentSection.content : null}\n </div>\n </div>\n )\n}\n\nexport type { SettingsLayoutProps, SettingsSection }\n","// sidebar — collapsible navigation panel with item support\nimport type { ReactNode } from 'react'\nimport { createContext, forwardRef, useContext, useState } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\n// context for sidebar collapsed state — children can react to it\ntype SidebarContextValue = { collapsed: boolean }\nconst SidebarContext = createContext<SidebarContextValue>({ collapsed: false })\n\nexport type SidebarItemProps = {\n icon: ReactNode\n label: string\n badge?: number | string\n active?: boolean\n onClick?: () => void\n href?: string\n className?: string\n}\n\n// sidebar item — shows icon + label when expanded, icon + tooltip when collapsed\nexport function SidebarItem({\n icon,\n label,\n badge,\n active,\n onClick,\n href,\n className,\n}: SidebarItemProps) {\n const { collapsed } = useContext(SidebarContext)\n const [showTooltip, setShowTooltip] = useState(false)\n\n const content = (\n <>\n <span className=\"flex h-5 w-5 shrink-0 items-center justify-center\">\n {icon}\n </span>\n {!collapsed && (\n <span className=\"gds-text-body flex-1 truncate\">{label}</span>\n )}\n {!collapsed && badge !== undefined && (\n <span className=\"bg-accent/15 gds-text-caption text-accent shrink-0 rounded-full px-1.5 py-px font-medium\">\n {badge}\n </span>\n )}\n {collapsed && badge !== undefined && (\n <span className=\"bg-danger absolute -top-0.5 -right-0.5 h-2 w-2 rounded-full\" />\n )}\n </>\n )\n\n const baseCls = cx(\n 'relative flex items-center gap-2.5 rounded-md px-2.5 py-2 text-left transition-colors select-none',\n active === true\n ? 'bg-accent/15 text-accent font-medium'\n : 'text-fg-muted hover:bg-white/[0.04] hover:text-fg',\n collapsed && 'justify-center px-0',\n className\n )\n\n const tooltipEl =\n collapsed && showTooltip ? (\n <div className=\"bg-bg-secondary border-border gds-text-label text-fg pointer-events-none absolute top-1/2 left-full z-50 ml-2 -translate-y-1/2 rounded-md border px-2.5 py-1 whitespace-nowrap shadow-lg\">\n {label}\n {badge !== undefined && (\n <span className=\"text-accent ml-1.5 font-medium\">{badge}</span>\n )}\n </div>\n ) : null\n\n const hoverHandlers = collapsed\n ? {\n onMouseEnter: () => setShowTooltip(true),\n onMouseLeave: () => setShowTooltip(false),\n }\n : {}\n\n if (href !== undefined) {\n return (\n <div className=\"relative\" {...hoverHandlers}>\n <a\n href={href}\n className={baseCls}\n data-component=\"sidebar-item\"\n data-state={active === true ? 'active' : undefined}\n >\n {content}\n </a>\n {tooltipEl}\n </div>\n )\n }\n\n return (\n <div className=\"relative\" {...hoverHandlers}>\n <button\n type=\"button\"\n onClick={onClick}\n className={cx(baseCls, 'w-full')}\n data-component=\"sidebar-item\"\n data-state={active === true ? 'active' : undefined}\n >\n {content}\n </button>\n {tooltipEl}\n </div>\n )\n}\n\nexport type SidebarProps = {\n children: ReactNode\n collapsed?: boolean\n onCollapse?: (collapsed: boolean) => void\n width?: number\n collapsedWidth?: number\n position?: 'left' | 'right'\n glass?: boolean\n className?: string\n /** v2: structured nav items (alternative to children) */\n items?: SidebarItemProps[]\n /** v2: show tooltip on hover when collapsed, default true */\n showTooltipOnCollapse?: boolean\n}\n\nexport const Sidebar = forwardRef<HTMLDivElement, SidebarProps>(\n function Sidebar(\n {\n children,\n collapsed = false,\n onCollapse,\n width = 240,\n collapsedWidth = 56,\n position = 'left',\n glass,\n className,\n items,\n },\n ref\n ) {\n const currentWidth = collapsed ? collapsedWidth : width\n\n return (\n <SidebarContext value={{ collapsed }}>\n <div\n ref={ref}\n className={cx(\n 'flex flex-col overflow-hidden transition-[width] duration-200',\n position === 'left' ? 'border-r' : 'border-l',\n glass === true\n ? cx(glassClass(glass), 'bg-bg/60 border-white/10')\n : 'border-border bg-surface',\n className\n )}\n data-collapsed={collapsed}\n data-component=\"sidebar\"\n style={{ width: currentWidth }}\n >\n <div className=\"flex-1 overflow-x-hidden overflow-y-auto\">\n {items !== undefined && (\n <nav className=\"flex flex-col gap-0.5 p-2\">\n {items.map((item) => (\n <SidebarItem key={item.label} {...item} />\n ))}\n </nav>\n )}\n {children}\n </div>\n {onCollapse !== undefined && (\n <button\n className=\"border-border/50 text-fg-muted hover:text-fg flex h-10 items-center justify-center border-t transition-colors\"\n type=\"button\"\n onClick={() => onCollapse(!collapsed)}\n aria-label={collapsed ? 'Expand sidebar' : 'Collapse sidebar'}\n >\n <svg\n className={cx(\n 'transition-transform duration-200',\n collapsed && 'rotate-180',\n position === 'right' && 'rotate-180',\n collapsed && position === 'right' && 'rotate-0'\n )}\n fill=\"none\"\n height=\"14\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n viewBox=\"0 0 24 24\"\n width=\"14\"\n >\n <polyline points=\"15 18 9 12 15 6\" />\n </svg>\n </button>\n )}\n </div>\n </SidebarContext>\n )\n }\n)\n","// skeleton-pattern — pre-composed skeleton loading patterns\nimport { forwardRef } from 'react'\n\nimport { Skeleton } from '../l2-primitives/skeleton'\nimport { cx } from '../utils/cx'\n\ntype SkeletonPatternVariant = 'card' | 'list' | 'profile' | 'table'\n\nexport type SkeletonPatternProps = {\n variant: SkeletonPatternVariant\n count?: number\n glass?: boolean\n className?: string\n}\n\nfunction CardSkeleton() {\n return (\n <div className=\"gds-gap gds-ctx gds-pad gds-radius-card flex flex-col\">\n <Skeleton variant=\"rect\" height={120} />\n <Skeleton variant=\"text\" width=\"60%\" />\n <Skeleton variant=\"text\" lines={2} />\n </div>\n )\n}\n\nfunction ListRow() {\n return (\n <div className=\"flex items-center gap-3\">\n <Skeleton variant=\"circle\" />\n <div className=\"flex flex-1 flex-col gap-2\">\n <Skeleton variant=\"text\" width=\"40%\" />\n <Skeleton variant=\"text\" width=\"80%\" />\n </div>\n </div>\n )\n}\n\nfunction ProfileSkeleton() {\n return (\n <div className=\"gds-gap gds-ctx gds-pad flex flex-col items-center\">\n <Skeleton variant=\"circle\" width={64} height={64} />\n <Skeleton variant=\"text\" width=\"30%\" />\n <Skeleton variant=\"text\" lines={3} />\n </div>\n )\n}\n\nfunction TableSkeleton({ rows }: { rows: number }) {\n return (\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex gap-4\">\n <Skeleton variant=\"text\" width=\"25%\" />\n <Skeleton variant=\"text\" width=\"25%\" />\n <Skeleton variant=\"text\" width=\"25%\" />\n <Skeleton variant=\"text\" width=\"25%\" />\n </div>\n {Array.from({ length: rows }, (_, i) => (\n <div key={i} className=\"flex gap-4\">\n <Skeleton variant=\"text\" width=\"25%\" />\n <Skeleton variant=\"text\" width=\"25%\" />\n <Skeleton variant=\"text\" width=\"25%\" />\n <Skeleton variant=\"text\" width=\"25%\" />\n </div>\n ))}\n </div>\n )\n}\n\nexport const SkeletonPattern = forwardRef<HTMLDivElement, SkeletonPatternProps>(\n function SkeletonPattern({ variant, count = 1, glass, className }, ref) {\n const glassClass = glass ? 'backdrop-blur-md bg-white/5' : undefined\n\n if (variant === 'card') {\n return (\n <div\n ref={ref}\n className={cx('gds-ctx gds-radius-card', glassClass, className)}\n data-component=\"skeleton-pattern\"\n data-variant=\"card\"\n >\n <CardSkeleton />\n </div>\n )\n }\n\n if (variant === 'list') {\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-gap gds-ctx gds-pad flex flex-col',\n glassClass,\n className\n )}\n data-component=\"skeleton-pattern\"\n data-variant=\"list\"\n >\n {Array.from({ length: count }, (_, i) => (\n <ListRow key={i} />\n ))}\n </div>\n )\n }\n\n if (variant === 'profile') {\n return (\n <div\n ref={ref}\n className={cx(glassClass, className)}\n data-component=\"skeleton-pattern\"\n data-variant=\"profile\"\n >\n <ProfileSkeleton />\n </div>\n )\n }\n\n return (\n <div\n ref={ref}\n className={cx('gds-ctx gds-pad', glassClass, className)}\n data-component=\"skeleton-pattern\"\n data-variant=\"table\"\n >\n <TableSkeleton rows={count} />\n </div>\n )\n }\n)\n\nexport type { SkeletonPatternVariant }\n","// splash-screen — full-screen loading splash during app initialization\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type SplashScreenProps = React.HTMLAttributes<HTMLDivElement> & {\n logo?: ReactNode\n message?: string\n title?: string\n visible: boolean\n}\n\n// inline spinner to avoid circular dependency with L2\nfunction SplashSpinner() {\n return (\n <svg\n className=\"text-accent h-5 w-5 animate-spin\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n}\n\nexport const SplashScreen = forwardRef<HTMLDivElement, SplashScreenProps>(\n function SplashScreen(\n { className, logo, message, title, visible, ...props },\n ref\n ) {\n return (\n <div\n ref={ref}\n className={cx(\n 'bg-bg fixed inset-0 z-[9999] flex flex-col items-center justify-center transition-opacity duration-300',\n visible === true ? 'opacity-100' : 'pointer-events-none opacity-0',\n className\n )}\n data-component=\"splash-screen\"\n data-visible={visible}\n {...props}\n >\n {logo !== undefined && <div className=\"mb-6\">{logo}</div>}\n {title !== undefined && (\n <h1 className=\"text-fg mb-2 text-lg font-semibold\">{title}</h1>\n )}\n {message !== undefined && (\n <p className=\"text-fg-muted mb-8 text-sm\">{message}</p>\n )}\n <SplashSpinner />\n </div>\n )\n }\n)\n","import type { ReactNode } from 'react'\nimport { forwardRef, useCallback, useRef, useState } from 'react'\n\nimport { ResizeHandle } from '../l3-atoms/resize-handle'\nimport { cx } from '../utils/cx'\n\ntype SplitViewProps = React.HTMLAttributes<HTMLDivElement> & {\n defaultSplit?: number\n left: ReactNode\n minLeft?: number\n minRight?: number\n right: ReactNode\n}\n\nexport const SplitView = forwardRef<HTMLDivElement, SplitViewProps>(\n function SplitView(\n {\n className,\n defaultSplit = 50,\n left,\n minLeft = 20,\n minRight = 20,\n right,\n ...props\n },\n ref\n ) {\n const [split, setSplit] = useState(defaultSplit)\n const containerRef = useRef<HTMLDivElement>(null)\n\n const handleResize = useCallback(\n (delta: number) => {\n const container = containerRef.current\n if (container === null) return\n const width = container.offsetWidth\n if (width === 0) return\n const pctDelta = (delta / width) * 100\n setSplit((prev) => {\n const next = prev + pctDelta\n if (next < minLeft) return minLeft\n if (next > 100 - minRight) return 100 - minRight\n return next\n })\n },\n [minLeft, minRight]\n )\n\n return (\n <div\n className={cx('flex h-full w-full', className)}\n data-component=\"split-view\"\n ref={(el) => {\n ;(\n containerRef as React.MutableRefObject<HTMLDivElement | null>\n ).current = el\n if (typeof ref === 'function') ref(el)\n else if (ref !== null && ref !== undefined)\n (ref as React.MutableRefObject<HTMLDivElement | null>).current = el\n }}\n {...props}\n >\n <div className=\"overflow-auto\" style={{ width: `${split}%` }}>\n {left}\n </div>\n <ResizeHandle orientation=\"vertical\" onResize={handleResize} />\n <div className=\"overflow-auto\" style={{ width: `${100 - split}%` }}>\n {right}\n </div>\n </div>\n )\n }\n)\n\nexport type { SplitViewProps }\n","// stat — KPI card with animated counter, trend, sparkline, and motion\nimport type { ReactNode } from 'react'\nimport { forwardRef, useEffect, useMemo, useRef, useState } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype StatProps = {\n animated?: boolean\n change?: string\n changeType?: 'down' | 'neutral' | 'up'\n className?: string\n description?: string\n footer?: ReactNode\n glass?: boolean\n icon?: ReactNode\n label: string\n motion?: 'counter' | 'fade' | 'slide-up'\n pulse?: boolean\n size?: 'default' | 'lg' | 'sm'\n sparkData?: number[]\n trend?: number\n unit?: string\n value: number | string\n}\n\nconst valueSizes = { default: 'text-2xl', lg: 'text-3xl', sm: 'text-lg' }\n\nconst changeColors = {\n down: 'text-danger',\n neutral: 'text-fg-muted',\n up: 'text-success',\n}\n\n// inline arrow SVGs\nfunction ArrowUpIcon() {\n return (\n <svg\n className=\"h-3 w-3\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M12 19V5M5 12l7-7 7 7\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )\n}\nfunction ArrowDownIcon() {\n return (\n <svg\n className=\"h-3 w-3\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M12 5v14M19 12l-7 7-7-7\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )\n}\nfunction MinusIcon() {\n return (\n <svg\n className=\"h-3 w-3\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M5 12h14\" strokeLinecap=\"round\" />\n </svg>\n )\n}\n\nconst changeIcons = { down: ArrowDownIcon, neutral: MinusIcon, up: ArrowUpIcon }\n\nfunction sparklinePath(data: number[], w: number, h: number): string {\n if (data.length < 2) return ''\n const min = Math.min(...data)\n const max = Math.max(...data)\n const range = max - min || 1\n const step = w / (data.length - 1)\n return data\n .map(\n (v, i) =>\n `${i === 0 ? 'M' : 'L'}${(i * step).toFixed(1)},${(h - ((v - min) / range) * h).toFixed(1)}`\n )\n .join(' ')\n}\n\nfunction useAnimatedValue(\n target: number,\n enabled: boolean,\n duration: number = 500\n): number {\n const [display, setDisplay] = useState(target)\n const prevRef = useRef(target)\n const rafRef = useRef<number>(0)\n\n useEffect(() => {\n if (!enabled) {\n setDisplay(target)\n return\n }\n const from = prevRef.current\n prevRef.current = target\n if (from === target) return\n const startTime = performance.now()\n const diff = target - from\n const animate = (now: number) => {\n const progress = Math.min(1, (now - startTime) / duration)\n const eased = 1 - Math.pow(1 - progress, 3)\n setDisplay(from + diff * eased)\n if (progress < 1) {\n rafRef.current = requestAnimationFrame(animate)\n } else {\n setDisplay(target)\n }\n }\n rafRef.current = requestAnimationFrame(animate)\n return () => cancelAnimationFrame(rafRef.current)\n }, [target, enabled, duration])\n\n return display\n}\n\nexport const Stat = forwardRef<HTMLDivElement, StatProps>(function Stat(\n {\n animated = false,\n change,\n changeType = 'neutral',\n className,\n description,\n footer,\n glass = false,\n icon,\n label,\n motion: motionProp,\n pulse = false,\n size = 'default',\n sparkData,\n trend,\n unit,\n value,\n },\n ref\n) {\n const ChangeIcon = changeIcons[changeType]\n const trendDir =\n trend !== undefined\n ? trend > 0\n ? 'up'\n : trend < 0\n ? 'down'\n : 'neutral'\n : null\n const trendColor = trendDir !== null ? changeColors[trendDir] : null\n const sparkColor =\n trendDir === 'up'\n ? 'var(--gds-success)'\n : trendDir === 'down'\n ? 'var(--gds-danger)'\n : 'var(--gds-fg-muted)'\n\n const path = useMemo(\n () =>\n sparkData !== undefined && sparkData.length >= 2\n ? sparklinePath(sparkData, 80, 24)\n : null,\n [sparkData]\n )\n\n const numericValue = typeof value === 'number' ? value : null\n const animatedValue = useAnimatedValue(\n numericValue ?? 0,\n animated && numericValue !== null\n )\n const displayValue =\n animated && numericValue !== null\n ? Number.isInteger(animatedValue)\n ? animatedValue.toLocaleString()\n : animatedValue.toLocaleString(undefined, { maximumFractionDigits: 2 })\n : value\n\n const motionCls =\n motionProp === 'fade'\n ? 'animate-fade-in'\n : motionProp === 'slide-up'\n ? 'animate-slide-up'\n : ''\n\n return (\n <div\n className={cx(\n 'select-none',\n glass\n ? 'rounded-lg border border-white/10 bg-white/5 p-4 shadow-lg backdrop-blur-xl'\n : 'space-y-1',\n pulse && 'animate-pulse',\n motionCls,\n className\n )}\n data-component=\"stat\"\n ref={ref}\n >\n <div className=\"flex items-start justify-between\">\n <div className=\"text-fg-muted text-xs\">{label}</div>\n {icon !== undefined && (\n <span className=\"text-fg-muted/30 h-4 w-4\">{icon}</span>\n )}\n </div>\n\n <div className=\"flex items-end gap-3\">\n <div className={cx('text-fg font-bold tabular-nums', valueSizes[size])}>\n {displayValue}\n {unit !== undefined && (\n <span className=\"text-fg-muted ml-1 text-xs font-normal\">\n {unit}\n </span>\n )}\n </div>\n {trend !== undefined && trendDir !== null && (\n <div\n className={cx(\n 'mb-0.5 flex items-center gap-0.5 text-xs font-medium',\n trendColor\n )}\n >\n {trendDir === 'up' && <ArrowUpIcon />}\n {trendDir === 'down' && <ArrowDownIcon />}\n {trendDir === 'neutral' && <MinusIcon />}\n <span>\n {trendDir === 'neutral'\n ? '0%'\n : `${trend > 0 ? '+' : ''}${trend}%`}\n </span>\n </div>\n )}\n </div>\n\n {change !== undefined && trend === undefined && (\n <div\n className={cx(\n 'inline-flex items-center gap-0.5 text-xs font-medium',\n changeColors[changeType]\n )}\n >\n <ChangeIcon />\n {change}\n </div>\n )}\n\n {path !== null && (\n <svg className=\"mt-1\" height={24} viewBox=\"0 0 80 24\" width={80}>\n <path\n d={path}\n fill=\"none\"\n stroke={sparkColor}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n />\n </svg>\n )}\n\n {description !== undefined && (\n <div className=\"text-fg-muted text-[11px]\">{description}</div>\n )}\n {footer !== undefined && (\n <div className=\"border-border/20 text-fg-muted/50 mt-3 border-t pt-2 text-[10px]\">\n {footer}\n </div>\n )}\n </div>\n )\n})\n\nexport type { StatProps }\n","// stat-grid — responsive grid layout for metric cards and stat widgets\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nconst colsMap = {\n 2: 'grid-cols-2',\n 3: 'grid-cols-3',\n 4: 'grid-cols-4',\n} as const\n\nexport type StatGridProps = {\n children: ReactNode\n columns?: 2 | 3 | 4\n className?: string\n}\n\nexport const StatGrid = forwardRef<HTMLDivElement, StatGridProps>(\n function StatGrid({ children, columns = 3, className }, ref) {\n return (\n <div\n ref={ref}\n className={cx('gds-gap-lg grid', colsMap[columns], className)}\n data-component=\"stat-grid\"\n >\n {children}\n </div>\n )\n }\n)\n","// stats-card — rich KPI card with icon, value, trend, and sparkline\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\nexport type StatsCardProps = {\n icon?: ReactNode\n label: string\n value: string | number\n trend?: number\n sparkData?: number[]\n glass?: boolean\n className?: string\n}\n\nfunction MiniSparkline({ data }: { data: number[] }) {\n const h = 24\n const w = 64\n if (data.length < 2) return null\n const max = Math.max(...data)\n const min = Math.min(...data)\n const range = max - min\n const points = data\n .map((v, i) => {\n const x = (i / (data.length - 1)) * w\n const y = range > 0 ? h - ((v - min) / range) * h : h / 2\n return `${x},${y}`\n })\n .join(' ')\n\n return (\n <svg className=\"mt-2\" height={h} viewBox={`0 0 ${w} ${h}`} width={w}>\n <polyline\n fill=\"none\"\n points={points}\n stroke=\"var(--gds-accent)\"\n strokeWidth={1.5}\n />\n </svg>\n )\n}\n\nexport const StatsCard = forwardRef<HTMLDivElement, StatsCardProps>(\n function StatsCard(\n { icon, label, value, trend, sparkData, glass, className },\n ref\n ) {\n const isPositive = trend !== undefined && trend >= 0\n\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-ctx gds-radius-card gds-pad-x-lg gds-pad-y-lg relative border',\n glass === true\n ? cx(glassClass(glass), 'bg-bg/60 border-white/10')\n : 'border-border bg-surface',\n className\n )}\n data-component=\"stats-card\"\n >\n <div className=\"flex items-start justify-between\">\n <div className=\"flex items-center gap-2\">\n {icon !== undefined && (\n <div className=\"text-fg-muted/50\">{icon}</div>\n )}\n <p className=\"gds-text-body text-fg-muted\">{label}</p>\n </div>\n {trend !== undefined && (\n <span\n className={cx(\n 'inline-flex items-center gap-0.5 rounded-full px-1.5 py-0.5 text-[10px] font-medium',\n isPositive\n ? 'bg-success/10 text-success'\n : 'bg-danger/10 text-danger'\n )}\n >\n {isPositive ? '\\u2191' : '\\u2193'}\n {isPositive ? '+' : ''}\n {trend}%\n </span>\n )}\n </div>\n <p className=\"text-fg mt-1 text-2xl font-bold\">{value}</p>\n {sparkData !== undefined && sparkData.length >= 2 && (\n <MiniSparkline data={sparkData} />\n )}\n </div>\n )\n }\n)\n","// status-page — full-page status display for 404, 500, maintenance, etc.\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type StatusPageProps = {\n code?: string | number\n title: string\n description?: string\n action?: ReactNode\n secondaryAction?: ReactNode\n illustration?: ReactNode\n className?: string\n}\n\nexport const StatusPage = forwardRef<HTMLDivElement, StatusPageProps>(\n function StatusPage(\n {\n code,\n title,\n description,\n action,\n secondaryAction,\n illustration,\n className,\n },\n ref\n ) {\n return (\n <div\n ref={ref}\n className={cx(\n 'flex min-h-[60vh] flex-col items-center justify-center gap-4 text-center',\n className\n )}\n data-component=\"status-page\"\n >\n {illustration !== undefined && (\n <div className=\"mb-2\">{illustration}</div>\n )}\n {code !== undefined && (\n <p className=\"text-fg-muted/10 text-6xl font-bold\">{code}</p>\n )}\n <h1 className=\"text-fg text-xl font-semibold\">{title}</h1>\n {description !== undefined && (\n <p className=\"text-fg-muted max-w-md\">{description}</p>\n )}\n {(action !== undefined || secondaryAction !== undefined) && (\n <div className=\"mt-2 flex items-center gap-3\">\n {action}\n {secondaryAction}\n </div>\n )}\n </div>\n )\n }\n)\n","// stepper-form — multi-step form wizard with prev/next navigation\nimport type { ReactNode } from 'react'\nimport { forwardRef, useState } from 'react'\n\nimport { Button } from '../l2-primitives/button'\nimport { Stepper } from '../l4-molecules/stepper'\nimport { cx } from '../utils/cx'\n\ntype StepperFormStep = {\n title: string\n description?: string\n content: ReactNode\n}\n\nexport type StepperFormProps = React.HTMLAttributes<HTMLDivElement> & {\n steps: StepperFormStep[]\n onComplete?: () => void\n completeLabel?: string\n glass?: boolean\n}\n\nexport const StepperForm = forwardRef<HTMLDivElement, StepperFormProps>(\n function StepperForm(\n {\n steps,\n onComplete,\n completeLabel = 'Complete',\n glass = false,\n className,\n ...props\n },\n ref\n ) {\n const [current, setCurrent] = useState(0)\n const isFirst = current === 0\n const isLast = current === steps.length - 1\n\n const stepDefs = steps.map((s) => ({\n label: s.title,\n description: s.description,\n }))\n\n return (\n <div\n ref={ref}\n className={cx(\n 'border-border flex flex-col rounded-lg border p-6',\n glass ? 'bg-bg/80 backdrop-blur-xl' : 'bg-bg-secondary',\n className\n )}\n data-component=\"stepper-form\"\n {...props}\n >\n {/* stepper indicator */}\n <Stepper steps={stepDefs} current={current} className=\"mb-6\" />\n\n {/* step content */}\n <div className=\"min-h-[120px] flex-1\">{steps[current]?.content}</div>\n\n {/* navigation */}\n <div className=\"mt-6 flex items-center justify-between\">\n <Button\n variant=\"secondary\"\n size=\"sm\"\n disabled={isFirst}\n onClick={() => setCurrent((c) => c - 1)}\n >\n Previous\n </Button>\n\n {isLast ? (\n <Button size=\"sm\" onClick={onComplete}>\n {completeLabel}\n </Button>\n ) : (\n <Button size=\"sm\" onClick={() => setCurrent((c) => c + 1)}>\n Next\n </Button>\n )}\n </div>\n </div>\n )\n }\n)\n","import { forwardRef, useEffect, useState } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\ntype StickyHeaderProps = React.HTMLAttributes<HTMLDivElement> & {\n glass?: boolean\n threshold?: number\n}\n\nexport const StickyHeader = forwardRef<HTMLDivElement, StickyHeaderProps>(\n function StickyHeader(\n { children, className, glass = true, threshold = 0, ...props },\n ref\n ) {\n const [isSticky, setIsSticky] = useState(false)\n\n useEffect(() => {\n function handleScroll() {\n setIsSticky(window.scrollY > threshold)\n }\n window.addEventListener('scroll', handleScroll, { passive: true })\n return () => window.removeEventListener('scroll', handleScroll)\n }, [threshold])\n\n return (\n <div\n className={cx(\n 'sticky top-0 z-40 transition-[background-color,box-shadow] duration-200',\n isSticky && 'bg-bg/80 shadow-md',\n isSticky && glass && glassClass(true),\n className\n )}\n data-component=\"sticky-header\"\n data-sticky={isSticky}\n ref={ref}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\n\nexport type { StickyHeaderProps }\n","// testimonial — customer review/endorsement quote card\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\nexport type TestimonialProps = {\n quote: string\n author: string\n role?: string\n avatar?: string\n rating?: number\n glass?: boolean\n className?: string\n}\n\nexport const Testimonial = forwardRef<HTMLDivElement, TestimonialProps>(\n function Testimonial(\n { quote, author, role, avatar, rating, glass, className },\n ref\n ) {\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-ctx gds-radius-card gds-pad-x-lg gds-pad-y-lg border',\n glass === true\n ? cx(glassClass(glass), 'bg-bg/60 border-white/10')\n : 'border-border bg-surface',\n className\n )}\n data-component=\"testimonial\"\n >\n <svg\n className=\"text-fg-muted mb-3 h-6 w-6 opacity-30\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n >\n <path d=\"M4.583 17.321C3.553 16.227 3 15 3 13.011c0-3.5 2.457-6.637 6.03-8.188l.893 1.378C7.06 7.752 6.14 9.87 5.94 11.501c.26-.058.527-.088.8-.088 1.656 0 2.96 1.283 2.96 2.87 0 1.586-1.304 2.87-2.96 2.87-.83 0-1.572-.358-2.157-.832zM14.583 17.321C13.553 16.227 13 15 13 13.011c0-3.5 2.457-6.637 6.03-8.188l.893 1.378c-2.863 1.551-3.783 3.669-3.983 5.3.26-.058.527-.088.8-.088 1.656 0 2.96 1.283 2.96 2.87 0 1.586-1.304 2.87-2.96 2.87-.83 0-1.572-.358-2.157-.832z\" />\n </svg>\n <p className=\"gds-text-body text-fg italic\">{quote}</p>\n {rating !== undefined && (\n <div className=\"mt-3 flex gap-0.5\">\n {Array.from({ length: 5 }, (_, i) => (\n <svg\n key={i}\n className={cx(\n 'h-4 w-4',\n i < rating ? 'text-warning' : 'text-fg-muted/30'\n )}\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n >\n <path d=\"M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z\" />\n </svg>\n ))}\n </div>\n )}\n <div className=\"mt-4 flex items-center gap-3\">\n {avatar !== undefined && (\n <img\n src={avatar}\n alt={author}\n className=\"h-10 w-10 rounded-full object-cover\"\n />\n )}\n <div>\n <p className=\"text-fg text-sm font-medium\">{author}</p>\n {role !== undefined && (\n <p className=\"text-fg-muted text-xs\">{role}</p>\n )}\n </div>\n </div>\n </div>\n )\n }\n)\n","// timeline-steps — horizontal step indicator for order tracking and milestones\nimport { cx } from '../utils/cx'\n\nexport type TimelineStep = {\n label: string\n description?: string\n status: 'completed' | 'current' | 'upcoming'\n}\n\nexport type TimelineStepsProps = {\n steps: TimelineStep[]\n className?: string\n}\n\nexport function TimelineSteps({ steps, className }: TimelineStepsProps) {\n return (\n <div\n data-component=\"timeline-steps\"\n className={cx('flex items-start', className)}\n >\n {steps.map((step, i) => (\n <div key={step.label} className=\"flex flex-1 items-start\">\n <div className=\"flex flex-col items-center\">\n <div\n data-status={step.status}\n className={cx(\n 'flex h-8 w-8 shrink-0 items-center justify-center rounded-full text-xs font-semibold',\n step.status === 'completed' && 'bg-success text-white',\n step.status === 'current' &&\n 'bg-accent text-accent-fg animate-pulse',\n step.status === 'upcoming' && 'bg-bg-tertiary text-fg-muted'\n )}\n >\n {step.status === 'completed' ? (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n ) : (\n i + 1\n )}\n </div>\n <div className=\"mt-2 text-center\">\n <div className=\"text-fg text-xs font-medium\">{step.label}</div>\n {step.description !== undefined && (\n <div className=\"text-fg-muted mt-0.5 text-[10px]\">\n {step.description}\n </div>\n )}\n </div>\n </div>\n {i < steps.length - 1 && (\n <div\n className={cx(\n 'mx-2 mt-4 h-0.5 flex-1',\n step.status === 'completed' ? 'bg-success' : 'bg-border'\n )}\n />\n )}\n </div>\n ))}\n </div>\n )\n}\n","// toolbar — horizontal toolbar with icon buttons, separators, and groups\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\ntype ToolbarPosition = 'bottom' | 'floating' | 'top'\n\nexport type ToolbarProps = React.HTMLAttributes<HTMLDivElement> & {\n children: ReactNode\n glass?: boolean\n position?: ToolbarPosition\n}\n\nexport const Toolbar = forwardRef<HTMLDivElement, ToolbarProps>(\n function Toolbar(\n { children, className, glass, position = 'top', ...props },\n ref\n ) {\n const isFloating = position === 'floating'\n const resolvedGlass = glass ?? isFloating\n\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-gap-sm gds-pad-x gds-pad-y-sm flex items-center',\n position === 'top' && 'border-border border-b',\n position === 'bottom' && 'border-border border-t',\n isFloating && 'gds-shadow-lg rounded-full',\n resolvedGlass === true\n ? cx(glassClass(resolvedGlass), 'bg-bg/60 border-white/10')\n : !isFloating && 'bg-surface',\n isFloating &&\n resolvedGlass !== true &&\n 'border-border bg-surface border',\n className\n )}\n data-component=\"toolbar\"\n data-position={position}\n role=\"toolbar\"\n {...props}\n >\n {children}\n </div>\n )\n }\n)\n","// wizard-layout — full-page wizard with step indicator, content, and actions\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { ProgressSteps } from '../l4-molecules/progress-steps'\nimport { cx } from '../utils/cx'\n\ntype WizardLayoutProps = React.HTMLAttributes<HTMLDivElement> & {\n actions?: ReactNode\n children: ReactNode\n currentStep: number\n steps: string[]\n}\n\nexport const WizardLayout = forwardRef<HTMLDivElement, WizardLayoutProps>(\n function WizardLayout(\n { steps, currentStep, children, actions, className, ...props },\n ref\n ) {\n return (\n <div\n ref={ref}\n className={cx('gds-gap flex min-h-0 flex-1 flex-col', className)}\n data-component=\"wizard-layout\"\n {...props}\n >\n <div className=\"gds-pad-x shrink-0\">\n <ProgressSteps steps={steps} current={currentStep} />\n </div>\n <div className=\"gds-pad-x min-h-0 flex-1 overflow-auto\">{children}</div>\n {actions !== undefined && (\n <div className=\"gds-gap gds-pad-x gds-pad-y border-border flex shrink-0 items-center justify-end border-t\">\n {actions}\n </div>\n )}\n </div>\n )\n }\n)\n\nexport type { WizardLayoutProps }\n"],"mappings":"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"}