@goliapkg/gds 1.7.0 → 2.0.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.
- package/dist/{gesture-irjS0hVM.js → gesture-I79dlTuS.js} +1 -1
- package/dist/{gesture-irjS0hVM.js.map → gesture-I79dlTuS.js.map} +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +26 -26
- package/dist/l0-tokens/index.js +1 -1
- package/dist/l0-tokens/motion-system.d.ts +1 -0
- package/dist/l0-tokens/motion-system.d.ts.map +1 -1
- package/dist/l0-tokens/shadow-system.d.ts.map +1 -1
- package/dist/l1-systems/index.d.ts +2 -2
- package/dist/l1-systems/index.d.ts.map +1 -1
- package/dist/l1-systems/index.js +9 -9
- package/dist/l1-systems/theme.d.ts +28 -0
- package/dist/l1-systems/theme.d.ts.map +1 -1
- package/dist/l2-primitives/focus-ring.d.ts +9 -3
- package/dist/l2-primitives/focus-ring.d.ts.map +1 -1
- package/dist/l2-primitives/glow-effect.d.ts +8 -2
- package/dist/l2-primitives/glow-effect.d.ts.map +1 -1
- package/dist/l2-primitives/gradient-border.d.ts +8 -2
- package/dist/l2-primitives/gradient-border.d.ts.map +1 -1
- package/dist/l2-primitives/index.js +2 -2
- package/dist/l2-primitives/input.d.ts +16 -0
- package/dist/l2-primitives/input.d.ts.map +1 -1
- package/dist/l2-primitives/loading.d.ts +21 -6
- package/dist/l2-primitives/loading.d.ts.map +1 -1
- package/dist/l2-primitives/truncate.d.ts +8 -2
- package/dist/l2-primitives/truncate.d.ts.map +1 -1
- package/dist/{l2-primitives-Le0006ck.js → l2-primitives-DdQHMJRE.js} +57 -40
- package/dist/l2-primitives-DdQHMJRE.js.map +1 -0
- package/dist/l3-atoms/index.js +6 -6
- package/dist/{l3-atoms-Cvu01YHO.js → l3-atoms-BGwlQvjl.js} +150 -187
- package/dist/l3-atoms-BGwlQvjl.js.map +1 -0
- package/dist/l4-molecules/accordion.d.ts.map +1 -1
- package/dist/l4-molecules/combobox-list.d.ts +4 -1
- package/dist/l4-molecules/combobox-list.d.ts.map +1 -1
- package/dist/l4-molecules/combobox.d.ts +5 -0
- package/dist/l4-molecules/combobox.d.ts.map +1 -1
- package/dist/l4-molecules/email-composer-field.d.ts +38 -0
- package/dist/l4-molecules/email-composer-field.d.ts.map +1 -0
- package/dist/l4-molecules/index.d.ts +6 -0
- package/dist/l4-molecules/index.d.ts.map +1 -1
- package/dist/l4-molecules/index.js +4 -4
- package/dist/l4-molecules/tab-group.d.ts +5 -1
- package/dist/l4-molecules/tab-group.d.ts.map +1 -1
- package/dist/l4-molecules/tabs.d.ts +4 -1
- package/dist/l4-molecules/tabs.d.ts.map +1 -1
- package/dist/l4-molecules/toast-provider.d.ts +10 -0
- package/dist/l4-molecules/toast-provider.d.ts.map +1 -0
- package/dist/l4-molecules/toast-store.d.ts +42 -0
- package/dist/l4-molecules/toast-store.d.ts.map +1 -0
- package/dist/{l4-molecules-CSmApFmt.js → l4-molecules-HRbUopGS.js} +1391 -1206
- package/dist/l4-molecules-HRbUopGS.js.map +1 -0
- package/dist/l5-organisms/command-palette-list.d.ts +3 -1
- package/dist/l5-organisms/command-palette-list.d.ts.map +1 -1
- package/dist/l5-organisms/command-palette.d.ts +10 -1
- package/dist/l5-organisms/command-palette.d.ts.map +1 -1
- package/dist/l5-organisms/email-composer.d.ts +118 -0
- package/dist/l5-organisms/email-composer.d.ts.map +1 -0
- package/dist/l5-organisms/email-thread.d.ts +85 -0
- package/dist/l5-organisms/email-thread.d.ts.map +1 -0
- package/dist/l5-organisms/index.d.ts +6 -0
- package/dist/l5-organisms/index.d.ts.map +1 -1
- package/dist/l5-organisms/index.js +2 -2
- package/dist/l5-organisms/markdown-preview.d.ts +6 -0
- package/dist/l5-organisms/markdown-preview.d.ts.map +1 -1
- package/dist/l5-organisms/rich-text-editor.d.ts +56 -0
- package/dist/l5-organisms/rich-text-editor.d.ts.map +1 -0
- package/dist/{l5-organisms-Css3AvsZ.js → l5-organisms-BA62NsFK.js} +2435 -1247
- package/dist/l5-organisms-BA62NsFK.js.map +1 -0
- package/dist/l6-charts/index.js +1 -1
- package/dist/{l6-charts-DPMj1m0E.js → l6-charts-DzRRfX8J.js} +1 -1
- package/dist/{l6-charts-DPMj1m0E.js.map → l6-charts-DzRRfX8J.js.map} +1 -1
- package/dist/l7-patterns/admin-layout.d.ts +6 -0
- package/dist/l7-patterns/admin-layout.d.ts.map +1 -1
- package/dist/l7-patterns/app-shell.d.ts +44 -0
- package/dist/l7-patterns/app-shell.d.ts.map +1 -0
- package/dist/l7-patterns/inbox-layout.d.ts +50 -3
- package/dist/l7-patterns/inbox-layout.d.ts.map +1 -1
- package/dist/l7-patterns/index.d.ts +6 -2
- package/dist/l7-patterns/index.d.ts.map +1 -1
- package/dist/l7-patterns/index.js +2 -2
- package/dist/l7-patterns/panel-group.d.ts +42 -0
- package/dist/l7-patterns/panel-group.d.ts.map +1 -0
- package/dist/l7-patterns/settings-layout.d.ts +6 -1
- package/dist/l7-patterns/settings-layout.d.ts.map +1 -1
- package/dist/l7-patterns/sidebar.d.ts +14 -0
- package/dist/l7-patterns/sidebar.d.ts.map +1 -1
- package/dist/{l7-patterns-8fc4b3eE.js → l7-patterns-Dn7X2pQC.js} +847 -544
- package/dist/l7-patterns-Dn7X2pQC.js.map +1 -0
- package/dist/loading-dots-Dz79qOGY.js +62 -0
- package/dist/loading-dots-Dz79qOGY.js.map +1 -0
- package/dist/sanitize-BF45M9xp.js +33 -0
- package/dist/sanitize-BF45M9xp.js.map +1 -0
- package/dist/{scales-B23Guac-.js → scales-DlVrSOA2.js} +98 -96
- package/dist/scales-DlVrSOA2.js.map +1 -0
- package/dist/spinner-DyrwL4JQ.js +201 -0
- package/dist/spinner-DyrwL4JQ.js.map +1 -0
- package/dist/stepper-DKJuH1ws.js +199 -0
- package/dist/stepper-DKJuH1ws.js.map +1 -0
- package/dist/toast-DTuqMdrj.js +614 -0
- package/dist/toast-DTuqMdrj.js.map +1 -0
- package/dist/tokens.css +5 -0
- package/dist/{use-theme-CONuDdW3.js → use-theme-BI1t0nvJ.js} +59 -34
- package/dist/use-theme-BI1t0nvJ.js.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +3 -2
- package/dist/utils/sanitize.d.ts +7 -0
- package/dist/utils/sanitize.d.ts.map +1 -0
- package/dist/utils/tiptap.d.ts +12 -0
- package/dist/utils/tiptap.d.ts.map +1 -0
- package/package.json +42 -3
- package/dist/l2-primitives-Le0006ck.js.map +0 -1
- package/dist/l3-atoms-Cvu01YHO.js.map +0 -1
- package/dist/l4-molecules-CSmApFmt.js.map +0 -1
- package/dist/l5-organisms-Css3AvsZ.js.map +0 -1
- package/dist/l7-patterns-8fc4b3eE.js.map +0 -1
- package/dist/loading-dots-fB4X_Zh0.js +0 -24
- package/dist/loading-dots-fB4X_Zh0.js.map +0 -1
- package/dist/scales-B23Guac-.js.map +0 -1
- package/dist/spinner-N7UNjdsQ.js +0 -144
- package/dist/spinner-N7UNjdsQ.js.map +0 -1
- package/dist/stepper-DWJfv7TA.js +0 -140
- package/dist/stepper-DWJfv7TA.js.map +0 -1
- package/dist/toast-DN5xANLM.js +0 -442
- package/dist/toast-DN5xANLM.js.map +0 -1
- package/dist/use-theme-CONuDdW3.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"l7-patterns-8fc4b3eE.js","names":[],"sources":["../src/l7-patterns/action-bar.tsx","../src/l7-patterns/admin-layout.tsx","../src/l7-patterns/analytics-dashboard.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/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 'sticky z-10 flex items-center gds-pad-x-lg gds-pad-y',\n position === 'bottom' ? 'bottom-0 border-t' : 'top-0 border-b',\n justifyMap[justify],\n glass === true\n ? cx(glassClass(glass), 'border-white/10 bg-bg/60')\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\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype AdminLayoutProps = {\n sidebar: ReactNode\n topbar?: ReactNode\n children: ReactNode\n sidebarWidth?: number\n className?: string\n}\n\nconst AdminLayout = forwardRef<HTMLDivElement, AdminLayoutProps>(\n function AdminLayout({ sidebar, topbar, children, sidebarWidth = 240, className }, ref) {\n return (\n <div ref={ref} className={cx('flex h-screen min-h-0 bg-bg', className)} data-component=\"admin-layout\">\n <aside className=\"shrink-0 overflow-y-auto border-r border-border bg-surface\" style={{ width: sidebarWidth }}>\n {sidebar}\n </aside>\n <div className=\"flex flex-1 flex-col min-w-0\">\n {topbar !== undefined && (\n <header className=\"sticky top-0 z-10 shrink-0 border-b border-border bg-surface/80 backdrop-blur-sm\">\n {topbar}\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('flex flex-col gds-gap', className)}\n data-component=\"analytics-dashboard\"\n ref={ref}\n >\n {metrics !== undefined && (\n <section className=\"flex flex-wrap gds-gap\" data-slot=\"metrics\">{metrics}</section>\n )}\n {charts !== undefined && (\n <section className=\"flex flex-col gds-gap\" data-slot=\"charts\">{charts}</section>\n )}\n {data !== undefined && (\n <section className=\"flex flex-col gds-gap\" data-slot=\"data\">{data}</section>\n )}\n </div>\n )\n },\n)\n\nexport { AnalyticsDashboard }\nexport type { AnalyticsDashboardProps }\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({ children, columns = 4, gap = 'default', className }, ref) {\n return (\n <div\n ref={ref}\n className={cx('grid auto-rows-[minmax(120px,auto)]', colClass(columns), gapMap[gap], className)}\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({ className, events = [], month, onDateClick, year, ...props }, ref) {\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 className=\"py-1 text-center text-xs font-medium text-fg-muted\" key={d}>{d}</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 && 'cursor-pointer text-fg hover:bg-accent/10',\n day === null && 'pointer-events-none',\n )}\n key={i}\n onClick={() => { if (day !== null && onDateClick !== undefined) onDateClick(day) }}\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={{ backgroundColor: ev.color ?? 'var(--color-accent)' }}\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 'overflow-hidden gds-radius-card border border-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-b border-border bg-bg-tertiary/30\">\n <th className=\"px-4 py-3 text-left text-xs font-medium text-fg-muted\">Feature</th>\n {plans.map((plan, i) => (\n <th\n key={plan.name}\n className={cx(\n 'px-4 py-3 text-center text-xs font-semibold text-fg',\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 key={feature} className={cx(fi < features.length - 1 && 'border-b border-border/50')}>\n <td className=\"px-4 py-2.5 text-xs text-fg\">{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 className=\"mx-auto text-success\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" data-icon=\"check\">\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n ) : (\n <svg className=\"mx-auto text-fg-muted/40\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" data-icon=\"dash\">\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\n </svg>\n )\n ) : (\n <span className=\"text-xs text-fg\">{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<HTMLDivElement, CompositionPatternProps>(\n function CompositionPattern(\n { header, sidebar, content, footer, sidebarPosition = 'left', sidebarWidth = 240, glass, className },\n ref,\n ) {\n const width = typeof sidebarWidth === 'number' ? `${sidebarWidth}px` : sidebarWidth\n const isRight = sidebarPosition === 'right'\n\n const sidebarEl = sidebar !== undefined ? (\n <div\n className={cx(\n 'shrink-0 overflow-auto',\n isRight ? 'border-l border-border' : 'border-r border-border',\n )}\n style={{ width }}\n >\n {sidebar}\n </div>\n ) : null\n\n return (\n <div\n ref={ref}\n className={cx('gds-ctx flex h-full flex-col', glassClass(glass), className)}\n data-component=\"composition-pattern\"\n >\n {header !== undefined && (\n <div className=\"shrink-0 border-b border-border\">{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=\"shrink-0 border-t border-border\">{footer}</div>\n )}\n </div>\n )\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({ title, description, actions, variant = 'default', glass, className }, ref) {\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 className={cx('text-xl font-bold', variant === 'default' && 'text-fg')}>{title}</h2>\n {description !== undefined && (\n <p className={cx('mt-2 gds-text-body', variant === 'default' ? 'text-fg-muted' : 'opacity-80')}>\n {description}\n </p>\n )}\n <div className=\"mt-4 flex items-center justify-center gap-3\">{actions}</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({ sidebar, header, children, sidebarWidth = 240, className }, ref) {\n return (\n <div ref={ref} className={cx('flex h-full min-h-0 bg-bg', className)} data-component=\"dashboard-layout\">\n <aside className=\"shrink-0 overflow-y-auto border-r border-border bg-surface\" style={{ width: sidebarWidth }}>\n {sidebar}\n </aside>\n <div className=\"flex flex-1 flex-col min-w-0\">\n {header !== undefined && (\n <header className=\"sticky top-0 z-10 shrink-0 border-b border-border bg-surface/80 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<React.HTMLAttributes<HTMLDivElement>, 'title'> & {\n formats: string[]\n onExport: (format: string, dateRange?: DateRange) => void\n title?: string\n}\n\nconst DataExportCard = forwardRef<HTMLDivElement, DataExportCardProps>(\n function DataExportCard({ formats, onExport, title = 'Export Data', className, ...props }, ref) {\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 ref={ref} className={cx('gds-ctx rounded-lg border border-border bg-surface gds-pad gds-shadow', className)} data-component=\"data-export-card\" {...props}>\n <h3 className=\"select-none font-medium gds-heading text-fg mb-3\">{title}</h3>\n <div className=\"flex flex-col gap-3\">\n <div className=\"flex flex-col gap-1\">\n <label className=\"select-none text-xs text-fg-muted\">Format</label>\n <select value={format} onChange={(e) => setFormat(e.target.value)} className=\"rounded border border-border bg-bg px-2 py-1.5 gds-text-body text-fg\">\n {formats.map((f) => <option key={f} value={f}>{f}</option>)}\n </select>\n </div>\n <div className=\"flex gap-2\">\n <div className=\"flex flex-1 flex-col gap-1\">\n <label className=\"select-none text-xs text-fg-muted\">From</label>\n <input type=\"date\" value={from} onChange={(e) => setFrom(e.target.value)} className=\"rounded border border-border bg-bg px-2 py-1.5 gds-text-body text-fg\" />\n </div>\n <div className=\"flex flex-1 flex-col gap-1\">\n <label className=\"select-none text-xs text-fg-muted\">To</label>\n <input type=\"date\" value={to} onChange={(e) => setTo(e.target.value)} className=\"rounded border border-border bg-bg px-2 py-1.5 gds-text-body text-fg\" />\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({ activeTab, children, className, onTabChange, statusBar, tabs, ...props }, ref) {\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=\"flex items-center gap-1 border-b border-border px-2\">\n {tabs.map((tab) => (\n <button\n key={tab.id}\n className={cx(\n 'px-3 py-2 gds-text-label font-medium transition-colors',\n tab.id === activeTab ? 'border-b-2 border-accent text-accent' : '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-b border-border 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('flex flex-col items-center justify-center py-12', className)}\n data-component=\"empty-state\"\n >\n {icon !== undefined && (\n <div className=\"mb-3 flex h-12 w-12 items-center justify-center text-fg-muted/20\">\n {icon}\n </div>\n )}\n <p className=\"gds-text-body font-medium text-fg\">{title}</p>\n {description !== undefined && (\n <p className=\"mt-1 gds-text-body text-fg-muted\">{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>(\n function FAQ({ items, title = 'FAQ', glass, className }, ref) {\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-ctx gds-radius-card border gds-pad-x-lg gds-pad-y-lg',\n glass === true ? cx(glassClass(glass), 'border-white/10 bg-bg/60') : 'border-border bg-surface',\n className,\n )}\n data-component=\"faq\"\n >\n <h2 className=\"gds-heading font-semibold text-fg mb-4\">{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)\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({ icon, title, description, action, glass, className }, ref) {\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-ctx gds-radius-card border gds-pad-x-lg gds-pad-y-lg flex flex-col',\n glass === true\n ? cx(glassClass(glass), 'border-white/10 bg-bg/60')\n : 'border-border bg-surface',\n className,\n )}\n data-component=\"feature-card\"\n >\n {icon !== undefined && (\n <div className=\"mb-3 text-accent\">{icon}</div>\n )}\n <p className=\"font-semibold text-fg\">{title}</p>\n {description !== undefined && (\n <p className=\"mt-1 gds-text-body text-fg-muted\">{description}</p>\n )}\n {action !== undefined && (\n <div className=\"mt-auto pt-4\">{action}</div>\n )}\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>(\n function Footer({ columns, copyright, logo, glass, className }, ref) {\n return (\n <footer\n ref={ref}\n className={cx(\n 'w-full py-10',\n glass && glassClass(true),\n className,\n )}\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-sm font-semibold text-fg\">{col.title}</h3>\n <ul className=\"mt-3 space-y-2\">\n {col.links.map((link) => (\n <li key={link.href}>\n <a href={link.href} className=\"text-sm text-fg-muted hover:text-fg\">{link.label}</a>\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n )}\n <div className={cx('flex items-center gap-3 border-t border-border pt-6', columns !== undefined && columns.length > 0 && 'mt-8')}>\n {logo !== undefined && <div>{logo}</div>}\n {copyright !== undefined && (\n <p className=\"text-xs text-fg-muted\">{copyright}</p>\n )}\n </div>\n </footer>\n )\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({ title, description, children, actions, className }, ref) {\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 font-semibold text-fg\">{title}</h2>\n )}\n {description !== undefined && (\n <p className=\"mt-0.5 gds-text-body text-fg-muted\">{description}</p>\n )}\n </div>\n )}\n <div className=\"flex flex-col gds-gap-lg\">{children}</div>\n {actions !== undefined && (\n <div className=\"mt-6 flex justify-end gds-gap-sm\">{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({ title, description, sections, actions, glass, className }, ref) {\n return (\n <div\n ref={ref}\n className={cx('gds-ctx flex flex-col gds-pad gds-radius-card', glassClass(glass), className)}\n data-component=\"form-pattern\"\n >\n {(title !== undefined || description !== undefined) && (\n <div className=\"mb-4\">\n {title !== undefined && (\n <h2 className=\"gds-heading font-semibold text-fg\">{title}</h2>\n )}\n {description !== undefined && (\n <p className=\"mt-1 gds-text-body text-fg-muted\">{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=\"flex flex-col gds-gap\">\n <h3 className=\"gds-text-body font-medium text-fg\">{section.title}</h3>\n {section.fields}\n </div>\n </div>\n ))}\n {actions !== undefined && (\n <>\n <Separator className=\"my-4\" />\n <div className=\"flex justify-end gds-gap-sm\">{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({ children, blur = 'default', padding = 'default', className }, ref) {\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({ children, columns = { sm: 1, md: 2, lg: 3 }, gap = 'default', className }, ref) {\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>(\n function Hero({ title, subtitle, actions, media, align = 'center', glass, className }, ref) {\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-4xl font-bold text-fg\">{title}</h1>\n {subtitle !== undefined && (\n <p className=\"mt-3 text-lg text-fg-muted\">{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)\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({ className, departments, onboarding, stats, ...props }, ref) {\n return (\n <div\n className={cx('gds-ctx flex flex-col gds-gap', className)}\n data-component=\"hr-dashboard\"\n ref={ref}\n {...props}\n >\n {stats !== undefined && <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-3\">{stats}</div>}\n <div className=\"grid grid-cols-1 gap-4 lg:grid-cols-2\">\n {onboarding !== undefined && (\n <div className=\"gds-radius-card border border-border bg-surface gds-pad\">{onboarding}</div>\n )}\n {departments !== undefined && (\n <div className=\"gds-radius-card border border-border bg-surface gds-pad\">{departments}</div>\n )}\n </div>\n </div>\n )\n },\n)\n\nexport type { HRDashboardProps }\n","// inbox-layout — email/messaging split pane with list and detail\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type InboxLayoutProps = {\n list: ReactNode\n detail: ReactNode\n listWidth?: number\n className?: string\n}\n\nexport const InboxLayout = forwardRef<HTMLDivElement, InboxLayoutProps>(\n function InboxLayout({ list, detail, listWidth = 360, className }, ref) {\n return (\n <div\n ref={ref}\n className={cx('flex h-full overflow-hidden', className)}\n data-component=\"inbox-layout\"\n >\n <div\n className=\"shrink-0 overflow-y-auto border-r border-border\"\n style={{ width: listWidth }}\n >\n {list}\n </div>\n <div className=\"min-w-0 flex-1 overflow-y-auto\">\n {detail}\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({ title, value, change, changeLabel, icon, glass, className }, ref) {\n const isPositive = change !== undefined && change >= 0\n\n return (\n <div\n ref={ref}\n className={cx(\n 'relative gds-radius-card border gds-pad-x-lg gds-pad-y-lg',\n glass === true\n ? cx(glassClass(glass), 'border-white/10 bg-bg/60')\n : 'border-border bg-surface',\n className,\n )}\n data-component=\"metric-card\"\n >\n {icon !== undefined && (\n <div className=\"absolute right-4 top-4 text-fg-muted/40\">{icon}</div>\n )}\n <p className=\"gds-text-body text-fg-muted\">{title}</p>\n <p className=\"mt-1 text-2xl font-bold text-fg\">{value}</p>\n {change !== undefined && (\n <p\n className={cx(\n 'mt-1 gds-text-body',\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({ title, metrics, chart, table, glass, className }, ref) {\n return (\n <div\n ref={ref}\n className={cx('gds-ctx flex flex-col gds-gap', className)}\n data-component=\"kpi-dashboard\"\n >\n {title !== undefined && (\n <h2 className=\"gds-heading font-semibold text-fg\">{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 border gds-pad',\n glass === true\n ? cx(glassClass(glass), 'border-white/10 bg-bg/60')\n : 'border-border bg-surface',\n )}\n >\n {chart}\n </div>\n )}\n {table !== undefined && (\n <div\n className={cx(\n 'gds-radius-card border gds-pad',\n glass === true\n ? cx(glassClass(glass), 'border-white/10 bg-bg/60')\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({ message, glass, className }: Omit<LoadingStatesProps, 'variant'>) {\n return (\n <div className={cx('flex min-h-[200px] flex-col items-center justify-center gap-3', glassClass(glass), className)}>\n <Spinner size=\"lg\" />\n {message !== undefined && <p className=\"gds-text-body text-fg-muted\">{message}</p>}\n </div>\n )\n}\n\nfunction InlineLoading({ message, className }: Omit<LoadingStatesProps, 'variant'>) {\n return (\n <div className={cx('inline-flex items-center gap-2', className)}>\n <Spinner size=\"sm\" />\n {message !== undefined && <span className=\"gds-text-body text-fg-muted\">{message}</span>}\n </div>\n )\n}\n\nfunction ButtonLoading({ message, className }: Omit<LoadingStatesProps, 'variant'>) {\n return (\n <div className={className}>\n <Button loading disabled>{message ?? 'Loading...'}</Button>\n </div>\n )\n}\n\nfunction OverlayLoading({ message, glass, className }: Omit<LoadingStatesProps, 'variant'>) {\n return (\n <div 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 <Spinner size=\"lg\" />\n {message !== undefined && <p className=\"gds-text-body text-fg-muted\">{message}</p>}\n </div>\n )\n}\n\nconst variantMap: Record<LoadingStatesVariant, (props: Omit<LoadingStatesProps, 'variant'>) => ReactNode> = {\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<React.HTMLAttributes<HTMLFormElement>, 'onSubmit'> & {\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 { onSubmit, title = 'Sign in', error, loading = false, glass = false, className, ...props },\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 'flex w-full max-w-sm flex-col gap-4 rounded-lg border border-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-center font-semibold text-fg gds-heading\">{title}</h2>\n {error !== undefined && (\n <div className=\"rounded-md bg-danger/10 px-3 py-2 text-xs text-danger\">{error}</div>\n )}\n <div className=\"flex flex-col gap-1\">\n <Label>Email</Label>\n <Input type=\"email\" value={email} onChange={(e) => setEmail(e.target.value)} placeholder=\"you@example.com\" required />\n </div>\n <div className=\"flex flex-col gap-1\">\n <Label>Password</Label>\n <Input type=\"password\" value={password} onChange={(e) => setPassword(e.target.value)} placeholder=\"••••••••\" required />\n </div>\n <Checkbox checked={remember} onChange={setRemember} label=\"Remember me\" />\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((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 }, [onSend])\n\n const inputCls = '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 ref={toRef} type=\"email\" placeholder=\"To\" defaultValue={defaultTo ?? ''} className={inputCls} />\n <input ref={subjectRef} type=\"text\" placeholder=\"Subject\" className={inputCls} />\n <textarea ref={bodyRef} placeholder=\"Body\" rows={6} className={cx(inputCls, 'resize-none')} />\n <div className=\"flex justify-end\">\n <button\n type=\"submit\"\n className=\"rounded-md bg-accent px-4 py-2 gds-text-body font-medium text-accent-fg hover:bg-accent/90 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 (\n <div style={itemStyle}>\n {child}\n </div>\n )\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 { aspectRatio = 1, children, className, columns = { sm: 2, md: 3, lg: 4 }, gap = 'default' },\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 ratio={aspectRatio} className=\"overflow-hidden rounded-lg\">\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), 'border-white/10 bg-bg/60')\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=\"mb-3 gds-text-body font-semibold text-fg\">{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 'grid gds-gap',\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>(\n function NavBar({ logo, links, actions, sticky = true, glass = true, className }, ref) {\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('text-sm transition-colors', link.active ? 'text-accent font-medium' : 'text-fg-muted hover:text-fg')}\n >\n {link.label}\n </a>\n ))}\n </div>\n )}\n {actions !== undefined && <div className=\"flex items-center gap-3\">{actions}</div>}\n </nav>\n )\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<HTMLDivElement, NotificationListProps>(\n function NotificationList({ className, notifications, onRead, onReadAll, ...props }, ref) {\n return (\n <div\n className={cx('gds-ctx gds-radius-card border border-border bg-surface', className)}\n data-component=\"notification-list\"\n ref={ref}\n {...props}\n >\n <div className=\"flex items-center justify-between border-b border-border px-4 py-2.5\">\n <span className=\"text-sm font-semibold text-fg\">Notifications</span>\n {onReadAll !== undefined && (\n <button className=\"text-xs text-accent hover:underline\" onClick={onReadAll} type=\"button\">\n Mark all read\n </button>\n )}\n </div>\n {notifications.length === 0 ? (\n <div className=\"px-4 py-6 text-center text-xs text-fg-muted\">No notifications</div>\n ) : (\n <div className=\"divide-y divide-border\">\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-2 border-l-accent',\n onRead !== undefined && 'cursor-pointer hover:bg-bg-tertiary',\n )}\n onClick={onRead !== undefined ? () => onRead(n.id) : undefined}\n >\n <div className=\"min-w-0 flex-1\">\n <div className=\"text-xs font-medium text-fg\">{n.title}</div>\n {n.message !== undefined && (\n <div className=\"mt-0.5 text-xs text-fg-muted\">{n.message}</div>\n )}\n <div className=\"mt-1 text-[10px] text-fg-muted\">{n.timestamp}</div>\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n )\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({ className, steps, title = 'Getting Started', ...props }, ref) {\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('gds-ctx rounded-lg border border-border bg-surface gds-pad', className)}\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 font-semibold text-fg\">{title}</h3>\n <span className=\"gds-text-label text-fg-muted\">{done}/{steps.length}</span>\n </div>\n <div className=\"mb-4 h-1.5 w-full overflow-hidden rounded-full bg-border\">\n <div\n className=\"h-full rounded-full bg-accent transition-all\"\n style={{ width: `${pct}%` }}\n />\n </div>\n <ul className=\"flex flex-col gds-gap\">\n {steps.map((step, i) => (\n <li className=\"flex items-center justify-between gds-gap\" key={i}>\n <div className=\"flex items-center gds-gap-sm\">\n <span className={cx(\n 'flex h-5 w-5 shrink-0 items-center justify-center rounded-full text-xs',\n step.completed ? 'bg-success text-white' : 'border border-border text-fg-muted',\n )}>\n {step.completed ? '\\u2713' : i + 1}\n </span>\n <span className={cx('text-sm', step.completed ? 'text-fg-muted line-through' : 'text-fg')}>\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 width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\">\n <path d=\"M4.5 3l3 3-3 3\" />\n </svg>\n)\n\nexport const PageHeader = forwardRef<HTMLDivElement, PageHeaderProps>(\n function PageHeader({ actions, breadcrumb, className, subtitle, title }, ref) {\n return (\n <div ref={ref} className={cx('flex flex-col gds-gap-sm', className)} data-component=\"page-header\">\n {breadcrumb !== undefined && breadcrumb.length > 0 && (\n <nav aria-label=\"Breadcrumb\">\n <ol className=\"flex items-center gds-gap-sm text-[11px] text-fg-muted\">\n {breadcrumb.map((item, i) => (\n <li key={i} className=\"flex items-center gds-gap-sm\">\n {i > 0 && <span className=\"text-fg-muted/50\" aria-hidden=\"true\">{separator}</span>}\n {item.href !== undefined ? (\n <a href={item.href} className=\"transition-colors hover:text-fg\">{item.label}</a>\n ) : (\n <span>{item.label}</span>\n )}\n </li>\n ))}\n </ol>\n </nav>\n )}\n <div className=\"flex items-center justify-between gds-gap\">\n <div className=\"min-w-0\">\n <h1 className=\"gds-heading font-semibold text-fg\">{title}</h1>\n {subtitle !== undefined && (\n <p className=\"mt-0.5 gds-text-body text-fg-muted\">{subtitle}</p>\n )}\n </div>\n {actions !== undefined && (\n <div className=\"flex shrink-0 items-center gds-gap-sm\">{actions}</div>\n )}\n </div>\n </div>\n )\n },\n)\n\nexport type { PageHeaderBreadcrumbItem, PageHeaderProps }\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<HTMLDivElement, PayrollDashboardProps>(\n function PayrollDashboard({ chart, className, metrics, transactions, ...props }, ref) {\n return (\n <div\n className={cx('gds-ctx flex flex-col gds-gap', className)}\n data-component=\"payroll-dashboard\"\n ref={ref}\n {...props}\n >\n {metrics !== undefined && <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-3\">{metrics}</div>}\n <div className=\"grid grid-cols-1 gap-4 lg:grid-cols-2\">\n {chart !== undefined && (\n <div className=\"gds-radius-card border border-border bg-surface gds-pad\">{chart}</div>\n )}\n {transactions !== undefined && (\n <div className=\"gds-radius-card border border-border bg-surface gds-pad\">{transactions}</div>\n )}\n </div>\n </div>\n )\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 { name, price, period = '/month', features, action, highlighted, glass, className },\n ref,\n ) {\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-ctx gds-radius-card border gds-pad-x-lg gds-pad-y-lg flex flex-col',\n highlighted === true && 'border-accent ring-1 ring-accent',\n highlighted !== true && (\n glass === true\n ? cx(glassClass(glass), 'border-white/10 bg-bg/60')\n : 'border-border bg-surface'\n ),\n glass === true && highlighted === true && 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=\"font-semibold text-fg\">{name}</p>\n <div className=\"mt-2 flex items-baseline gap-1\">\n <span className=\"text-3xl font-bold text-fg\">{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 key={feature} className=\"flex items-center gap-2 gds-text-body text-fg-muted\">\n <svg className=\"h-4 w-4 shrink-0 text-success\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M3 8l3 3 7-7\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n {feature}\n </li>\n ))}\n </ul>\n )}\n {action !== undefined && (\n <div className=\"mt-auto pt-4\">{action}</div>\n )}\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({ actions, avatar, className, glass, name, role, stats }, ref) {\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-ctx flex flex-col items-center gds-pad gds-radius-card border',\n glass === true\n ? cx(glassClass(glass), 'border-white/10 bg-bg/60')\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=\"mt-3 text-sm font-semibold text-fg\">{name}</p>\n {role !== undefined && (\n <p className=\"mt-0.5 text-xs text-fg-muted\">{role}</p>\n )}\n {stats !== undefined && stats.length > 0 && (\n <div className=\"mt-3 flex w-full justify-center gds-gap\">\n {stats.map((stat) => (\n <div key={stat.label} className=\"flex flex-col items-center\">\n <span className=\"text-sm font-bold text-fg\">{stat.value}</span>\n <span className=\"text-[10px] text-fg-muted\">{stat.label}</span>\n </div>\n ))}\n </div>\n )}\n {actions !== undefined && (\n <div className=\"mt-3 flex w-full justify-center gds-gap\">{actions}</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({ activity, className, progress, tasks, team }, ref) {\n return (\n <div className={cx('grid grid-cols-2 gds-gap', className)} data-component=\"project-dashboard\" ref={ref}>\n {progress !== undefined && <section data-slot=\"progress\">{progress}</section>}\n {team !== undefined && <section data-slot=\"team\">{team}</section>}\n {activity !== undefined && <section data-slot=\"activity\">{activity}</section>}\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<HTMLDivElement, ResponsiveContainerProps>(\n function ResponsiveContainer({ mobile, tablet, desktop, className }, ref) {\n const tabletContent = tablet ?? mobile\n\n return (\n <div ref={ref} className={cx(className)} data-component=\"responsive-container\">\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)\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> & { servers: ServerInfo[] }\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 className={cx('grid gap-3 sm:grid-cols-2 lg:grid-cols-3', className)} data-component=\"server-overview\" ref={ref} {...props}>\n {servers.map((s) => (\n <div key={s.name} className=\"rounded-lg border border-border bg-surface p-3 gds-ctx\">\n <div className=\"flex items-center justify-between mb-2\">\n <span className=\"gds-text-label font-medium text-fg\">{s.name}</span>\n <span className=\"inline-flex items-center gap-1.5\">\n <span className={cx('h-2 w-2 rounded-full', s.status === 'online' ? 'bg-success' : 'bg-danger')} />\n <span className=\"text-xs text-fg-muted\">{s.status}</span>\n </span>\n </div>\n <div className=\"text-xs text-fg-muted mb-2\">{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 { ReactNode } from 'react'\nimport { 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 className?: string\n defaultSection?: string\n sections: SettingsSection[]\n}\n\nexport function SettingsLayout({ className, defaultSection, sections }: SettingsLayoutProps) {\n const [activeId, setActiveId] = useState(defaultSection ?? sections[0]?.id ?? '')\n const activeSection = sections.find((s) => s.id === activeId)\n\n return (\n <div\n className={cx('flex gap-6', className)}\n data-component=\"settings-layout\"\n >\n <nav className=\"w-48 shrink-0\">\n <ul className=\"flex flex-col gap-0.5\" role=\"list\">\n {sections.map((section) => (\n <li key={section.id}>\n <button\n type=\"button\"\n className={cx(\n 'w-full rounded-md px-3 py-2 text-left gds-text-body transition-colors',\n section.id === activeId\n ? 'bg-accent/10 font-medium text-accent'\n : 'text-fg-muted hover:bg-bg-tertiary hover:text-fg',\n )}\n onClick={() => setActiveId(section.id)}\n >\n {section.label}\n </button>\n </li>\n ))}\n </ul>\n </nav>\n <div className=\"min-w-0 flex-1\">\n {activeSection !== undefined ? activeSection.content : null}\n </div>\n </div>\n )\n}\n\nexport type { SettingsLayoutProps, SettingsSection }\n","// sidebar — collapsible navigation panel\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\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}\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 },\n ref,\n ) {\n const currentWidth = collapsed ? collapsedWidth : width\n\n return (\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), 'border-white/10 bg-bg/60')\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-hidden\">{children}</div>\n {onCollapse !== undefined && (\n <button\n className=\"flex h-10 items-center justify-center border-t border-border/50 text-fg-muted hover:text-fg transition-colors\"\n type=\"button\"\n onClick={() => onCollapse(!collapsed)}\n >\n <svg\n className={cx('transition-transform duration-200', collapsed && 'rotate-180', position === 'right' && 'rotate-180', collapsed && position === 'right' && 'rotate-0')}\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 )\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=\"flex flex-col gds-gap gds-ctx gds-pad gds-radius-card\">\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=\"flex flex-col items-center gds-gap gds-ctx gds-pad\">\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 ref={ref} className={cx('gds-ctx gds-radius-card', glassClass, className)} data-component=\"skeleton-pattern\" data-variant=\"card\">\n <CardSkeleton />\n </div>\n )\n }\n\n if (variant === 'list') {\n return (\n <div ref={ref} className={cx('flex flex-col gds-gap gds-ctx gds-pad', glassClass, className)} data-component=\"skeleton-pattern\" data-variant=\"list\">\n {Array.from({ length: count }, (_, i) => (\n <ListRow key={i} />\n ))}\n </div>\n )\n }\n\n if (variant === 'profile') {\n return (\n <div ref={ref} className={cx(glassClass, className)} data-component=\"skeleton-pattern\" data-variant=\"profile\">\n <ProfileSkeleton />\n </div>\n )\n }\n\n return (\n <div ref={ref} className={cx('gds-ctx gds-pad', glassClass, className)} data-component=\"skeleton-pattern\" data-variant=\"table\">\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 className=\"h-5 w-5 animate-spin text-accent\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\" />\n <path className=\"opacity-75\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z\" fill=\"currentColor\" />\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 'fixed inset-0 z-[9999] flex flex-col items-center justify-center bg-bg 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 && <h1 className=\"mb-2 text-lg font-semibold text-fg\">{title}</h1>}\n {message !== undefined && <p className=\"mb-8 text-sm text-fg-muted\">{message}</p>}\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({ className, defaultSplit = 50, left, minLeft = 20, minRight = 20, right, ...props }, ref) {\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 (containerRef as React.MutableRefObject<HTMLDivElement | null>).current = el\n if (typeof ref === 'function') ref(el)\n else if (ref !== null && ref !== undefined) (ref as React.MutableRefObject<HTMLDivElement | null>).current = el\n }}\n {...props}\n >\n <div className=\"overflow-auto\" style={{ width: `${split}%` }}>{left}</div>\n <ResizeHandle orientation=\"vertical\" onResize={handleResize} />\n <div className=\"overflow-auto\" style={{ width: `${100 - split}%` }}>{right}</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 = { down: 'text-danger', neutral: 'text-fg-muted', up: 'text-success' }\n\n// inline arrow SVGs\nfunction ArrowUpIcon() { return <svg className=\"h-3 w-3\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" viewBox=\"0 0 24 24\"><path d=\"M12 19V5M5 12l7-7 7 7\" strokeLinecap=\"round\" strokeLinejoin=\"round\" /></svg> }\nfunction ArrowDownIcon() { return <svg className=\"h-3 w-3\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" viewBox=\"0 0 24 24\"><path d=\"M12 5v14M19 12l-7 7-7-7\" strokeLinecap=\"round\" strokeLinejoin=\"round\" /></svg> }\nfunction MinusIcon() { return <svg className=\"h-3 w-3\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" viewBox=\"0 0 24 24\"><path d=\"M5 12h14\" strokeLinecap=\"round\" /></svg> }\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.map((v, i) => `${i === 0 ? 'M' : 'L'}${(i * step).toFixed(1)},${(h - ((v - min) / range) * h).toFixed(1)}`).join(' ')\n}\n\nfunction useAnimatedValue(target: number, enabled: boolean, duration: number = 500): number {\n const [display, setDisplay] = useState(target)\n const prevRef = useRef(target)\n const rafRef = useRef<number>(0)\n\n useEffect(() => {\n if (!enabled) { setDisplay(target); return }\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) { rafRef.current = requestAnimationFrame(animate) } else { setDisplay(target) }\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>(\n function Stat({ animated = false, change, changeType = 'neutral', className, description, footer, glass = false, icon, label, motion: motionProp, pulse = false, size = 'default', sparkData, trend, unit, value }, ref) {\n const ChangeIcon = changeIcons[changeType]\n const trendDir = trend !== undefined ? (trend > 0 ? 'up' : trend < 0 ? 'down' : 'neutral') : null\n const trendColor = trendDir !== null ? changeColors[trendDir] : null\n const sparkColor = trendDir === 'up' ? 'var(--gds-success)' : trendDir === 'down' ? 'var(--gds-danger)' : 'var(--gds-fg-muted)'\n\n const path = useMemo(() => sparkData !== undefined && sparkData.length >= 2 ? sparklinePath(sparkData, 80, 24) : null, [sparkData])\n\n const numericValue = typeof value === 'number' ? value : null\n const animatedValue = useAnimatedValue(numericValue ?? 0, animated && numericValue !== null)\n const displayValue = animated && numericValue !== null ? (Number.isInteger(animatedValue) ? animatedValue.toLocaleString() : animatedValue.toLocaleString(undefined, { maximumFractionDigits: 2 })) : value\n\n const motionCls = motionProp === 'fade' ? 'animate-fade-in' : motionProp === 'slide-up' ? 'animate-slide-up' : ''\n\n return (\n <div\n className={cx('select-none', glass ? 'rounded-lg border border-white/10 bg-white/5 p-4 shadow-lg backdrop-blur-xl' : 'space-y-1', pulse && 'animate-pulse', motionCls, className)}\n data-component=\"stat\"\n ref={ref}\n >\n <div className=\"flex items-start justify-between\">\n <div className=\"text-xs text-fg-muted\">{label}</div>\n {icon !== undefined && <span className=\"h-4 w-4 text-fg-muted/30\">{icon}</span>}\n </div>\n\n <div className=\"flex items-end gap-3\">\n <div className={cx('font-bold text-fg tabular-nums', valueSizes[size])}>\n {displayValue}\n {unit !== undefined && <span className=\"ml-1 text-xs font-normal text-fg-muted\">{unit}</span>}\n </div>\n {trend !== undefined && trendDir !== null && (\n <div className={cx('mb-0.5 flex items-center gap-0.5 text-xs font-medium', trendColor)}>\n {trendDir === 'up' && <ArrowUpIcon />}\n {trendDir === 'down' && <ArrowDownIcon />}\n {trendDir === 'neutral' && <MinusIcon />}\n <span>{trendDir === 'neutral' ? '0%' : `${trend > 0 ? '+' : ''}${trend}%`}</span>\n </div>\n )}\n </div>\n\n {change !== undefined && trend === undefined && (\n <div className={cx('inline-flex items-center gap-0.5 text-xs font-medium', changeColors[changeType])}>\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 d={path} fill=\"none\" stroke={sparkColor} strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.5} />\n </svg>\n )}\n\n {description !== undefined && <div className=\"text-[11px] text-fg-muted\">{description}</div>}\n {footer !== undefined && <div className=\"mt-3 border-t border-border/20 pt-2 text-[10px] text-fg-muted/50\">{footer}</div>}\n </div>\n )\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('grid gds-gap-lg', 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 fill=\"none\" points={points} stroke=\"var(--gds-accent)\" strokeWidth={1.5} />\n </svg>\n )\n}\n\nexport const StatsCard = forwardRef<HTMLDivElement, StatsCardProps>(\n function StatsCard({ icon, label, value, trend, sparkData, glass, className }, ref) {\n const isPositive = trend !== undefined && trend >= 0\n\n return (\n <div\n ref={ref}\n className={cx(\n 'relative gds-ctx gds-radius-card border gds-pad-x-lg gds-pad-y-lg',\n glass === true\n ? cx(glassClass(glass), 'border-white/10 bg-bg/60')\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 && <div className=\"text-fg-muted/50\">{icon}</div>}\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 ? 'bg-success/10 text-success' : 'bg-danger/10 text-danger',\n )}\n >\n {isPositive ? '\\u2191' : '\\u2193'}\n {isPositive ? '+' : ''}{trend}%\n </span>\n )}\n </div>\n <p className=\"mt-1 text-2xl font-bold text-fg\">{value}</p>\n {sparkData !== undefined && sparkData.length >= 2 && <MiniSparkline data={sparkData} />}\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({ code, title, description, action, secondaryAction, illustration, className }, ref) {\n return (\n <div\n ref={ref}\n className={cx('flex min-h-[60vh] flex-col items-center justify-center gap-4 text-center', className)}\n data-component=\"status-page\"\n >\n {illustration !== undefined && <div className=\"mb-2\">{illustration}</div>}\n {code !== undefined && (\n <p className=\"text-6xl font-bold text-fg-muted/10\">{code}</p>\n )}\n <h1 className=\"text-xl font-semibold text-fg\">{title}</h1>\n {description !== undefined && (\n <p className=\"max-w-md text-fg-muted\">{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 { steps, onComplete, completeLabel = 'Complete', glass = false, className, ...props },\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 'flex flex-col rounded-lg border border-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\">\n {steps[current]?.content}\n </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({ children, className, glass = true, threshold = 0, ...props }, ref) {\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 && 'shadow-md bg-bg/80',\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({ quote, author, role, avatar, rating, glass, className }, ref) {\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-ctx gds-radius-card border gds-pad-x-lg gds-pad-y-lg',\n glass === true ? cx(glassClass(glass), 'border-white/10 bg-bg/60') : 'border-border bg-surface',\n className,\n )}\n data-component=\"testimonial\"\n >\n <svg className=\"mb-3 h-6 w-6 text-fg-muted opacity-30\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\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 italic text-fg\">{quote}</p>\n {rating !== undefined && (\n <div className=\"mt-3 flex gap-0.5\">\n {Array.from({ length: 5 }, (_, i) => (\n <svg key={i} className={cx('h-4 w-4', i < rating ? 'text-warning' : 'text-fg-muted/30')} viewBox=\"0 0 20 20\" fill=\"currentColor\">\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 src={avatar} alt={author} className=\"h-10 w-10 rounded-full object-cover\" />\n )}\n <div>\n <p className=\"text-sm font-medium text-fg\">{author}</p>\n {role !== undefined && <p className=\"text-xs text-fg-muted\">{role}</p>}\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 data-component=\"timeline-steps\" className={cx('flex items-start', className)}>\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' && '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 width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"3\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\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-xs font-medium text-fg\">{step.label}</div>\n {step.description !== undefined && (\n <div className=\"mt-0.5 text-[10px] text-fg-muted\">{step.description}</div>\n )}\n </div>\n </div>\n {i < steps.length - 1 && (\n <div\n className={cx(\n 'mt-4 h-0.5 flex-1 mx-2',\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 'flex items-center gds-gap-sm gds-pad-x gds-pad-y-sm',\n position === 'top' && 'border-b border-border',\n position === 'bottom' && 'border-t border-border',\n isFloating && 'rounded-full gds-shadow-lg',\n resolvedGlass === true\n ? cx(glassClass(resolvedGlass), 'border-white/10 bg-bg/60')\n : !isFloating && 'bg-surface',\n isFloating && resolvedGlass !== true && 'border border-border bg-surface',\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({ steps, currentStep, children, actions, className, ...props }, ref) {\n return (\n <div\n ref={ref}\n className={cx('flex min-h-0 flex-1 flex-col gds-gap', className)}\n data-component=\"wizard-layout\"\n {...props}\n >\n <div className=\"shrink-0 gds-pad-x\">\n <ProgressSteps steps={steps} current={currentStep} />\n </div>\n <div className=\"min-h-0 flex-1 overflow-auto gds-pad-x\">\n {children}\n </div>\n {actions !== undefined && (\n <div className=\"flex shrink-0 items-center justify-end gds-gap gds-pad-x gds-pad-y border-t border-border\">\n {actions}\n </div>\n )}\n </div>\n )\n },\n)\n\nexport type { WizardLayoutProps }\n"],"mappings":"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"}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { r as e } from "./glass-CQTlX7IO.js";
|
|
2
|
-
import { forwardRef as t } from "react";
|
|
3
|
-
import { jsx as n } from "react/jsx-runtime";
|
|
4
|
-
//#region src/l3-atoms/loading-dots.tsx
|
|
5
|
-
var r = {
|
|
6
|
-
default: "h-1.5 w-1.5",
|
|
7
|
-
sm: "h-1 w-1"
|
|
8
|
-
}, i = t(function({ className: t, count: i = 3, size: a = "default", ...o }, s) {
|
|
9
|
-
return /* @__PURE__ */ n("span", {
|
|
10
|
-
className: e("inline-flex items-center gds-gap-xs", t),
|
|
11
|
-
"data-component": "loading-dots",
|
|
12
|
-
ref: s,
|
|
13
|
-
role: "status",
|
|
14
|
-
...o,
|
|
15
|
-
children: Array.from({ length: i }, (t, i) => /* @__PURE__ */ n("span", {
|
|
16
|
-
className: e("gds-radius-badge bg-fg-muted/40 animate-pulse", r[a]),
|
|
17
|
-
style: { animationDelay: `${i * 150}ms` }
|
|
18
|
-
}, i))
|
|
19
|
-
});
|
|
20
|
-
});
|
|
21
|
-
//#endregion
|
|
22
|
-
export { i as t };
|
|
23
|
-
|
|
24
|
-
//# sourceMappingURL=loading-dots-fB4X_Zh0.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"loading-dots-fB4X_Zh0.js","names":[],"sources":["../src/l3-atoms/loading-dots.tsx"],"sourcesContent":["import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype LoadingDotsProps = React.HTMLAttributes<HTMLSpanElement> & {\n count?: number\n size?: 'default' | 'sm'\n}\n\nconst sizeMap = {\n default: 'h-1.5 w-1.5',\n sm: 'h-1 w-1',\n}\n\nexport const LoadingDots = forwardRef<HTMLSpanElement, LoadingDotsProps>(\n function LoadingDots({ className, count = 3, size = 'default', ...props }, ref) {\n return (\n <span\n className={cx('inline-flex items-center gds-gap-xs', className)}\n data-component=\"loading-dots\"\n ref={ref}\n role=\"status\"\n {...props}\n >\n {Array.from({ length: count }, (_, i) => (\n <span\n className={cx(\n 'gds-radius-badge bg-fg-muted/40 animate-pulse',\n sizeMap[size],\n )}\n key={i}\n style={{ animationDelay: `${i * 150}ms` }}\n />\n ))}\n </span>\n )\n },\n)\n\nexport type { LoadingDotsProps }\n"],"mappings":";;;;AASA,IAAM,IAAU;CACd,SAAS;CACT,IAAI;CACL,EAEY,IAAc,EACzB,SAAqB,EAAE,cAAW,WAAQ,GAAG,UAAO,WAAW,GAAG,KAAS,GAAK;AAC9E,QACE,kBAAC,QAAD;EACE,WAAW,EAAG,uCAAuC,EAAU;EAC/D,kBAAe;EACV;EACL,MAAK;EACL,GAAI;YAEH,MAAM,KAAK,EAAE,QAAQ,GAAO,GAAG,GAAG,MACjC,kBAAC,QAAD;GACE,WAAW,EACT,iDACA,EAAQ,GACT;GAED,OAAO,EAAE,gBAAgB,GAAG,IAAI,IAAI,KAAK;GACzC,EAFK,EAEL,CACF;EACG,CAAA;EAGZ"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scales-B23Guac-.js","names":[],"sources":["../src/l0-tokens/color-math.ts","../src/l0-tokens/color-health.ts","../src/l0-tokens/color-derive.ts","../src/l0-tokens/size-system.ts","../src/l0-tokens/radius-system.ts","../src/l0-tokens/shadow-system.ts","../src/l0-tokens/glass-system.ts","../src/l0-tokens/motion-system.ts","../src/l0-tokens/font-system.ts","../src/l0-tokens/generate-defaults.ts","../src/l0-tokens/scales.ts"],"sourcesContent":["// L0 — pure color math\n// hex ↔ rgb ↔ hsl conversion, manipulation, contrast\n\nexport type Rgb = { r: number, g: number, b: number }\nexport type Hsl = { h: number, s: number, l: number }\n\n// hex → rgb\nexport function hexToRgb(hex: string): Rgb {\n const h = hex.replace('#', '')\n const n = parseInt(h.length === 3 ? h.split('').map(c => c + c).join('') : h, 16)\n return { r: (n >> 16) & 255, g: (n >> 8) & 255, b: n & 255 }\n}\n\n// rgb → hex\nexport function rgbToHex(rgb: Rgb): string {\n const c = (v: number) => Math.round(Math.min(255, Math.max(0, v))).toString(16).padStart(2, '0')\n return `#${c(rgb.r)}${c(rgb.g)}${c(rgb.b)}`\n}\n\n// rgb → hsl\nexport function rgbToHsl(rgb: Rgb): Hsl {\n const r = rgb.r / 255\n const g = rgb.g / 255\n const b = rgb.b / 255\n const max = Math.max(r, g, b)\n const min = Math.min(r, g, b)\n const l = (max + min) / 2\n if (max === min) return { h: 0, s: 0, l }\n const d = max - min\n const s = l > 0.5 ? d / (2 - max - min) : d / (max + min)\n const h = max === r\n ? ((g - b) / d + (g < b ? 6 : 0)) / 6\n : max === g\n ? ((b - r) / d + 2) / 6\n : ((r - g) / d + 4) / 6\n return { h: h * 360, s, l }\n}\n\n// hsl → rgb\nexport function hslToRgb(hsl: Hsl): Rgb {\n const { h, s, l } = hsl\n if (s === 0) {\n const v = Math.round(l * 255)\n return { r: v, g: v, b: v }\n }\n const hue2rgb = (p: number, q: number, t: number) => {\n const tt = t < 0 ? t + 1 : t > 1 ? t - 1 : t\n if (tt < 1 / 6) return p + (q - p) * 6 * tt\n if (tt < 1 / 2) return q\n if (tt < 2 / 3) return p + (q - p) * (2 / 3 - tt) * 6\n return p\n }\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s\n const p = 2 * l - q\n const hNorm = h / 360\n return {\n r: Math.round(hue2rgb(p, q, hNorm + 1 / 3) * 255),\n g: Math.round(hue2rgb(p, q, hNorm) * 255),\n b: Math.round(hue2rgb(p, q, hNorm - 1 / 3) * 255),\n }\n}\n\n// hex → hsl shortcut\nexport function hexToHsl(hex: string): Hsl {\n return rgbToHsl(hexToRgb(hex))\n}\n\n// hsl → hex shortcut\nexport function hslToHex(hsl: Hsl): string {\n return rgbToHex(hslToRgb(hsl))\n}\n\n// relative luminance (WCAG 2.1)\nexport function luminance(rgb: Rgb): number {\n const srgb = [rgb.r, rgb.g, rgb.b].map((v) => {\n const s = v / 255\n return s <= 0.03928 ? s / 12.92 : Math.pow((s + 0.055) / 1.055, 2.4)\n })\n return 0.2126 * srgb[0] + 0.7152 * srgb[1] + 0.0722 * srgb[2]\n}\n\n// WCAG contrast ratio between two colors\nexport function contrastRatio(a: Rgb, b: Rgb): number {\n const la = luminance(a)\n const lb = luminance(b)\n const lighter = Math.max(la, lb)\n const darker = Math.min(la, lb)\n return (lighter + 0.05) / (darker + 0.05)\n}\n\n// interpolate between two hex colors (0=a, 1=b)\nexport function lerpColor(a: string, b: string, t: number): string {\n const ca = hexToRgb(a)\n const cb = hexToRgb(b)\n return rgbToHex({\n r: Math.round(ca.r + (cb.r - ca.r) * t),\n g: Math.round(ca.g + (cb.g - ca.g) * t),\n b: Math.round(ca.b + (cb.b - ca.b) * t),\n })\n}\n\n// manipulation: lighten\nexport function lighten(hex: string, amount: number): string {\n const hsl = hexToHsl(hex)\n return hslToHex({ ...hsl, l: Math.min(1, hsl.l + amount) })\n}\n\n// manipulation: darken\nexport function darken(hex: string, amount: number): string {\n const hsl = hexToHsl(hex)\n return hslToHex({ ...hsl, l: Math.max(0, hsl.l - amount) })\n}\n\n// manipulation: adjust saturation\nexport function saturate(hex: string, amount: number): string {\n const hsl = hexToHsl(hex)\n return hslToHex({ ...hsl, s: Math.min(1, Math.max(0, hsl.s + amount)) })\n}\n\n// manipulation: shift hue\nexport function hueShift(hex: string, degrees: number): string {\n const hsl = hexToHsl(hex)\n return hslToHex({ ...hsl, h: (hsl.h + degrees + 360) % 360 })\n}\n\n// manipulation: with alpha → rgba string\nexport function withAlpha(hex: string, alpha: number): string {\n const { r, g, b } = hexToRgb(hex)\n return `rgba(${r}, ${g}, ${b}, ${alpha})`\n}\n\n// complementary color (180° hue shift)\nexport function complement(hex: string): string {\n return hueShift(hex, 180)\n}\n\n// analogous colors (±30° hue shift)\nexport function analogous(hex: string): [string, string] {\n return [hueShift(hex, -30), hueShift(hex, 30)]\n}\n\n// triadic colors (120° apart)\nexport function triadic(hex: string): [string, string] {\n return [hueShift(hex, 120), hueShift(hex, 240)]\n}\n","// L0 — primary color health scoring\n// validates a candidate primary color against dark/light backgrounds\n// scores 0-100, with diagnostic feedback\n\nimport type { Rgb } from './color-math'\nimport { contrastRatio, hexToHsl, hexToRgb, hslToHex } from './color-math'\n\nexport type HealthLevel = 'rejected' | 'warning' | 'good' | 'excellent'\n\nexport type HealthDiagnostic = {\n id: string\n severity: 'error' | 'info' | 'warning'\n message: string\n suggestion: string\n}\n\nexport type HealthReport = {\n score: number // 0-100\n level: HealthLevel // rejected(<60) / warning(60-80) / good(80-90) / excellent(90+)\n diagnostics: HealthDiagnostic[]\n details: {\n contrastOnDark: number\n contrastOnLight: number\n contrastWhiteOnColor: number\n contrastBlackOnColor: number\n saturation: number\n lightness: number\n hue: number\n semanticConflict: string | null\n }\n}\n\n// fixed reference colors\nconst DARK_BG: Rgb = { r: 15, g: 23, b: 42 }\nconst LIGHT_BG: Rgb = { r: 255, g: 255, b: 255 }\nconst WHITE: Rgb = { r: 255, g: 255, b: 255 }\nconst BLACK: Rgb = { r: 0, g: 0, b: 0 }\n\n// semantic color hue ranges to check conflicts\nconst SEMANTIC_RANGES: { name: string; hueMin: number; hueMax: number }[] = [\n { name: 'danger (red)', hueMin: 340, hueMax: 360 },\n { name: 'danger (red)', hueMin: 0, hueMax: 20 },\n { name: 'warning (amber)', hueMin: 30, hueMax: 55 },\n { name: 'success (green)', hueMin: 100, hueMax: 150 },\n]\n\n// individual scoring checks — each returns penalty points\nfunction checkContrastOnDark(rgb: Rgb, d: HealthDiagnostic[]): number {\n const ratio = contrastRatio(rgb, DARK_BG)\n if (ratio < 2.5) {\n d.push({ id: 'contrast-dark-fail', severity: 'error', message: `contrast on dark background too low (${ratio.toFixed(1)}:1)`, suggestion: 'lighten the color or increase saturation' })\n return 30\n }\n if (ratio < 3.5) {\n d.push({ id: 'contrast-dark-low', severity: 'warning', message: `contrast on dark background is marginal (${ratio.toFixed(1)}:1)`, suggestion: 'consider a slightly lighter variant for better readability' })\n return 15\n }\n return 0\n}\n\nfunction checkContrastOnLight(rgb: Rgb, d: HealthDiagnostic[]): number {\n const ratio = contrastRatio(rgb, LIGHT_BG)\n if (ratio < 2.5) {\n d.push({ id: 'contrast-light-fail', severity: 'warning', message: `contrast on light background too low (${ratio.toFixed(1)}:1)`, suggestion: 'darken the color for light mode usage' })\n return 15\n }\n return 0\n}\n\nfunction checkTextOnColor(rgb: Rgb, d: HealthDiagnostic[]): number {\n const whiteC = contrastRatio(WHITE, rgb)\n const blackC = contrastRatio(BLACK, rgb)\n const best = Math.max(whiteC, blackC)\n if (best < 3) {\n d.push({ id: 'text-on-color-fail', severity: 'error', message: `neither white nor black text is readable on this color (best: ${best.toFixed(1)}:1)`, suggestion: 'adjust lightness — avoid the 40-60% lightness midrange' })\n return 20\n }\n if (best < 4.5) {\n d.push({ id: 'text-on-color-low', severity: 'warning', message: `text on this color has limited contrast (${best.toFixed(1)}:1)`, suggestion: 'push lightness below 40% or above 60% for clearer text' })\n return 8\n }\n return 0\n}\n\nfunction checkSaturation(s: number, d: HealthDiagnostic[]): number {\n if (s < 0.2) {\n d.push({ id: 'saturation-low', severity: 'warning', message: `saturation too low (${(s * 100).toFixed(0)}%) — color appears grayish`, suggestion: 'increase saturation above 30% for a vibrant primary' })\n return 15\n }\n if (s > 0.95) {\n d.push({ id: 'saturation-high', severity: 'info', message: `very high saturation (${(s * 100).toFixed(0)}%) — may cause eye strain`, suggestion: 'reduce to 70-90% for comfortable prolonged viewing' })\n return 5\n }\n return 0\n}\n\nfunction checkLightness(l: number, d: HealthDiagnostic[]): number {\n if (l < 0.15) {\n d.push({ id: 'lightness-too-dark', severity: 'error', message: `color is too dark (L=${(l * 100).toFixed(0)}%) — invisible on dark mode`, suggestion: 'increase lightness above 30%' })\n return 20\n }\n if (l > 0.85) {\n d.push({ id: 'lightness-too-light', severity: 'warning', message: `color is too light (L=${(l * 100).toFixed(0)}%) — weak on light mode`, suggestion: 'decrease lightness below 70%' })\n return 15\n }\n return 0\n}\n\nfunction checkSemanticConflict(h: number, s: number, d: HealthDiagnostic[]): string | null {\n if (s <= 0.4) return null\n for (const range of SEMANTIC_RANGES) {\n if (h >= range.hueMin && h <= range.hueMax) {\n d.push({ id: 'semantic-conflict', severity: 'warning', message: `hue (${h.toFixed(0)}°) overlaps with ${range.name} semantic color`, suggestion: 'users may confuse accent with status colors — shift hue away from red/amber/green zones' })\n return range.name\n }\n }\n return null\n}\n\nfunction levelFromScore(score: number): HealthLevel {\n if (score < 60) return 'rejected'\n if (score < 80) return 'warning'\n if (score < 90) return 'good'\n return 'excellent'\n}\n\nexport function scoreColor(hex: string): HealthReport {\n const rgb = hexToRgb(hex)\n const hsl = hexToHsl(hex)\n const diagnostics: HealthDiagnostic[] = []\n\n const penalty =\n checkContrastOnDark(rgb, diagnostics) +\n checkContrastOnLight(rgb, diagnostics) +\n checkTextOnColor(rgb, diagnostics) +\n checkSaturation(hsl.s, diagnostics) +\n checkLightness(hsl.l, diagnostics)\n\n const semanticConflict = checkSemanticConflict(hsl.h, hsl.s, diagnostics)\n const semanticPenalty = semanticConflict !== null ? 10 : 0\n\n const score = Math.max(0, Math.min(100, 100 - penalty - semanticPenalty))\n\n return {\n score,\n level: levelFromScore(score),\n diagnostics,\n details: {\n contrastOnDark: contrastRatio(rgb, DARK_BG),\n contrastOnLight: contrastRatio(rgb, LIGHT_BG),\n contrastWhiteOnColor: contrastRatio(WHITE, rgb),\n contrastBlackOnColor: contrastRatio(BLACK, rgb),\n saturation: hsl.s,\n lightness: hsl.l,\n hue: hsl.h,\n semanticConflict,\n },\n }\n}\n\n// determine best text color (white or black) for a given background\nexport function bestTextColor(bgHex: string): '#000000' | '#ffffff' {\n const rgb = hexToRgb(bgHex)\n const whiteContrast = contrastRatio(WHITE, rgb)\n const blackContrast = contrastRatio(BLACK, rgb)\n // prefer white if it passes minimum readability (3:1)\n if (whiteContrast >= 3) return '#ffffff'\n if (blackContrast >= 3) return '#000000'\n return whiteContrast > blackContrast ? '#ffffff' : '#000000'\n}\n\n// auto-fix: take any color → return the highest-scoring version\nexport function autoFixColor(hex: string): string {\n const hsl = hexToHsl(hex)\n let bestHex = hex\n let bestScore = scoreColor(hex).score\n\n const fixedS = Math.max(0.45, Math.min(0.85, hsl.s))\n\n for (let l = 0.40; l <= 0.70; l += 0.02) {\n let h = hsl.h\n\n // shift hue away from semantic conflict zones\n for (const range of SEMANTIC_RANGES) {\n if (h >= range.hueMin && h <= range.hueMax) {\n const distToMin = Math.abs(h - range.hueMin)\n const distToMax = Math.abs(h - range.hueMax)\n if (distToMin < distToMax) {\n h = range.hueMin - 10\n } else {\n h = range.hueMax + 10\n }\n h = (h + 360) % 360\n break\n }\n }\n\n const candidate = hslToHex({ h, s: fixedS, l })\n const candidateScore = scoreColor(candidate).score\n if (candidateScore > bestScore) {\n bestScore = candidateScore\n bestHex = candidate\n }\n }\n\n return bestHex\n}\n","// L0 — derive full color palette from a single primary color\n// two categories: fixed (never change) and derived f(pc)\n\nimport { bestTextColor } from './color-health'\nimport { darken, hexToHsl, hslToHex, hslToRgb, lighten, withAlpha } from './color-math'\n\n// fixed colors — these NEVER change regardless of primary color\n// they are semantic constants anchored to universal meaning\nexport const FIXED_COLORS = {\n // danger = red — universal stop/error/destructive\n danger: { dark: '#ef4444', light: '#dc2626' },\n // info = blue — informational, links, neutral highlights\n info: { dark: '#3b82f6', light: '#2563eb' },\n // warning = amber — universal caution\n warning: { dark: '#f59e0b', light: '#d97706' },\n // success = green — universal positive/go\n success: { dark: '#22c55e', light: '#16a34a' },\n\n // status — organizational meaning, stable across themes\n statusActive: '#22c55e',\n statusInactive: '#94a3b8',\n statusPending: '#f59e0b',\n statusDraft: '#64748b',\n\n // priority — severity scale, stable\n priorityCritical: '#ef4444',\n priorityHigh: '#f97316',\n priorityMedium: '#f59e0b',\n priorityLow: '#22c55e',\n\n // action icons — create/update/delete, stable\n actionCreate: '#22c55e',\n actionUpdate: '#3b82f6',\n actionDelete: '#ef4444',\n\n // notification dot\n dot: '#ef4444',\n} as const\n\n// tint intensity — how much primaryColor bleeds into base surfaces\n// dark mode can take more chroma; light mode must be near-invisible\nconst TINT_S_DARK = 0.06 // 6% saturation on dark surfaces\nconst TINT_S_LIGHT = 0.03 // 3% saturation on light surfaces — barely there\n\n// derived color set — everything computed from primary color\nexport type DerivedPalette = {\n // accent family\n accent: string\n accentHover: string\n accentFg: string\n accentMuted: string // rgba(accent, 0.1) — for subtle backgrounds\n accentSubtle: string // rgba(accent, 0.05) — for hover tints\n\n // base surfaces — tinted by primaryColor hue, very restrained\n bg: string\n bgSecondary: string\n bgTertiary: string\n fg: string\n fgSecondary: string\n fgMuted: string\n border: string\n borderStrong: string\n surface: string\n surfaceRaised: string\n overlay: string\n\n // categorical palette\n palette: string[]\n}\n\n// derive full palette for dark mode\nexport function deriveDarkPalette(primaryHex: string): DerivedPalette {\n const hsl = hexToHsl(primaryHex)\n const h = hsl.h\n const ts = TINT_S_DARK // tint saturation\n\n // accent — tuned for dark bg: bright enough to see, dark enough for white text on top\n // L=0.45-0.55 ensures white text passes WCAG AA (≥4.5:1)\n const accent = hslToHex({ h, s: Math.max(0.55, Math.min(0.85, hsl.s)), l: Math.max(0.45, Math.min(0.55, hsl.l)) })\n const accentHover = lighten(accent, 0.1)\n const accentFg = bestTextColor(accent)\n const accentMuted = withAlpha(accent, 0.12)\n const accentSubtle = withAlpha(accent, 0.05)\n\n // base surfaces — dark with barely-perceptible hue from primaryColor\n // the tint is what makes a blue-primary app feel \"cool\" and a green-primary feel \"fresh\"\n // glass surfaces are semi-transparent over these — so the tint bleeds through the blur naturally\n const bg = hslToHex({ h, s: ts, l: 0.06 }) // near-black, micro tint\n const bgSecondary = hslToHex({ h, s: ts, l: 0.11 }) // card/sidebar bg\n const bgTertiary = hslToHex({ h, s: ts, l: 0.20 }) // hover/active states\n const surface = hslToHex({ h, s: ts, l: 0.11 }) // = bgSecondary (glass base)\n const surfaceRaised= hslToHex({ h, s: ts, l: 0.20 }) // elevated panels\n\n // fg — high contrast, same hue as bg but at 2-3% saturation\n // entire bg→fg scale shares one hue channel — cohesive under glass\n const fg = hslToHex({ h, s: 0.02, l: 0.95 }) // near-white, whisper of hue\n const fgSecondary = hslToHex({ h, s: 0.03, l: 0.82 }) // secondary text\n const fgMuted = hslToHex({ h, s: 0.04, l: 0.62 }) // muted/placeholder\n\n // borders — subtle, tinted\n const border = hslToHex({ h, s: ts, l: 0.20 })\n const borderStrong = hslToHex({ h, s: ts, l: 0.28 })\n\n const overlay = `rgba(${Math.round(hslToRgb({ h, s: ts, l: 0.04 }).r)}, ${Math.round(hslToRgb({ h, s: ts, l: 0.04 }).g)}, ${Math.round(hslToRgb({ h, s: ts, l: 0.04 }).b)}, 0.6)`\n\n return {\n accent, accentHover, accentFg, accentMuted, accentSubtle,\n bg, bgSecondary, bgTertiary, fg, fgSecondary, fgMuted,\n border, borderStrong, surface, surfaceRaised, overlay,\n palette: generatePalette(h, 'dark'),\n }\n}\n\n// derive full palette for light mode\nexport function deriveLightPalette(primaryHex: string): DerivedPalette {\n const hsl = hexToHsl(primaryHex)\n const h = hsl.h\n const ts = TINT_S_LIGHT // less tint — white shows chroma more obviously\n\n // accent — saturated enough to pop on white\n const accent = hslToHex({ h, s: Math.max(0.6, Math.min(0.9, hsl.s)), l: Math.max(0.42, Math.min(0.55, hsl.l)) })\n const accentHover = darken(accent, 0.06)\n const accentFg = bestTextColor(accent)\n const accentMuted = withAlpha(accent, 0.1)\n const accentSubtle = withAlpha(accent, 0.04)\n\n // base surfaces — white or near-white, micro tint on secondaries only\n // bg stays pure white — tint on white at any amount looks \"off\"\n // glass over white is beautiful because backdrop-filter picks up content behind\n const bg = '#ffffff'\n const bgSecondary = hslToHex({ h, s: ts, l: 0.97 }) // barely warm/cool\n const bgTertiary = hslToHex({ h, s: ts, l: 0.95 })\n const surface = '#ffffff'\n const surfaceRaised= '#ffffff'\n\n // fg — dark text, whisper of hue for cohesion\n const fg = hslToHex({ h, s: 0.02, l: 0.12 })\n const fgSecondary = hslToHex({ h, s: 0.03, l: 0.30 })\n const fgMuted = hslToHex({ h, s: 0.03, l: 0.42 })\n\n // borders\n const border = hslToHex({ h, s: ts, l: 0.90 })\n const borderStrong = hslToHex({ h, s: ts, l: 0.83 })\n\n const overlay = 'rgba(0, 0, 0, 0.5)'\n\n return {\n accent, accentHover, accentFg, accentMuted, accentSubtle,\n bg, bgSecondary, bgTertiary, fg, fgSecondary, fgMuted,\n border, borderStrong, surface, surfaceRaised, overlay,\n palette: generatePalette(h, 'light'),\n }\n}\n\n// generate 10-color categorical palette from a base hue\n// [0]=primary, [1..9]=evenly spaced hues with adjusted lightness\nfunction generatePalette(baseHue: number, mode: 'dark' | 'light'): string[] {\n // dark: bright enough to read on dark bg; light: saturated but not muddy\n const lightness = mode === 'dark' ? 0.65 : 0.55\n const saturation = mode === 'dark' ? 0.7 : 0.75\n\n // golden angle distribution — visually distinct hue spacing\n const hueOffsets = [0, 137.5, 275, 52.5, 190, 327.5, 95, 232.5, 10, 170]\n\n return hueOffsets.map((offset) =>\n hslToHex({\n h: (baseHue + offset) % 360,\n s: saturation,\n l: lightness,\n })\n )\n}\n\n// convert derived palette to CSS variable overrides — complete color system\nexport function paletteToVars(\n palette: DerivedPalette,\n mode: 'dark' | 'light',\n): Record<string, string> {\n const fc = FIXED_COLORS\n const isDark = mode === 'dark'\n\n const vars: Record<string, string> = {\n // base surfaces — tinted by primaryColor\n '--gds-bg': palette.bg,\n '--gds-bg-secondary': palette.bgSecondary,\n '--gds-bg-tertiary': palette.bgTertiary,\n '--gds-surface': palette.surface,\n '--gds-surface-raised': palette.surfaceRaised,\n\n // foreground\n '--gds-fg': palette.fg,\n '--gds-fg-secondary': palette.fgSecondary,\n '--gds-fg-muted': palette.fgMuted,\n\n // borders\n '--gds-border': palette.border,\n '--gds-border-strong': palette.borderStrong,\n\n // accent family — derived from primaryColor\n '--gds-accent': palette.accent,\n '--gds-accent-hover': palette.accentHover,\n '--gds-accent-fg': palette.accentFg,\n\n // overlay\n '--gds-overlay': palette.overlay,\n\n // fixed semantic colors — NEVER change per primaryColor\n '--gds-danger': isDark ? fc.danger.dark : fc.danger.light,\n '--gds-info': isDark ? fc.info.dark : fc.info.light,\n '--gds-warning': isDark ? fc.warning.dark : fc.warning.light,\n '--gds-success': isDark ? fc.success.dark : fc.success.light,\n\n // fixed status\n '--gds-status-active': fc.statusActive,\n '--gds-status-inactive': fc.statusInactive,\n '--gds-status-pending': fc.statusPending,\n '--gds-status-draft': fc.statusDraft,\n\n // fixed priority\n '--gds-priority-critical': fc.priorityCritical,\n '--gds-priority-high': fc.priorityHigh,\n '--gds-priority-medium': fc.priorityMedium,\n '--gds-priority-low': fc.priorityLow,\n\n // fixed action\n '--gds-action-create': fc.actionCreate,\n '--gds-action-update': fc.actionUpdate,\n '--gds-action-delete': fc.actionDelete,\n\n // fixed dot\n '--gds-dot': fc.dot,\n }\n\n // categorical palette (10 colors)\n palette.palette.forEach((color, i) => {\n vars[`--gds-palette-${i}`] = color\n })\n\n return vars\n}\n","// L0 — sizing system\n// component heights, icon sizes, touch targets, spacing\n// all derived from a base unit, scaled by density axis\n\n// base unit = 4px, all sizes are multiples\nconst BASE = 4\n\n// spacing scale — matches tokens.css --gds-space-* vars\nexport const spacing = {\n 0: 0,\n 1: 4,\n 2: 8,\n 3: 12,\n 4: 16,\n 5: 20,\n 6: 24,\n 7: 32,\n 8: 40,\n 9: 48,\n 10: 64,\n} as const\n\nexport type SpaceScale = keyof typeof spacing\n\n// component height scale — used by Button, Input, Select, etc.\n// formula: base * multiplier\nexport const componentHeight = {\n xs: BASE * 6, // 24px — icon buttons, compact tags\n sm: BASE * 7, // 28px — compact inputs, small buttons\n default: BASE * 8, // 32px — standard inputs, buttons\n lg: BASE * 10, // 40px — comfortable inputs, large buttons\n xl: BASE * 12, // 48px — hero actions, mobile-friendly\n} as const\n\n// icon size scale — matched to component heights\nexport const iconSize = {\n xs: 12,\n sm: 14,\n default: 16,\n lg: 20,\n xl: 24,\n} as const\n\n// touch target minimums (mobile = 44px per Apple HIG)\nexport const touchTarget = {\n desktop: 32,\n mobile: 44,\n} as const\n\n// content width constraints\nexport const contentWidth = {\n input: { min: 120, max: 480 },\n dialog: { sm: 320, md: 384, lg: 480, xl: 600 },\n sheet: { sm: 280, md: 320, lg: 400 },\n dropdown: { min: 160, max: 320 },\n} as const\n\n// density → size mapping\n// density axis adjusts which height/spacing tier components use\nexport type SizeTier = 'xs' | 'sm' | 'default' | 'lg' | 'xl'\n\nexport const densitySizeMap: Record<string, {\n component: SizeTier\n icon: SizeTier\n gap: number\n pad: number\n text: number\n}> = {\n compact: {\n component: 'sm',\n icon: 'sm',\n gap: BASE * 1.5, // 6px\n pad: BASE * 2, // 8px\n text: 11,\n },\n default: {\n component: 'default',\n icon: 'default',\n gap: BASE * 3, // 12px\n pad: BASE * 4, // 16px\n text: 13,\n },\n comfortable: {\n component: 'lg',\n icon: 'lg',\n gap: BASE * 4, // 16px\n pad: BASE * 6, // 24px\n text: 14,\n },\n}\n\n// density-relative height scale\n// all tiers shift together when density changes\nconst densityHeightScale: Record<string, Record<string, number>> = {\n compact: { xs: 20, sm: 24, default: 28, lg: 32, xl: 36 },\n default: { xs: 24, sm: 28, default: 32, lg: 36, xl: 40 },\n comfortable: { xs: 28, sm: 32, default: 36, lg: 40, xl: 48 },\n}\n\n// density-relative icon scale\nconst densityIconScale: Record<string, Record<string, number>> = {\n compact: { xs: 10, sm: 12, default: 14, lg: 16 },\n default: { xs: 12, sm: 14, default: 16, lg: 20 },\n comfortable: { xs: 14, sm: 16, default: 20, lg: 24 },\n}\n\n// density-relative text scale\nconst densityTextScale: Record<string, Record<string, number>> = {\n compact: { caption: 9, label: 10, body: 11 },\n default: { caption: 10, label: 11, body: 13 },\n comfortable: { caption: 11, label: 12, body: 14 },\n}\n\n// density-relative gap scale\nconst densityGapScale: Record<string, Record<string, number>> = {\n compact: { xs: 2, sm: 4, default: 6, lg: 8 },\n default: { xs: 4, sm: 6, default: 8, lg: 12 },\n comfortable: { xs: 6, sm: 8, default: 12, lg: 16 },\n}\n\n// density-relative padding scale\nconst densityPadScale: Record<string, Record<string, { x: number, y: number }>> = {\n compact: { sm: { x: 4, y: 2 }, default: { x: 8, y: 4 }, lg: { x: 12, y: 6 } },\n default: { sm: { x: 8, y: 4 }, default: { x: 12, y: 6 }, lg: { x: 16, y: 8 } },\n comfortable: { sm: { x: 10, y: 6 }, default: { x: 16, y: 8 }, lg: { x: 20, y: 12 } },\n}\n\n// generate CSS vars for a density tier\nexport function sizeToCssVars(density: string): Record<string, string> {\n const d = density in densityHeightScale ? density : 'default'\n const tier = densitySizeMap[d] ?? densitySizeMap.default\n const h = densityHeightScale[d]\n const ic = densityIconScale[d]\n const tx = densityTextScale[d]\n const gp = densityGapScale[d]\n const pd = densityPadScale[d]\n\n return {\n // backward-compat aliases\n '--gds-component-height': `${componentHeight[tier.component]}px`,\n '--gds-icon-size': `${iconSize[tier.icon]}px`,\n '--gds-density-gap': `${tier.gap}px`,\n '--gds-density-pad': `${tier.pad}px`,\n '--gds-density-text': `${tier.text}px`,\n\n // density-relative height scale\n '--gds-h-xs': `${h.xs}px`,\n '--gds-h-sm': `${h.sm}px`,\n '--gds-h': `${h.default}px`,\n '--gds-h-lg': `${h.lg}px`,\n '--gds-h-xl': `${h.xl}px`,\n\n // density-relative icon scale\n '--gds-icon-xs': `${ic.xs}px`,\n '--gds-icon-sm': `${ic.sm}px`,\n '--gds-icon': `${ic.default}px`,\n '--gds-icon-lg': `${ic.lg}px`,\n\n // density-relative text scale\n '--gds-text-caption': `${tx.caption}px`,\n '--gds-text-label': `${tx.label}px`,\n '--gds-text-body': `${tx.body}px`,\n\n // density-relative gap scale\n '--gds-gap-xs': `${gp.xs}px`,\n '--gds-gap-sm': `${gp.sm}px`,\n '--gds-gap': `${gp.default}px`,\n '--gds-gap-lg': `${gp.lg}px`,\n\n // density-relative padding scale\n '--gds-pad-x-sm': `${pd.sm.x}px`,\n '--gds-pad-x': `${pd.default.x}px`,\n '--gds-pad-x-lg': `${pd.lg.x}px`,\n '--gds-pad-y-sm': `${pd.sm.y}px`,\n '--gds-pad-y': `${pd.default.y}px`,\n '--gds-pad-y-lg': `${pd.lg.y}px`,\n }\n}\n","// L0 — radius system\n// mathematical radius scale, shaped by the shape axis\n// formula: base_radius * shape_factor, with golden ratio progression\n\n// golden ratio progression: each step ≈ 1.5× the previous\n// seed: 4px → 6px → 8px → 12px (approximately 1.5× each)\nconst RADIUS_STEPS = [4, 6, 8, 12] as const\n\n// shape factor — multiplies the base scale\nconst SHAPE_FACTOR: Record<string, number> = {\n sharp: 0.5, // halves all radii → 2/3/4/6\n default: 1.0, // base → 4/6/8/12\n rounded: 2.0, // doubles → 8/12/16/24\n}\n\nexport function radiusScale(shape: string): {\n sm: number\n md: number\n lg: number\n xl: number\n full: number\n} {\n const factor = SHAPE_FACTOR[shape] ?? 1\n return {\n sm: Math.round(RADIUS_STEPS[0] * factor),\n md: Math.round(RADIUS_STEPS[1] * factor),\n lg: Math.round(RADIUS_STEPS[2] * factor),\n xl: Math.round(RADIUS_STEPS[3] * factor),\n full: 9999,\n }\n}\n\nexport function radiusToCssVars(shape: string): Record<string, string> {\n const scale = radiusScale(shape)\n return {\n // base scale\n '--gds-radius-sm': `${scale.sm}px`,\n '--gds-radius-md': `${scale.md}px`,\n '--gds-radius-lg': `${scale.lg}px`,\n '--gds-radius-xl': `${scale.xl}px`,\n '--gds-radius-full': `${scale.full}px`,\n\n // semantic aliases — components use these\n '--gds-radius-button': `${scale.md}px`,\n '--gds-radius-input': `${scale.md}px`,\n '--gds-radius-badge': `${scale.full}px`,\n '--gds-radius-card': `${scale.xl}px`,\n '--gds-radius-modal': `${scale.xl}px`,\n '--gds-radius-popover': `${scale.lg}px`,\n '--gds-radius-tooltip': `${scale.md}px`,\n }\n}\n","// L0 — shadow system\n// elevation-aware shadows with dark mode adaptation\n// formula: each tier doubles blur radius, increases spread\n\ntype ShadowTier = { blur: number, spread: number, yOffset: number, opacity: number }\n\n// base shadow parameters — each tier escalates geometrically\nconst SHADOW_TIERS: Record<string, ShadowTier[]> = {\n xs: [{ blur: 1, spread: 0, yOffset: 1, opacity: 0.03 }],\n sm: [{ blur: 2, spread: 0, yOffset: 1, opacity: 0.05 }],\n md: [\n { blur: 6, spread: -1, yOffset: 4, opacity: 0.1 },\n { blur: 4, spread: -2, yOffset: 2, opacity: 0.1 },\n ],\n lg: [\n { blur: 15, spread: -3, yOffset: 10, opacity: 0.1 },\n { blur: 6, spread: -4, yOffset: 4, opacity: 0.1 },\n ],\n xl: [\n { blur: 25, spread: -5, yOffset: 20, opacity: 0.1 },\n { blur: 10, spread: -6, yOffset: 8, opacity: 0.1 },\n ],\n}\n\n// elevation factor — scales opacity\nconst ELEVATION_FACTOR: Record<string, number> = {\n flat: 0, // no shadows at all\n subtle: 0.6, // reduced shadows\n raised: 1.0, // full shadows\n}\n\n// dark mode multiplier — darker mode needs stronger shadows\nconst MODE_FACTOR: Record<string, number> = {\n dark: 3.0,\n light: 1.0,\n}\n\nfunction tierToString(tier: ShadowTier, elevFactor: number, modeFactor: number): string {\n if (elevFactor === 0) return 'none'\n const opacity = Math.min(1, tier.opacity * elevFactor * modeFactor)\n return `0 ${tier.yOffset}px ${tier.blur}px ${tier.spread}px rgb(0 0 0 / ${opacity.toFixed(2)})`\n}\n\nexport function shadowValue(\n level: string,\n elevation: string,\n mode: string,\n): string {\n const tiers = SHADOW_TIERS[level]\n if (tiers === undefined) return 'none'\n const ef = ELEVATION_FACTOR[elevation] ?? 1\n if (ef === 0) return 'none'\n const mf = MODE_FACTOR[mode] ?? 1\n return tiers.map(t => tierToString(t, ef, mf)).join(', ')\n}\n\nexport function shadowToCssVars(elevation: string, mode: string): Record<string, string> {\n return {\n '--gds-shadow-xs': shadowValue('xs', elevation, mode),\n '--gds-shadow-sm': shadowValue('sm', elevation, mode),\n '--gds-shadow-md': shadowValue('md', elevation, mode),\n '--gds-shadow-lg': shadowValue('lg', elevation, mode),\n '--gds-shadow-xl': shadowValue('xl', elevation, mode),\n }\n}\n","// L0 — glass material system\n// blur intensity, saturation, background opacity\n// adapts to glass axis + dark/light mode + capability detection\n\nexport type GlassLevel = 'off' | 'subtle' | 'full'\n\n// glass parameters — mathematically related\n// blur: geometric progression (0 → 4/12/24 → 8/20/40)\n// saturation: 100% base + boost (0 → +50/+60/+80 → +50/+80/+100)\n// bg-opacity: inverse of blur (more blur → less solid bg needed)\ntype GlassParams = {\n blurSm: number\n blurMd: number\n blurLg: number\n saturateSm: number\n saturateMd: number\n saturateLg: number\n bgOpacity: number\n}\n\nconst GLASS_LEVELS: Record<GlassLevel, GlassParams> = {\n off: {\n blurSm: 0, blurMd: 0, blurLg: 0,\n saturateSm: 100, saturateMd: 100, saturateLg: 100,\n bgOpacity: 0.95, // almost solid — glass is disabled\n },\n subtle: {\n blurSm: 4, blurMd: 12, blurLg: 24,\n saturateSm: 130, saturateMd: 150, saturateLg: 160,\n bgOpacity: 0.25,\n },\n full: {\n blurSm: 8, blurMd: 20, blurLg: 40,\n saturateSm: 150, saturateMd: 180, saturateLg: 200,\n bgOpacity: 0.15,\n },\n}\n\n// dark mode reduces bg opacity further (more translucent)\n// light mode increases it (needs more solid for readability)\nconst MODE_BG_ADJUST: Record<string, number> = {\n dark: -0.05,\n light: +0.1,\n}\n\nexport function glassParams(level: GlassLevel, mode: string): GlassParams {\n const base = GLASS_LEVELS[level]\n const adjust = MODE_BG_ADJUST[mode] ?? 0\n return {\n ...base,\n bgOpacity: Math.min(0.95, Math.max(0.05, base.bgOpacity + adjust)),\n }\n}\n\nexport function glassToCssVars(level: GlassLevel, mode: string): Record<string, string> {\n const p = glassParams(level, mode)\n return {\n '--gds-glass-blur-sm': `${p.blurSm}px`,\n '--gds-glass-blur-md': `${p.blurMd}px`,\n '--gds-glass-blur-lg': `${p.blurLg}px`,\n '--gds-glass-saturate-sm': `${p.saturateSm}%`,\n '--gds-glass-saturate-md': `${p.saturateMd}%`,\n '--gds-glass-saturate-lg': `${p.saturateLg}%`,\n '--gds-glass-bg-opacity': `${p.bgOpacity}`,\n }\n}\n\n// capability detection — check if backdrop-filter is supported\nexport function supportsBackdropFilter(): boolean {\n if (typeof CSS === 'undefined') return false\n return CSS.supports('backdrop-filter', 'blur(1px)')\n || CSS.supports('-webkit-backdrop-filter', 'blur(1px)')\n}\n","// L0 — motion system\n// duration scale, easing presets, spring configs\n// adapts to motion axis (off/reduced/full)\n\nexport type MotionLevel = 'full' | 'off' | 'reduced'\n\n// duration scale — geometric progression from a base\n// base=100ms, each tier ≈ 2× (100 → 200 → 300 → 500)\nconst DURATION_BASE = 100\n\nconst DURATION_MULTIPLIERS = {\n fast: 1, // 100ms — hover, micro-feedback\n normal: 2, // 200ms — panel expand, tab switch\n slow: 3, // 300ms — modal, page transition\n slower: 5, // 500ms — complex orchestration\n} as const\n\n// motion level factor — scales all durations\nconst LEVEL_FACTOR: Record<MotionLevel, number> = {\n off: 0, // instant — 0ms everything\n reduced: 0.5, // halved — still perceptible but quick\n full: 1.0, // standard\n}\n\nexport function duration(tier: keyof typeof DURATION_MULTIPLIERS, level: MotionLevel): number {\n return Math.round(DURATION_BASE * DURATION_MULTIPLIERS[tier] * LEVEL_FACTOR[level])\n}\n\n// easing presets — CSS cubic-bezier\nexport const easing = {\n default: 'cubic-bezier(0.4, 0, 0.2, 1)', // material standard\n in: 'cubic-bezier(0.4, 0, 1, 1)', // accelerate\n out: 'cubic-bezier(0, 0, 0.2, 1)', // decelerate\n inOut: 'cubic-bezier(0.4, 0, 0.2, 1)', // symmetric\n spring: 'cubic-bezier(0.34, 1.56, 0.64, 1)', // overshoot bounce\n bounce: 'cubic-bezier(0.68, -0.55, 0.27, 1.55)', // elastic\n} as const\n\n// spring physics presets — tension / friction pairs\n// formula: force = (target - current) × tension - velocity × friction\nexport const springPresets = {\n default: { tension: 170, friction: 26 }, // balanced, general purpose\n gentle: { tension: 120, friction: 14 }, // slow, floaty\n bouncy: { tension: 300, friction: 10 }, // snappy with overshoot\n stiff: { tension: 400, friction: 28 }, // fast, no overshoot\n slow: { tension: 100, friction: 20 }, // deliberate, heavy\n} as const\n\nexport type SpringPresetId = keyof typeof springPresets\n\n// keyframe presets — named animation patterns\nexport const keyframePresets = {\n fadeIn: { from: { opacity: 0 }, to: { opacity: 1 } },\n fadeOut: { from: { opacity: 1 }, to: { opacity: 0 } },\n scaleIn: { from: { opacity: 0, transform: 'scale(0.95)' }, to: { opacity: 1, transform: 'scale(1)' } },\n scaleOut: { from: { opacity: 1, transform: 'scale(1)' }, to: { opacity: 0, transform: 'scale(0.95)' } },\n slideUp: { from: { opacity: 0, transform: 'translateY(8px)' }, to: { opacity: 1, transform: 'translateY(0)' } },\n slideDown: { from: { opacity: 0, transform: 'translateY(-8px)' }, to: { opacity: 1, transform: 'translateY(0)' } },\n slideLeft: { from: { opacity: 0, transform: 'translateX(8px)' }, to: { opacity: 1, transform: 'translateX(0)' } },\n slideRight: { from: { opacity: 0, transform: 'translateX(-8px)' }, to: { opacity: 1, transform: 'translateX(0)' } },\n} as const\n\nexport type KeyframePresetId = keyof typeof keyframePresets\n\nexport function motionToCssVars(level: MotionLevel): Record<string, string> {\n return {\n '--gds-duration-fast': `${duration('fast', level)}ms`,\n '--gds-duration-normal': `${duration('normal', level)}ms`,\n '--gds-duration-slow': `${duration('slow', level)}ms`,\n '--gds-duration-slower': `${duration('slower', level)}ms`,\n '--gds-ease-default': easing.default,\n '--gds-ease-in': easing.in,\n '--gds-ease-out': easing.out,\n '--gds-ease-spring': easing.spring,\n }\n}\n","// L0 — font system\n// 3 stacks × font presets for every use case\n// supports CJK 4-language (en, zh, ja, ko) mixed typesetting\n\n// === 3 font stacks, each irreplaceable ===\nexport const fontStack = {\n // proportional body text: headings, paragraphs, CJK mixed content\n sans: [\n 'Inter',\n '\"Noto Sans SC\"', // chinese simplified\n '\"Noto Sans JP\"', // japanese\n '\"Noto Sans KR\"', // korean\n 'system-ui',\n '-apple-system',\n 'sans-serif',\n ].join(', '),\n\n // code and terminal: always monospaced, coding ligatures, slashed zero\n mono: [\n '\"JetBrains Mono\"',\n '\"Noto Sans Mono\"',\n 'ui-monospace',\n 'Consolas',\n 'monospace',\n ].join(', '),\n\n // UI equal-width without code aesthetic: Roboto Flex with variable MONO axis\n // MONO=0 → proportional (like sans), MONO=1 → equal-width (like mono, but sans-serif style)\n // use for: table headers, dashboard numbers, badges, aligned labels\n flex: [\n '\"Roboto Flex\"',\n 'system-ui',\n 'sans-serif',\n ].join(', '),\n} as const\n\n// Roboto Flex MONO axis: 0 = proportional, 1 = monospaced\n// use via font-variation-settings: 'MONO' <value>\nexport const flexMono = {\n proportional: \"'MONO' 0\",\n half: \"'MONO' 0.5\",\n full: \"'MONO' 1\",\n} as const\n\n// === font weights ===\nexport const fontWeight = {\n light: 300, // placeholder, secondary caption, fine print\n regular: 400, // body text, default\n medium: 500, // labels, buttons, emphasis\n semibold: 600, // headings, table headers, strong labels\n bold: 700, // primary headings, hero text\n} as const\n\nexport type FontWeightKey = keyof typeof fontWeight\n\n// === OpenType features ===\nexport const fontFeature = {\n tabular: \"'tnum' 1\", // fixed-width digits (tables, prices)\n slashedZero: \"'zero' 1\", // distinguish 0 from O\n tabularSlashed: \"'tnum' 1, 'zero' 1\", // both — finance, code-like data\n proportional: \"'pnum' 1\", // proportional digits (body text)\n ligatures: \"'liga' 1, 'calt' 1\", // code ligatures (!=, =>, ->)\n cjkPunct: \"'halt' 1\", // CJK punctuation half-width\n} as const\n\n// === font presets — complete recipe for each use case ===\n// preset = stack + weight + size + leading + tracking + features\nexport type FontPreset = {\n family: 'flex' | 'mono' | 'sans'\n weight: number\n size: string\n leading: number\n tracking: string\n features: string\n italic?: boolean\n variation?: string // font-variation-settings (for Roboto Flex MONO axis)\n}\n\nexport const fontPreset: Record<string, FontPreset> = {\n // headings — sans, proportional\n h1: { family: 'sans', weight: 700, size: '1.5rem', leading: 1.2, tracking: '-0.025em', features: '' },\n h2: { family: 'sans', weight: 600, size: '1.25rem', leading: 1.25, tracking: '-0.02em', features: '' },\n h3: { family: 'sans', weight: 600, size: '1.125rem', leading: 1.3, tracking: '-0.015em', features: '' },\n h4: { family: 'sans', weight: 600, size: '1rem', leading: 1.35, tracking: '-0.01em', features: '' },\n h5: { family: 'sans', weight: 600, size: '0.875rem', leading: 1.4, tracking: '0', features: '' },\n h6: { family: 'sans', weight: 600, size: '0.75rem', leading: 1.4, tracking: '0.01em', features: '' },\n\n // body text — sans, proportional, relaxed reading\n body: { family: 'sans', weight: 400, size: '0.875rem', leading: 1.6, tracking: '0', features: '' },\n bodySmall:{ family: 'sans', weight: 400, size: '0.8125rem', leading: 1.5, tracking: '0', features: '' },\n\n // ui elements — flex with MONO=1 for equal-width alignment\n label: { family: 'flex', weight: 500, size: '0.75rem', leading: 1.4, tracking: '0.01em', features: '', variation: flexMono.full },\n caption: { family: 'sans', weight: 400, size: '0.6875rem', leading: 1.4, tracking: '0.01em', features: '' },\n badge: { family: 'flex', weight: 600, size: '0.625rem', leading: 1, tracking: '0.03em', features: '', variation: flexMono.full },\n button: { family: 'sans', weight: 500, size: '0.8125rem', leading: 1, tracking: '0.01em', features: '' },\n\n // code / terminal — mono, always equal-width, code aesthetic\n code: { family: 'mono', weight: 400, size: '0.8125rem', leading: 1.6, tracking: '0', features: fontFeature.ligatures },\n codeSmall:{ family: 'mono', weight: 400, size: '0.6875rem', leading: 1.5, tracking: '0', features: fontFeature.ligatures },\n\n // finance / tabular data — flex with MONO for column alignment\n finance: { family: 'flex', weight: 400, size: '0.875rem', leading: 1.4, tracking: '0', features: '', variation: flexMono.full },\n price: { family: 'flex', weight: 600, size: '1rem', leading: 1, tracking: '-0.01em', features: '', variation: flexMono.full },\n tableNum: { family: 'flex', weight: 400, size: '0.75rem', leading: 1.4, tracking: '0', features: '', variation: flexMono.full },\n tableHead:{ family: 'flex', weight: 500, size: '0.6875rem', leading: 1.4, tracking: '0.02em', features: '', variation: flexMono.full },\n\n // japanese fullwidth context\n jpFull: { family: 'sans', weight: 400, size: '0.875rem', leading: 1.8, tracking: '0.05em', features: fontFeature.cjkPunct },\n} as const\n\nexport type FontPresetKey = keyof typeof fontPreset\n\n// semantic symbol constants — used inline in text\n// ensures consistency across all components (everyone uses the same ✓)\nexport const symbols = {\n // status indicators\n check: '\\u2713', // ✓\n cross: '\\u2715', // ✕\n dot: '\\u25CF', // ●\n ring: '\\u25CB', // ○\n triangle: '\\u25B2', // ▲\n triangleDown: '\\u25BC', // ▼\n diamond: '\\u25C6', // ◆\n square: '\\u25A0', // ■\n\n // arrows\n arrowUp: '\\u2191', // ↑\n arrowDown: '\\u2193', // ↓\n arrowLeft: '\\u2190', // ←\n arrowRight: '\\u2192', // →\n arrowUpDown: '\\u2195', // ↕\n\n // keyboard\n command: '\\u2318', // ⌘\n shift: '\\u21E7', // ⇧\n option: '\\u2325', // ⌥\n control: '\\u2303', // ⌃\n enter: '\\u23CE', // ⏎\n tab: '\\u21E5', // ⇥\n escape: '\\u238B', // ⎋\n backspace: '\\u232B', // ⌫\n delete: '\\u2326', // ⌦\n space: '\\u2423', // ␣\n\n // punctuation / typography\n ellipsis: '\\u2026', // …\n bullet: '\\u2022', // •\n dash: '\\u2014', // —\n ndash: '\\u2013', // –\n middot: '\\u00B7', // ·\n times: '\\u00D7', // ×\n minus: '\\u2212', // − (true minus, not hyphen)\n plus: '+',\n} as const\n\nexport type SymbolKey = keyof typeof symbols\n\n// CSS variable output for font tokens\nexport function fontToCssVars(): Record<string, string> {\n return {\n '--gds-font-sans': fontStack.sans,\n '--gds-font-mono': fontStack.mono,\n '--gds-font-flex': fontStack.flex,\n '--gds-font-light': `${fontWeight.light}`,\n '--gds-font-regular': `${fontWeight.regular}`,\n '--gds-font-medium': `${fontWeight.medium}`,\n '--gds-font-semibold': `${fontWeight.semibold}`,\n '--gds-font-bold': `${fontWeight.bold}`,\n }\n}\n\n// helper: convert a preset to inline CSS style object\nexport function presetToStyle(key: FontPresetKey): React.CSSProperties {\n const p = fontPreset[key]\n return {\n fontFamily: `var(--gds-font-${p.family})`,\n fontWeight: p.weight,\n fontSize: p.size,\n lineHeight: p.leading,\n letterSpacing: p.tracking,\n ...(p.features ? { fontFeatureSettings: p.features } : {}),\n ...(p.variation ? { fontVariationSettings: p.variation } : {}),\n ...(p.italic ? { fontStyle: 'italic' } : {}),\n }\n}\n","// L0 — generate complete CSS variable set from system functions\n// single source of truth: all dynamic tokens computed here\n// used by: L1 theme (runtime injection), SSR fallback, snapshot tests\n\nimport { deriveDarkPalette, deriveLightPalette, paletteToVars } from './color-derive'\nimport { fontToCssVars } from './font-system'\nimport { glassToCssVars } from './glass-system'\nimport { motionToCssVars } from './motion-system'\nimport { radiusToCssVars } from './radius-system'\nimport { shadowToCssVars } from './shadow-system'\nimport { sizeToCssVars } from './size-system'\n\n// default primary color (blue-500)\nconst DEFAULT_PRIMARY = '#3b82f6'\n\n// generate all dynamic CSS variables for a given mode\n// uses default axis values: shape=default, density=default, elevation=raised, glass=full, motion=full\nexport function generateDefaultCssVars(mode: 'dark' | 'light'): Record<string, string> {\n const palette = mode === 'dark'\n ? deriveDarkPalette(DEFAULT_PRIMARY)\n : deriveLightPalette(DEFAULT_PRIMARY)\n\n return {\n // color (from primaryColor derivation)\n ...paletteToVars(palette, mode),\n // font stacks + weights\n ...fontToCssVars(),\n // radius (shape=default)\n ...radiusToCssVars('default'),\n // size (density=default)\n ...sizeToCssVars('default'),\n // shadow (elevation=raised, mode-aware)\n ...shadowToCssVars('raised', mode),\n // glass (level=full, mode-aware)\n ...glassToCssVars('full', mode),\n // motion (level=full)\n ...motionToCssVars('full'),\n }\n}\n\n// apply CSS variables to a DOM element (usually document.documentElement)\nexport function applyDefaultCssVars(\n element: HTMLElement,\n mode: 'dark' | 'light',\n): void {\n const vars = generateDefaultCssVars(mode)\n for (const [key, val] of Object.entries(vars)) {\n element.style.setProperty(key, val)\n }\n}\n\nexport { DEFAULT_PRIMARY }\n","// L0 — theme axis types + unified resolve\n// axis types are the public API, system functions do the math\n// no hardcoded values here — all delegated to *-system.ts modules\n\nimport { glassToCssVars } from './glass-system'\nimport { motionToCssVars } from './motion-system'\nimport { radiusToCssVars } from './radius-system'\nimport { shadowToCssVars } from './shadow-system'\nimport { sizeToCssVars } from './size-system'\n\n// constrained axis types — the only valid selections\nexport type ThemeShape = 'default' | 'rounded' | 'sharp'\nexport type ThemeDensity = 'comfortable' | 'compact' | 'default'\nexport type ThemeElevation = 'flat' | 'raised' | 'subtle'\nexport type ThemeGlass = 'full' | 'off' | 'subtle'\nexport type ThemeMotion = 'full' | 'off' | 'reduced'\n\n// re-export spring presets from motion system (backward compat)\nexport type { KeyframePresetId, SpringPresetId } from './motion-system'\nexport { easing, springPresets } from './motion-system'\n\n// resolve a complete set of axis selections → flat CSS vars\n// this is the single function L1 theme calls\nexport function resolveAxesToCssVars(\n shape: ThemeShape,\n density: ThemeDensity,\n elevation: ThemeElevation,\n glass: ThemeGlass,\n motion: ThemeMotion,\n mode: 'dark' | 'light',\n): Record<string, string> {\n return {\n ...radiusToCssVars(shape),\n ...sizeToCssVars(density),\n ...shadowToCssVars(elevation, mode),\n ...glassToCssVars(glass, mode),\n ...motionToCssVars(motion),\n }\n}\n"],"mappings":"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"}
|