@goliapkg/gds 0.1.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/LICENSE +21 -0
- package/README.md +101 -0
- package/dist/fonts/Inter-Bold.woff2 +0 -0
- package/dist/fonts/Inter-Italic.woff2 +0 -0
- package/dist/fonts/Inter-Light.woff2 +0 -0
- package/dist/fonts/Inter-Medium.woff2 +0 -0
- package/dist/fonts/Inter-MediumItalic.woff2 +0 -0
- package/dist/fonts/Inter-Regular.woff2 +0 -0
- package/dist/fonts/Inter-SemiBold.woff2 +0 -0
- package/dist/fonts/JetBrainsMono-Bold.woff2 +0 -0
- package/dist/fonts/JetBrainsMono-Medium.woff2 +0 -0
- package/dist/fonts/JetBrainsMono-Regular.woff2 +0 -0
- package/dist/fonts/RobotoFlex-Variable.ttf +0 -0
- package/dist/fonts.css +36 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16866 -0
- package/dist/index.js.map +1 -0
- package/dist/l0-tokens/breakpoint-system.d.ts +20 -0
- package/dist/l0-tokens/breakpoint-system.d.ts.map +1 -0
- package/dist/l0-tokens/color-derive.d.ts +49 -0
- package/dist/l0-tokens/color-derive.d.ts.map +1 -0
- package/dist/l0-tokens/color-health.d.ts +26 -0
- package/dist/l0-tokens/color-health.d.ts.map +1 -0
- package/dist/l0-tokens/color-math.d.ts +28 -0
- package/dist/l0-tokens/color-math.d.ts.map +1 -0
- package/dist/l0-tokens/deps.d.ts +121 -0
- package/dist/l0-tokens/deps.d.ts.map +1 -0
- package/dist/l0-tokens/font-system.d.ts +75 -0
- package/dist/l0-tokens/font-system.d.ts.map +1 -0
- package/dist/l0-tokens/generate-defaults.d.ts +5 -0
- package/dist/l0-tokens/generate-defaults.d.ts.map +1 -0
- package/dist/l0-tokens/gesture-system.d.ts +75 -0
- package/dist/l0-tokens/gesture-system.d.ts.map +1 -0
- package/dist/l0-tokens/glass-system.d.ts +15 -0
- package/dist/l0-tokens/glass-system.d.ts.map +1 -0
- package/dist/l0-tokens/index.d.ts +26 -0
- package/dist/l0-tokens/index.d.ts.map +1 -0
- package/dist/l0-tokens/motion-system.d.ts +121 -0
- package/dist/l0-tokens/motion-system.d.ts.map +1 -0
- package/dist/l0-tokens/radius-system.d.ts +9 -0
- package/dist/l0-tokens/radius-system.d.ts.map +1 -0
- package/dist/l0-tokens/scales.d.ts +9 -0
- package/dist/l0-tokens/scales.d.ts.map +1 -0
- package/dist/l0-tokens/shadow-system.d.ts +3 -0
- package/dist/l0-tokens/shadow-system.d.ts.map +1 -0
- package/dist/l0-tokens/size-system.d.ts +63 -0
- package/dist/l0-tokens/size-system.d.ts.map +1 -0
- package/dist/l1-systems/index.d.ts +4 -0
- package/dist/l1-systems/index.d.ts.map +1 -0
- package/dist/l1-systems/theme.d.ts +31 -0
- package/dist/l1-systems/theme.d.ts.map +1 -0
- package/dist/l1-systems/use-theme.d.ts +23 -0
- package/dist/l1-systems/use-theme.d.ts.map +1 -0
- package/dist/l2-primitives/anchor.d.ts +18 -0
- package/dist/l2-primitives/anchor.d.ts.map +1 -0
- package/dist/l2-primitives/aspect-ratio.d.ts +11 -0
- package/dist/l2-primitives/aspect-ratio.d.ts.map +1 -0
- package/dist/l2-primitives/badge-dot.d.ts +13 -0
- package/dist/l2-primitives/badge-dot.d.ts.map +1 -0
- package/dist/l2-primitives/badge.d.ts +23 -0
- package/dist/l2-primitives/badge.d.ts.map +1 -0
- package/dist/l2-primitives/button.d.ts +28 -0
- package/dist/l2-primitives/button.d.ts.map +1 -0
- package/dist/l2-primitives/divider.d.ts +11 -0
- package/dist/l2-primitives/divider.d.ts.map +1 -0
- package/dist/l2-primitives/dot.d.ts +19 -0
- package/dist/l2-primitives/dot.d.ts.map +1 -0
- package/dist/l2-primitives/focus-ring.d.ts +11 -0
- package/dist/l2-primitives/focus-ring.d.ts.map +1 -0
- package/dist/l2-primitives/glow-effect.d.ts +10 -0
- package/dist/l2-primitives/glow-effect.d.ts.map +1 -0
- package/dist/l2-primitives/gradient-border.d.ts +9 -0
- package/dist/l2-primitives/gradient-border.d.ts.map +1 -0
- package/dist/l2-primitives/highlight.d.ts +13 -0
- package/dist/l2-primitives/highlight.d.ts.map +1 -0
- package/dist/l2-primitives/icon-button.d.ts +22 -0
- package/dist/l2-primitives/icon-button.d.ts.map +1 -0
- package/dist/l2-primitives/index.d.ts +53 -0
- package/dist/l2-primitives/index.d.ts.map +1 -0
- package/dist/l2-primitives/input.d.ts +22 -0
- package/dist/l2-primitives/input.d.ts.map +1 -0
- package/dist/l2-primitives/kbd.d.ts +11 -0
- package/dist/l2-primitives/kbd.d.ts.map +1 -0
- package/dist/l2-primitives/label.d.ts +8 -0
- package/dist/l2-primitives/label.d.ts.map +1 -0
- package/dist/l2-primitives/number-input.d.ts +33 -0
- package/dist/l2-primitives/number-input.d.ts.map +1 -0
- package/dist/l2-primitives/number-stepper.d.ts +8 -0
- package/dist/l2-primitives/number-stepper.d.ts.map +1 -0
- package/dist/l2-primitives/progress.d.ts +19 -0
- package/dist/l2-primitives/progress.d.ts.map +1 -0
- package/dist/l2-primitives/screen-overlay.d.ts +9 -0
- package/dist/l2-primitives/screen-overlay.d.ts.map +1 -0
- package/dist/l2-primitives/scroll-area.d.ts +13 -0
- package/dist/l2-primitives/scroll-area.d.ts.map +1 -0
- package/dist/l2-primitives/separator.d.ts +17 -0
- package/dist/l2-primitives/separator.d.ts.map +1 -0
- package/dist/l2-primitives/skeleton.d.ts +11 -0
- package/dist/l2-primitives/skeleton.d.ts.map +1 -0
- package/dist/l2-primitives/skip-nav.d.ts +8 -0
- package/dist/l2-primitives/skip-nav.d.ts.map +1 -0
- package/dist/l2-primitives/spinner.d.ts +15 -0
- package/dist/l2-primitives/spinner.d.ts.map +1 -0
- package/dist/l2-primitives/textarea.d.ts +20 -0
- package/dist/l2-primitives/textarea.d.ts.map +1 -0
- package/dist/l2-primitives/truncate.d.ts +9 -0
- package/dist/l2-primitives/truncate.d.ts.map +1 -0
- package/dist/l2-primitives/visually-hidden.d.ts +9 -0
- package/dist/l2-primitives/visually-hidden.d.ts.map +1 -0
- package/dist/l3-atoms/animated-number.d.ts +8 -0
- package/dist/l3-atoms/animated-number.d.ts.map +1 -0
- package/dist/l3-atoms/avatar-badge.d.ts +18 -0
- package/dist/l3-atoms/avatar-badge.d.ts.map +1 -0
- package/dist/l3-atoms/avatar.d.ts +28 -0
- package/dist/l3-atoms/avatar.d.ts.map +1 -0
- package/dist/l3-atoms/barcode.d.ts +10 -0
- package/dist/l3-atoms/barcode.d.ts.map +1 -0
- package/dist/l3-atoms/blinking.d.ts +11 -0
- package/dist/l3-atoms/blinking.d.ts.map +1 -0
- package/dist/l3-atoms/checkbox-group.d.ts +20 -0
- package/dist/l3-atoms/checkbox-group.d.ts.map +1 -0
- package/dist/l3-atoms/checkbox.d.ts +15 -0
- package/dist/l3-atoms/checkbox.d.ts.map +1 -0
- package/dist/l3-atoms/chip.d.ts +24 -0
- package/dist/l3-atoms/chip.d.ts.map +1 -0
- package/dist/l3-atoms/copy-button.d.ts +10 -0
- package/dist/l3-atoms/copy-button.d.ts.map +1 -0
- package/dist/l3-atoms/count-badge.d.ts +13 -0
- package/dist/l3-atoms/count-badge.d.ts.map +1 -0
- package/dist/l3-atoms/count-up.d.ts +11 -0
- package/dist/l3-atoms/count-up.d.ts.map +1 -0
- package/dist/l3-atoms/countdown.d.ts +9 -0
- package/dist/l3-atoms/countdown.d.ts.map +1 -0
- package/dist/l3-atoms/cursor-follow.d.ts +16 -0
- package/dist/l3-atoms/cursor-follow.d.ts.map +1 -0
- package/dist/l3-atoms/diff-indicator.d.ts +12 -0
- package/dist/l3-atoms/diff-indicator.d.ts.map +1 -0
- package/dist/l3-atoms/editable.d.ts +11 -0
- package/dist/l3-atoms/editable.d.ts.map +1 -0
- package/dist/l3-atoms/glow-dot.d.ts +12 -0
- package/dist/l3-atoms/glow-dot.d.ts.map +1 -0
- package/dist/l3-atoms/heat-cell.d.ts +17 -0
- package/dist/l3-atoms/heat-cell.d.ts.map +1 -0
- package/dist/l3-atoms/index.d.ts +127 -0
- package/dist/l3-atoms/index.d.ts.map +1 -0
- package/dist/l3-atoms/info-tip.d.ts +11 -0
- package/dist/l3-atoms/info-tip.d.ts.map +1 -0
- package/dist/l3-atoms/key-value.d.ts +13 -0
- package/dist/l3-atoms/key-value.d.ts.map +1 -0
- package/dist/l3-atoms/keyboard-shortcut.d.ts +10 -0
- package/dist/l3-atoms/keyboard-shortcut.d.ts.map +1 -0
- package/dist/l3-atoms/live-dot.d.ts +8 -0
- package/dist/l3-atoms/live-dot.d.ts.map +1 -0
- package/dist/l3-atoms/loading-dots.d.ts +10 -0
- package/dist/l3-atoms/loading-dots.d.ts.map +1 -0
- package/dist/l3-atoms/magnetic-button.d.ts +8 -0
- package/dist/l3-atoms/magnetic-button.d.ts.map +1 -0
- package/dist/l3-atoms/marquee.d.ts +9 -0
- package/dist/l3-atoms/marquee.d.ts.map +1 -0
- package/dist/l3-atoms/meter.d.ts +25 -0
- package/dist/l3-atoms/meter.d.ts.map +1 -0
- package/dist/l3-atoms/online-indicator.d.ts +10 -0
- package/dist/l3-atoms/online-indicator.d.ts.map +1 -0
- package/dist/l3-atoms/overflow-menu.d.ts +15 -0
- package/dist/l3-atoms/overflow-menu.d.ts.map +1 -0
- package/dist/l3-atoms/percentage.d.ts +12 -0
- package/dist/l3-atoms/percentage.d.ts.map +1 -0
- package/dist/l3-atoms/popover.d.ts +15 -0
- package/dist/l3-atoms/popover.d.ts.map +1 -0
- package/dist/l3-atoms/price.d.ts +12 -0
- package/dist/l3-atoms/price.d.ts.map +1 -0
- package/dist/l3-atoms/progress-circle.d.ts +12 -0
- package/dist/l3-atoms/progress-circle.d.ts.map +1 -0
- package/dist/l3-atoms/pulse-indicator.d.ts +12 -0
- package/dist/l3-atoms/pulse-indicator.d.ts.map +1 -0
- package/dist/l3-atoms/qr-code.d.ts +9 -0
- package/dist/l3-atoms/qr-code.d.ts.map +1 -0
- package/dist/l3-atoms/quick-action.d.ts +20 -0
- package/dist/l3-atoms/quick-action.d.ts.map +1 -0
- package/dist/l3-atoms/radio-group.d.ts +21 -0
- package/dist/l3-atoms/radio-group.d.ts.map +1 -0
- package/dist/l3-atoms/range-slider.d.ts +20 -0
- package/dist/l3-atoms/range-slider.d.ts.map +1 -0
- package/dist/l3-atoms/rating.d.ts +19 -0
- package/dist/l3-atoms/rating.d.ts.map +1 -0
- package/dist/l3-atoms/resize-handle.d.ts +14 -0
- package/dist/l3-atoms/resize-handle.d.ts.map +1 -0
- package/dist/l3-atoms/ribbon.d.ts +15 -0
- package/dist/l3-atoms/ribbon.d.ts.map +1 -0
- package/dist/l3-atoms/ripple-effect.d.ts +8 -0
- package/dist/l3-atoms/ripple-effect.d.ts.map +1 -0
- package/dist/l3-atoms/scroll-to-top.d.ts +7 -0
- package/dist/l3-atoms/scroll-to-top.d.ts.map +1 -0
- package/dist/l3-atoms/segmented-control.d.ts +24 -0
- package/dist/l3-atoms/segmented-control.d.ts.map +1 -0
- package/dist/l3-atoms/skeleton-group.d.ts +9 -0
- package/dist/l3-atoms/skeleton-group.d.ts.map +1 -0
- package/dist/l3-atoms/sparkle.d.ts +9 -0
- package/dist/l3-atoms/sparkle.d.ts.map +1 -0
- package/dist/l3-atoms/split-button.d.ts +29 -0
- package/dist/l3-atoms/split-button.d.ts.map +1 -0
- package/dist/l3-atoms/star-rating.d.ts +11 -0
- package/dist/l3-atoms/star-rating.d.ts.map +1 -0
- package/dist/l3-atoms/status-badge.d.ts +18 -0
- package/dist/l3-atoms/status-badge.d.ts.map +1 -0
- package/dist/l3-atoms/status-dot.d.ts +11 -0
- package/dist/l3-atoms/status-dot.d.ts.map +1 -0
- package/dist/l3-atoms/switch-group.d.ts +15 -0
- package/dist/l3-atoms/switch-group.d.ts.map +1 -0
- package/dist/l3-atoms/switch.d.ts +19 -0
- package/dist/l3-atoms/switch.d.ts.map +1 -0
- package/dist/l3-atoms/tag-input.d.ts +18 -0
- package/dist/l3-atoms/tag-input.d.ts.map +1 -0
- package/dist/l3-atoms/text-badge.d.ts +12 -0
- package/dist/l3-atoms/text-badge.d.ts.map +1 -0
- package/dist/l3-atoms/text-effect.d.ts +15 -0
- package/dist/l3-atoms/text-effect.d.ts.map +1 -0
- package/dist/l3-atoms/textarea-counter.d.ts +13 -0
- package/dist/l3-atoms/textarea-counter.d.ts.map +1 -0
- package/dist/l3-atoms/theme-toggle.d.ts +10 -0
- package/dist/l3-atoms/theme-toggle.d.ts.map +1 -0
- package/dist/l3-atoms/time-since.d.ts +9 -0
- package/dist/l3-atoms/time-since.d.ts.map +1 -0
- package/dist/l3-atoms/toggle-group.d.ts +25 -0
- package/dist/l3-atoms/toggle-group.d.ts.map +1 -0
- package/dist/l3-atoms/tooltip.d.ts +19 -0
- package/dist/l3-atoms/tooltip.d.ts.map +1 -0
- package/dist/l3-atoms/trend-arrow.d.ts +13 -0
- package/dist/l3-atoms/trend-arrow.d.ts.map +1 -0
- package/dist/l3-atoms/truncated-list.d.ts +13 -0
- package/dist/l3-atoms/truncated-list.d.ts.map +1 -0
- package/dist/l3-atoms/typewriter.d.ts +10 -0
- package/dist/l3-atoms/typewriter.d.ts.map +1 -0
- package/dist/l3-atoms/verified-badge.d.ts +11 -0
- package/dist/l3-atoms/verified-badge.d.ts.map +1 -0
- package/dist/l3-atoms/visual-counter.d.ts +18 -0
- package/dist/l3-atoms/visual-counter.d.ts.map +1 -0
- package/dist/l4-molecules/accordion.d.ts +19 -0
- package/dist/l4-molecules/accordion.d.ts.map +1 -0
- package/dist/l4-molecules/action-card.d.ts +15 -0
- package/dist/l4-molecules/action-card.d.ts.map +1 -0
- package/dist/l4-molecules/action-menu.d.ts +16 -0
- package/dist/l4-molecules/action-menu.d.ts.map +1 -0
- package/dist/l4-molecules/alert.d.ts +12 -0
- package/dist/l4-molecules/alert.d.ts.map +1 -0
- package/dist/l4-molecules/audit-entry.d.ts +17 -0
- package/dist/l4-molecules/audit-entry.d.ts.map +1 -0
- package/dist/l4-molecules/breadcrumb.d.ts +14 -0
- package/dist/l4-molecules/breadcrumb.d.ts.map +1 -0
- package/dist/l4-molecules/bulk-action-bar.d.ts +10 -0
- package/dist/l4-molecules/bulk-action-bar.d.ts.map +1 -0
- package/dist/l4-molecules/callout.d.ts +13 -0
- package/dist/l4-molecules/callout.d.ts.map +1 -0
- package/dist/l4-molecules/card.d.ts +29 -0
- package/dist/l4-molecules/card.d.ts.map +1 -0
- package/dist/l4-molecules/category-tag.d.ts +14 -0
- package/dist/l4-molecules/category-tag.d.ts.map +1 -0
- package/dist/l4-molecules/cert-badge.d.ts +13 -0
- package/dist/l4-molecules/cert-badge.d.ts.map +1 -0
- package/dist/l4-molecules/chip-group.d.ts +20 -0
- package/dist/l4-molecules/chip-group.d.ts.map +1 -0
- package/dist/l4-molecules/code-block.d.ts +10 -0
- package/dist/l4-molecules/code-block.d.ts.map +1 -0
- package/dist/l4-molecules/collapsible.d.ts +13 -0
- package/dist/l4-molecules/collapsible.d.ts.map +1 -0
- package/dist/l4-molecules/color-picker.d.ts +10 -0
- package/dist/l4-molecules/color-picker.d.ts.map +1 -0
- package/dist/l4-molecules/combobox-list.d.ts +20 -0
- package/dist/l4-molecules/combobox-list.d.ts.map +1 -0
- package/dist/l4-molecules/combobox.d.ts +15 -0
- package/dist/l4-molecules/combobox.d.ts.map +1 -0
- package/dist/l4-molecules/command-menu.d.ts +19 -0
- package/dist/l4-molecules/command-menu.d.ts.map +1 -0
- package/dist/l4-molecules/confirm-dialog.d.ts +15 -0
- package/dist/l4-molecules/confirm-dialog.d.ts.map +1 -0
- package/dist/l4-molecules/context-menu.d.ts +18 -0
- package/dist/l4-molecules/context-menu.d.ts.map +1 -0
- package/dist/l4-molecules/copy-field.d.ts +10 -0
- package/dist/l4-molecules/copy-field.d.ts.map +1 -0
- package/dist/l4-molecules/currency-display.d.ts +14 -0
- package/dist/l4-molecules/currency-display.d.ts.map +1 -0
- package/dist/l4-molecules/currency-input.d.ts +14 -0
- package/dist/l4-molecules/currency-input.d.ts.map +1 -0
- package/dist/l4-molecules/date-display.d.ts +9 -0
- package/dist/l4-molecules/date-display.d.ts.map +1 -0
- package/dist/l4-molecules/date-range-input.d.ts +15 -0
- package/dist/l4-molecules/date-range-input.d.ts.map +1 -0
- package/dist/l4-molecules/dialog.d.ts +15 -0
- package/dist/l4-molecules/dialog.d.ts.map +1 -0
- package/dist/l4-molecules/dock.d.ts +18 -0
- package/dist/l4-molecules/dock.d.ts.map +1 -0
- package/dist/l4-molecules/drawer.d.ts +14 -0
- package/dist/l4-molecules/drawer.d.ts.map +1 -0
- package/dist/l4-molecules/dropdown.d.ts +22 -0
- package/dist/l4-molecules/dropdown.d.ts.map +1 -0
- package/dist/l4-molecules/emoji-picker.d.ts +18 -0
- package/dist/l4-molecules/emoji-picker.d.ts.map +1 -0
- package/dist/l4-molecules/empty-placeholder.d.ts +9 -0
- package/dist/l4-molecules/empty-placeholder.d.ts.map +1 -0
- package/dist/l4-molecules/environment-badge.d.ts +11 -0
- package/dist/l4-molecules/environment-badge.d.ts.map +1 -0
- package/dist/l4-molecules/file-upload.d.ts +14 -0
- package/dist/l4-molecules/file-upload.d.ts.map +1 -0
- package/dist/l4-molecules/filter-bar.d.ts +17 -0
- package/dist/l4-molecules/filter-bar.d.ts.map +1 -0
- package/dist/l4-molecules/form-actions.d.ts +18 -0
- package/dist/l4-molecules/form-actions.d.ts.map +1 -0
- package/dist/l4-molecules/form-field.d.ts +17 -0
- package/dist/l4-molecules/form-field.d.ts.map +1 -0
- package/dist/l4-molecules/hover-card.d.ts +12 -0
- package/dist/l4-molecules/hover-card.d.ts.map +1 -0
- package/dist/l4-molecules/index.d.ts +161 -0
- package/dist/l4-molecules/index.d.ts.map +1 -0
- package/dist/l4-molecules/info-row.d.ts +9 -0
- package/dist/l4-molecules/info-row.d.ts.map +1 -0
- package/dist/l4-molecules/inline-edit.d.ts +11 -0
- package/dist/l4-molecules/inline-edit.d.ts.map +1 -0
- package/dist/l4-molecules/input-group.d.ts +15 -0
- package/dist/l4-molecules/input-group.d.ts.map +1 -0
- package/dist/l4-molecules/input-with-button.d.ts +18 -0
- package/dist/l4-molecules/input-with-button.d.ts.map +1 -0
- package/dist/l4-molecules/kv-table.d.ts +14 -0
- package/dist/l4-molecules/kv-table.d.ts.map +1 -0
- package/dist/l4-molecules/list-item.d.ts +13 -0
- package/dist/l4-molecules/list-item.d.ts.map +1 -0
- package/dist/l4-molecules/loading-overlay.d.ts +10 -0
- package/dist/l4-molecules/loading-overlay.d.ts.map +1 -0
- package/dist/l4-molecules/media-object.d.ts +11 -0
- package/dist/l4-molecules/media-object.d.ts.map +1 -0
- package/dist/l4-molecules/mention-input.d.ts +12 -0
- package/dist/l4-molecules/mention-input.d.ts.map +1 -0
- package/dist/l4-molecules/mention-list.d.ts +13 -0
- package/dist/l4-molecules/mention-list.d.ts.map +1 -0
- package/dist/l4-molecules/metric-row.d.ts +12 -0
- package/dist/l4-molecules/metric-row.d.ts.map +1 -0
- package/dist/l4-molecules/metric-tile.d.ts +15 -0
- package/dist/l4-molecules/metric-tile.d.ts.map +1 -0
- package/dist/l4-molecules/multi-select-list.d.ts +17 -0
- package/dist/l4-molecules/multi-select-list.d.ts.map +1 -0
- package/dist/l4-molecules/multi-select.d.ts +18 -0
- package/dist/l4-molecules/multi-select.d.ts.map +1 -0
- package/dist/l4-molecules/nav-item.d.ts +14 -0
- package/dist/l4-molecules/nav-item.d.ts.map +1 -0
- package/dist/l4-molecules/notification-dot.d.ts +16 -0
- package/dist/l4-molecules/notification-dot.d.ts.map +1 -0
- package/dist/l4-molecules/notification.d.ts +21 -0
- package/dist/l4-molecules/notification.d.ts.map +1 -0
- package/dist/l4-molecules/otp-input.d.ts +11 -0
- package/dist/l4-molecules/otp-input.d.ts.map +1 -0
- package/dist/l4-molecules/page-nav.d.ts +15 -0
- package/dist/l4-molecules/page-nav.d.ts.map +1 -0
- package/dist/l4-molecules/pagination.d.ts +13 -0
- package/dist/l4-molecules/pagination.d.ts.map +1 -0
- package/dist/l4-molecules/panel.d.ts +19 -0
- package/dist/l4-molecules/panel.d.ts.map +1 -0
- package/dist/l4-molecules/password-input.d.ts +17 -0
- package/dist/l4-molecules/password-input.d.ts.map +1 -0
- package/dist/l4-molecules/phone-input.d.ts +17 -0
- package/dist/l4-molecules/phone-input.d.ts.map +1 -0
- package/dist/l4-molecules/progress-steps.d.ts +8 -0
- package/dist/l4-molecules/progress-steps.d.ts.map +1 -0
- package/dist/l4-molecules/quick-stat.d.ts +14 -0
- package/dist/l4-molecules/quick-stat.d.ts.map +1 -0
- package/dist/l4-molecules/radio-card.d.ts +19 -0
- package/dist/l4-molecules/radio-card.d.ts.map +1 -0
- package/dist/l4-molecules/search-input.d.ts +14 -0
- package/dist/l4-molecules/search-input.d.ts.map +1 -0
- package/dist/l4-molecules/select.d.ts +17 -0
- package/dist/l4-molecules/select.d.ts.map +1 -0
- package/dist/l4-molecules/sheet.d.ts +16 -0
- package/dist/l4-molecules/sheet.d.ts.map +1 -0
- package/dist/l4-molecules/slider-field.d.ts +21 -0
- package/dist/l4-molecules/slider-field.d.ts.map +1 -0
- package/dist/l4-molecules/sortable-table.d.ts +21 -0
- package/dist/l4-molecules/sortable-table.d.ts.map +1 -0
- package/dist/l4-molecules/stat-comparison.d.ts +16 -0
- package/dist/l4-molecules/stat-comparison.d.ts.map +1 -0
- package/dist/l4-molecules/status-bar-component.d.ts +7 -0
- package/dist/l4-molecules/status-bar-component.d.ts.map +1 -0
- package/dist/l4-molecules/stepper.d.ts +15 -0
- package/dist/l4-molecules/stepper.d.ts.map +1 -0
- package/dist/l4-molecules/tab-group.d.ts +15 -0
- package/dist/l4-molecules/tab-group.d.ts.map +1 -0
- package/dist/l4-molecules/tabs.d.ts +21 -0
- package/dist/l4-molecules/tabs.d.ts.map +1 -0
- package/dist/l4-molecules/task-item.d.ts +18 -0
- package/dist/l4-molecules/task-item.d.ts.map +1 -0
- package/dist/l4-molecules/time-picker-grid.d.ts +14 -0
- package/dist/l4-molecules/time-picker-grid.d.ts.map +1 -0
- package/dist/l4-molecules/time-picker.d.ts +13 -0
- package/dist/l4-molecules/time-picker.d.ts.map +1 -0
- package/dist/l4-molecules/timeline-item.d.ts +16 -0
- package/dist/l4-molecules/timeline-item.d.ts.map +1 -0
- package/dist/l4-molecules/toast.d.ts +17 -0
- package/dist/l4-molecules/toast.d.ts.map +1 -0
- package/dist/l4-molecules/toggle-field.d.ts +17 -0
- package/dist/l4-molecules/toggle-field.d.ts.map +1 -0
- package/dist/l4-molecules/toolbar-group.d.ts +9 -0
- package/dist/l4-molecules/toolbar-group.d.ts.map +1 -0
- package/dist/l4-molecules/user-info.d.ts +15 -0
- package/dist/l4-molecules/user-info.d.ts.map +1 -0
- package/dist/l4-molecules/user-menu.d.ts +19 -0
- package/dist/l4-molecules/user-menu.d.ts.map +1 -0
- package/dist/l4-molecules/version-badge.d.ts +11 -0
- package/dist/l4-molecules/version-badge.d.ts.map +1 -0
- package/dist/l4-molecules/wizard.d.ts +17 -0
- package/dist/l4-molecules/wizard.d.ts.map +1 -0
- package/dist/l5-organisms/activity-feed.d.ts +15 -0
- package/dist/l5-organisms/activity-feed.d.ts.map +1 -0
- package/dist/l5-organisms/animate-presence.d.ts +11 -0
- package/dist/l5-organisms/animate-presence.d.ts.map +1 -0
- package/dist/l5-organisms/animated-list.d.ts +14 -0
- package/dist/l5-organisms/animated-list.d.ts.map +1 -0
- package/dist/l5-organisms/audio-player.d.ts +8 -0
- package/dist/l5-organisms/audio-player.d.ts.map +1 -0
- package/dist/l5-organisms/audit-log.d.ts +16 -0
- package/dist/l5-organisms/audit-log.d.ts.map +1 -0
- package/dist/l5-organisms/avatar-list.d.ts +22 -0
- package/dist/l5-organisms/avatar-list.d.ts.map +1 -0
- package/dist/l5-organisms/calendar-utils.d.ts +6 -0
- package/dist/l5-organisms/calendar-utils.d.ts.map +1 -0
- package/dist/l5-organisms/calendar.d.ts +9 -0
- package/dist/l5-organisms/calendar.d.ts.map +1 -0
- package/dist/l5-organisms/carousel.d.ts +12 -0
- package/dist/l5-organisms/carousel.d.ts.map +1 -0
- package/dist/l5-organisms/changelog.d.ts +18 -0
- package/dist/l5-organisms/changelog.d.ts.map +1 -0
- package/dist/l5-organisms/command-palette-list.d.ts +11 -0
- package/dist/l5-organisms/command-palette-list.d.ts.map +1 -0
- package/dist/l5-organisms/command-palette.d.ts +18 -0
- package/dist/l5-organisms/command-palette.d.ts.map +1 -0
- package/dist/l5-organisms/comment-thread.d.ts +16 -0
- package/dist/l5-organisms/comment-thread.d.ts.map +1 -0
- package/dist/l5-organisms/confetti-physics.d.ts +16 -0
- package/dist/l5-organisms/confetti-physics.d.ts.map +1 -0
- package/dist/l5-organisms/confetti.d.ts +10 -0
- package/dist/l5-organisms/confetti.d.ts.map +1 -0
- package/dist/l5-organisms/contact-card.d.ts +19 -0
- package/dist/l5-organisms/contact-card.d.ts.map +1 -0
- package/dist/l5-organisms/container-list.d.ts +15 -0
- package/dist/l5-organisms/container-list.d.ts.map +1 -0
- package/dist/l5-organisms/cookie-banner.d.ts +10 -0
- package/dist/l5-organisms/cookie-banner.d.ts.map +1 -0
- package/dist/l5-organisms/cron-schedule.d.ts +9 -0
- package/dist/l5-organisms/cron-schedule.d.ts.map +1 -0
- package/dist/l5-organisms/data-list.d.ts +14 -0
- package/dist/l5-organisms/data-list.d.ts.map +1 -0
- package/dist/l5-organisms/data-table.d.ts +24 -0
- package/dist/l5-organisms/data-table.d.ts.map +1 -0
- package/dist/l5-organisms/date-picker.d.ts +11 -0
- package/dist/l5-organisms/date-picker.d.ts.map +1 -0
- package/dist/l5-organisms/deploy-log.d.ts +13 -0
- package/dist/l5-organisms/deploy-log.d.ts.map +1 -0
- package/dist/l5-organisms/description-list.d.ts +13 -0
- package/dist/l5-organisms/description-list.d.ts.map +1 -0
- package/dist/l5-organisms/diff-algorithm.d.ts +12 -0
- package/dist/l5-organisms/diff-algorithm.d.ts.map +1 -0
- package/dist/l5-organisms/diff-viewer.d.ts +11 -0
- package/dist/l5-organisms/diff-viewer.d.ts.map +1 -0
- package/dist/l5-organisms/email-list-item.d.ts +14 -0
- package/dist/l5-organisms/email-list-item.d.ts.map +1 -0
- package/dist/l5-organisms/embed.d.ts +12 -0
- package/dist/l5-organisms/embed.d.ts.map +1 -0
- package/dist/l5-organisms/employee-card.d.ts +21 -0
- package/dist/l5-organisms/employee-card.d.ts.map +1 -0
- package/dist/l5-organisms/error-boundary.d.ts +18 -0
- package/dist/l5-organisms/error-boundary.d.ts.map +1 -0
- package/dist/l5-organisms/file-browser.d.ts +18 -0
- package/dist/l5-organisms/file-browser.d.ts.map +1 -0
- package/dist/l5-organisms/file-card.d.ts +14 -0
- package/dist/l5-organisms/file-card.d.ts.map +1 -0
- package/dist/l5-organisms/form-builder.d.ts +16 -0
- package/dist/l5-organisms/form-builder.d.ts.map +1 -0
- package/dist/l5-organisms/heatmap-table.d.ts +16 -0
- package/dist/l5-organisms/heatmap-table.d.ts.map +1 -0
- package/dist/l5-organisms/image-preview.d.ts +8 -0
- package/dist/l5-organisms/image-preview.d.ts.map +1 -0
- package/dist/l5-organisms/index.d.ts +125 -0
- package/dist/l5-organisms/index.d.ts.map +1 -0
- package/dist/l5-organisms/infinite-scroll.d.ts +17 -0
- package/dist/l5-organisms/infinite-scroll.d.ts.map +1 -0
- package/dist/l5-organisms/json-node.d.ts +9 -0
- package/dist/l5-organisms/json-node.d.ts.map +1 -0
- package/dist/l5-organisms/json-viewer.d.ts +8 -0
- package/dist/l5-organisms/json-viewer.d.ts.map +1 -0
- package/dist/l5-organisms/kanban.d.ts +20 -0
- package/dist/l5-organisms/kanban.d.ts.map +1 -0
- package/dist/l5-organisms/markdown-editor.d.ts +10 -0
- package/dist/l5-organisms/markdown-editor.d.ts.map +1 -0
- package/dist/l5-organisms/markdown-parser.d.ts +2 -0
- package/dist/l5-organisms/markdown-parser.d.ts.map +1 -0
- package/dist/l5-organisms/markdown-preview.d.ts +7 -0
- package/dist/l5-organisms/markdown-preview.d.ts.map +1 -0
- package/dist/l5-organisms/notification-center.d.ts +23 -0
- package/dist/l5-organisms/notification-center.d.ts.map +1 -0
- package/dist/l5-organisms/notification-toast.d.ts +16 -0
- package/dist/l5-organisms/notification-toast.d.ts.map +1 -0
- package/dist/l5-organisms/parallax.d.ts +10 -0
- package/dist/l5-organisms/parallax.d.ts.map +1 -0
- package/dist/l5-organisms/payslip-card.d.ts +20 -0
- package/dist/l5-organisms/payslip-card.d.ts.map +1 -0
- package/dist/l5-organisms/permission-matrix.d.ts +17 -0
- package/dist/l5-organisms/permission-matrix.d.ts.map +1 -0
- package/dist/l5-organisms/property-editor.d.ts +13 -0
- package/dist/l5-organisms/property-editor.d.ts.map +1 -0
- package/dist/l5-organisms/quick-links.d.ts +17 -0
- package/dist/l5-organisms/quick-links.d.ts.map +1 -0
- package/dist/l5-organisms/recent-activity.d.ts +16 -0
- package/dist/l5-organisms/recent-activity.d.ts.map +1 -0
- package/dist/l5-organisms/responsive-table.d.ts +18 -0
- package/dist/l5-organisms/responsive-table.d.ts.map +1 -0
- package/dist/l5-organisms/rich-select-list.d.ts +12 -0
- package/dist/l5-organisms/rich-select-list.d.ts.map +1 -0
- package/dist/l5-organisms/rich-select.d.ts +19 -0
- package/dist/l5-organisms/rich-select.d.ts.map +1 -0
- package/dist/l5-organisms/search-results.d.ts +18 -0
- package/dist/l5-organisms/search-results.d.ts.map +1 -0
- package/dist/l5-organisms/service-card.d.ts +15 -0
- package/dist/l5-organisms/service-card.d.ts.map +1 -0
- package/dist/l5-organisms/signature-drawing.d.ts +16 -0
- package/dist/l5-organisms/signature-drawing.d.ts.map +1 -0
- package/dist/l5-organisms/signature-pad.d.ts +18 -0
- package/dist/l5-organisms/signature-pad.d.ts.map +1 -0
- package/dist/l5-organisms/sortable-list.d.ts +19 -0
- package/dist/l5-organisms/sortable-list.d.ts.map +1 -0
- package/dist/l5-organisms/spotlight.d.ts +12 -0
- package/dist/l5-organisms/spotlight.d.ts.map +1 -0
- package/dist/l5-organisms/stacked-list.d.ts +20 -0
- package/dist/l5-organisms/stacked-list.d.ts.map +1 -0
- package/dist/l5-organisms/system-health.d.ts +14 -0
- package/dist/l5-organisms/system-health.d.ts.map +1 -0
- package/dist/l5-organisms/table.d.ts +15 -0
- package/dist/l5-organisms/table.d.ts.map +1 -0
- package/dist/l5-organisms/tag-cloud.d.ts +12 -0
- package/dist/l5-organisms/tag-cloud.d.ts.map +1 -0
- package/dist/l5-organisms/task-board.d.ts +22 -0
- package/dist/l5-organisms/task-board.d.ts.map +1 -0
- package/dist/l5-organisms/timeline.d.ts +16 -0
- package/dist/l5-organisms/timeline.d.ts.map +1 -0
- package/dist/l5-organisms/transaction-list.d.ts +15 -0
- package/dist/l5-organisms/transaction-list.d.ts.map +1 -0
- package/dist/l5-organisms/tree.d.ts +17 -0
- package/dist/l5-organisms/tree.d.ts.map +1 -0
- package/dist/l5-organisms/video-controls.d.ts +15 -0
- package/dist/l5-organisms/video-controls.d.ts.map +1 -0
- package/dist/l5-organisms/video-player.d.ts +12 -0
- package/dist/l5-organisms/video-player.d.ts.map +1 -0
- package/dist/l5-organisms/virtual-list.d.ts +13 -0
- package/dist/l5-organisms/virtual-list.d.ts.map +1 -0
- package/dist/l5-organisms/weather-widget.d.ts +17 -0
- package/dist/l5-organisms/weather-widget.d.ts.map +1 -0
- package/dist/l6-charts/area-chart.d.ts +13 -0
- package/dist/l6-charts/area-chart.d.ts.map +1 -0
- package/dist/l6-charts/bar-chart.d.ts +13 -0
- package/dist/l6-charts/bar-chart.d.ts.map +1 -0
- package/dist/l6-charts/box-plot-stats.d.ts +9 -0
- package/dist/l6-charts/box-plot-stats.d.ts.map +1 -0
- package/dist/l6-charts/box-plot.d.ts +15 -0
- package/dist/l6-charts/box-plot.d.ts.map +1 -0
- package/dist/l6-charts/bubble-chart.d.ts +15 -0
- package/dist/l6-charts/bubble-chart.d.ts.map +1 -0
- package/dist/l6-charts/bump-chart.d.ts +10 -0
- package/dist/l6-charts/bump-chart.d.ts.map +1 -0
- package/dist/l6-charts/calendar-heatmap.d.ts +16 -0
- package/dist/l6-charts/calendar-heatmap.d.ts.map +1 -0
- package/dist/l6-charts/candlestick-chart.d.ts +18 -0
- package/dist/l6-charts/candlestick-chart.d.ts.map +1 -0
- package/dist/l6-charts/chord-diagram.d.ts +10 -0
- package/dist/l6-charts/chord-diagram.d.ts.map +1 -0
- package/dist/l6-charts/chord-math.d.ts +22 -0
- package/dist/l6-charts/chord-math.d.ts.map +1 -0
- package/dist/l6-charts/combo-chart.d.ts +13 -0
- package/dist/l6-charts/combo-chart.d.ts.map +1 -0
- package/dist/l6-charts/flow-chart.d.ts +21 -0
- package/dist/l6-charts/flow-chart.d.ts.map +1 -0
- package/dist/l6-charts/funnel-chart.d.ts +12 -0
- package/dist/l6-charts/funnel-chart.d.ts.map +1 -0
- package/dist/l6-charts/gauge.d.ts +12 -0
- package/dist/l6-charts/gauge.d.ts.map +1 -0
- package/dist/l6-charts/heatmap-chart.d.ts +14 -0
- package/dist/l6-charts/heatmap-chart.d.ts.map +1 -0
- package/dist/l6-charts/heatmap-utils.d.ts +23 -0
- package/dist/l6-charts/heatmap-utils.d.ts.map +1 -0
- package/dist/l6-charts/histogram.d.ts +15 -0
- package/dist/l6-charts/histogram.d.ts.map +1 -0
- package/dist/l6-charts/index.d.ts +63 -0
- package/dist/l6-charts/index.d.ts.map +1 -0
- package/dist/l6-charts/line-chart.d.ts +13 -0
- package/dist/l6-charts/line-chart.d.ts.map +1 -0
- package/dist/l6-charts/network-graph.d.ts +20 -0
- package/dist/l6-charts/network-graph.d.ts.map +1 -0
- package/dist/l6-charts/order-book-chart.d.ts +16 -0
- package/dist/l6-charts/order-book-chart.d.ts.map +1 -0
- package/dist/l6-charts/pie-chart.d.ts +14 -0
- package/dist/l6-charts/pie-chart.d.ts.map +1 -0
- package/dist/l6-charts/radar-chart.d.ts +13 -0
- package/dist/l6-charts/radar-chart.d.ts.map +1 -0
- package/dist/l6-charts/radial-bar-chart.d.ts +15 -0
- package/dist/l6-charts/radial-bar-chart.d.ts.map +1 -0
- package/dist/l6-charts/sankey-chart.d.ts +22 -0
- package/dist/l6-charts/sankey-chart.d.ts.map +1 -0
- package/dist/l6-charts/scatter-chart.d.ts +13 -0
- package/dist/l6-charts/scatter-chart.d.ts.map +1 -0
- package/dist/l6-charts/sparkline.d.ts +13 -0
- package/dist/l6-charts/sparkline.d.ts.map +1 -0
- package/dist/l6-charts/stream-chart.d.ts +10 -0
- package/dist/l6-charts/stream-chart.d.ts.map +1 -0
- package/dist/l6-charts/sunburst-chart.d.ts +14 -0
- package/dist/l6-charts/sunburst-chart.d.ts.map +1 -0
- package/dist/l6-charts/sunburst-math.d.ts +11 -0
- package/dist/l6-charts/sunburst-math.d.ts.map +1 -0
- package/dist/l6-charts/timeline-chart.d.ts +14 -0
- package/dist/l6-charts/timeline-chart.d.ts.map +1 -0
- package/dist/l6-charts/treemap-chart.d.ts +17 -0
- package/dist/l6-charts/treemap-chart.d.ts.map +1 -0
- package/dist/l6-charts/violin-plot.d.ts +12 -0
- package/dist/l6-charts/violin-plot.d.ts.map +1 -0
- package/dist/l6-charts/waffle-chart.d.ts +14 -0
- package/dist/l6-charts/waffle-chart.d.ts.map +1 -0
- package/dist/l6-charts/waveform-display.d.ts +12 -0
- package/dist/l6-charts/waveform-display.d.ts.map +1 -0
- package/dist/l6-charts/word-cloud.d.ts +13 -0
- package/dist/l6-charts/word-cloud.d.ts.map +1 -0
- package/dist/l7-patterns/action-bar.d.ts +13 -0
- package/dist/l7-patterns/action-bar.d.ts.map +1 -0
- package/dist/l7-patterns/admin-layout.d.ts +12 -0
- package/dist/l7-patterns/admin-layout.d.ts.map +1 -0
- package/dist/l7-patterns/analytics-dashboard.d.ts +11 -0
- package/dist/l7-patterns/analytics-dashboard.d.ts.map +1 -0
- package/dist/l7-patterns/bento-grid.d.ts +11 -0
- package/dist/l7-patterns/bento-grid.d.ts.map +1 -0
- package/dist/l7-patterns/calendar-view.d.ts +19 -0
- package/dist/l7-patterns/calendar-view.d.ts.map +1 -0
- package/dist/l7-patterns/comparison-table.d.ts +13 -0
- package/dist/l7-patterns/comparison-table.d.ts.map +1 -0
- package/dist/l7-patterns/composition-pattern.d.ts +13 -0
- package/dist/l7-patterns/composition-pattern.d.ts.map +1 -0
- package/dist/l7-patterns/cta-banner.d.ts +13 -0
- package/dist/l7-patterns/cta-banner.d.ts.map +1 -0
- package/dist/l7-patterns/dashboard-layout.d.ts +12 -0
- package/dist/l7-patterns/dashboard-layout.d.ts.map +1 -0
- package/dist/l7-patterns/data-export-card.d.ts +17 -0
- package/dist/l7-patterns/data-export-card.d.ts.map +1 -0
- package/dist/l7-patterns/devops-layout.d.ts +21 -0
- package/dist/l7-patterns/devops-layout.d.ts.map +1 -0
- package/dist/l7-patterns/empty-state.d.ts +10 -0
- package/dist/l7-patterns/empty-state.d.ts.map +1 -0
- package/dist/l7-patterns/faq.d.ts +12 -0
- package/dist/l7-patterns/faq.d.ts.map +1 -0
- package/dist/l7-patterns/feature-card.d.ts +11 -0
- package/dist/l7-patterns/feature-card.d.ts.map +1 -0
- package/dist/l7-patterns/footer.d.ts +18 -0
- package/dist/l7-patterns/footer.d.ts.map +1 -0
- package/dist/l7-patterns/form-layout.d.ts +10 -0
- package/dist/l7-patterns/form-layout.d.ts.map +1 -0
- package/dist/l7-patterns/form-pattern.d.ts +16 -0
- package/dist/l7-patterns/form-pattern.d.ts.map +1 -0
- package/dist/l7-patterns/glass-panel.d.ts +12 -0
- package/dist/l7-patterns/glass-panel.d.ts.map +1 -0
- package/dist/l7-patterns/grid-layout.d.ts +17 -0
- package/dist/l7-patterns/grid-layout.d.ts.map +1 -0
- package/dist/l7-patterns/hero.d.ts +12 -0
- package/dist/l7-patterns/hero.d.ts.map +1 -0
- package/dist/l7-patterns/hr-dashboard.d.ts +13 -0
- package/dist/l7-patterns/hr-dashboard.d.ts.map +1 -0
- package/dist/l7-patterns/inbox-layout.d.ts +9 -0
- package/dist/l7-patterns/inbox-layout.d.ts.map +1 -0
- package/dist/l7-patterns/index.d.ts +111 -0
- package/dist/l7-patterns/index.d.ts.map +1 -0
- package/dist/l7-patterns/kpi-dashboard.d.ts +18 -0
- package/dist/l7-patterns/kpi-dashboard.d.ts.map +1 -0
- package/dist/l7-patterns/loading-states.d.ts +10 -0
- package/dist/l7-patterns/loading-states.d.ts.map +1 -0
- package/dist/l7-patterns/login-form.d.ts +21 -0
- package/dist/l7-patterns/login-form.d.ts.map +1 -0
- package/dist/l7-patterns/mail-composer.d.ts +12 -0
- package/dist/l7-patterns/mail-composer.d.ts.map +1 -0
- package/dist/l7-patterns/masonry.d.ts +9 -0
- package/dist/l7-patterns/masonry.d.ts.map +1 -0
- package/dist/l7-patterns/media-grid.d.ts +17 -0
- package/dist/l7-patterns/media-grid.d.ts.map +1 -0
- package/dist/l7-patterns/metric-card.d.ts +12 -0
- package/dist/l7-patterns/metric-card.d.ts.map +1 -0
- package/dist/l7-patterns/mini-dashboard.d.ts +9 -0
- package/dist/l7-patterns/mini-dashboard.d.ts.map +1 -0
- package/dist/l7-patterns/monitor-grid.d.ts +8 -0
- package/dist/l7-patterns/monitor-grid.d.ts.map +1 -0
- package/dist/l7-patterns/nav-bar.d.ts +17 -0
- package/dist/l7-patterns/nav-bar.d.ts.map +1 -0
- package/dist/l7-patterns/notification-list.d.ts +19 -0
- package/dist/l7-patterns/notification-list.d.ts.map +1 -0
- package/dist/l7-patterns/onboarding-card.d.ts +16 -0
- package/dist/l7-patterns/onboarding-card.d.ts.map +1 -0
- package/dist/l7-patterns/page-header.d.ts +15 -0
- package/dist/l7-patterns/page-header.d.ts.map +1 -0
- package/dist/l7-patterns/payroll-dashboard.d.ts +13 -0
- package/dist/l7-patterns/payroll-dashboard.d.ts.map +1 -0
- package/dist/l7-patterns/pricing-card.d.ts +13 -0
- package/dist/l7-patterns/pricing-card.d.ts.map +1 -0
- package/dist/l7-patterns/profile-card.d.ts +17 -0
- package/dist/l7-patterns/profile-card.d.ts.map +1 -0
- package/dist/l7-patterns/project-dashboard.d.ts +12 -0
- package/dist/l7-patterns/project-dashboard.d.ts.map +1 -0
- package/dist/l7-patterns/responsive-container.d.ts +9 -0
- package/dist/l7-patterns/responsive-container.d.ts.map +1 -0
- package/dist/l7-patterns/server-overview.d.ts +18 -0
- package/dist/l7-patterns/server-overview.d.ts.map +1 -0
- package/dist/l7-patterns/settings-layout.d.ts +14 -0
- package/dist/l7-patterns/settings-layout.d.ts.map +1 -0
- package/dist/l7-patterns/sidebar.d.ts +13 -0
- package/dist/l7-patterns/sidebar.d.ts.map +1 -0
- package/dist/l7-patterns/skeleton-pattern.d.ts +10 -0
- package/dist/l7-patterns/skeleton-pattern.d.ts.map +1 -0
- package/dist/l7-patterns/splash-screen.d.ts +14 -0
- package/dist/l7-patterns/splash-screen.d.ts.map +1 -0
- package/dist/l7-patterns/split-view.d.ts +17 -0
- package/dist/l7-patterns/split-view.d.ts.map +1 -0
- package/dist/l7-patterns/stat-grid.d.ts +8 -0
- package/dist/l7-patterns/stat-grid.d.ts.map +1 -0
- package/dist/l7-patterns/stats-card.d.ts +12 -0
- package/dist/l7-patterns/stats-card.d.ts.map +1 -0
- package/dist/l7-patterns/status-page.d.ts +12 -0
- package/dist/l7-patterns/status-page.d.ts.map +1 -0
- package/dist/l7-patterns/stepper-form.d.ts +20 -0
- package/dist/l7-patterns/stepper-form.d.ts.map +1 -0
- package/dist/l7-patterns/sticky-header.d.ts +10 -0
- package/dist/l7-patterns/sticky-header.d.ts.map +1 -0
- package/dist/l7-patterns/testimonial.d.ts +11 -0
- package/dist/l7-patterns/testimonial.d.ts.map +1 -0
- package/dist/l7-patterns/timeline-steps.d.ts +11 -0
- package/dist/l7-patterns/timeline-steps.d.ts.map +1 -0
- package/dist/l7-patterns/toolbar.d.ts +14 -0
- package/dist/l7-patterns/toolbar.d.ts.map +1 -0
- package/dist/l7-patterns/wizard-layout.d.ts +15 -0
- package/dist/l7-patterns/wizard-layout.d.ts.map +1 -0
- package/dist/tokens.css +252 -0
- package/dist/utils/a11y.d.ts +3 -0
- package/dist/utils/a11y.d.ts.map +1 -0
- package/dist/utils/cx.d.ts +3 -0
- package/dist/utils/cx.d.ts.map +1 -0
- package/dist/utils/dom.d.ts +5 -0
- package/dist/utils/dom.d.ts.map +1 -0
- package/dist/utils/gesture.d.ts +25 -0
- package/dist/utils/gesture.d.ts.map +1 -0
- package/dist/utils/glass.d.ts +5 -0
- package/dist/utils/glass.d.ts.map +1 -0
- package/dist/utils/hooks.d.ts +8 -0
- package/dist/utils/hooks.d.ts.map +1 -0
- package/dist/utils/index.d.ts +10 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/motion.d.ts +3 -0
- package/dist/utils/motion.d.ts.map +1 -0
- package/dist/utils/types.d.ts +40 -0
- package/dist/utils/types.d.ts.map +1 -0
- package/llms-full.txt +770 -0
- package/llms.txt +49 -0
- package/package.json +108 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["cx"],"sources":["../src/l0-tokens/deps.ts","../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/breakpoint-system.ts","../src/l0-tokens/font-system.ts","../src/l0-tokens/generate-defaults.ts","../src/l0-tokens/gesture-system.ts","../src/l0-tokens/scales.ts","../src/l1-systems/theme.ts","../src/l1-systems/use-theme.ts","../node_modules/clsx/dist/clsx.mjs","../node_modules/class-variance-authority/dist/index.mjs","../src/utils/a11y.ts","../node_modules/tailwind-merge/dist/bundle-mjs.mjs","../src/utils/cx.ts","../src/l2-primitives/anchor.tsx","../src/l2-primitives/aspect-ratio.tsx","../src/utils/glass.ts","../src/l2-primitives/badge.tsx","../src/l2-primitives/badge-dot.tsx","../src/utils/motion.ts","../src/l2-primitives/button.tsx","../src/l2-primitives/divider.tsx","../src/l2-primitives/dot.tsx","../src/l2-primitives/focus-ring.tsx","../src/l2-primitives/glow-effect.tsx","../src/l2-primitives/gradient-border.tsx","../src/l2-primitives/highlight.tsx","../src/l2-primitives/icon-button.tsx","../src/l2-primitives/input.tsx","../src/l2-primitives/kbd.tsx","../src/l2-primitives/label.tsx","../src/l2-primitives/number-stepper.tsx","../src/l2-primitives/number-input.tsx","../src/l2-primitives/progress.tsx","../src/l2-primitives/screen-overlay.tsx","../src/l2-primitives/scroll-area.tsx","../src/l2-primitives/separator.tsx","../src/l2-primitives/skeleton.tsx","../src/l2-primitives/skip-nav.tsx","../src/l2-primitives/spinner.tsx","../src/l2-primitives/textarea.tsx","../src/l2-primitives/truncate.tsx","../src/l2-primitives/visually-hidden.tsx","../src/l3-atoms/animated-number.tsx","../src/l3-atoms/avatar.tsx","../src/l3-atoms/avatar-badge.tsx","../src/l3-atoms/barcode.tsx","../src/l3-atoms/blinking.tsx","../src/l3-atoms/checkbox.tsx","../src/l3-atoms/checkbox-group.tsx","../src/l3-atoms/chip.tsx","../src/l3-atoms/copy-button.tsx","../src/l3-atoms/count-badge.tsx","../src/l3-atoms/count-up.tsx","../src/l3-atoms/countdown.tsx","../src/utils/dom.ts","../src/l3-atoms/cursor-follow.tsx","../src/l3-atoms/diff-indicator.tsx","../src/l3-atoms/editable.tsx","../src/l3-atoms/glow-dot.tsx","../src/l3-atoms/heat-cell.tsx","../src/l3-atoms/tooltip.tsx","../src/l3-atoms/info-tip.tsx","../src/l3-atoms/key-value.tsx","../src/l3-atoms/keyboard-shortcut.tsx","../src/l3-atoms/live-dot.tsx","../src/l3-atoms/loading-dots.tsx","../src/l3-atoms/magnetic-button.tsx","../src/l3-atoms/marquee.tsx","../src/l3-atoms/meter.tsx","../src/l3-atoms/online-indicator.tsx","../src/utils/hooks.ts","../src/l3-atoms/overflow-menu.tsx","../src/l3-atoms/percentage.tsx","../src/l3-atoms/popover.tsx","../src/l3-atoms/price.tsx","../src/l3-atoms/progress-circle.tsx","../src/l3-atoms/pulse-indicator.tsx","../src/l3-atoms/qr-code.tsx","../src/l3-atoms/quick-action.tsx","../src/l3-atoms/radio-group.tsx","../src/l3-atoms/range-slider.tsx","../src/l3-atoms/rating.tsx","../src/l3-atoms/resize-handle.tsx","../src/l3-atoms/ribbon.tsx","../src/l3-atoms/ripple-effect.tsx","../src/l3-atoms/scroll-to-top.tsx","../src/l3-atoms/segmented-control.tsx","../src/l3-atoms/skeleton-group.tsx","../src/l3-atoms/sparkle.tsx","../src/l3-atoms/split-button.tsx","../src/l3-atoms/star-rating.tsx","../src/l3-atoms/status-badge.tsx","../src/l3-atoms/status-dot.tsx","../src/l3-atoms/switch.tsx","../src/l3-atoms/switch-group.tsx","../src/l3-atoms/tag-input.tsx","../src/l3-atoms/text-badge.tsx","../src/l3-atoms/text-effect.tsx","../src/l3-atoms/textarea-counter.tsx","../src/l3-atoms/theme-toggle.tsx","../src/l3-atoms/time-since.tsx","../src/l3-atoms/toggle-group.tsx","../src/l3-atoms/trend-arrow.tsx","../src/l3-atoms/truncated-list.tsx","../src/l3-atoms/typewriter.tsx","../src/l3-atoms/verified-badge.tsx","../src/l3-atoms/visual-counter.tsx","../src/l4-molecules/accordion.tsx","../src/l4-molecules/action-card.tsx","../src/l4-molecules/action-menu.tsx","../src/l4-molecules/alert.tsx","../src/l4-molecules/audit-entry.tsx","../src/l4-molecules/breadcrumb.tsx","../src/l4-molecules/bulk-action-bar.tsx","../src/l4-molecules/callout.tsx","../src/l4-molecules/card.tsx","../src/l4-molecules/category-tag.tsx","../src/l4-molecules/cert-badge.tsx","../src/l4-molecules/chip-group.tsx","../src/l4-molecules/code-block.tsx","../src/l4-molecules/collapsible.tsx","../src/l4-molecules/color-picker.tsx","../src/l4-molecules/combobox-list.tsx","../src/l4-molecules/combobox.tsx","../src/l4-molecules/command-menu.tsx","../src/l4-molecules/dialog.tsx","../src/l4-molecules/confirm-dialog.tsx","../src/l4-molecules/context-menu.tsx","../src/l4-molecules/copy-field.tsx","../src/l4-molecules/currency-display.tsx","../src/l4-molecules/currency-input.tsx","../src/l4-molecules/date-display.tsx","../src/l4-molecules/date-range-input.tsx","../src/l4-molecules/dock.tsx","../src/l4-molecules/drawer.tsx","../src/l4-molecules/dropdown.tsx","../src/l4-molecules/emoji-picker.tsx","../src/l4-molecules/empty-placeholder.tsx","../src/l4-molecules/environment-badge.tsx","../src/l4-molecules/file-upload.tsx","../src/l4-molecules/filter-bar.tsx","../src/l4-molecules/form-actions.tsx","../src/l4-molecules/form-field.tsx","../src/l4-molecules/hover-card.tsx","../src/l4-molecules/info-row.tsx","../src/l4-molecules/inline-edit.tsx","../src/l4-molecules/input-group.tsx","../src/l4-molecules/input-with-button.tsx","../src/l4-molecules/kv-table.tsx","../src/l4-molecules/list-item.tsx","../src/l4-molecules/loading-overlay.tsx","../src/l4-molecules/media-object.tsx","../src/l4-molecules/mention-list.tsx","../src/l4-molecules/mention-input.tsx","../src/l4-molecules/metric-row.tsx","../src/l4-molecules/metric-tile.tsx","../src/l4-molecules/multi-select-list.tsx","../src/l4-molecules/multi-select.tsx","../src/l4-molecules/nav-item.tsx","../src/l4-molecules/notification.tsx","../src/l4-molecules/notification-dot.tsx","../src/l4-molecules/otp-input.tsx","../src/l4-molecules/page-nav.tsx","../src/l4-molecules/pagination.tsx","../src/l4-molecules/panel.tsx","../src/l4-molecules/password-input.tsx","../src/l4-molecules/phone-input.tsx","../src/l4-molecules/progress-steps.tsx","../src/l4-molecules/quick-stat.tsx","../src/l4-molecules/radio-card.tsx","../src/l4-molecules/search-input.tsx","../src/l4-molecules/select.tsx","../src/l4-molecules/sheet.tsx","../src/l4-molecules/slider-field.tsx","../src/l4-molecules/sortable-table.tsx","../src/l4-molecules/stat-comparison.tsx","../src/l4-molecules/status-bar-component.tsx","../src/l4-molecules/stepper.tsx","../src/l4-molecules/tabs.tsx","../src/l4-molecules/tab-group.tsx","../src/l4-molecules/task-item.tsx","../src/l4-molecules/time-picker-grid.tsx","../src/l4-molecules/time-picker.tsx","../src/l4-molecules/timeline-item.tsx","../src/l4-molecules/toast.tsx","../src/l4-molecules/toggle-field.tsx","../src/l4-molecules/toolbar-group.tsx","../src/l4-molecules/user-info.tsx","../src/l4-molecules/user-menu.tsx","../src/l4-molecules/version-badge.tsx","../src/l4-molecules/wizard.tsx","../src/l5-organisms/activity-feed.tsx","../src/l5-organisms/animate-presence.tsx","../src/l5-organisms/animated-list.tsx","../src/l5-organisms/audio-player.tsx","../src/l5-organisms/audit-log.tsx","../src/l5-organisms/avatar-list.tsx","../src/l5-organisms/calendar-utils.ts","../src/l5-organisms/calendar.tsx","../src/l5-organisms/carousel.tsx","../src/l5-organisms/changelog.tsx","../src/l5-organisms/command-palette-list.tsx","../src/l5-organisms/command-palette.tsx","../src/l5-organisms/comment-thread.tsx","../src/l5-organisms/confetti-physics.ts","../src/l5-organisms/confetti.tsx","../src/l5-organisms/contact-card.tsx","../src/l5-organisms/container-list.tsx","../src/l5-organisms/cookie-banner.tsx","../src/l5-organisms/cron-schedule.tsx","../src/l5-organisms/data-list.tsx","../src/l5-organisms/data-table.tsx","../src/l5-organisms/date-picker.tsx","../src/l5-organisms/deploy-log.tsx","../src/l5-organisms/description-list.tsx","../src/l5-organisms/diff-algorithm.ts","../src/l5-organisms/diff-viewer.tsx","../src/l5-organisms/email-list-item.tsx","../src/l5-organisms/embed.tsx","../src/l5-organisms/employee-card.tsx","../src/l5-organisms/error-boundary.tsx","../src/l5-organisms/file-browser.tsx","../src/l5-organisms/file-card.tsx","../src/l5-organisms/form-builder.tsx","../src/l5-organisms/heatmap-table.tsx","../src/l5-organisms/image-preview.tsx","../src/l5-organisms/infinite-scroll.tsx","../src/l5-organisms/json-node.tsx","../src/l5-organisms/json-viewer.tsx","../src/l5-organisms/kanban.tsx","../src/l5-organisms/markdown-parser.ts","../src/l5-organisms/markdown-preview.tsx","../src/l5-organisms/markdown-editor.tsx","../src/l5-organisms/notification-center.tsx","../src/l5-organisms/notification-toast.tsx","../src/l5-organisms/parallax.tsx","../src/l5-organisms/payslip-card.tsx","../src/l5-organisms/permission-matrix.tsx","../src/l5-organisms/property-editor.tsx","../src/l5-organisms/quick-links.tsx","../src/l5-organisms/recent-activity.tsx","../src/l5-organisms/table.tsx","../src/l5-organisms/responsive-table.tsx","../src/l5-organisms/rich-select-list.tsx","../src/l5-organisms/rich-select.tsx","../src/l5-organisms/search-results.tsx","../src/l5-organisms/service-card.tsx","../src/l5-organisms/signature-drawing.ts","../src/l5-organisms/signature-pad.tsx","../src/l5-organisms/sortable-list.tsx","../src/l5-organisms/spotlight.tsx","../src/l5-organisms/stacked-list.tsx","../src/l5-organisms/system-health.tsx","../src/l5-organisms/tag-cloud.tsx","../src/l5-organisms/task-board.tsx","../src/l5-organisms/timeline.tsx","../src/l5-organisms/transaction-list.tsx","../src/l5-organisms/tree.tsx","../src/l5-organisms/video-controls.tsx","../src/l5-organisms/video-player.tsx","../src/l5-organisms/virtual-list.tsx","../src/l5-organisms/weather-widget.tsx","../src/l6-charts/area-chart.tsx","../src/l6-charts/bar-chart.tsx","../src/l6-charts/box-plot-stats.ts","../src/l6-charts/box-plot.tsx","../src/l6-charts/bubble-chart.tsx","../src/l6-charts/bump-chart.tsx","../src/l6-charts/heatmap-utils.ts","../src/l6-charts/calendar-heatmap.tsx","../src/l6-charts/candlestick-chart.tsx","../src/l6-charts/chord-math.ts","../src/l6-charts/chord-diagram.tsx","../src/l6-charts/combo-chart.tsx","../src/l6-charts/flow-chart.tsx","../src/l6-charts/funnel-chart.tsx","../src/l6-charts/gauge.tsx","../src/l6-charts/heatmap-chart.tsx","../src/l6-charts/histogram.tsx","../src/l6-charts/line-chart.tsx","../src/l6-charts/network-graph.tsx","../src/l6-charts/order-book-chart.tsx","../src/l6-charts/pie-chart.tsx","../src/l6-charts/radar-chart.tsx","../src/l6-charts/radial-bar-chart.tsx","../src/l6-charts/sankey-chart.tsx","../src/l6-charts/scatter-chart.tsx","../src/l6-charts/sparkline.tsx","../src/l6-charts/stream-chart.tsx","../src/l6-charts/sunburst-math.ts","../src/l6-charts/sunburst-chart.tsx","../src/l6-charts/timeline-chart.tsx","../src/l6-charts/treemap-chart.tsx","../src/l6-charts/violin-plot.tsx","../src/l6-charts/waffle-chart.tsx","../src/l6-charts/waveform-display.tsx","../src/l6-charts/word-cloud.tsx","../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-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":["// L-dep — dependency manifest\n// documents every external dependency, its role, and layer constraints\n\nexport type DepInfo = {\n name: string\n version: string\n role: string\n layer: 'L-dep'\n type: 'peer' | 'runtime' | 'dev'\n usedBy: string[]\n}\n\nexport const GDS_DEPS: DepInfo[] = [\n // peer — provided by consumer app\n {\n name: 'react',\n version: '>=19.0.0',\n role: 'UI runtime — component rendering, hooks, reconciler',\n layer: 'L-dep',\n type: 'peer',\n usedBy: ['L1-systems', 'L2-primitives', 'L3+'],\n },\n {\n name: 'react-dom',\n version: '>=19.0.0',\n role: 'DOM binding for React — portal, createRoot',\n layer: 'L-dep',\n type: 'peer',\n usedBy: ['L1-systems', 'L5-organisms'],\n },\n\n // runtime — bundled with gds\n {\n name: 'tailwindcss',\n version: '^4.2.1',\n role: 'CSS engine — utility-first classes, @theme mapping, @utility registration',\n layer: 'L-dep',\n type: 'runtime',\n usedBy: ['L0-tokens'],\n },\n {\n name: 'clsx',\n version: '^2.1.1',\n role: 'conditional className joining — lightweight boolean class logic',\n layer: 'L-dep',\n type: 'runtime',\n usedBy: ['L2+'],\n },\n {\n name: 'tailwind-merge',\n version: '^3.5.0',\n role: 'deduplicates conflicting Tailwind classes — powers cx() utility',\n layer: 'L-dep',\n type: 'runtime',\n usedBy: ['L2+'],\n },\n {\n name: 'class-variance-authority',\n version: '^0.7.1',\n role: 'type-safe variant API — cva() for component variant definitions',\n layer: 'L-dep',\n type: 'runtime',\n usedBy: ['L3-atoms', 'L4-molecules'],\n },\n {\n name: 'jotai',\n version: '^2.18.1',\n role: 'atomic state management — theme, i18n, responsive atoms',\n layer: 'L-dep',\n type: 'runtime',\n usedBy: ['L1-systems'],\n },\n {\n name: 'lucide-react',\n version: '^0.577.0',\n role: 'icon library — 1500+ SVG icons as React components',\n layer: 'L-dep',\n type: 'runtime',\n usedBy: ['L3-atoms', 'L4-molecules', 'L5-organisms'],\n },\n {\n name: 'recharts',\n version: '^3.8.0',\n role: 'chart foundation — ResponsiveContainer, ComposedChart, RadialBarChart',\n layer: 'L-dep',\n type: 'runtime',\n usedBy: ['L6-charts'],\n },\n]\n\n// internal utilities — part of L-dep, available to all layers\n// these wrap external deps so components never import clsx/twMerge/cva directly\nexport const GDS_INTERNAL_UTILS = [\n { name: 'cx', module: 'utils/cx', role: 'class merging (clsx + tailwind-merge)', usedBy: 'L2+' },\n { name: 'focusCls', module: 'utils/a11y', role: 'focus ring preset class string', usedBy: 'L2+' },\n { name: 'srOnly', module: 'utils/a11y', role: 'screen-reader-only class string', usedBy: 'L2+' },\n { name: 'mergeRefs', module: 'utils/dom', role: 'combine multiple refs into one', usedBy: 'L2+' },\n { name: 'isActivationKey', module: 'utils/dom', role: 'detect Enter/Space on keydown', usedBy: 'L3+' },\n { name: 'clamp', module: 'utils/dom', role: 'clamp number to min/max', usedBy: 'L2+' },\n { name: 'uid', module: 'utils/dom', role: 'unique id generator for a11y', usedBy: 'L2+' },\n { name: 'VariantProps', module: 'utils/types', role: 'extract variant type from cva()', usedBy: 'L3+' },\n { name: 'MergeProps', module: 'utils/types', role: 'merge native + component props', usedBy: 'L2+' },\n { name: 'AsProps', module: 'utils/types', role: 'polymorphic as prop', usedBy: 'L2' },\n // hooks\n { name: 'useScrollLock', module: 'utils/hooks', role: 'prevent body scroll when overlay open', usedBy: 'L5+' },\n { name: 'useEscapeKey', module: 'utils/hooks', role: 'close overlay on Escape', usedBy: 'L5+' },\n { name: 'useClickOutside', module: 'utils/hooks', role: 'detect click outside element', usedBy: 'L5+' },\n { name: 'useMediaQuery', module: 'utils/hooks', role: 'subscribe to CSS media query', usedBy: 'L2+' },\n { name: 'useIsMobile', module: 'utils/hooks', role: 'boolean mobile breakpoint', usedBy: 'L2+' },\n { name: 'useIsDesktop', module: 'utils/hooks', role: 'boolean desktop breakpoint', usedBy: 'L2+' },\n { name: 'useFocusTrap', module: 'utils/hooks', role: 'trap tab focus in container', usedBy: 'L5+' },\n] as const\n\n// engineering infrastructure — enforced at every layer, not optional\nexport const GDS_INFRA = {\n typecheck: {\n tool: 'typescript',\n config: 'tsconfig.json',\n command: 'bun run typecheck',\n rule: 'zero errors on every commit. strict mode, no any in lib code',\n },\n lint: {\n tool: 'eslint',\n config: 'eslint.config.js',\n command: 'bun run lint',\n rule: 'zero warnings. import sorting, hooks rules, no console',\n },\n test: {\n tool: 'vitest',\n config: 'vitest.config.ts',\n command: 'bun run test',\n rule: 'TDD mandatory. tests BEFORE code. 80% coverage threshold enforced',\n },\n format: {\n tool: 'eslint --fix + prettier (via admin)',\n rule: 'no semicolons, single quotes JS, double quotes JSX, 2-space indent',\n },\n} as const\n\n// dependency constraint: which layers can import which external deps\n// internal utils (cx, focusCls, etc.) are always allowed — they are L-dep\nexport const LAYER_DEP_CONSTRAINTS: Record<string, string[]> = {\n 'L0-tokens': ['tailwindcss'],\n 'L1-systems': ['react', 'jotai'],\n 'L2-primitives': ['react', 'clsx', 'tailwind-merge'],\n 'L3-atoms': ['react', 'clsx', 'tailwind-merge', 'class-variance-authority', 'lucide-react'],\n 'L4-molecules': ['react', 'clsx', 'tailwind-merge', 'class-variance-authority', 'lucide-react'],\n 'L5-organisms': ['react', 'react-dom', 'clsx', 'tailwind-merge', 'class-variance-authority', 'lucide-react'],\n 'L6-charts': ['react', 'clsx', 'tailwind-merge', 'recharts', 'lucide-react'],\n 'L7-patterns': ['react', 'clsx', 'tailwind-merge'],\n}\n","// 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 // ratio vs dark bg (#0f172a)\n contrastOnLight: number // ratio vs light bg (#ffffff)\n contrastWhiteOnColor: number // white text on this color\n contrastBlackOnColor: number // black text on this color\n saturation: number // 0-1\n lightness: number // 0-1\n hue: number // 0-360\n semanticConflict: string | null // 'danger' | 'warning' | 'success' | null\n }\n}\n\n// fixed reference colors\nconst DARK_BG: Rgb = { r: 15, g: 23, b: 42 } // #0f172a\nconst LIGHT_BG: Rgb = { r: 255, g: 255, b: 255 } // #ffffff\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\nexport function scoreColor(hex: string): HealthReport {\n const rgb = hexToRgb(hex)\n const hsl = hexToHsl(hex)\n const diagnostics: HealthDiagnostic[] = []\n let score = 100\n\n // contrast checks\n const contrastOnDark = contrastRatio(rgb, DARK_BG)\n const contrastOnLight = contrastRatio(rgb, LIGHT_BG)\n const contrastWhiteOnColor = contrastRatio(WHITE, rgb)\n const contrastBlackOnColor = contrastRatio(BLACK, rgb)\n\n // 1. contrast on dark bg (most important — dark-native design)\n if (contrastOnDark < 2.5) {\n score -= 30\n diagnostics.push({\n id: 'contrast-dark-fail',\n severity: 'error',\n message: `contrast on dark background too low (${contrastOnDark.toFixed(1)}:1)`,\n suggestion: 'lighten the color or increase saturation',\n })\n } else if (contrastOnDark < 3.5) {\n score -= 15\n diagnostics.push({\n id: 'contrast-dark-low',\n severity: 'warning',\n message: `contrast on dark background is marginal (${contrastOnDark.toFixed(1)}:1)`,\n suggestion: 'consider a slightly lighter variant for better readability',\n })\n }\n\n // 2. contrast on light bg\n if (contrastOnLight < 2.5) {\n score -= 15\n diagnostics.push({\n id: 'contrast-light-fail',\n severity: 'warning',\n message: `contrast on light background too low (${contrastOnLight.toFixed(1)}:1)`,\n suggestion: 'darken the color for light mode usage',\n })\n }\n\n // 3. text readability on the color itself (for accent-fg)\n const bestTextContrast = Math.max(contrastWhiteOnColor, contrastBlackOnColor)\n if (bestTextContrast < 3) {\n score -= 20\n diagnostics.push({\n id: 'text-on-color-fail',\n severity: 'error',\n message: `neither white nor black text is readable on this color (best: ${bestTextContrast.toFixed(1)}:1)`,\n suggestion: 'adjust lightness — avoid the 40-60% lightness midrange',\n })\n } else if (bestTextContrast < 4.5) {\n score -= 8\n diagnostics.push({\n id: 'text-on-color-low',\n severity: 'warning',\n message: `text on this color has limited contrast (${bestTextContrast.toFixed(1)}:1)`,\n suggestion: 'push lightness below 40% or above 60% for clearer text',\n })\n }\n\n // 4. saturation check\n if (hsl.s < 0.2) {\n score -= 15\n diagnostics.push({\n id: 'saturation-low',\n severity: 'warning',\n message: `saturation too low (${(hsl.s * 100).toFixed(0)}%) — color appears grayish`,\n suggestion: 'increase saturation above 30% for a vibrant primary',\n })\n } else if (hsl.s > 0.95) {\n score -= 5\n diagnostics.push({\n id: 'saturation-high',\n severity: 'info',\n message: `very high saturation (${(hsl.s * 100).toFixed(0)}%) — may cause eye strain`,\n suggestion: 'reduce to 70-90% for comfortable prolonged viewing',\n })\n }\n\n // 5. lightness range\n if (hsl.l < 0.15) {\n score -= 20\n diagnostics.push({\n id: 'lightness-too-dark',\n severity: 'error',\n message: `color is too dark (L=${(hsl.l * 100).toFixed(0)}%) — invisible on dark mode`,\n suggestion: 'increase lightness above 30%',\n })\n } else if (hsl.l > 0.85) {\n score -= 15\n diagnostics.push({\n id: 'lightness-too-light',\n severity: 'warning',\n message: `color is too light (L=${(hsl.l * 100).toFixed(0)}%) — weak on light mode`,\n suggestion: 'decrease lightness below 70%',\n })\n }\n\n // 6. semantic conflict check\n let semanticConflict: string | null = null\n for (const range of SEMANTIC_RANGES) {\n if (hsl.h >= range.hueMin && hsl.h <= range.hueMax && hsl.s > 0.4) {\n semanticConflict = range.name\n score -= 10\n diagnostics.push({\n id: 'semantic-conflict',\n severity: 'warning',\n message: `hue (${hsl.h.toFixed(0)}°) overlaps with ${range.name} semantic color`,\n suggestion: 'users may confuse accent with status colors — shift hue away from red/amber/green zones',\n })\n break\n }\n }\n\n // clamp score\n score = Math.max(0, Math.min(100, score))\n\n // determine level\n let level: HealthLevel = 'excellent'\n if (score < 60) level = 'rejected'\n else if (score < 80) level = 'warning'\n else if (score < 90) level = 'good'\n\n return {\n score,\n level,\n diagnostics,\n details: {\n contrastOnDark,\n contrastOnLight,\n contrastWhiteOnColor,\n contrastBlackOnColor,\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\n// prefers white text when both pass minimum readability — white on saturated color\n// looks better than black even when black has slightly higher contrast ratio\nexport function bestTextColor(bgHex: string): '#000000' | '#ffffff' {\n const rgb = hexToRgb(bgHex)\n const white: Rgb = { r: 255, g: 255, b: 255 }\n const black: Rgb = { r: 0, g: 0, b: 0 }\n const whiteContrast = contrastRatio(white, rgb)\n const blackContrast = contrastRatio(black, rgb)\n // prefer white if it passes minimum readability (3:1)\n // only use black when white is clearly too low contrast\n if (whiteContrast >= 3) return '#ffffff'\n if (blackContrast >= 3) return '#000000'\n // fallback: pick the higher one\n return whiteContrast > blackContrast ? '#ffffff' : '#000000'\n}\n\n// auto-fix: take any color → return the highest-scoring version\n// preserves hue intent, adjusts saturation + lightness to maximize health\nexport function autoFixColor(hex: string): string {\n const hsl = hexToHsl(hex)\n let bestHex = hex\n let bestScore = scoreColor(hex).score\n\n // fix saturation: clamp to 0.45-0.85 sweet spot\n const fixedS = Math.max(0.45, Math.min(0.85, hsl.s))\n\n // fix lightness: try a range of lightness values to find best score\n // dark mode needs L=0.50-0.65, light mode needs L=0.35-0.50\n // we optimize for overall (both modes) by targeting L=0.50-0.60\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 // push hue to nearest safe edge\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 // 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-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 — breakpoint system\n// responsive breakpoints with semantic names and overlap detection\n\n// breakpoint scale — mobile-first, min-width values\n// each step is roughly 1.5-2× the mobile base (320px)\nexport const breakpoints = {\n sm: 640, // large phone / small tablet\n md: 768, // tablet portrait\n lg: 1024, // tablet landscape / small laptop\n xl: 1280, // laptop\n '2xl': 1536, // desktop\n} as const\n\nexport type BreakpointKey = keyof typeof breakpoints\n\n// device category detection (from width)\nexport type DeviceCategory = 'mobile' | 'tablet' | 'desktop'\n\nexport function deviceCategory(width: number): DeviceCategory {\n if (width < breakpoints.md) return 'mobile'\n if (width < breakpoints.lg) return 'tablet'\n return 'desktop'\n}\n\n// media query helpers — generate valid CSS media query strings\nexport function minWidth(bp: BreakpointKey): string {\n return `(min-width: ${breakpoints[bp]}px)`\n}\n\nexport function maxWidth(bp: BreakpointKey): string {\n return `(max-width: ${breakpoints[bp] - 1}px)`\n}\n\nexport function between(min: BreakpointKey, max: BreakpointKey): string {\n return `(min-width: ${breakpoints[min]}px) and (max-width: ${breakpoints[max] - 1}px)`\n}\n\n// overlap detection — validate that custom breakpoints don't conflict\nexport function detectOverlap(\n custom: Record<string, number>,\n): { a: string, b: string, overlap: number }[] {\n const sorted = Object.entries(custom).sort(([, a], [, b]) => a - b)\n const overlaps: { a: string, b: string, overlap: number }[] = []\n for (let i = 0; i < sorted.length - 1; i++) {\n const [nameA, valA] = sorted[i]\n const [nameB, valB] = sorted[i + 1]\n if (valA === valB) {\n overlaps.push({ a: nameA, b: nameB, overlap: valA })\n }\n }\n return overlaps\n}\n\nexport function breakpointToCssVars(): Record<string, string> {\n const vars: Record<string, string> = {}\n for (const [key, val] of Object.entries(breakpoints)) {\n vars[`--gds-breakpoint-${key}`] = `${val}px`\n }\n return vars\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 — gesture system\n// touch/pointer gesture recognition primitives\n// defines thresholds, velocities, and directions for gesture detection\n// actual React hooks consume these constants (in L-dep utils/hooks)\n\n// gesture direction\nexport type GestureDirection = 'down' | 'left' | 'right' | 'up'\n\n// swipe detection thresholds\nexport const swipe = {\n // minimum distance (px) to recognize as swipe, not tap\n minDistance: 30,\n // minimum velocity (px/ms) to count as intentional swipe\n minVelocity: 0.3,\n // maximum deviation in cross-axis (px) — prevents diagonal from triggering\n maxCrossDeviation: 75,\n // animation: how long the dismiss/snap animation takes\n dismissDuration: 200,\n // spring config for snap-back when swipe cancelled\n snapBack: { tension: 300, friction: 25 },\n} as const\n\n// pull-to-refresh thresholds\nexport const pullToRefresh = {\n // how far user must pull before refresh triggers\n triggerDistance: 80,\n // maximum pull distance (resistance beyond this)\n maxDistance: 120,\n // resistance factor after triggerDistance (0-1, lower = more resistance)\n resistanceFactor: 0.4,\n // indicator size\n indicatorSize: 32,\n} as const\n\n// pinch zoom thresholds\nexport const pinchZoom = {\n // minimum scale change to start zooming\n minScaleDelta: 0.05,\n // zoom limits\n minScale: 0.5,\n maxScale: 4.0,\n // snap-to scales (double-tap cycles through these)\n snapScales: [1, 2, 3] as readonly number[],\n} as const\n\n// long press\nexport const longPress = {\n // how long to hold before triggering (ms)\n duration: 500,\n // max movement during press before cancel (px)\n maxMovement: 10,\n} as const\n\n// drag\nexport const drag = {\n // minimum distance before drag starts (prevents accidental drag on tap)\n startThreshold: 5,\n // snap-to-edge distance (px) — item snaps to edge when within this range\n snapDistance: 20,\n} as const\n\n// velocity damping — for inertial scroll / flick gestures\nexport const inertia = {\n // friction multiplier per frame (0.95 = slow stop, 0.99 = long coast)\n friction: 0.95,\n // minimum velocity before stopping (px/ms)\n minVelocity: 0.1,\n // maximum velocity clamp (px/ms)\n maxVelocity: 5,\n} as const\n\n// export all thresholds as a single object for L-dep hooks\nexport const gestureConfig = {\n swipe,\n pullToRefresh,\n pinchZoom,\n longPress,\n drag,\n inertia,\n} as const\n\n// CSS vars for gesture-related animations\nexport function gestureToCssVars(): Record<string, string> {\n return {\n '--gds-gesture-dismiss-duration': `${swipe.dismissDuration}ms`,\n '--gds-gesture-snap-tension': `${swipe.snapBack.tension}`,\n '--gds-gesture-snap-friction': `${swipe.snapBack.friction}`,\n '--gds-gesture-pull-trigger': `${pullToRefresh.triggerDistance}px`,\n '--gds-gesture-pull-max': `${pullToRefresh.maxDistance}px`,\n '--gds-gesture-longpress-duration': `${longPress.duration}ms`,\n }\n}\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","// L1 — Theme System\n// manages color preset + 5 dimensional axes + dark/light mode\n// applies CSS variable overrides to document root\n// persists to localStorage, syncs across tabs\n\nimport { atom } from 'jotai'\n\nimport { deriveDarkPalette, deriveLightPalette, paletteToVars } from '../l0-tokens/color-derive'\nimport { fontToCssVars } from '../l0-tokens/font-system'\nimport { DEFAULT_PRIMARY } from '../l0-tokens/generate-defaults'\nimport type {\n ThemeDensity,\n ThemeElevation,\n ThemeGlass,\n ThemeMotion,\n ThemeShape,\n} from '../l0-tokens/scales'\nimport { resolveAxesToCssVars } from '../l0-tokens/scales'\n\n// color overrides — per-token overrides for advanced users\nexport type ThemeColorOverrides = {\n '--gds-accent': string\n '--gds-accent-fg': string\n '--gds-accent-hover': string\n '--gds-danger': string\n '--gds-success': string\n '--gds-warning': string\n}\n\nexport type ThemeMode = 'dark' | 'light' | 'system'\n\n// full theme state — what the user has configured\nexport type ThemeState = {\n mode: ThemeMode\n primaryColor: string // single source — everything derived from this\n presetId: string // for UI display only (\"default\", \"teal\", \"amber\"...)\n // dimensional axes — each constrained to L0 scale options\n shape: ThemeShape\n density: ThemeDensity\n elevation: ThemeElevation\n glass: ThemeGlass\n motion: ThemeMotion\n // optional per-token color overrides (advanced — overrides derivation)\n colorOverrides: Partial<ThemeColorOverrides> | null\n}\n\n// default theme — beautiful out of the box\nexport const DEFAULT_THEME: ThemeState = {\n mode: 'system',\n primaryColor: DEFAULT_PRIMARY,\n presetId: 'default',\n shape: 'default',\n density: 'default',\n elevation: 'raised',\n glass: 'full',\n motion: 'full',\n colorOverrides: null,\n}\n\n// jotai atoms — reactive theme state\nexport const themeAtom = atom<ThemeState>(DEFAULT_THEME)\n\nexport const resolvedModeAtom = atom<'dark' | 'light'>((get) => {\n const { mode } = get(themeAtom)\n if (mode !== 'system') return mode\n if (typeof window === 'undefined') return 'dark'\n return window.matchMedia('(prefers-color-scheme: dark)').matches\n ? 'dark'\n : 'light'\n})\n\n// resolve theme state → flat CSS variable overrides\n// all colors derived from primaryColor via L0 functions — no manual color presets\nexport function resolveThemeCssVars(\n state: ThemeState,\n resolvedMode: 'dark' | 'light',\n): Record<string, string> {\n // 1. derive colors from primaryColor\n const palette = resolvedMode === 'dark'\n ? deriveDarkPalette(state.primaryColor)\n : deriveLightPalette(state.primaryColor)\n const vars: Record<string, string> = { ...paletteToVars(palette, resolvedMode) }\n\n // 2. font stacks + weights\n Object.assign(vars, fontToCssVars())\n\n // 3. dimensional axes — computed by L0 system functions\n Object.assign(vars, resolveAxesToCssVars(\n state.shape, state.density, state.elevation,\n state.glass, state.motion, resolvedMode,\n ))\n\n // 4. per-token color overrides (highest priority — advanced users)\n if (state.colorOverrides !== null) {\n for (const [key, val] of Object.entries(state.colorOverrides)) {\n if (val !== undefined) {\n vars[key] = val\n }\n }\n }\n\n return vars\n}\n\n// apply resolved vars to document\nexport function applyThemeToDocument(\n vars: Record<string, string>,\n resolvedMode: 'dark' | 'light',\n previousKeys?: string[],\n): string[] {\n const root = document.documentElement\n\n // clear previous overrides\n if (previousKeys !== undefined) {\n for (const key of previousKeys) {\n root.style.removeProperty(key)\n }\n }\n\n // set mode attribute\n const mode = root.getAttribute('data-theme-mode')\n if (mode !== resolvedMode) {\n root.setAttribute('data-theme-mode', resolvedMode)\n }\n\n // apply new overrides\n const keys = Object.keys(vars)\n for (const [key, val] of Object.entries(vars)) {\n root.style.setProperty(key, val)\n }\n\n return keys\n}\n\n// persistence keys\nconst STORAGE_KEY = 'gds-theme'\n\nexport function persistTheme(state: ThemeState): void {\n try {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(state))\n } catch {\n // storage full or unavailable\n }\n}\n\nexport function loadPersistedTheme(): ThemeState | null {\n try {\n const raw = localStorage.getItem(STORAGE_KEY)\n if (raw === null) return null\n const parsed = JSON.parse(raw) as Partial<ThemeState>\n // validate and merge with defaults to handle schema evolution\n return {\n ...DEFAULT_THEME,\n ...parsed,\n // validate primaryColor is a hex string\n primaryColor: typeof parsed.primaryColor === 'string' && /^#[0-9a-fA-F]{6}$/.test(parsed.primaryColor)\n ? parsed.primaryColor : DEFAULT_THEME.primaryColor,\n // ensure constrained values are valid\n shape: validateOption(parsed.shape, ['sharp', 'default', 'rounded'], DEFAULT_THEME.shape),\n density: validateOption(parsed.density, ['compact', 'default', 'comfortable'], DEFAULT_THEME.density),\n elevation: validateOption(parsed.elevation, ['flat', 'subtle', 'raised'], DEFAULT_THEME.elevation),\n glass: validateOption(parsed.glass, ['off', 'subtle', 'full'], DEFAULT_THEME.glass),\n motion: validateOption(parsed.motion, ['off', 'reduced', 'full'], DEFAULT_THEME.motion),\n mode: validateOption(parsed.mode, ['light', 'dark', 'system'], DEFAULT_THEME.mode),\n }\n } catch {\n return null\n }\n}\n\nfunction validateOption<T extends string>(\n value: unknown,\n options: T[],\n fallback: T,\n): T {\n if (typeof value === 'string' && options.includes(value as T)) {\n return value as T\n }\n return fallback\n}\n","// L1 — theme hooks\n// components use these to read/write theme state\n// all changes go through constrained API — no raw CSS manipulation\n\nimport { useAtom, useAtomValue } from 'jotai'\nimport { useCallback, useEffect, useRef } from 'react'\n\nimport type { ThemeDensity, ThemeElevation, ThemeGlass, ThemeMotion, ThemeShape } from '../l0-tokens/scales'\nimport type { ThemeColorOverrides, ThemeMode, ThemeState } from './theme'\nimport {\n applyThemeToDocument,\n DEFAULT_THEME,\n loadPersistedTheme,\n persistTheme,\n resolvedModeAtom,\n resolveThemeCssVars,\n themeAtom,\n} from './theme'\n\n// color presets — app registers named presets, each is just a primaryColor\ntype ThemeConfig = {\n colorPresets: Record<string, { primaryColor: string }>\n}\n\nlet themeConfig: ThemeConfig = { colorPresets: {} }\n\n// called once at app init — register named color presets\nexport function configureTheme(config: ThemeConfig): void {\n themeConfig = config\n}\n\n// read current theme state (reactive)\nexport function useTheme(): ThemeState {\n return useAtomValue(themeAtom)\n}\n\n// read resolved dark/light mode (reactive)\nexport function useResolvedMode(): 'dark' | 'light' {\n return useAtomValue(resolvedModeAtom)\n}\n\n// theme mutation hooks — each returns a setter for one axis\nexport function useSetThemeMode(): (mode: ThemeMode) => void {\n const [, setTheme] = useAtom(themeAtom)\n return useCallback((mode: ThemeMode) => {\n setTheme((prev) => ({ ...prev, mode }))\n }, [setTheme])\n}\n\nexport function useSetThemePreset(): (presetId: string) => void {\n const [, setTheme] = useAtom(themeAtom)\n return useCallback((presetId: string) => {\n const preset = themeConfig.colorPresets[presetId]\n const primaryColor = preset?.primaryColor ?? DEFAULT_THEME.primaryColor\n setTheme((prev) => ({ ...prev, presetId, primaryColor, colorOverrides: null }))\n }, [setTheme])\n}\n\nexport function useSetThemePrimaryColor(): (color: string) => void {\n const [, setTheme] = useAtom(themeAtom)\n return useCallback((primaryColor: string) => {\n setTheme((prev) => ({ ...prev, primaryColor, colorOverrides: null }))\n }, [setTheme])\n}\n\nexport function useSetThemeShape(): (shape: ThemeShape) => void {\n const [, setTheme] = useAtom(themeAtom)\n return useCallback((shape: ThemeShape) => {\n setTheme((prev) => ({ ...prev, shape }))\n }, [setTheme])\n}\n\nexport function useSetThemeDensity(): (density: ThemeDensity) => void {\n const [, setTheme] = useAtom(themeAtom)\n return useCallback((density: ThemeDensity) => {\n setTheme((prev) => ({ ...prev, density }))\n }, [setTheme])\n}\n\nexport function useSetThemeElevation(): (elevation: ThemeElevation) => void {\n const [, setTheme] = useAtom(themeAtom)\n return useCallback((elevation: ThemeElevation) => {\n setTheme((prev) => ({ ...prev, elevation }))\n }, [setTheme])\n}\n\nexport function useSetThemeGlass(): (glass: ThemeGlass) => void {\n const [, setTheme] = useAtom(themeAtom)\n return useCallback((glass: ThemeGlass) => {\n setTheme((prev) => ({ ...prev, glass }))\n }, [setTheme])\n}\n\nexport function useSetThemeMotion(): (motion: ThemeMotion) => void {\n const [, setTheme] = useAtom(themeAtom)\n return useCallback((motion: ThemeMotion) => {\n setTheme((prev) => ({ ...prev, motion }))\n }, [setTheme])\n}\n\nexport function useSetThemeColors(): (overrides: Partial<ThemeColorOverrides> | null) => void {\n const [, setTheme] = useAtom(themeAtom)\n return useCallback((colorOverrides: Partial<ThemeColorOverrides> | null) => {\n setTheme((prev) => ({ ...prev, colorOverrides }))\n }, [setTheme])\n}\n\nexport function useResetTheme(): () => void {\n const [, setTheme] = useAtom(themeAtom)\n return useCallback(() => {\n setTheme(DEFAULT_THEME)\n }, [setTheme])\n}\n\n// side-effect hook: apply theme to DOM + persist + listen to system changes\n// call this ONCE in the app root\nexport function useThemeEffect(): void {\n const theme = useAtomValue(themeAtom)\n const resolvedMode = useAtomValue(resolvedModeAtom)\n const prevKeysRef = useRef<string[]>([])\n\n // apply to DOM whenever theme changes\n useEffect(() => {\n const vars = resolveThemeCssVars(theme, resolvedMode)\n prevKeysRef.current = applyThemeToDocument(vars, resolvedMode, prevKeysRef.current)\n persistTheme(theme)\n }, [theme, resolvedMode])\n\n // listen for system theme preference changes\n useEffect(() => {\n const mq = window.matchMedia('(prefers-color-scheme: dark)')\n const handler = () => {\n // trigger re-render via resolvedModeAtom re-evaluation\n // jotai derived atoms auto-recompute, but we need to force it\n // by touching the base atom (no-op write)\n }\n mq.addEventListener('change', handler)\n return () => mq.removeEventListener('change', handler)\n }, [])\n\n // restore from localStorage on mount\n useEffect(() => {\n const persisted = loadPersistedTheme()\n if (persisted !== null) {\n // apply directly without going through atom to avoid flash\n const vars = resolveThemeCssVars(persisted, resolvedMode)\n prevKeysRef.current = applyThemeToDocument(vars, resolvedMode)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n}\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","/**\n * Copyright 2022 Joe Bell. All rights reserved.\n *\n * This file is licensed to you under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with the\n * License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */ import { clsx } from \"clsx\";\nconst falsyToString = (value)=>typeof value === \"boolean\" ? `${value}` : value === 0 ? \"0\" : value;\nexport const cx = clsx;\nexport const cva = (base, config)=>(props)=>{\n var _config_compoundVariants;\n if ((config === null || config === void 0 ? void 0 : config.variants) == null) return cx(base, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n const { variants, defaultVariants } = config;\n const getVariantClassNames = Object.keys(variants).map((variant)=>{\n const variantProp = props === null || props === void 0 ? void 0 : props[variant];\n const defaultVariantProp = defaultVariants === null || defaultVariants === void 0 ? void 0 : defaultVariants[variant];\n if (variantProp === null) return null;\n const variantKey = falsyToString(variantProp) || falsyToString(defaultVariantProp);\n return variants[variant][variantKey];\n });\n const propsWithoutUndefined = props && Object.entries(props).reduce((acc, param)=>{\n let [key, value] = param;\n if (value === undefined) {\n return acc;\n }\n acc[key] = value;\n return acc;\n }, {});\n const getCompoundVariantClassNames = config === null || config === void 0 ? void 0 : (_config_compoundVariants = config.compoundVariants) === null || _config_compoundVariants === void 0 ? void 0 : _config_compoundVariants.reduce((acc, param)=>{\n let { class: cvClass, className: cvClassName, ...compoundVariantOptions } = param;\n return Object.entries(compoundVariantOptions).every((param)=>{\n let [key, value] = param;\n return Array.isArray(value) ? value.includes({\n ...defaultVariants,\n ...propsWithoutUndefined\n }[key]) : ({\n ...defaultVariants,\n ...propsWithoutUndefined\n })[key] === value;\n }) ? [\n ...acc,\n cvClass,\n cvClassName\n ] : acc;\n }, []);\n return cx(base, getVariantClassNames, getCompoundVariantClassNames, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n };\n\n","// a11y utilities — used by all layers from L2+\n// values reference L0 tokens via Tailwind classes\n\n// focus-visible ring for all interactive elements\n// uses --gds-focus-ring-color (= --gds-accent), 2px ring, 1px offset\nexport const focusCls =\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-1 focus-visible:ring-offset-bg'\n\n// screen reader only — visually hidden but accessible to assistive tech\nexport const srOnly =\n 'absolute h-px w-px overflow-hidden whitespace-nowrap border-0 p-0 [clip:rect(0,0,0,0)]'\n","/**\n * Concatenates two arrays faster than the array spread operator.\n */\nconst concatArrays = (array1, array2) => {\n // Pre-allocate for better V8 optimization\n const combinedArray = new Array(array1.length + array2.length);\n for (let i = 0; i < array1.length; i++) {\n combinedArray[i] = array1[i];\n }\n for (let i = 0; i < array2.length; i++) {\n combinedArray[array1.length + i] = array2[i];\n }\n return combinedArray;\n};\n\n// Factory function ensures consistent object shapes\nconst createClassValidatorObject = (classGroupId, validator) => ({\n classGroupId,\n validator\n});\n// Factory ensures consistent ClassPartObject shape\nconst createClassPartObject = (nextPart = new Map(), validators = null, classGroupId) => ({\n nextPart,\n validators,\n classGroupId\n});\nconst CLASS_PART_SEPARATOR = '-';\nconst EMPTY_CONFLICTS = [];\n// I use two dots here because one dot is used as prefix for class groups in plugins\nconst ARBITRARY_PROPERTY_PREFIX = 'arbitrary..';\nconst createClassGroupUtils = config => {\n const classMap = createClassMap(config);\n const {\n conflictingClassGroups,\n conflictingClassGroupModifiers\n } = config;\n const getClassGroupId = className => {\n if (className.startsWith('[') && className.endsWith(']')) {\n return getGroupIdForArbitraryProperty(className);\n }\n const classParts = className.split(CLASS_PART_SEPARATOR);\n // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and skip it.\n const startIndex = classParts[0] === '' && classParts.length > 1 ? 1 : 0;\n return getGroupRecursive(classParts, startIndex, classMap);\n };\n const getConflictingClassGroupIds = (classGroupId, hasPostfixModifier) => {\n if (hasPostfixModifier) {\n const modifierConflicts = conflictingClassGroupModifiers[classGroupId];\n const baseConflicts = conflictingClassGroups[classGroupId];\n if (modifierConflicts) {\n if (baseConflicts) {\n // Merge base conflicts with modifier conflicts\n return concatArrays(baseConflicts, modifierConflicts);\n }\n // Only modifier conflicts\n return modifierConflicts;\n }\n // Fall back to without postfix if no modifier conflicts\n return baseConflicts || EMPTY_CONFLICTS;\n }\n return conflictingClassGroups[classGroupId] || EMPTY_CONFLICTS;\n };\n return {\n getClassGroupId,\n getConflictingClassGroupIds\n };\n};\nconst getGroupRecursive = (classParts, startIndex, classPartObject) => {\n const classPathsLength = classParts.length - startIndex;\n if (classPathsLength === 0) {\n return classPartObject.classGroupId;\n }\n const currentClassPart = classParts[startIndex];\n const nextClassPartObject = classPartObject.nextPart.get(currentClassPart);\n if (nextClassPartObject) {\n const result = getGroupRecursive(classParts, startIndex + 1, nextClassPartObject);\n if (result) return result;\n }\n const validators = classPartObject.validators;\n if (validators === null) {\n return undefined;\n }\n // Build classRest string efficiently by joining from startIndex onwards\n const classRest = startIndex === 0 ? classParts.join(CLASS_PART_SEPARATOR) : classParts.slice(startIndex).join(CLASS_PART_SEPARATOR);\n const validatorsLength = validators.length;\n for (let i = 0; i < validatorsLength; i++) {\n const validatorObj = validators[i];\n if (validatorObj.validator(classRest)) {\n return validatorObj.classGroupId;\n }\n }\n return undefined;\n};\n/**\n * Get the class group ID for an arbitrary property.\n *\n * @param className - The class name to get the group ID for. Is expected to be string starting with `[` and ending with `]`.\n */\nconst getGroupIdForArbitraryProperty = className => className.slice(1, -1).indexOf(':') === -1 ? undefined : (() => {\n const content = className.slice(1, -1);\n const colonIndex = content.indexOf(':');\n const property = content.slice(0, colonIndex);\n return property ? ARBITRARY_PROPERTY_PREFIX + property : undefined;\n})();\n/**\n * Exported for testing only\n */\nconst createClassMap = config => {\n const {\n theme,\n classGroups\n } = config;\n return processClassGroups(classGroups, theme);\n};\n// Split into separate functions to maintain monomorphic call sites\nconst processClassGroups = (classGroups, theme) => {\n const classMap = createClassPartObject();\n for (const classGroupId in classGroups) {\n const group = classGroups[classGroupId];\n processClassesRecursively(group, classMap, classGroupId, theme);\n }\n return classMap;\n};\nconst processClassesRecursively = (classGroup, classPartObject, classGroupId, theme) => {\n const len = classGroup.length;\n for (let i = 0; i < len; i++) {\n const classDefinition = classGroup[i];\n processClassDefinition(classDefinition, classPartObject, classGroupId, theme);\n }\n};\n// Split into separate functions for each type to maintain monomorphic call sites\nconst processClassDefinition = (classDefinition, classPartObject, classGroupId, theme) => {\n if (typeof classDefinition === 'string') {\n processStringDefinition(classDefinition, classPartObject, classGroupId);\n return;\n }\n if (typeof classDefinition === 'function') {\n processFunctionDefinition(classDefinition, classPartObject, classGroupId, theme);\n return;\n }\n processObjectDefinition(classDefinition, classPartObject, classGroupId, theme);\n};\nconst processStringDefinition = (classDefinition, classPartObject, classGroupId) => {\n const classPartObjectToEdit = classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition);\n classPartObjectToEdit.classGroupId = classGroupId;\n};\nconst processFunctionDefinition = (classDefinition, classPartObject, classGroupId, theme) => {\n if (isThemeGetter(classDefinition)) {\n processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme);\n return;\n }\n if (classPartObject.validators === null) {\n classPartObject.validators = [];\n }\n classPartObject.validators.push(createClassValidatorObject(classGroupId, classDefinition));\n};\nconst processObjectDefinition = (classDefinition, classPartObject, classGroupId, theme) => {\n const entries = Object.entries(classDefinition);\n const len = entries.length;\n for (let i = 0; i < len; i++) {\n const [key, value] = entries[i];\n processClassesRecursively(value, getPart(classPartObject, key), classGroupId, theme);\n }\n};\nconst getPart = (classPartObject, path) => {\n let current = classPartObject;\n const parts = path.split(CLASS_PART_SEPARATOR);\n const len = parts.length;\n for (let i = 0; i < len; i++) {\n const part = parts[i];\n let next = current.nextPart.get(part);\n if (!next) {\n next = createClassPartObject();\n current.nextPart.set(part, next);\n }\n current = next;\n }\n return current;\n};\n// Type guard maintains monomorphic check\nconst isThemeGetter = func => 'isThemeGetter' in func && func.isThemeGetter === true;\n\n// LRU cache implementation using plain objects for simplicity\nconst createLruCache = maxCacheSize => {\n if (maxCacheSize < 1) {\n return {\n get: () => undefined,\n set: () => {}\n };\n }\n let cacheSize = 0;\n let cache = Object.create(null);\n let previousCache = Object.create(null);\n const update = (key, value) => {\n cache[key] = value;\n cacheSize++;\n if (cacheSize > maxCacheSize) {\n cacheSize = 0;\n previousCache = cache;\n cache = Object.create(null);\n }\n };\n return {\n get(key) {\n let value = cache[key];\n if (value !== undefined) {\n return value;\n }\n if ((value = previousCache[key]) !== undefined) {\n update(key, value);\n return value;\n }\n },\n set(key, value) {\n if (key in cache) {\n cache[key] = value;\n } else {\n update(key, value);\n }\n }\n };\n};\nconst IMPORTANT_MODIFIER = '!';\nconst MODIFIER_SEPARATOR = ':';\nconst EMPTY_MODIFIERS = [];\n// Pre-allocated result object shape for consistency\nconst createResultObject = (modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition, isExternal) => ({\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition,\n isExternal\n});\nconst createParseClassName = config => {\n const {\n prefix,\n experimentalParseClassName\n } = config;\n /**\n * Parse class name into parts.\n *\n * Inspired by `splitAtTopLevelOnly` used in Tailwind CSS\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js\n */\n let parseClassName = className => {\n // Use simple array with push for better performance\n const modifiers = [];\n let bracketDepth = 0;\n let parenDepth = 0;\n let modifierStart = 0;\n let postfixModifierPosition;\n const len = className.length;\n for (let index = 0; index < len; index++) {\n const currentCharacter = className[index];\n if (bracketDepth === 0 && parenDepth === 0) {\n if (currentCharacter === MODIFIER_SEPARATOR) {\n modifiers.push(className.slice(modifierStart, index));\n modifierStart = index + 1;\n continue;\n }\n if (currentCharacter === '/') {\n postfixModifierPosition = index;\n continue;\n }\n }\n if (currentCharacter === '[') bracketDepth++;else if (currentCharacter === ']') bracketDepth--;else if (currentCharacter === '(') parenDepth++;else if (currentCharacter === ')') parenDepth--;\n }\n const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.slice(modifierStart);\n // Inline important modifier check\n let baseClassName = baseClassNameWithImportantModifier;\n let hasImportantModifier = false;\n if (baseClassNameWithImportantModifier.endsWith(IMPORTANT_MODIFIER)) {\n baseClassName = baseClassNameWithImportantModifier.slice(0, -1);\n hasImportantModifier = true;\n } else if (\n /**\n * In Tailwind CSS v3 the important modifier was at the start of the base class name. This is still supported for legacy reasons.\n * @see https://github.com/dcastil/tailwind-merge/issues/513#issuecomment-2614029864\n */\n baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER)) {\n baseClassName = baseClassNameWithImportantModifier.slice(1);\n hasImportantModifier = true;\n }\n const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : undefined;\n return createResultObject(modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition);\n };\n if (prefix) {\n const fullPrefix = prefix + MODIFIER_SEPARATOR;\n const parseClassNameOriginal = parseClassName;\n parseClassName = className => className.startsWith(fullPrefix) ? parseClassNameOriginal(className.slice(fullPrefix.length)) : createResultObject(EMPTY_MODIFIERS, false, className, undefined, true);\n }\n if (experimentalParseClassName) {\n const parseClassNameOriginal = parseClassName;\n parseClassName = className => experimentalParseClassName({\n className,\n parseClassName: parseClassNameOriginal\n });\n }\n return parseClassName;\n};\n\n/**\n * Sorts modifiers according to following schema:\n * - Predefined modifiers are sorted alphabetically\n * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it\n */\nconst createSortModifiers = config => {\n // Pre-compute weights for all known modifiers for O(1) comparison\n const modifierWeights = new Map();\n // Assign weights to sensitive modifiers (highest priority, but preserve order)\n config.orderSensitiveModifiers.forEach((mod, index) => {\n modifierWeights.set(mod, 1000000 + index); // High weights for sensitive mods\n });\n return modifiers => {\n const result = [];\n let currentSegment = [];\n // Process modifiers in one pass\n for (let i = 0; i < modifiers.length; i++) {\n const modifier = modifiers[i];\n // Check if modifier is sensitive (starts with '[' or in orderSensitiveModifiers)\n const isArbitrary = modifier[0] === '[';\n const isOrderSensitive = modifierWeights.has(modifier);\n if (isArbitrary || isOrderSensitive) {\n // Sort and flush current segment alphabetically\n if (currentSegment.length > 0) {\n currentSegment.sort();\n result.push(...currentSegment);\n currentSegment = [];\n }\n result.push(modifier);\n } else {\n // Regular modifier - add to current segment for batch sorting\n currentSegment.push(modifier);\n }\n }\n // Sort and add any remaining segment items\n if (currentSegment.length > 0) {\n currentSegment.sort();\n result.push(...currentSegment);\n }\n return result;\n };\n};\nconst createConfigUtils = config => ({\n cache: createLruCache(config.cacheSize),\n parseClassName: createParseClassName(config),\n sortModifiers: createSortModifiers(config),\n ...createClassGroupUtils(config)\n});\nconst SPLIT_CLASSES_REGEX = /\\s+/;\nconst mergeClassList = (classList, configUtils) => {\n const {\n parseClassName,\n getClassGroupId,\n getConflictingClassGroupIds,\n sortModifiers\n } = configUtils;\n /**\n * Set of classGroupIds in following format:\n * `{importantModifier}{variantModifiers}{classGroupId}`\n * @example 'float'\n * @example 'hover:focus:bg-color'\n * @example 'md:!pr'\n */\n const classGroupsInConflict = [];\n const classNames = classList.trim().split(SPLIT_CLASSES_REGEX);\n let result = '';\n for (let index = classNames.length - 1; index >= 0; index -= 1) {\n const originalClassName = classNames[index];\n const {\n isExternal,\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition\n } = parseClassName(originalClassName);\n if (isExternal) {\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n let hasPostfixModifier = !!maybePostfixModifierPosition;\n let classGroupId = getClassGroupId(hasPostfixModifier ? baseClassName.substring(0, maybePostfixModifierPosition) : baseClassName);\n if (!classGroupId) {\n if (!hasPostfixModifier) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n classGroupId = getClassGroupId(baseClassName);\n if (!classGroupId) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n hasPostfixModifier = false;\n }\n // Fast path: skip sorting for empty or single modifier\n const variantModifier = modifiers.length === 0 ? '' : modifiers.length === 1 ? modifiers[0] : sortModifiers(modifiers).join(':');\n const modifierId = hasImportantModifier ? variantModifier + IMPORTANT_MODIFIER : variantModifier;\n const classId = modifierId + classGroupId;\n if (classGroupsInConflict.indexOf(classId) > -1) {\n // Tailwind class omitted due to conflict\n continue;\n }\n classGroupsInConflict.push(classId);\n const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier);\n for (let i = 0; i < conflictGroups.length; ++i) {\n const group = conflictGroups[i];\n classGroupsInConflict.push(modifierId + group);\n }\n // Tailwind class not in conflict\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n }\n return result;\n};\n\n/**\n * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.\n *\n * Specifically:\n * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js\n * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts\n *\n * Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n */\nconst twJoin = (...classLists) => {\n let index = 0;\n let argument;\n let resolvedValue;\n let string = '';\n while (index < classLists.length) {\n if (argument = classLists[index++]) {\n if (resolvedValue = toValue(argument)) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n};\nconst toValue = mix => {\n // Fast path for strings\n if (typeof mix === 'string') {\n return mix;\n }\n let resolvedValue;\n let string = '';\n for (let k = 0; k < mix.length; k++) {\n if (mix[k]) {\n if (resolvedValue = toValue(mix[k])) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n};\nconst createTailwindMerge = (createConfigFirst, ...createConfigRest) => {\n let configUtils;\n let cacheGet;\n let cacheSet;\n let functionToCall;\n const initTailwindMerge = classList => {\n const config = createConfigRest.reduce((previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig), createConfigFirst());\n configUtils = createConfigUtils(config);\n cacheGet = configUtils.cache.get;\n cacheSet = configUtils.cache.set;\n functionToCall = tailwindMerge;\n return tailwindMerge(classList);\n };\n const tailwindMerge = classList => {\n const cachedResult = cacheGet(classList);\n if (cachedResult) {\n return cachedResult;\n }\n const result = mergeClassList(classList, configUtils);\n cacheSet(classList, result);\n return result;\n };\n functionToCall = initTailwindMerge;\n return (...args) => functionToCall(twJoin(...args));\n};\nconst fallbackThemeArr = [];\nconst fromTheme = key => {\n const themeGetter = theme => theme[key] || fallbackThemeArr;\n themeGetter.isThemeGetter = true;\n return themeGetter;\n};\nconst arbitraryValueRegex = /^\\[(?:(\\w[\\w-]*):)?(.+)\\]$/i;\nconst arbitraryVariableRegex = /^\\((?:(\\w[\\w-]*):)?(.+)\\)$/i;\nconst fractionRegex = /^\\d+(?:\\.\\d+)?\\/\\d+(?:\\.\\d+)?$/;\nconst tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/;\nconst lengthUnitRegex = /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/;\nconst colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\\(.+\\)$/;\n// Shadow always begins with x and y offset separated by underscore optionally prepended by inset\nconst shadowRegex = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/;\nconst imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/;\nconst isFraction = value => fractionRegex.test(value);\nconst isNumber = value => !!value && !Number.isNaN(Number(value));\nconst isInteger = value => !!value && Number.isInteger(Number(value));\nconst isPercent = value => value.endsWith('%') && isNumber(value.slice(0, -1));\nconst isTshirtSize = value => tshirtUnitRegex.test(value);\nconst isAny = () => true;\nconst isLengthOnly = value =>\n// `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.\n// For example, `hsl(0 0% 0%)` would be classified as a length without this check.\n// I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.\nlengthUnitRegex.test(value) && !colorFunctionRegex.test(value);\nconst isNever = () => false;\nconst isShadow = value => shadowRegex.test(value);\nconst isImage = value => imageRegex.test(value);\nconst isAnyNonArbitrary = value => !isArbitraryValue(value) && !isArbitraryVariable(value);\nconst isArbitrarySize = value => getIsArbitraryValue(value, isLabelSize, isNever);\nconst isArbitraryValue = value => arbitraryValueRegex.test(value);\nconst isArbitraryLength = value => getIsArbitraryValue(value, isLabelLength, isLengthOnly);\nconst isArbitraryNumber = value => getIsArbitraryValue(value, isLabelNumber, isNumber);\nconst isArbitraryWeight = value => getIsArbitraryValue(value, isLabelWeight, isAny);\nconst isArbitraryFamilyName = value => getIsArbitraryValue(value, isLabelFamilyName, isNever);\nconst isArbitraryPosition = value => getIsArbitraryValue(value, isLabelPosition, isNever);\nconst isArbitraryImage = value => getIsArbitraryValue(value, isLabelImage, isImage);\nconst isArbitraryShadow = value => getIsArbitraryValue(value, isLabelShadow, isShadow);\nconst isArbitraryVariable = value => arbitraryVariableRegex.test(value);\nconst isArbitraryVariableLength = value => getIsArbitraryVariable(value, isLabelLength);\nconst isArbitraryVariableFamilyName = value => getIsArbitraryVariable(value, isLabelFamilyName);\nconst isArbitraryVariablePosition = value => getIsArbitraryVariable(value, isLabelPosition);\nconst isArbitraryVariableSize = value => getIsArbitraryVariable(value, isLabelSize);\nconst isArbitraryVariableImage = value => getIsArbitraryVariable(value, isLabelImage);\nconst isArbitraryVariableShadow = value => getIsArbitraryVariable(value, isLabelShadow, true);\nconst isArbitraryVariableWeight = value => getIsArbitraryVariable(value, isLabelWeight, true);\n// Helpers\nconst getIsArbitraryValue = (value, testLabel, testValue) => {\n const result = arbitraryValueRegex.exec(value);\n if (result) {\n if (result[1]) {\n return testLabel(result[1]);\n }\n return testValue(result[2]);\n }\n return false;\n};\nconst getIsArbitraryVariable = (value, testLabel, shouldMatchNoLabel = false) => {\n const result = arbitraryVariableRegex.exec(value);\n if (result) {\n if (result[1]) {\n return testLabel(result[1]);\n }\n return shouldMatchNoLabel;\n }\n return false;\n};\n// Labels\nconst isLabelPosition = label => label === 'position' || label === 'percentage';\nconst isLabelImage = label => label === 'image' || label === 'url';\nconst isLabelSize = label => label === 'length' || label === 'size' || label === 'bg-size';\nconst isLabelLength = label => label === 'length';\nconst isLabelNumber = label => label === 'number';\nconst isLabelFamilyName = label => label === 'family-name';\nconst isLabelWeight = label => label === 'number' || label === 'weight';\nconst isLabelShadow = label => label === 'shadow';\nconst validators = /*#__PURE__*/Object.defineProperty({\n __proto__: null,\n isAny,\n isAnyNonArbitrary,\n isArbitraryFamilyName,\n isArbitraryImage,\n isArbitraryLength,\n isArbitraryNumber,\n isArbitraryPosition,\n isArbitraryShadow,\n isArbitrarySize,\n isArbitraryValue,\n isArbitraryVariable,\n isArbitraryVariableFamilyName,\n isArbitraryVariableImage,\n isArbitraryVariableLength,\n isArbitraryVariablePosition,\n isArbitraryVariableShadow,\n isArbitraryVariableSize,\n isArbitraryVariableWeight,\n isArbitraryWeight,\n isFraction,\n isInteger,\n isNumber,\n isPercent,\n isTshirtSize\n}, Symbol.toStringTag, {\n value: 'Module'\n});\nconst getDefaultConfig = () => {\n /**\n * Theme getters for theme variable namespaces\n * @see https://tailwindcss.com/docs/theme#theme-variable-namespaces\n */\n /***/\n const themeColor = fromTheme('color');\n const themeFont = fromTheme('font');\n const themeText = fromTheme('text');\n const themeFontWeight = fromTheme('font-weight');\n const themeTracking = fromTheme('tracking');\n const themeLeading = fromTheme('leading');\n const themeBreakpoint = fromTheme('breakpoint');\n const themeContainer = fromTheme('container');\n const themeSpacing = fromTheme('spacing');\n const themeRadius = fromTheme('radius');\n const themeShadow = fromTheme('shadow');\n const themeInsetShadow = fromTheme('inset-shadow');\n const themeTextShadow = fromTheme('text-shadow');\n const themeDropShadow = fromTheme('drop-shadow');\n const themeBlur = fromTheme('blur');\n const themePerspective = fromTheme('perspective');\n const themeAspect = fromTheme('aspect');\n const themeEase = fromTheme('ease');\n const themeAnimate = fromTheme('animate');\n /**\n * Helpers to avoid repeating the same scales\n *\n * We use functions that create a new array every time they're called instead of static arrays.\n * This ensures that users who modify any scale by mutating the array (e.g. with `array.push(element)`) don't accidentally mutate arrays in other parts of the config.\n */\n /***/\n const scaleBreak = () => ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'];\n const scalePosition = () => ['center', 'top', 'bottom', 'left', 'right', 'top-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-top', 'top-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-top', 'bottom-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-bottom', 'bottom-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-bottom'];\n const scalePositionWithArbitrary = () => [...scalePosition(), isArbitraryVariable, isArbitraryValue];\n const scaleOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'];\n const scaleOverscroll = () => ['auto', 'contain', 'none'];\n const scaleUnambiguousSpacing = () => [isArbitraryVariable, isArbitraryValue, themeSpacing];\n const scaleInset = () => [isFraction, 'full', 'auto', ...scaleUnambiguousSpacing()];\n const scaleGridTemplateColsRows = () => [isInteger, 'none', 'subgrid', isArbitraryVariable, isArbitraryValue];\n const scaleGridColRowStartAndEnd = () => ['auto', {\n span: ['full', isInteger, isArbitraryVariable, isArbitraryValue]\n }, isInteger, isArbitraryVariable, isArbitraryValue];\n const scaleGridColRowStartOrEnd = () => [isInteger, 'auto', isArbitraryVariable, isArbitraryValue];\n const scaleGridAutoColsRows = () => ['auto', 'min', 'max', 'fr', isArbitraryVariable, isArbitraryValue];\n const scaleAlignPrimaryAxis = () => ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch', 'baseline', 'center-safe', 'end-safe'];\n const scaleAlignSecondaryAxis = () => ['start', 'end', 'center', 'stretch', 'center-safe', 'end-safe'];\n const scaleMargin = () => ['auto', ...scaleUnambiguousSpacing()];\n const scaleSizing = () => [isFraction, 'auto', 'full', 'dvw', 'dvh', 'lvw', 'lvh', 'svw', 'svh', 'min', 'max', 'fit', ...scaleUnambiguousSpacing()];\n const scaleSizingInline = () => [isFraction, 'screen', 'full', 'dvw', 'lvw', 'svw', 'min', 'max', 'fit', ...scaleUnambiguousSpacing()];\n const scaleSizingBlock = () => [isFraction, 'screen', 'full', 'lh', 'dvh', 'lvh', 'svh', 'min', 'max', 'fit', ...scaleUnambiguousSpacing()];\n const scaleColor = () => [themeColor, isArbitraryVariable, isArbitraryValue];\n const scaleBgPosition = () => [...scalePosition(), isArbitraryVariablePosition, isArbitraryPosition, {\n position: [isArbitraryVariable, isArbitraryValue]\n }];\n const scaleBgRepeat = () => ['no-repeat', {\n repeat: ['', 'x', 'y', 'space', 'round']\n }];\n const scaleBgSize = () => ['auto', 'cover', 'contain', isArbitraryVariableSize, isArbitrarySize, {\n size: [isArbitraryVariable, isArbitraryValue]\n }];\n const scaleGradientStopPosition = () => [isPercent, isArbitraryVariableLength, isArbitraryLength];\n const scaleRadius = () => [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', 'full', themeRadius, isArbitraryVariable, isArbitraryValue];\n const scaleBorderWidth = () => ['', isNumber, isArbitraryVariableLength, isArbitraryLength];\n const scaleLineStyle = () => ['solid', 'dashed', 'dotted', 'double'];\n const scaleBlendMode = () => ['normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity'];\n const scaleMaskImagePosition = () => [isNumber, isPercent, isArbitraryVariablePosition, isArbitraryPosition];\n const scaleBlur = () => [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeBlur, isArbitraryVariable, isArbitraryValue];\n const scaleRotate = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleScale = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleSkew = () => [isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleTranslate = () => [isFraction, 'full', ...scaleUnambiguousSpacing()];\n return {\n cacheSize: 500,\n theme: {\n animate: ['spin', 'ping', 'pulse', 'bounce'],\n aspect: ['video'],\n blur: [isTshirtSize],\n breakpoint: [isTshirtSize],\n color: [isAny],\n container: [isTshirtSize],\n 'drop-shadow': [isTshirtSize],\n ease: ['in', 'out', 'in-out'],\n font: [isAnyNonArbitrary],\n 'font-weight': ['thin', 'extralight', 'light', 'normal', 'medium', 'semibold', 'bold', 'extrabold', 'black'],\n 'inset-shadow': [isTshirtSize],\n leading: ['none', 'tight', 'snug', 'normal', 'relaxed', 'loose'],\n perspective: ['dramatic', 'near', 'normal', 'midrange', 'distant', 'none'],\n radius: [isTshirtSize],\n shadow: [isTshirtSize],\n spacing: ['px', isNumber],\n text: [isTshirtSize],\n 'text-shadow': [isTshirtSize],\n tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest']\n },\n classGroups: {\n // --------------\n // --- Layout ---\n // --------------\n /**\n * Aspect Ratio\n * @see https://tailwindcss.com/docs/aspect-ratio\n */\n aspect: [{\n aspect: ['auto', 'square', isFraction, isArbitraryValue, isArbitraryVariable, themeAspect]\n }],\n /**\n * Container\n * @see https://tailwindcss.com/docs/container\n * @deprecated since Tailwind CSS v4.0.0\n */\n container: ['container'],\n /**\n * Columns\n * @see https://tailwindcss.com/docs/columns\n */\n columns: [{\n columns: [isNumber, isArbitraryValue, isArbitraryVariable, themeContainer]\n }],\n /**\n * Break After\n * @see https://tailwindcss.com/docs/break-after\n */\n 'break-after': [{\n 'break-after': scaleBreak()\n }],\n /**\n * Break Before\n * @see https://tailwindcss.com/docs/break-before\n */\n 'break-before': [{\n 'break-before': scaleBreak()\n }],\n /**\n * Break Inside\n * @see https://tailwindcss.com/docs/break-inside\n */\n 'break-inside': [{\n 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column']\n }],\n /**\n * Box Decoration Break\n * @see https://tailwindcss.com/docs/box-decoration-break\n */\n 'box-decoration': [{\n 'box-decoration': ['slice', 'clone']\n }],\n /**\n * Box Sizing\n * @see https://tailwindcss.com/docs/box-sizing\n */\n box: [{\n box: ['border', 'content']\n }],\n /**\n * Display\n * @see https://tailwindcss.com/docs/display\n */\n display: ['block', 'inline-block', 'inline', 'flex', 'inline-flex', 'table', 'inline-table', 'table-caption', 'table-cell', 'table-column', 'table-column-group', 'table-footer-group', 'table-header-group', 'table-row-group', 'table-row', 'flow-root', 'grid', 'inline-grid', 'contents', 'list-item', 'hidden'],\n /**\n * Screen Reader Only\n * @see https://tailwindcss.com/docs/display#screen-reader-only\n */\n sr: ['sr-only', 'not-sr-only'],\n /**\n * Floats\n * @see https://tailwindcss.com/docs/float\n */\n float: [{\n float: ['right', 'left', 'none', 'start', 'end']\n }],\n /**\n * Clear\n * @see https://tailwindcss.com/docs/clear\n */\n clear: [{\n clear: ['left', 'right', 'both', 'none', 'start', 'end']\n }],\n /**\n * Isolation\n * @see https://tailwindcss.com/docs/isolation\n */\n isolation: ['isolate', 'isolation-auto'],\n /**\n * Object Fit\n * @see https://tailwindcss.com/docs/object-fit\n */\n 'object-fit': [{\n object: ['contain', 'cover', 'fill', 'none', 'scale-down']\n }],\n /**\n * Object Position\n * @see https://tailwindcss.com/docs/object-position\n */\n 'object-position': [{\n object: scalePositionWithArbitrary()\n }],\n /**\n * Overflow\n * @see https://tailwindcss.com/docs/overflow\n */\n overflow: [{\n overflow: scaleOverflow()\n }],\n /**\n * Overflow X\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-x': [{\n 'overflow-x': scaleOverflow()\n }],\n /**\n * Overflow Y\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-y': [{\n 'overflow-y': scaleOverflow()\n }],\n /**\n * Overscroll Behavior\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n overscroll: [{\n overscroll: scaleOverscroll()\n }],\n /**\n * Overscroll Behavior X\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-x': [{\n 'overscroll-x': scaleOverscroll()\n }],\n /**\n * Overscroll Behavior Y\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-y': [{\n 'overscroll-y': scaleOverscroll()\n }],\n /**\n * Position\n * @see https://tailwindcss.com/docs/position\n */\n position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],\n /**\n * Inset\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n inset: [{\n inset: scaleInset()\n }],\n /**\n * Inset Inline\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-x': [{\n 'inset-x': scaleInset()\n }],\n /**\n * Inset Block\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-y': [{\n 'inset-y': scaleInset()\n }],\n /**\n * Inset Inline Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n * @todo class group will be renamed to `inset-s` in next major release\n */\n start: [{\n 'inset-s': scaleInset(),\n /**\n * @deprecated since Tailwind CSS v4.2.0 in favor of `inset-s-*` utilities.\n * @see https://github.com/tailwindlabs/tailwindcss/pull/19613\n */\n start: scaleInset()\n }],\n /**\n * Inset Inline End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n * @todo class group will be renamed to `inset-e` in next major release\n */\n end: [{\n 'inset-e': scaleInset(),\n /**\n * @deprecated since Tailwind CSS v4.2.0 in favor of `inset-e-*` utilities.\n * @see https://github.com/tailwindlabs/tailwindcss/pull/19613\n */\n end: scaleInset()\n }],\n /**\n * Inset Block Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-bs': [{\n 'inset-bs': scaleInset()\n }],\n /**\n * Inset Block End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-be': [{\n 'inset-be': scaleInset()\n }],\n /**\n * Top\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n top: [{\n top: scaleInset()\n }],\n /**\n * Right\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n right: [{\n right: scaleInset()\n }],\n /**\n * Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n bottom: [{\n bottom: scaleInset()\n }],\n /**\n * Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n left: [{\n left: scaleInset()\n }],\n /**\n * Visibility\n * @see https://tailwindcss.com/docs/visibility\n */\n visibility: ['visible', 'invisible', 'collapse'],\n /**\n * Z-Index\n * @see https://tailwindcss.com/docs/z-index\n */\n z: [{\n z: [isInteger, 'auto', isArbitraryVariable, isArbitraryValue]\n }],\n // ------------------------\n // --- Flexbox and Grid ---\n // ------------------------\n /**\n * Flex Basis\n * @see https://tailwindcss.com/docs/flex-basis\n */\n basis: [{\n basis: [isFraction, 'full', 'auto', themeContainer, ...scaleUnambiguousSpacing()]\n }],\n /**\n * Flex Direction\n * @see https://tailwindcss.com/docs/flex-direction\n */\n 'flex-direction': [{\n flex: ['row', 'row-reverse', 'col', 'col-reverse']\n }],\n /**\n * Flex Wrap\n * @see https://tailwindcss.com/docs/flex-wrap\n */\n 'flex-wrap': [{\n flex: ['nowrap', 'wrap', 'wrap-reverse']\n }],\n /**\n * Flex\n * @see https://tailwindcss.com/docs/flex\n */\n flex: [{\n flex: [isNumber, isFraction, 'auto', 'initial', 'none', isArbitraryValue]\n }],\n /**\n * Flex Grow\n * @see https://tailwindcss.com/docs/flex-grow\n */\n grow: [{\n grow: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Flex Shrink\n * @see https://tailwindcss.com/docs/flex-shrink\n */\n shrink: [{\n shrink: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Order\n * @see https://tailwindcss.com/docs/order\n */\n order: [{\n order: [isInteger, 'first', 'last', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Grid Template Columns\n * @see https://tailwindcss.com/docs/grid-template-columns\n */\n 'grid-cols': [{\n 'grid-cols': scaleGridTemplateColsRows()\n }],\n /**\n * Grid Column Start / End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start-end': [{\n col: scaleGridColRowStartAndEnd()\n }],\n /**\n * Grid Column Start\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start': [{\n 'col-start': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Column End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-end': [{\n 'col-end': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Template Rows\n * @see https://tailwindcss.com/docs/grid-template-rows\n */\n 'grid-rows': [{\n 'grid-rows': scaleGridTemplateColsRows()\n }],\n /**\n * Grid Row Start / End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start-end': [{\n row: scaleGridColRowStartAndEnd()\n }],\n /**\n * Grid Row Start\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start': [{\n 'row-start': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Row End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-end': [{\n 'row-end': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Auto Flow\n * @see https://tailwindcss.com/docs/grid-auto-flow\n */\n 'grid-flow': [{\n 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense']\n }],\n /**\n * Grid Auto Columns\n * @see https://tailwindcss.com/docs/grid-auto-columns\n */\n 'auto-cols': [{\n 'auto-cols': scaleGridAutoColsRows()\n }],\n /**\n * Grid Auto Rows\n * @see https://tailwindcss.com/docs/grid-auto-rows\n */\n 'auto-rows': [{\n 'auto-rows': scaleGridAutoColsRows()\n }],\n /**\n * Gap\n * @see https://tailwindcss.com/docs/gap\n */\n gap: [{\n gap: scaleUnambiguousSpacing()\n }],\n /**\n * Gap X\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-x': [{\n 'gap-x': scaleUnambiguousSpacing()\n }],\n /**\n * Gap Y\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-y': [{\n 'gap-y': scaleUnambiguousSpacing()\n }],\n /**\n * Justify Content\n * @see https://tailwindcss.com/docs/justify-content\n */\n 'justify-content': [{\n justify: [...scaleAlignPrimaryAxis(), 'normal']\n }],\n /**\n * Justify Items\n * @see https://tailwindcss.com/docs/justify-items\n */\n 'justify-items': [{\n 'justify-items': [...scaleAlignSecondaryAxis(), 'normal']\n }],\n /**\n * Justify Self\n * @see https://tailwindcss.com/docs/justify-self\n */\n 'justify-self': [{\n 'justify-self': ['auto', ...scaleAlignSecondaryAxis()]\n }],\n /**\n * Align Content\n * @see https://tailwindcss.com/docs/align-content\n */\n 'align-content': [{\n content: ['normal', ...scaleAlignPrimaryAxis()]\n }],\n /**\n * Align Items\n * @see https://tailwindcss.com/docs/align-items\n */\n 'align-items': [{\n items: [...scaleAlignSecondaryAxis(), {\n baseline: ['', 'last']\n }]\n }],\n /**\n * Align Self\n * @see https://tailwindcss.com/docs/align-self\n */\n 'align-self': [{\n self: ['auto', ...scaleAlignSecondaryAxis(), {\n baseline: ['', 'last']\n }]\n }],\n /**\n * Place Content\n * @see https://tailwindcss.com/docs/place-content\n */\n 'place-content': [{\n 'place-content': scaleAlignPrimaryAxis()\n }],\n /**\n * Place Items\n * @see https://tailwindcss.com/docs/place-items\n */\n 'place-items': [{\n 'place-items': [...scaleAlignSecondaryAxis(), 'baseline']\n }],\n /**\n * Place Self\n * @see https://tailwindcss.com/docs/place-self\n */\n 'place-self': [{\n 'place-self': ['auto', ...scaleAlignSecondaryAxis()]\n }],\n // Spacing\n /**\n * Padding\n * @see https://tailwindcss.com/docs/padding\n */\n p: [{\n p: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Inline\n * @see https://tailwindcss.com/docs/padding\n */\n px: [{\n px: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Block\n * @see https://tailwindcss.com/docs/padding\n */\n py: [{\n py: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Inline Start\n * @see https://tailwindcss.com/docs/padding\n */\n ps: [{\n ps: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Inline End\n * @see https://tailwindcss.com/docs/padding\n */\n pe: [{\n pe: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Block Start\n * @see https://tailwindcss.com/docs/padding\n */\n pbs: [{\n pbs: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Block End\n * @see https://tailwindcss.com/docs/padding\n */\n pbe: [{\n pbe: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Top\n * @see https://tailwindcss.com/docs/padding\n */\n pt: [{\n pt: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Right\n * @see https://tailwindcss.com/docs/padding\n */\n pr: [{\n pr: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Bottom\n * @see https://tailwindcss.com/docs/padding\n */\n pb: [{\n pb: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Left\n * @see https://tailwindcss.com/docs/padding\n */\n pl: [{\n pl: scaleUnambiguousSpacing()\n }],\n /**\n * Margin\n * @see https://tailwindcss.com/docs/margin\n */\n m: [{\n m: scaleMargin()\n }],\n /**\n * Margin Inline\n * @see https://tailwindcss.com/docs/margin\n */\n mx: [{\n mx: scaleMargin()\n }],\n /**\n * Margin Block\n * @see https://tailwindcss.com/docs/margin\n */\n my: [{\n my: scaleMargin()\n }],\n /**\n * Margin Inline Start\n * @see https://tailwindcss.com/docs/margin\n */\n ms: [{\n ms: scaleMargin()\n }],\n /**\n * Margin Inline End\n * @see https://tailwindcss.com/docs/margin\n */\n me: [{\n me: scaleMargin()\n }],\n /**\n * Margin Block Start\n * @see https://tailwindcss.com/docs/margin\n */\n mbs: [{\n mbs: scaleMargin()\n }],\n /**\n * Margin Block End\n * @see https://tailwindcss.com/docs/margin\n */\n mbe: [{\n mbe: scaleMargin()\n }],\n /**\n * Margin Top\n * @see https://tailwindcss.com/docs/margin\n */\n mt: [{\n mt: scaleMargin()\n }],\n /**\n * Margin Right\n * @see https://tailwindcss.com/docs/margin\n */\n mr: [{\n mr: scaleMargin()\n }],\n /**\n * Margin Bottom\n * @see https://tailwindcss.com/docs/margin\n */\n mb: [{\n mb: scaleMargin()\n }],\n /**\n * Margin Left\n * @see https://tailwindcss.com/docs/margin\n */\n ml: [{\n ml: scaleMargin()\n }],\n /**\n * Space Between X\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x': [{\n 'space-x': scaleUnambiguousSpacing()\n }],\n /**\n * Space Between X Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x-reverse': ['space-x-reverse'],\n /**\n * Space Between Y\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y': [{\n 'space-y': scaleUnambiguousSpacing()\n }],\n /**\n * Space Between Y Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y-reverse': ['space-y-reverse'],\n // --------------\n // --- Sizing ---\n // --------------\n /**\n * Size\n * @see https://tailwindcss.com/docs/width#setting-both-width-and-height\n */\n size: [{\n size: scaleSizing()\n }],\n /**\n * Inline Size\n * @see https://tailwindcss.com/docs/width\n */\n 'inline-size': [{\n inline: ['auto', ...scaleSizingInline()]\n }],\n /**\n * Min-Inline Size\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-inline-size': [{\n 'min-inline': ['auto', ...scaleSizingInline()]\n }],\n /**\n * Max-Inline Size\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-inline-size': [{\n 'max-inline': ['none', ...scaleSizingInline()]\n }],\n /**\n * Block Size\n * @see https://tailwindcss.com/docs/height\n */\n 'block-size': [{\n block: ['auto', ...scaleSizingBlock()]\n }],\n /**\n * Min-Block Size\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-block-size': [{\n 'min-block': ['auto', ...scaleSizingBlock()]\n }],\n /**\n * Max-Block Size\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-block-size': [{\n 'max-block': ['none', ...scaleSizingBlock()]\n }],\n /**\n * Width\n * @see https://tailwindcss.com/docs/width\n */\n w: [{\n w: [themeContainer, 'screen', ...scaleSizing()]\n }],\n /**\n * Min-Width\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-w': [{\n 'min-w': [themeContainer, 'screen', /** Deprecated. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'none', ...scaleSizing()]\n }],\n /**\n * Max-Width\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-w': [{\n 'max-w': [themeContainer, 'screen', 'none', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'prose', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n {\n screen: [themeBreakpoint]\n }, ...scaleSizing()]\n }],\n /**\n * Height\n * @see https://tailwindcss.com/docs/height\n */\n h: [{\n h: ['screen', 'lh', ...scaleSizing()]\n }],\n /**\n * Min-Height\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-h': [{\n 'min-h': ['screen', 'lh', 'none', ...scaleSizing()]\n }],\n /**\n * Max-Height\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-h': [{\n 'max-h': ['screen', 'lh', ...scaleSizing()]\n }],\n // ------------------\n // --- Typography ---\n // ------------------\n /**\n * Font Size\n * @see https://tailwindcss.com/docs/font-size\n */\n 'font-size': [{\n text: ['base', themeText, isArbitraryVariableLength, isArbitraryLength]\n }],\n /**\n * Font Smoothing\n * @see https://tailwindcss.com/docs/font-smoothing\n */\n 'font-smoothing': ['antialiased', 'subpixel-antialiased'],\n /**\n * Font Style\n * @see https://tailwindcss.com/docs/font-style\n */\n 'font-style': ['italic', 'not-italic'],\n /**\n * Font Weight\n * @see https://tailwindcss.com/docs/font-weight\n */\n 'font-weight': [{\n font: [themeFontWeight, isArbitraryVariableWeight, isArbitraryWeight]\n }],\n /**\n * Font Stretch\n * @see https://tailwindcss.com/docs/font-stretch\n */\n 'font-stretch': [{\n 'font-stretch': ['ultra-condensed', 'extra-condensed', 'condensed', 'semi-condensed', 'normal', 'semi-expanded', 'expanded', 'extra-expanded', 'ultra-expanded', isPercent, isArbitraryValue]\n }],\n /**\n * Font Family\n * @see https://tailwindcss.com/docs/font-family\n */\n 'font-family': [{\n font: [isArbitraryVariableFamilyName, isArbitraryFamilyName, themeFont]\n }],\n /**\n * Font Feature Settings\n * @see https://tailwindcss.com/docs/font-feature-settings\n */\n 'font-features': [{\n 'font-features': [isArbitraryValue]\n }],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-normal': ['normal-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-ordinal': ['ordinal'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-slashed-zero': ['slashed-zero'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-figure': ['lining-nums', 'oldstyle-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-spacing': ['proportional-nums', 'tabular-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'],\n /**\n * Letter Spacing\n * @see https://tailwindcss.com/docs/letter-spacing\n */\n tracking: [{\n tracking: [themeTracking, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Line Clamp\n * @see https://tailwindcss.com/docs/line-clamp\n */\n 'line-clamp': [{\n 'line-clamp': [isNumber, 'none', isArbitraryVariable, isArbitraryNumber]\n }],\n /**\n * Line Height\n * @see https://tailwindcss.com/docs/line-height\n */\n leading: [{\n leading: [/** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n themeLeading, ...scaleUnambiguousSpacing()]\n }],\n /**\n * List Style Image\n * @see https://tailwindcss.com/docs/list-style-image\n */\n 'list-image': [{\n 'list-image': ['none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * List Style Position\n * @see https://tailwindcss.com/docs/list-style-position\n */\n 'list-style-position': [{\n list: ['inside', 'outside']\n }],\n /**\n * List Style Type\n * @see https://tailwindcss.com/docs/list-style-type\n */\n 'list-style-type': [{\n list: ['disc', 'decimal', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Text Alignment\n * @see https://tailwindcss.com/docs/text-align\n */\n 'text-alignment': [{\n text: ['left', 'center', 'right', 'justify', 'start', 'end']\n }],\n /**\n * Placeholder Color\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://v3.tailwindcss.com/docs/placeholder-color\n */\n 'placeholder-color': [{\n placeholder: scaleColor()\n }],\n /**\n * Text Color\n * @see https://tailwindcss.com/docs/text-color\n */\n 'text-color': [{\n text: scaleColor()\n }],\n /**\n * Text Decoration\n * @see https://tailwindcss.com/docs/text-decoration\n */\n 'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],\n /**\n * Text Decoration Style\n * @see https://tailwindcss.com/docs/text-decoration-style\n */\n 'text-decoration-style': [{\n decoration: [...scaleLineStyle(), 'wavy']\n }],\n /**\n * Text Decoration Thickness\n * @see https://tailwindcss.com/docs/text-decoration-thickness\n */\n 'text-decoration-thickness': [{\n decoration: [isNumber, 'from-font', 'auto', isArbitraryVariable, isArbitraryLength]\n }],\n /**\n * Text Decoration Color\n * @see https://tailwindcss.com/docs/text-decoration-color\n */\n 'text-decoration-color': [{\n decoration: scaleColor()\n }],\n /**\n * Text Underline Offset\n * @see https://tailwindcss.com/docs/text-underline-offset\n */\n 'underline-offset': [{\n 'underline-offset': [isNumber, 'auto', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Text Transform\n * @see https://tailwindcss.com/docs/text-transform\n */\n 'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],\n /**\n * Text Overflow\n * @see https://tailwindcss.com/docs/text-overflow\n */\n 'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],\n /**\n * Text Wrap\n * @see https://tailwindcss.com/docs/text-wrap\n */\n 'text-wrap': [{\n text: ['wrap', 'nowrap', 'balance', 'pretty']\n }],\n /**\n * Text Indent\n * @see https://tailwindcss.com/docs/text-indent\n */\n indent: [{\n indent: scaleUnambiguousSpacing()\n }],\n /**\n * Vertical Alignment\n * @see https://tailwindcss.com/docs/vertical-align\n */\n 'vertical-align': [{\n align: ['baseline', 'top', 'middle', 'bottom', 'text-top', 'text-bottom', 'sub', 'super', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Whitespace\n * @see https://tailwindcss.com/docs/whitespace\n */\n whitespace: [{\n whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces']\n }],\n /**\n * Word Break\n * @see https://tailwindcss.com/docs/word-break\n */\n break: [{\n break: ['normal', 'words', 'all', 'keep']\n }],\n /**\n * Overflow Wrap\n * @see https://tailwindcss.com/docs/overflow-wrap\n */\n wrap: [{\n wrap: ['break-word', 'anywhere', 'normal']\n }],\n /**\n * Hyphens\n * @see https://tailwindcss.com/docs/hyphens\n */\n hyphens: [{\n hyphens: ['none', 'manual', 'auto']\n }],\n /**\n * Content\n * @see https://tailwindcss.com/docs/content\n */\n content: [{\n content: ['none', isArbitraryVariable, isArbitraryValue]\n }],\n // -------------------\n // --- Backgrounds ---\n // -------------------\n /**\n * Background Attachment\n * @see https://tailwindcss.com/docs/background-attachment\n */\n 'bg-attachment': [{\n bg: ['fixed', 'local', 'scroll']\n }],\n /**\n * Background Clip\n * @see https://tailwindcss.com/docs/background-clip\n */\n 'bg-clip': [{\n 'bg-clip': ['border', 'padding', 'content', 'text']\n }],\n /**\n * Background Origin\n * @see https://tailwindcss.com/docs/background-origin\n */\n 'bg-origin': [{\n 'bg-origin': ['border', 'padding', 'content']\n }],\n /**\n * Background Position\n * @see https://tailwindcss.com/docs/background-position\n */\n 'bg-position': [{\n bg: scaleBgPosition()\n }],\n /**\n * Background Repeat\n * @see https://tailwindcss.com/docs/background-repeat\n */\n 'bg-repeat': [{\n bg: scaleBgRepeat()\n }],\n /**\n * Background Size\n * @see https://tailwindcss.com/docs/background-size\n */\n 'bg-size': [{\n bg: scaleBgSize()\n }],\n /**\n * Background Image\n * @see https://tailwindcss.com/docs/background-image\n */\n 'bg-image': [{\n bg: ['none', {\n linear: [{\n to: ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl']\n }, isInteger, isArbitraryVariable, isArbitraryValue],\n radial: ['', isArbitraryVariable, isArbitraryValue],\n conic: [isInteger, isArbitraryVariable, isArbitraryValue]\n }, isArbitraryVariableImage, isArbitraryImage]\n }],\n /**\n * Background Color\n * @see https://tailwindcss.com/docs/background-color\n */\n 'bg-color': [{\n bg: scaleColor()\n }],\n /**\n * Gradient Color Stops From Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from-pos': [{\n from: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops Via Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via-pos': [{\n via: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops To Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to-pos': [{\n to: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops From\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from': [{\n from: scaleColor()\n }],\n /**\n * Gradient Color Stops Via\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via': [{\n via: scaleColor()\n }],\n /**\n * Gradient Color Stops To\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to': [{\n to: scaleColor()\n }],\n // ---------------\n // --- Borders ---\n // ---------------\n /**\n * Border Radius\n * @see https://tailwindcss.com/docs/border-radius\n */\n rounded: [{\n rounded: scaleRadius()\n }],\n /**\n * Border Radius Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-s': [{\n 'rounded-s': scaleRadius()\n }],\n /**\n * Border Radius End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-e': [{\n 'rounded-e': scaleRadius()\n }],\n /**\n * Border Radius Top\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-t': [{\n 'rounded-t': scaleRadius()\n }],\n /**\n * Border Radius Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-r': [{\n 'rounded-r': scaleRadius()\n }],\n /**\n * Border Radius Bottom\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-b': [{\n 'rounded-b': scaleRadius()\n }],\n /**\n * Border Radius Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-l': [{\n 'rounded-l': scaleRadius()\n }],\n /**\n * Border Radius Start Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ss': [{\n 'rounded-ss': scaleRadius()\n }],\n /**\n * Border Radius Start End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-se': [{\n 'rounded-se': scaleRadius()\n }],\n /**\n * Border Radius End End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ee': [{\n 'rounded-ee': scaleRadius()\n }],\n /**\n * Border Radius End Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-es': [{\n 'rounded-es': scaleRadius()\n }],\n /**\n * Border Radius Top Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tl': [{\n 'rounded-tl': scaleRadius()\n }],\n /**\n * Border Radius Top Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tr': [{\n 'rounded-tr': scaleRadius()\n }],\n /**\n * Border Radius Bottom Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-br': [{\n 'rounded-br': scaleRadius()\n }],\n /**\n * Border Radius Bottom Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-bl': [{\n 'rounded-bl': scaleRadius()\n }],\n /**\n * Border Width\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w': [{\n border: scaleBorderWidth()\n }],\n /**\n * Border Width Inline\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-x': [{\n 'border-x': scaleBorderWidth()\n }],\n /**\n * Border Width Block\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-y': [{\n 'border-y': scaleBorderWidth()\n }],\n /**\n * Border Width Inline Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-s': [{\n 'border-s': scaleBorderWidth()\n }],\n /**\n * Border Width Inline End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-e': [{\n 'border-e': scaleBorderWidth()\n }],\n /**\n * Border Width Block Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-bs': [{\n 'border-bs': scaleBorderWidth()\n }],\n /**\n * Border Width Block End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-be': [{\n 'border-be': scaleBorderWidth()\n }],\n /**\n * Border Width Top\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-t': [{\n 'border-t': scaleBorderWidth()\n }],\n /**\n * Border Width Right\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-r': [{\n 'border-r': scaleBorderWidth()\n }],\n /**\n * Border Width Bottom\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-b': [{\n 'border-b': scaleBorderWidth()\n }],\n /**\n * Border Width Left\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-l': [{\n 'border-l': scaleBorderWidth()\n }],\n /**\n * Divide Width X\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x': [{\n 'divide-x': scaleBorderWidth()\n }],\n /**\n * Divide Width X Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x-reverse': ['divide-x-reverse'],\n /**\n * Divide Width Y\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y': [{\n 'divide-y': scaleBorderWidth()\n }],\n /**\n * Divide Width Y Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y-reverse': ['divide-y-reverse'],\n /**\n * Border Style\n * @see https://tailwindcss.com/docs/border-style\n */\n 'border-style': [{\n border: [...scaleLineStyle(), 'hidden', 'none']\n }],\n /**\n * Divide Style\n * @see https://tailwindcss.com/docs/border-style#setting-the-divider-style\n */\n 'divide-style': [{\n divide: [...scaleLineStyle(), 'hidden', 'none']\n }],\n /**\n * Border Color\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color': [{\n border: scaleColor()\n }],\n /**\n * Border Color Inline\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-x': [{\n 'border-x': scaleColor()\n }],\n /**\n * Border Color Block\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-y': [{\n 'border-y': scaleColor()\n }],\n /**\n * Border Color Inline Start\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-s': [{\n 'border-s': scaleColor()\n }],\n /**\n * Border Color Inline End\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-e': [{\n 'border-e': scaleColor()\n }],\n /**\n * Border Color Block Start\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-bs': [{\n 'border-bs': scaleColor()\n }],\n /**\n * Border Color Block End\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-be': [{\n 'border-be': scaleColor()\n }],\n /**\n * Border Color Top\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-t': [{\n 'border-t': scaleColor()\n }],\n /**\n * Border Color Right\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-r': [{\n 'border-r': scaleColor()\n }],\n /**\n * Border Color Bottom\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-b': [{\n 'border-b': scaleColor()\n }],\n /**\n * Border Color Left\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-l': [{\n 'border-l': scaleColor()\n }],\n /**\n * Divide Color\n * @see https://tailwindcss.com/docs/divide-color\n */\n 'divide-color': [{\n divide: scaleColor()\n }],\n /**\n * Outline Style\n * @see https://tailwindcss.com/docs/outline-style\n */\n 'outline-style': [{\n outline: [...scaleLineStyle(), 'none', 'hidden']\n }],\n /**\n * Outline Offset\n * @see https://tailwindcss.com/docs/outline-offset\n */\n 'outline-offset': [{\n 'outline-offset': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Outline Width\n * @see https://tailwindcss.com/docs/outline-width\n */\n 'outline-w': [{\n outline: ['', isNumber, isArbitraryVariableLength, isArbitraryLength]\n }],\n /**\n * Outline Color\n * @see https://tailwindcss.com/docs/outline-color\n */\n 'outline-color': [{\n outline: scaleColor()\n }],\n // ---------------\n // --- Effects ---\n // ---------------\n /**\n * Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow\n */\n shadow: [{\n shadow: [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-shadow-color\n */\n 'shadow-color': [{\n shadow: scaleColor()\n }],\n /**\n * Inset Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-shadow\n */\n 'inset-shadow': [{\n 'inset-shadow': ['none', themeInsetShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Inset Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-shadow-color\n */\n 'inset-shadow-color': [{\n 'inset-shadow': scaleColor()\n }],\n /**\n * Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-a-ring\n */\n 'ring-w': [{\n ring: scaleBorderWidth()\n }],\n /**\n * Ring Width Inset\n * @see https://v3.tailwindcss.com/docs/ring-width#inset-rings\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-w-inset': ['ring-inset'],\n /**\n * Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-ring-color\n */\n 'ring-color': [{\n ring: scaleColor()\n }],\n /**\n * Ring Offset Width\n * @see https://v3.tailwindcss.com/docs/ring-offset-width\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-w': [{\n 'ring-offset': [isNumber, isArbitraryLength]\n }],\n /**\n * Ring Offset Color\n * @see https://v3.tailwindcss.com/docs/ring-offset-color\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-color': [{\n 'ring-offset': scaleColor()\n }],\n /**\n * Inset Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-ring\n */\n 'inset-ring-w': [{\n 'inset-ring': scaleBorderWidth()\n }],\n /**\n * Inset Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-ring-color\n */\n 'inset-ring-color': [{\n 'inset-ring': scaleColor()\n }],\n /**\n * Text Shadow\n * @see https://tailwindcss.com/docs/text-shadow\n */\n 'text-shadow': [{\n 'text-shadow': ['none', themeTextShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Text Shadow Color\n * @see https://tailwindcss.com/docs/text-shadow#setting-the-shadow-color\n */\n 'text-shadow-color': [{\n 'text-shadow': scaleColor()\n }],\n /**\n * Opacity\n * @see https://tailwindcss.com/docs/opacity\n */\n opacity: [{\n opacity: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Mix Blend Mode\n * @see https://tailwindcss.com/docs/mix-blend-mode\n */\n 'mix-blend': [{\n 'mix-blend': [...scaleBlendMode(), 'plus-darker', 'plus-lighter']\n }],\n /**\n * Background Blend Mode\n * @see https://tailwindcss.com/docs/background-blend-mode\n */\n 'bg-blend': [{\n 'bg-blend': scaleBlendMode()\n }],\n /**\n * Mask Clip\n * @see https://tailwindcss.com/docs/mask-clip\n */\n 'mask-clip': [{\n 'mask-clip': ['border', 'padding', 'content', 'fill', 'stroke', 'view']\n }, 'mask-no-clip'],\n /**\n * Mask Composite\n * @see https://tailwindcss.com/docs/mask-composite\n */\n 'mask-composite': [{\n mask: ['add', 'subtract', 'intersect', 'exclude']\n }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image-linear-pos': [{\n 'mask-linear': [isNumber]\n }],\n 'mask-image-linear-from-pos': [{\n 'mask-linear-from': scaleMaskImagePosition()\n }],\n 'mask-image-linear-to-pos': [{\n 'mask-linear-to': scaleMaskImagePosition()\n }],\n 'mask-image-linear-from-color': [{\n 'mask-linear-from': scaleColor()\n }],\n 'mask-image-linear-to-color': [{\n 'mask-linear-to': scaleColor()\n }],\n 'mask-image-t-from-pos': [{\n 'mask-t-from': scaleMaskImagePosition()\n }],\n 'mask-image-t-to-pos': [{\n 'mask-t-to': scaleMaskImagePosition()\n }],\n 'mask-image-t-from-color': [{\n 'mask-t-from': scaleColor()\n }],\n 'mask-image-t-to-color': [{\n 'mask-t-to': scaleColor()\n }],\n 'mask-image-r-from-pos': [{\n 'mask-r-from': scaleMaskImagePosition()\n }],\n 'mask-image-r-to-pos': [{\n 'mask-r-to': scaleMaskImagePosition()\n }],\n 'mask-image-r-from-color': [{\n 'mask-r-from': scaleColor()\n }],\n 'mask-image-r-to-color': [{\n 'mask-r-to': scaleColor()\n }],\n 'mask-image-b-from-pos': [{\n 'mask-b-from': scaleMaskImagePosition()\n }],\n 'mask-image-b-to-pos': [{\n 'mask-b-to': scaleMaskImagePosition()\n }],\n 'mask-image-b-from-color': [{\n 'mask-b-from': scaleColor()\n }],\n 'mask-image-b-to-color': [{\n 'mask-b-to': scaleColor()\n }],\n 'mask-image-l-from-pos': [{\n 'mask-l-from': scaleMaskImagePosition()\n }],\n 'mask-image-l-to-pos': [{\n 'mask-l-to': scaleMaskImagePosition()\n }],\n 'mask-image-l-from-color': [{\n 'mask-l-from': scaleColor()\n }],\n 'mask-image-l-to-color': [{\n 'mask-l-to': scaleColor()\n }],\n 'mask-image-x-from-pos': [{\n 'mask-x-from': scaleMaskImagePosition()\n }],\n 'mask-image-x-to-pos': [{\n 'mask-x-to': scaleMaskImagePosition()\n }],\n 'mask-image-x-from-color': [{\n 'mask-x-from': scaleColor()\n }],\n 'mask-image-x-to-color': [{\n 'mask-x-to': scaleColor()\n }],\n 'mask-image-y-from-pos': [{\n 'mask-y-from': scaleMaskImagePosition()\n }],\n 'mask-image-y-to-pos': [{\n 'mask-y-to': scaleMaskImagePosition()\n }],\n 'mask-image-y-from-color': [{\n 'mask-y-from': scaleColor()\n }],\n 'mask-image-y-to-color': [{\n 'mask-y-to': scaleColor()\n }],\n 'mask-image-radial': [{\n 'mask-radial': [isArbitraryVariable, isArbitraryValue]\n }],\n 'mask-image-radial-from-pos': [{\n 'mask-radial-from': scaleMaskImagePosition()\n }],\n 'mask-image-radial-to-pos': [{\n 'mask-radial-to': scaleMaskImagePosition()\n }],\n 'mask-image-radial-from-color': [{\n 'mask-radial-from': scaleColor()\n }],\n 'mask-image-radial-to-color': [{\n 'mask-radial-to': scaleColor()\n }],\n 'mask-image-radial-shape': [{\n 'mask-radial': ['circle', 'ellipse']\n }],\n 'mask-image-radial-size': [{\n 'mask-radial': [{\n closest: ['side', 'corner'],\n farthest: ['side', 'corner']\n }]\n }],\n 'mask-image-radial-pos': [{\n 'mask-radial-at': scalePosition()\n }],\n 'mask-image-conic-pos': [{\n 'mask-conic': [isNumber]\n }],\n 'mask-image-conic-from-pos': [{\n 'mask-conic-from': scaleMaskImagePosition()\n }],\n 'mask-image-conic-to-pos': [{\n 'mask-conic-to': scaleMaskImagePosition()\n }],\n 'mask-image-conic-from-color': [{\n 'mask-conic-from': scaleColor()\n }],\n 'mask-image-conic-to-color': [{\n 'mask-conic-to': scaleColor()\n }],\n /**\n * Mask Mode\n * @see https://tailwindcss.com/docs/mask-mode\n */\n 'mask-mode': [{\n mask: ['alpha', 'luminance', 'match']\n }],\n /**\n * Mask Origin\n * @see https://tailwindcss.com/docs/mask-origin\n */\n 'mask-origin': [{\n 'mask-origin': ['border', 'padding', 'content', 'fill', 'stroke', 'view']\n }],\n /**\n * Mask Position\n * @see https://tailwindcss.com/docs/mask-position\n */\n 'mask-position': [{\n mask: scaleBgPosition()\n }],\n /**\n * Mask Repeat\n * @see https://tailwindcss.com/docs/mask-repeat\n */\n 'mask-repeat': [{\n mask: scaleBgRepeat()\n }],\n /**\n * Mask Size\n * @see https://tailwindcss.com/docs/mask-size\n */\n 'mask-size': [{\n mask: scaleBgSize()\n }],\n /**\n * Mask Type\n * @see https://tailwindcss.com/docs/mask-type\n */\n 'mask-type': [{\n 'mask-type': ['alpha', 'luminance']\n }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image': [{\n mask: ['none', isArbitraryVariable, isArbitraryValue]\n }],\n // ---------------\n // --- Filters ---\n // ---------------\n /**\n * Filter\n * @see https://tailwindcss.com/docs/filter\n */\n filter: [{\n filter: [\n // Deprecated since Tailwind CSS v3.0.0\n '', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Blur\n * @see https://tailwindcss.com/docs/blur\n */\n blur: [{\n blur: scaleBlur()\n }],\n /**\n * Brightness\n * @see https://tailwindcss.com/docs/brightness\n */\n brightness: [{\n brightness: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Contrast\n * @see https://tailwindcss.com/docs/contrast\n */\n contrast: [{\n contrast: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Drop Shadow\n * @see https://tailwindcss.com/docs/drop-shadow\n */\n 'drop-shadow': [{\n 'drop-shadow': [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeDropShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Drop Shadow Color\n * @see https://tailwindcss.com/docs/filter-drop-shadow#setting-the-shadow-color\n */\n 'drop-shadow-color': [{\n 'drop-shadow': scaleColor()\n }],\n /**\n * Grayscale\n * @see https://tailwindcss.com/docs/grayscale\n */\n grayscale: [{\n grayscale: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Hue Rotate\n * @see https://tailwindcss.com/docs/hue-rotate\n */\n 'hue-rotate': [{\n 'hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Invert\n * @see https://tailwindcss.com/docs/invert\n */\n invert: [{\n invert: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Saturate\n * @see https://tailwindcss.com/docs/saturate\n */\n saturate: [{\n saturate: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Sepia\n * @see https://tailwindcss.com/docs/sepia\n */\n sepia: [{\n sepia: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Filter\n * @see https://tailwindcss.com/docs/backdrop-filter\n */\n 'backdrop-filter': [{\n 'backdrop-filter': [\n // Deprecated since Tailwind CSS v3.0.0\n '', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Blur\n * @see https://tailwindcss.com/docs/backdrop-blur\n */\n 'backdrop-blur': [{\n 'backdrop-blur': scaleBlur()\n }],\n /**\n * Backdrop Brightness\n * @see https://tailwindcss.com/docs/backdrop-brightness\n */\n 'backdrop-brightness': [{\n 'backdrop-brightness': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Contrast\n * @see https://tailwindcss.com/docs/backdrop-contrast\n */\n 'backdrop-contrast': [{\n 'backdrop-contrast': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Grayscale\n * @see https://tailwindcss.com/docs/backdrop-grayscale\n */\n 'backdrop-grayscale': [{\n 'backdrop-grayscale': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Hue Rotate\n * @see https://tailwindcss.com/docs/backdrop-hue-rotate\n */\n 'backdrop-hue-rotate': [{\n 'backdrop-hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Invert\n * @see https://tailwindcss.com/docs/backdrop-invert\n */\n 'backdrop-invert': [{\n 'backdrop-invert': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Opacity\n * @see https://tailwindcss.com/docs/backdrop-opacity\n */\n 'backdrop-opacity': [{\n 'backdrop-opacity': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Saturate\n * @see https://tailwindcss.com/docs/backdrop-saturate\n */\n 'backdrop-saturate': [{\n 'backdrop-saturate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Sepia\n * @see https://tailwindcss.com/docs/backdrop-sepia\n */\n 'backdrop-sepia': [{\n 'backdrop-sepia': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n // --------------\n // --- Tables ---\n // --------------\n /**\n * Border Collapse\n * @see https://tailwindcss.com/docs/border-collapse\n */\n 'border-collapse': [{\n border: ['collapse', 'separate']\n }],\n /**\n * Border Spacing\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing': [{\n 'border-spacing': scaleUnambiguousSpacing()\n }],\n /**\n * Border Spacing X\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-x': [{\n 'border-spacing-x': scaleUnambiguousSpacing()\n }],\n /**\n * Border Spacing Y\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-y': [{\n 'border-spacing-y': scaleUnambiguousSpacing()\n }],\n /**\n * Table Layout\n * @see https://tailwindcss.com/docs/table-layout\n */\n 'table-layout': [{\n table: ['auto', 'fixed']\n }],\n /**\n * Caption Side\n * @see https://tailwindcss.com/docs/caption-side\n */\n caption: [{\n caption: ['top', 'bottom']\n }],\n // ---------------------------------\n // --- Transitions and Animation ---\n // ---------------------------------\n /**\n * Transition Property\n * @see https://tailwindcss.com/docs/transition-property\n */\n transition: [{\n transition: ['', 'all', 'colors', 'opacity', 'shadow', 'transform', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Behavior\n * @see https://tailwindcss.com/docs/transition-behavior\n */\n 'transition-behavior': [{\n transition: ['normal', 'discrete']\n }],\n /**\n * Transition Duration\n * @see https://tailwindcss.com/docs/transition-duration\n */\n duration: [{\n duration: [isNumber, 'initial', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Timing Function\n * @see https://tailwindcss.com/docs/transition-timing-function\n */\n ease: [{\n ease: ['linear', 'initial', themeEase, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Delay\n * @see https://tailwindcss.com/docs/transition-delay\n */\n delay: [{\n delay: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Animation\n * @see https://tailwindcss.com/docs/animation\n */\n animate: [{\n animate: ['none', themeAnimate, isArbitraryVariable, isArbitraryValue]\n }],\n // ------------------\n // --- Transforms ---\n // ------------------\n /**\n * Backface Visibility\n * @see https://tailwindcss.com/docs/backface-visibility\n */\n backface: [{\n backface: ['hidden', 'visible']\n }],\n /**\n * Perspective\n * @see https://tailwindcss.com/docs/perspective\n */\n perspective: [{\n perspective: [themePerspective, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Perspective Origin\n * @see https://tailwindcss.com/docs/perspective-origin\n */\n 'perspective-origin': [{\n 'perspective-origin': scalePositionWithArbitrary()\n }],\n /**\n * Rotate\n * @see https://tailwindcss.com/docs/rotate\n */\n rotate: [{\n rotate: scaleRotate()\n }],\n /**\n * Rotate X\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-x': [{\n 'rotate-x': scaleRotate()\n }],\n /**\n * Rotate Y\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-y': [{\n 'rotate-y': scaleRotate()\n }],\n /**\n * Rotate Z\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-z': [{\n 'rotate-z': scaleRotate()\n }],\n /**\n * Scale\n * @see https://tailwindcss.com/docs/scale\n */\n scale: [{\n scale: scaleScale()\n }],\n /**\n * Scale X\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-x': [{\n 'scale-x': scaleScale()\n }],\n /**\n * Scale Y\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-y': [{\n 'scale-y': scaleScale()\n }],\n /**\n * Scale Z\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-z': [{\n 'scale-z': scaleScale()\n }],\n /**\n * Scale 3D\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-3d': ['scale-3d'],\n /**\n * Skew\n * @see https://tailwindcss.com/docs/skew\n */\n skew: [{\n skew: scaleSkew()\n }],\n /**\n * Skew X\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-x': [{\n 'skew-x': scaleSkew()\n }],\n /**\n * Skew Y\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-y': [{\n 'skew-y': scaleSkew()\n }],\n /**\n * Transform\n * @see https://tailwindcss.com/docs/transform\n */\n transform: [{\n transform: [isArbitraryVariable, isArbitraryValue, '', 'none', 'gpu', 'cpu']\n }],\n /**\n * Transform Origin\n * @see https://tailwindcss.com/docs/transform-origin\n */\n 'transform-origin': [{\n origin: scalePositionWithArbitrary()\n }],\n /**\n * Transform Style\n * @see https://tailwindcss.com/docs/transform-style\n */\n 'transform-style': [{\n transform: ['3d', 'flat']\n }],\n /**\n * Translate\n * @see https://tailwindcss.com/docs/translate\n */\n translate: [{\n translate: scaleTranslate()\n }],\n /**\n * Translate X\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-x': [{\n 'translate-x': scaleTranslate()\n }],\n /**\n * Translate Y\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-y': [{\n 'translate-y': scaleTranslate()\n }],\n /**\n * Translate Z\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-z': [{\n 'translate-z': scaleTranslate()\n }],\n /**\n * Translate None\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-none': ['translate-none'],\n // ---------------------\n // --- Interactivity ---\n // ---------------------\n /**\n * Accent Color\n * @see https://tailwindcss.com/docs/accent-color\n */\n accent: [{\n accent: scaleColor()\n }],\n /**\n * Appearance\n * @see https://tailwindcss.com/docs/appearance\n */\n appearance: [{\n appearance: ['none', 'auto']\n }],\n /**\n * Caret Color\n * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n */\n 'caret-color': [{\n caret: scaleColor()\n }],\n /**\n * Color Scheme\n * @see https://tailwindcss.com/docs/color-scheme\n */\n 'color-scheme': [{\n scheme: ['normal', 'dark', 'light', 'light-dark', 'only-dark', 'only-light']\n }],\n /**\n * Cursor\n * @see https://tailwindcss.com/docs/cursor\n */\n cursor: [{\n cursor: ['auto', 'default', 'pointer', 'wait', 'text', 'move', 'help', 'not-allowed', 'none', 'context-menu', 'progress', 'cell', 'crosshair', 'vertical-text', 'alias', 'copy', 'no-drop', 'grab', 'grabbing', 'all-scroll', 'col-resize', 'row-resize', 'n-resize', 'e-resize', 's-resize', 'w-resize', 'ne-resize', 'nw-resize', 'se-resize', 'sw-resize', 'ew-resize', 'ns-resize', 'nesw-resize', 'nwse-resize', 'zoom-in', 'zoom-out', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Field Sizing\n * @see https://tailwindcss.com/docs/field-sizing\n */\n 'field-sizing': [{\n 'field-sizing': ['fixed', 'content']\n }],\n /**\n * Pointer Events\n * @see https://tailwindcss.com/docs/pointer-events\n */\n 'pointer-events': [{\n 'pointer-events': ['auto', 'none']\n }],\n /**\n * Resize\n * @see https://tailwindcss.com/docs/resize\n */\n resize: [{\n resize: ['none', '', 'y', 'x']\n }],\n /**\n * Scroll Behavior\n * @see https://tailwindcss.com/docs/scroll-behavior\n */\n 'scroll-behavior': [{\n scroll: ['auto', 'smooth']\n }],\n /**\n * Scroll Margin\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-m': [{\n 'scroll-m': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Inline\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mx': [{\n 'scroll-mx': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Block\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-my': [{\n 'scroll-my': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Inline Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ms': [{\n 'scroll-ms': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Inline End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-me': [{\n 'scroll-me': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Block Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mbs': [{\n 'scroll-mbs': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Block End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mbe': [{\n 'scroll-mbe': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Top\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mt': [{\n 'scroll-mt': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Right\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mr': [{\n 'scroll-mr': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Bottom\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mb': [{\n 'scroll-mb': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Left\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ml': [{\n 'scroll-ml': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-p': [{\n 'scroll-p': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Inline\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-px': [{\n 'scroll-px': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Block\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-py': [{\n 'scroll-py': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Inline Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-ps': [{\n 'scroll-ps': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Inline End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pe': [{\n 'scroll-pe': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Block Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pbs': [{\n 'scroll-pbs': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Block End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pbe': [{\n 'scroll-pbe': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Top\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pt': [{\n 'scroll-pt': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Right\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pr': [{\n 'scroll-pr': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Bottom\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pb': [{\n 'scroll-pb': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Left\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pl': [{\n 'scroll-pl': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Snap Align\n * @see https://tailwindcss.com/docs/scroll-snap-align\n */\n 'snap-align': [{\n snap: ['start', 'end', 'center', 'align-none']\n }],\n /**\n * Scroll Snap Stop\n * @see https://tailwindcss.com/docs/scroll-snap-stop\n */\n 'snap-stop': [{\n snap: ['normal', 'always']\n }],\n /**\n * Scroll Snap Type\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-type': [{\n snap: ['none', 'x', 'y', 'both']\n }],\n /**\n * Scroll Snap Type Strictness\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-strictness': [{\n snap: ['mandatory', 'proximity']\n }],\n /**\n * Touch Action\n * @see https://tailwindcss.com/docs/touch-action\n */\n touch: [{\n touch: ['auto', 'none', 'manipulation']\n }],\n /**\n * Touch Action X\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-x': [{\n 'touch-pan': ['x', 'left', 'right']\n }],\n /**\n * Touch Action Y\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-y': [{\n 'touch-pan': ['y', 'up', 'down']\n }],\n /**\n * Touch Action Pinch Zoom\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-pz': ['touch-pinch-zoom'],\n /**\n * User Select\n * @see https://tailwindcss.com/docs/user-select\n */\n select: [{\n select: ['none', 'text', 'all', 'auto']\n }],\n /**\n * Will Change\n * @see https://tailwindcss.com/docs/will-change\n */\n 'will-change': [{\n 'will-change': ['auto', 'scroll', 'contents', 'transform', isArbitraryVariable, isArbitraryValue]\n }],\n // -----------\n // --- SVG ---\n // -----------\n /**\n * Fill\n * @see https://tailwindcss.com/docs/fill\n */\n fill: [{\n fill: ['none', ...scaleColor()]\n }],\n /**\n * Stroke Width\n * @see https://tailwindcss.com/docs/stroke-width\n */\n 'stroke-w': [{\n stroke: [isNumber, isArbitraryVariableLength, isArbitraryLength, isArbitraryNumber]\n }],\n /**\n * Stroke\n * @see https://tailwindcss.com/docs/stroke\n */\n stroke: [{\n stroke: ['none', ...scaleColor()]\n }],\n // ---------------------\n // --- Accessibility ---\n // ---------------------\n /**\n * Forced Color Adjust\n * @see https://tailwindcss.com/docs/forced-color-adjust\n */\n 'forced-color-adjust': [{\n 'forced-color-adjust': ['auto', 'none']\n }]\n },\n conflictingClassGroups: {\n overflow: ['overflow-x', 'overflow-y'],\n overscroll: ['overscroll-x', 'overscroll-y'],\n inset: ['inset-x', 'inset-y', 'inset-bs', 'inset-be', 'start', 'end', 'top', 'right', 'bottom', 'left'],\n 'inset-x': ['right', 'left'],\n 'inset-y': ['top', 'bottom'],\n flex: ['basis', 'grow', 'shrink'],\n gap: ['gap-x', 'gap-y'],\n p: ['px', 'py', 'ps', 'pe', 'pbs', 'pbe', 'pt', 'pr', 'pb', 'pl'],\n px: ['pr', 'pl'],\n py: ['pt', 'pb'],\n m: ['mx', 'my', 'ms', 'me', 'mbs', 'mbe', 'mt', 'mr', 'mb', 'ml'],\n mx: ['mr', 'ml'],\n my: ['mt', 'mb'],\n size: ['w', 'h'],\n 'font-size': ['leading'],\n 'fvn-normal': ['fvn-ordinal', 'fvn-slashed-zero', 'fvn-figure', 'fvn-spacing', 'fvn-fraction'],\n 'fvn-ordinal': ['fvn-normal'],\n 'fvn-slashed-zero': ['fvn-normal'],\n 'fvn-figure': ['fvn-normal'],\n 'fvn-spacing': ['fvn-normal'],\n 'fvn-fraction': ['fvn-normal'],\n 'line-clamp': ['display', 'overflow'],\n rounded: ['rounded-s', 'rounded-e', 'rounded-t', 'rounded-r', 'rounded-b', 'rounded-l', 'rounded-ss', 'rounded-se', 'rounded-ee', 'rounded-es', 'rounded-tl', 'rounded-tr', 'rounded-br', 'rounded-bl'],\n 'rounded-s': ['rounded-ss', 'rounded-es'],\n 'rounded-e': ['rounded-se', 'rounded-ee'],\n 'rounded-t': ['rounded-tl', 'rounded-tr'],\n 'rounded-r': ['rounded-tr', 'rounded-br'],\n 'rounded-b': ['rounded-br', 'rounded-bl'],\n 'rounded-l': ['rounded-tl', 'rounded-bl'],\n 'border-spacing': ['border-spacing-x', 'border-spacing-y'],\n 'border-w': ['border-w-x', 'border-w-y', 'border-w-s', 'border-w-e', 'border-w-bs', 'border-w-be', 'border-w-t', 'border-w-r', 'border-w-b', 'border-w-l'],\n 'border-w-x': ['border-w-r', 'border-w-l'],\n 'border-w-y': ['border-w-t', 'border-w-b'],\n 'border-color': ['border-color-x', 'border-color-y', 'border-color-s', 'border-color-e', 'border-color-bs', 'border-color-be', 'border-color-t', 'border-color-r', 'border-color-b', 'border-color-l'],\n 'border-color-x': ['border-color-r', 'border-color-l'],\n 'border-color-y': ['border-color-t', 'border-color-b'],\n translate: ['translate-x', 'translate-y', 'translate-none'],\n 'translate-none': ['translate', 'translate-x', 'translate-y', 'translate-z'],\n 'scroll-m': ['scroll-mx', 'scroll-my', 'scroll-ms', 'scroll-me', 'scroll-mbs', 'scroll-mbe', 'scroll-mt', 'scroll-mr', 'scroll-mb', 'scroll-ml'],\n 'scroll-mx': ['scroll-mr', 'scroll-ml'],\n 'scroll-my': ['scroll-mt', 'scroll-mb'],\n 'scroll-p': ['scroll-px', 'scroll-py', 'scroll-ps', 'scroll-pe', 'scroll-pbs', 'scroll-pbe', 'scroll-pt', 'scroll-pr', 'scroll-pb', 'scroll-pl'],\n 'scroll-px': ['scroll-pr', 'scroll-pl'],\n 'scroll-py': ['scroll-pt', 'scroll-pb'],\n touch: ['touch-x', 'touch-y', 'touch-pz'],\n 'touch-x': ['touch'],\n 'touch-y': ['touch'],\n 'touch-pz': ['touch']\n },\n conflictingClassGroupModifiers: {\n 'font-size': ['leading']\n },\n orderSensitiveModifiers: ['*', '**', 'after', 'backdrop', 'before', 'details-content', 'file', 'first-letter', 'first-line', 'marker', 'placeholder', 'selection']\n };\n};\n\n/**\n * @param baseConfig Config where other config will be merged into. This object will be mutated.\n * @param configExtension Partial config to merge into the `baseConfig`.\n */\nconst mergeConfigs = (baseConfig, {\n cacheSize,\n prefix,\n experimentalParseClassName,\n extend = {},\n override = {}\n}) => {\n overrideProperty(baseConfig, 'cacheSize', cacheSize);\n overrideProperty(baseConfig, 'prefix', prefix);\n overrideProperty(baseConfig, 'experimentalParseClassName', experimentalParseClassName);\n overrideConfigProperties(baseConfig.theme, override.theme);\n overrideConfigProperties(baseConfig.classGroups, override.classGroups);\n overrideConfigProperties(baseConfig.conflictingClassGroups, override.conflictingClassGroups);\n overrideConfigProperties(baseConfig.conflictingClassGroupModifiers, override.conflictingClassGroupModifiers);\n overrideProperty(baseConfig, 'orderSensitiveModifiers', override.orderSensitiveModifiers);\n mergeConfigProperties(baseConfig.theme, extend.theme);\n mergeConfigProperties(baseConfig.classGroups, extend.classGroups);\n mergeConfigProperties(baseConfig.conflictingClassGroups, extend.conflictingClassGroups);\n mergeConfigProperties(baseConfig.conflictingClassGroupModifiers, extend.conflictingClassGroupModifiers);\n mergeArrayProperties(baseConfig, extend, 'orderSensitiveModifiers');\n return baseConfig;\n};\nconst overrideProperty = (baseObject, overrideKey, overrideValue) => {\n if (overrideValue !== undefined) {\n baseObject[overrideKey] = overrideValue;\n }\n};\nconst overrideConfigProperties = (baseObject, overrideObject) => {\n if (overrideObject) {\n for (const key in overrideObject) {\n overrideProperty(baseObject, key, overrideObject[key]);\n }\n }\n};\nconst mergeConfigProperties = (baseObject, mergeObject) => {\n if (mergeObject) {\n for (const key in mergeObject) {\n mergeArrayProperties(baseObject, mergeObject, key);\n }\n }\n};\nconst mergeArrayProperties = (baseObject, mergeObject, key) => {\n const mergeValue = mergeObject[key];\n if (mergeValue !== undefined) {\n baseObject[key] = baseObject[key] ? baseObject[key].concat(mergeValue) : mergeValue;\n }\n};\nconst extendTailwindMerge = (configExtension, ...createConfig) => typeof configExtension === 'function' ? createTailwindMerge(getDefaultConfig, configExtension, ...createConfig) : createTailwindMerge(() => mergeConfigs(getDefaultConfig(), configExtension), ...createConfig);\nconst twMerge = /*#__PURE__*/createTailwindMerge(getDefaultConfig);\nexport { createTailwindMerge, extendTailwindMerge, fromTheme, getDefaultConfig, mergeConfigs, twJoin, twMerge, validators };\n//# sourceMappingURL=bundle-mjs.mjs.map\n","// cx — class merging utility\n// wraps clsx + tailwind-merge\n// this is the ONLY place clsx and tailwind-merge are imported\n\nimport { clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cx(...inputs: Parameters<typeof clsx>): string {\n return twMerge(clsx(inputs))\n}\n","import { cva } from 'class-variance-authority'\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\nimport type { VariantProps } from '../utils/types'\n\nconst anchorVariants = cva(\n 'inline-flex items-center gds-gap-xs underline-offset-2 transition-colors hover:underline ' +\n focusCls,\n {\n defaultVariants: {\n variant: 'default',\n },\n variants: {\n variant: {\n default: 'text-accent hover:text-accent/80',\n muted: 'text-fg-muted hover:text-fg',\n },\n },\n },\n)\n\ntype AnchorProps = React.AnchorHTMLAttributes<HTMLAnchorElement> &\n VariantProps<typeof anchorVariants> & {\n external?: boolean\n externalIcon?: ReactNode\n }\n\nexport const Anchor = forwardRef<HTMLAnchorElement, AnchorProps>(\n function Anchor(\n { children, className, external = false, externalIcon, variant, ...props },\n ref,\n ) {\n return (\n <a\n className={cx(anchorVariants({ variant }), className)}\n data-component=\"anchor\"\n ref={ref}\n {...(external && {\n rel: 'noopener noreferrer',\n target: '_blank',\n })}\n {...props}\n >\n {children}\n {external && externalIcon !== undefined && (\n <span className=\"gds-icon-child-xs\">{externalIcon}</span>\n )}\n </a>\n )\n },\n)\n\nexport { anchorVariants }\nexport type { AnchorProps }\n","import type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype AspectRatioProps = React.HTMLAttributes<HTMLDivElement> & {\n children: ReactNode\n ratio?: number\n}\n\nexport const AspectRatio = forwardRef<HTMLDivElement, AspectRatioProps>(\n function AspectRatio({ children, className, ratio = 16 / 9, style, ...props }, ref) {\n return (\n <div\n className={cx('relative w-full overflow-hidden', className)}\n data-component=\"aspect-ratio\"\n ref={ref}\n style={{ ...style, aspectRatio: ratio }}\n {...props}\n >\n {children}\n </div>\n )\n },\n)\n\nexport type { AspectRatioProps }\n","// L-dep — glass helper\n// converts a glass prop to CSS class names\n// zero friction: <Card glass> → className=\"gds-glass border\"\n// handles intensity levels and integrates with depth system\n\ntype GlassIntensity = boolean | 'lg' | 'sm'\n\n// convert glass prop to className\n// true → standard glass, 'sm' → subtle, 'lg' → heavy\nexport function glassClass(glass?: GlassIntensity): string {\n if (glass === undefined || glass === false) return ''\n if (glass === 'sm') return 'gds-glass-sm'\n if (glass === 'lg') return 'gds-glass-lg'\n return 'gds-glass'\n}\n\n// full glass surface class set — bg + blur + border adjustment\n// use this instead of manually combining glass + bg + border\nexport function glassSurface(glass?: GlassIntensity): string {\n if (glass === undefined || glass === false) return ''\n const base = glassClass(glass)\n // glass surfaces get a translucent border instead of solid\n return `${base} border-white/10`\n}\n","import { cva } from 'class-variance-authority'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\nimport type { VariantProps } from '../utils/types'\n\nconst badgeVariants = cva(\n 'inline-flex select-none items-center gds-gap-xs gds-radius-badge gds-pad-x-sm gds-pad-y-sm gds-text-caption font-medium',\n {\n defaultVariants: {\n variant: 'default',\n },\n variants: {\n variant: {\n danger: 'bg-danger/10 text-danger',\n default: 'bg-fg-muted/10 text-fg-muted',\n info: 'bg-accent/10 text-accent',\n 'palette-0': 'bg-palette-0/10 text-palette-0',\n 'palette-1': 'bg-palette-1/10 text-palette-1',\n 'palette-2': 'bg-palette-2/10 text-palette-2',\n 'palette-3': 'bg-palette-3/10 text-palette-3',\n 'palette-4': 'bg-palette-4/10 text-palette-4',\n 'palette-5': 'bg-palette-5/10 text-palette-5',\n 'palette-6': 'bg-palette-6/10 text-palette-6',\n 'palette-7': 'bg-palette-7/10 text-palette-7',\n 'palette-8': 'bg-palette-8/10 text-palette-8',\n 'palette-9': 'bg-palette-9/10 text-palette-9',\n success: 'bg-success/10 text-success',\n warning: 'bg-warning/10 text-warning',\n },\n },\n },\n)\n\nconst dotColors: Partial<Record<string, string>> = {\n danger: 'bg-danger',\n default: 'bg-fg-muted',\n info: 'bg-accent',\n success: 'bg-success',\n warning: 'bg-warning',\n}\n\ntype BadgeVariant = NonNullable<VariantProps<typeof badgeVariants>['variant']>\n\ntype BadgeProps = React.HTMLAttributes<HTMLSpanElement> &\n VariantProps<typeof badgeVariants> & {\n count?: number\n countMax?: number\n dot?: boolean\n glass?: boolean\n }\n\nexport const Badge = forwardRef<HTMLSpanElement, BadgeProps>(\n function Badge(\n {\n children,\n className,\n count,\n countMax = 99,\n dot,\n glass,\n variant,\n ...props\n },\n ref,\n ) {\n // count badge mode\n if (count !== undefined) {\n if (count <= 0) return null\n const display = count > countMax ? `${countMax}+` : String(count)\n return (\n <span\n className={cx(\n 'inline-flex items-center justify-center gds-radius-badge gds-text-caption font-bold text-accent-fg select-none',\n 'h-[18px] min-w-[18px] px-1',\n variant === 'danger' ? 'animate-pulse bg-danger' : 'bg-accent',\n glassClass(glass),\n glass === true && 'border border-white/10 bg-white/5',\n className,\n )}\n data-component=\"badge\"\n data-variant=\"count\"\n ref={ref}\n {...props}\n >\n {display}\n </span>\n )\n }\n\n // standard badge\n return (\n <span\n className={cx(\n badgeVariants({ variant }),\n glassClass(glass),\n glass === true && 'border border-white/10 bg-white/5',\n className,\n )}\n data-component=\"badge\"\n data-variant={variant ?? 'default'}\n ref={ref}\n {...props}\n >\n {dot === true && (\n <span\n className={cx(\n 'h-1.5 w-1.5 gds-radius-badge',\n dotColors[variant ?? 'default'] ?? 'bg-fg-muted',\n )}\n />\n )}\n {children}\n </span>\n )\n },\n)\n\n// map a numeric index to a palette variant\nexport function paletteVariant(index: number): BadgeVariant {\n return `palette-${index % 10}` as BadgeVariant\n}\n\nexport { badgeVariants }\nexport type { BadgeProps, BadgeVariant }\n","import type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nconst colorMap = {\n accent: 'bg-accent',\n danger: 'bg-danger',\n success: 'bg-success',\n} as const\n\ntype BadgeDotProps = React.HTMLAttributes<HTMLDivElement> & {\n children: ReactNode\n color?: 'accent' | 'danger' | 'success'\n show?: boolean\n}\n\nexport const BadgeDot = forwardRef<HTMLDivElement, BadgeDotProps>(\n function BadgeDot({ children, className, color = 'danger', show = true, ...props }, ref) {\n return (\n <div\n className={cx('relative inline-flex', className)}\n data-component=\"badge-dot\"\n ref={ref}\n {...props}\n >\n {children}\n {show && (\n <span\n className={cx('absolute -right-0.5 -top-0.5 h-1.5 w-1.5 rounded-full', colorMap[color])}\n />\n )}\n </div>\n )\n },\n)\n\nexport type { BadgeDotProps }\n","// L-dep — motion helper\n// converts a motion prop value to a CSS class name\n// this is the bridge between component props and the CSS animation system\n// zero friction: <Card motion=\"scaleIn\"> → className=\"animate-scale-in\"\n\nconst PRESET_TO_CLASS: Record<string, string> = {\n fadeIn: 'animate-fade-in',\n fadeOut: 'animate-fade-out',\n scaleIn: 'animate-scale-in',\n scaleOut: 'animate-scale-out',\n slideUp: 'animate-slide-up',\n slideDown: 'animate-slide-down',\n slideLeft: 'animate-slide-left',\n slideRight: 'animate-slide-right',\n}\n\n// convert motion prop to className — returns empty string if no motion\nexport function motionClass(motion?: string): string {\n if (motion === undefined) return ''\n return PRESET_TO_CLASS[motion] ?? ''\n}\n\n// convert motion prop with speed variant\nexport function motionClassWithSpeed(\n motion?: string,\n speed?: 'fast' | 'slow',\n): string {\n const base = motionClass(motion)\n if (base === '') return ''\n if (speed === 'fast') return `${base} animate-fast`\n if (speed === 'slow') return `${base} animate-slow`\n return base\n}\n","import { cva } from 'class-variance-authority'\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\nimport { motionClass } from '../utils/motion'\nimport type { VariantProps } from '../utils/types'\n\nconst buttonVariants = cva(\n 'inline-flex select-none items-center justify-center font-medium transition-colors ' +\n focusCls,\n {\n defaultVariants: {\n size: 'default',\n variant: 'primary',\n },\n variants: {\n size: {\n default: 'gds-h gds-gap-sm gds-radius-button gds-pad-x gds-text-body',\n lg: 'gds-h-lg gds-gap gds-radius-button gds-pad-x-lg gds-text-body',\n sm: 'gds-h-sm gds-gap-xs gds-radius-button gds-pad-x-sm gds-text-label',\n },\n variant: {\n danger: 'bg-danger text-accent-fg hover:bg-danger/90',\n ghost: 'bg-transparent text-fg-muted hover:bg-bg-tertiary hover:text-fg',\n primary: 'bg-accent text-accent-fg hover:bg-accent-hover',\n secondary: 'border border-border bg-transparent text-fg hover:bg-bg-tertiary',\n },\n },\n },\n)\n\ntype ButtonProps = React.ButtonHTMLAttributes<HTMLButtonElement> &\n VariantProps<typeof buttonVariants> & {\n fullWidth?: boolean\n glass?: boolean\n icon?: ReactNode\n iconRight?: ReactNode\n loading?: boolean\n motion?: string\n }\n\n// inline SVG spinner to avoid circular L2 dependency\nfunction InlineSpinner() {\n return (\n <svg className=\"h-3 w-3 animate-spin\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n}\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n function Button(\n {\n children,\n className,\n disabled,\n fullWidth,\n glass,\n icon,\n iconRight,\n loading,\n motion: m,\n size,\n variant,\n ...props\n },\n ref,\n ) {\n return (\n <button\n className={cx(\n buttonVariants({ size, variant }),\n (disabled === true || loading === true) && 'cursor-not-allowed opacity-50',\n fullWidth === true && 'w-full',\n glassClass(glass),\n glass === true && 'border border-white/10 bg-bg/60',\n motionClass(m),\n className,\n )}\n data-component=\"button\"\n data-variant={variant ?? 'primary'}\n disabled={disabled === true || loading === true}\n ref={ref}\n {...props}\n >\n {loading === true ? (\n <InlineSpinner />\n ) : icon !== undefined ? (\n <span className=\"gds-icon-child-sm\">{icon}</span>\n ) : null}\n {children}\n {iconRight !== undefined && (\n <span className=\"gds-icon-child-sm\">{iconRight}</span>\n )}\n </button>\n )\n },\n)\n\nexport { buttonVariants }\nexport type { ButtonProps }\n","import type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype DividerProps = React.HTMLAttributes<HTMLDivElement> & {\n icon?: ReactNode\n orientation?: 'horizontal' | 'vertical'\n}\n\nexport const Divider = forwardRef<HTMLDivElement, DividerProps>(\n function Divider({ className, icon, orientation = 'horizontal', ...props }, ref) {\n if (orientation === 'vertical') {\n return (\n <div\n className={cx('inline-flex h-full flex-col items-center', icon !== undefined && 'gds-gap-sm', className)}\n data-component=\"divider\"\n ref={ref}\n {...props}\n >\n {icon !== undefined ? (\n <>\n <div className=\"flex-1 border-l border-border\" />\n <span className=\"shrink-0 text-fg-muted/50 gds-icon-child-sm\">{icon}</span>\n <div className=\"flex-1 border-l border-border\" />\n </>\n ) : (\n <div className=\"h-full border-l border-border\" />\n )}\n </div>\n )\n }\n\n if (icon !== undefined) {\n return (\n <div\n className={cx('flex items-center gds-gap-sm', className)}\n data-component=\"divider\"\n ref={ref}\n {...props}\n >\n <div className=\"flex-1 border-t border-border\" />\n <span className=\"shrink-0 text-fg-muted/50 gds-icon-child-sm\">{icon}</span>\n <div className=\"flex-1 border-t border-border\" />\n </div>\n )\n }\n\n return (\n <div\n className={cx('h-px w-full bg-border/50', className)}\n data-component=\"divider\"\n ref={ref}\n {...props}\n />\n )\n },\n)\n\nexport type { DividerProps }\n","import { cva } from 'class-variance-authority'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport type { VariantProps } from '../utils/types'\n\nconst dotVariants = cva('inline-block shrink-0 gds-radius-badge', {\n defaultVariants: {\n color: 'accent',\n size: 'default',\n },\n variants: {\n color: {\n accent: 'bg-accent',\n danger: 'bg-danger',\n muted: 'bg-fg-muted/30',\n success: 'bg-success',\n warning: 'bg-warning',\n },\n size: {\n default: 'h-2 w-2',\n lg: 'h-3 w-3',\n sm: 'h-1.5 w-1.5',\n },\n },\n})\n\ntype DotProps = React.HTMLAttributes<HTMLSpanElement> &\n VariantProps<typeof dotVariants> & {\n label?: string\n pulse?: boolean\n }\n\nexport const Dot = forwardRef<HTMLSpanElement, DotProps>(\n function Dot({ className, color, label, pulse = false, size, ...props }, ref) {\n return (\n <span\n className={cx('relative inline-flex items-center', label !== undefined && 'gds-gap-sm', className)}\n data-component=\"dot\"\n ref={ref}\n {...props}\n >\n <span className={dotVariants({ color, size })} />\n {pulse && (\n <span\n className={cx(\n 'absolute inset-0 animate-ping gds-radius-badge opacity-40',\n dotVariants({ color, size }),\n )}\n />\n )}\n {label !== undefined && (\n <span className=\"gds-text-label text-fg-muted\">{label}</span>\n )}\n </span>\n )\n },\n)\n\nexport { dotVariants }\nexport type { DotProps }\n","import type { CSSProperties, ReactNode } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype FocusRingProps = {\n children: ReactNode\n color?: string\n width?: number\n offset?: number\n className?: string\n}\n\nexport function FocusRing({\n children,\n color = 'var(--gds-accent)',\n width = 2,\n offset = 2,\n className,\n}: FocusRingProps) {\n const style: CSSProperties = {\n '--focus-ring-color': color,\n '--focus-ring-width': `${width}px`,\n '--focus-ring-offset': `${offset}px`,\n } as CSSProperties\n\n return (\n <span\n className={cx(\n 'relative inline-flex [&:focus-within]:outline [&:focus-within]:outline-[length:var(--focus-ring-width)] [&:focus-within]:outline-[color:var(--focus-ring-color)] [&:focus-within]:outline-offset-[var(--focus-ring-offset)]',\n className,\n )}\n data-component=\"focus-ring\"\n style={style}\n >\n {children}\n </span>\n )\n}\n\nexport type { FocusRingProps }\n","// glow-effect — container that adds a colored glow/aura behind its content\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype GlowIntensity = 'sm' | 'default' | 'lg'\n\nconst intensityCls: Record<GlowIntensity, string> = {\n sm: 'blur-lg opacity-20',\n default: 'blur-xl opacity-30',\n lg: 'blur-2xl opacity-40',\n}\n\nexport type GlowEffectProps = {\n children: React.ReactNode\n color?: string\n intensity?: GlowIntensity\n className?: string\n}\n\nexport const GlowEffect = forwardRef<HTMLDivElement, GlowEffectProps>(\n function GlowEffect(\n { children, color = 'var(--gds-accent)', intensity = 'default', className },\n ref,\n ) {\n return (\n <div ref={ref} data-component=\"glow-effect\" className={cx('relative', className)}>\n <div\n className={cx('absolute inset-0 -z-1 rounded-inherit', intensityCls[intensity])}\n style={{ backgroundColor: color }}\n aria-hidden\n />\n {children}\n </div>\n )\n },\n)\n","// gradient-border — container with a gradient border via background-clip trick\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type GradientBorderProps = {\n children: React.ReactNode\n gradient?: string\n width?: number\n radius?: number\n className?: string\n}\n\nexport const GradientBorder = forwardRef<HTMLDivElement, GradientBorderProps>(\n function GradientBorder(\n {\n children,\n gradient = 'linear-gradient(135deg, var(--gds-accent), var(--gds-success))',\n width = 1,\n radius = 12,\n className,\n },\n ref,\n ) {\n const innerRadius = Math.max(0, radius - width)\n\n return (\n <div\n ref={ref}\n data-component=\"gradient-border\"\n className={cx(className)}\n style={{ background: gradient, padding: width, borderRadius: radius }}\n >\n <div\n className=\"bg-bg\"\n style={{ borderRadius: innerRadius }}\n >\n {children}\n </div>\n </div>\n )\n },\n)\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type HighlightProps = React.HTMLAttributes<HTMLSpanElement> & {\n text: string\n query: string\n highlightClass?: string\n caseSensitive?: boolean\n}\n\nexport const Highlight = forwardRef<HTMLSpanElement, HighlightProps>(\n function Highlight(\n {\n text,\n query,\n highlightClass = 'bg-accent/20 text-accent',\n caseSensitive = false,\n className,\n ...props\n },\n ref,\n ) {\n if (query === '') {\n return (\n <span className={className} data-component=\"highlight\" ref={ref} {...props}>\n {text}\n </span>\n )\n }\n\n const flags = caseSensitive ? 'g' : 'gi'\n const escaped = query.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n const parts = text.split(new RegExp(`(${escaped})`, flags))\n\n return (\n <span className={cx(className)} data-component=\"highlight\" ref={ref} {...props}>\n {parts.map((part, i) => {\n const isMatch = caseSensitive\n ? part === query\n : part.toLowerCase() === query.toLowerCase()\n if (isMatch) {\n return (\n <mark className={cx('bg-transparent', highlightClass)} key={i}>\n {part}\n </mark>\n )\n }\n return part\n })}\n </span>\n )\n },\n)\n","import { cva } from 'class-variance-authority'\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\nimport type { VariantProps } from '../utils/types'\n\nconst iconButtonVariants = cva(\n 'inline-flex select-none items-center justify-center transition-colors ' +\n focusCls,\n {\n defaultVariants: {\n size: 'default',\n variant: 'default',\n },\n variants: {\n size: {\n default: 'gds-sq gds-radius-button gds-icon-child',\n lg: 'gds-sq-lg gds-radius-button gds-icon-child-lg',\n sm: 'gds-sq-sm gds-radius-button gds-icon-child-sm',\n },\n variant: {\n danger: 'text-danger hover:bg-danger/10',\n default: 'text-fg-muted hover:bg-bg-tertiary hover:text-fg',\n ghost: 'text-fg-muted hover:text-fg',\n },\n },\n },\n)\n\ntype IconButtonProps = Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n 'children'\n> &\n VariantProps<typeof iconButtonVariants> & {\n glass?: boolean\n icon: ReactNode\n tooltip?: string\n }\n\nexport const IconButton = forwardRef<HTMLButtonElement, IconButtonProps>(\n function IconButton(\n { className, disabled, glass, icon, size, tooltip, variant, ...props },\n ref,\n ) {\n return (\n <button\n aria-label={tooltip}\n className={cx(\n iconButtonVariants({ size, variant }),\n disabled === true && 'cursor-not-allowed opacity-50',\n glassClass(glass),\n glass === true && 'border border-white/10 bg-bg/60',\n className,\n )}\n data-component=\"icon-button\"\n data-variant={variant ?? 'default'}\n disabled={disabled}\n ref={ref}\n title={tooltip}\n type=\"button\"\n {...props}\n >\n {icon}\n </button>\n )\n },\n)\n\nexport { iconButtonVariants }\nexport type { IconButtonProps }\n","import { cva } from 'class-variance-authority'\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\nimport type { VariantProps } from '../utils/types'\n\nconst inputVariants = cva(\n 'w-full gds-radius-input border bg-bg text-fg transition-colors placeholder:text-fg-muted/50 outline-none disabled:cursor-not-allowed disabled:opacity-50 ' +\n focusCls,\n {\n compoundVariants: [\n {\n error: true,\n className: 'focus-visible:ring-danger',\n },\n ],\n defaultVariants: {\n error: false,\n inputSize: 'default',\n },\n variants: {\n error: {\n false: 'border-border hover:border-border-strong',\n true: 'border-danger',\n },\n inputSize: {\n default: 'gds-h gds-text-body',\n sm: 'gds-h-sm gds-text-label',\n },\n },\n },\n)\n\ntype InputProps = Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'> &\n VariantProps<typeof inputVariants> & {\n glass?: boolean\n icon?: ReactNode\n rightIcon?: ReactNode\n }\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(\n function Input(\n { className, error, glass, icon, inputSize, rightIcon, ...props },\n ref,\n ) {\n const hasLeft = icon !== undefined\n const hasRight = rightIcon !== undefined\n\n if (!hasLeft && !hasRight) {\n return (\n <input\n className={cx(\n inputVariants({ error, inputSize }),\n 'gds-pad-x',\n glassClass(glass),\n glass === true && 'border-white/10 bg-bg/60',\n className,\n )}\n data-component=\"input\"\n ref={ref}\n {...props}\n />\n )\n }\n\n return (\n <div className=\"relative\" data-component=\"input\">\n {hasLeft && (\n <span className=\"absolute top-1/2 left-2.5 -translate-y-1/2 text-fg-muted/50 gds-icon-child-sm\">\n {icon}\n </span>\n )}\n <input\n className={cx(\n inputVariants({ error, inputSize }),\n hasLeft ? 'pl-8' : 'gds-pad-x',\n hasRight ? 'pr-8' : 'gds-pad-x',\n glassClass(glass),\n glass === true && 'border-white/10 bg-bg/60',\n className,\n )}\n ref={ref}\n {...props}\n />\n {hasRight && (\n <span className=\"absolute top-1/2 right-2.5 -translate-y-1/2 text-fg-muted/50 gds-icon-child-sm\">\n {rightIcon}\n </span>\n )}\n </div>\n )\n },\n)\n\nexport { inputVariants }\nexport type { InputProps }\n","import type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\ntype KbdProps = React.HTMLAttributes<HTMLElement> & {\n children: ReactNode\n glass?: boolean\n}\n\nexport const Kbd = forwardRef<HTMLElement, KbdProps>(\n function Kbd({ children, className, glass, ...props }, ref) {\n return (\n <kbd\n className={cx(\n 'inline-flex select-none items-center gds-radius-button border border-border/60 bg-bg-tertiary gds-pad-x-sm gds-pad-y-sm font-mono gds-text-label text-fg-muted',\n glassClass(glass),\n glass === true && 'border-white/10 bg-bg/60',\n className,\n )}\n data-component=\"kbd\"\n ref={ref}\n {...props}\n >\n {children}\n </kbd>\n )\n },\n)\n\nexport type { KbdProps }\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype LabelProps = React.LabelHTMLAttributes<HTMLLabelElement> & {\n required?: boolean\n}\n\nexport const Label = forwardRef<HTMLLabelElement, LabelProps>(\n function Label({ children, className, required = false, ...props }, ref) {\n return (\n <label\n className={cx('block select-none gds-text-body font-medium text-fg', className)}\n data-component=\"label\"\n ref={ref}\n {...props}\n >\n {children}\n {required && <span className=\"ml-0.5 text-danger\">*</span>}\n </label>\n )\n },\n)\n\nexport type { LabelProps }\n","// number-stepper — increment/decrement buttons for number-input\nimport { cx } from '../utils/cx'\n\ntype NumberStepperProps = {\n direction: 'decrement' | 'increment'\n disabled?: boolean\n onClick: () => void\n}\n\nconst btnBase =\n 'flex items-center justify-center select-none px-2 text-fg-muted hover:text-fg hover:bg-bg-tertiary transition-colors disabled:cursor-not-allowed disabled:opacity-50'\n\nexport function NumberStepper({ direction, disabled, onClick }: NumberStepperProps) {\n const isDecrement = direction === 'decrement'\n return (\n <button\n aria-label={direction}\n className={cx(\n btnBase,\n isDecrement ? 'rounded-l-[inherit] border-r border-border' : 'rounded-r-[inherit] border-l border-border',\n )}\n disabled={disabled}\n onClick={onClick}\n tabIndex={-1}\n type=\"button\"\n >\n {isDecrement ? '-' : '+'}\n </button>\n )\n}\n","import { cva } from 'class-variance-authority'\nimport { forwardRef, useCallback } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\nimport type { VariantProps } from '../utils/types'\nimport { NumberStepper } from './number-stepper'\n\nconst numberInputVariants = cva(\n 'flex items-center gds-radius-input border bg-bg text-fg transition-colors ' +\n '[&:has(input:focus-visible)]:ring-2 [&:has(input:focus-visible)]:ring-accent [&:has(input:focus-visible)]:ring-offset-1 [&:has(input:focus-visible)]:ring-offset-bg',\n {\n compoundVariants: [\n {\n error: true,\n className:\n '[&:has(input:focus-visible)]:ring-danger',\n },\n ],\n defaultVariants: {\n error: false,\n inputSize: 'default',\n },\n variants: {\n error: {\n false: 'border-border hover:border-border-strong',\n true: 'border-danger',\n },\n inputSize: {\n default: 'gds-h gds-text-body',\n sm: 'gds-h-sm gds-text-label',\n },\n },\n },\n)\n\ntype NumberInputProps = VariantProps<typeof numberInputVariants> & {\n className?: string\n disabled?: boolean\n glass?: boolean\n max?: number\n min?: number\n onChange: (value: number | null) => void\n placeholder?: string\n step?: number\n value: number | null\n}\n\nfunction clamp(val: number, min?: number, max?: number): number {\n let result = val\n if (min !== undefined && result < min) {\n result = min\n }\n if (max !== undefined && result > max) {\n result = max\n }\n return result\n}\n\nconst NumberInput = forwardRef<HTMLInputElement, NumberInputProps>(\n function NumberInput(\n { className, disabled, error, glass, inputSize, max, min, onChange, placeholder, step = 1, value },\n ref,\n ) {\n const handleDecrement = useCallback(() => {\n const base = value ?? 0\n onChange(clamp(base - step, min, max))\n }, [value, step, min, max, onChange])\n\n const handleIncrement = useCallback(() => {\n const base = value ?? 0\n onChange(clamp(base + step, min, max))\n }, [value, step, min, max, onChange])\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const raw = e.target.value\n if (raw === '') {\n onChange(null)\n return\n }\n const parsed = Number(raw)\n if (Number.isNaN(parsed)) {\n return\n }\n onChange(clamp(parsed, min, max))\n },\n [min, max, onChange],\n )\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'ArrowUp') {\n e.preventDefault()\n handleIncrement()\n }\n if (e.key === 'ArrowDown') {\n e.preventDefault()\n handleDecrement()\n }\n },\n [handleIncrement, handleDecrement],\n )\n\n return (\n <div\n className={cx(\n numberInputVariants({ error, inputSize }),\n glassClass(glass),\n glass === true && 'border-white/10 bg-bg/60',\n disabled === true && 'cursor-not-allowed opacity-50',\n className,\n )}\n data-component=\"number-input\"\n >\n <NumberStepper direction=\"decrement\" disabled={disabled} onClick={handleDecrement} />\n <input\n className={cx(\n 'min-w-0 flex-1 bg-transparent text-center outline-none placeholder:text-fg-muted/50',\n '[appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none',\n )}\n disabled={disabled}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n ref={ref}\n type=\"number\"\n value={value ?? ''}\n />\n <NumberStepper direction=\"increment\" disabled={disabled} onClick={handleIncrement} />\n </div>\n )\n },\n)\n\nexport { NumberInput,numberInputVariants }\nexport type { NumberInputProps }\n","import { cva } from 'class-variance-authority'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport type { VariantProps } from '../utils/types'\n\nconst progressVariants = cva(\n 'flex-1 overflow-hidden gds-radius-badge bg-bg-tertiary',\n {\n defaultVariants: { size: 'default' },\n variants: {\n size: {\n default: 'h-2',\n lg: 'h-3',\n sm: 'h-1',\n },\n },\n },\n)\n\nconst barColorMap = {\n danger: 'bg-danger',\n default: 'bg-accent',\n success: 'bg-success',\n warning: 'bg-warning',\n}\n\ntype ProgressProps = React.HTMLAttributes<HTMLDivElement> &\n VariantProps<typeof progressVariants> & {\n showLabel?: boolean\n value?: number\n variant?: 'danger' | 'default' | 'success' | 'warning'\n }\n\nexport const Progress = forwardRef<HTMLDivElement, ProgressProps>(\n function Progress(\n { className, showLabel = false, size, value = 0, variant = 'default', ...props },\n ref,\n ) {\n const clamped = Math.max(0, Math.min(100, value))\n\n return (\n <div\n className={cx('flex items-center gds-gap-sm', className)}\n data-component=\"progress\"\n ref={ref}\n {...props}\n >\n <div\n aria-valuemax={100}\n aria-valuemin={0}\n aria-valuenow={clamped}\n className={progressVariants({ size })}\n role=\"progressbar\"\n >\n <div\n className={cx(\n 'h-full gds-radius-badge transition-all',\n barColorMap[variant],\n )}\n style={{ width: `${clamped}%` }}\n />\n </div>\n {showLabel && (\n <span className=\"shrink-0 font-mono gds-text-label text-fg-muted tabular-nums select-none\">\n {clamped}%\n </span>\n )}\n </div>\n )\n },\n)\n\nexport { progressVariants }\nexport type { ProgressProps }\n","import { forwardRef } from 'react'\nimport { createPortal } from 'react-dom'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\ntype ScreenOverlayProps = {\n visible: boolean\n glass?: boolean\n onClick?: () => void\n className?: string\n}\n\nconst ScreenOverlayInner = forwardRef<HTMLDivElement, ScreenOverlayProps>(\n function ScreenOverlayInner({ visible, glass, onClick, className }, ref) {\n if (!visible) return null\n\n return (\n <div\n className={cx(\n 'fixed inset-0 z-40',\n glass === true ? glassClass(true) : 'bg-black/50',\n className,\n )}\n data-component=\"screen-overlay\"\n onClick={onClick}\n ref={ref}\n />\n )\n },\n)\n\nexport const ScreenOverlay = forwardRef<HTMLDivElement, ScreenOverlayProps>(\n function ScreenOverlay(props, ref) {\n if (typeof document === 'undefined') return null\n return createPortal(<ScreenOverlayInner ref={ref} {...props} />, document.body)\n },\n)\n\nexport type { ScreenOverlayProps }\n","import type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype ScrollAreaProps = React.HTMLAttributes<HTMLDivElement> & {\n children: ReactNode\n maxHeight?: number | string\n orientation?: 'both' | 'horizontal' | 'vertical'\n}\n\nexport const ScrollArea = forwardRef<HTMLDivElement, ScrollAreaProps>(\n function ScrollArea(\n { children, className, maxHeight, orientation = 'vertical', style, ...props },\n ref,\n ) {\n return (\n <div\n className={cx(\n orientation === 'vertical' && 'overflow-x-hidden overflow-y-auto',\n orientation === 'horizontal' && 'overflow-x-auto overflow-y-hidden',\n orientation === 'both' && 'overflow-auto',\n className,\n )}\n data-component=\"scroll-area\"\n ref={ref}\n style={{\n ...style,\n maxHeight:\n maxHeight !== undefined\n ? typeof maxHeight === 'number'\n ? `${maxHeight}px`\n : maxHeight\n : undefined,\n }}\n {...props}\n >\n {children}\n </div>\n )\n },\n)\n\nexport type { ScrollAreaProps }\n","import { cva } from 'class-variance-authority'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport type { VariantProps } from '../utils/types'\n\nconst separatorVariants = cva('border-border', {\n defaultVariants: { variant: 'solid' },\n variants: {\n variant: {\n dashed: 'border-dashed',\n dotted: 'border-dotted',\n solid: 'border-solid',\n },\n },\n})\n\ntype SeparatorProps = React.HTMLAttributes<HTMLDivElement> &\n VariantProps<typeof separatorVariants> & {\n label?: string\n orientation?: 'horizontal' | 'vertical'\n }\n\nexport const Separator = forwardRef<HTMLDivElement, SeparatorProps>(\n function Separator(\n { className, label, orientation = 'horizontal', variant = 'solid', ...props },\n ref,\n ) {\n if (orientation === 'vertical') {\n return (\n <div\n aria-orientation=\"vertical\"\n className={cx(\n 'inline-block h-full border-l',\n separatorVariants({ variant }),\n className,\n )}\n data-component=\"separator\"\n ref={ref}\n role=\"separator\"\n {...props}\n />\n )\n }\n\n if (label !== undefined) {\n return (\n <div\n className={cx('flex items-center gds-gap select-none', className)}\n data-component=\"separator\"\n ref={ref}\n role=\"separator\"\n {...props}\n >\n <div className={cx('flex-1 border-t', separatorVariants({ variant }))} />\n <span className=\"shrink-0 gds-text-caption font-semibold tracking-widest text-fg-muted/40 uppercase\">\n {label}\n </span>\n <div className={cx('flex-1 border-t', separatorVariants({ variant }))} />\n </div>\n )\n }\n\n if (variant === 'solid') {\n return (\n <div\n className={cx('h-px w-full shrink-0 bg-border', className)}\n data-component=\"separator\"\n ref={ref}\n role=\"separator\"\n {...props}\n />\n )\n }\n\n return (\n <div\n aria-orientation=\"horizontal\"\n className={cx('border-t', separatorVariants({ variant }), className)}\n data-component=\"separator\"\n ref={ref}\n role=\"separator\"\n {...props}\n />\n )\n },\n)\n\nexport { separatorVariants }\nexport type { SeparatorProps }\n","// skeleton — loading placeholder with shimmer animation\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype SkeletonVariant = 'circle' | 'rect' | 'text'\n\ntype SkeletonProps = {\n className?: string\n height?: number | string\n lines?: number\n variant?: SkeletonVariant\n width?: number | string\n}\n\nconst shimmerStyle: React.CSSProperties = {\n backgroundImage:\n 'linear-gradient(90deg, transparent 0%, rgba(255,255,255,0.06) 40%, rgba(255,255,255,0.06) 60%, transparent 100%)',\n backgroundSize: '200% 100%',\n animation: 'gds-shimmer 1.5s ease-in-out infinite',\n}\n\nconst variantDefaults: Record<SkeletonVariant, string> = {\n text: 'h-4 w-full rounded',\n circle: 'h-10 w-10 rounded-full',\n rect: 'h-20 w-full rounded-md',\n}\n\nexport const Skeleton = forwardRef<HTMLDivElement, SkeletonProps>(\n function Skeleton({ className, height, lines = 1, variant = 'text', width }, ref) {\n const sizeStyle: React.CSSProperties = {}\n if (width !== undefined) sizeStyle.width = typeof width === 'number' ? `${width}px` : width\n if (height !== undefined) sizeStyle.height = typeof height === 'number' ? `${height}px` : height\n\n const baseClass = cx('bg-bg-tertiary', variantDefaults[variant])\n\n if (variant === 'text' && lines > 1) {\n return (\n <div\n ref={ref}\n className={cx('flex flex-col gap-2', className)}\n data-component=\"skeleton\"\n data-variant={variant}\n >\n {Array.from({ length: lines }, (_, i) => (\n <div\n key={i}\n className={cx(baseClass, i === lines - 1 && 'w-3/4')}\n style={{ ...sizeStyle, ...shimmerStyle }}\n />\n ))}\n </div>\n )\n }\n\n return (\n <div\n ref={ref}\n className={cx(baseClass, className)}\n data-component=\"skeleton\"\n data-variant={variant}\n style={{ ...sizeStyle, ...shimmerStyle }}\n />\n )\n },\n)\n\nexport type { SkeletonProps, SkeletonVariant }\n","import { cx } from '../utils/cx'\n\ntype SkipNavProps = {\n targetId?: string\n label?: string\n className?: string\n}\n\nexport function SkipNav({\n targetId = 'main-content',\n label = 'Skip to content',\n className,\n}: SkipNavProps) {\n return (\n <a\n className={cx(\n 'absolute left-2 top-2 z-50 -translate-y-full rounded bg-accent px-3 py-2 text-sm font-medium text-white transition-transform focus:translate-y-0 focus:outline-none',\n className,\n )}\n data-component=\"skip-nav\"\n href={`#${targetId}`}\n >\n {label}\n </a>\n )\n}\n\nexport type { SkipNavProps }\n","import { cva } from 'class-variance-authority'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport type { VariantProps } from '../utils/types'\n\nconst spinnerVariants = cva('animate-spin text-accent', {\n defaultVariants: { size: 'default' },\n variants: {\n size: {\n default: 'gds-icon',\n lg: 'gds-icon-lg',\n sm: 'gds-icon-sm',\n },\n },\n})\n\ntype SpinnerProps = VariantProps<typeof spinnerVariants> & {\n className?: string\n}\n\nexport const Spinner = forwardRef<SVGSVGElement, SpinnerProps>(\n function Spinner({ className, size }, ref) {\n return (\n <svg\n className={cx(spinnerVariants({ size }), className)}\n data-component=\"spinner\"\n fill=\"none\"\n ref={ref}\n role=\"status\"\n viewBox=\"0 0 24 24\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n }\n)\n\nexport { spinnerVariants }\nexport type { SpinnerProps }\n","import { cva } from 'class-variance-authority'\nimport { forwardRef } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\nimport type { VariantProps } from '../utils/types'\n\ntype TextareaResize = 'both' | 'none' | 'vertical'\n\nconst textareaVariants = cva(\n 'w-full gds-radius-input border bg-bg gds-pad-x gds-pad-y text-fg gds-text-body placeholder:text-fg-muted/50 outline-none disabled:cursor-not-allowed disabled:opacity-50 ' +\n focusCls,\n {\n compoundVariants: [\n {\n error: true,\n className: 'focus-visible:ring-danger',\n },\n ],\n defaultVariants: {\n error: false,\n },\n variants: {\n error: {\n false: 'border-border hover:border-border-strong',\n true: 'border-danger',\n },\n },\n },\n)\n\nconst resizeClasses: Record<TextareaResize, string> = {\n both: 'resize',\n none: 'resize-none',\n vertical: 'resize-y',\n}\n\ntype TextareaProps = React.TextareaHTMLAttributes<HTMLTextAreaElement> &\n VariantProps<typeof textareaVariants> & {\n autoGrow?: boolean\n glass?: boolean\n resize?: TextareaResize\n }\n\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(\n function Textarea(\n {\n autoGrow = false,\n className,\n error,\n glass,\n resize = 'vertical',\n ...props\n },\n ref,\n ) {\n return (\n <textarea\n className={cx(\n textareaVariants({ error }),\n resizeClasses[resize],\n autoGrow && '[field-sizing:content] overflow-hidden',\n glassClass(glass),\n glass === true && 'border-white/10 bg-bg/60',\n className,\n )}\n data-component=\"textarea\"\n ref={ref}\n {...props}\n />\n )\n },\n)\n\nexport { textareaVariants }\nexport type { TextareaProps, TextareaResize }\n","// truncate — text truncation with ellipsis, single or multi-line clamp\nimport type { ReactNode } from 'react'\nimport { forwardRef, useState } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type TruncateProps = {\n children: ReactNode\n lines?: number\n expandable?: boolean\n className?: string\n}\n\nexport const Truncate = forwardRef<HTMLDivElement, TruncateProps>(\n function Truncate(\n { children, lines = 1, expandable = false, className },\n ref,\n ) {\n const [expanded, setExpanded] = useState(false)\n\n const shouldClamp = !expanded\n const isSingleLine = lines === 1\n\n const clampStyle = !isSingleLine && shouldClamp\n ? {\n display: '-webkit-box' as const,\n WebkitLineClamp: lines,\n WebkitBoxOrient: 'vertical' as const,\n overflow: 'hidden' as const,\n }\n : undefined\n\n const handleClick = expandable\n ? () => setExpanded((prev) => !prev)\n : undefined\n\n return (\n <div\n ref={ref}\n className={cx(\n isSingleLine && shouldClamp && 'truncate',\n expandable && 'cursor-pointer',\n className,\n )}\n style={clampStyle}\n onClick={handleClick}\n data-component=\"truncate\"\n data-expanded={expanded ? 'true' : undefined}\n role={expandable ? 'button' : undefined}\n tabIndex={expandable ? 0 : undefined}\n >\n {children}\n </div>\n )\n },\n)\n","import type { ReactNode } from 'react'\n\nimport { srOnly } from '../utils/a11y'\nimport { cx } from '../utils/cx'\n\ntype VisuallyHiddenProps = {\n as?: 'div' | 'span'\n children: ReactNode\n className?: string\n}\n\nexport function VisuallyHidden({\n as: Tag = 'span',\n children,\n className,\n}: VisuallyHiddenProps) {\n return (\n <Tag className={cx(srOnly, className)} data-component=\"visually-hidden\">\n {children}\n </Tag>\n )\n}\n\nexport type { VisuallyHiddenProps }\n","// animated-number — number display that animates when value changes\nimport { forwardRef, useEffect, useRef, useState } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type AnimatedNumberProps = {\n value: number\n duration?: number\n format?: (n: number) => string\n className?: string\n}\n\nfunction defaultFormat(n: number): string {\n return n.toLocaleString()\n}\n\nfunction easeOut(t: number): number {\n return 1 - Math.pow(1 - t, 3)\n}\n\nexport const AnimatedNumber = forwardRef<HTMLSpanElement, AnimatedNumberProps>(\n function AnimatedNumber(\n { value, duration = 500, format = defaultFormat, className },\n ref,\n ) {\n const [display, setDisplay] = useState(value)\n const prevRef = useRef(value)\n\n useEffect(() => {\n const from = prevRef.current\n prevRef.current = value\n\n if (duration <= 0) {\n setDisplay(value)\n return\n }\n\n const start = performance.now()\n let raf: number\n\n function tick(now: number) {\n const elapsed = now - start\n const progress = Math.min(elapsed / duration, 1)\n setDisplay(from + (value - from) * easeOut(progress))\n if (progress < 1) {\n raf = requestAnimationFrame(tick)\n }\n }\n\n raf = requestAnimationFrame(tick)\n return () => cancelAnimationFrame(raf)\n }, [value, duration])\n\n return (\n <span ref={ref} className={cx('tabular-nums', className)} data-component=\"animated-number\">\n {format(display)}\n </span>\n )\n },\n)\n","import { cva } from 'class-variance-authority'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\nimport type { VariantProps } from '../utils/types'\n\nconst avatarVariants = cva(\n 'relative inline-flex shrink-0 select-none items-center justify-center rounded-full font-medium',\n {\n defaultVariants: { size: 'default' },\n variants: {\n size: {\n default: 'h-8 w-8 text-xs',\n lg: 'h-10 w-10 text-sm',\n sm: 'h-6 w-6 text-[10px]',\n xs: 'h-5 w-5 text-[9px]',\n },\n },\n },\n)\n\nconst paletteColors = [\n 'bg-palette-0', 'bg-palette-1', 'bg-palette-2', 'bg-palette-3', 'bg-palette-4',\n 'bg-palette-5', 'bg-palette-6', 'bg-palette-7', 'bg-palette-8', 'bg-palette-9',\n]\n\nconst statusColors: Record<string, string> = {\n away: 'bg-warning',\n busy: 'bg-danger',\n offline: 'bg-fg-muted/30',\n online: 'bg-success',\n}\n\nconst statusSizeMap: Record<string, string> = {\n default: 'h-2.5 w-2.5',\n lg: 'h-3 w-3',\n sm: 'h-2 w-2',\n xs: 'h-1.5 w-1.5',\n}\n\nfunction getInitials(name: string): string {\n const parts = name.trim().split(/\\s+/)\n if (parts.length >= 2) return `${parts[0][0]}${parts[1][0]}`.toUpperCase()\n return name.slice(0, 2).toUpperCase()\n}\n\nfunction hashName(name: string): number {\n let hash = 0\n for (let i = 0; i < name.length; i++) {\n hash = (hash * 31 + name.charCodeAt(i)) | 0\n }\n return Math.abs(hash)\n}\n\ntype AvatarStatus = 'away' | 'busy' | 'offline' | 'online'\n\ntype AvatarProps = React.HTMLAttributes<HTMLSpanElement> &\n VariantProps<typeof avatarVariants> & {\n glass?: boolean\n name?: string\n src?: string\n status?: AvatarStatus\n }\n\nexport const Avatar = forwardRef<HTMLSpanElement, AvatarProps>(\n function Avatar({ className, glass, name, size = 'default', src, status, ...props }, ref) {\n const sizeKey = size ?? 'default'\n const colorIdx = name !== undefined ? hashName(name) % 10 : 0\n\n return (\n <span\n className={cx(\n avatarVariants({ size }),\n src === undefined && paletteColors[colorIdx],\n src === undefined && 'text-white',\n glassClass(glass),\n className,\n )}\n data-component=\"avatar\"\n ref={ref}\n {...props}\n >\n {src !== undefined ? (\n <img alt={name ?? ''} className=\"absolute inset-0 h-full w-full rounded-full object-cover\" src={src} />\n ) : (\n <span>{name !== undefined ? getInitials(name) : '?'}</span>\n )}\n {status !== undefined && (\n <span\n className={cx(\n 'absolute right-0 bottom-0 rounded-full ring-2 ring-bg',\n statusSizeMap[sizeKey],\n statusColors[status],\n )}\n />\n )}\n </span>\n )\n },\n)\n\ntype AvatarGroupProps = React.HTMLAttributes<HTMLDivElement> & {\n max?: number\n}\n\nexport const AvatarGroup = forwardRef<HTMLDivElement, AvatarGroupProps>(\n function AvatarGroup({ children, className, max, ...props }, ref) {\n const items = Array.isArray(children) ? children : [children]\n const visible = max !== undefined ? items.slice(0, max) : items\n const overflow = max !== undefined ? items.length - max : 0\n\n return (\n <div\n className={cx('flex -space-x-2', className)}\n data-component=\"avatar-group\"\n ref={ref}\n {...props}\n >\n {visible}\n {overflow > 0 && (\n <span className=\"inline-flex gds-sq items-center justify-center rounded-full bg-bg-tertiary gds-text-body font-medium text-fg-muted ring-2 ring-bg\">\n +{overflow}\n </span>\n )}\n </div>\n )\n },\n)\n\nexport { avatarVariants }\nexport type { AvatarGroupProps, AvatarProps, AvatarStatus }\n","import { forwardRef } from 'react'\n\nimport { Badge } from '../l2-primitives/badge'\nimport { cx } from '../utils/cx'\nimport type { AvatarProps } from './avatar'\nimport { Avatar } from './avatar'\n\ntype AvatarBadgeProps = AvatarProps & {\n count?: number\n maxCount?: number\n}\n\nexport const AvatarBadge = forwardRef<HTMLSpanElement, AvatarBadgeProps>(\n function AvatarBadge({ count, maxCount = 99, className, ...avatarProps }, ref) {\n const showBadge = count !== undefined && count > 0\n\n return (\n <span className={cx('relative inline-flex', className)} data-component=\"avatar-badge\" ref={ref}>\n <Avatar {...avatarProps} />\n {showBadge && (\n <Badge\n className=\"absolute -top-1 -right-1 z-10\"\n count={count}\n countMax={maxCount}\n />\n )}\n </span>\n )\n },\n)\n\nexport type { AvatarBadgeProps }\n","// barcode — simple barcode display using SVG (code 128 style appearance)\nimport { forwardRef, useMemo } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type BarcodeProps = {\n value: string\n width?: number\n height?: number\n showValue?: boolean\n color?: string\n className?: string\n}\n\n// generate bar pattern from character codes\nfunction generateBars(value: string): number[] {\n const bars: number[] = []\n\n // start pattern — thick bars\n bars.push(3, 1, 1, 1, 3, 1)\n\n for (let i = 0; i < value.length; i++) {\n const code = value.charCodeAt(i)\n // alternate thick/thin based on char code bits\n bars.push(\n (code & 1) !== 0 ? 2 : 1,\n (code & 2) !== 0 ? 2 : 1,\n (code & 4) !== 0 ? 2 : 1,\n (code & 8) !== 0 ? 2 : 1,\n (code & 16) !== 0 ? 2 : 1,\n 1,\n )\n }\n\n // stop pattern — thick bars\n bars.push(3, 1, 1, 1, 3)\n\n return bars\n}\n\nexport const Barcode = forwardRef<SVGSVGElement, BarcodeProps>(\n function Barcode(\n { value, width = 200, height = 60, showValue = true, color = 'currentColor', className },\n ref,\n ) {\n const bars = useMemo(() => generateBars(value), [value])\n\n const totalUnits = bars.reduce((sum, b) => sum + b, 0)\n const barHeight = showValue ? height - 16 : height\n const unitWidth = width / totalUnits\n\n let x = 0\n const rects: Array<{ x: number; w: number }> = []\n for (let i = 0; i < bars.length; i++) {\n const w = bars[i] * unitWidth\n // even indices are bars, odd are spaces\n if (i % 2 === 0) {\n rects.push({ x, w })\n }\n x += w\n }\n\n return (\n <svg\n ref={ref}\n width={width}\n height={height}\n viewBox={`0 0 ${width} ${height}`}\n className={cx('shrink-0', className)}\n data-component=\"barcode\"\n data-testid=\"barcode-svg\"\n role=\"img\"\n aria-label={`Barcode: ${value}`}\n >\n {rects.map((r, i) => (\n <rect key={i} x={r.x} y={0} width={r.w} height={barHeight} fill={color} />\n ))}\n {showValue && (\n <text\n x={width / 2}\n y={height - 2}\n textAnchor=\"middle\"\n fontSize={11}\n fill={color}\n fontFamily=\"monospace\"\n data-testid=\"barcode-text\"\n >\n {value}\n </text>\n )}\n </svg>\n )\n },\n)\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nconst speedMap = {\n default: 'animate-pulse',\n fast: 'animate-pulse [animation-duration:0.5s]',\n slow: 'animate-pulse [animation-duration:3s]',\n} as const\n\ntype BlinkingSpeed = 'slow' | 'default' | 'fast'\n\ntype BlinkingProps = React.HTMLAttributes<HTMLSpanElement> & {\n active?: boolean\n speed?: BlinkingSpeed\n}\n\nexport const Blinking = forwardRef<HTMLSpanElement, BlinkingProps>(\n function Blinking({ active = true, children, className, speed = 'default', ...props }, ref) {\n return (\n <span\n className={cx(active && speedMap[speed], className)}\n data-component=\"blinking\"\n ref={ref}\n {...props}\n >\n {children}\n </span>\n )\n },\n)\n\nexport type { BlinkingProps, BlinkingSpeed }\n","import type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\n\ntype CheckboxProps = Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'onChange'> & {\n checked?: boolean\n checkIcon?: ReactNode\n label?: string\n onChange?: (checked: boolean) => void\n}\n\n// default check SVG (no lucide dependency)\nfunction DefaultCheck() {\n return (\n <svg className=\"h-3 w-3 text-accent-fg\" fill=\"none\" stroke=\"currentColor\" strokeWidth={3} viewBox=\"0 0 24 24\">\n <path d=\"M5 13l4 4L19 7\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n )\n}\n\nexport const Checkbox = forwardRef<HTMLButtonElement, CheckboxProps>(\n function Checkbox(\n { checked = false, checkIcon, className, disabled = false, label, onChange, ...props },\n ref,\n ) {\n return (\n <button\n aria-checked={checked}\n className={cx(\n 'inline-flex select-none items-center gds-gap-sm',\n disabled && 'cursor-not-allowed opacity-50',\n className,\n )}\n data-component=\"checkbox\"\n data-state={checked ? 'checked' : 'unchecked'}\n disabled={disabled}\n onClick={() => onChange?.(!checked)}\n ref={ref}\n role=\"checkbox\"\n type=\"button\"\n {...props}\n >\n <span\n className={cx(\n 'inline-flex gds-icon shrink-0 items-center justify-center gds-radius-button border transition-colors',\n focusCls,\n checked\n ? 'border-accent bg-accent'\n : 'border-border bg-bg hover:border-accent/50',\n )}\n >\n <span className={cx('transition-opacity', checked ? 'opacity-100' : 'opacity-0')}>\n {checkIcon ?? <DefaultCheck />}\n </span>\n </span>\n {label !== undefined && (\n <span className=\"gds-text-body text-fg\">{label}</span>\n )}\n </button>\n )\n },\n)\n\nexport type { CheckboxProps }\n","// checkbox-group — group of checkboxes with optional select-all\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { Checkbox } from './checkbox'\n\ntype CheckboxGroupOption = {\n label: string\n value: string\n}\n\ntype CheckboxGroupProps = Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> & {\n disabled?: boolean\n onChange: (value: string[]) => void\n options: CheckboxGroupOption[]\n selectAll?: boolean\n value: string[]\n}\n\nexport const CheckboxGroup = forwardRef<HTMLDivElement, CheckboxGroupProps>(\n function CheckboxGroup({ className, disabled = false, onChange, options, selectAll = false, value, ...props }, ref) {\n const allSelected = options.length > 0 && options.every((o) => value.includes(o.value))\n\n const handleToggle = (optValue: string, checked: boolean) => {\n if (checked) {\n onChange([...value, optValue])\n } else {\n onChange(value.filter((v) => v !== optValue))\n }\n }\n\n const handleSelectAll = (checked: boolean) => {\n if (checked) {\n onChange(options.map((o) => o.value))\n } else {\n onChange([])\n }\n }\n\n return (\n <div ref={ref} className={cx('flex flex-col gds-gap', className)} data-component=\"checkbox-group\" role=\"group\" {...props}>\n {selectAll && (\n <Checkbox checked={allSelected} disabled={disabled} label=\"Select all\" onChange={handleSelectAll} />\n )}\n {options.map((opt) => (\n <Checkbox\n checked={value.includes(opt.value)}\n disabled={disabled}\n key={opt.value}\n label={opt.label}\n onChange={(checked) => handleToggle(opt.value, checked)}\n />\n ))}\n </div>\n )\n },\n)\n\nexport type { CheckboxGroupOption, CheckboxGroupProps }\n","import { cva } from 'class-variance-authority'\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\nimport type { VariantProps } from '../utils/types'\n\nconst chipVariants = cva(\n 'inline-flex select-none items-center gds-gap-xs gds-radius-badge gds-pad-x-sm gds-pad-y-sm gds-text-label font-medium',\n {\n defaultVariants: { variant: 'default' },\n variants: {\n variant: {\n accent: 'bg-accent/10 text-accent',\n danger: 'bg-danger/10 text-danger',\n default: 'bg-fg-muted/10 text-fg-muted',\n success: 'bg-success/10 text-success',\n warning: 'bg-warning/10 text-warning',\n },\n },\n },\n)\n\ntype ChipProps = React.HTMLAttributes<HTMLSpanElement> &\n VariantProps<typeof chipVariants> & {\n glass?: boolean\n icon?: ReactNode\n label: string\n onRemove?: () => void\n removeIcon?: ReactNode\n }\n\n// default X SVG\nfunction DefaultRemoveIcon() {\n return (\n <svg className=\"h-3 w-3\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} viewBox=\"0 0 24 24\">\n <path d=\"M18 6L6 18M6 6l12 12\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n )\n}\n\nexport const Chip = forwardRef<HTMLSpanElement, ChipProps>(\n function Chip(\n { className, glass, icon, label, onRemove, removeIcon, variant, ...props },\n ref,\n ) {\n return (\n <span\n className={cx(\n chipVariants({ variant }),\n glassClass(glass),\n glass === true && 'border border-white/10 bg-white/5',\n className,\n )}\n data-component=\"chip\"\n data-variant={variant ?? 'default'}\n ref={ref}\n {...props}\n >\n {icon !== undefined && (\n <span className=\"gds-icon-child-sm\">{icon}</span>\n )}\n {label}\n {onRemove !== undefined && (\n <button\n className={cx(\n 'ml-0.5 gds-radius-badge p-0.5 transition-colors hover:bg-current/10',\n focusCls,\n )}\n onClick={onRemove}\n tabIndex={-1}\n type=\"button\"\n >\n {removeIcon ?? <DefaultRemoveIcon />}\n </button>\n )}\n </span>\n )\n },\n)\n\nexport { chipVariants }\nexport type { ChipProps }\n","// copy-button — button that copies text to clipboard with feedback\nimport { forwardRef, useCallback, useEffect, useRef, useState } from 'react'\n\nimport { Button } from '../l2-primitives/button'\nimport { cx } from '../utils/cx'\n\nexport type CopyButtonProps = {\n text: string\n label?: string\n copiedLabel?: string\n variant?: 'default' | 'ghost'\n size?: 'default' | 'sm'\n className?: string\n}\n\nexport const CopyButton = forwardRef<HTMLButtonElement, CopyButtonProps>(\n function CopyButton(\n {\n text,\n label = 'Copy',\n copiedLabel = 'Copied!',\n variant = 'default',\n size = 'default',\n className,\n },\n ref,\n ) {\n const [copied, setCopied] = useState(false)\n const timerRef = useRef<ReturnType<typeof setTimeout>>(null)\n\n useEffect(() => {\n return () => {\n if (timerRef.current !== null) clearTimeout(timerRef.current)\n }\n }, [])\n\n const handleCopy = useCallback(() => {\n navigator.clipboard.writeText(text).catch(() => {})\n setCopied(true)\n if (timerRef.current !== null) clearTimeout(timerRef.current)\n timerRef.current = setTimeout(() => setCopied(false), 1500)\n }, [text])\n\n const buttonVariant = variant === 'ghost' ? 'ghost' : 'secondary'\n\n return (\n <Button\n ref={ref}\n variant={buttonVariant}\n size={size}\n className={cx(className)}\n onClick={handleCopy}\n data-component=\"copy-button\"\n icon={\n copied ? (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M2 7l3 3 7-7\" />\n </svg>\n ) : (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <rect x=\"4\" y=\"4\" width=\"8\" height=\"8\" rx=\"1.5\" />\n <path d=\"M10 4V2.5A1.5 1.5 0 008.5 1h-6A1.5 1.5 0 001 2.5v6A1.5 1.5 0 002.5 10H4\" />\n </svg>\n )\n }\n >\n {copied ? copiedLabel : label}\n </Button>\n )\n },\n)\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nconst variantMap = {\n accent: 'bg-accent text-accent-fg',\n danger: 'bg-danger text-white',\n success: 'bg-success text-white',\n} as const\n\ntype CountBadgeVariant = 'accent' | 'danger' | 'success'\n\ntype CountBadgeProps = React.HTMLAttributes<HTMLSpanElement> & {\n count: number\n max?: number\n variant?: CountBadgeVariant\n}\n\nexport const CountBadge = forwardRef<HTMLSpanElement, CountBadgeProps>(\n function CountBadge({ className, count, max = 99, variant = 'danger', ...props }, ref) {\n const display = count > max ? `${max}+` : String(count)\n\n return (\n <span\n className={cx(\n 'inline-flex min-w-5 select-none items-center justify-center rounded-full px-1.5 py-0.5 text-[10px] font-bold leading-none',\n variantMap[variant],\n className,\n )}\n data-component=\"count-badge\"\n data-variant={variant}\n ref={ref}\n {...props}\n >\n {display}\n </span>\n )\n },\n)\n\nexport type { CountBadgeProps, CountBadgeVariant }\n","// count-up — animated number counter from 0 to target\nimport { forwardRef, useEffect, useState } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type CountUpProps = {\n value: number\n duration?: number\n decimals?: number\n prefix?: string\n suffix?: string\n separator?: string\n className?: string\n}\n\nfunction formatNumber(n: number, decimals: number, separator: string): string {\n const fixed = n.toFixed(decimals)\n if (separator === '') return fixed\n\n const [intPart, decPart] = fixed.split('.')\n const formatted = intPart.replace(/\\B(?=(\\d{3})+(?!\\d))/g, separator)\n if (decPart !== undefined) return `${formatted}.${decPart}`\n return formatted\n}\n\n// ease-out cubic\nfunction easeOut(t: number): number {\n const t1 = t - 1\n return t1 * t1 * t1 + 1\n}\n\nexport const CountUp = forwardRef<HTMLSpanElement, CountUpProps>(\n function CountUp(\n { value, duration = 1500, decimals = 0, prefix, suffix, separator = ',', className },\n ref,\n ) {\n const [current, setCurrent] = useState(0)\n\n useEffect(() => {\n if (duration <= 0) {\n setCurrent(value)\n return\n }\n const start = performance.now()\n let raf: number\n\n function tick(now: number) {\n const elapsed = now - start\n const progress = Math.min(elapsed / duration, 1)\n setCurrent(easeOut(progress) * value)\n if (progress < 1) {\n raf = requestAnimationFrame(tick)\n }\n }\n\n raf = requestAnimationFrame(tick)\n return () => cancelAnimationFrame(raf)\n }, [value, duration])\n\n return (\n <span ref={ref} className={cx('tabular-nums', className)} data-component=\"count-up\">\n {prefix ?? ''}{formatNumber(current, decimals, separator)}{suffix ?? ''}\n </span>\n )\n },\n)\n","// countdown — countdown timer to a target date\nimport { forwardRef, useEffect, useState } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type CountdownProps = {\n targetDate: Date | string | number\n onComplete?: () => void\n showDays?: boolean\n showSeconds?: boolean\n className?: string\n}\n\ntype TimeRemaining = {\n days: number\n hours: number\n minutes: number\n seconds: number\n total: number\n}\n\nfunction calcRemaining(target: number): TimeRemaining {\n const total = Math.max(0, target - Date.now())\n const seconds = Math.floor((total / 1000) % 60)\n const minutes = Math.floor((total / 1000 / 60) % 60)\n const hours = Math.floor((total / 1000 / 60 / 60) % 24)\n const days = Math.floor(total / 1000 / 60 / 60 / 24)\n return { days, hours, minutes, seconds, total }\n}\n\nfunction pad(n: number): string {\n return n.toString().padStart(2, '0')\n}\n\nexport const Countdown = forwardRef<HTMLDivElement, CountdownProps>(\n function Countdown(\n {\n targetDate,\n onComplete,\n showDays = true,\n showSeconds = true,\n className,\n },\n ref,\n ) {\n const target = new Date(targetDate).getTime()\n const [remaining, setRemaining] = useState<TimeRemaining>(() => calcRemaining(target))\n\n useEffect(() => {\n if (remaining.total <= 0) return\n\n const interval = setInterval(() => {\n const next = calcRemaining(target)\n setRemaining(next)\n if (next.total <= 0) {\n clearInterval(interval)\n if (onComplete !== undefined) onComplete()\n }\n }, 1000)\n\n return () => clearInterval(interval)\n }, [target, onComplete, remaining.total])\n\n const segments: Array<{ label: string; value: string }> = []\n\n if (showDays) {\n segments.push({ label: 'D', value: pad(remaining.days) })\n }\n segments.push({ label: 'H', value: pad(remaining.hours) })\n segments.push({ label: 'M', value: pad(remaining.minutes) })\n if (showSeconds) {\n segments.push({ label: 'S', value: pad(remaining.seconds) })\n }\n\n return (\n <div\n ref={ref}\n className={cx('inline-flex items-center gap-1', className)}\n data-component=\"countdown\"\n >\n {segments.map((seg, i) => (\n <div key={seg.label} className=\"flex items-center gap-1\">\n {i > 0 && (\n <span className=\"text-fg-muted gds-text-body\" data-testid=\"separator\">:</span>\n )}\n <span\n className=\"inline-flex items-center justify-center rounded bg-bg-tertiary px-1.5 py-0.5 tabular-nums gds-radius-button gds-text-body text-fg\"\n data-testid={`segment-${seg.label}`}\n >\n {seg.value}\n </span>\n </div>\n ))}\n </div>\n )\n },\n)\n","// dom utilities — keyboard, event, and element helpers\n\n// check if keyboard event should trigger click (Enter or Space)\nexport function isActivationKey(e: React.KeyboardEvent): boolean {\n return e.key === 'Enter' || e.key === ' '\n}\n\n// merge multiple refs into one callback ref\nexport function mergeRefs<T>(\n ...refs: (React.Ref<T> | undefined)[]\n): React.RefCallback<T> {\n return (value) => {\n for (const ref of refs) {\n if (ref === undefined || ref === null) continue\n if (typeof ref === 'function') {\n ref(value)\n } else {\n ;(ref as React.MutableRefObject<T | null>).current = value\n }\n }\n }\n}\n\n// clamp a number between min and max (immutable)\nexport function clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), max)\n}\n\n// generate a unique id with optional prefix\nlet counter = 0\nexport function uid(prefix = 'gds'): string {\n counter += 1\n return `${prefix}-${counter}`\n}\n","import { forwardRef, useCallback, useRef, useState } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { mergeRefs } from '../utils/dom'\n\ntype CursorFollowProps = React.HTMLAttributes<HTMLDivElement> & {\n offset?: { x?: number; y?: number }\n smooth?: boolean\n}\n\nexport const CursorFollow = forwardRef<HTMLDivElement, CursorFollowProps>(\n function CursorFollow({ children, className, offset, smooth = true, ...props }, ref) {\n const containerRef = useRef<HTMLDivElement>(null)\n const [pos, setPos] = useState({ x: 0, y: 0 })\n\n const ox = offset?.x ?? 0\n const oy = offset?.y ?? 0\n\n const handleMouseMove = useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n const rect = containerRef.current?.getBoundingClientRect()\n if (rect === undefined) return\n setPos({ x: e.clientX - rect.left + ox, y: e.clientY - rect.top + oy })\n },\n [ox, oy],\n )\n\n return (\n <div\n className={cx('relative', className)}\n data-component=\"cursor-follow\"\n onMouseMove={handleMouseMove}\n ref={mergeRefs(containerRef, ref)}\n {...props}\n >\n <div\n className=\"pointer-events-none absolute\"\n style={{\n transform: `translate(${pos.x}px, ${pos.y}px)`,\n transition: smooth ? 'transform 80ms ease-out' : undefined,\n }}\n >\n {children}\n </div>\n </div>\n )\n },\n)\n\nexport type { CursorFollowProps }\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype DiffIndicatorProps = React.HTMLAttributes<HTMLSpanElement> & {\n inverted?: boolean\n unit?: string\n value: number\n}\n\nexport const DiffIndicator = forwardRef<HTMLSpanElement, DiffIndicatorProps>(\n function DiffIndicator({ className, inverted = false, unit, value, ...props }, ref) {\n const isPositive = value > 0\n const isNegative = value < 0\n // inverted: lower is good (e.g. error rate), so positive = bad, negative = good\n const isGood = inverted ? isNegative : isPositive\n const isBad = inverted ? isPositive : isNegative\n\n const colorCls = isGood ? 'text-success' : isBad ? 'text-danger' : 'text-fg-muted'\n const arrow = isPositive ? '\\u2191' : isNegative ? '\\u2193' : ''\n const sign = isPositive ? '+' : ''\n const display = `${arrow}${sign}${value}${unit !== undefined ? unit : ''}`\n\n return (\n <span\n className={cx('inline-flex items-center gap-0.5 text-sm font-medium tabular-nums', colorCls, className)}\n data-component=\"diff-indicator\"\n data-direction={isPositive ? 'up' : isNegative ? 'down' : 'neutral'}\n ref={ref}\n {...props}\n >\n {display}\n </span>\n )\n },\n)\n\nexport type { DiffIndicatorProps }\n","// editable — inline editable text, click to edit, enter/blur to save, escape to cancel\nimport { forwardRef, useCallback, useRef, useState } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\n\ntype EditableProps = {\n value: string\n onChange: (value: string) => void\n placeholder?: string\n disabled?: boolean\n className?: string\n}\n\nconst Editable = forwardRef<HTMLSpanElement, EditableProps>(\n function Editable({ value, onChange, placeholder = 'Click to edit', disabled, className }, ref) {\n const [editing, setEditing] = useState(false)\n const [draft, setDraft] = useState(value)\n const inputRef = useRef<HTMLInputElement>(null)\n\n const startEditing = useCallback(() => {\n if (disabled === true) return\n setDraft(value)\n setEditing(true)\n // auto-focus happens via autoFocus prop\n }, [disabled, value])\n\n const save = useCallback(() => {\n setEditing(false)\n onChange(draft)\n }, [draft, onChange])\n\n const cancel = useCallback(() => {\n setEditing(false)\n setDraft(value)\n }, [value])\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n save()\n }\n if (e.key === 'Escape') {\n cancel()\n }\n },\n [save, cancel],\n )\n\n if (editing) {\n return (\n <input\n ref={inputRef}\n autoFocus\n className={cx(\n 'bg-transparent underline gds-text-body text-fg outline-none',\n focusCls,\n className,\n )}\n data-component=\"editable\"\n data-state=\"editing\"\n onBlur={save}\n onChange={(e) => setDraft(e.target.value)}\n onKeyDown={handleKeyDown}\n type=\"text\"\n value={draft}\n />\n )\n }\n\n const isEmpty = value === ''\n\n return (\n <span\n ref={ref}\n className={cx(\n 'inline cursor-pointer gds-text-body hover:underline',\n disabled === true && 'pointer-events-none opacity-50',\n isEmpty ? 'text-fg-muted' : 'text-fg',\n focusCls,\n className,\n )}\n data-component=\"editable\"\n data-state=\"display\"\n onClick={startEditing}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n startEditing()\n }\n }}\n role=\"button\"\n tabIndex={disabled === true ? -1 : 0}\n >\n {isEmpty ? placeholder : value}\n </span>\n )\n },\n)\n\nexport { Editable }\nexport type { EditableProps }\n","// glow-dot — colored dot with glow effect (LED indicator)\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype GlowDotColor = 'accent' | 'danger' | 'success' | 'warning'\ntype GlowDotSize = 'default' | 'lg' | 'sm'\n\ntype GlowDotProps = React.HTMLAttributes<HTMLSpanElement> & {\n color?: GlowDotColor\n size?: GlowDotSize\n}\n\nconst colorMap: Record<GlowDotColor, string> = {\n accent: 'bg-accent shadow-[0_0_6px_var(--color-accent)]',\n success: 'bg-success shadow-[0_0_6px_var(--color-success)]',\n warning: 'bg-warning shadow-[0_0_6px_var(--color-warning)]',\n danger: 'bg-danger shadow-[0_0_6px_var(--color-danger)]',\n}\n\nconst sizeMap: Record<GlowDotSize, string> = {\n sm: 'h-1.5 w-1.5',\n default: 'h-2.5 w-2.5',\n lg: 'h-3.5 w-3.5',\n}\n\nexport const GlowDot = forwardRef<HTMLSpanElement, GlowDotProps>(\n function GlowDot({ color = 'accent', size = 'default', className, ...props }, ref) {\n return (\n <span\n ref={ref}\n className={cx('inline-block rounded-full', colorMap[color], sizeMap[size], className)}\n data-component=\"glow-dot\"\n data-variant={color}\n {...props}\n />\n )\n },\n)\n\nexport type { GlowDotColor, GlowDotProps, GlowDotSize }\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype HeatCellProps = React.HTMLAttributes<HTMLDivElement> & {\n color?: string\n max?: number\n showValue?: boolean\n size?: number\n value: number\n}\n\nconst HeatCell = forwardRef<HTMLDivElement, HeatCellProps>(\n function HeatCell({ className, color = 'var(--color-accent)', max = 100, showValue = false, size = 32, value, ...props }, ref) {\n const intensity = max > 0 ? Math.min(Math.max(value / max, 0), 1) : 0\n\n return (\n <div\n className={cx('inline-flex items-center justify-center rounded text-[10px] font-medium', className)}\n data-component=\"heat-cell\"\n ref={ref}\n style={{ backgroundColor: color, height: size, opacity: 0.1 + intensity * 0.9, width: size }}\n {...props}\n >\n {showValue && <span className=\"text-white mix-blend-difference\">{value}</span>}\n </div>\n )\n },\n)\n\nexport { HeatCell }\nexport type { HeatCellProps }\n","import type { ReactNode } from 'react'\nimport { forwardRef, useCallback, useRef, useState } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\nconst positionClasses: Record<string, string> = {\n bottom: 'top-full left-1/2 -translate-x-1/2 mt-2',\n left: 'right-full top-1/2 -translate-y-1/2 mr-2',\n right: 'left-full top-1/2 -translate-y-1/2 ml-2',\n top: 'bottom-full left-1/2 -translate-x-1/2 mb-2',\n}\n\nconst arrowClasses: Record<string, string> = {\n bottom: 'bottom-full left-1/2 -translate-x-1/2 border-b-bg-tertiary border-x-transparent border-t-transparent border-4',\n left: 'left-full top-1/2 -translate-y-1/2 border-l-bg-tertiary border-y-transparent border-r-transparent border-4',\n right: 'right-full top-1/2 -translate-y-1/2 border-r-bg-tertiary border-y-transparent border-l-transparent border-4',\n top: 'top-full left-1/2 -translate-x-1/2 border-t-bg-tertiary border-x-transparent border-b-transparent border-4',\n}\n\ntype TooltipProps = React.HTMLAttributes<HTMLDivElement> & {\n content: ReactNode\n delay?: number\n glass?: boolean\n interactive?: boolean\n maxWidth?: number\n placement?: 'bottom' | 'left' | 'right' | 'top'\n}\n\nexport const Tooltip = forwardRef<HTMLDivElement, TooltipProps>(\n function Tooltip(\n {\n children,\n className,\n content,\n delay = 300,\n glass,\n interactive = false,\n maxWidth,\n placement = 'top',\n ...props\n },\n ref,\n ) {\n const [open, setOpen] = useState(false)\n const enterTimer = useRef<ReturnType<typeof setTimeout>>(undefined)\n const leaveTimer = useRef<ReturnType<typeof setTimeout>>(undefined)\n\n const handleEnter = useCallback(() => {\n clearTimeout(leaveTimer.current)\n enterTimer.current = setTimeout(() => setOpen(true), delay)\n }, [delay])\n\n const handleLeave = useCallback(() => {\n clearTimeout(enterTimer.current)\n if (interactive) {\n leaveTimer.current = setTimeout(() => setOpen(false), 150)\n } else {\n setOpen(false)\n }\n }, [interactive])\n\n return (\n <div\n className={cx('relative inline-flex', className)}\n data-component=\"tooltip\"\n data-state={open ? 'open' : 'closed'}\n onMouseEnter={handleEnter}\n onMouseLeave={handleLeave}\n ref={ref}\n {...props}\n >\n {children}\n {open && (\n <div\n className={cx(\n 'pointer-events-none absolute z-50 animate-popup whitespace-nowrap gds-radius-tooltip gds-pad-x-sm gds-pad-y-sm gds-text-label text-fg',\n interactive && 'pointer-events-auto',\n glass === true ? glassClass(glass) : 'bg-bg-tertiary',\n glass === true && 'border border-white/10',\n )}\n onMouseEnter={interactive ? handleEnter : undefined}\n onMouseLeave={interactive ? handleLeave : undefined}\n style={maxWidth !== undefined ? { maxWidth, whiteSpace: 'normal' } : undefined}\n >\n <span className={cx('absolute', arrowClasses[placement])} />\n <span className={positionClasses[placement] ? '' : ''}>{content}</span>\n </div>\n )}\n </div>\n )\n },\n)\n\nexport type { TooltipProps }\n","import type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { Tooltip } from './tooltip'\n\ntype InfoTipProps = React.HTMLAttributes<HTMLDivElement> & {\n content: ReactNode\n size?: 'default' | 'sm'\n}\n\nconst sizeClasses = {\n default: 'h-4 w-4',\n sm: 'h-3.5 w-3.5',\n} as const\n\nexport const InfoTip = forwardRef<HTMLDivElement, InfoTipProps>(\n function InfoTip({ className, content, size = 'default', ...props }, ref) {\n return (\n <Tooltip content={content} ref={ref} {...props}>\n <span className={cx('inline-flex cursor-help items-center text-fg-muted/60 hover:text-fg-muted', className)}>\n <svg className={sizeClasses[size]} fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" viewBox=\"0 0 24 24\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 16v-4M12 8h.01\" />\n </svg>\n </span>\n </Tooltip>\n )\n },\n)\n\nexport type { InfoTipProps }\n","// key-value — simple inline key: value pair for compact data display\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype KeyValueProps = React.HTMLAttributes<HTMLDivElement> & {\n label: string\n mono?: boolean\n value: ReactNode\n}\n\nexport const KeyValue = forwardRef<HTMLDivElement, KeyValueProps>(\n function KeyValue({ label, value, mono = false, className, ...props }, ref) {\n return (\n <div\n ref={ref}\n className={cx('inline-flex items-baseline gap-1.5 gds-text-body', className)}\n data-component=\"key-value\"\n {...props}\n >\n <span className=\"shrink-0 text-fg-muted gds-text-caption\">{label}</span>\n <span className={cx('text-fg', mono && 'font-mono')}>{value}</span>\n </div>\n )\n },\n)\n\nexport type { KeyValueProps }\n","import type { ReactNode } from 'react'\nimport { useCallback, useEffect } from 'react'\n\nimport { Kbd } from '../l2-primitives/kbd'\nimport { cx } from '../utils/cx'\n\ntype KeyboardShortcutProps = {\n keys: string\n onTrigger: () => void\n showBadge?: boolean\n disabled?: boolean\n className?: string\n}\n\nfunction parseKeys(keys: string) {\n const parts = keys.toLowerCase().split('+')\n const modifiers = {\n ctrl: false,\n meta: false,\n shift: false,\n alt: false,\n }\n let mainKey = ''\n\n for (const part of parts) {\n if (part === 'ctrl') {\n modifiers.ctrl = true\n } else if (part === 'meta' || part === 'cmd') {\n modifiers.meta = true\n } else if (part === 'shift') {\n modifiers.shift = true\n } else if (part === 'alt') {\n modifiers.alt = true\n } else {\n mainKey = part\n }\n }\n\n return { modifiers, mainKey }\n}\n\nfunction formatKeyLabel(part: string): string {\n const map: Record<string, string> = {\n ctrl: 'Ctrl',\n meta: '\\u2318',\n cmd: '\\u2318',\n shift: '\\u21E7',\n alt: 'Alt',\n }\n return map[part.toLowerCase()] ?? part.toUpperCase()\n}\n\nexport function KeyboardShortcut({\n keys,\n onTrigger,\n showBadge = false,\n disabled = false,\n className,\n}: KeyboardShortcutProps) {\n const { modifiers, mainKey } = parseKeys(keys)\n\n const handler = useCallback(\n (e: KeyboardEvent) => {\n if (disabled) return\n if (e.ctrlKey !== modifiers.ctrl) return\n if (e.metaKey !== modifiers.meta) return\n if (e.shiftKey !== modifiers.shift) return\n if (e.altKey !== modifiers.alt) return\n if (e.key.toLowerCase() !== mainKey) return\n\n e.preventDefault()\n onTrigger()\n },\n [disabled, modifiers.ctrl, modifiers.meta, modifiers.shift, modifiers.alt, mainKey, onTrigger],\n )\n\n useEffect(() => {\n window.addEventListener('keydown', handler)\n return () => window.removeEventListener('keydown', handler)\n }, [handler])\n\n if (!showBadge) return null\n\n const parts = keys.split('+')\n const badges: ReactNode[] = parts.map((part, i) => (\n <Kbd key={i}>{formatKeyLabel(part)}</Kbd>\n ))\n\n return (\n <span className={cx('inline-flex items-center gap-1', className)} data-component=\"keyboard-shortcut\">\n {badges}\n </span>\n )\n}\n\nexport type { KeyboardShortcutProps }\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype LiveDotProps = React.HTMLAttributes<HTMLSpanElement> & {\n label?: string\n}\n\nexport const LiveDot = forwardRef<HTMLSpanElement, LiveDotProps>(\n function LiveDot({ className, label = 'LIVE', ...props }, ref) {\n return (\n <span\n className={cx('inline-flex items-center gap-1.5', className)}\n data-component=\"live-dot\"\n ref={ref}\n {...props}\n >\n <span className=\"relative flex h-2 w-2\">\n <span className=\"absolute inline-flex h-full w-full animate-ping rounded-full bg-danger opacity-75\" />\n <span className=\"relative inline-flex h-2 w-2 rounded-full bg-danger\" />\n </span>\n <span className=\"text-xs font-bold uppercase tracking-wide text-danger\">{label}</span>\n </span>\n )\n },\n)\n\nexport type { LiveDotProps }\n","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","// magnetic-button — element that subtly moves toward the cursor when hovering\nimport { forwardRef, useCallback, useRef, useState } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { mergeRefs } from '../utils/dom'\n\nexport type MagneticButtonProps = {\n children: React.ReactNode\n strength?: number\n radius?: number\n className?: string\n}\n\nexport const MagneticButton = forwardRef<HTMLDivElement, MagneticButtonProps>(\n function MagneticButton({ children, strength = 0.3, radius = 100, className }, ref) {\n const innerRef = useRef<HTMLDivElement>(null)\n const [transform, setTransform] = useState({ x: 0, y: 0 })\n\n const handleMouseMove = useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n const el = innerRef.current\n if (el === null) return\n const rect = el.getBoundingClientRect()\n const cx = rect.left + rect.width / 2\n const cy = rect.top + rect.height / 2\n const dx = e.clientX - cx\n const dy = e.clientY - cy\n const dist = Math.sqrt(dx * dx + dy * dy)\n if (dist > radius) {\n setTransform({ x: 0, y: 0 })\n return\n }\n setTransform({ x: dx * strength, y: dy * strength })\n },\n [strength, radius],\n )\n\n const handleMouseLeave = useCallback(() => {\n setTransform({ x: 0, y: 0 })\n }, [])\n\n return (\n <div\n ref={mergeRefs(innerRef, ref)}\n data-component=\"magnetic-button\"\n className={cx('inline-block', className)}\n style={{\n transform: `translate(${transform.x}px, ${transform.y}px)`,\n transition: 'transform 200ms ease-out',\n }}\n onMouseMove={handleMouseMove}\n onMouseLeave={handleMouseLeave}\n >\n {children}\n </div>\n )\n },\n)\n","// marquee — infinite horizontal scrolling content\nimport { forwardRef, useEffect, useRef, useState } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type MarqueeProps = {\n children: React.ReactNode\n speed?: number\n direction?: 'left' | 'right'\n pauseOnHover?: boolean\n className?: string\n}\n\nexport const Marquee = forwardRef<HTMLDivElement, MarqueeProps>(\n function Marquee(\n { children, speed = 30, direction = 'left', pauseOnHover = true, className },\n ref,\n ) {\n const innerRef = useRef<HTMLDivElement>(null)\n const [duration, setDuration] = useState(10)\n\n useEffect(() => {\n if (innerRef.current === null) return\n const width = innerRef.current.scrollWidth / 2\n if (width > 0) setDuration(width / speed)\n }, [speed, children])\n\n const translateFrom = direction === 'left' ? '0%' : '-50%'\n const translateTo = direction === 'left' ? '-50%' : '0%'\n\n return (\n <div\n ref={ref}\n className={cx('overflow-hidden', className)}\n data-component=\"marquee\"\n >\n <div\n ref={innerRef}\n className={cx('inline-flex will-change-transform', pauseOnHover && 'hover:[animation-play-state:paused]')}\n style={{\n animation: `marquee-scroll ${duration}s linear infinite`,\n '--marquee-from': translateFrom,\n '--marquee-to': translateTo,\n } as React.CSSProperties}\n >\n <div className=\"flex shrink-0\">{children}</div>\n <div className=\"flex shrink-0\" aria-hidden>{children}</div>\n </div>\n </div>\n )\n },\n)\n","import { cva } from 'class-variance-authority'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport type { VariantProps } from '../utils/types'\n\nconst meterVariants = cva('overflow-hidden gds-radius-badge bg-bg-tertiary', {\n defaultVariants: { size: 'default' },\n variants: {\n size: {\n default: 'h-2.5',\n lg: 'h-4',\n sm: 'h-1.5',\n },\n },\n})\n\nconst variantColors: Record<string, string> = {\n danger: 'bg-danger',\n default: 'bg-accent',\n success: 'bg-success',\n warning: 'bg-warning',\n}\n\nfunction getAutoColor(pct: number): string {\n if (pct >= 0.8) return 'bg-danger'\n if (pct >= 0.6) return 'bg-warning'\n if (pct >= 0.4) return 'bg-accent'\n return 'bg-success'\n}\n\ntype MeterProps = React.HTMLAttributes<HTMLDivElement> &\n VariantProps<typeof meterVariants> & {\n label?: string\n max?: number\n min?: number\n showValue?: boolean\n value: number\n variant?: 'auto' | 'danger' | 'default' | 'success' | 'warning'\n }\n\nexport const Meter = forwardRef<HTMLDivElement, MeterProps>(\n function Meter(\n {\n className,\n label,\n max = 100,\n min = 0,\n showValue = true,\n size,\n value,\n variant = 'auto',\n ...props\n },\n ref,\n ) {\n const range = max - min\n const pct = range > 0 ? Math.max(0, Math.min(1, (value - min) / range)) : 0\n const barColor = variant === 'auto' ? getAutoColor(pct) : (variantColors[variant] ?? 'bg-accent')\n\n return (\n <div\n className={cx('w-full', className)}\n data-component=\"meter\"\n ref={ref}\n {...props}\n >\n {(label !== undefined || showValue) && (\n <div className=\"mb-1 flex items-center justify-between\">\n {label !== undefined && (\n <span className=\"gds-text-body font-medium text-fg\">{label}</span>\n )}\n {showValue && (\n <span className=\"font-mono gds-text-label text-fg-muted tabular-nums\">\n {Math.round(pct * 100)}%\n </span>\n )}\n </div>\n )}\n <div\n aria-label={label}\n aria-valuemax={max}\n aria-valuemin={min}\n aria-valuenow={value}\n className={meterVariants({ size })}\n role=\"meter\"\n >\n <div\n className={cx('h-full gds-radius-badge transition-all duration-500', barColor)}\n style={{ width: `${pct * 100}%` }}\n />\n </div>\n </div>\n )\n },\n)\n\nexport { meterVariants }\nexport type { MeterProps }\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype OnlineIndicatorProps = React.HTMLAttributes<HTMLSpanElement> & {\n label?: string\n online: boolean\n}\n\nexport const OnlineIndicator = forwardRef<HTMLSpanElement, OnlineIndicatorProps>(\n function OnlineIndicator({ className, label, online, ...props }, ref) {\n const dotCls = online ? 'bg-success' : 'bg-fg-muted/40'\n const text = label ?? (online ? 'Online' : 'Offline')\n\n return (\n <span\n className={cx('inline-flex items-center gds-gap-sm', className)}\n data-component=\"online-indicator\"\n ref={ref}\n {...props}\n >\n <span className={cx('h-2 w-2 shrink-0 rounded-full', dotCls)} />\n <span className=\"gds-text-label text-fg-muted\">{text}</span>\n </span>\n )\n },\n)\n\nexport type { OnlineIndicatorProps }\n","// L-dep internal hooks — DOM-level utilities used by overlay components\n// these are NOT L1 systems — they're stateless side-effect helpers\n\nimport { useEffect, useRef, useState } from 'react'\n\n// prevent body scroll when overlay is open (dialog, sheet, command palette)\nexport function useScrollLock(active: boolean): void {\n useEffect(() => {\n if (!active) return\n const original = document.body.style.overflow\n document.body.style.overflow = 'hidden'\n return () => {\n document.body.style.overflow = original\n }\n }, [active])\n}\n\n// close overlay on Escape key\nexport function useEscapeKey(active: boolean, onClose: () => void): void {\n useEffect(() => {\n if (!active) return\n const handler = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose()\n }\n window.addEventListener('keydown', handler)\n return () => window.removeEventListener('keydown', handler)\n }, [active, onClose])\n}\n\n// detect click outside an element\nexport function useClickOutside(\n ref: React.RefObject<HTMLElement | null>,\n active: boolean,\n onClickOutside: () => void,\n): void {\n useEffect(() => {\n if (!active) return\n const handler = (e: MouseEvent) => {\n if (ref.current !== null && !ref.current.contains(e.target as Node)) {\n onClickOutside()\n }\n }\n document.addEventListener('mousedown', handler)\n return () => document.removeEventListener('mousedown', handler)\n }, [ref, active, onClickOutside])\n}\n\n// subscribe to a CSS media query — returns live match state\nexport function useMediaQuery(query: string): boolean {\n const [matches, setMatches] = useState(() => {\n if (typeof window === 'undefined') return false\n try { return window.matchMedia(query).matches } catch { return false }\n })\n\n useEffect(() => {\n if (typeof window === 'undefined') return\n let mql: MediaQueryList\n try { mql = window.matchMedia(query) } catch { return }\n setMatches(mql.matches)\n const handler = (e: MediaQueryListEvent) => setMatches(e.matches)\n mql.addEventListener('change', handler)\n return () => mql.removeEventListener('change', handler)\n }, [query])\n\n return matches\n}\n\n// convenience breakpoint hooks\nexport function useIsMobile(): boolean {\n return useMediaQuery('(max-width: 767px)')\n}\n\nexport function useIsDesktop(): boolean {\n return useMediaQuery('(min-width: 1024px)')\n}\n\n// trap tab focus within a container (for modals/dialogs)\nconst FOCUSABLE = 'a[href],button:not([disabled]),input:not([disabled]),select:not([disabled]),textarea:not([disabled]),[tabindex]:not([tabindex=\"-1\"])'\n\nexport function useFocusTrap(active: boolean): React.RefObject<HTMLDivElement | null> {\n const ref = useRef<HTMLDivElement>(null)\n const prevFocusRef = useRef<HTMLElement | null>(null)\n\n useEffect(() => {\n if (!active) return\n prevFocusRef.current = document.activeElement as HTMLElement | null\n const container = ref.current\n if (container === null) return\n\n const timer = setTimeout(() => {\n container.querySelector<HTMLElement>(FOCUSABLE)?.focus()\n }, 50)\n\n const handler = (e: KeyboardEvent) => {\n if (e.key !== 'Tab') return\n const focusable = Array.from(container.querySelectorAll<HTMLElement>(FOCUSABLE))\n if (focusable.length === 0) return\n const first = focusable[0]\n const last = focusable[focusable.length - 1]\n if (e.shiftKey && document.activeElement === first) {\n e.preventDefault()\n last.focus()\n } else if (!e.shiftKey && document.activeElement === last) {\n e.preventDefault()\n first.focus()\n }\n }\n\n document.addEventListener('keydown', handler)\n return () => {\n clearTimeout(timer)\n document.removeEventListener('keydown', handler)\n prevFocusRef.current?.focus()\n }\n }, [active])\n\n return ref\n}\n","// overflow-menu — \"...\" button that reveals hidden action items\nimport { forwardRef, useRef, useState } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\nimport { mergeRefs } from '../utils/dom'\nimport { useClickOutside, useEscapeKey } from '../utils/hooks'\n\ntype OverflowMenuItem = {\n id: string\n label: string\n}\n\ntype OverflowMenuProps = Omit<React.HTMLAttributes<HTMLDivElement>, 'onSelect'> & {\n items: OverflowMenuItem[]\n onSelect: (id: string) => void\n}\n\nconst OverflowMenu = forwardRef<HTMLDivElement, OverflowMenuProps>(\n function OverflowMenu({ items, onSelect, className, ...props }, ref) {\n const [open, setOpen] = useState(false)\n const containerRef = useRef<HTMLDivElement>(null)\n useClickOutside(containerRef, open, () => setOpen(false))\n useEscapeKey(open, () => setOpen(false))\n\n return (\n <div ref={mergeRefs(ref, containerRef)} className={cx('relative inline-flex', className)} data-component=\"overflow-menu\" data-state={open ? 'open' : 'closed'} {...props}>\n <button type=\"button\" onClick={() => setOpen((p) => !p)} aria-label=\"More options\" className={cx('select-none rounded px-2 py-1 text-sm text-fg-muted hover:bg-bg-tertiary transition-colors', focusCls)}>\n ...\n </button>\n {open && (\n <div className=\"absolute right-0 top-full z-50 mt-1 min-w-[140px] animate-popup gds-radius-popover border border-border bg-surface py-1 gds-shadow-lg\">\n {items.map((item) => (\n <button key={item.id} type=\"button\" onClick={() => { onSelect(item.id); setOpen(false) }} className={cx('flex w-full items-center gds-pad-x gds-pad-y-sm gds-text-body text-fg hover:bg-bg-tertiary transition-colors', focusCls)}>\n {item.label}\n </button>\n ))}\n </div>\n )}\n </div>\n )\n },\n)\n\nexport { OverflowMenu }\nexport type { OverflowMenuItem, OverflowMenuProps }\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype PercentageProps = React.HTMLAttributes<HTMLSpanElement> & {\n precision?: number\n showSign?: boolean\n value: number\n}\n\nexport const Percentage = forwardRef<HTMLSpanElement, PercentageProps>(\n function Percentage({ className, precision = 1, showSign = false, value, ...props }, ref) {\n const isPositive = value > 0\n const isNegative = value < 0\n const colorCls = isPositive ? 'text-success' : isNegative ? 'text-danger' : 'text-fg-muted'\n const sign = showSign && isPositive ? '+' : ''\n const display = `${sign}${value.toFixed(precision)}%`\n\n return (\n <span\n className={cx('inline-flex tabular-nums text-sm font-medium', colorCls, className)}\n data-component=\"percentage\"\n ref={ref}\n {...props}\n >\n {display}\n </span>\n )\n },\n)\n\nexport type { PercentageProps }\n","import type { ReactNode } from 'react'\nimport { forwardRef, useRef, useState } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { useClickOutside, useEscapeKey } from '../utils/hooks'\n\nconst placementClasses: Record<string, Record<string, string>> = {\n bottom: {\n center: 'top-full left-1/2 -translate-x-1/2 mt-2',\n end: 'top-full right-0 mt-2',\n start: 'top-full left-0 mt-2',\n },\n left: {\n center: 'right-full top-1/2 -translate-y-1/2 mr-2',\n end: 'right-full bottom-0 mr-2',\n start: 'right-full top-0 mr-2',\n },\n right: {\n center: 'left-full top-1/2 -translate-y-1/2 ml-2',\n end: 'left-full bottom-0 ml-2',\n start: 'left-full top-0 ml-2',\n },\n top: {\n center: 'bottom-full left-1/2 -translate-x-1/2 mb-2',\n end: 'bottom-full right-0 mb-2',\n start: 'bottom-full left-0 mb-2',\n },\n}\n\ntype PopoverProps = Omit<React.HTMLAttributes<HTMLDivElement>, 'content'> & {\n align?: 'center' | 'end' | 'start'\n content: ReactNode\n placement?: 'bottom' | 'left' | 'right' | 'top'\n trigger: ReactNode\n}\n\nexport const Popover = forwardRef<HTMLDivElement, PopoverProps>(\n function Popover(\n { align = 'start', className, content, placement = 'bottom', trigger, ...props },\n ref,\n ) {\n const [open, setOpen] = useState(false)\n const containerRef = useRef<HTMLDivElement>(null)\n\n useClickOutside(containerRef, open, () => setOpen(false))\n useEscapeKey(open, () => setOpen(false))\n\n return (\n <div\n className={cx('relative inline-flex', className)}\n data-component=\"popover\"\n data-state={open ? 'open' : 'closed'}\n ref={(node) => {\n (containerRef as React.MutableRefObject<HTMLDivElement | null>).current = node\n if (typeof ref === 'function') ref(node)\n else if (ref !== null && ref !== undefined) {\n (ref as React.MutableRefObject<HTMLDivElement | null>).current = node\n }\n }}\n {...props}\n >\n <span onClick={() => setOpen((v) => !v)} role=\"button\" tabIndex={0}>\n {trigger}\n </span>\n {open && (\n <div\n className={cx(\n 'absolute z-50 animate-popup gds-radius-popover border border-border bg-surface gds-pad-x gds-pad-y gds-shadow-lg',\n placementClasses[placement]?.[align],\n )}\n >\n {content}\n </div>\n )}\n </div>\n )\n },\n)\n\nexport type { PopoverProps }\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype PriceProps = React.HTMLAttributes<HTMLSpanElement> & {\n currency?: string\n showSign?: boolean\n value: number\n}\n\nexport const Price = forwardRef<HTMLSpanElement, PriceProps>(\n function Price({ className, currency = '\\u00a5', showSign = false, value, ...props }, ref) {\n const isNeg = value < 0\n const isPos = value > 0\n const colorCls = isNeg ? 'text-danger' : isPos ? 'text-success' : 'text-fg'\n const sign = showSign && isPos ? '+' : ''\n const formatted = Math.abs(value).toLocaleString()\n\n return (\n <span\n className={cx('tabular-nums', colorCls, className)}\n data-component=\"price\"\n ref={ref}\n {...props}\n >\n {isNeg ? '-' : sign}{currency}{formatted}\n </span>\n )\n },\n)\n\nexport type { PriceProps }\n","// progress-circle — circular progress indicator using SVG\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nconst variantColors: Record<string, string> = {\n accent: 'stroke-accent',\n danger: 'stroke-danger',\n success: 'stroke-success',\n warning: 'stroke-warning',\n}\n\ntype ProgressCircleProps = {\n value: number\n size?: number\n strokeWidth?: number\n showValue?: boolean\n variant?: 'accent' | 'danger' | 'success' | 'warning'\n className?: string\n}\n\nconst ProgressCircle = forwardRef<SVGSVGElement, ProgressCircleProps>(\n function ProgressCircle(\n { value, size = 64, strokeWidth = 4, showValue = true, variant = 'accent', className },\n ref,\n ) {\n const radius = (size - strokeWidth) / 2\n const circumference = 2 * Math.PI * radius\n const clamped = Math.max(0, Math.min(100, value))\n const offset = circumference * (1 - clamped / 100)\n const center = size / 2\n const colorCls = variantColors[variant] ?? 'stroke-accent'\n\n return (\n <svg\n ref={ref}\n className={cx('shrink-0', className)}\n data-component=\"progress-circle\"\n height={size}\n viewBox={`0 0 ${size} ${size}`}\n width={size}\n >\n <circle\n className=\"stroke-border/30\"\n cx={center}\n cy={center}\n fill=\"none\"\n r={radius}\n strokeWidth={strokeWidth}\n />\n <circle\n className={cx('transition-all duration-500', colorCls)}\n cx={center}\n cy={center}\n fill=\"none\"\n r={radius}\n strokeDasharray={circumference}\n strokeDashoffset={offset}\n strokeLinecap=\"round\"\n strokeWidth={strokeWidth}\n style={{ transform: 'rotate(-90deg)', transformOrigin: 'center' }}\n />\n {showValue && (\n <text\n className=\"fill-fg font-medium\"\n dominantBaseline=\"central\"\n fontSize={size * 0.22}\n textAnchor=\"middle\"\n x={center}\n y={center}\n >\n {Math.round(clamped)}%\n </text>\n )}\n </svg>\n )\n },\n)\n\nexport { ProgressCircle }\nexport type { ProgressCircleProps }\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nconst colorMap = {\n accent: 'bg-accent',\n danger: 'bg-danger',\n success: 'bg-success',\n warning: 'bg-warning',\n} as const\n\nconst sizeMap = {\n default: 'h-2.5 w-2.5',\n lg: 'h-3.5 w-3.5',\n sm: 'h-2 w-2',\n} as const\n\ntype PulseIndicatorProps = React.HTMLAttributes<HTMLSpanElement> & {\n color?: 'accent' | 'danger' | 'success' | 'warning'\n label?: string\n size?: 'default' | 'lg' | 'sm'\n}\n\nexport const PulseIndicator = forwardRef<HTMLSpanElement, PulseIndicatorProps>(\n function PulseIndicator({ className, color = 'success', label, size = 'default', ...props }, ref) {\n return (\n <span\n className={cx('inline-flex items-center', label !== undefined && 'gds-gap-sm', className)}\n data-component=\"pulse-indicator\"\n ref={ref}\n {...props}\n >\n <span className=\"relative inline-flex\">\n <span className={cx('rounded-full', colorMap[color], sizeMap[size])} />\n <span className={cx('absolute inset-0 animate-ping rounded-full opacity-50', colorMap[color])} />\n </span>\n {label !== undefined && (\n <span className=\"gds-text-label text-fg-muted\">{label}</span>\n )}\n </span>\n )\n },\n)\n\nexport type { PulseIndicatorProps }\n","// qr-code — decorative data matrix visualization using SVG\nimport { forwardRef, useMemo } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type QRCodeProps = {\n value: string\n size?: number\n color?: string\n bgColor?: string\n className?: string\n}\n\n// simple hash from string to seed deterministic pattern\nfunction hashStr(str: string): number {\n let hash = 5381\n for (let i = 0; i < str.length; i++) {\n hash = ((hash << 5) + hash + str.charCodeAt(i)) | 0\n }\n return Math.abs(hash)\n}\n\n// seeded pseudo-random\nfunction seededRand(seed: number): () => number {\n let s = seed\n return () => {\n s = (s * 1103515245 + 12345) & 0x7fffffff\n return s / 0x7fffffff\n }\n}\n\nconst GRID = 21\nconst MODULE = 1\n\n// draw a finder pattern (7x7) at position\nfunction finderPattern(ox: number, oy: number): Array<{ x: number; y: number }> {\n const cells: Array<{ x: number; y: number }> = []\n for (let r = 0; r < 7; r++) {\n for (let c = 0; c < 7; c++) {\n const isOuter = r === 0 || r === 6 || c === 0 || c === 6\n const isInner = r >= 2 && r <= 4 && c >= 2 && c <= 4\n if (isOuter || isInner) {\n cells.push({ x: ox + c, y: oy + r })\n }\n }\n }\n return cells\n}\n\nexport const QRCode = forwardRef<SVGSVGElement, QRCodeProps>(\n function QRCode({ value, size = 128, color = 'currentColor', bgColor = 'transparent', className }, ref) {\n const cells = useMemo(() => {\n const result: Array<{ x: number; y: number }> = []\n\n // finder patterns\n result.push(...finderPattern(0, 0))\n result.push(...finderPattern(GRID - 7, 0))\n result.push(...finderPattern(0, GRID - 7))\n\n // data area — hash-based fill\n const rand = seededRand(hashStr(value))\n for (let r = 0; r < GRID; r++) {\n for (let c = 0; c < GRID; c++) {\n const inFinder =\n (r < 8 && c < 8) ||\n (r < 8 && c >= GRID - 8) ||\n (r >= GRID - 8 && c < 8)\n if (inFinder) continue\n if (rand() > 0.55) {\n result.push({ x: c, y: r })\n }\n }\n }\n return result\n }, [value])\n\n return (\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox={`0 0 ${GRID} ${GRID}`}\n className={cx('shrink-0', className)}\n data-component=\"qr-code\"\n data-testid=\"qr-code-svg\"\n role=\"img\"\n aria-label={`QR code for: ${value}`}\n >\n <rect width={GRID} height={GRID} fill={bgColor} />\n {cells.map((cell, i) => (\n <rect key={i} x={cell.x} y={cell.y} width={MODULE} height={MODULE} fill={color} />\n ))}\n </svg>\n )\n },\n)\n","// quick-action — floating action button / quick action shortcut\nimport { cva } from 'class-variance-authority'\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\nimport type { VariantProps } from '../utils/types'\n\nconst quickActionVariants = cva(\n 'inline-flex shrink-0 select-none items-center justify-center rounded-full transition-transform active:scale-95 hover:scale-105',\n {\n defaultVariants: { size: 'default', variant: 'primary' },\n variants: {\n variant: {\n primary: 'bg-accent text-accent-fg gds-shadow-lg',\n secondary: 'border border-border bg-surface text-fg gds-shadow-md',\n },\n size: {\n default: 'h-11 w-11',\n lg: 'h-14 w-14',\n sm: 'h-9 w-9',\n },\n },\n },\n)\n\ntype QuickActionProps = Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'children'> &\n VariantProps<typeof quickActionVariants> & {\n icon: ReactNode\n label?: string\n }\n\nexport const QuickAction = forwardRef<HTMLButtonElement, QuickActionProps>(\n function QuickAction({ className, disabled, icon, label, onClick, size, variant, ...props }, ref) {\n return (\n <div className=\"inline-flex flex-col items-center gap-1\">\n <button\n className={cx(\n quickActionVariants({ size, variant }),\n focusCls,\n disabled === true && 'pointer-events-none opacity-40',\n className,\n )}\n data-component=\"quick-action\"\n data-variant={variant ?? 'primary'}\n disabled={disabled}\n onClick={onClick}\n ref={ref}\n type=\"button\"\n {...props}\n >\n <span className=\"gds-icon-child\">{icon}</span>\n </button>\n {label !== undefined && (\n <span className=\"select-none text-[10px] text-fg-muted\">{label}</span>\n )}\n </div>\n )\n },\n)\n\nexport { quickActionVariants }\nexport type { QuickActionProps }\n","import { forwardRef } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\n\ntype RadioOption = {\n disabled?: boolean\n label: string\n value: string\n}\n\ntype RadioGroupProps = Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> & {\n direction?: 'horizontal' | 'vertical'\n disabled?: boolean\n onChange?: (value: string) => void\n options: RadioOption[]\n value?: string\n}\n\nexport const RadioGroup = forwardRef<HTMLDivElement, RadioGroupProps>(\n function RadioGroup(\n {\n className,\n direction = 'vertical',\n disabled = false,\n onChange,\n options,\n value,\n ...props\n },\n ref,\n ) {\n return (\n <div\n className={cx(\n 'flex gds-gap',\n direction === 'vertical' ? 'flex-col' : 'flex-row flex-wrap',\n className,\n )}\n data-component=\"radio-group\"\n ref={ref}\n role=\"radiogroup\"\n {...props}\n >\n {options.map((opt) => {\n const selected = opt.value === value\n const isDisabled = disabled || opt.disabled === true\n\n return (\n <button\n aria-checked={selected}\n className={cx(\n 'inline-flex select-none items-center gds-gap-sm gds-text-body',\n focusCls,\n isDisabled && 'cursor-not-allowed opacity-50',\n )}\n disabled={isDisabled}\n key={opt.value}\n onClick={() => onChange?.(opt.value)}\n role=\"radio\"\n type=\"button\"\n >\n <span\n className={cx(\n 'inline-flex gds-icon shrink-0 items-center justify-center gds-radius-badge border transition-colors',\n selected ? 'border-accent' : 'border-border hover:border-accent/50',\n )}\n >\n {selected && <span className=\"h-2 w-2 gds-radius-badge bg-accent\" />}\n </span>\n <span className=\"text-fg\">{opt.label}</span>\n </button>\n )\n })}\n </div>\n )\n },\n)\n\nexport type { RadioGroupProps, RadioOption }\n","// range-slider — styled native range input with optional value label\nimport { forwardRef, useMemo } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\n\ntype RangeSliderProps = Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange' | 'type' | 'value'> & {\n disabled?: boolean\n max?: number\n min?: number\n onChange: (value: number) => void\n showValue?: boolean\n step?: number\n value: number\n}\n\nexport const RangeSlider = forwardRef<HTMLInputElement, RangeSliderProps>(\n function RangeSlider(\n {\n className,\n disabled = false,\n max = 100,\n min = 0,\n onChange,\n showValue = false,\n step = 1,\n value,\n ...props\n },\n ref,\n ) {\n const percent = useMemo(() => {\n const range = max - min\n if (range <= 0) return 0\n return ((value - min) / range) * 100\n }, [value, min, max])\n\n return (\n <div\n className={cx(\n 'relative flex items-center select-none',\n disabled && 'cursor-not-allowed opacity-50',\n className,\n )}\n data-component=\"range-slider\"\n data-state={disabled ? 'disabled' : 'enabled'}\n >\n {showValue && (\n <span\n className=\"absolute -top-5 text-[10px] font-medium text-fg-muted transition-[left]\"\n style={{ left: `${percent}%`, transform: 'translateX(-50%)' }}\n >\n {value}\n </span>\n )}\n <input\n className={cx(\n 'gds-range-slider h-1.5 w-full cursor-pointer appearance-none rounded-full bg-bg-tertiary',\n focusCls,\n disabled && 'pointer-events-none',\n )}\n disabled={disabled}\n max={max}\n min={min}\n onChange={(e) => onChange(Number(e.target.value))}\n ref={ref}\n step={step}\n style={{\n background: `linear-gradient(to right, var(--gds-accent) 0%, var(--gds-accent) ${percent}%, var(--gds-bg-tertiary) ${percent}%, var(--gds-bg-tertiary) 100%)`,\n }}\n type=\"range\"\n value={value}\n {...props}\n />\n </div>\n )\n },\n)\n\nexport type { RangeSliderProps }\n","import type { ReactNode } from 'react'\nimport { forwardRef, useCallback, useState } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\n\nconst sizeMap = {\n default: 'gds-sq-xs',\n lg: 'gds-sq-sm',\n sm: 'gds-icon',\n}\n\n// default star SVG\nfunction DefaultStar({ filled }: { filled: boolean }) {\n return (\n <svg\n className={cx(\n sizeMap.default,\n filled ? 'fill-warning text-warning' : 'text-fg-muted/20',\n )}\n fill={filled ? 'currentColor' : 'none'}\n stroke=\"currentColor\"\n strokeWidth={1.5}\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )\n}\n\ntype RatingProps = Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> & {\n max?: number\n onChange?: (value: number) => void\n readonly?: boolean\n renderStar?: (filled: boolean, index: number) => ReactNode\n size?: 'default' | 'lg' | 'sm'\n value: number\n}\n\nexport const Rating = forwardRef<HTMLDivElement, RatingProps>(\n function Rating(\n {\n className,\n max = 5,\n onChange,\n readonly = false,\n renderStar,\n size = 'default',\n value,\n ...props\n },\n ref,\n ) {\n const [hovered, setHovered] = useState<number | null>(null)\n\n const handleLeave = useCallback(() => setHovered(null), [])\n\n return (\n <div\n className={cx('inline-flex gds-gap-xs', className)}\n data-component=\"rating\"\n onMouseLeave={readonly ? undefined : handleLeave}\n ref={ref}\n role=\"group\"\n {...props}\n >\n {Array.from({ length: max }, (_, i) => {\n const starIndex = i + 1\n const filled = hovered !== null ? starIndex <= hovered : starIndex <= value\n\n if (readonly) {\n return (\n <span className={sizeMap[size]} key={i}>\n {renderStar !== undefined ? renderStar(filled, i) : <DefaultStar filled={filled} />}\n </span>\n )\n }\n\n return (\n <button\n className={cx(\n 'transition-transform hover:scale-110',\n focusCls,\n )}\n key={i}\n onClick={() => onChange?.(starIndex)}\n onMouseEnter={() => setHovered(starIndex)}\n type=\"button\"\n >\n <span className={sizeMap[size]}>\n {renderStar !== undefined ? renderStar(filled, i) : <DefaultStar filled={filled} />}\n </span>\n </button>\n )\n })}\n </div>\n )\n },\n)\n\nexport type { RatingProps }\n","import { forwardRef, useCallback, useRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype ResizeHandleProps = React.HTMLAttributes<HTMLDivElement> & {\n orientation?: 'horizontal' | 'vertical'\n onResize: (delta: number) => void\n onResizeEnd?: () => void\n disabled?: boolean\n}\n\nexport const ResizeHandle = forwardRef<HTMLDivElement, ResizeHandleProps>(\n function ResizeHandle(\n {\n className,\n disabled,\n onResize,\n onResizeEnd,\n orientation = 'vertical',\n ...props\n },\n ref,\n ) {\n const startPos = useRef(0)\n\n const handleMouseDown = useCallback(\n (e: React.MouseEvent) => {\n if (disabled) return\n e.preventDefault()\n\n const isVertical = orientation === 'vertical'\n startPos.current = isVertical ? e.clientX : e.clientY\n\n const handleMouseMove = (moveEvent: MouseEvent) => {\n const current = isVertical ? moveEvent.clientX : moveEvent.clientY\n const delta = current - startPos.current\n startPos.current = current\n onResize(delta)\n }\n\n const handleMouseUp = () => {\n document.removeEventListener('mousemove', handleMouseMove)\n document.removeEventListener('mouseup', handleMouseUp)\n onResizeEnd?.()\n }\n\n document.addEventListener('mousemove', handleMouseMove)\n document.addEventListener('mouseup', handleMouseUp)\n },\n [disabled, onResize, onResizeEnd, orientation],\n )\n\n return (\n <div\n className={cx(\n 'group relative flex items-center justify-center select-none',\n orientation === 'vertical'\n ? 'w-2 cursor-col-resize flex-col self-stretch'\n : 'h-2 cursor-row-resize self-stretch',\n disabled && 'pointer-events-none opacity-40',\n className,\n )}\n data-component=\"resize-handle\"\n data-orientation={orientation}\n onMouseDown={handleMouseDown}\n ref={ref}\n role=\"separator\"\n aria-orientation={orientation}\n {...props}\n >\n <div\n className={cx(\n 'transition-colors',\n orientation === 'vertical'\n ? 'h-full w-0.5 bg-border group-hover:bg-accent/50 group-active:bg-accent'\n : 'h-0.5 w-full bg-border group-hover:bg-accent/50 group-active:bg-accent',\n )}\n />\n </div>\n )\n },\n)\n\nexport type { ResizeHandleProps }\n","// ribbon — corner ribbon/banner for containers\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nconst variantMap = {\n accent: 'bg-accent text-white',\n danger: 'bg-danger text-white',\n success: 'bg-success text-white',\n warning: 'bg-warning text-white',\n} as const\n\ntype RibbonProps = React.HTMLAttributes<HTMLDivElement> & {\n children: ReactNode\n label: string\n variant?: 'accent' | 'danger' | 'success' | 'warning'\n position?: 'top-left' | 'top-right'\n}\n\nexport const Ribbon = forwardRef<HTMLDivElement, RibbonProps>(\n function Ribbon({ children, label, variant = 'accent', position = 'top-right', className, ...props }, ref) {\n const isRight = position === 'top-right'\n return (\n <div ref={ref} className={cx('relative overflow-hidden', className)} data-component=\"ribbon\" {...props}>\n <div\n className={cx(\n 'pointer-events-none absolute top-3 z-10 px-6 py-0.5 text-[10px] font-bold uppercase tracking-wider shadow-sm',\n variantMap[variant],\n isRight ? '-right-6 rotate-45' : '-left-6 -rotate-45',\n )}\n >\n {label}\n </div>\n {children}\n </div>\n )\n },\n)\n\nexport type { RibbonProps }\n","// ripple-effect — material design ripple on click\nimport { forwardRef, useCallback, useState } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype Ripple = { id: number; x: number; y: number; size: number }\n\nexport type RippleEffectProps = {\n children: React.ReactNode\n color?: string\n disabled?: boolean\n className?: string\n}\n\nlet nextId = 0\n\nexport const RippleEffect = forwardRef<HTMLDivElement, RippleEffectProps>(\n function RippleEffect({ children, color = 'currentColor', disabled = false, className }, ref) {\n const [ripples, setRipples] = useState<Ripple[]>([])\n\n const handlePointerDown = useCallback(\n (e: React.PointerEvent<HTMLDivElement>) => {\n if (disabled) return\n const rect = e.currentTarget.getBoundingClientRect()\n const x = e.clientX - rect.left\n const y = e.clientY - rect.top\n const size = Math.max(rect.width, rect.height) * 2\n setRipples((prev) => [...prev, { id: nextId++, x, y, size }])\n },\n [disabled],\n )\n\n const removeRipple = useCallback((id: number) => {\n setRipples((prev) => prev.filter((r) => r.id !== id))\n }, [])\n\n return (\n <div\n ref={ref}\n data-component=\"ripple-effect\"\n className={cx('relative overflow-hidden', className)}\n onPointerDown={handlePointerDown}\n >\n {children}\n {ripples.map((r) => (\n <span\n key={r.id}\n className=\"pointer-events-none absolute animate-ripple rounded-full\"\n style={{\n left: r.x - r.size / 2,\n top: r.y - r.size / 2,\n width: r.size,\n height: r.size,\n backgroundColor: color,\n }}\n onAnimationEnd={() => removeRipple(r.id)}\n />\n ))}\n </div>\n )\n },\n)\n","// scroll-to-top — floating button that appears when scrolled down\nimport { forwardRef, useEffect, useState } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\n\nexport type ScrollToTopProps = {\n threshold?: number\n smooth?: boolean\n className?: string\n}\n\nexport const ScrollToTop = forwardRef<HTMLButtonElement, ScrollToTopProps>(\n function ScrollToTop({ threshold = 300, smooth = true, className }, ref) {\n const [visible, setVisible] = useState(() => {\n if (typeof window === 'undefined') return false\n return window.scrollY >= threshold\n })\n\n useEffect(() => {\n const handler = () => setVisible(window.scrollY >= threshold)\n window.addEventListener('scroll', handler, { passive: true })\n return () => window.removeEventListener('scroll', handler)\n }, [threshold])\n\n if (!visible) return null\n\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-label=\"Scroll to top\"\n onClick={() => window.scrollTo({ top: 0, behavior: smooth ? 'smooth' : 'auto' })}\n className={cx(\n 'fixed bottom-6 right-6 z-40 flex h-10 w-10 items-center justify-center rounded-full bg-accent text-white shadow-lg transition-opacity hover:bg-accent/90',\n focusCls,\n className,\n )}\n data-component=\"scroll-to-top\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M8 12V4M4 7l4-3 4 3\" />\n </svg>\n </button>\n )\n },\n)\n","// segmented-control — mutually exclusive button group (iOS-style)\nimport { forwardRef } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\ntype SegmentedControlOption = {\n value: string\n label: string\n}\n\ntype SegmentedControlSize = 'default' | 'sm'\n\ntype SegmentedControlProps = React.HTMLAttributes<HTMLDivElement> & {\n options: SegmentedControlOption[]\n value: string\n onChange: (value: string) => void\n size?: SegmentedControlSize\n disabled?: boolean\n glass?: boolean\n}\n\nconst sizeClasses: Record<SegmentedControlSize, string> = {\n default: 'px-3 py-1.5 text-xs',\n sm: 'px-2 py-1 text-[11px]',\n}\n\nconst SegmentedControl = forwardRef<HTMLDivElement, SegmentedControlProps>(\n function SegmentedControl({ options, value, onChange, size = 'default', disabled, glass, className, ...props }, ref) {\n return (\n <div\n ref={ref}\n className={cx(\n 'inline-flex select-none gds-radius-button bg-bg-tertiary p-0.5',\n glass === true && glassClass(glass),\n disabled === true && 'pointer-events-none opacity-50',\n className,\n )}\n data-component=\"segmented-control\"\n data-state={disabled === true ? 'disabled' : 'enabled'}\n role=\"radiogroup\"\n {...props}\n >\n {options.map((option) => {\n const isActive = option.value === value\n return (\n <button\n key={option.value}\n type=\"button\"\n role=\"radio\"\n aria-checked={isActive}\n disabled={disabled}\n onClick={() => {\n if (!isActive) {\n onChange(option.value)\n }\n }}\n className={cx(\n 'gds-radius-button transition-all',\n sizeClasses[size ?? 'default'],\n focusCls,\n isActive\n ? 'bg-bg font-medium text-fg gds-shadow-sm'\n : 'text-fg-muted hover:text-fg',\n )}\n >\n {option.label}\n </button>\n )\n })}\n </div>\n )\n },\n)\n\nexport { SegmentedControl }\nexport type { SegmentedControlOption, SegmentedControlProps, SegmentedControlSize }\n","// skeleton-group — predefined skeleton layouts for common loading patterns\nimport { forwardRef } from 'react'\n\nimport { Skeleton } from '../l2-primitives/skeleton'\nimport { cx } from '../utils/cx'\n\ntype SkeletonGroupVariant = 'avatar-text' | 'card' | 'form-field'\n\ntype SkeletonGroupProps = {\n className?: string\n count?: number\n variant?: SkeletonGroupVariant\n}\n\nconst layouts: Record<SkeletonGroupVariant, () => React.ReactNode> = {\n 'avatar-text': () => (\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=\"60%\" />\n <Skeleton variant=\"text\" width=\"40%\" />\n </div>\n </div>\n ),\n card: () => (\n <div className=\"flex flex-col gap-3\">\n <Skeleton variant=\"rect\" />\n <Skeleton variant=\"text\" />\n <Skeleton variant=\"text\" width=\"80%\" />\n <Skeleton variant=\"text\" width=\"50%\" />\n </div>\n ),\n 'form-field': () => (\n <div className=\"flex flex-col gap-2\">\n <Skeleton variant=\"text\" width=\"30%\" />\n <Skeleton variant=\"rect\" height={36} />\n </div>\n ),\n}\n\nexport const SkeletonGroup = forwardRef<HTMLDivElement, SkeletonGroupProps>(\n function SkeletonGroup({ className, count = 1, variant = 'avatar-text' }, ref) {\n const render = layouts[variant]\n\n return (\n <div\n ref={ref}\n className={cx('flex flex-col gap-4', className)}\n data-component=\"skeleton-group\"\n data-variant={variant}\n >\n {Array.from({ length: count }, (_, i) => (\n <div key={i}>{render()}</div>\n ))}\n </div>\n )\n },\n)\n\nexport type { SkeletonGroupProps, SkeletonGroupVariant }\n","// sparkle — animated sparkle/star particles around a child element\nimport { cx } from '../utils/cx'\n\nexport type SparkleProps = {\n children: React.ReactNode\n active?: boolean\n count?: number\n color?: string\n className?: string\n}\n\nconst STAR_PATH = 'M12 0l3 9 9 3-9 3-3 9-3-9-9-3 9-3z'\n\nfunction starStyle(i: number, count: number): React.CSSProperties {\n const angle = (360 / count) * i\n const rad = (angle * Math.PI) / 180\n const dist = 70 + (i % 3) * 15\n const x = Math.cos(rad) * dist\n const y = Math.sin(rad) * dist\n return {\n position: 'absolute',\n top: '50%',\n left: '50%',\n width: 10,\n height: 10,\n transform: `translate(${x}%, ${y}%)`,\n animation: `gds-sparkle 1.4s ease-in-out ${i * 0.2}s infinite`,\n opacity: 0,\n }\n}\n\nexport function Sparkle({\n children,\n active = true,\n count = 3,\n color = 'var(--gds-accent)',\n className,\n}: SparkleProps) {\n const particles = Array.from({ length: count }, (_, i) => i)\n\n return (\n <span className={cx('relative inline-block', className)} data-component=\"sparkle\">\n {children}\n {active &&\n particles.map((i) => (\n <svg\n key={i}\n viewBox=\"0 0 24 24\"\n fill={color}\n style={starStyle(i, count)}\n aria-hidden=\"true\"\n >\n <path d={STAR_PATH} />\n </svg>\n ))}\n {active && (\n <style>{`\n @keyframes gds-sparkle {\n 0%, 100% { opacity: 0; transform: scale(0) rotate(0deg); }\n 50% { opacity: 1; transform: scale(1) rotate(180deg); }\n }\n `}</style>\n )}\n </span>\n )\n}\n","// split-button — primary action + dropdown menu trigger\nimport type { ReactNode } from 'react'\nimport { forwardRef, useRef, useState } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\nimport { mergeRefs } from '../utils/dom'\nimport { useClickOutside, useEscapeKey } from '../utils/hooks'\n\ntype SplitButtonVariant = 'danger' | 'primary' | 'secondary'\ntype SplitButtonSize = 'default' | 'lg' | 'sm'\n\ntype SplitButtonItem = {\n id: string\n label: string\n danger?: boolean\n}\n\ntype SplitButtonProps = Omit<React.HTMLAttributes<HTMLDivElement>, 'onClick'> & {\n children: ReactNode\n variant?: SplitButtonVariant\n size?: SplitButtonSize\n items: SplitButtonItem[]\n onSelect: (id: string) => void\n onClick?: () => void\n disabled?: boolean\n}\n\nconst variantClasses: Record<SplitButtonVariant, string> = {\n primary: 'bg-accent text-white hover:bg-accent/90',\n secondary: 'bg-bg-secondary text-fg border border-border hover:bg-bg-tertiary',\n danger: 'bg-danger text-white hover:bg-danger/90',\n}\n\nconst dividerClasses: Record<SplitButtonVariant, string> = {\n primary: 'border-l-white/20',\n secondary: 'border-l-border',\n danger: 'border-l-white/20',\n}\n\nconst sizeClasses: Record<SplitButtonSize, { main: string, trigger: string }> = {\n sm: { main: 'px-2.5 py-1 text-xs', trigger: 'px-1.5 py-1' },\n default: { main: 'px-3 py-1.5 text-sm', trigger: 'px-2 py-1.5' },\n lg: { main: 'px-4 py-2 text-sm', trigger: 'px-2.5 py-2' },\n}\n\nconst SplitButton = forwardRef<HTMLDivElement, SplitButtonProps>(\n function SplitButton({ children, variant = 'primary', size = 'default', items, onSelect, onClick, disabled, className, ...props }, ref) {\n const [open, setOpen] = useState(false)\n const containerRef = useRef<HTMLDivElement>(null)\n useClickOutside(containerRef, open, () => setOpen(false))\n useEscapeKey(open, () => setOpen(false))\n\n const v = variant ?? 'primary'\n const s = size ?? 'default'\n\n return (\n <div\n ref={mergeRefs(ref, containerRef)}\n className={cx('relative inline-flex', className)}\n data-component=\"split-button\"\n data-variant={v}\n data-state={open ? 'open' : 'closed'}\n {...props}\n >\n <div className=\"inline-flex\">\n <button\n type=\"button\"\n disabled={disabled}\n onClick={onClick}\n className={cx(\n 'inline-flex select-none items-center font-medium transition-colors rounded-l-md',\n variantClasses[v],\n sizeClasses[s].main,\n focusCls,\n disabled === true && 'pointer-events-none opacity-50',\n )}\n >\n {children}\n </button>\n <button\n type=\"button\"\n disabled={disabled}\n onClick={() => setOpen((prev) => !prev)}\n aria-label=\"More actions\"\n className={cx(\n 'inline-flex select-none items-center border-l font-medium transition-colors rounded-r-md',\n variantClasses[v],\n dividerClasses[v],\n sizeClasses[s].trigger,\n focusCls,\n disabled === true && 'pointer-events-none opacity-50',\n )}\n >\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M3 5l3 3 3-3\" />\n </svg>\n </button>\n </div>\n\n {open && (\n <div className=\"absolute left-0 top-full z-50 mt-1 min-w-[160px] animate-popup gds-radius-popover border border-border bg-surface py-1 gds-shadow-lg\">\n {items.map((item) => (\n <button\n key={item.id}\n type=\"button\"\n onClick={() => {\n onSelect(item.id)\n setOpen(false)\n }}\n className={cx(\n 'flex w-full items-center gds-pad-x gds-pad-y-sm gds-text-body transition-colors',\n focusCls,\n item.danger === true\n ? 'text-danger hover:bg-danger/10'\n : 'text-fg hover:bg-bg-tertiary',\n )}\n >\n {item.label}\n </button>\n ))}\n </div>\n )}\n </div>\n )\n },\n)\n\nexport { SplitButton }\nexport type { SplitButtonItem, SplitButtonProps, SplitButtonSize, SplitButtonVariant }\n","// star-rating — read-only star rating display with half-star support\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nconst sizeMap = { sm: 14, default: 18, lg: 24 }\nconst STAR_D = 'M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z'\n\ntype StarRatingProps = {\n value: number\n max?: number\n size?: 'sm' | 'default' | 'lg'\n color?: string\n className?: string\n}\n\nfunction StarIcon({ fill, s, color }: { fill: 'full' | 'half' | 'empty'; s: number; color: string }) {\n const id = `half-${Math.random().toString(36).slice(2, 8)}`\n if (fill === 'full') {\n return <svg width={s} height={s} viewBox=\"0 0 24 24\" fill={color} stroke={color} strokeWidth={1}><path d={STAR_D} /></svg>\n }\n if (fill === 'half') {\n return (\n <svg width={s} height={s} viewBox=\"0 0 24 24\" stroke={color} strokeWidth={1}>\n <defs><clipPath id={id}><rect x=\"0\" y=\"0\" width=\"12\" height=\"24\" /></clipPath></defs>\n <path d={STAR_D} fill=\"none\" /><path d={STAR_D} fill={color} clipPath={`url(#${id})`} />\n </svg>\n )\n }\n return <svg width={s} height={s} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={1} className=\"text-fg-muted/30\"><path d={STAR_D} /></svg>\n}\n\nconst StarRating = forwardRef<HTMLDivElement, StarRatingProps>(\n function StarRating({ value, max = 5, size = 'default', color = 'currentColor', className }, ref) {\n const s = sizeMap[size]\n const c = color === 'currentColor' ? 'var(--color-warning)' : color\n\n return (\n <div ref={ref} className={cx('inline-flex items-center gap-0.5', className)} data-component=\"star-rating\" role=\"img\" aria-label={`${value} out of ${max} stars`}>\n {Array.from({ length: max }, (_, i) => {\n const diff = value - i\n const fill = diff >= 1 ? 'full' : diff >= 0.5 ? 'half' : 'empty'\n return <StarIcon key={i} fill={fill} s={s} color={c} />\n })}\n </div>\n )\n },\n)\n\nexport { StarRating }\nexport type { StarRatingProps }\n","import type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\ntype StatusType = 'active' | 'draft' | 'error' | 'inactive' | 'pending' | 'warning'\n\nconst statusColorMap: Record<StatusType, string> = {\n active: 'bg-success/10 text-success',\n draft: 'bg-fg-muted/10 text-fg-muted',\n error: 'bg-danger/10 text-danger',\n inactive: 'bg-fg-muted/10 text-fg-muted',\n pending: 'bg-warning/10 text-warning',\n warning: 'bg-warning/10 text-warning',\n}\n\ntype StatusBadgeProps = React.HTMLAttributes<HTMLSpanElement> & {\n glass?: boolean\n icon?: ReactNode\n label?: string\n size?: 'default' | 'sm'\n status: StatusType\n}\n\nexport const StatusBadge = forwardRef<HTMLSpanElement, StatusBadgeProps>(\n function StatusBadge(\n { className, glass, icon, label, size = 'default', status, ...props },\n ref,\n ) {\n const displayLabel = label ?? status\n const sizeClasses = size === 'sm' ? 'gds-pad-x-sm py-px gds-text-caption' : 'gds-pad-x-sm gds-pad-y-sm gds-text-body'\n\n return (\n <span\n className={cx(\n 'inline-flex select-none items-center gds-gap-xs gds-radius-badge font-medium',\n sizeClasses,\n statusColorMap[status],\n glassClass(glass),\n glass === true && 'border border-white/10 bg-white/5',\n className,\n )}\n data-component=\"status-badge\"\n data-state={status}\n ref={ref}\n {...props}\n >\n {icon !== undefined && (\n <span className=\"gds-icon-child-sm\">{icon}</span>\n )}\n {displayLabel}\n </span>\n )\n },\n)\n\nexport type { StatusBadgeProps, StatusType }\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype StatusDotStatus = 'connected' | 'connecting' | 'disconnected'\n\ntype StatusDotProps = React.HTMLAttributes<HTMLSpanElement> & {\n label?: string\n status: StatusDotStatus\n}\n\nconst dotCls: Record<StatusDotStatus, string> = {\n connected: 'bg-success',\n connecting: 'bg-warning animate-pulse',\n disconnected: 'bg-danger',\n}\n\nexport const StatusDot = forwardRef<HTMLSpanElement, StatusDotProps>(\n function StatusDot({ className, label, status, ...props }, ref) {\n return (\n <span\n className={cx('inline-flex items-center gds-gap-sm', className)}\n data-component=\"status-dot\"\n data-state={status}\n ref={ref}\n {...props}\n >\n <span className={cx('h-2 w-2 shrink-0 rounded-full', dotCls[status])} />\n {label !== undefined && <span className=\"gds-text-label text-fg-muted\">{label}</span>}\n </span>\n )\n },\n)\n\nexport type { StatusDotProps, StatusDotStatus }\n","import { cva } from 'class-variance-authority'\nimport { forwardRef } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\nimport type { VariantProps } from '../utils/types'\n\nconst switchVariants = cva(\n 'relative inline-flex shrink-0 cursor-pointer select-none items-center gds-radius-badge transition-colors ' +\n focusCls,\n {\n defaultVariants: { size: 'default' },\n variants: {\n size: {\n default: 'h-5 w-9',\n sm: 'h-4 w-7',\n },\n },\n },\n)\n\nconst thumbSizeMap = {\n default: 'gds-icon',\n sm: 'h-3 w-3',\n}\n\nconst thumbTranslateMap = {\n default: { off: 'translate-x-0.5', on: 'translate-x-4' },\n sm: { off: 'translate-x-0.5', on: 'translate-x-3.5' },\n}\n\ntype SwitchProps = Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'onChange'> &\n VariantProps<typeof switchVariants> & {\n checked?: boolean\n label?: string\n onChange?: (checked: boolean) => void\n }\n\nexport const Switch = forwardRef<HTMLButtonElement, SwitchProps>(\n function Switch(\n { checked = false, className, disabled = false, label, onChange, size = 'default', ...props },\n ref,\n ) {\n const sizeKey = size ?? 'default'\n\n return (\n <label\n className={cx(\n 'inline-flex select-none items-center gds-gap-sm',\n disabled && 'cursor-not-allowed opacity-50',\n className,\n )}\n data-component=\"switch\"\n data-state={checked ? 'on' : 'off'}\n >\n <button\n aria-checked={checked}\n className={cx(\n switchVariants({ size }),\n checked ? 'bg-accent' : 'bg-bg-tertiary',\n disabled && 'cursor-not-allowed',\n )}\n disabled={disabled}\n onClick={() => onChange?.(!checked)}\n ref={ref}\n role=\"switch\"\n type=\"button\"\n {...props}\n >\n <span\n className={cx(\n 'gds-radius-badge bg-white gds-shadow-sm transition-transform',\n thumbSizeMap[sizeKey],\n checked ? thumbTranslateMap[sizeKey].on : thumbTranslateMap[sizeKey].off,\n )}\n />\n </button>\n {label !== undefined && (\n <span className=\"gds-text-body text-fg\">{label}</span>\n )}\n </label>\n )\n },\n)\n\nexport { switchVariants }\nexport type { SwitchProps }\n","// switch-group — list of labeled switches for settings pages\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { Switch } from './switch'\n\ntype SwitchGroupItem = {\n checked: boolean\n description?: string\n id: string\n label: string\n}\n\ntype SwitchGroupProps = {\n className?: string\n disabled?: boolean\n items: SwitchGroupItem[]\n onChange: (id: string, checked: boolean) => void\n}\n\nexport const SwitchGroup = forwardRef<HTMLDivElement, SwitchGroupProps>(\n function SwitchGroup({ className, disabled = false, items, onChange }, ref) {\n return (\n <div\n ref={ref}\n className={cx('flex flex-col gap-3', className)}\n data-component=\"switch-group\"\n role=\"group\"\n >\n {items.map((item) => (\n <div key={item.id} className=\"flex items-center justify-between gap-4 gds-pad-x gds-pad-y-sm\">\n <div className=\"min-w-0 flex-1\">\n <div className=\"gds-text-body font-medium text-fg\">{item.label}</div>\n {item.description !== undefined && (\n <div className=\"mt-0.5 gds-text-caption text-fg-muted\">{item.description}</div>\n )}\n </div>\n <Switch\n checked={item.checked}\n disabled={disabled}\n onChange={(checked) => onChange(item.id, checked)}\n />\n </div>\n ))}\n </div>\n )\n },\n)\n\nexport type { SwitchGroupItem, SwitchGroupProps }\n","import { forwardRef, useCallback, useRef, useState } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\ntype TagInputProps = Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange' | 'value'> & {\n disabled?: boolean\n error?: boolean\n glass?: boolean\n maxTags?: number\n onChange: (tags: string[]) => void\n value: string[]\n}\n\n// inline X icon for tag remove button\nfunction RemoveIcon() {\n return (\n <svg className=\"h-3 w-3\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} viewBox=\"0 0 24 24\">\n <path d=\"M18 6L6 18M6 6l12 12\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n )\n}\n\nexport const TagInput = forwardRef<HTMLInputElement, TagInputProps>(\n function TagInput(\n { className, disabled = false, error = false, glass, maxTags, onChange, placeholder, value, ...props },\n ref,\n ) {\n const [inputValue, setInputValue] = useState('')\n const [focused, setFocused] = useState(false)\n const innerRef = useRef<HTMLInputElement>(null)\n const inputRef = (ref ?? innerRef) as React.RefObject<HTMLInputElement>\n\n const atLimit = maxTags !== undefined && value.length >= maxTags\n\n const addTag = useCallback(\n (tag: string) => {\n const trimmed = tag.trim()\n if (trimmed === '') return\n if (value.includes(trimmed)) return\n if (atLimit) return\n onChange([...value, trimmed])\n setInputValue('')\n },\n [atLimit, onChange, value],\n )\n\n const removeTag = useCallback(\n (index: number) => {\n onChange(value.filter((_, i) => i !== index))\n },\n [onChange, value],\n )\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n e.preventDefault()\n addTag(inputValue)\n }\n if (e.key === 'Backspace' && inputValue === '' && value.length > 0) {\n removeTag(value.length - 1)\n }\n },\n [addTag, inputValue, removeTag, value.length],\n )\n\n const handleContainerClick = useCallback(() => {\n if (!disabled) {\n inputRef.current?.focus()\n }\n }, [disabled, inputRef])\n\n return (\n <div\n className={cx(\n 'flex min-h-[var(--gds-h)] flex-wrap items-center gds-gap-xs gds-pad-x gds-pad-y-sm gds-radius-input border bg-bg transition-colors',\n !error && !focused && 'border-border hover:border-border-strong',\n !error && focused && 'border-accent ring-2 ring-accent ring-offset-1 ring-offset-bg',\n error && 'border-danger',\n error && focused && 'ring-2 ring-danger ring-offset-1 ring-offset-bg',\n disabled && 'cursor-not-allowed opacity-50',\n glassClass(glass),\n glass === true && 'border-white/10 bg-bg/60',\n className,\n )}\n data-component=\"tag-input\"\n data-state={focused ? 'focused' : 'idle'}\n onClick={handleContainerClick}\n >\n {value.map((tag, index) => (\n <span\n className=\"inline-flex select-none items-center gds-gap-xs gds-radius-badge gds-pad-x-sm gds-pad-y-sm gds-text-label font-medium bg-fg-muted/10 text-fg-muted\"\n key={tag}\n >\n {tag}\n {!disabled && (\n <button\n className={cx(\n 'ml-0.5 gds-radius-badge p-0.5 transition-colors hover:bg-current/10',\n focusCls,\n )}\n onClick={(e) => {\n e.stopPropagation()\n removeTag(index)\n }}\n tabIndex={-1}\n type=\"button\"\n >\n <RemoveIcon />\n </button>\n )}\n </span>\n ))}\n {!atLimit && (\n <input\n className=\"min-w-[60px] flex-1 border-none bg-transparent text-fg outline-none gds-text-body placeholder:text-fg-muted/50 disabled:cursor-not-allowed\"\n disabled={disabled}\n onBlur={() => setFocused(false)}\n onChange={(e) => setInputValue(e.target.value)}\n onFocus={() => setFocused(true)}\n onKeyDown={handleKeyDown}\n placeholder={value.length === 0 ? placeholder : undefined}\n ref={inputRef}\n type=\"text\"\n value={inputValue}\n {...props}\n />\n )}\n </div>\n )\n },\n)\n\nexport type { TagInputProps }\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nconst variantMap = {\n accent: 'bg-accent/15 text-accent',\n danger: 'bg-danger/15 text-danger',\n muted: 'bg-fg-muted/10 text-fg-muted',\n success: 'bg-success/15 text-success',\n warning: 'bg-warning/15 text-warning',\n} as const\n\nconst sizeMap = {\n default: 'px-1.5 py-0.5 text-[10px]',\n sm: 'px-1 py-px text-[9px]',\n} as const\n\ntype TextBadgeProps = React.HTMLAttributes<HTMLSpanElement> & {\n label: string\n size?: 'default' | 'sm'\n variant?: 'accent' | 'danger' | 'muted' | 'success' | 'warning'\n}\n\nexport const TextBadge = forwardRef<HTMLSpanElement, TextBadgeProps>(\n function TextBadge({ className, label, size = 'default', variant = 'accent', ...props }, ref) {\n return (\n <span\n className={cx(\n 'inline-flex select-none items-center rounded-full font-bold uppercase leading-none tracking-wider',\n variantMap[variant],\n sizeMap[size],\n className,\n )}\n data-component=\"text-badge\"\n data-variant={variant}\n ref={ref}\n {...props}\n >\n {label}\n </span>\n )\n },\n)\n\nexport type { TextBadgeProps }\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype TextEffectType = 'glow' | 'gradient' | 'highlight'\n\ntype TextEffectProps = React.HTMLAttributes<HTMLSpanElement> & {\n children: string\n effect: TextEffectType\n gradientFrom?: string\n gradientTo?: string\n}\n\nexport const TextEffect = forwardRef<HTMLSpanElement, TextEffectProps>(\n function TextEffect(\n { children, className, effect, gradientFrom, gradientTo, style, ...props },\n ref,\n ) {\n const from = gradientFrom ?? 'var(--gds-accent)'\n const to = gradientTo ?? 'var(--gds-success)'\n\n if (effect === 'gradient') {\n return (\n <span\n className={cx(\n 'bg-clip-text text-transparent',\n className,\n )}\n data-component=\"text-effect\"\n data-variant={effect}\n ref={ref}\n style={{\n backgroundImage: `linear-gradient(135deg, ${from}, ${to})`,\n ...style,\n }}\n {...props}\n >\n {children}\n </span>\n )\n }\n\n if (effect === 'highlight') {\n return (\n <span\n className={cx(\n 'box-decoration-clone bg-accent/20 px-1',\n className,\n )}\n data-component=\"text-effect\"\n data-variant={effect}\n ref={ref}\n style={style}\n {...props}\n >\n {children}\n </span>\n )\n }\n\n // glow\n return (\n <span\n className={cx(className)}\n data-component=\"text-effect\"\n data-variant={effect}\n ref={ref}\n style={{\n textShadow: `0 0 8px var(--gds-accent), 0 0 16px var(--gds-accent)`,\n ...style,\n }}\n {...props}\n >\n {children}\n </span>\n )\n },\n)\n\nexport type { TextEffectProps, TextEffectType }\n","// textarea-counter — textarea with character count display\nimport { forwardRef } from 'react'\n\nimport type { TextareaProps } from '../l2-primitives/textarea'\nimport { Textarea } from '../l2-primitives/textarea'\nimport { cx } from '../utils/cx'\n\ntype TextareaCounterProps = Omit<TextareaProps, 'onChange'> & {\n maxLength?: number\n onChange: (value: string) => void\n value: string\n}\n\nexport const TextareaCounter = forwardRef<HTMLTextAreaElement, TextareaCounterProps>(\n function TextareaCounter({ className, error, maxLength, onChange, value, ...props }, ref) {\n const count = value.length\n const nearLimit = maxLength !== undefined && count >= maxLength * 0.9\n\n return (\n <div className={cx('flex flex-col', className)} data-component=\"textarea-counter\">\n <Textarea\n error={error ?? nearLimit}\n maxLength={maxLength}\n onChange={(e) => onChange(e.target.value)}\n ref={ref}\n value={value}\n {...props}\n />\n <div className={cx(\n 'mt-1 text-right text-[11px]',\n nearLimit ? 'text-danger' : 'text-fg-muted',\n )}>\n {maxLength !== undefined ? `${count} / ${maxLength}` : count}\n </div>\n </div>\n )\n },\n)\n\nexport type { TextareaCounterProps }\n","// theme-toggle — dark/light mode toggle with icon transition\nimport { forwardRef } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\n\ntype ThemeToggleMode = 'dark' | 'light'\n\nexport type ThemeToggleProps = {\n mode: ThemeToggleMode\n onChange: (mode: ThemeToggleMode) => void\n size?: 'default' | 'sm'\n className?: string\n}\n\nconst sizeMap = {\n default: 'h-8 w-8',\n sm: 'h-6 w-6',\n}\n\nconst iconSizeMap = {\n default: 16,\n sm: 14,\n}\n\nexport const ThemeToggle = forwardRef<HTMLButtonElement, ThemeToggleProps>(\n function ThemeToggle({ mode, onChange, size = 'default', className }, ref) {\n const isDark = mode === 'dark'\n const iconSize = iconSizeMap[size]\n\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-label={isDark ? 'Switch to light mode' : 'Switch to dark mode'}\n onClick={() => onChange(isDark ? 'light' : 'dark')}\n className={cx(\n 'inline-flex items-center justify-center rounded-full text-fg-muted transition-colors hover:text-fg select-none',\n sizeMap[size],\n focusCls,\n className,\n )}\n data-component=\"theme-toggle\"\n data-state={mode}\n >\n {isDark ? (\n // sun icon — shown in dark mode, click to switch to light\n <svg width={iconSize} height={iconSize} viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" className=\"transition-transform duration-200\">\n <circle cx=\"8\" cy=\"8\" r=\"3\" />\n <path d=\"M8 1v2M8 13v2M1 8h2M13 8h2M3.05 3.05l1.41 1.41M11.54 11.54l1.41 1.41M3.05 12.95l1.41-1.41M11.54 4.46l1.41-1.41\" />\n </svg>\n ) : (\n // moon icon — shown in light mode, click to switch to dark\n <svg width={iconSize} height={iconSize} viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" className=\"transition-transform duration-200\">\n <path d=\"M13.5 8.5a5.5 5.5 0 01-7-7A5.5 5.5 0 108 14a5.48 5.48 0 005.5-5.5z\" />\n </svg>\n )}\n </button>\n )\n },\n)\n","// time-since — live relative time display that auto-updates\nimport { forwardRef, useEffect, useState } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype TimeSinceProps = {\n date: Date | string | number\n live?: boolean\n className?: string\n}\n\nfunction formatRelative(ms: number): string {\n const seconds = Math.floor(ms / 1000)\n if (seconds < 60) return 'just now'\n const minutes = Math.floor(seconds / 60)\n if (minutes < 60) return `${minutes}m ago`\n const hours = Math.floor(minutes / 60)\n if (hours < 24) return `${hours}h ago`\n const days = Math.floor(hours / 24)\n if (days === 1) return 'Yesterday'\n if (days < 30) return `${days}d ago`\n const months = Math.floor(days / 30)\n if (months < 12) return `${months}mo ago`\n return `${Math.floor(months / 12)}y ago`\n}\n\nconst TimeSince = forwardRef<HTMLSpanElement, TimeSinceProps>(\n function TimeSince({ date, live = true, className }, ref) {\n const timestamp = new Date(date).getTime()\n const [now, setNow] = useState(Date.now)\n\n useEffect(() => {\n if (live !== true) return\n const interval = setInterval(() => setNow(Date.now()), 60000)\n return () => clearInterval(interval)\n }, [live])\n\n const elapsed = Math.max(0, now - timestamp)\n\n return (\n <span ref={ref} className={cx('text-fg-muted gds-text-caption', className)} data-component=\"time-since\">\n {formatRelative(elapsed)}\n </span>\n )\n },\n)\n\nexport { TimeSince }\nexport type { TimeSinceProps }\n","// toggle-group — group of toggle buttons, one or more can be active\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\n\ntype ToggleGroupItem = {\n value: string\n label: ReactNode\n}\n\ntype ToggleGroupSize = 'default' | 'sm'\n\ntype ToggleGroupProps = React.HTMLAttributes<HTMLDivElement> & {\n items: ToggleGroupItem[]\n value: string[]\n onChange: (value: string[]) => void\n exclusive?: boolean\n size?: ToggleGroupSize\n disabled?: boolean\n}\n\nconst sizeClasses: Record<ToggleGroupSize, string> = {\n default: 'px-3 py-1.5 text-xs',\n sm: 'px-2 py-1 text-[11px]',\n}\n\nconst ToggleGroup = forwardRef<HTMLDivElement, ToggleGroupProps>(\n function ToggleGroup(\n { items, value, onChange, exclusive, size = 'default', disabled, className, ...props },\n ref,\n ) {\n function handleClick(itemValue: string) {\n if (exclusive === true) {\n // exclusive: always select the clicked one (no deselect)\n if (!value.includes(itemValue)) {\n onChange([itemValue])\n }\n return\n }\n // multi: toggle\n if (value.includes(itemValue)) {\n onChange(value.filter((v) => v !== itemValue))\n } else {\n onChange([...value, itemValue])\n }\n }\n\n return (\n <div\n ref={ref}\n className={cx(\n 'inline-flex select-none overflow-hidden gds-radius-button border border-border bg-bg',\n disabled === true && 'pointer-events-none opacity-50',\n className,\n )}\n data-component=\"toggle-group\"\n data-state={disabled === true ? 'disabled' : 'enabled'}\n role=\"group\"\n {...props}\n >\n {items.map((item, index) => {\n const isActive = value.includes(item.value)\n const isLast = index === items.length - 1\n return (\n <button\n key={item.value}\n aria-pressed={isActive}\n className={cx(\n 'transition-colors',\n sizeClasses[size ?? 'default'],\n !isLast && 'border-r border-border',\n focusCls,\n isActive ? 'bg-accent/10 text-accent' : 'text-fg-muted hover:bg-bg-tertiary',\n )}\n disabled={disabled}\n onClick={() => handleClick(item.value)}\n type=\"button\"\n >\n {item.label}\n </button>\n )\n })}\n </div>\n )\n },\n)\n\nexport { ToggleGroup }\nexport type { ToggleGroupItem, ToggleGroupProps, ToggleGroupSize }\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype TrendArrowDirection = 'up' | 'down' | 'flat'\ntype TrendArrowSize = 'sm' | 'default'\n\ntype TrendArrowProps = React.HTMLAttributes<HTMLSpanElement> & {\n direction: TrendArrowDirection\n size?: TrendArrowSize\n}\n\nconst sizeMap: Record<TrendArrowSize, number> = { sm: 12, default: 16 }\n\nconst TrendArrow = forwardRef<HTMLSpanElement, TrendArrowProps>(\n function TrendArrow({ className, direction, size = 'default', ...props }, ref) {\n const s = sizeMap[size]\n const colorCls = direction === 'up' ? 'text-success' : direction === 'down' ? 'text-danger' : 'text-fg-muted'\n\n return (\n <span className={cx('inline-flex', colorCls, className)} data-component=\"trend-arrow\" data-direction={direction} ref={ref} {...props}>\n <svg fill=\"none\" height={s} stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} viewBox=\"0 0 24 24\" width={s}>\n {direction === 'up' && <path d=\"M12 19V5M5 12l7-7 7 7\" />}\n {direction === 'down' && <path d=\"M12 5v14M19 12l-7 7-7-7\" />}\n {direction === 'flat' && <path d=\"M5 12h14\" />}\n </svg>\n </span>\n )\n },\n)\n\nexport { TrendArrow }\nexport type { TrendArrowDirection, TrendArrowProps, TrendArrowSize }\n","import type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype TruncatedListProps = React.HTMLAttributes<HTMLDivElement> & {\n items: ReactNode[]\n max?: number\n moreLabel?: (count: number) => string\n}\n\nexport const TruncatedList = forwardRef<HTMLDivElement, TruncatedListProps>(\n function TruncatedList({ className, items, max = 3, moreLabel, ...props }, ref) {\n const visible = items.slice(0, max)\n const remaining = items.length - max\n\n return (\n <div\n className={cx('inline-flex flex-wrap items-center gds-gap-sm', className)}\n data-component=\"truncated-list\"\n ref={ref}\n {...props}\n >\n {visible.map((item, i) => (\n <span key={i}>{item}</span>\n ))}\n {remaining > 0 && (\n <span className=\"gds-text-label text-fg-muted\">\n {moreLabel !== undefined ? moreLabel(remaining) : `+${remaining} more`}\n </span>\n )}\n </div>\n )\n },\n)\n\nexport type { TruncatedListProps }\n","// typewriter — characters appear one by one\nimport { forwardRef, useEffect, useState } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type TypewriterProps = {\n text: string\n speed?: number\n delay?: number\n cursor?: boolean\n onComplete?: () => void\n className?: string\n}\n\nexport const Typewriter = forwardRef<HTMLSpanElement, TypewriterProps>(\n function Typewriter(\n { text, speed = 50, delay = 0, cursor = true, onComplete, className },\n ref,\n ) {\n const [length, setLength] = useState(0)\n const [started, setStarted] = useState(delay <= 0)\n\n useEffect(() => {\n if (delay <= 0) return\n const timer = setTimeout(() => setStarted(true), delay)\n return () => clearTimeout(timer)\n }, [delay])\n\n useEffect(() => {\n if (!started) return\n if (length >= text.length) {\n if (onComplete !== undefined) onComplete()\n return\n }\n const timer = setTimeout(() => setLength((prev) => prev + 1), speed)\n return () => clearTimeout(timer)\n }, [length, text.length, speed, started, onComplete])\n\n // reset when text changes\n useEffect(() => {\n setLength(0)\n if (delay <= 0) setStarted(true)\n }, [text, delay])\n\n return (\n <span ref={ref} className={cx(className)} data-component=\"typewriter\">\n {text.slice(0, length)}\n {cursor && (\n <span\n className=\"inline-block animate-pulse\"\n data-testid=\"cursor\"\n aria-hidden\n >\n |\n </span>\n )}\n </span>\n )\n },\n)\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype VerifiedBadgeVariant = 'default' | 'gold' | 'official'\n\ntype VerifiedBadgeProps = React.HTMLAttributes<HTMLSpanElement> & {\n size?: 'default' | 'sm'\n variant?: VerifiedBadgeVariant\n}\n\nconst variantColors: Record<VerifiedBadgeVariant, string> = {\n default: 'text-accent',\n gold: 'text-warning',\n official: 'text-success',\n}\n\nconst sizeMap = { default: 16, sm: 12 } as const\n\nexport const VerifiedBadge = forwardRef<HTMLSpanElement, VerifiedBadgeProps>(\n function VerifiedBadge({ className, size = 'default', variant = 'default', ...props }, ref) {\n const s = sizeMap[size]\n return (\n <span\n className={cx('inline-flex shrink-0 items-center', variantColors[variant], className)}\n data-component=\"verified-badge\"\n data-variant={variant}\n ref={ref}\n {...props}\n >\n <svg fill=\"currentColor\" height={s} viewBox=\"0 0 24 24\" width={s}>\n <path d=\"M12 1l3.09 2.26L19 3.27l.01 3.91L22 10.18 19.82 13l.18 3.91-3.91 1.01L13.09 21 12 23l-3.09-2.26L5 21.73l-.01-3.91L2 14.82 4.18 12l-.18-3.91 3.91-1.01L10.91 4 12 1zm-1.5 12.5l5-5-1.41-1.41L10.5 10.67 8.41 8.59 7 10l3.5 3.5z\" />\n </svg>\n </span>\n )\n },\n)\n\nexport type { VerifiedBadgeProps, VerifiedBadgeVariant }\n","// visual-counter — number display with +/- controls\nimport { forwardRef } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\n\ntype VisualCounterProps = Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> & {\n value: number\n onChange: (value: number) => void\n min?: number\n max?: number\n step?: number\n disabled?: boolean\n}\n\nexport const VisualCounter = forwardRef<HTMLDivElement, VisualCounterProps>(\n function VisualCounter(\n { value, onChange, min, max, step = 1, disabled = false, className, ...props },\n ref,\n ) {\n const atMin = min !== undefined && value <= min\n const atMax = max !== undefined && value >= max\n\n return (\n <div\n ref={ref}\n className={cx('inline-flex items-center gap-1 select-none', className)}\n data-component=\"visual-counter\"\n {...props}\n >\n <button\n type=\"button\"\n className={cx('flex h-7 w-7 items-center justify-center rounded-md border border-border text-fg-muted transition-colors hover:bg-bg-tertiary disabled:opacity-40', focusCls)}\n disabled={disabled || atMin}\n onClick={() => onChange(Math.max(min ?? -Infinity, value - step))}\n >\n −\n </button>\n <span className=\"min-w-[2rem] text-center tabular-nums gds-text text-fg\">{value}</span>\n <button\n type=\"button\"\n className={cx('flex h-7 w-7 items-center justify-center rounded-md border border-border text-fg-muted transition-colors hover:bg-bg-tertiary disabled:opacity-40', focusCls)}\n disabled={disabled || atMax}\n onClick={() => onChange(Math.min(max ?? Infinity, value + step))}\n >\n +\n </button>\n </div>\n )\n },\n)\n\nexport type { VisualCounterProps }\n","// accordion — expandable sections with single/multiple mode\nimport type { ReactNode } from 'react'\nimport { createContext, useContext, useState } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\n\ntype AccordionType = 'multiple' | 'single'\n\ntype AccordionContextValue = {\n expanded: string[]\n toggle: (id: string) => void\n}\n\nconst AccordionContext = createContext<AccordionContextValue>({\n expanded: [],\n toggle: () => {},\n})\n\nexport type AccordionProps = {\n children: ReactNode\n type?: AccordionType\n defaultExpanded?: string[]\n className?: string\n}\n\nexport function Accordion({ children, type = 'single', defaultExpanded = [], className }: AccordionProps) {\n const [expanded, setExpanded] = useState<string[]>(defaultExpanded)\n\n const toggle = (id: string) => {\n setExpanded((prev) => {\n const isOpen = prev.includes(id)\n if (isOpen) return prev.filter((x) => x !== id)\n if (type === 'single') return [id]\n return [...prev, id]\n })\n }\n\n return (\n <div className={cx('divide-y divide-border', className)} data-component=\"accordion\">\n <AccordionContext.Provider value={{ expanded, toggle }}>\n {children}\n </AccordionContext.Provider>\n </div>\n )\n}\n\nexport type AccordionItemProps = {\n id: string\n title: string\n children: ReactNode\n disabled?: boolean\n className?: string\n}\n\nexport function AccordionItem({ id, title, children, disabled, className }: AccordionItemProps) {\n const { expanded, toggle } = useContext(AccordionContext)\n const isOpen = expanded.includes(id)\n\n return (\n <div className={cx(className)} data-state={isOpen ? 'open' : 'closed'}>\n <button\n type=\"button\"\n disabled={disabled}\n onClick={() => toggle(id)}\n className={cx(\n 'flex w-full items-center justify-between gds-pad-y-lg text-left text-sm font-medium text-fg transition-colors',\n focusCls,\n disabled === true && 'pointer-events-none opacity-40',\n )}\n aria-expanded={isOpen}\n >\n <span>{title}</span>\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n className={cx('shrink-0 transition-transform duration-200', isOpen && 'rotate-180')}\n >\n <path d=\"M3.5 5.5l3.5 3 3.5-3\" />\n </svg>\n </button>\n {isOpen && (\n <div className=\"pb-3 gds-text-body text-fg-muted\">{children}</div>\n )}\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype ActionCardProps = Omit<React.HTMLAttributes<HTMLDivElement>, 'onClick'> & {\n description?: string\n icon?: ReactNode\n onClick: () => void\n title: string\n}\n\nexport const ActionCard = forwardRef<HTMLDivElement, ActionCardProps>(\n function ActionCard({ className, description, icon, onClick, title, ...props }, ref) {\n return (\n <div\n className={cx(\n 'flex cursor-pointer items-center gds-gap gds-pad gds-radius',\n 'border border-border bg-surface transition-colors hover:bg-surface-hover',\n className,\n )}\n data-component=\"action-card\"\n onClick={onClick}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n onClick()\n }\n }}\n ref={ref}\n role=\"button\"\n tabIndex={0}\n {...props}\n >\n {icon !== undefined && <span className=\"shrink-0 text-accent\">{icon}</span>}\n <div className=\"flex flex-col gap-0.5\">\n <span className=\"text-sm font-medium text-fg\">{title}</span>\n {description !== undefined && <span className=\"text-xs text-fg-muted\">{description}</span>}\n </div>\n </div>\n )\n },\n)\n\nexport type { ActionCardProps }\n","import type { ReactNode } from 'react'\nimport { forwardRef, useRef, useState } from 'react'\n\nimport { IconButton } from '../l2-primitives/icon-button'\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\nimport { useClickOutside, useEscapeKey } from '../utils/hooks'\n\ntype ActionMenuItem = {\n id: string\n label: string\n icon?: ReactNode\n danger?: boolean\n}\n\ntype ActionMenuProps = {\n items: ActionMenuItem[]\n onSelect: (id: string) => void\n disabled?: boolean\n className?: string\n}\n\nconst dotsIcon = (\n <svg className=\"h-4 w-4\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\n <circle cx=\"8\" cy=\"3\" r=\"1.5\" />\n <circle cx=\"8\" cy=\"8\" r=\"1.5\" />\n <circle cx=\"8\" cy=\"13\" r=\"1.5\" />\n </svg>\n)\n\nexport const ActionMenu = forwardRef<HTMLDivElement, ActionMenuProps>(\n function ActionMenu({ className, disabled, items, onSelect }, ref) {\n const [open, setOpen] = useState(false)\n const containerRef = useRef<HTMLDivElement>(null)\n useClickOutside(containerRef, open, () => setOpen(false))\n useEscapeKey(open, () => setOpen(false))\n\n return (\n <div className={cx('relative inline-block', className)} data-component=\"action-menu\" ref={ref}>\n <div ref={containerRef}>\n <IconButton\n disabled={disabled}\n icon={dotsIcon}\n onClick={() => setOpen((prev) => !prev)}\n tooltip=\"Actions\"\n variant=\"default\"\n />\n {open && (\n <div className=\"absolute right-0 z-50 mt-1 min-w-[140px] animate-popup rounded-lg border border-border bg-surface py-1 shadow-lg\">\n {items.map((item) => (\n <button\n key={item.id}\n className={cx(\n 'flex w-full items-center gds-gap-sm px-3 py-1.5 gds-text-body transition-colors',\n focusCls,\n item.danger === true ? 'text-danger hover:bg-danger/10' : 'text-fg hover:bg-bg-tertiary',\n )}\n onClick={() => { onSelect(item.id); setOpen(false) }}\n type=\"button\"\n >\n {item.icon !== undefined && <span className=\"shrink-0\">{item.icon}</span>}\n <span>{item.label}</span>\n </button>\n ))}\n </div>\n )}\n </div>\n </div>\n )\n },\n)\n\nexport type { ActionMenuItem, ActionMenuProps }\n","// alert — contextual feedback banner with variant colors and optional close\nimport { cva } from 'class-variance-authority'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\nimport type { VariantProps } from '../utils/types'\n\nconst alertVariants = cva(\n 'flex items-start gds-gap gds-radius-popover border gds-pad-x gds-pad-y gds-text-body',\n {\n variants: {\n variant: {\n default: 'border-border bg-bg-secondary text-fg',\n info: 'border-accent/30 bg-accent/10 text-accent',\n success: 'border-success/30 bg-success/10 text-success',\n warning: 'border-warning/30 bg-warning/10 text-warning',\n danger: 'border-danger/30 bg-danger/10 text-danger',\n },\n },\n defaultVariants: { variant: 'default' },\n },\n)\n\nconst variantIcons: Record<string, React.ReactNode> = {\n default: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\">\n <circle cx=\"8\" cy=\"8\" r=\"6.5\" /><path d=\"M8 5.5v3M8 10.5h.01\" />\n </svg>\n ),\n info: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\">\n <circle cx=\"8\" cy=\"8\" r=\"6.5\" /><path d=\"M8 5.5h.01M8 7.5v3\" />\n </svg>\n ),\n success: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"8\" cy=\"8\" r=\"6.5\" /><path d=\"M5.5 8l2 2 3-3.5\" />\n </svg>\n ),\n warning: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\">\n <path d=\"M7.13 2.5l-5.5 10h11l-5.5-10z\" /><path d=\"M7.63 6.5v2.5M7.63 11h.01\" />\n </svg>\n ),\n danger: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\">\n <circle cx=\"8\" cy=\"8\" r=\"6.5\" /><path d=\"M5.5 5.5l5 5M10.5 5.5l-5 5\" />\n </svg>\n ),\n}\n\nexport type AlertProps = React.HTMLAttributes<HTMLDivElement> &\n VariantProps<typeof alertVariants> & {\n title?: string\n onClose?: () => void\n glass?: boolean\n }\n\nexport function Alert({ children, title, variant = 'default', onClose, glass, className, ...props }: AlertProps) {\n const v = variant ?? 'default'\n\n return (\n <div\n className={cx(\n alertVariants({ variant }),\n glass === true && glassClass(glass),\n className,\n )}\n data-component=\"alert\"\n data-variant={v}\n role=\"alert\"\n {...props}\n >\n <span className=\"mt-px shrink-0\">{variantIcons[v]}</span>\n <div className=\"min-w-0 flex-1\">\n {title !== undefined && <p className=\"mb-0.5 font-medium\">{title}</p>}\n <div className=\"text-inherit/80\">{children}</div>\n </div>\n {onClose !== undefined && (\n <button\n type=\"button\"\n onClick={onClose}\n className={cx('shrink-0 gds-radius-button p-0.5 opacity-60 hover:opacity-100', focusCls)}\n aria-label=\"Dismiss\"\n >\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\">\n <path d=\"M2 2l8 8M10 2l-8 8\" />\n </svg>\n </button>\n )}\n </div>\n )\n}\n\nexport { alertVariants }\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype AuditEntryVariant = 'danger' | 'default' | 'success' | 'warning'\n\ntype AuditEntryProps = React.HTMLAttributes<HTMLDivElement> & {\n action: string\n target?: string\n timestamp: string\n user: string\n variant?: AuditEntryVariant\n}\n\nconst variantCls: Record<AuditEntryVariant, string> = {\n default: 'text-fg',\n success: 'text-success',\n warning: 'text-warning',\n danger: 'text-danger',\n}\n\nexport const AuditEntry = forwardRef<HTMLDivElement, AuditEntryProps>(\n function AuditEntry({ action, className, target, timestamp, user, variant = 'default', ...props }, ref) {\n return (\n <div\n className={cx('flex items-center justify-between gds-gap gds-text', className)}\n data-component=\"audit-entry\"\n ref={ref}\n {...props}\n >\n <span className=\"shrink-0 text-xs text-fg-muted\">{timestamp}</span>\n <span className=\"flex-1 truncate\">\n <span className=\"font-medium text-fg\">{user}</span>\n {' '}\n <span className={variantCls[variant]}>{action}</span>\n {target !== undefined && <span className=\"text-fg-muted\"> {target}</span>}\n </span>\n </div>\n )\n },\n)\n\nexport type { AuditEntryProps, AuditEntryVariant }\n","// breadcrumb — navigation trail with collapsible items\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type BreadcrumbItem = {\n label: string\n href?: string\n icon?: ReactNode\n}\n\nexport type BreadcrumbProps = {\n items: BreadcrumbItem[]\n separator?: ReactNode\n maxItems?: number\n className?: string\n}\n\nconst defaultSeparator = (\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 Breadcrumb = forwardRef<HTMLElement, BreadcrumbProps>(\n function Breadcrumb({ items, separator = defaultSeparator, maxItems, className }, ref) {\n let visibleItems = items\n\n if (maxItems !== undefined && items.length > maxItems && maxItems >= 2) {\n const first = items[0]\n const last = items[items.length - 1]\n const ellipsis: BreadcrumbItem = { label: '...' }\n visibleItems = [first, ellipsis, last]\n }\n\n return (\n <nav ref={ref} aria-label=\"Breadcrumb\" className={cx(className)} data-component=\"breadcrumb\">\n <ol className=\"flex items-center gds-gap-sm gds-text-body text-fg-muted\">\n {visibleItems.map((item, i) => (\n <li key={i} className=\"flex items-center gds-gap-sm\">\n {i > 0 && (\n <span className=\"text-fg-muted/50\" aria-hidden=\"true\">{separator}</span>\n )}\n {item.icon !== undefined && <span className=\"shrink-0\">{item.icon}</span>}\n {item.href !== undefined ? (\n <a\n href={item.href}\n className=\"transition-colors hover:text-fg\"\n >\n {item.label}\n </a>\n ) : (\n <span className={cx(i === visibleItems.length - 1 && 'text-fg')}>\n {item.label}\n </span>\n )}\n </li>\n ))}\n </ol>\n </nav>\n )\n },\n)\n","// bulk-action-bar — bar that appears when items are selected\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\n\ntype BulkActionBarProps = {\n actions: ReactNode\n className?: string\n count: number\n onClear?: () => void\n}\n\nconst closeIcon = (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\">\n <path d=\"M3 3l8 8M11 3l-8 8\" />\n </svg>\n)\n\nexport const BulkActionBar = forwardRef<HTMLDivElement, BulkActionBarProps>(\n function BulkActionBar({ actions, className, count, onClear }, ref) {\n if (count <= 0) return null\n\n return (\n <div\n ref={ref}\n className={cx(\n 'fixed bottom-4 left-1/2 z-40 flex -translate-x-1/2 items-center gds-gap gds-pad-x-lg gds-pad-y',\n 'animate-popup gds-radius-popover border border-border bg-surface gds-shadow-xl',\n className,\n )}\n data-component=\"bulk-action-bar\"\n >\n <span className=\"gds-text-body select-none whitespace-nowrap font-medium text-fg\">\n {count} selected\n </span>\n <div className=\"flex items-center gds-gap-sm\">{actions}</div>\n {onClear !== undefined && (\n <button\n aria-label=\"Clear selection\"\n className={cx('shrink-0 p-0.5 text-fg-muted hover:text-fg', focusCls)}\n onClick={onClear}\n type=\"button\"\n >\n {closeIcon}\n </button>\n )}\n </div>\n )\n },\n)\n\nexport type { BulkActionBarProps }\n","// callout — prominent message box with icon, title, and variant colors\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\ntype CalloutVariant = 'info' | 'tip' | 'warning' | 'danger'\n\nconst variantStyles: Record<CalloutVariant, string> = {\n info: 'border-l-accent bg-accent/5 text-accent',\n tip: 'border-l-success bg-success/5 text-success',\n warning: 'border-l-warning bg-warning/5 text-warning',\n danger: 'border-l-danger bg-danger/5 text-danger',\n}\n\nconst defaultIcons: Record<CalloutVariant, ReactNode> = {\n info: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\">\n <circle cx=\"10\" cy=\"10\" r=\"8\" /><path d=\"M10 7h.01M10 9.5v4\" />\n </svg>\n ),\n tip: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M7.5 15h5M8 17h4M10 2a5.5 5.5 0 0 0-2 10.65V14h4v-1.35A5.5 5.5 0 0 0 10 2z\" />\n </svg>\n ),\n warning: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\">\n <path d=\"M9.13 3l-7 12.5h14l-7-12.5z\" /><path d=\"M9.63 8.5v3M9.63 13.5h.01\" />\n </svg>\n ),\n danger: (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\">\n <circle cx=\"10\" cy=\"10\" r=\"8\" /><path d=\"M7 7l6 6M13 7l-6 6\" />\n </svg>\n ),\n}\n\nexport type CalloutProps = {\n variant?: CalloutVariant\n title?: string\n children: ReactNode\n icon?: ReactNode\n glass?: boolean\n className?: string\n}\n\nexport const Callout = forwardRef<HTMLDivElement, CalloutProps>(\n function Callout({ variant = 'info', title, children, icon, glass, className }, ref) {\n const resolvedIcon = icon ?? defaultIcons[variant]\n\n return (\n <div\n ref={ref}\n className={cx(\n 'flex items-start gap-3 border-l-[3px] gds-radius-popover gds-pad-x-lg gds-pad-y-lg gds-text-body',\n variantStyles[variant],\n glass === true && glassClass(glass),\n className,\n )}\n data-component=\"callout\"\n data-variant={variant}\n >\n <span className=\"mt-0.5 shrink-0\">{resolvedIcon}</span>\n <div className=\"min-w-0 flex-1\">\n {title !== undefined && <p className=\"mb-1 font-semibold\">{title}</p>}\n <div className=\"text-inherit/80\">{children}</div>\n </div>\n </div>\n )\n },\n)\n","// card — composition-based content container\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\ntype CardPadding = 'default' | 'lg' | 'none' | 'sm'\n\nconst paddingMap: Record<CardPadding, string> = {\n none: '',\n sm: 'gds-pad-x gds-pad-y',\n default: 'gds-pad-x-lg gds-pad-y-lg',\n lg: 'gds-pad-x-lg gds-pad-y-lg',\n}\n\nexport type CardProps = {\n children: ReactNode\n glass?: boolean\n padding?: CardPadding\n loading?: boolean\n className?: string\n}\n\nexport const Card = forwardRef<HTMLDivElement, CardProps>(\n function Card({ children, glass, padding = 'default', loading, className }, ref) {\n if (loading === true) {\n return (\n <div\n ref={ref}\n className={cx('gds-ctx animate-pulse gds-radius-card border border-border bg-bg-tertiary', paddingMap[padding], className)}\n data-component=\"card\"\n data-state=\"loading\"\n >\n <div className=\"h-20\" />\n </div>\n )\n }\n\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-ctx gds-radius-card border',\n glass ? cx(glassClass(glass), 'border-white/10 bg-bg/60') : 'border-border bg-surface',\n paddingMap[padding],\n className,\n )}\n data-component=\"card\"\n >\n {children}\n </div>\n )\n },\n)\n\nexport type CardHeaderProps = {\n title: string\n description?: string\n action?: ReactNode\n className?: string\n}\n\nexport function CardHeader({ title, description, action, className }: CardHeaderProps) {\n return (\n <div className={cx('flex items-start justify-between gds-gap', className)}>\n <div className=\"min-w-0\">\n <h3 className=\"text-sm font-semibold text-fg\">{title}</h3>\n {description !== undefined && <p className=\"mt-0.5 gds-text-body text-fg-muted\">{description}</p>}\n </div>\n {action !== undefined && <div className=\"shrink-0\">{action}</div>}\n </div>\n )\n}\n\nexport type CardContentProps = {\n children: ReactNode\n className?: string\n}\n\nexport function CardContent({ children, className }: CardContentProps) {\n return <div className={cx('mt-3', className)}>{children}</div>\n}\n\nexport type CardFooterProps = {\n children: ReactNode\n className?: string\n}\n\nexport function CardFooter({ children, className }: CardFooterProps) {\n return <div className={cx('mt-3 flex items-center gds-gap-sm border-t border-border pt-3', className)}>{children}</div>\n}\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype CategoryTagProps = React.HTMLAttributes<HTMLDivElement> & {\n color: string\n count?: number\n label: string\n onClick?: () => void\n}\n\nexport const CategoryTag = forwardRef<HTMLDivElement, CategoryTagProps>(\n function CategoryTag({ className, color, count, label, onClick, ...props }, ref) {\n return (\n <div\n className={cx(\n 'inline-flex items-center gap-2 rounded-md border border-border bg-surface px-2.5 py-1',\n onClick !== undefined && 'cursor-pointer hover:bg-bg-tertiary',\n className,\n )}\n data-component=\"category-tag\"\n onClick={onClick}\n ref={ref}\n role={onClick !== undefined ? 'button' : undefined}\n {...props}\n >\n <span className=\"h-3 w-1 shrink-0 rounded-full\" style={{ backgroundColor: color }} />\n <span className=\"gds-text-label text-fg\">{label}</span>\n {count !== undefined && (\n <span className=\"gds-text-label text-fg-muted\">{count}</span>\n )}\n </div>\n )\n },\n)\n\nexport type { CategoryTagProps }\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype CertBadgeStatus = 'expired' | 'expiring' | 'valid'\n\ntype CertBadgeProps = React.HTMLAttributes<HTMLDivElement> & {\n domain: string\n expiresAt: string\n status: CertBadgeStatus\n}\n\nconst statusCls: Record<CertBadgeStatus, string> = {\n valid: 'bg-success/15 text-success border-success/20',\n expiring: 'bg-warning/15 text-warning border-warning/20',\n expired: 'bg-danger/15 text-danger border-danger/20',\n}\n\nconst statusIcon: Record<CertBadgeStatus, string> = {\n valid: '🔒',\n expiring: '⚠️',\n expired: '❌',\n}\n\nexport const CertBadge = forwardRef<HTMLDivElement, CertBadgeProps>(\n function CertBadge({ className, domain, expiresAt, status, ...props }, ref) {\n return (\n <div\n className={cx('inline-flex items-center gap-2 rounded-md border px-2.5 py-1.5', statusCls[status], className)}\n data-component=\"cert-badge\"\n ref={ref}\n {...props}\n >\n <span className=\"text-xs\">{statusIcon[status]}</span>\n <span className=\"gds-text-label font-medium\">{domain}</span>\n <span className=\"gds-text-label opacity-70\">{expiresAt}</span>\n </div>\n )\n },\n)\n\nexport type { CertBadgeProps, CertBadgeStatus }\n","import { forwardRef } from 'react'\n\nimport { Chip } from '../l3-atoms/chip'\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\n\ntype ChipGroupOption = { value: string; label: string }\n\ntype ChipGroupProps = React.HTMLAttributes<HTMLDivElement> & {\n options: ChipGroupOption[]\n value: string[]\n onChange: (value: string[]) => void\n exclusive?: boolean\n className?: string\n}\n\nexport const ChipGroup = forwardRef<HTMLDivElement, ChipGroupProps>(\n function ChipGroup({ options, value, onChange, exclusive = false, className, ...props }, ref) {\n function handleClick(optionValue: string) {\n if (exclusive) {\n const next = value.includes(optionValue) ? [] : [optionValue]\n onChange(next)\n return\n }\n const next = value.includes(optionValue)\n ? value.filter((v) => v !== optionValue)\n : [...value, optionValue]\n onChange(next)\n }\n\n return (\n <div\n className={cx('flex flex-wrap gds-gap', className)}\n data-component=\"chip-group\"\n ref={ref}\n {...props}\n >\n {options.map((opt) => (\n <button\n key={opt.value}\n type=\"button\"\n className={cx('cursor-pointer', focusCls)}\n onClick={() => handleClick(opt.value)}\n >\n <Chip\n label={opt.label}\n variant={value.includes(opt.value) ? 'accent' : 'default'}\n />\n </button>\n ))}\n </div>\n )\n },\n)\n\nexport type { ChipGroupOption, ChipGroupProps }\n","// code-block — styled code display with line numbers and copy button\nimport { forwardRef, useCallback, useState } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\nexport type CodeBlockProps = {\n code: string\n language?: string\n showLineNumbers?: boolean\n maxHeight?: number | string\n glass?: boolean\n className?: string\n}\n\nexport const CodeBlock = forwardRef<HTMLDivElement, CodeBlockProps>(\n function CodeBlock({ code, language, showLineNumbers = true, maxHeight, glass, className }, ref) {\n const [copied, setCopied] = useState(false)\n\n const handleCopy = useCallback(() => {\n navigator.clipboard.writeText(code).then(() => {\n setCopied(true)\n setTimeout(() => setCopied(false), 1500)\n }).catch(() => {\n // clipboard api not available\n })\n }, [code])\n\n const lines = code.split('\\n')\n const lineNumberWidth = String(lines.length).length\n\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-radius-popover border overflow-hidden',\n glass === true\n ? cx(glassClass(glass), 'border-white/10 bg-bg/60')\n : 'border-border bg-bg-tertiary',\n className,\n )}\n data-component=\"code-block\"\n data-variant={glass === true ? 'glass' : 'default'}\n >\n {/* header */}\n <div className=\"flex items-center justify-between border-b border-border/50 px-3 py-1.5\">\n <span className=\"select-none text-xs text-fg-muted\" data-testid=\"code-language\">\n {language ?? 'code'}\n </span>\n <button\n type=\"button\"\n onClick={handleCopy}\n className={cx(\n 'select-none gds-radius-button px-2 py-0.5 text-xs text-fg-muted transition-colors hover:text-fg',\n focusCls,\n )}\n aria-label=\"Copy code\"\n >\n {copied ? (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M3 7.5l3 3 5-6\" />\n </svg>\n ) : (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"4.5\" y=\"4.5\" width=\"7\" height=\"7\" rx=\"1.5\" />\n <path d=\"M9.5 4.5V3a1.5 1.5 0 00-1.5-1.5H3A1.5 1.5 0 001.5 3v5A1.5 1.5 0 003 9.5h1.5\" />\n </svg>\n )}\n </button>\n </div>\n\n {/* code body */}\n <div\n className=\"overflow-auto\"\n style={maxHeight !== undefined ? { maxHeight } : undefined}\n data-selectable\n >\n <pre className=\"m-0 p-0\">\n <code className=\"block px-3 py-2 font-mono text-xs leading-5 text-fg\">\n {lines.map((line, i) => (\n <div key={i} className=\"flex\">\n {showLineNumbers && (\n <span\n className=\"mr-3 inline-block select-none border-r border-border/30 pr-3 text-right text-fg-muted/40\"\n style={{ minWidth: `${lineNumberWidth}ch` }}\n >\n {i + 1}\n </span>\n )}\n <span className=\"flex-1 whitespace-pre\">{line}</span>\n </div>\n ))}\n </code>\n </pre>\n </div>\n </div>\n )\n },\n)\n","// collapsible — simple trigger + content toggle\nimport type { ReactNode } from 'react'\nimport { forwardRef, useState } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype CollapsibleProps = {\n trigger: ReactNode\n children: ReactNode\n defaultOpen?: boolean\n open?: boolean\n onOpenChange?: (open: boolean) => void\n className?: string\n}\n\nconst Collapsible = forwardRef<HTMLDivElement, CollapsibleProps>(\n function Collapsible(\n { trigger, children, defaultOpen = false, open: controlledOpen, onOpenChange, className },\n ref,\n ) {\n const [internalOpen, setInternalOpen] = useState(defaultOpen)\n const isControlled = controlledOpen !== undefined\n const isOpen = isControlled ? controlledOpen : internalOpen\n\n function handleToggle() {\n const next = !isOpen\n if (!isControlled) {\n setInternalOpen(next)\n }\n if (onOpenChange !== undefined) {\n onOpenChange(next)\n }\n }\n\n return (\n <div ref={ref} className={cx('w-full', className)} data-component=\"collapsible\">\n <button\n aria-expanded={isOpen}\n className=\"w-full cursor-pointer select-none text-left\"\n onClick={handleToggle}\n type=\"button\"\n >\n {trigger}\n </button>\n <div\n className={cx(\n 'overflow-hidden transition-[max-height] duration-200',\n isOpen ? 'max-h-[2000px]' : 'max-h-0',\n )}\n data-state={isOpen ? 'open' : 'closed'}\n >\n {isOpen ? children : null}\n </div>\n </div>\n )\n },\n)\n\nexport { Collapsible }\nexport type { CollapsibleProps }\n","// color-picker — preset swatches + custom hex input\nimport { forwardRef, useCallback, useState } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\n\nconst DEFAULT_PRESETS = [\n '#ef4444', '#f97316', '#eab308', '#22c55e', '#06b6d4',\n '#3b82f6', '#8b5cf6', '#ec4899', '#64748b', '#ffffff',\n]\n\nconst HEX_REGEX = /^#[0-9a-fA-F]{6}$/\n\nexport type ColorPickerProps = {\n value: string\n onChange: (color: string) => void\n presets?: string[]\n showInput?: boolean\n disabled?: boolean\n className?: string\n}\n\nexport const ColorPicker = forwardRef<HTMLDivElement, ColorPickerProps>(\n function ColorPicker({ value, onChange, presets, showInput = true, disabled = false, className }, ref) {\n const swatches = presets ?? DEFAULT_PRESETS\n const [inputValue, setInputValue] = useState(value)\n\n const handleSwatchClick = useCallback((color: string) => {\n if (disabled) return\n onChange(color)\n setInputValue(color)\n }, [disabled, onChange])\n\n const handleInputChange = useCallback((raw: string) => {\n // ensure # prefix\n const normalized = raw.startsWith('#') ? raw : `#${raw}`\n setInputValue(normalized)\n\n if (HEX_REGEX.test(normalized)) {\n onChange(normalized)\n }\n }, [onChange])\n\n return (\n <div\n ref={ref}\n className={cx('flex flex-col gds-gap', className)}\n data-component=\"color-picker\"\n data-disabled={disabled ? '' : undefined}\n >\n {/* current color preview */}\n <div className=\"flex items-center gds-gap\">\n <div\n className=\"h-8 w-8 shrink-0 gds-radius-button border border-border\"\n style={{ backgroundColor: value }}\n />\n <span className=\"gds-text-body font-mono text-fg-muted\">{value}</span>\n </div>\n\n {/* preset swatches */}\n <div className=\"flex flex-wrap gap-1.5\">\n {swatches.map((color) => {\n const isActive = color.toLowerCase() === value.toLowerCase()\n return (\n <button\n key={color}\n type=\"button\"\n disabled={disabled}\n onClick={() => handleSwatchClick(color)}\n className={cx(\n 'h-6 w-6 rounded-full border transition-shadow',\n isActive ? 'ring-2 ring-accent ring-offset-1 ring-offset-bg border-transparent' : 'border-border hover:scale-110',\n disabled && 'cursor-not-allowed opacity-40',\n focusCls,\n )}\n style={{ backgroundColor: color }}\n aria-label={`Select color ${color}`}\n />\n )\n })}\n </div>\n\n {/* hex input */}\n {showInput && (\n <div className=\"flex items-center gds-gap\">\n <span className=\"gds-text-body font-mono text-fg-muted select-none\">#</span>\n <input\n type=\"text\"\n value={inputValue.replace(/^#/, '')}\n onChange={(e) => handleInputChange(e.target.value)}\n disabled={disabled}\n maxLength={6}\n placeholder=\"000000\"\n className={cx(\n 'w-20 rounded border border-border bg-transparent px-2 py-1 font-mono gds-text-body text-fg',\n 'focus:border-accent focus:outline-none',\n disabled && 'cursor-not-allowed opacity-40',\n )}\n aria-label=\"Hex color input\"\n />\n </div>\n )}\n </div>\n )\n },\n)\n","// combobox-list — dropdown option list for combobox (internal)\nimport { useCallback } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\ntype ComboboxOption = {\n label: string\n value: string\n}\n\ntype ComboboxListProps = {\n filtered: ComboboxOption[]\n glass?: boolean\n highlightedIndex: number\n onSearchChange: (value: string) => void\n onSelect: (value: string) => void\n query: string\n searchPlaceholder: string\n searchRef: React.RefObject<HTMLInputElement | null>\n setHighlightedIndex: (index: number) => void\n value: string | null\n}\n\nfunction ComboboxList({\n filtered,\n glass,\n highlightedIndex,\n onSearchChange,\n onSelect,\n query,\n searchPlaceholder,\n searchRef,\n setHighlightedIndex,\n value,\n}: ComboboxListProps) {\n const handleSearchKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'ArrowDown') {\n e.preventDefault()\n setHighlightedIndex(\n highlightedIndex >= filtered.length - 1 ? 0 : highlightedIndex + 1,\n )\n }\n if (e.key === 'ArrowUp') {\n e.preventDefault()\n setHighlightedIndex(\n highlightedIndex <= 0 ? filtered.length - 1 : highlightedIndex - 1,\n )\n }\n if (e.key === 'Enter') {\n e.preventDefault()\n const target = filtered[highlightedIndex]\n if (target !== undefined) {\n onSelect(target.value)\n }\n }\n },\n [filtered, highlightedIndex, onSelect, setHighlightedIndex],\n )\n\n return (\n <div\n className={cx(\n 'absolute left-0 right-0 z-50 mt-1 animate-popup gds-radius-popover border gds-shadow-lg',\n glass\n ? cx(glassClass(glass), 'border-white/10 bg-bg/60')\n : 'border-border bg-surface',\n )}\n >\n <div className=\"border-b border-border p-1.5\">\n <input\n className=\"w-full bg-transparent px-2 py-1 text-sm text-fg outline-none placeholder:text-fg-muted/50\"\n onChange={(e) => onSearchChange(e.target.value)}\n onKeyDown={handleSearchKeyDown}\n placeholder={searchPlaceholder}\n ref={searchRef}\n type=\"text\"\n value={query}\n />\n </div>\n <div className=\"max-h-60 overflow-y-auto py-1\">\n {filtered.length === 0 && (\n <div className=\"gds-pad-x gds-pad-y-sm text-sm text-fg-muted\">\n No results\n </div>\n )}\n {filtered.map((opt, index) => {\n const isActive = opt.value === value\n const isHighlighted = index === highlightedIndex\n return (\n <button\n className={cx(\n 'flex w-full items-center gds-pad-x gds-pad-y-sm text-left text-sm transition-colors',\n isActive && 'bg-accent/10 text-accent',\n !isActive && 'text-fg',\n isHighlighted && !isActive && 'bg-bg-tertiary',\n !isHighlighted && !isActive && 'hover:bg-bg-tertiary',\n )}\n key={opt.value}\n onClick={() => onSelect(opt.value)}\n onMouseEnter={() => setHighlightedIndex(index)}\n type=\"button\"\n >\n {opt.label}\n </button>\n )\n })}\n </div>\n </div>\n )\n}\n\nexport { ComboboxList }\nexport type { ComboboxListProps, ComboboxOption }\n","// combobox — searchable select dropdown\nimport { forwardRef, useCallback, useMemo, useRef, useState } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\nimport { useClickOutside, useEscapeKey } from '../utils/hooks'\nimport type { ComboboxOption } from './combobox-list'\nimport { ComboboxList } from './combobox-list'\n\ntype ComboboxProps = {\n className?: string\n disabled?: boolean\n error?: boolean\n glass?: boolean\n onChange: (value: string | null) => void\n options: ComboboxOption[]\n placeholder?: string\n searchPlaceholder?: string\n value: string | null\n}\n\n// chevron icon\nfunction ChevronIcon({ open }: { open: boolean }) {\n return (\n <svg\n className={cx('h-3 w-3 text-fg-muted transition-transform', open && 'rotate-180')}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n viewBox=\"0 0 12 12\"\n >\n <path d=\"M3 4.5l3 3 3-3\" />\n </svg>\n )\n}\n\nexport const Combobox = forwardRef<HTMLDivElement, ComboboxProps>(\n function Combobox(\n {\n className,\n disabled = false,\n error = false,\n glass,\n onChange,\n options,\n placeholder = 'Select...',\n searchPlaceholder = 'Search...',\n value,\n },\n ref,\n ) {\n const [open, setOpen] = useState(false)\n const [query, setQuery] = useState('')\n const [highlightedIndex, setHighlightedIndex] = useState(0)\n const containerRef = useRef<HTMLDivElement>(null)\n const searchRef = useRef<HTMLInputElement>(null)\n\n // merge forwarded ref with internal ref\n const mergedRef = (ref ?? containerRef) as React.RefObject<HTMLDivElement>\n\n const filtered = useMemo(() => {\n if (query === '') return options\n const lower = query.toLowerCase()\n return options.filter((opt) => opt.label.toLowerCase().includes(lower))\n }, [options, query])\n\n const selectedOption = useMemo(\n () => options.find((opt) => opt.value === value),\n [options, value],\n )\n\n const handleOpen = useCallback(() => {\n if (disabled) return\n setOpen(true)\n setQuery('')\n setHighlightedIndex(0)\n // auto-focus search input after render\n requestAnimationFrame(() => {\n searchRef.current?.focus()\n })\n }, [disabled])\n\n const handleClose = useCallback(() => {\n setOpen(false)\n setQuery('')\n }, [])\n\n const handleSelect = useCallback(\n (optionValue: string) => {\n onChange(optionValue)\n handleClose()\n },\n [onChange, handleClose],\n )\n\n const handleSearchChange = useCallback((val: string) => {\n setQuery(val)\n setHighlightedIndex(0)\n }, [])\n\n useClickOutside(mergedRef, open, handleClose)\n useEscapeKey(open, handleClose)\n\n return (\n <div\n ref={mergedRef}\n className={cx('relative', className)}\n data-component=\"combobox\"\n data-state={open ? 'open' : 'closed'}\n >\n <button\n className={cx(\n 'flex w-full items-center justify-between gds-h gds-radius-popover gds-pad-x border bg-transparent text-left text-sm text-fg transition-colors',\n focusCls,\n !error && 'border-border hover:border-fg-muted',\n error && 'border-danger',\n error && 'focus-visible:ring-danger',\n disabled && 'cursor-not-allowed opacity-50',\n glassClass(glass),\n glass === true && 'border-white/10 bg-bg/60',\n )}\n disabled={disabled}\n onClick={handleOpen}\n type=\"button\"\n >\n <span className={cx(selectedOption !== undefined ? 'text-fg' : 'text-fg-muted')}>\n {selectedOption !== undefined ? selectedOption.label : placeholder}\n </span>\n <ChevronIcon open={open} />\n </button>\n\n {open && (\n <ComboboxList\n filtered={filtered}\n glass={glass}\n highlightedIndex={highlightedIndex}\n onSearchChange={handleSearchChange}\n onSelect={handleSelect}\n query={query}\n searchPlaceholder={searchPlaceholder}\n searchRef={searchRef}\n setHighlightedIndex={setHighlightedIndex}\n value={value}\n />\n )}\n </div>\n )\n },\n)\n\nexport type { ComboboxOption, ComboboxProps }\n","// command-menu — inline command menu with search and keyboard navigation\nimport type { ReactNode } from 'react'\nimport { useCallback, useMemo, useState } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\nimport { isActivationKey } from '../utils/dom'\nimport { glassClass } from '../utils/glass'\n\nexport type CommandMenuItem = {\n id: string\n label: string\n icon?: ReactNode\n shortcut?: string\n group?: string\n danger?: boolean\n}\n\nexport type CommandMenuProps = {\n items: CommandMenuItem[]\n onSelect: (id: string) => void\n searchable?: boolean\n placeholder?: string\n glass?: boolean\n className?: string\n}\n\nexport function CommandMenu({\n items, onSelect, searchable = true,\n placeholder = 'Type a command...', glass, className,\n}: CommandMenuProps) {\n const [query, setQuery] = useState('')\n const [activeIndex, setActiveIndex] = useState(0)\n\n const filtered = useMemo(() => {\n if (query === '') return items\n const q = query.toLowerCase()\n return items.filter((it) => it.label.toLowerCase().includes(q))\n }, [items, query])\n\n const groups = useMemo(() => {\n const map = new Map<string, CommandMenuItem[]>()\n for (const it of filtered) {\n const g = it.group ?? ''\n const arr = map.get(g)\n if (arr !== undefined) { arr.push(it) } else { map.set(g, [it]) }\n }\n return map\n }, [filtered])\n\n const handleKeyDown = useCallback((e: React.KeyboardEvent) => {\n if (e.key === 'ArrowDown') {\n e.preventDefault()\n setActiveIndex((p) => (p + 1) % filtered.length)\n } else if (e.key === 'ArrowUp') {\n e.preventDefault()\n setActiveIndex((p) => (p - 1 + filtered.length) % filtered.length)\n } else if (isActivationKey(e)) {\n e.preventDefault()\n const it = filtered[activeIndex]\n if (it !== undefined) { onSelect(it.id) }\n }\n }, [filtered, activeIndex, onSelect])\n\n let flatIdx = -1\n const glassCx = glass !== undefined && glass !== false ? cx('border-white/10 bg-bg/60', glassClass(glass)) : ''\n\n return (\n <div className={cx('gds-radius-card border border-border overflow-hidden', glassCx, className)}\n data-component=\"command-menu\" onKeyDown={handleKeyDown}>\n {searchable && (\n <div className=\"border-b border-border\">\n <input type=\"text\" data-testid=\"command-menu-search\" placeholder={placeholder}\n className={cx('w-full bg-transparent gds-pad-x gds-pad-y text-sm text-fg placeholder:text-fg-muted/40 outline-none', focusCls)}\n value={query} onChange={(e) => { setQuery(e.target.value); setActiveIndex(0) }} />\n </div>\n )}\n <div className=\"max-h-64 overflow-y-auto gds-pad-y-sm\">\n {filtered.length === 0 && (\n <div className=\"py-6 text-center text-sm text-fg-muted/40\">No results</div>\n )}\n {Array.from(groups.entries()).map(([group, gItems]) => (\n <div key={group}>\n {group !== '' && (\n <div className=\"px-3 pb-1 pt-3 text-[10px] font-semibold uppercase tracking-[0.1em] text-fg-muted/30\">{group}</div>\n )}\n {gItems.map((it) => {\n flatIdx++\n const active = flatIdx === activeIndex\n return (\n <button key={it.id} type=\"button\" onClick={() => onSelect(it.id)}\n data-active={active} data-testid={`command-menu-item-${it.id}`}\n className={cx(\n 'flex w-full items-center gap-3 px-3 py-2 text-left gds-text-body transition-colors select-none',\n active ? 'bg-accent/10 text-accent' : '',\n it.danger === true ? 'text-danger' : active ? '' : 'text-fg hover:bg-white/[0.04]',\n )}>\n {it.icon !== undefined && (\n <span className=\"flex h-5 w-5 shrink-0 items-center justify-center text-fg-muted/50\">{it.icon}</span>\n )}\n <span className=\"flex-1 truncate\">{it.label}</span>\n {it.shortcut !== undefined && (\n <kbd className=\"shrink-0 rounded border border-white/[0.06] bg-white/[0.03] px-1.5 py-px text-[10px] text-fg-muted/30\">{it.shortcut}</kbd>\n )}\n </button>\n )\n })}\n </div>\n ))}\n </div>\n </div>\n )\n}\n","// dialog — modal overlay with focus trap, scroll lock, escape key\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\nimport { createPortal } from 'react-dom'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\nimport { useEscapeKey, useFocusTrap, useScrollLock } from '../utils/hooks'\n\ntype DialogWidth = 'default' | 'lg' | 'sm' | 'xl'\n\nconst widthMap: Record<DialogWidth, string> = {\n sm: 'max-w-sm',\n default: 'max-w-lg',\n lg: 'max-w-2xl',\n xl: 'max-w-4xl',\n}\n\nexport type DialogProps = {\n open: boolean\n onClose: () => void\n title?: string\n description?: string\n children: ReactNode\n glass?: boolean\n width?: DialogWidth\n className?: string\n}\n\nexport const Dialog = forwardRef<HTMLDivElement, DialogProps>(\n function Dialog({ open, onClose, title, description, children, glass, width = 'default', className }, ref) {\n const trapRef = useFocusTrap(open)\n useScrollLock(open)\n useEscapeKey(open, onClose)\n\n if (!open) return null\n\n return createPortal(\n <div\n className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50\"\n onClick={(e) => { if (e.target === e.currentTarget) onClose() }}\n data-component=\"dialog\"\n data-state=\"open\"\n >\n <div\n ref={(node) => {\n // merge refs\n (trapRef as React.MutableRefObject<HTMLDivElement | null>).current = node\n if (typeof ref === 'function') ref(node)\n else if (ref !== null && ref !== undefined) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node\n }}\n className={cx(\n 'gds-ctx w-full animate-popup gds-radius-card border gds-shadow-xl',\n glass ? cx(glassClass(glass), 'border-white/10 bg-bg/60') : 'border-border bg-surface',\n widthMap[width],\n className,\n )}\n >\n {(title !== undefined || description !== undefined) && (\n <div className=\"flex items-start justify-between gds-gap border-b border-border gds-pad-x-lg gds-pad-y-lg\">\n <div className=\"min-w-0\">\n {title !== undefined && <h2 className=\"text-sm font-semibold text-fg\">{title}</h2>}\n {description !== undefined && <p className=\"mt-0.5 gds-text-body text-fg-muted\">{description}</p>}\n </div>\n <button\n type=\"button\"\n onClick={onClose}\n className={cx('shrink-0 gds-radius-button p-1 text-fg-muted hover:text-fg', focusCls)}\n aria-label=\"Close\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\">\n <path d=\"M3 3l8 8M11 3l-8 8\" />\n </svg>\n </button>\n </div>\n )}\n <div className=\"gds-pad-x-lg gds-pad-y-lg\">{children}</div>\n </div>\n </div>,\n document.body,\n )\n },\n)\n","// confirm-dialog — pre-composed confirmation dialog with cancel/confirm buttons\nimport { forwardRef } from 'react'\n\nimport { Button } from '../l2-primitives/button'\nimport { Dialog } from './dialog'\n\ntype ConfirmDialogProps = {\n cancelLabel?: string\n className?: string\n confirmLabel?: string\n loading?: boolean\n message?: string\n onClose: () => void\n onConfirm: () => void\n open: boolean\n title?: string\n variant?: 'danger' | 'default'\n}\n\nexport const ConfirmDialog = forwardRef<HTMLDivElement, ConfirmDialogProps>(\n function ConfirmDialog(\n {\n cancelLabel = 'Cancel',\n className,\n confirmLabel = 'Confirm',\n loading = false,\n message,\n onClose,\n onConfirm,\n open,\n title = 'Confirm',\n variant = 'default',\n },\n ref,\n ) {\n return (\n <Dialog className={className} onClose={onClose} open={open} ref={ref} title={title} width=\"sm\">\n <div className=\"flex flex-col gds-gap\" data-component=\"confirm-dialog\" data-variant={variant}>\n {message !== undefined && <p className=\"gds-text-body text-fg-muted\">{message}</p>}\n <div className=\"flex items-center justify-end gds-gap-sm\">\n <Button disabled={loading} onClick={onClose} size=\"sm\" variant=\"ghost\">\n {cancelLabel}\n </Button>\n <Button\n disabled={loading}\n onClick={onConfirm}\n size=\"sm\"\n variant={variant === 'danger' ? 'danger' : 'primary'}\n >\n {loading ? 'Loading...' : confirmLabel}\n </Button>\n </div>\n </div>\n </Dialog>\n )\n },\n)\n\nexport type { ConfirmDialogProps }\n","// context-menu — right-click triggered floating menu\nimport type { ReactNode } from 'react'\nimport { useCallback, useRef, useState } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\nimport { useClickOutside, useEscapeKey } from '../utils/hooks'\n\nexport type ContextMenuItem = {\n id: string\n label: string\n icon?: ReactNode\n shortcut?: string\n danger?: boolean\n disabled?: boolean\n separator?: boolean\n}\n\nexport type ContextMenuProps = {\n trigger: ReactNode\n items: ContextMenuItem[]\n onSelect: (id: string) => void\n className?: string\n}\n\nexport function ContextMenu({ trigger, items, onSelect, className }: ContextMenuProps) {\n const [open, setOpen] = useState(false)\n const [pos, setPos] = useState({ x: 0, y: 0 })\n const menuRef = useRef<HTMLDivElement>(null)\n\n const close = useCallback(() => setOpen(false), [])\n useClickOutside(menuRef, open, close)\n useEscapeKey(open, close)\n\n const handleContextMenu = useCallback((e: React.MouseEvent) => {\n e.preventDefault()\n setPos({ x: e.clientX, y: e.clientY })\n setOpen(true)\n }, [])\n\n const handleSelect = useCallback((id: string) => {\n setOpen(false)\n onSelect(id)\n }, [onSelect])\n\n return (\n <div\n className={className}\n data-component=\"context-menu\"\n data-state={open ? 'open' : 'closed'}\n onContextMenu={handleContextMenu}\n >\n {trigger}\n {open && (\n <div\n ref={menuRef}\n className=\"fixed z-50 min-w-[160px] animate-popup gds-radius-popover border border-border bg-surface py-1 gds-shadow-lg\"\n style={{ left: pos.x, top: pos.y }}\n >\n {items.map((item) => {\n if (item.separator) {\n return <div key={item.id} className=\"my-1 h-px bg-border\" />\n }\n return (\n <button\n key={item.id}\n type=\"button\"\n disabled={item.disabled}\n className={cx(\n 'flex w-full items-center gds-gap-sm gds-pad-x gds-pad-y-sm text-left gds-text-body',\n focusCls,\n item.danger ? 'text-danger hover:bg-danger/10' : 'text-fg hover:bg-bg-secondary',\n item.disabled === true && 'pointer-events-none opacity-40',\n )}\n onClick={() => handleSelect(item.id)}\n >\n {item.icon !== undefined && <span className=\"flex h-4 w-4 shrink-0 items-center justify-center\">{item.icon}</span>}\n <span className=\"flex-1\">{item.label}</span>\n {item.shortcut !== undefined && <span className=\"ml-4 gds-text-caption text-fg-muted\">{item.shortcut}</span>}\n </button>\n )\n })}\n </div>\n )}\n </div>\n )\n}\n","// copy-field — read-only text field with copy button\nimport { forwardRef, useCallback, useEffect, useRef, useState } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype CopyFieldProps = {\n value: string\n label?: string\n masked?: boolean\n className?: string\n}\n\nconst CopyField = forwardRef<HTMLDivElement, CopyFieldProps>(\n function CopyField({ value, label, masked = false, className }, ref) {\n const [copied, setCopied] = useState(false)\n const [revealed, setRevealed] = useState(false)\n const timerRef = useRef<ReturnType<typeof setTimeout>>(null)\n\n useEffect(() => {\n return () => { if (timerRef.current !== null) clearTimeout(timerRef.current) }\n }, [])\n\n const handleCopy = useCallback(() => {\n navigator.clipboard.writeText(value).catch(() => {})\n setCopied(true)\n if (timerRef.current !== null) clearTimeout(timerRef.current)\n timerRef.current = setTimeout(() => setCopied(false), 1500)\n }, [value])\n\n const display = masked && !revealed ? '\\u2022'.repeat(Math.min(value.length, 20)) : value\n\n return (\n <div ref={ref} className={cx('flex flex-col gap-1', className)} data-component=\"copy-field\">\n {label !== undefined && <label className=\"text-xs text-fg-muted select-none\">{label}</label>}\n <div className=\"flex items-center gap-2 rounded-md border border-border bg-surface px-3 py-1.5\">\n <span\n className=\"flex-1 truncate font-mono text-sm text-fg select-all\"\n onMouseEnter={masked ? () => setRevealed(true) : undefined}\n onMouseLeave={masked ? () => setRevealed(false) : undefined}\n >\n {display}\n </span>\n <button type=\"button\" onClick={handleCopy} className=\"shrink-0 text-fg-muted hover:text-fg transition-colors\" aria-label=\"Copy\">\n {copied ? (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\"><path d=\"M2 7l3 3 7-7\" /></svg>\n ) : (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <rect x=\"4\" y=\"4\" width=\"8\" height=\"8\" rx=\"1.5\" /><path d=\"M10 4V2.5A1.5 1.5 0 008.5 1h-6A1.5 1.5 0 001 2.5v6A1.5 1.5 0 002.5 10H4\" />\n </svg>\n )}\n </button>\n </div>\n </div>\n )\n },\n)\n\nexport { CopyField }\nexport type { CopyFieldProps }\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype CurrencyDisplayProps = React.HTMLAttributes<HTMLDivElement> & {\n amount: number\n change?: number\n currency?: string\n period?: string\n}\n\nexport const CurrencyDisplay = forwardRef<HTMLDivElement, CurrencyDisplayProps>(\n function CurrencyDisplay({ amount, change, className, currency = '\\u00a5', period, ...props }, ref) {\n const formatted = amount.toLocaleString()\n\n return (\n <div\n className={cx('flex items-baseline gds-gap', className)}\n data-component=\"currency-display\"\n ref={ref}\n {...props}\n >\n <span className=\"text-2xl font-bold text-fg\">{currency}{formatted}</span>\n {change !== undefined && (\n <span className={cx('text-sm font-medium', change >= 0 ? 'text-success' : 'text-danger')}>\n {change >= 0 ? '\\u2191' : '\\u2193'}{Math.abs(change)}%\n </span>\n )}\n {period !== undefined && (\n <span className=\"text-xs text-fg-muted\">{period}</span>\n )}\n </div>\n )\n },\n)\n\nexport type { CurrencyDisplayProps }\n","// currency-input — formatted number input with currency symbol\nimport { forwardRef, useCallback, useState } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\n\nexport type CurrencyInputProps = {\n value: number | null\n onChange: (value: number | null) => void\n currency?: string\n locale?: string\n min?: number\n max?: number\n disabled?: boolean\n error?: boolean\n placeholder?: string\n className?: string\n}\n\nfunction formatNumber(num: number, locale: string): string {\n return new Intl.NumberFormat(locale).format(num)\n}\n\nfunction clampValue(val: number, min?: number, max?: number): number {\n let result = val\n if (min !== undefined && result < min) result = min\n if (max !== undefined && result > max) result = max\n return result\n}\n\nexport const CurrencyInput = forwardRef<HTMLDivElement, CurrencyInputProps>(\n function CurrencyInput(\n {\n value,\n onChange,\n currency = '\\u00a5',\n locale = 'ja-JP',\n min,\n max,\n disabled = false,\n error = false,\n placeholder = '0',\n className,\n },\n ref,\n ) {\n const [editing, setEditing] = useState(false)\n const [inputValue, setInputValue] = useState('')\n\n const displayValue = value !== null ? formatNumber(value, locale) : ''\n\n const handleFocus = useCallback(() => {\n setEditing(true)\n setInputValue(value !== null ? String(value) : '')\n }, [value])\n\n const handleBlur = useCallback(() => {\n setEditing(false)\n const stripped = inputValue.replace(/[^\\d.-]/g, '')\n if (stripped === '' || stripped === '-') {\n onChange(null)\n return\n }\n const parsed = Number(stripped)\n if (Number.isNaN(parsed)) {\n onChange(null)\n return\n }\n onChange(clampValue(parsed, min, max))\n }, [inputValue, max, min, onChange])\n\n const handleChange = useCallback((raw: string) => {\n // allow digits, minus, and dot during editing\n const cleaned = raw.replace(/[^\\d.-]/g, '')\n setInputValue(cleaned)\n }, [])\n\n return (\n <div\n ref={ref}\n className={cx(\n 'inline-flex items-center gds-h gds-radius-input border',\n error ? 'border-danger' : 'border-border',\n disabled && 'cursor-not-allowed opacity-40',\n className,\n )}\n data-component=\"currency-input\"\n data-disabled={disabled ? '' : undefined}\n data-error={error ? '' : undefined}\n >\n <span className=\"select-none pl-3 text-fg-muted gds-text-body\">{currency}</span>\n <input\n type=\"text\"\n inputMode=\"numeric\"\n value={editing ? inputValue : displayValue}\n onChange={(e) => handleChange(e.target.value)}\n onFocus={handleFocus}\n onBlur={handleBlur}\n disabled={disabled}\n placeholder={placeholder}\n className={cx(\n 'flex-1 bg-transparent px-2 text-right text-fg gds-text-body focus:outline-none',\n focusCls,\n )}\n aria-label=\"Currency amount\"\n />\n </div>\n )\n },\n)\n","// date-display — formatted date with relative time support\nimport { forwardRef, useMemo } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype DateDisplayProps = {\n date: string | Date\n format?: 'relative' | 'absolute' | 'auto'\n className?: string\n}\n\nfunction formatRelative(ms: number): string {\n const sec = Math.floor(ms / 1000)\n if (sec < 60) return 'just now'\n const min = Math.floor(sec / 60)\n if (min < 60) return `${min}m ago`\n const hrs = Math.floor(min / 60)\n if (hrs < 24) return `${hrs}h ago`\n if (hrs < 48) return 'yesterday'\n return `${Math.floor(hrs / 24)} days ago`\n}\n\nfunction formatAbsolute(d: Date): string {\n const y = d.getFullYear()\n const m = String(d.getMonth() + 1).padStart(2, '0')\n const day = String(d.getDate()).padStart(2, '0')\n return `${y}-${m}-${day}`\n}\n\nconst SEVEN_DAYS = 7 * 24 * 60 * 60 * 1000\n\nconst DateDisplay = forwardRef<HTMLSpanElement, DateDisplayProps>(\n function DateDisplay({ date, format = 'auto', className }, ref) {\n const text = useMemo(() => {\n const d = date instanceof Date ? date : new Date(date)\n const elapsed = Date.now() - d.getTime()\n\n if (format === 'relative') return formatRelative(elapsed)\n if (format === 'absolute') return formatAbsolute(d)\n\n // auto: relative if < 7 days\n return elapsed < SEVEN_DAYS ? formatRelative(elapsed) : formatAbsolute(d)\n }, [date, format])\n\n const d = date instanceof Date ? date : new Date(date)\n\n return (\n <span ref={ref} className={cx('text-fg-muted gds-text', className)} data-component=\"date-display\" title={d.toISOString()}>\n {text}\n </span>\n )\n },\n)\n\nexport { DateDisplay }\nexport type { DateDisplayProps }\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype DateRangeInputProps = {\n className?: string\n disabled?: boolean\n endDate: string | null\n error?: boolean\n onChange: (start: string | null, end: string | null) => void\n placeholder?: { end?: string; start?: string }\n startDate: string | null\n}\n\nexport const DateRangeInput = forwardRef<HTMLDivElement, DateRangeInputProps>(\n function DateRangeInput(\n { className, disabled = false, endDate, error = false, onChange, placeholder, startDate },\n ref,\n ) {\n const borderCls = error ? 'border-danger' : 'border-border hover:border-border-strong'\n\n return (\n <div\n className={cx(\n 'flex items-center gds-radius-input border bg-bg transition-colors',\n borderCls,\n disabled && 'cursor-not-allowed opacity-50',\n className,\n )}\n data-component=\"date-range-input\"\n data-error={error ? '' : undefined}\n ref={ref}\n >\n <input\n aria-label={placeholder?.start ?? 'Start date'}\n className=\"gds-h flex-1 bg-transparent gds-text-body text-fg outline-none gds-pad-x disabled:cursor-not-allowed\"\n disabled={disabled}\n onChange={(e) => {\n const val = e.target.value === '' ? null : e.target.value\n onChange(val, endDate)\n }}\n placeholder={placeholder?.start}\n type=\"date\"\n value={startDate ?? ''}\n />\n <span className=\"shrink-0 text-fg-muted/40 select-none gds-text-label\">→</span>\n <input\n aria-label={placeholder?.end ?? 'End date'}\n className=\"gds-h flex-1 border-l border-inherit bg-transparent gds-text-body text-fg outline-none gds-pad-x disabled:cursor-not-allowed\"\n disabled={disabled}\n min={startDate ?? undefined}\n onChange={(e) => {\n const val = e.target.value === '' ? null : e.target.value\n onChange(startDate, val)\n }}\n placeholder={placeholder?.end}\n type=\"date\"\n value={endDate ?? ''}\n />\n </div>\n )\n },\n)\n\nexport type { DateRangeInputProps }\n","import type { ReactNode } from 'react'\nimport { forwardRef, useState } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\ntype DockItem = {\n icon: ReactNode\n id: string\n label: string\n}\n\ntype DockProps = React.HTMLAttributes<HTMLDivElement> & {\n glass?: boolean\n items: DockItem[]\n onSelect: (id: string) => void\n}\n\nexport const Dock = forwardRef<HTMLDivElement, DockProps>(\n function Dock(\n { className, glass = true, items, onSelect, ...props },\n ref,\n ) {\n const [hoveredIndex, setHoveredIndex] = useState<number | null>(null)\n\n return (\n <div\n className={cx(\n 'inline-flex items-end gap-1 gds-radius-card p-2',\n 'border border-white/[0.06] bg-bg-secondary/80',\n glassClass(glass === true ? true : undefined),\n glass === true && 'border-white/10',\n className,\n )}\n data-component=\"dock\"\n ref={ref}\n {...props}\n >\n {items.map((item, index) => {\n const isHovered = hoveredIndex === index\n const isNeighbor =\n hoveredIndex !== null &&\n Math.abs(index - hoveredIndex) === 1\n\n let scale = 1\n if (isHovered) {\n scale = 1.3\n } else if (isNeighbor) {\n scale = 1.1\n }\n\n return (\n <div\n key={item.id}\n className=\"group relative flex flex-col items-center\"\n onMouseEnter={() => setHoveredIndex(index)}\n onMouseLeave={() => setHoveredIndex(null)}\n >\n {/* tooltip */}\n <span\n className={cx(\n 'pointer-events-none absolute -top-8 whitespace-nowrap rounded-md bg-bg-secondary px-2 py-1 text-[10px] text-fg-muted shadow-lg',\n 'transition-opacity duration-150',\n isHovered ? 'opacity-100' : 'opacity-0',\n )}\n data-testid={`dock-tooltip-${item.id}`}\n >\n {item.label}\n </span>\n\n {/* icon button */}\n <button\n className={cx(\n 'flex items-center justify-center rounded-lg p-2',\n 'transition-transform duration-200',\n 'hover:bg-white/[0.06]',\n )}\n data-testid={`dock-item-${item.id}`}\n onClick={() => onSelect(item.id)}\n style={{\n transform: `scale(${scale})`,\n transitionTimingFunction: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)',\n }}\n type=\"button\"\n >\n <span className=\"gds-icon-child\">{item.icon}</span>\n </button>\n </div>\n )\n })}\n </div>\n )\n },\n)\n\nexport type { DockItem, DockProps }\n","// drawer — mobile-first bottom drawer with slide-up transition\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\nimport { useEscapeKey, useScrollLock } from '../utils/hooks'\n\ntype DrawerHeight = 'sm' | 'default' | 'lg' | 'full'\n\nconst heightMap: Record<DrawerHeight, string> = {\n sm: 'h-[30vh]',\n default: 'h-[50vh]',\n lg: 'h-[75vh]',\n full: 'h-screen',\n}\n\nexport type DrawerProps = {\n open: boolean\n onClose: () => void\n title?: string\n children: ReactNode\n height?: DrawerHeight\n glass?: boolean\n className?: string\n}\n\nexport const Drawer = forwardRef<HTMLDivElement, DrawerProps>(\n function Drawer({ open, onClose, title, children, height = 'default', glass, className }, ref) {\n useScrollLock(open)\n useEscapeKey(open, onClose)\n\n if (!open) return null\n\n return (\n <div\n className=\"fixed inset-0 z-50 bg-black/50\"\n onClick={(e) => { if (e.target === e.currentTarget) onClose() }}\n data-component=\"drawer\"\n data-state=\"open\"\n >\n <div\n ref={ref}\n className={cx(\n 'gds-ctx fixed inset-x-0 bottom-0 flex flex-col rounded-t-xl border-t transition-transform duration-200',\n heightMap[height],\n glass ? cx(glassClass(glass), 'border-white/10 bg-bg/60') : 'border-border bg-surface',\n className,\n )}\n >\n {/* drag handle */}\n <div className=\"flex justify-center py-2\">\n <div className=\"h-1 w-8 rounded-full bg-fg-muted/30\" data-testid=\"drag-handle\" />\n </div>\n\n {/* header */}\n {title !== undefined && (\n <div className=\"flex items-center justify-between gds-pad-x-lg pb-2\">\n <h2 className=\"text-sm font-semibold text-fg\">{title}</h2>\n <button\n type=\"button\"\n onClick={onClose}\n className={cx('shrink-0 gds-radius-button p-1 text-fg-muted hover:text-fg', focusCls)}\n aria-label=\"Close\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\">\n <path d=\"M3 3l8 8M11 3l-8 8\" />\n </svg>\n </button>\n </div>\n )}\n\n {/* content */}\n <div className=\"flex-1 overflow-y-auto gds-pad-x-lg gds-pad-y-lg\">{children}</div>\n </div>\n </div>\n )\n },\n)\n","// dropdown — trigger + floating menu with items\nimport type { ReactNode } from 'react'\nimport { useRef, useState } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\nimport { useClickOutside, useEscapeKey } from '../utils/hooks'\n\nexport type DropdownItem = {\n id: string\n label: string\n icon?: ReactNode\n shortcut?: string\n danger?: boolean\n disabled?: boolean\n separator?: boolean\n}\n\ntype DropdownAlign = 'end' | 'start'\n\nexport type DropdownProps = {\n items: DropdownItem[]\n onSelect: (id: string) => void\n trigger: ReactNode\n align?: DropdownAlign\n glass?: boolean\n className?: string\n}\n\nexport function Dropdown({ items, onSelect, trigger, align = 'start', glass, className }: DropdownProps) {\n const [open, setOpen] = useState(false)\n const ref = useRef<HTMLDivElement>(null)\n useClickOutside(ref, open, () => setOpen(false))\n useEscapeKey(open, () => setOpen(false))\n\n return (\n <div ref={ref} className={cx('relative inline-block', className)} data-component=\"dropdown\" data-state={open ? 'open' : 'closed'}>\n <button type=\"button\" onClick={() => setOpen((prev) => !prev)} className={focusCls}>\n {trigger}\n </button>\n\n {open && (\n <div\n className={cx(\n 'absolute z-50 mt-1 min-w-[160px] animate-popup gds-radius-popover border py-1 gds-shadow-lg',\n align === 'end' ? 'right-0' : 'left-0',\n glass ? cx(glassClass(glass), 'border-white/10 bg-bg/60') : 'border-border bg-surface',\n )}\n >\n {items.map((item) => {\n if (item.separator) {\n return <div key={item.id} className=\"my-1 h-px bg-border\" />\n }\n return (\n <button\n key={item.id}\n type=\"button\"\n disabled={item.disabled}\n onClick={() => {\n onSelect(item.id)\n setOpen(false)\n }}\n className={cx(\n 'flex w-full items-center gds-gap-sm gds-pad-x gds-pad-y-sm gds-text-body transition-colors',\n focusCls,\n item.danger\n ? 'text-danger hover:bg-danger/10'\n : 'text-fg hover:bg-bg-tertiary',\n item.disabled === true && 'pointer-events-none opacity-40',\n )}\n >\n {item.icon !== undefined && <span className=\"shrink-0\">{item.icon}</span>}\n <span className=\"flex-1 text-left\">{item.label}</span>\n {item.shortcut !== undefined && (\n <span className=\"ml-4 gds-text-caption text-fg-muted\">{item.shortcut}</span>\n )}\n </button>\n )\n })}\n </div>\n )}\n </div>\n )\n}\n","// emoji-picker — grid of emoji buttons with category tabs and search\nimport { forwardRef, useMemo, useState } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype EmojiCategory = {\n name: string\n emojis: string[]\n}\n\nconst defaultCategories: EmojiCategory[] = [\n {\n name: 'Smileys',\n emojis: ['😀', '😂', '🥹', '😍', '🤔', '😎', '🥳', '😴', '🤯', '😱', '🙄', '😤'],\n },\n {\n name: 'Gestures',\n emojis: ['👍', '👎', '👏', '🤝', '✌️', '🤞', '🫶', '💪', '🙏', '👋', '🫡', '🤙'],\n },\n {\n name: 'Animals',\n emojis: ['🐶', '🐱', '🐻', '🦊', '🐸', '🐵', '🦁', '🐧', '🦋', '🐝', '🐢', '🐬'],\n },\n {\n name: 'Objects',\n emojis: ['🔥', '⭐', '💡', '🎯', '🚀', '💎', '🎉', '📌', '🔔', '💬', '❤️', '✅'],\n },\n]\n\nexport type EmojiPickerProps = React.HTMLAttributes<HTMLDivElement> & {\n onSelect: (emoji: string) => void\n categories?: EmojiCategory[]\n columns?: number\n glass?: boolean\n}\n\nexport const EmojiPicker = forwardRef<HTMLDivElement, EmojiPickerProps>(\n function EmojiPicker(\n { onSelect, categories = defaultCategories, columns = 8, glass = false, className, ...props },\n ref,\n ) {\n const [activeTab, setActiveTab] = useState(0)\n const [search, setSearch] = useState('')\n\n const filteredEmojis = useMemo(() => {\n if (search === '') return categories[activeTab]?.emojis ?? []\n // flatten and filter (search matches category name loosely)\n return categories.flatMap((cat) => cat.emojis)\n }, [search, activeTab, categories])\n\n return (\n <div\n ref={ref}\n className={cx(\n 'w-fit rounded-lg border border-border p-2 shadow-lg',\n glass ? 'bg-bg/80 backdrop-blur-xl' : 'bg-bg-secondary',\n className,\n )}\n data-component=\"emoji-picker\"\n {...props}\n >\n {/* search */}\n <input\n type=\"text\"\n placeholder=\"Search...\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"mb-2 w-full rounded-md border border-border bg-transparent px-2 py-1 text-xs text-fg placeholder:text-fg-muted outline-none\"\n />\n\n {/* category tabs */}\n {search === '' && (\n <div className=\"mb-2 flex gap-1 overflow-x-auto\">\n {categories.map((cat, i) => (\n <button\n key={cat.name}\n className={cx(\n 'shrink-0 rounded-md px-2 py-0.5 text-[10px] font-medium transition-colors',\n i === activeTab\n ? 'bg-accent/15 text-accent'\n : 'text-fg-muted hover:text-fg',\n )}\n onClick={() => setActiveTab(i)}\n >\n {cat.name}\n </button>\n ))}\n </div>\n )}\n\n {/* emoji grid */}\n <div\n className=\"grid gap-0.5\"\n style={{ gridTemplateColumns: `repeat(${columns}, 1fr)` }}\n >\n {filteredEmojis.map((emoji, i) => (\n <button\n key={`${emoji}-${i}`}\n className=\"flex h-8 w-8 items-center justify-center rounded-md text-base hover:bg-white/10 transition-colors\"\n onClick={() => onSelect(emoji)}\n >\n {emoji}\n </button>\n ))}\n </div>\n </div>\n )\n },\n)\n","// empty-placeholder — inline empty state for cards/tables (lighter than EmptyState L7)\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type EmptyPlaceholderProps = {\n message: string\n icon?: ReactNode\n action?: ReactNode\n className?: string\n}\n\nexport const EmptyPlaceholder = forwardRef<HTMLDivElement, EmptyPlaceholderProps>(\n function EmptyPlaceholder({ message, icon, action, className }, ref) {\n return (\n <div\n ref={ref}\n className={cx('flex flex-col items-center justify-center gap-2 py-6 select-none', className)}\n data-component=\"empty-placeholder\"\n >\n {icon !== undefined && <div className=\"text-fg-muted/30\">{icon}</div>}\n <p className=\"gds-text-body text-fg-muted\">{message}</p>\n {action !== undefined && <div className=\"mt-1\">{action}</div>}\n </div>\n )\n },\n)\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype EnvironmentType = 'development' | 'local' | 'production' | 'staging'\n\ntype EnvironmentBadgeProps = React.HTMLAttributes<HTMLSpanElement> & {\n env: EnvironmentType\n showDot?: boolean\n}\n\nconst envCls: Record<EnvironmentType, string> = {\n production: 'bg-success/15 text-success',\n staging: 'bg-warning/15 text-warning',\n development: 'bg-accent/15 text-accent',\n local: 'bg-bg-tertiary text-fg-muted',\n}\n\nconst dotCls: Record<EnvironmentType, string> = {\n production: 'bg-success',\n staging: 'bg-warning',\n development: 'bg-accent',\n local: 'bg-fg-muted',\n}\n\nexport const EnvironmentBadge = forwardRef<HTMLSpanElement, EnvironmentBadgeProps>(\n function EnvironmentBadge({ className, env, showDot = true, ...props }, ref) {\n return (\n <span\n className={cx('inline-flex items-center gap-1.5 rounded-full px-2.5 py-0.5 text-xs font-medium', envCls[env], className)}\n data-component=\"environment-badge\"\n ref={ref}\n {...props}\n >\n {showDot && <span className={cx('h-1.5 w-1.5 rounded-full', dotCls[env])} />}\n {env}\n </span>\n )\n },\n)\n\nexport type { EnvironmentBadgeProps, EnvironmentType }\n","// file-upload — drag-and-drop file upload zone\nimport type { ReactNode } from 'react'\nimport { forwardRef, useCallback, useRef, useState } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\ntype FileUploadProps = {\n accept?: string\n children?: ReactNode\n className?: string\n disabled?: boolean\n glass?: boolean\n maxSize?: number\n multiple?: boolean\n onFiles: (files: File[]) => void\n}\n\nfunction filterBySize(files: File[], maxSize?: number): File[] {\n if (maxSize === undefined) return files\n return files.filter((f) => f.size <= maxSize)\n}\n\nfunction UploadIcon() {\n return (\n <svg\n className=\"h-8 w-8 text-fg-muted/40\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4\" />\n <polyline points=\"17 8 12 3 7 8\" />\n <line x1=\"12\" x2=\"12\" y1=\"3\" y2=\"15\" />\n </svg>\n )\n}\n\nexport const FileUpload = forwardRef<HTMLDivElement, FileUploadProps>(\n function FileUpload(\n {\n accept,\n children,\n className,\n disabled = false,\n glass,\n maxSize,\n multiple = false,\n onFiles,\n },\n ref,\n ) {\n const [dragOver, setDragOver] = useState(false)\n const [selectedFiles, setSelectedFiles] = useState<File[]>([])\n const inputRef = useRef<HTMLInputElement>(null)\n\n const handleFiles = useCallback(\n (fileList: FileList) => {\n const files = filterBySize(Array.from(fileList), maxSize)\n setSelectedFiles(files)\n onFiles(files)\n },\n [maxSize, onFiles],\n )\n\n const handleClick = useCallback(() => {\n if (disabled) return\n inputRef.current?.click()\n }, [disabled])\n\n const handleDragOver = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault()\n if (disabled) return\n setDragOver(true)\n },\n [disabled],\n )\n\n const handleDragLeave = useCallback((e: React.DragEvent) => {\n e.preventDefault()\n setDragOver(false)\n }, [])\n\n const handleDrop = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault()\n setDragOver(false)\n if (disabled) return\n handleFiles(e.dataTransfer.files)\n },\n [disabled, handleFiles],\n )\n\n const handleInputChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n if (e.target.files !== null) {\n handleFiles(e.target.files)\n }\n },\n [handleFiles],\n )\n\n return (\n <div\n ref={ref}\n className={cx(\n 'flex cursor-pointer flex-col items-center justify-center gap-2 rounded-lg border-2 border-dashed p-6 transition-colors',\n !dragOver && !disabled && 'border-border hover:border-fg-muted',\n dragOver && 'border-accent bg-accent/5',\n disabled && 'pointer-events-none cursor-not-allowed opacity-50',\n glassClass(glass),\n className,\n )}\n data-component=\"file-upload\"\n data-state={dragOver ? 'drag-over' : 'idle'}\n onClick={handleClick}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n >\n <input\n accept={accept}\n className=\"hidden\"\n multiple={multiple}\n onChange={handleInputChange}\n ref={inputRef}\n type=\"file\"\n />\n {children !== undefined ? (\n children\n ) : (\n <>\n <UploadIcon />\n <div className=\"text-sm text-fg-muted\">\n Drop files here or click to browse\n </div>\n {selectedFiles.length > 0 && (\n <div className=\"text-xs text-fg-muted/60\">\n {selectedFiles.length} file{selectedFiles.length > 1 ? 's' : ''} selected\n </div>\n )}\n </>\n )}\n </div>\n )\n },\n)\n\nexport type { FileUploadProps }\n","import { forwardRef } from 'react'\n\nimport { Chip } from '../l3-atoms/chip'\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\n\ntype FilterItem = { id: string; label: string; active: boolean }\n\ntype FilterBarProps = React.HTMLAttributes<HTMLDivElement> & {\n filters: FilterItem[]\n onChange: (id: string, active: boolean) => void\n onClear?: () => void\n}\n\nexport const FilterBar = forwardRef<HTMLDivElement, FilterBarProps>(\n function FilterBar({ className, filters, onChange, onClear, ...props }, ref) {\n const hasActive = filters.some((f) => f.active)\n\n return (\n <div\n className={cx('flex flex-wrap items-center gds-gap', className)}\n data-component=\"filter-bar\"\n ref={ref}\n {...props}\n >\n {filters.map((filter) => (\n <button\n key={filter.id}\n className={cx('cursor-pointer', focusCls)}\n onClick={() => onChange(filter.id, !filter.active)}\n type=\"button\"\n >\n <Chip\n label={filter.label}\n variant={filter.active ? 'accent' : 'default'}\n />\n </button>\n ))}\n {hasActive && onClear !== undefined && (\n <button\n className={cx('gds-text-caption text-fg-muted hover:text-fg', focusCls)}\n onClick={onClear}\n type=\"button\"\n >\n Clear all\n </button>\n )}\n </div>\n )\n },\n)\n\nexport type { FilterBarProps, FilterItem }\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype FormActionsProps = React.HTMLAttributes<HTMLDivElement> & {\n disabled?: boolean\n loading?: boolean\n onCancel?: () => void\n onReset?: () => void\n onSave?: () => void\n saveLabel?: string\n}\n\nconst btnBase = 'rounded-md px-4 py-2 text-sm font-medium transition-colors disabled:opacity-50'\n\nexport const FormActions = forwardRef<HTMLDivElement, FormActionsProps>(\n function FormActions({ className, disabled, loading, onCancel, onReset, onSave, saveLabel = 'Save', ...props }, ref) {\n return (\n <div\n className={cx('flex items-center justify-end gds-gap', className)}\n data-component=\"form-actions\"\n ref={ref}\n {...props}\n >\n {onReset !== undefined && (\n <button className={cx(btnBase, 'text-fg-muted hover:text-fg')} disabled={disabled} onClick={onReset} type=\"button\">\n Reset\n </button>\n )}\n {onCancel !== undefined && (\n <button className={cx(btnBase, 'border border-border text-fg hover:bg-surface')} disabled={disabled} onClick={onCancel} type=\"button\">\n Cancel\n </button>\n )}\n {onSave !== undefined && (\n <button className={cx(btnBase, 'bg-accent text-white hover:bg-accent/90')} disabled={disabled ?? loading} onClick={onSave} type=\"submit\">\n {loading === true ? 'Saving...' : saveLabel}\n </button>\n )}\n </div>\n )\n },\n)\n\nexport type { FormActionsProps }\n","import type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { Label } from '../l2-primitives/label'\nimport { cx } from '../utils/cx'\n\ntype FieldWrapperProps = React.HTMLAttributes<HTMLDivElement> & {\n label: string\n children: ReactNode\n error?: string\n helperText?: string\n required?: boolean\n}\n\nexport const FieldWrapper = forwardRef<HTMLDivElement, FieldWrapperProps>(\n function FieldWrapper({ children, className, error, helperText, label, required, ...props }, ref) {\n const hasError = error !== undefined && error !== ''\n\n return (\n <div\n className={cx('flex flex-col gds-gap-sm', className)}\n data-component=\"field-wrapper\"\n data-state={hasError ? 'error' : 'idle'}\n ref={ref}\n {...props}\n >\n <Label required={required}>{label}</Label>\n {children}\n {hasError && (\n <span className=\"gds-text-caption text-danger\">{error}</span>\n )}\n {!hasError && helperText !== undefined && (\n <span className=\"gds-text-caption text-fg-muted\">{helperText}</span>\n )}\n </div>\n )\n },\n)\n\nexport type { FieldWrapperProps }\n","// hover-card — rich content card shown on hover with delay\nimport type { ReactNode } from 'react'\nimport { forwardRef, useCallback, useRef, useState } from 'react'\n\nimport { cx } from '../utils/cx'\n\nconst positionClasses: Record<string, string> = {\n bottom: 'top-full left-1/2 -translate-x-1/2 mt-2',\n left: 'right-full top-1/2 -translate-y-1/2 mr-2',\n right: 'left-full top-1/2 -translate-y-1/2 ml-2',\n top: 'bottom-full left-1/2 -translate-x-1/2 mb-2',\n}\n\nexport type HoverCardProps = React.HTMLAttributes<HTMLDivElement> & {\n trigger: ReactNode\n delay?: number\n placement?: 'bottom' | 'left' | 'right' | 'top'\n}\n\nexport const HoverCard = forwardRef<HTMLDivElement, HoverCardProps>(\n function HoverCard({ trigger, children, delay = 300, placement = 'bottom', className, ...props }, ref) {\n const [open, setOpen] = useState(false)\n const enterTimer = useRef<ReturnType<typeof setTimeout>>(undefined)\n const leaveTimer = useRef<ReturnType<typeof setTimeout>>(undefined)\n\n const handleEnter = useCallback(() => {\n clearTimeout(leaveTimer.current)\n enterTimer.current = setTimeout(() => setOpen(true), delay)\n }, [delay])\n\n const handleLeave = useCallback(() => {\n clearTimeout(enterTimer.current)\n leaveTimer.current = setTimeout(() => setOpen(false), 150)\n }, [])\n\n return (\n <div\n ref={ref}\n className={cx('relative inline-flex', className)}\n data-component=\"hover-card\"\n data-state={open ? 'open' : 'closed'}\n onMouseEnter={handleEnter}\n onMouseLeave={handleLeave}\n {...props}\n >\n {trigger}\n {open && (\n <div\n className={cx(\n 'absolute z-50 animate-popup gds-radius-popover border border-border bg-surface gds-pad-x gds-pad-y gds-shadow-lg',\n positionClasses[placement],\n )}\n onMouseEnter={handleEnter}\n onMouseLeave={handleLeave}\n >\n {children}\n </div>\n )}\n </div>\n )\n },\n)\n","// info-row — horizontal info bar with icon, label, and value\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type InfoRowProps = {\n label: string\n value: ReactNode\n icon?: ReactNode\n className?: string\n}\n\nexport const InfoRow = forwardRef<HTMLDivElement, InfoRowProps>(\n function InfoRow({ label, value, icon, className }, ref) {\n return (\n <div\n ref={ref}\n className={cx('flex items-center gap-2 gds-text-body select-none', className)}\n data-component=\"info-row\"\n >\n {icon !== undefined && <span className=\"text-fg-muted/60\">{icon}</span>}\n <span className=\"text-fg-muted\">{label}</span>\n <span className=\"ml-auto font-medium text-fg\">{value}</span>\n </div>\n )\n },\n)\n","// inline-edit — editable text with confirm/cancel buttons and validation\nimport { forwardRef, useCallback, useState } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\n\nexport type InlineEditProps = {\n value: string\n onSave: (value: string) => void\n onCancel?: () => void\n validate?: (value: string) => string | null\n placeholder?: string\n disabled?: boolean\n className?: string\n}\n\nconst checkIcon = (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M2.5 7.5l3 3 6-6.5\" />\n </svg>\n)\n\nconst cancelIcon = (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\">\n <path d=\"M3 3l8 8M11 3l-8 8\" />\n </svg>\n)\n\nconst editIcon = (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M7 2l3 3-7 7H0V9z\" />\n </svg>\n)\n\nexport const InlineEdit = forwardRef<HTMLDivElement, InlineEditProps>(\n function InlineEdit({ value, onSave, onCancel, validate, placeholder = 'Click to edit', disabled, className }, ref) {\n const [editing, setEditing] = useState(false)\n const [editValue, setEditValue] = useState(value)\n const [error, setError] = useState<string | null>(null)\n\n const startEditing = useCallback(() => {\n if (disabled === true) return\n setEditValue(value)\n setError(null)\n setEditing(true)\n }, [disabled, value])\n\n const save = useCallback(() => {\n if (validate !== undefined) {\n const err = validate(editValue)\n if (err !== null) {\n setError(err)\n return\n }\n }\n setEditing(false)\n setError(null)\n onSave(editValue)\n }, [editValue, onSave, validate])\n\n const cancel = useCallback(() => {\n setEditing(false)\n setEditValue(value)\n setError(null)\n if (onCancel !== undefined) {\n onCancel()\n }\n }, [onCancel, value])\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n save()\n }\n if (e.key === 'Escape') {\n cancel()\n }\n },\n [save, cancel],\n )\n\n if (editing) {\n return (\n <div ref={ref} className={cx('inline-flex flex-col', className)} data-component=\"inline-edit\" data-state=\"editing\">\n <div className=\"flex items-center gap-1\">\n <input\n autoFocus\n className={cx(\n 'bg-transparent gds-text-body text-fg outline-none border-b border-accent/50 px-0.5',\n error !== null && 'border-danger/50',\n focusCls,\n )}\n onChange={(e) => { setEditValue(e.target.value); setError(null) }}\n onKeyDown={handleKeyDown}\n type=\"text\"\n value={editValue}\n />\n <button type=\"button\" onClick={save} className={cx('shrink-0 p-0.5 text-success hover:text-success/80', focusCls)} aria-label=\"Save\">\n {checkIcon}\n </button>\n <button type=\"button\" onClick={cancel} className={cx('shrink-0 p-0.5 text-fg-muted hover:text-fg', focusCls)} aria-label=\"Cancel\">\n {cancelIcon}\n </button>\n </div>\n {error !== null && <span className=\"mt-0.5 text-[10px] text-danger\">{error}</span>}\n </div>\n )\n }\n\n const isEmpty = value === ''\n\n return (\n <div\n ref={ref}\n className={cx('group inline-flex cursor-pointer items-center gap-1', disabled === true && 'pointer-events-none opacity-50', className)}\n data-component=\"inline-edit\"\n data-state=\"display\"\n onClick={startEditing}\n onKeyDown={(e) => { if (e.key === 'Enter' || e.key === ' ') startEditing() }}\n role=\"button\"\n tabIndex={disabled === true ? -1 : 0}\n >\n <span className={cx('gds-text-body', isEmpty ? 'text-fg-muted' : 'text-fg', focusCls)}>\n {isEmpty ? placeholder : value}\n </span>\n <span className=\"text-fg-muted/0 transition-colors group-hover:text-fg-muted/60\">{editIcon}</span>\n </div>\n )\n },\n)\n","// input-group — groups input with prefix/suffix addons\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type InputGroupProps = React.HTMLAttributes<HTMLDivElement> & {\n prefix?: React.ReactNode\n suffix?: React.ReactNode\n error?: boolean\n disabled?: boolean\n className?: string\n}\n\nexport const InputGroup = forwardRef<HTMLDivElement, InputGroupProps>(\n function InputGroup({ prefix, suffix, error, disabled, className, children, ...props }, ref) {\n return (\n <div\n ref={ref}\n data-component=\"input-group\"\n className={cx(\n 'flex items-center gds-radius-input overflow-hidden border transition-colors',\n error ? 'border-danger' : 'border-border',\n disabled && 'opacity-50 pointer-events-none',\n // strip border/radius from nested inputs\n '[&_input]:border-0 [&_input]:rounded-none [&_input]:ring-0 [&_input]:focus-visible:ring-0 [&_input]:flex-1',\n className,\n )}\n {...props}\n >\n {prefix !== undefined && (\n <span className=\"flex items-center bg-bg-tertiary border-r border-border px-3 text-sm text-fg-muted select-none\">\n {prefix}\n </span>\n )}\n {children}\n {suffix !== undefined && (\n <span className=\"flex items-center bg-bg-tertiary border-l border-border px-3 text-sm text-fg-muted select-none\">\n {suffix}\n </span>\n )}\n </div>\n )\n },\n)\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype InputWithButtonProps = React.HTMLAttributes<HTMLDivElement> & {\n buttonLabel: string\n disabled?: boolean\n onChange: (value: string) => void\n onSubmit: () => void\n placeholder?: string\n value: string\n}\n\nexport const InputWithButton = forwardRef<HTMLDivElement, InputWithButtonProps>(\n function InputWithButton(\n { buttonLabel, className, disabled = false, onChange, onSubmit, placeholder, value, ...props },\n ref,\n ) {\n return (\n <div\n className={cx('inline-flex items-center overflow-hidden rounded-md border border-border', className)}\n data-component=\"input-with-button\"\n ref={ref}\n {...props}\n >\n <input\n className=\"min-w-0 flex-1 bg-transparent px-3 py-1.5 text-sm text-fg outline-none placeholder:text-fg-muted\"\n disabled={disabled}\n onChange={(e) => onChange(e.target.value)}\n onKeyDown={(e) => { if (e.key === 'Enter') onSubmit() }}\n placeholder={placeholder}\n type=\"text\"\n value={value}\n />\n <button\n className=\"shrink-0 border-l border-border bg-accent/10 px-3 py-1.5 text-sm font-medium text-accent hover:bg-accent/20 disabled:opacity-50\"\n disabled={disabled}\n onClick={onSubmit}\n type=\"button\"\n >\n {buttonLabel}\n </button>\n </div>\n )\n },\n)\n\nexport type { InputWithButtonProps }\n","// kv-table — key-value display table for entity details\nimport type { ReactNode } from 'react'\nimport { forwardRef, useState } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type KvTableItem = {\n key: string\n value: ReactNode\n copyable?: boolean\n}\n\nexport type KvTableProps = {\n items: KvTableItem[]\n columns?: 1 | 2\n striped?: boolean\n className?: string\n}\n\nexport const KvTable = forwardRef<HTMLDivElement, KvTableProps>(\n function KvTable({ items, columns = 1, striped, className }, ref) {\n const isTwoCol = columns === 2\n\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-text-body',\n isTwoCol && 'grid grid-cols-2 gap-x-6',\n className,\n )}\n data-component=\"kv-table\"\n data-variant={isTwoCol ? '2col' : '1col'}\n >\n {items.map((item, i) => (\n <KvRow key={item.key} item={item} striped={striped === true && i % 2 === 1} />\n ))}\n </div>\n )\n },\n)\n\nfunction KvRow({ item, striped }: { item: KvTableItem; striped: boolean }) {\n const [copied, setCopied] = useState(false)\n\n const handleCopy = () => {\n const text = typeof item.value === 'string' ? item.value : String(item.value)\n navigator.clipboard.writeText(text).catch(() => {})\n setCopied(true)\n setTimeout(() => setCopied(false), 1500)\n }\n\n return (\n <div\n className={cx(\n 'group flex items-baseline justify-between gap-4 gds-pad-x gds-pad-y-sm',\n striped && 'bg-bg-tertiary/40',\n )}\n >\n <dt className=\"shrink-0 font-medium text-fg-muted\">{item.key}</dt>\n <dd className=\"flex items-center gap-1.5 text-right text-fg\">\n <span>{item.value}</span>\n {item.copyable === true && (\n <button\n onClick={handleCopy}\n className=\"invisible text-fg-muted/50 hover:text-fg-muted group-hover:visible\"\n aria-label={`Copy ${item.key}`}\n >\n {copied ? '✓' : '⎘'}\n </button>\n )}\n </dd>\n </div>\n )\n}\n","// list-item — structured list row with icon, title, description, and trailing element\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type ListItemProps = {\n icon?: ReactNode\n title: string\n description?: string\n trailing?: ReactNode\n onClick?: () => void\n active?: boolean\n disabled?: boolean\n className?: string\n}\n\nexport const ListItem = forwardRef<HTMLDivElement, ListItemProps>(\n function ListItem({ icon, title, description, trailing, onClick, active, disabled, className }, ref) {\n const isClickable = onClick !== undefined && disabled !== true\n\n return (\n <div\n ref={ref}\n role={isClickable ? 'button' : undefined}\n tabIndex={isClickable ? 0 : undefined}\n onClick={isClickable ? onClick : undefined}\n onKeyDown={isClickable ? (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n onClick()\n }\n } : undefined}\n className={cx(\n 'flex items-center gap-3 gds-pad-x gds-pad-y-sm gds-text-body select-none',\n isClickable && 'cursor-pointer hover:bg-bg-tertiary',\n active === true && 'border-l-2 border-l-accent bg-accent/5',\n disabled === true && 'pointer-events-none opacity-50',\n className,\n )}\n data-component=\"list-item\"\n data-state={active === true ? 'active' : undefined}\n >\n {icon !== undefined && <span className=\"shrink-0 text-fg-muted\">{icon}</span>}\n <div className=\"min-w-0 flex-1\">\n <div className=\"font-medium text-fg\">{title}</div>\n {description !== undefined && (\n <div className=\"mt-0.5 text-fg-muted gds-text-caption\">{description}</div>\n )}\n </div>\n {trailing !== undefined && <span className=\"shrink-0\">{trailing}</span>}\n </div>\n )\n },\n)\n","// loading-overlay — covers parent container with spinner + optional message\nimport { forwardRef } from 'react'\n\nimport { Spinner } from '../l2-primitives/spinner'\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\ntype LoadingOverlayProps = {\n visible: boolean\n message?: string\n glass?: boolean\n className?: string\n}\n\nconst LoadingOverlay = forwardRef<HTMLDivElement, LoadingOverlayProps>(\n function LoadingOverlay({ visible, message, glass = true, className }, ref) {\n if (!visible) return null\n\n return (\n <div\n ref={ref}\n className={cx(\n 'absolute inset-0 z-10 flex flex-col items-center justify-center',\n glass === true ? glassClass(true) : 'bg-bg/80',\n className,\n )}\n data-component=\"loading-overlay\"\n >\n <Spinner />\n {message !== undefined && (\n <span className=\"mt-2 text-xs text-fg-muted\">{message}</span>\n )}\n </div>\n )\n },\n)\n\nexport { LoadingOverlay }\nexport type { LoadingOverlayProps }\n","// media-object — classic media + content side-by-side layout\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype MediaObjectProps = {\n align?: 'center' | 'top'\n children: ReactNode\n className?: string\n media: ReactNode\n reverse?: boolean\n}\n\nexport const MediaObject = forwardRef<HTMLDivElement, MediaObjectProps>(\n function MediaObject({ align = 'top', children, className, media, reverse = false }, ref) {\n return (\n <div\n ref={ref}\n className={cx(\n 'flex gds-gap',\n align === 'center' && 'items-center',\n align === 'top' && 'items-start',\n reverse === true && 'flex-row-reverse',\n className,\n )}\n data-component=\"media-object\"\n >\n <div className=\"shrink-0\">{media}</div>\n <div className=\"min-w-0 flex-1\">{children}</div>\n </div>\n )\n },\n)\n\nexport type { MediaObjectProps }\n","// mention-list — suggestion dropdown for mention-input\n\nimport { cx } from '../utils/cx'\n\ntype MentionSuggestion = {\n id: string\n label: string\n}\n\ntype MentionListProps = {\n filtered: MentionSuggestion[]\n highlightedIndex: number\n onSelect: (suggestion: MentionSuggestion) => void\n trigger: string\n}\n\nexport function MentionList({ filtered, highlightedIndex, onSelect, trigger }: MentionListProps) {\n return (\n <div\n className=\"absolute left-0 right-0 top-full z-50 mt-1 gds-radius-popover border border-border bg-surface shadow-lg\"\n role=\"listbox\"\n data-testid=\"mention-suggestions\"\n >\n {filtered.map((suggestion, index) => (\n <button\n key={suggestion.id}\n type=\"button\"\n role=\"option\"\n aria-selected={index === highlightedIndex}\n className={cx(\n 'flex w-full items-center px-3 py-1.5 text-left text-sm text-fg transition-colors',\n index === highlightedIndex && 'bg-accent/10 text-accent',\n index !== highlightedIndex && 'hover:bg-bg-secondary',\n )}\n onMouseDown={(e) => {\n e.preventDefault()\n onSelect(suggestion)\n }}\n >\n <span className=\"mr-1.5 text-fg-muted\">{trigger}</span>\n {suggestion.label}\n </button>\n ))}\n </div>\n )\n}\n\nexport type { MentionSuggestion }\n","// mention-input — text input with @mention suggestion dropdown\nimport { forwardRef, useCallback, useEffect, useRef, useState } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\nimport type { MentionSuggestion } from './mention-list'\nimport { MentionList } from './mention-list'\n\nexport type MentionInputProps = {\n value: string\n onChange: (value: string) => void\n suggestions: MentionSuggestion[]\n trigger?: string\n placeholder?: string\n disabled?: boolean\n className?: string\n}\n\nexport const MentionInput = forwardRef<HTMLInputElement, MentionInputProps>(\n function MentionInput({ value, onChange, suggestions, trigger = '@', placeholder, disabled, className }, ref) {\n const [showSuggestions, setShowSuggestions] = useState(false)\n const [query, setQuery] = useState('')\n const [highlightedIndex, setHighlightedIndex] = useState(0)\n const containerRef = useRef<HTMLDivElement>(null)\n\n const filtered = suggestions.filter((s) =>\n s.label.toLowerCase().includes(query.toLowerCase()),\n )\n\n // find the trigger position in the current value\n const findTriggerPosition = useCallback((text: string): number => {\n const lastTrigger = text.lastIndexOf(trigger)\n if (lastTrigger < 0) return -1\n if (lastTrigger > 0 && text[lastTrigger - 1] !== ' ') return -1\n const afterTrigger = text.slice(lastTrigger + trigger.length)\n if (afterTrigger.includes(' ')) return -1\n return lastTrigger\n }, [trigger])\n\n const handleChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value\n onChange(newValue)\n\n const triggerPos = findTriggerPosition(newValue)\n if (triggerPos >= 0) {\n const q = newValue.slice(triggerPos + trigger.length)\n setQuery(q)\n setShowSuggestions(true)\n setHighlightedIndex(0)\n } else {\n setShowSuggestions(false)\n setQuery('')\n }\n }, [onChange, findTriggerPosition, trigger])\n\n const selectSuggestion = useCallback((suggestion: MentionSuggestion) => {\n const triggerPos = findTriggerPosition(value)\n if (triggerPos < 0) return\n const before = value.slice(0, triggerPos)\n const after = `${trigger}${suggestion.label} `\n onChange(before + after)\n setShowSuggestions(false)\n setQuery('')\n }, [value, onChange, findTriggerPosition, trigger])\n\n const handleKeyDown = useCallback((e: React.KeyboardEvent) => {\n if (!showSuggestions) return\n\n if (e.key === 'ArrowDown') {\n e.preventDefault()\n setHighlightedIndex((prev) => {\n if (prev >= filtered.length - 1) return 0\n return prev + 1\n })\n } else if (e.key === 'ArrowUp') {\n e.preventDefault()\n setHighlightedIndex((prev) => {\n if (prev <= 0) return filtered.length - 1\n return prev - 1\n })\n } else if (e.key === 'Enter') {\n e.preventDefault()\n if (filtered.length > 0) {\n selectSuggestion(filtered[highlightedIndex])\n }\n } else if (e.key === 'Escape') {\n e.preventDefault()\n setShowSuggestions(false)\n }\n }, [showSuggestions, filtered, highlightedIndex, selectSuggestion])\n\n // close on click outside\n useEffect(() => {\n if (!showSuggestions) return\n\n function handleClickOutside(e: MouseEvent) {\n if (containerRef.current !== null && !containerRef.current.contains(e.target as Node)) {\n setShowSuggestions(false)\n }\n }\n\n document.addEventListener('mousedown', handleClickOutside)\n return () => document.removeEventListener('mousedown', handleClickOutside)\n }, [showSuggestions])\n\n return (\n <div ref={containerRef} className=\"relative\" data-component=\"mention-input\">\n <input\n ref={ref}\n type=\"text\"\n value={value}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n disabled={disabled}\n className={cx(\n 'w-full gds-radius-button border border-border bg-bg-secondary px-3 py-2 text-sm text-fg',\n 'placeholder:text-fg-muted/50',\n disabled === true && 'pointer-events-none opacity-50',\n focusCls,\n className,\n )}\n />\n {showSuggestions && filtered.length > 0 && (\n <MentionList\n filtered={filtered}\n highlightedIndex={highlightedIndex}\n onSelect={selectSuggestion}\n trigger={trigger}\n />\n )}\n </div>\n )\n },\n)\n","// metric-row — horizontal row of compact metric values\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type MetricRowMetric = {\n label: string\n value: string | number\n unit?: string\n variant?: 'danger' | 'default' | 'success' | 'warning'\n}\n\nexport type MetricRowProps = {\n metrics: MetricRowMetric[]\n className?: string\n}\n\nconst variantColor: Record<string, string> = {\n default: 'text-fg',\n success: 'text-success',\n warning: 'text-warning',\n danger: 'text-danger',\n}\n\nexport const MetricRow = forwardRef<HTMLDivElement, MetricRowProps>(\n function MetricRow({ metrics, className }, ref) {\n return (\n <div\n ref={ref}\n className={cx('flex items-center gds-gap gds-text-body select-none', className)}\n data-component=\"metric-row\"\n >\n {metrics.map((m) => (\n <div key={m.label} className=\"flex items-baseline gap-1.5\">\n <span className=\"text-fg-muted\">{m.label}</span>\n <span className={cx('font-semibold', variantColor[m.variant ?? 'default'])}>\n {m.value}\n {m.unit !== undefined && <span className=\"ml-0.5 font-normal text-fg-muted\">{m.unit}</span>}\n </span>\n </div>\n ))}\n </div>\n )\n },\n)\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype MetricTileVariant = 'danger' | 'default' | 'success' | 'warning'\n\ntype MetricTileProps = React.HTMLAttributes<HTMLDivElement> & {\n label: string\n unit?: string\n value: number | string\n variant?: MetricTileVariant\n}\n\nconst variantCls: Record<MetricTileVariant, string> = {\n default: 'text-fg',\n success: 'text-success',\n warning: 'text-warning',\n danger: 'text-danger',\n}\n\nexport const MetricTile = forwardRef<HTMLDivElement, MetricTileProps>(\n function MetricTile({ className, label, unit, value, variant = 'default', ...props }, ref) {\n return (\n <div\n className={cx('flex flex-col items-center gds-pad gds-radius bg-surface', className)}\n data-component=\"metric-tile\"\n ref={ref}\n {...props}\n >\n <span className={cx('text-lg font-bold tabular-nums', variantCls[variant])}>\n {value}{unit !== undefined && <span className=\"ml-0.5 text-xs font-normal text-fg-muted\">{unit}</span>}\n </span>\n <span className=\"text-xs text-fg-muted\">{label}</span>\n </div>\n )\n },\n)\n\nexport type { MetricTileProps, MetricTileVariant }\n","// multi-select-list — dropdown option list for multi-select (internal)\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\ntype MultiSelectOption = {\n label: string\n value: string\n}\n\ntype MultiSelectListProps = {\n filtered: MultiSelectOption[]\n glass?: boolean\n onSearchChange: (value: string) => void\n onToggle: (value: string) => void\n searchQuery: string\n searchRef: React.RefObject<HTMLInputElement | null>\n value: string[]\n}\n\nfunction CheckIcon() {\n return (\n <svg\n className=\"h-3.5 w-3.5 text-accent\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n viewBox=\"0 0 16 16\"\n >\n <path d=\"M3.5 8l3 3 6-6\" />\n </svg>\n )\n}\n\nfunction MultiSelectList({\n filtered,\n glass,\n onSearchChange,\n onToggle,\n searchQuery,\n searchRef,\n value,\n}: MultiSelectListProps) {\n return (\n <div\n className={cx(\n 'absolute left-0 right-0 z-50 mt-1 animate-popup gds-radius-popover border gds-shadow-lg',\n glass\n ? cx(glassClass(glass), 'border-white/10 bg-bg/60')\n : 'border-border bg-surface',\n )}\n >\n <div className=\"border-b border-border p-1.5\">\n <input\n className=\"w-full bg-transparent px-2 py-1 text-sm text-fg outline-none placeholder:text-fg-muted/50\"\n onChange={(e) => onSearchChange(e.target.value)}\n placeholder=\"Search...\"\n ref={searchRef}\n type=\"text\"\n value={searchQuery}\n />\n </div>\n <div className=\"max-h-60 overflow-y-auto py-1\">\n {filtered.length === 0 && (\n <div className=\"gds-pad-x gds-pad-y-sm text-sm text-fg-muted\">\n No results\n </div>\n )}\n {filtered.map((opt) => {\n const isSelected = value.includes(opt.value)\n return (\n <button\n className={cx(\n 'flex w-full items-center gap-2 gds-pad-x gds-pad-y-sm text-left text-sm transition-colors',\n isSelected && 'text-accent',\n !isSelected && 'text-fg hover:bg-bg-tertiary',\n )}\n key={opt.value}\n onClick={() => onToggle(opt.value)}\n type=\"button\"\n >\n <span\n className={cx(\n 'flex h-4 w-4 shrink-0 items-center justify-center rounded border transition-colors',\n isSelected\n ? 'border-accent bg-accent/10'\n : 'border-border',\n )}\n >\n {isSelected && <CheckIcon />}\n </span>\n {opt.label}\n </button>\n )\n })}\n </div>\n </div>\n )\n}\n\nexport { MultiSelectList }\nexport type { MultiSelectListProps }\n","// multi-select — dropdown with checkboxes for multiple selection\nimport { forwardRef, useCallback, useMemo, useRef, useState } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\nimport { useClickOutside, useEscapeKey } from '../utils/hooks'\nimport { MultiSelectList } from './multi-select-list'\n\ntype MultiSelectOption = {\n label: string\n value: string\n}\n\ntype MultiSelectProps = {\n className?: string\n disabled?: boolean\n error?: boolean\n glass?: boolean\n maxDisplay?: number\n onChange: (value: string[]) => void\n options: MultiSelectOption[]\n placeholder?: string\n value: string[]\n}\n\n// chevron icon\nfunction ChevronIcon({ open }: { open: boolean }) {\n return (\n <svg\n className={cx('h-3 w-3 shrink-0 text-fg-muted transition-transform', open && 'rotate-180')}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n viewBox=\"0 0 12 12\"\n >\n <path d=\"M3 4.5l3 3 3-3\" />\n </svg>\n )\n}\n\nexport const MultiSelect = forwardRef<HTMLDivElement, MultiSelectProps>(\n function MultiSelect(\n {\n className,\n disabled = false,\n error = false,\n glass,\n maxDisplay = 3,\n onChange,\n options,\n placeholder = 'Select...',\n value,\n },\n ref,\n ) {\n const [open, setOpen] = useState(false)\n const [searchQuery, setSearchQuery] = useState('')\n const containerRef = useRef<HTMLDivElement>(null)\n const searchRef = useRef<HTMLInputElement>(null)\n\n const mergedRef = (ref ?? containerRef) as React.RefObject<HTMLDivElement>\n\n const filtered = useMemo(() => {\n if (searchQuery === '') return options\n const lower = searchQuery.toLowerCase()\n return options.filter((opt) => opt.label.toLowerCase().includes(lower))\n }, [options, searchQuery])\n\n const selectedLabels = useMemo(\n () => options.filter((opt) => value.includes(opt.value)),\n [options, value],\n )\n\n const handleOpen = useCallback(() => {\n if (disabled) return\n setOpen(true)\n setSearchQuery('')\n requestAnimationFrame(() => {\n searchRef.current?.focus()\n })\n }, [disabled])\n\n const handleClose = useCallback(() => {\n setOpen(false)\n setSearchQuery('')\n }, [])\n\n const handleToggle = useCallback(\n (optionValue: string) => {\n if (value.includes(optionValue)) {\n onChange(value.filter((v) => v !== optionValue))\n } else {\n onChange([...value, optionValue])\n }\n },\n [onChange, value],\n )\n\n useClickOutside(mergedRef, open, handleClose)\n useEscapeKey(open, handleClose)\n\n const visibleChips = selectedLabels.slice(0, maxDisplay)\n const overflow = selectedLabels.length - maxDisplay\n\n return (\n <div\n ref={mergedRef}\n className={cx('relative', className)}\n data-component=\"multi-select\"\n data-state={open ? 'open' : 'closed'}\n >\n <button\n className={cx(\n 'flex w-full items-center justify-between gap-1 gds-h gds-radius-popover gds-pad-x border bg-transparent text-left text-sm text-fg transition-colors',\n focusCls,\n !error && 'border-border hover:border-fg-muted',\n error && 'border-danger',\n error && 'focus-visible:ring-danger',\n disabled && 'cursor-not-allowed opacity-50',\n glassClass(glass),\n glass === true && 'border-white/10 bg-bg/60',\n )}\n disabled={disabled}\n onClick={handleOpen}\n type=\"button\"\n >\n <span className=\"flex min-w-0 flex-1 flex-wrap items-center gap-1\">\n {selectedLabels.length === 0 && (\n <span className=\"text-fg-muted\">{placeholder}</span>\n )}\n {visibleChips.map((opt) => (\n <span\n key={opt.value}\n className=\"inline-flex max-w-[120px] items-center truncate rounded bg-accent/10 px-1.5 py-0.5 text-xs text-accent\"\n >\n {opt.label}\n </span>\n ))}\n {overflow > 0 && (\n <span className=\"text-xs text-fg-muted\">+{overflow} more</span>\n )}\n </span>\n <ChevronIcon open={open} />\n </button>\n\n {open && (\n <MultiSelectList\n filtered={filtered}\n glass={glass}\n onSearchChange={setSearchQuery}\n onToggle={handleToggle}\n searchQuery={searchQuery}\n searchRef={searchRef}\n value={value}\n />\n )}\n </div>\n )\n },\n)\n\nexport type { MultiSelectOption, MultiSelectProps }\n","// nav-item — sidebar navigation item with icon, label, and optional badge\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype NavItemProps = {\n icon?: ReactNode\n label: string\n active?: boolean\n badge?: number\n onClick?: () => void\n collapsed?: boolean\n className?: string\n}\n\nconst NavItem = forwardRef<HTMLButtonElement, NavItemProps>(\n function NavItem({ icon, label, active, badge, onClick, collapsed, className }, ref) {\n return (\n <button\n ref={ref}\n type=\"button\"\n onClick={onClick}\n title={collapsed === true ? label : undefined}\n className={cx(\n 'relative flex w-full items-center gap-3 gds-pad-x gds-pad-y-sm gds-text-body select-none',\n 'hover:bg-bg-tertiary transition-colors',\n active === true && 'bg-accent/10 text-accent font-medium',\n active !== true && 'text-fg-muted',\n collapsed === true && 'justify-center',\n className,\n )}\n data-component=\"nav-item\"\n data-state={active === true ? 'active' : undefined}\n >\n {icon !== undefined && <span className=\"shrink-0\">{icon}</span>}\n {collapsed !== true && <span className=\"flex-1 truncate text-left\">{label}</span>}\n {badge !== undefined && badge > 0 && (\n <span className=\"inline-flex h-5 min-w-5 items-center justify-center rounded-full bg-accent px-1 text-[10px] font-bold text-accent-fg\">\n {badge > 99 ? '99+' : badge}\n </span>\n )}\n </button>\n )\n },\n)\n\nexport { NavItem }\nexport type { NavItemProps }\n","// notification — persistent banner with variant, title, description, and action\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\ntype NotificationVariant = 'danger' | 'info' | 'success' | 'warning'\n\nconst borderColorMap: Record<NotificationVariant, string> = {\n info: 'border-l-accent',\n success: 'border-l-success',\n warning: 'border-l-warning',\n danger: 'border-l-danger',\n}\n\nconst bgColorMap: Record<NotificationVariant, string> = {\n info: 'bg-accent/5',\n success: 'bg-success/5',\n warning: 'bg-warning/5',\n danger: 'bg-danger/5',\n}\n\nconst iconColorMap: Record<NotificationVariant, string> = {\n info: 'text-accent',\n success: 'text-success',\n warning: 'text-warning',\n danger: 'text-danger',\n}\n\nconst iconMap: Record<NotificationVariant, ReactNode> = {\n info: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\">\n <circle cx=\"8\" cy=\"8\" r=\"6.5\" /><path d=\"M8 5.5h.01M8 7.5v3\" />\n </svg>\n ),\n success: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"8\" cy=\"8\" r=\"6.5\" /><path d=\"M5.5 8l2 2 3-3.5\" />\n </svg>\n ),\n warning: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\">\n <path d=\"M7.13 2.5l-5.5 10h11l-5.5-10z\" /><path d=\"M7.63 6.5v2.5M7.63 11h.01\" />\n </svg>\n ),\n danger: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\">\n <circle cx=\"8\" cy=\"8\" r=\"6.5\" /><path d=\"M5.5 5.5l5 5M10.5 5.5l-5 5\" />\n </svg>\n ),\n}\n\ntype NotificationProps = React.HTMLAttributes<HTMLDivElement> & {\n title: string\n description?: string\n variant?: NotificationVariant\n action?: ReactNode\n onClose?: () => void\n glass?: boolean\n}\n\nconst Notification = forwardRef<HTMLDivElement, NotificationProps>(\n function Notification({ title, description, variant = 'info', action, onClose, glass, className, ...props }, ref) {\n const v = variant ?? 'info'\n\n return (\n <div\n ref={ref}\n className={cx(\n 'flex w-full items-start gds-gap gds-radius-popover border border-l-2 gds-pad-x gds-pad-y',\n borderColorMap[v],\n bgColorMap[v],\n glass === true && glassClass(glass),\n className,\n )}\n data-component=\"notification\"\n data-variant={v}\n role=\"alert\"\n {...props}\n >\n <span className={cx('mt-px shrink-0', iconColorMap[v])}>{iconMap[v]}</span>\n <div className=\"min-w-0 flex-1\">\n <p className=\"gds-text-body font-medium text-fg\">{title}</p>\n {description !== undefined && <p className=\"mt-0.5 gds-text-label text-fg-muted\">{description}</p>}\n </div>\n {action !== undefined && <div className=\"shrink-0\">{action}</div>}\n {onClose !== undefined && (\n <button\n type=\"button\"\n onClick={onClose}\n className={cx('shrink-0 gds-radius-button p-0.5 text-fg-muted opacity-60 hover:opacity-100', focusCls)}\n aria-label=\"Dismiss\"\n >\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\">\n <path d=\"M2 2l8 8M10 2l-8 8\" />\n </svg>\n </button>\n )}\n </div>\n )\n },\n)\n\nexport { Notification }\nexport type { NotificationProps, NotificationVariant }\n","// notification-dot — element wrapper with notification count badge\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype NotificationDotVariant = 'accent' | 'danger'\n\ntype NotificationDotProps = React.HTMLAttributes<HTMLDivElement> & {\n children: ReactNode\n count?: number\n max?: number\n variant?: NotificationDotVariant\n}\n\nconst variantMap: Record<NotificationDotVariant, string> = {\n danger: 'bg-danger text-white',\n accent: 'bg-accent text-white',\n}\n\nexport const NotificationDot = forwardRef<HTMLDivElement, NotificationDotProps>(\n function NotificationDot({ children, count = 0, max = 99, variant = 'danger', className, ...props }, ref) {\n const visible = count > 0\n const display = count > max ? `${max}+` : String(count)\n\n return (\n <div\n ref={ref}\n className={cx('relative inline-flex', className)}\n data-component=\"notification-dot\"\n {...props}\n >\n {children}\n {visible && (\n <span className={cx(\n 'absolute -right-1.5 -top-1.5 flex h-4 min-w-4 items-center justify-center rounded-full px-1 text-[10px] font-bold leading-none',\n variantMap[variant],\n )}>\n {display}\n </span>\n )}\n </div>\n )\n },\n)\n\nexport type { NotificationDotProps, NotificationDotVariant }\n","// otp-input — one-time password input with individual digit boxes\nimport { forwardRef, useCallback, useRef, useState } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\n\nexport type OtpInputProps = {\n value: string\n onChange: (value: string) => void\n onComplete?: (value: string) => void\n length?: number\n error?: boolean\n disabled?: boolean\n className?: string\n}\n\nexport const OtpInput = forwardRef<HTMLDivElement, OtpInputProps>(\n function OtpInput(\n { value, onChange, onComplete, length = 6, error = false, disabled = false, className },\n ref,\n ) {\n const [focusedIndex, setFocusedIndex] = useState(-1)\n const inputRefs = useRef<(HTMLInputElement | null)[]>([])\n\n const digits = Array.from({ length }, (_, i) => value[i] ?? '')\n\n const focusInput = useCallback((index: number) => {\n if (index >= 0 && index < length) {\n inputRefs.current[index]?.focus()\n }\n }, [length])\n\n const updateValue = useCallback((newDigits: string[]) => {\n const next = newDigits.join('')\n onChange(next)\n if (next.length === length && newDigits.every((d) => d !== '')) {\n onComplete?.(next)\n }\n }, [length, onChange, onComplete])\n\n const handleInput = useCallback((index: number, char: string) => {\n if (disabled) return\n if (!/^\\d$/.test(char)) return\n\n const newDigits = [...digits]\n newDigits[index] = char\n updateValue(newDigits)\n focusInput(index + 1)\n }, [digits, disabled, focusInput, updateValue])\n\n const handleKeyDown = useCallback((index: number, e: React.KeyboardEvent) => {\n if (disabled) return\n\n if (e.key === 'Backspace') {\n e.preventDefault()\n const newDigits = [...digits]\n if (digits[index] !== '') {\n newDigits[index] = ''\n updateValue(newDigits)\n } else if (index > 0) {\n newDigits[index - 1] = ''\n updateValue(newDigits)\n focusInput(index - 1)\n }\n } else if (e.key === 'ArrowLeft') {\n focusInput(index - 1)\n } else if (e.key === 'ArrowRight') {\n focusInput(index + 1)\n }\n }, [digits, disabled, focusInput, updateValue])\n\n const handlePaste = useCallback((e: React.ClipboardEvent) => {\n if (disabled) return\n e.preventDefault()\n const pasted = e.clipboardData.getData('text').replace(/\\D/g, '').slice(0, length)\n if (pasted.length === 0) return\n\n const newDigits = pasted.padEnd(length, '').split('').slice(0, length)\n // preserve empty slots for unfilled positions\n const result = newDigits.map((d, i) => (i < pasted.length ? d : digits[i] ?? ''))\n updateValue(result)\n focusInput(Math.min(pasted.length, length - 1))\n }, [digits, disabled, focusInput, length, updateValue])\n\n return (\n <div\n ref={ref}\n className={cx('inline-flex items-center gap-2', className)}\n data-component=\"otp-input\"\n data-disabled={disabled ? '' : undefined}\n data-error={error ? '' : undefined}\n >\n {digits.map((digit, i) => (\n <input\n key={i}\n ref={(el) => { inputRefs.current[i] = el }}\n type=\"text\"\n inputMode=\"numeric\"\n maxLength={1}\n value={digit}\n disabled={disabled}\n aria-label={`Digit ${i + 1}`}\n className={cx(\n 'h-10 w-10 rounded border bg-transparent text-center font-mono text-fg gds-radius-input gds-text-body',\n 'focus:outline-none',\n focusedIndex === i && 'border-accent',\n error ? 'border-danger' : 'border-border',\n disabled && 'cursor-not-allowed opacity-40',\n focusCls,\n )}\n onChange={(e) => handleInput(i, e.target.value.slice(-1))}\n onKeyDown={(e) => handleKeyDown(i, e)}\n onPaste={handlePaste}\n onFocus={() => setFocusedIndex(i)}\n onBlur={() => setFocusedIndex(-1)}\n />\n ))}\n </div>\n )\n },\n)\n","// page-nav — previous/next page navigation\nimport { forwardRef } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\n\ntype PageNavLink = {\n href?: string\n label: string\n onClick?: () => void\n}\n\ntype PageNavProps = React.HTMLAttributes<HTMLElement> & {\n next?: PageNavLink\n prev?: PageNavLink\n}\n\nconst linkCls = cx(\n 'flex items-center gap-1.5 gds-radius-button gds-pad-x gds-pad-y gds-text-body text-fg-muted hover:text-fg transition-colors',\n focusCls,\n)\n\nexport const PageNav = forwardRef<HTMLElement, PageNavProps>(\n function PageNav({ prev, next, className, ...props }, ref) {\n return (\n <nav\n ref={ref}\n className={cx('flex w-full items-center justify-between', className)}\n data-component=\"page-nav\"\n {...props}\n >\n <div>\n {prev !== undefined && (\n <a href={prev.href} onClick={prev.onClick} className={linkCls}>\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M9 3L5 7l4 4\" />\n </svg>\n {prev.label}\n </a>\n )}\n </div>\n <div>\n {next !== undefined && (\n <a href={next.href} onClick={next.onClick} className={linkCls}>\n {next.label}\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M5 3l4 4-4 4\" />\n </svg>\n </a>\n )}\n </div>\n </nav>\n )\n },\n)\n\nexport type { PageNavLink, PageNavProps }\n","// pagination — page navigation with numbered buttons and ellipsis\nimport { forwardRef, useMemo } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\n\nexport type PaginationProps = React.HTMLAttributes<HTMLElement> & {\n page: number\n totalPages: number\n onPageChange: (page: number) => void\n siblings?: number\n}\n\nfunction range(start: number, end: number): number[] {\n const result: number[] = []\n for (let i = start; i <= end; i++) result.push(i)\n return result\n}\n\nexport const Pagination = forwardRef<HTMLElement, PaginationProps>(\n function Pagination({ page, totalPages, onPageChange, siblings = 1, className, ...props }, ref) {\n const pages = useMemo(() => {\n const total = totalPages\n const boundary = siblings + 3 // siblings + first + last + current\n if (total <= boundary + 2) return range(1, total)\n\n const left = Math.max(page - siblings, 2)\n const right = Math.min(page + siblings, total - 1)\n const showLeftDots = left > 2\n const showRightDots = right < total - 1\n\n const mid = range(left, right)\n const items: (number | 'dots-l' | 'dots-r')[] = [1]\n if (showLeftDots) items.push('dots-l')\n items.push(...mid)\n if (showRightDots) items.push('dots-r')\n items.push(total)\n return items\n }, [page, totalPages, siblings])\n\n const chevron = (dir: 'left' | 'right') => (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d={dir === 'left' ? 'M9 3L5 7l4 4' : 'M5 3l4 4-4 4'} />\n </svg>\n )\n\n const btnBase = cx(\n 'inline-flex gds-sq items-center justify-center gds-radius-button gds-text-body select-none',\n focusCls,\n )\n\n return (\n <nav\n ref={ref}\n className={cx('flex items-center gds-gap-xs', className)}\n data-component=\"pagination\"\n aria-label=\"Pagination\"\n {...props}\n >\n <button\n type=\"button\"\n className={cx(btnBase, 'text-fg-muted', page <= 1 ? 'pointer-events-none opacity-40' : 'hover:bg-bg-secondary')}\n disabled={page <= 1}\n onClick={() => onPageChange(page - 1)}\n aria-label=\"Previous page\"\n >\n {chevron('left')}\n </button>\n\n {pages.map((item) => {\n if (item === 'dots-l' || item === 'dots-r') {\n return <span key={item} className=\"inline-flex gds-sq items-center justify-center gds-text-body text-fg-muted select-none\">…</span>\n }\n const active = item === page\n return (\n <button\n key={item}\n type=\"button\"\n className={cx(\n btnBase,\n active\n ? 'bg-accent font-medium text-accent-fg'\n : 'text-fg-muted hover:bg-bg-secondary hover:text-fg',\n )}\n aria-current={active ? 'page' : undefined}\n onClick={() => onPageChange(item as number)}\n >\n {item}\n </button>\n )\n })}\n\n <button\n type=\"button\"\n className={cx(btnBase, 'text-fg-muted', page >= totalPages ? 'pointer-events-none opacity-40' : 'hover:bg-bg-secondary')}\n disabled={page >= totalPages}\n onClick={() => onPageChange(page + 1)}\n aria-label=\"Next page\"\n >\n {chevron('right')}\n </button>\n </nav>\n )\n },\n)\n","// panel — collapsible panel with header bar\nimport type { ReactNode } from 'react'\nimport { forwardRef, useState } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\ntype PanelProps = React.HTMLAttributes<HTMLDivElement> & {\n children: ReactNode\n collapsible?: boolean\n defaultOpen?: boolean\n glass?: boolean\n headerAction?: ReactNode\n title: string\n}\n\nfunction ChevronIcon({ open }: { open: boolean }) {\n return (\n <svg\n className={cx('h-3.5 w-3.5 shrink-0 text-fg-muted transition-transform duration-200', open && 'rotate-90')}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeWidth={2}\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M9 5l7 7-7 7\" />\n </svg>\n )\n}\n\nexport const Panel = forwardRef<HTMLDivElement, PanelProps>(\n function Panel(\n { children, className, collapsible = true, defaultOpen = true, glass, headerAction, title, ...props },\n ref,\n ) {\n const [isOpen, setIsOpen] = useState(defaultOpen)\n const expanded = collapsible ? isOpen : true\n\n return (\n <div\n className={cx(\n 'gds-ctx gds-radius-popover border border-border bg-surface',\n glassClass(glass),\n glass === true && 'border-white/10 bg-white/5',\n className,\n )}\n data-component=\"panel\"\n data-state={expanded ? 'open' : 'closed'}\n ref={ref}\n {...props}\n >\n <div className=\"flex items-center border-b border-border gds-pad-x gds-pad-y-sm\">\n {collapsible ? (\n <button\n className={cx('flex flex-1 items-center gap-2 text-left text-sm font-medium text-fg', focusCls)}\n onClick={() => setIsOpen((prev) => !prev)}\n type=\"button\"\n >\n <ChevronIcon open={expanded} />\n <span>{title}</span>\n </button>\n ) : (\n <span className=\"flex-1 text-sm font-medium text-fg\">{title}</span>\n )}\n {headerAction !== undefined && (\n <div className=\"ml-2 shrink-0\">{headerAction}</div>\n )}\n </div>\n {expanded && (\n <div className=\"gds-pad-x gds-pad-y\">{children}</div>\n )}\n </div>\n )\n },\n)\n\nexport type { PanelProps }\n","import type { ReactNode } from 'react'\nimport { forwardRef, useState } from 'react'\n\nimport { Input } from '../l2-primitives/input'\nimport { Progress } from '../l2-primitives/progress'\nimport { cx } from '../utils/cx'\n\ntype StrengthLevel = 'none' | 'weak' | 'fair' | 'strong'\n\nfunction computeStrength(value: string): StrengthLevel {\n if (value.length === 0) return 'none'\n let score = 0\n if (value.length >= 8) score += 1\n if (/[a-z]/.test(value) && /[A-Z]/.test(value)) score += 1\n if (/\\d/.test(value)) score += 1\n if (/[^a-zA-Z0-9]/.test(value)) score += 1\n if (score <= 1) return 'weak'\n if (score <= 2) return 'fair'\n return 'strong'\n}\n\nconst strengthConfig: Record<Exclude<StrengthLevel, 'none'>, { label: string; value: number; variant: 'danger' | 'warning' | 'success' }> = {\n weak: { label: 'Weak', value: 33, variant: 'danger' },\n fair: { label: 'Fair', value: 66, variant: 'warning' },\n strong: { label: 'Strong', value: 100, variant: 'success' },\n}\n\ntype PasswordInputProps = Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'> & {\n error?: boolean\n glass?: boolean\n icon?: ReactNode\n inputSize?: 'default' | 'sm'\n showStrength?: boolean\n}\n\nconst eyeSvg = (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n)\n\nconst eyeOffSvg = (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M17.94 17.94A10.07 10.07 0 0112 20c-7 0-11-8-11-8a18.45 18.45 0 015.06-5.94M9.9 4.24A9.12 9.12 0 0112 4c7 0 11 8 11 8a18.5 18.5 0 01-2.16 3.19m-6.72-1.07a3 3 0 11-4.24-4.24\" />\n <line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\" />\n </svg>\n)\n\nexport const PasswordInput = forwardRef<HTMLInputElement, PasswordInputProps>(\n function PasswordInput({ className, showStrength = false, ...props }, ref) {\n const [visible, setVisible] = useState(false)\n const value = typeof props.value === 'string' ? props.value : ''\n const strength = showStrength ? computeStrength(value) : 'none'\n\n const toggleButton = (\n <button\n aria-label={visible ? 'Hide password' : 'Show password'}\n className=\"cursor-pointer text-fg-muted/50 hover:text-fg-muted\"\n onClick={() => setVisible((v) => !v)}\n tabIndex={-1}\n type=\"button\"\n >\n {visible ? eyeOffSvg : eyeSvg}\n </button>\n )\n\n return (\n <div className={cx('flex flex-col gap-1.5', className)} data-component=\"password-input\">\n <Input\n {...props}\n ref={ref}\n rightIcon={toggleButton}\n type={visible ? 'text' : 'password'}\n />\n {showStrength && strength !== 'none' && (\n <div className=\"flex items-center gap-2\">\n <Progress size=\"sm\" value={strengthConfig[strength].value} variant={strengthConfig[strength].variant} />\n <span className=\"shrink-0 text-[10px] text-fg-muted select-none\">{strengthConfig[strength].label}</span>\n </div>\n )}\n </div>\n )\n },\n)\n\nexport type { PasswordInputProps }\n","// phone-input — phone number input with country code prefix\nimport { forwardRef, useCallback, useRef, useState } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\nimport { useClickOutside } from '../utils/hooks'\n\nexport type PhoneCountry = {\n code: string\n label: string\n flag: string\n}\n\nconst DEFAULT_COUNTRIES: PhoneCountry[] = [\n { code: '+1', label: 'US', flag: '\\u{1F1FA}\\u{1F1F8}' },\n { code: '+44', label: 'UK', flag: '\\u{1F1EC}\\u{1F1E7}' },\n { code: '+81', label: 'JP', flag: '\\u{1F1EF}\\u{1F1F5}' },\n { code: '+86', label: 'CN', flag: '\\u{1F1E8}\\u{1F1F3}' },\n { code: '+82', label: 'KR', flag: '\\u{1F1F0}\\u{1F1F7}' },\n]\n\nexport type PhoneInputProps = {\n value: string\n onChange: (value: string) => void\n defaultCountry?: string\n countries?: PhoneCountry[]\n disabled?: boolean\n error?: boolean\n placeholder?: string\n className?: string\n}\n\nexport const PhoneInput = forwardRef<HTMLDivElement, PhoneInputProps>(\n function PhoneInput(\n {\n value,\n onChange,\n defaultCountry = '+81',\n countries,\n disabled = false,\n error = false,\n placeholder = 'Phone number',\n className,\n },\n ref,\n ) {\n const countryList = countries ?? DEFAULT_COUNTRIES\n const [selectedCode, setSelectedCode] = useState(defaultCountry)\n const [dropdownOpen, setDropdownOpen] = useState(false)\n const dropdownRef = useRef<HTMLDivElement>(null)\n\n useClickOutside(dropdownRef, dropdownOpen, () => setDropdownOpen(false))\n\n const selectedCountry = countryList.find((c) => c.code === selectedCode) ?? countryList[0]\n\n const handleCountrySelect = useCallback((code: string) => {\n setSelectedCode(code)\n setDropdownOpen(false)\n }, [])\n\n const handleInputChange = useCallback((raw: string) => {\n // strip non-digit chars except dashes\n const cleaned = raw.replace(/[^\\d-]/g, '')\n onChange(cleaned)\n }, [onChange])\n\n return (\n <div\n ref={ref}\n className={cx(\n 'relative inline-flex items-stretch gds-h gds-radius-input border',\n error ? 'border-danger' : 'border-border',\n disabled && 'cursor-not-allowed opacity-40',\n className,\n )}\n data-component=\"phone-input\"\n data-disabled={disabled ? '' : undefined}\n data-error={error ? '' : undefined}\n >\n {/* country code selector */}\n <div ref={dropdownRef} className=\"relative\">\n <button\n type=\"button\"\n disabled={disabled}\n className={cx(\n 'flex h-full items-center gap-1 border-r border-border px-2 text-sm select-none',\n 'hover:bg-white/5 transition-colors gds-radius-input rounded-r-none',\n focusCls,\n )}\n onClick={() => setDropdownOpen((prev) => !prev)}\n aria-label=\"Select country code\"\n >\n <span>{selectedCountry?.flag}</span>\n <span className=\"text-fg-muted gds-text-body\">{selectedCountry?.code}</span>\n </button>\n\n {dropdownOpen && (\n <div className=\"absolute left-0 top-full z-50 mt-1 min-w-[140px] animate-popup rounded-lg border border-border bg-surface shadow-lg\">\n {countryList.map((c) => (\n <button\n key={c.code}\n type=\"button\"\n className={cx(\n 'flex w-full items-center gap-2 px-3 py-1.5 text-left text-sm hover:bg-white/5 transition-colors',\n c.code === selectedCode && 'bg-accent/10 text-accent',\n )}\n onClick={() => handleCountrySelect(c.code)}\n >\n <span>{c.flag}</span>\n <span className=\"text-fg-muted\">{c.label}</span>\n <span className=\"ml-auto text-fg-muted/60\">{c.code}</span>\n </button>\n ))}\n </div>\n )}\n </div>\n\n {/* phone number input */}\n <input\n type=\"tel\"\n value={value}\n onChange={(e) => handleInputChange(e.target.value)}\n disabled={disabled}\n placeholder={placeholder}\n className={cx(\n 'flex-1 bg-transparent px-3 text-fg gds-text-body focus:outline-none',\n focusCls,\n )}\n aria-label=\"Phone number\"\n />\n </div>\n )\n },\n)\n","// progress-steps — linear progress indicator with labeled steps\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype ProgressStepsProps = {\n className?: string\n current: number\n steps: string[]\n}\n\nexport const ProgressSteps = forwardRef<HTMLDivElement, ProgressStepsProps>(\n function ProgressSteps({ className, current, steps }, ref) {\n return (\n <div\n ref={ref}\n className={cx('flex items-center', className)}\n data-component=\"progress-steps\"\n role=\"list\"\n >\n {steps.map((label, i) => {\n const isCompleted = i < current\n const isCurrent = i === current\n\n return (\n <div key={i} className=\"flex flex-1 items-center\" role=\"listitem\">\n <div className=\"flex flex-col items-center gap-1\">\n <div\n className={cx(\n 'flex h-7 w-7 items-center justify-center rounded-full text-xs font-medium',\n isCompleted && 'bg-accent text-white',\n isCurrent && 'border-2 border-accent bg-accent/10 text-accent',\n !isCompleted && !isCurrent && 'border border-border bg-bg-secondary text-fg-muted',\n )}\n >\n {isCompleted ? (\n <svg className=\"h-3.5 w-3.5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={3}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n </svg>\n ) : (\n i + 1\n )}\n </div>\n <span className={cx(\n 'text-center gds-text-caption',\n isCurrent ? 'font-medium text-fg' : 'text-fg-muted',\n )}>\n {label}\n </span>\n </div>\n {i < steps.length - 1 && (\n <div className={cx(\n 'mx-2 h-px flex-1',\n isCompleted ? 'bg-accent' : 'bg-border',\n )} />\n )}\n </div>\n )\n })}\n </div>\n )\n },\n)\n\nexport type { ProgressStepsProps }\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype QuickStatProps = React.HTMLAttributes<HTMLDivElement> & {\n icon?: React.ReactNode\n label: string\n trend?: number\n value: string | number\n}\n\nexport const QuickStat = forwardRef<HTMLDivElement, QuickStatProps>(\n function QuickStat({ className, icon, label, trend, value, ...props }, ref) {\n const trendColor = trend !== undefined && trend > 0\n ? 'text-success'\n : trend !== undefined && trend < 0\n ? 'text-danger'\n : 'text-fg-muted'\n\n return (\n <div\n className={cx('inline-flex items-center gap-3 select-none', className)}\n data-component=\"quick-stat\"\n ref={ref}\n {...props}\n >\n {icon !== undefined && <div className=\"text-fg-muted\">{icon}</div>}\n <div className=\"flex flex-col\">\n <div className=\"flex items-baseline gap-1.5\">\n <span className=\"text-lg font-semibold text-fg leading-tight\">{value}</span>\n {trend !== undefined && (\n <span className={cx('text-xs font-medium', trendColor)}>\n {trend > 0 ? '+' : ''}{trend}%\n </span>\n )}\n </div>\n <span className=\"text-xs text-fg-muted leading-tight\">{label}</span>\n </div>\n </div>\n )\n },\n)\n\nexport type { QuickStatProps }\n","// radio-card — card-style radio group where each option is a selectable card\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\ntype RadioCardOption = {\n value: string\n label: string\n description?: string\n icon?: ReactNode\n}\n\nexport type RadioCardProps = {\n options: RadioCardOption[]\n value: string | null\n onChange: (value: string) => void\n columns?: 1 | 2 | 3\n disabled?: boolean\n glass?: boolean\n className?: string\n}\n\nconst columnMap: Record<number, string> = {\n 1: 'grid-cols-1',\n 2: 'grid-cols-2',\n 3: 'grid-cols-3',\n}\n\nexport const RadioCard = forwardRef<HTMLDivElement, RadioCardProps>(\n function RadioCard({ options, value, onChange, columns = 1, disabled, glass, className }, ref) {\n return (\n <div\n ref={ref}\n className={cx('grid gds-gap', columnMap[columns], className)}\n data-component=\"radio-card\"\n role=\"radiogroup\"\n >\n {options.map((option) => {\n const selected = value === option.value\n\n return (\n <button\n key={option.value}\n type=\"button\"\n role=\"radio\"\n aria-checked={selected}\n disabled={disabled}\n onClick={() => {\n if (disabled !== true) {\n onChange(option.value)\n }\n }}\n className={cx(\n 'flex items-center gds-gap gds-radius-card gds-pad-x gds-pad-y text-left transition-colors',\n 'cursor-pointer select-none',\n glass === true\n ? cx(glassClass(glass), 'border border-white/10')\n : selected\n ? 'border border-accent bg-accent/5 ring-1 ring-accent'\n : 'border border-border hover:border-border-strong',\n disabled === true && 'pointer-events-none opacity-50',\n )}\n data-state={selected ? 'selected' : 'idle'}\n >\n {/* radio dot */}\n <span\n className={cx(\n 'flex h-4 w-4 shrink-0 items-center justify-center rounded-full border-2 transition-colors',\n selected\n ? 'border-accent bg-accent'\n : 'border-border-strong',\n )}\n >\n {selected && (\n <span className=\"h-1.5 w-1.5 rounded-full bg-white\" />\n )}\n </span>\n\n {/* icon */}\n {option.icon !== undefined && (\n <span className=\"shrink-0 text-fg-muted\">{option.icon}</span>\n )}\n\n {/* label + description */}\n <div className=\"min-w-0 flex-1\">\n <div className=\"text-sm font-medium text-fg\">{option.label}</div>\n {option.description !== undefined && (\n <div className=\"mt-0.5 text-xs text-fg-muted\">{option.description}</div>\n )}\n </div>\n </button>\n )\n })}\n </div>\n )\n },\n)\n","import { forwardRef } from 'react'\n\nimport { Input } from '../l2-primitives/input'\nimport { Spinner } from '../l2-primitives/spinner'\nimport { cx } from '../utils/cx'\n\ntype SearchInputProps = {\n className?: string\n clearable?: boolean\n disabled?: boolean\n inputSize?: 'default' | 'sm'\n loading?: boolean\n onChange: (value: string) => void\n onSearch?: (value: string) => void\n placeholder?: string\n value: string\n}\n\nconst searchSvg = (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\" />\n </svg>\n)\n\nconst clearSvg = (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n)\n\nexport const SearchInput = forwardRef<HTMLInputElement, SearchInputProps>(\n function SearchInput(\n { className, clearable = true, disabled = false, inputSize, loading = false, onChange, onSearch, placeholder = 'Search...', value },\n ref,\n ) {\n const leftIcon = loading ? <Spinner size=\"sm\" /> : searchSvg\n\n const showClear = clearable && value.length > 0\n const rightIcon = showClear ? (\n <button\n aria-label=\"Clear search\"\n className=\"cursor-pointer text-fg-muted/50 hover:text-fg-muted\"\n onClick={() => onChange('')}\n tabIndex={-1}\n type=\"button\"\n >\n {clearSvg}\n </button>\n ) : undefined\n\n return (\n <Input\n className={cx(className)}\n data-component=\"search-input\"\n disabled={disabled}\n icon={leftIcon}\n inputSize={inputSize}\n onChange={(e) => onChange(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && onSearch !== undefined) {\n onSearch(value)\n }\n }}\n placeholder={placeholder}\n ref={ref}\n rightIcon={rightIcon}\n type=\"search\"\n value={value}\n />\n )\n },\n)\n\nexport type { SearchInputProps }\n","// select — styled native select with chevron overlay\nimport { cva } from 'class-variance-authority'\nimport { forwardRef } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\nimport type { VariantProps } from '../utils/types'\n\nexport const selectVariants = cva(\n cx(\n 'w-full appearance-none gds-radius-popover border bg-transparent pr-8 text-fg transition-colors',\n 'placeholder:text-fg-muted',\n focusCls,\n ),\n {\n compoundVariants: [\n {\n error: true,\n className: 'focus-visible:ring-danger',\n },\n ],\n variants: {\n error: {\n true: 'border-danger text-danger',\n false: 'border-border hover:border-fg-muted',\n },\n inputSize: {\n default: 'gds-h-lg gds-pad-x text-sm',\n sm: 'gds-h-sm gds-pad-x-sm gds-text-body',\n },\n },\n defaultVariants: {\n error: false,\n inputSize: 'default',\n },\n },\n)\n\nexport type SelectProps = Omit<React.SelectHTMLAttributes<HTMLSelectElement>, 'size'> &\n VariantProps<typeof selectVariants> & {\n glass?: boolean\n className?: string\n }\n\nexport const Select = forwardRef<HTMLSelectElement, SelectProps>(\n function Select({ error, inputSize, glass, className, children, ...props }, ref) {\n return (\n <div className=\"relative\" data-component=\"select\">\n <select\n ref={ref}\n className={cx(selectVariants({ error, inputSize }), glassClass(glass), className)}\n {...props}\n >\n {children}\n </select>\n <span className=\"pointer-events-none absolute right-2 top-1/2 -translate-y-1/2 text-fg-muted\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M3 4.5l3 3 3-3\" />\n </svg>\n </span>\n </div>\n )\n },\n)\n","// sheet — side panel overlay with slide transition\nimport type { CSSProperties, ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\nimport { useEscapeKey, useScrollLock } from '../utils/hooks'\n\ntype SheetSide = 'left' | 'right'\n\nexport type SheetProps = {\n open: boolean\n onClose: () => void\n children: ReactNode\n side?: SheetSide\n title?: string\n description?: string\n glass?: boolean\n width?: number | string\n className?: string\n}\n\nexport const Sheet = forwardRef<HTMLDivElement, SheetProps>(\n function Sheet({ open, onClose, children, side = 'right', title, description, glass, width = 320, className }, ref) {\n useScrollLock(open)\n useEscapeKey(open, onClose)\n\n if (!open) return null\n\n const isRight = side === 'right'\n const style: CSSProperties = { width: typeof width === 'number' ? `${width}px` : width }\n\n return (\n <div\n className=\"fixed inset-0 z-50 bg-black/50\"\n onClick={(e) => { if (e.target === e.currentTarget) onClose() }}\n data-component=\"sheet\"\n data-state=\"open\"\n >\n <div\n ref={ref}\n style={style}\n className={cx(\n 'gds-ctx fixed bottom-0 top-0 flex flex-col border gds-shadow-xl transition-transform duration-200',\n isRight ? 'right-0 border-l' : 'left-0 border-r',\n glass ? cx(glassClass(glass), 'border-white/10 bg-bg/60') : 'border-border bg-surface',\n className,\n )}\n >\n {(title !== undefined || description !== undefined) && (\n <div className=\"flex items-start justify-between gds-gap border-b border-border gds-pad-x-lg gds-pad-y-lg\">\n <div className=\"min-w-0\">\n {title !== undefined && <h2 className=\"text-sm font-semibold text-fg\">{title}</h2>}\n {description !== undefined && <p className=\"mt-0.5 gds-text-body text-fg-muted\">{description}</p>}\n </div>\n <button\n type=\"button\"\n onClick={onClose}\n className={cx('shrink-0 gds-radius-button p-1 text-fg-muted hover:text-fg', focusCls)}\n aria-label=\"Close\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\">\n <path d=\"M3 3l8 8M11 3l-8 8\" />\n </svg>\n </button>\n </div>\n )}\n <div className=\"flex-1 overflow-y-auto gds-pad-x-lg gds-pad-y-lg\">{children}</div>\n </div>\n </div>\n )\n },\n)\n","// slider-field — label + range slider + value display\nimport { forwardRef } from 'react'\n\nimport { RangeSlider } from '../l3-atoms/range-slider'\nimport { cx } from '../utils/cx'\n\ntype SliderFieldProps = Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> & {\n label: string\n value: number\n onChange: (v: number) => void\n min?: number\n max?: number\n step?: number\n unit?: string\n}\n\nconst SliderField = forwardRef<HTMLDivElement, SliderFieldProps>(\n function SliderField({ label, value, onChange, min = 0, max = 100, step = 1, unit, className, ...props }, ref) {\n return (\n <div ref={ref} className={cx('flex flex-col gap-1.5', className)} data-component=\"slider-field\" {...props}>\n <div className=\"flex items-center justify-between\">\n <label className=\"select-none gds-text-body text-fg-muted\">{label}</label>\n <span className=\"gds-text-body tabular-nums text-fg\">{value}{unit !== undefined ? ` ${unit}` : ''}</span>\n </div>\n <RangeSlider value={value} onChange={onChange} min={min} max={max} step={step} />\n </div>\n )\n },\n)\n\nexport { SliderField }\nexport type { SliderFieldProps }\n","// sortable-table — table with client-side column sorting\nimport { forwardRef, useMemo, useState } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype SortableColumn = {\n key: string\n header: string\n sortable?: boolean\n}\n\ntype SortState = {\n key: string\n dir: 'asc' | 'desc'\n}\n\ntype SortableTableProps = React.HTMLAttributes<HTMLDivElement> & {\n columns: SortableColumn[]\n data: Record<string, unknown>[]\n defaultSort?: SortState\n}\n\nexport const SortableTable = forwardRef<HTMLDivElement, SortableTableProps>(\n function SortableTable({ columns, data, defaultSort, className, ...props }, ref) {\n const [sort, setSort] = useState<SortState | undefined>(defaultSort)\n\n const sorted = useMemo(() => {\n if (sort === undefined) return data\n return [...data].sort((a, b) => {\n const av = String(a[sort.key] ?? '')\n const bv = String(b[sort.key] ?? '')\n const cmp = av.localeCompare(bv, undefined, { numeric: true })\n return sort.dir === 'asc' ? cmp : -cmp\n })\n }, [data, sort])\n\n function toggleSort(key: string) {\n if (sort?.key === key) {\n setSort({ key, dir: sort.dir === 'asc' ? 'desc' : 'asc' })\n } else {\n setSort({ key, dir: 'asc' })\n }\n }\n\n return (\n <div ref={ref} className={cx('overflow-hidden rounded-lg border border-border', className)} data-component=\"sortable-table\" {...props}>\n <table className=\"w-full text-left gds-text\">\n <thead>\n <tr className=\"border-b border-border bg-bg-tertiary/50\">\n {columns.map((col) => (\n <th\n key={col.key}\n className={cx(\n 'px-3 py-1.5 font-medium text-fg-muted',\n col.sortable !== false && 'cursor-pointer select-none hover:text-fg',\n )}\n onClick={col.sortable !== false ? () => toggleSort(col.key) : undefined}\n >\n <span className=\"inline-flex items-center gap-1\">\n {col.header}\n {sort?.key === col.key && (\n <span className=\"text-[10px]\">{sort.dir === 'asc' ? '▲' : '▼'}</span>\n )}\n </span>\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {sorted.map((row, i) => (\n <tr key={i} className=\"border-b border-border last:border-0 transition-colors hover:bg-bg-tertiary/30\">\n {columns.map((col) => (\n <td key={col.key} className=\"px-3 py-1.5 text-fg\">\n {String(row[col.key] ?? '')}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )\n },\n)\n\nexport type { SortableColumn, SortableTableProps, SortState }\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype StatSide = { label: string; value: number | string }\n\ntype StatComparisonProps = React.HTMLAttributes<HTMLDivElement> & {\n highlight?: 'left' | 'none' | 'right'\n left: StatSide\n right: StatSide\n}\n\nexport const StatComparison = forwardRef<HTMLDivElement, StatComparisonProps>(\n function StatComparison({ className, highlight = 'none', left, right, ...props }, ref) {\n const sideCls = (side: 'left' | 'right') =>\n cx(\n 'flex flex-1 flex-col items-center rounded-lg border border-border p-3',\n highlight === side && 'border-accent bg-accent/5',\n )\n\n return (\n <div\n className={cx('flex items-center gds-gap', className)}\n data-component=\"stat-comparison\"\n ref={ref}\n {...props}\n >\n <div className={sideCls('left')}>\n <span className=\"gds-text-label text-fg-muted\">{left.label}</span>\n <span className=\"text-lg font-semibold text-fg\">{left.value}</span>\n </div>\n <span className=\"shrink-0 text-xs font-medium text-fg-muted\">vs</span>\n <div className={sideCls('right')}>\n <span className=\"gds-text-label text-fg-muted\">{right.label}</span>\n <span className=\"text-lg font-semibold text-fg\">{right.value}</span>\n </div>\n </div>\n )\n },\n)\n\nexport type { StatComparisonProps }\n","// status-bar-component — application status bar\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type StatusBarComponentProps = {\n items: ReactNode[]\n className?: string\n}\n\nexport const StatusBarComponent = forwardRef<HTMLDivElement, StatusBarComponentProps>(\n function StatusBarComponent({ items, className }, ref) {\n return (\n <div\n ref={ref}\n className={cx(\n 'flex h-7 items-center border-t border-border bg-surface px-3 text-xs text-fg-muted select-none',\n className,\n )}\n data-component=\"status-bar\"\n >\n {items.map((item, i) => (\n <div key={i} className=\"flex items-center\">\n {i > 0 && <span className=\"mx-2 h-3 w-px bg-border\" />}\n <span>{item}</span>\n </div>\n ))}\n </div>\n )\n },\n)\n","// stepper — multi-step progress indicator with connecting lines\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type StepDef = {\n label: string\n description?: string\n}\n\nexport type StepperProps = React.HTMLAttributes<HTMLDivElement> & {\n steps: StepDef[]\n current: number\n orientation?: 'horizontal' | 'vertical'\n}\n\nconst checkSvg = (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M3 7.5l3 3 5-6\" />\n </svg>\n)\n\nexport const Stepper = forwardRef<HTMLDivElement, StepperProps>(\n function Stepper({ steps, current, orientation = 'horizontal', className, ...props }, ref) {\n const isHoriz = orientation === 'horizontal'\n\n return (\n <div\n ref={ref}\n className={cx(\n 'flex',\n isHoriz ? 'items-start' : 'flex-col',\n className,\n )}\n data-component=\"stepper\"\n role=\"list\"\n {...props}\n >\n {steps.map((step, i) => {\n const completed = i < current\n const active = i === current\n\n return (\n <div\n key={i}\n className={cx(\n 'flex',\n isHoriz ? 'flex-1 items-center' : 'items-start',\n )}\n role=\"listitem\"\n >\n <div className={cx('flex', isHoriz ? 'flex-col items-center' : 'items-start gds-gap')}>\n <div className=\"flex items-center\">\n {/* step circle */}\n <div\n className={cx(\n 'flex gds-sq-sm shrink-0 items-center justify-center gds-radius-badge gds-text-body font-medium transition-colors',\n completed && 'bg-accent text-accent-fg',\n active && 'border-2 border-accent bg-transparent text-accent ring-2 ring-accent/20',\n !completed && !active && 'bg-bg-tertiary text-fg-muted',\n )}\n >\n {completed ? checkSvg : i + 1}\n </div>\n </div>\n {/* label + description */}\n <div className={cx(isHoriz ? 'mt-2 text-center' : '')}>\n <p className={cx('gds-text-body font-medium', active ? 'text-fg' : 'text-fg-muted')}>{step.label}</p>\n {step.description !== undefined && (\n <p className=\"mt-0.5 gds-text-caption text-fg-muted\">{step.description}</p>\n )}\n </div>\n </div>\n\n {/* connecting line */}\n {i < steps.length - 1 && (\n isHoriz ? (\n <div className={cx(\n 'mx-2 mt-3.5 h-px flex-1',\n completed ? 'bg-accent' : 'bg-border',\n )} />\n ) : (\n <div className={cx(\n 'ml-3.5 mt-1 mb-1 w-px',\n 'min-h-6',\n completed ? 'bg-accent' : 'bg-border',\n )} />\n )\n )}\n </div>\n )\n })}\n </div>\n )\n },\n)\n","// tabs — horizontal tab bar with active indicator and optional counts\nimport { cva } from 'class-variance-authority'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\nimport type { VariantProps } from '../utils/types'\n\nexport type TabItem = {\n id: string\n label: string\n count?: number\n}\n\nconst tabVariants = cva(\n cx('relative inline-flex items-center border-b-2 transition-colors', focusCls),\n {\n variants: {\n size: {\n default: 'gds-pad-x gds-pad-y text-sm',\n sm: 'gds-pad-x-sm gds-pad-y-sm gds-text-body',\n },\n active: {\n true: 'border-accent text-accent',\n false: 'border-transparent text-fg-muted hover:text-fg',\n },\n },\n defaultVariants: {\n size: 'default',\n active: false,\n },\n },\n)\n\nexport type TabsProps = {\n tabs: TabItem[]\n active: string\n onChange: (id: string) => void\n glass?: boolean\n size?: VariantProps<typeof tabVariants>['size']\n className?: string\n}\n\nexport function Tabs({ tabs, active, onChange, glass, size = 'default', className }: TabsProps) {\n return (\n <div\n className={cx(\n 'flex border-b border-border',\n glass ? cx('rounded-t-lg border-white/10 bg-bg/60', glassClass(glass)) : '',\n className,\n )}\n data-component=\"tabs\"\n role=\"tablist\"\n >\n {tabs.map((tab) => {\n const isActive = tab.id === active\n return (\n <button\n key={tab.id}\n type=\"button\"\n role=\"tab\"\n aria-selected={isActive}\n onClick={() => onChange(tab.id)}\n className={tabVariants({ size, active: isActive })}\n >\n {tab.label}\n {tab.count !== undefined && (\n <span className=\"ml-1.5 gds-radius-badge bg-fg-muted/10 px-1.5 gds-text-caption\">\n {tab.count}\n </span>\n )}\n </button>\n )\n })}\n </div>\n )\n}\n","// tab-group — tabs with content panels in one composed component\nimport type { ReactNode } from 'react'\nimport { useState } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\nimport { Tabs } from './tabs'\n\nexport type TabGroupTab = {\n id: string\n label: string\n content: ReactNode\n disabled?: boolean\n}\n\nexport type TabGroupProps = {\n tabs: TabGroupTab[]\n defaultTab?: string\n glass?: boolean\n className?: string\n}\n\nexport function TabGroup({ tabs, defaultTab, glass, className }: TabGroupProps) {\n const initialTab = defaultTab ?? (tabs.length > 0 ? tabs[0].id : '')\n const [activeTab, setActiveTab] = useState(initialTab)\n\n const tabItems = tabs.map((t) => ({\n id: t.id,\n label: t.label,\n }))\n\n const handleChange = (id: string) => {\n const tab = tabs.find((t) => t.id === id)\n if (tab !== undefined && tab.disabled !== true) {\n setActiveTab(id)\n }\n }\n\n const activeContent = tabs.find((t) => t.id === activeTab)\n\n return (\n <div\n className={cx(\n 'gds-ctx gds-radius-card border border-border overflow-hidden',\n glass !== undefined && glass !== false\n ? cx('border-white/10 bg-bg/60', glassClass(glass))\n : '',\n className,\n )}\n data-component=\"tab-group\"\n >\n <Tabs\n tabs={tabItems}\n active={activeTab}\n onChange={handleChange}\n size=\"sm\"\n />\n <div className=\"gds-pad\">\n {activeContent !== undefined ? activeContent.content : null}\n </div>\n </div>\n )\n}\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype TaskItemPriority = 'low' | 'medium' | 'high' | 'critical'\n\ntype TaskItemProps = React.HTMLAttributes<HTMLDivElement> & {\n completed?: boolean\n dueDate?: string\n onToggle?: () => void\n priority?: TaskItemPriority\n title: string\n}\n\nconst priorityCls: Record<TaskItemPriority, string> = {\n low: 'bg-success/15 text-success',\n medium: 'bg-warning/15 text-warning',\n high: 'bg-danger/15 text-danger',\n critical: 'bg-danger text-white',\n}\n\nconst TaskItem = forwardRef<HTMLDivElement, TaskItemProps>(\n function TaskItem({ className, completed = false, dueDate, onToggle, priority, title, ...props }, ref) {\n return (\n <div\n className={cx('flex items-center gap-2 rounded px-2 py-1.5 text-sm', className)}\n data-component=\"task-item\"\n data-completed={completed}\n ref={ref}\n {...props}\n >\n <input\n checked={completed}\n className=\"shrink-0 accent-accent\"\n onChange={onToggle}\n type=\"checkbox\"\n />\n <span className={cx('flex-1 truncate', completed && 'line-through text-fg-muted')}>{title}</span>\n {priority !== undefined && (\n <span className={cx('rounded px-1.5 py-0.5 text-[10px] font-medium uppercase', priorityCls[priority])}>{priority}</span>\n )}\n {dueDate !== undefined && (\n <span className=\"shrink-0 text-xs text-fg-muted\">{dueDate}</span>\n )}\n </div>\n )\n },\n)\n\nexport { TaskItem }\nexport type { TaskItemPriority, TaskItemProps }\n","// time-picker-grid — hour/minute scrollable columns dropdown (internal)\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\ntype TimePickerGridProps = {\n glass?: boolean\n hours: number[]\n minutes: number[]\n onHourClick: (hour: number) => void\n onMinuteClick: (minute: number) => void\n selectedHour: number | null\n selectedMinute: number | null\n}\n\nfunction pad(n: number): string {\n if (n < 10) return `0${n}`\n return `${n}`\n}\n\nfunction TimePickerGrid({\n glass,\n hours,\n minutes,\n onHourClick,\n onMinuteClick,\n selectedHour,\n selectedMinute,\n}: TimePickerGridProps) {\n return (\n <div\n className={cx(\n 'absolute left-0 right-0 z-50 mt-1 flex animate-popup gds-radius-popover border gds-shadow-lg',\n glass\n ? cx(glassClass(glass), 'border-white/10 bg-bg/60')\n : 'border-border bg-surface',\n )}\n >\n <div className=\"flex-1 overflow-y-auto border-r border-border\" style={{ maxHeight: 200 }}>\n <div className=\"px-2 py-1 text-[10px] font-medium uppercase tracking-wider text-fg-muted/50\">\n Hour\n </div>\n {hours.map((h) => (\n <button\n className={cx(\n 'flex w-full items-center justify-center py-1.5 text-sm transition-colors',\n h === selectedHour\n ? 'bg-accent/10 font-medium text-accent'\n : 'text-fg hover:bg-bg-tertiary',\n )}\n key={h}\n onClick={() => onHourClick(h)}\n type=\"button\"\n >\n {pad(h)}\n </button>\n ))}\n </div>\n <div className=\"flex-1 overflow-y-auto\" style={{ maxHeight: 200 }}>\n <div className=\"px-2 py-1 text-[10px] font-medium uppercase tracking-wider text-fg-muted/50\">\n Min\n </div>\n {minutes.map((m) => (\n <button\n className={cx(\n 'flex w-full items-center justify-center py-1.5 text-sm transition-colors',\n m === selectedMinute\n ? 'bg-accent/10 font-medium text-accent'\n : 'text-fg hover:bg-bg-tertiary',\n )}\n key={m}\n onClick={() => onMinuteClick(m)}\n type=\"button\"\n >\n {pad(m)}\n </button>\n ))}\n </div>\n </div>\n )\n}\n\nexport { pad, TimePickerGrid }\nexport type { TimePickerGridProps }\n","// time-picker — hour:minute selector with scrollable columns\nimport { forwardRef, useCallback, useMemo, useRef, useState } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\nimport { useClickOutside, useEscapeKey } from '../utils/hooks'\nimport { pad, TimePickerGrid } from './time-picker-grid'\n\ntype TimePickerProps = {\n className?: string\n disabled?: boolean\n error?: boolean\n glass?: boolean\n minuteStep?: number\n onChange: (value: string | null) => void\n placeholder?: string\n value: string | null\n}\n\nfunction ChevronIcon({ open }: { open: boolean }) {\n return (\n <svg\n className={cx('h-3 w-3 text-fg-muted transition-transform', open && 'rotate-180')}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n viewBox=\"0 0 12 12\"\n >\n <path d=\"M3 4.5l3 3 3-3\" />\n </svg>\n )\n}\n\nexport const TimePicker = forwardRef<HTMLDivElement, TimePickerProps>(\n function TimePicker(\n {\n className,\n disabled = false,\n error = false,\n glass,\n minuteStep = 15,\n onChange,\n placeholder = 'Select time',\n value,\n },\n ref,\n ) {\n const [open, setOpen] = useState(false)\n const containerRef = useRef<HTMLDivElement>(null)\n const mergedRef = (ref ?? containerRef) as React.RefObject<HTMLDivElement>\n\n const hours = useMemo(() => Array.from({ length: 24 }, (_, i) => i), [])\n const minutes = useMemo(() => {\n const step = Math.max(1, Math.min(60, minuteStep))\n const result: number[] = []\n let m = 0\n while (m < 60) {\n result.push(m)\n m += step\n }\n return result\n }, [minuteStep])\n\n const selectedHour = useMemo(() => {\n if (value === null) return null\n const parts = value.split(':')\n return parseInt(parts[0], 10)\n }, [value])\n\n const selectedMinute = useMemo(() => {\n if (value === null) return null\n const parts = value.split(':')\n return parseInt(parts[1], 10)\n }, [value])\n\n const handleOpen = useCallback(() => {\n if (disabled) return\n setOpen(true)\n }, [disabled])\n\n const handleClose = useCallback(() => {\n setOpen(false)\n }, [])\n\n const handleHourClick = useCallback(\n (hour: number) => {\n const minute = selectedMinute ?? 0\n onChange(`${pad(hour)}:${pad(minute)}`)\n },\n [selectedMinute, onChange],\n )\n\n const handleMinuteClick = useCallback(\n (minute: number) => {\n const hour = selectedHour ?? 0\n onChange(`${pad(hour)}:${pad(minute)}`)\n },\n [selectedHour, onChange],\n )\n\n useClickOutside(mergedRef, open, handleClose)\n useEscapeKey(open, handleClose)\n\n return (\n <div\n ref={mergedRef}\n className={cx('relative', className)}\n data-component=\"time-picker\"\n data-state={open ? 'open' : 'closed'}\n >\n <button\n className={cx(\n 'flex w-full items-center justify-between gds-h gds-radius-popover gds-pad-x border bg-transparent text-left text-sm text-fg transition-colors',\n focusCls,\n !error && 'border-border hover:border-fg-muted',\n error && 'border-danger',\n error && 'focus-visible:ring-danger',\n disabled && 'cursor-not-allowed opacity-50',\n glassClass(glass),\n glass === true && 'border-white/10 bg-bg/60',\n )}\n disabled={disabled}\n onClick={handleOpen}\n type=\"button\"\n >\n <span className={cx(value !== null ? 'text-fg' : 'text-fg-muted')}>\n {value ?? placeholder}\n </span>\n <ChevronIcon open={open} />\n </button>\n\n {open && (\n <TimePickerGrid\n glass={glass}\n hours={hours}\n minutes={minutes}\n onHourClick={handleHourClick}\n onMinuteClick={handleMinuteClick}\n selectedHour={selectedHour}\n selectedMinute={selectedMinute}\n />\n )}\n </div>\n )\n },\n)\n\nexport type { TimePickerProps }\n","import type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype TimelineEntryVariant = 'danger' | 'default' | 'success' | 'warning'\n\ntype TimelineEntryProps = React.HTMLAttributes<HTMLDivElement> & {\n children: ReactNode\n icon?: ReactNode\n last?: boolean\n variant?: TimelineEntryVariant\n}\n\nconst dotColor: Record<TimelineEntryVariant, string> = {\n default: 'bg-fg-muted/40',\n success: 'bg-success',\n warning: 'bg-warning',\n danger: 'bg-danger',\n}\n\nexport const TimelineEntry = forwardRef<HTMLDivElement, TimelineEntryProps>(\n function TimelineEntry({ children, className, icon, last = false, variant = 'default', ...props }, ref) {\n return (\n <div\n className={cx('relative flex gap-3', className)}\n data-component=\"timeline-entry\"\n ref={ref}\n {...props}\n >\n <div className=\"flex flex-col items-center\">\n {icon !== undefined ? (\n <span className=\"flex h-5 w-5 shrink-0 items-center justify-center\">{icon}</span>\n ) : (\n <span className={cx('mt-1.5 h-2.5 w-2.5 shrink-0 rounded-full', dotColor[variant])} />\n )}\n {!last && <span className=\"mt-1 w-px flex-1 bg-border\" />}\n </div>\n <div className=\"flex-1 pb-4\">{children}</div>\n </div>\n )\n },\n)\n\nexport type { TimelineEntryProps, TimelineEntryVariant }\n","// toast — notification card with variant, title, description, and action\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\n\nexport type ToastVariant = 'danger' | 'default' | 'success' | 'warning'\n\nconst borderColorMap: Record<ToastVariant, string> = {\n default: 'border-l-accent',\n success: 'border-l-success',\n warning: 'border-l-warning',\n danger: 'border-l-danger',\n}\n\nconst iconMap: Record<ToastVariant, ReactNode> = {\n default: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\">\n <circle cx=\"8\" cy=\"8\" r=\"6.5\" /><path d=\"M8 5.5h.01M8 7.5v3\" />\n </svg>\n ),\n success: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"8\" cy=\"8\" r=\"6.5\" /><path d=\"M5.5 8l2 2 3-3.5\" />\n </svg>\n ),\n warning: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\">\n <path d=\"M7.13 2.5l-5.5 10h11l-5.5-10z\" /><path d=\"M7.63 6.5v2.5M7.63 11h.01\" />\n </svg>\n ),\n danger: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\">\n <circle cx=\"8\" cy=\"8\" r=\"6.5\" /><path d=\"M5.5 5.5l5 5M10.5 5.5l-5 5\" />\n </svg>\n ),\n}\n\nconst iconColorMap: Record<ToastVariant, string> = {\n default: 'text-accent',\n success: 'text-success',\n warning: 'text-warning',\n danger: 'text-danger',\n}\n\nexport type ToastProps = React.HTMLAttributes<HTMLDivElement> & {\n title: string\n description?: string\n variant?: ToastVariant\n onClose?: () => void\n action?: ReactNode\n}\n\nexport const Toast = forwardRef<HTMLDivElement, ToastProps>(\n function Toast({ title, description, variant = 'default', onClose, action, className, ...props }, ref) {\n return (\n <div\n ref={ref}\n className={cx(\n 'flex items-start gds-gap gds-radius-popover border border-border border-l-4 bg-surface gds-pad-x gds-pad-y gds-shadow-lg',\n borderColorMap[variant],\n className,\n )}\n data-component=\"toast\"\n data-variant={variant}\n role=\"status\"\n {...props}\n >\n <span className={cx('mt-px shrink-0', iconColorMap[variant])}>{iconMap[variant]}</span>\n <div className=\"min-w-0 flex-1\">\n <p className=\"gds-text-body font-medium text-fg\">{title}</p>\n {description !== undefined && <p className=\"mt-0.5 gds-text-label text-fg-muted\">{description}</p>}\n </div>\n {action !== undefined && <div className=\"shrink-0\">{action}</div>}\n {onClose !== undefined && (\n <button\n type=\"button\"\n onClick={onClose}\n className={cx('shrink-0 gds-radius-button p-0.5 text-fg-muted opacity-60 hover:opacity-100', focusCls)}\n aria-label=\"Dismiss\"\n >\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\">\n <path d=\"M2 2l8 8M10 2l-8 8\" />\n </svg>\n </button>\n )}\n </div>\n )\n },\n)\n","// toggle-field — label + switch + optional description for settings\nimport { forwardRef } from 'react'\n\nimport { Switch } from '../l3-atoms/switch'\nimport { cx } from '../utils/cx'\n\ntype ToggleFieldProps = Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> & {\n label: string\n description?: string\n checked: boolean\n onChange: (v: boolean) => void\n disabled?: boolean\n}\n\nconst ToggleField = forwardRef<HTMLDivElement, ToggleFieldProps>(\n function ToggleField({ label, description, checked, onChange, disabled, className, ...props }, ref) {\n return (\n <div ref={ref} className={cx('flex items-center justify-between gap-4', className)} data-component=\"toggle-field\" {...props}>\n <div className=\"flex flex-col\">\n <span className=\"select-none gds-text-body text-fg\">{label}</span>\n {description !== undefined && (\n <span className=\"select-none text-xs text-fg-muted\">{description}</span>\n )}\n </div>\n <Switch checked={checked} onChange={onChange} disabled={disabled} />\n </div>\n )\n },\n)\n\nexport { ToggleField }\nexport type { ToggleFieldProps }\n","import type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype ToolbarGroupProps = React.HTMLAttributes<HTMLDivElement> & {\n children: ReactNode\n}\n\nexport const ToolbarGroup = forwardRef<HTMLDivElement, ToolbarGroupProps>(\n function ToolbarGroup({ children, className, ...props }, ref) {\n return (\n <div\n className={cx(\n 'inline-flex items-center overflow-hidden rounded-md border border-border',\n '[&>*]:rounded-none [&>*]:border-0 [&>*]:border-r [&>*]:border-border [&>*:last-child]:border-r-0',\n className,\n )}\n data-component=\"toolbar-group\"\n ref={ref}\n role=\"toolbar\"\n {...props}\n >\n {children}\n </div>\n )\n },\n)\n\nexport type { ToolbarGroupProps }\n","import { forwardRef } from 'react'\n\nimport { Avatar } from '../l3-atoms/avatar'\nimport { cx } from '../utils/cx'\n\ntype UserInfoSize = 'sm' | 'default'\n\ntype UserInfoProps = React.HTMLAttributes<HTMLDivElement> & {\n avatar?: string\n name: string\n role?: string\n size?: UserInfoSize\n}\n\nexport const UserInfo = forwardRef<HTMLDivElement, UserInfoProps>(\n function UserInfo({ avatar, className, name, role, size = 'default', ...props }, ref) {\n const avatarSize = size === 'sm' ? 'sm' : 'default'\n const textCls = size === 'sm' ? 'text-xs' : 'text-sm'\n\n return (\n <div\n className={cx('inline-flex items-center gap-2 select-none', className)}\n data-component=\"user-info\"\n ref={ref}\n {...props}\n >\n <Avatar name={name} size={avatarSize} src={avatar} />\n <div className=\"flex flex-col\">\n <span className={cx('font-medium text-fg leading-tight', textCls)}>{name}</span>\n {role !== undefined && (\n <span className={cx('text-fg-muted leading-tight', size === 'sm' ? 'text-[10px]' : 'text-xs')}>{role}</span>\n )}\n </div>\n </div>\n )\n },\n)\n\nexport type { UserInfoProps, UserInfoSize }\n","// user-menu — avatar + name trigger with dropdown menu items\nimport type { ReactNode } from 'react'\nimport { forwardRef, useState } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype UserMenuItem = { id: string; label: string; icon?: ReactNode; danger?: boolean }\n\ntype UserMenuProps = {\n name: string\n avatar?: string\n role?: string\n items: UserMenuItem[]\n onSelect: (id: string) => void\n className?: string\n}\n\nconst UserMenu = forwardRef<HTMLDivElement, UserMenuProps>(\n function UserMenu({ name, avatar, role, items, onSelect, className }, ref) {\n const [open, setOpen] = useState(false)\n const initials = name.split(' ').map((w) => w[0]).join('').slice(0, 2).toUpperCase()\n\n return (\n <div ref={ref} className={cx('relative', className)} data-component=\"user-menu\">\n <button type=\"button\" className=\"flex items-center gap-2 rounded-lg px-2 py-1.5 hover:bg-bg-tertiary transition-colors select-none\" onClick={() => setOpen((p) => !p)} data-testid=\"user-menu-trigger\">\n {avatar !== undefined\n ? <img src={avatar} alt={name} className=\"h-7 w-7 rounded-full object-cover\" />\n : <div className=\"flex h-7 w-7 items-center justify-center rounded-full bg-accent/10 text-xs font-semibold text-accent\">{initials}</div>}\n <span className=\"text-sm font-medium text-fg\">{name}</span>\n </button>\n {open && (\n <div className=\"absolute right-0 top-full z-50 mt-1 min-w-[160px] rounded-lg border border-border bg-surface py-1 shadow-lg animate-popup\" data-testid=\"user-menu-dropdown\">\n {role !== undefined && <div className=\"px-3 py-1.5 text-xs text-fg-muted\">{role}</div>}\n {items.map((item) => (\n <button key={item.id} type=\"button\" className={cx('flex w-full items-center gap-2 px-3 py-1.5 text-sm hover:bg-bg-tertiary transition-colors select-none', item.danger === true ? 'text-danger' : 'text-fg')} onClick={() => { onSelect(item.id); setOpen(false) }}>\n {item.icon !== undefined && <span className=\"shrink-0\">{item.icon}</span>}\n {item.label}\n </button>\n ))}\n </div>\n )}\n </div>\n )\n },\n)\n\nexport { UserMenu }\nexport type { UserMenuItem, UserMenuProps }\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype VersionBadgeProps = React.HTMLAttributes<HTMLSpanElement> & {\n latest?: string\n version: string\n}\n\nconst VersionBadge = forwardRef<HTMLSpanElement, VersionBadgeProps>(\n function VersionBadge({ className, latest, version, ...props }, ref) {\n const hasUpdate = latest !== undefined && latest !== version\n\n return (\n <span\n className={cx(\n 'inline-flex items-center gap-1.5 rounded-full px-2.5 py-0.5 text-xs font-medium tabular-nums',\n hasUpdate ? 'bg-warning/15 text-warning' : 'bg-surface text-fg-muted',\n className,\n )}\n data-component=\"version-badge\"\n data-has-update={hasUpdate}\n ref={ref}\n {...props}\n >\n v{version}\n {hasUpdate && (\n <svg className=\"shrink-0\" fill=\"currentColor\" height={12} viewBox=\"0 0 24 24\" width={12}>\n <path d=\"M12 2L12 16M12 16L7 11M12 16L17 11M5 20H19\" fill=\"none\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} />\n </svg>\n )}\n </span>\n )\n },\n)\n\nexport { VersionBadge }\nexport type { VersionBadgeProps }\n","// wizard — multi-step wizard with numbered circles and content\nimport type { ReactNode } from 'react'\nimport { forwardRef, useState } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype WizardStep = {\n title: string\n content: ReactNode\n}\n\ntype WizardProps = Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> & {\n steps: WizardStep[]\n currentStep?: number\n onStepChange?: (step: number) => void\n}\n\nexport const Wizard = forwardRef<HTMLDivElement, WizardProps>(\n function Wizard({ steps, currentStep, onStepChange, className, ...props }, ref) {\n const [internal, setInternal] = useState(0)\n const active = currentStep ?? internal\n\n function goTo(step: number) {\n if (onStepChange !== undefined) {\n onStepChange(step)\n } else {\n setInternal(step)\n }\n }\n\n return (\n <div ref={ref} className={cx('flex flex-col gap-4', className)} data-component=\"wizard\" {...props}>\n <div className=\"flex items-center gap-0\">\n {steps.map((step, i) => {\n const done = i < active\n const isCurrent = i === active\n return (\n <div key={i} className=\"flex items-center\">\n {i > 0 && (\n <div className={cx('h-px w-8', done ? 'bg-accent' : 'bg-border')} />\n )}\n <button\n type=\"button\"\n className={cx(\n 'flex h-7 w-7 items-center justify-center rounded-full text-xs font-medium transition-colors',\n done && 'bg-accent text-white',\n isCurrent && 'bg-accent/20 text-accent ring-2 ring-accent',\n !done && !isCurrent && 'bg-bg-tertiary text-fg-muted',\n )}\n onClick={() => goTo(i)}\n >\n {i + 1}\n </button>\n </div>\n )\n })}\n </div>\n <div className=\"text-xs font-medium text-fg-muted\">{steps[active]?.title}</div>\n <div>{steps[active]?.content}</div>\n </div>\n )\n },\n)\n\nexport type { WizardProps, WizardStep }\n","// activity-feed — timestamped event log with avatars\nimport { forwardRef } from 'react'\n\nimport { Avatar } from '../l3-atoms/avatar'\nimport { cx } from '../utils/cx'\n\ntype ActivityFeedItem = {\n action: string\n avatar?: string\n id: string\n target?: string\n timestamp: string\n user: string\n}\n\ntype ActivityFeedProps = {\n className?: string\n items: ActivityFeedItem[]\n}\n\nexport const ActivityFeed = forwardRef<HTMLDivElement, ActivityFeedProps>(\n function ActivityFeed({ className, items }, ref) {\n return (\n <div\n ref={ref}\n className={cx('flex flex-col', className)}\n data-component=\"activity-feed\"\n role=\"list\"\n >\n {items.map((item) => (\n <div\n key={item.id}\n className=\"flex items-start gap-3 gds-pad-x gds-pad-y-sm\"\n role=\"listitem\"\n >\n <Avatar name={item.user} src={item.avatar} size=\"sm\" />\n <div className=\"min-w-0 flex-1\">\n <div className=\"gds-text-body\">\n <span className=\"font-medium text-fg\">{item.user}</span>\n <span className=\"text-fg-muted\"> {item.action}</span>\n {item.target !== undefined && (\n <span className=\"font-medium text-fg\"> {item.target}</span>\n )}\n </div>\n <div className=\"mt-0.5 gds-text-caption text-fg-muted\">{item.timestamp}</div>\n </div>\n </div>\n ))}\n </div>\n )\n },\n)\n\nexport type { ActivityFeedItem, ActivityFeedProps }\n","// animate-presence — animates children on mount/unmount\nimport type { ReactNode } from 'react'\nimport { forwardRef, useEffect, useRef, useState } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype AnimatePresenceAnimation = 'fade' | 'scale' | 'slide-up' | 'slide-down'\n\nexport type AnimatePresenceProps = {\n children: ReactNode\n animation?: AnimatePresenceAnimation\n duration?: number\n className?: string\n}\n\nconst enterClassMap: Record<AnimatePresenceAnimation, string> = {\n fade: 'animate-fade-in',\n scale: 'animate-scale-in',\n 'slide-up': 'animate-slide-up',\n 'slide-down': 'animate-slide-down',\n}\n\nconst exitClassMap: Record<AnimatePresenceAnimation, string> = {\n fade: 'animate-fade-out',\n scale: 'animate-scale-out',\n 'slide-up': 'animate-slide-down',\n 'slide-down': 'animate-slide-up',\n}\n\nexport const AnimatePresence = forwardRef<HTMLDivElement, AnimatePresenceProps>(\n function AnimatePresence(\n { children, animation = 'fade', duration = 200, className },\n ref,\n ) {\n const [rendered, setRendered] = useState(children !== null && children !== undefined && children !== false)\n const [exiting, setExiting] = useState(false)\n const prevChildrenRef = useRef<ReactNode>(children)\n const timerRef = useRef<ReturnType<typeof setTimeout>>(null)\n\n const hasChildren = children !== null && children !== undefined && children !== false\n\n useEffect(() => {\n if (hasChildren) {\n // entering\n if (timerRef.current !== null) {\n clearTimeout(timerRef.current)\n timerRef.current = null\n }\n setExiting(false)\n setRendered(true)\n prevChildrenRef.current = children\n } else if (rendered && !exiting) {\n // exiting\n setExiting(true)\n timerRef.current = setTimeout(() => {\n setRendered(false)\n setExiting(false)\n timerRef.current = null\n }, duration)\n }\n }, [hasChildren, children, duration, rendered, exiting])\n\n // cleanup timer on unmount\n useEffect(() => {\n return () => {\n if (timerRef.current !== null) clearTimeout(timerRef.current)\n }\n }, [])\n\n if (!rendered) return null\n\n const animClass = exiting ? exitClassMap[animation] : enterClassMap[animation]\n const displayChildren = exiting ? prevChildrenRef.current : children\n\n return (\n <div\n ref={ref}\n className={cx(animClass, className)}\n style={{ animationDuration: `${duration}ms` }}\n data-component=\"animate-presence\"\n data-state={exiting ? 'exiting' : 'entering'}\n >\n {displayChildren}\n </div>\n )\n },\n)\n","import type { ReactNode } from 'react'\nimport { Children, forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype AnimatedListAnimation = 'fade' | 'scale' | 'slide-left' | 'slide-up'\n\ntype AnimatedListProps = React.HTMLAttributes<HTMLDivElement> & {\n animation?: AnimatedListAnimation\n children: ReactNode\n stagger?: number\n}\n\nconst animationClassMap: Record<AnimatedListAnimation, string> = {\n fade: 'animate-fade-in',\n scale: 'animate-scale-in',\n 'slide-left': 'animate-slide-left',\n 'slide-up': 'animate-slide-up',\n}\n\nexport const AnimatedList = forwardRef<HTMLDivElement, AnimatedListProps>(\n function AnimatedList(\n { animation = 'slide-up', children, className, stagger = 50, ...props },\n ref,\n ) {\n const items = Children.toArray(children)\n\n return (\n <div\n className={cx('flex flex-col', className)}\n data-component=\"animated-list\"\n ref={ref}\n {...props}\n >\n {items.map((child, index) => (\n <div\n key={index}\n className={animationClassMap[animation]}\n style={{ animationDelay: `${index * stagger}ms` }}\n >\n {child}\n </div>\n ))}\n </div>\n )\n },\n)\n\nexport type { AnimatedListAnimation, AnimatedListProps }\n","// audio-player — compact audio player with progress bar\nimport { forwardRef, useCallback, useRef, useState } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\nexport type AudioPlayerProps = {\n src: string\n title?: string\n glass?: boolean\n className?: string\n}\n\nfunction formatTime(seconds: number): string {\n const m = Math.floor(seconds / 60)\n const s = Math.floor(seconds % 60)\n return `${m}:${s.toString().padStart(2, '0')}`\n}\n\nexport const AudioPlayer = forwardRef<HTMLDivElement, AudioPlayerProps>(\n function AudioPlayer({ src, title, glass, className }, ref) {\n const audioRef = useRef<HTMLAudioElement>(null)\n const [playing, setPlaying] = useState(false)\n const [currentTime, setCurrentTime] = useState(0)\n const [duration, setDuration] = useState(0)\n\n const togglePlay = useCallback(() => {\n const audio = audioRef.current\n if (audio === null) return\n if (audio.paused) {\n audio.play().catch(() => {})\n setPlaying(true)\n } else {\n audio.pause()\n setPlaying(false)\n }\n }, [])\n\n const handleTimeUpdate = useCallback(() => {\n const audio = audioRef.current\n if (audio === null) return\n setCurrentTime(audio.currentTime)\n }, [])\n\n const handleLoadedMetadata = useCallback(() => {\n const audio = audioRef.current\n if (audio === null) return\n setDuration(audio.duration)\n }, [])\n\n const handleEnded = useCallback(() => {\n setPlaying(false)\n }, [])\n\n const handleSeek = useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n const audio = audioRef.current\n if (audio === null) return\n const rect = e.currentTarget.getBoundingClientRect()\n const ratio = (e.clientX - rect.left) / rect.width\n audio.currentTime = ratio * duration\n },\n [duration],\n )\n\n const progressPercent = duration > 0 ? (currentTime / duration) * 100 : 0\n\n return (\n <div\n ref={ref}\n className={cx(\n 'flex items-center gap-2 gds-radius-card gds-pad-x gds-pad-y',\n 'border border-border bg-bg-secondary',\n glassClass(glass),\n glass === true && 'border-white/10 bg-bg/60',\n className,\n )}\n data-component=\"audio-player\"\n >\n <audio\n ref={audioRef}\n src={src}\n onTimeUpdate={handleTimeUpdate}\n onLoadedMetadata={handleLoadedMetadata}\n onEnded={handleEnded}\n data-testid=\"audio-element\"\n />\n\n {/* play/pause */}\n <button\n type=\"button\"\n onClick={togglePlay}\n className={cx('shrink-0 text-fg', focusCls)}\n aria-label={playing ? 'Pause' : 'Play'}\n data-testid=\"play-button\"\n >\n {playing ? (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <rect x=\"3\" y=\"2\" width=\"4\" height=\"12\" rx=\"1\" />\n <rect x=\"9\" y=\"2\" width=\"4\" height=\"12\" rx=\"1\" />\n </svg>\n ) : (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <path d=\"M4 2l10 6-10 6V2z\" />\n </svg>\n )}\n </button>\n\n {/* title */}\n {title !== undefined && (\n <span className=\"shrink-0 select-none text-xs text-fg-muted\" data-testid=\"title\">\n {title}\n </span>\n )}\n\n {/* progress bar */}\n <div\n className={cx('relative h-1 flex-1 cursor-pointer rounded-full bg-bg-tertiary', focusCls)}\n onClick={handleSeek}\n role=\"slider\"\n aria-label=\"Seek\"\n aria-valuemin={0}\n aria-valuemax={Math.floor(duration)}\n aria-valuenow={Math.floor(currentTime)}\n tabIndex={0}\n data-testid=\"progress-bar\"\n >\n <div\n className=\"absolute inset-y-0 left-0 rounded-full bg-accent\"\n style={{ width: `${progressPercent}%` }}\n />\n </div>\n\n {/* time */}\n <span className=\"shrink-0 select-none text-xs tabular-nums text-fg-muted\" data-testid=\"time-display\">\n {formatTime(currentTime)} / {formatTime(duration)}\n </span>\n </div>\n )\n },\n)\n","import { forwardRef } from 'react'\n\nimport { AuditEntry } from '../l4-molecules/audit-entry'\nimport { cx } from '../utils/cx'\n\ntype AuditLogEntry = {\n action: string\n id: string\n target?: string\n timestamp: string\n user: string\n variant?: 'danger' | 'default' | 'success' | 'warning'\n}\n\ntype AuditLogProps = React.HTMLAttributes<HTMLDivElement> & {\n entries: AuditLogEntry[]\n}\n\nexport const AuditLog = forwardRef<HTMLDivElement, AuditLogProps>(\n function AuditLog({ className, entries, ...props }, ref) {\n return (\n <div\n className={cx('flex flex-col', className)}\n data-component=\"audit-log\"\n ref={ref}\n {...props}\n >\n {entries.map((entry, i) => (\n <div key={entry.id} className={cx('gds-pad-x gds-pad-y', i % 2 === 1 && 'bg-surface/50')}>\n <AuditEntry\n action={entry.action}\n target={entry.target}\n timestamp={entry.timestamp}\n user={entry.user}\n variant={entry.variant ?? 'default'}\n />\n </div>\n ))}\n </div>\n )\n },\n)\n\nexport type { AuditLogEntry, AuditLogProps }\n","import { forwardRef } from 'react'\n\nimport { Avatar } from '../l3-atoms/avatar'\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\ntype AvatarListUser = {\n name: string\n role?: string\n src?: string\n status?: 'away' | 'busy' | 'offline' | 'online'\n}\n\ntype AvatarListProps = React.HTMLAttributes<HTMLDivElement> & {\n users: AvatarListUser[]\n onSelect?: (name: string) => void\n compact?: boolean\n glass?: boolean\n className?: string\n}\n\nexport const AvatarList = forwardRef<HTMLDivElement, AvatarListProps>(\n function AvatarList({ users, onSelect, compact = false, glass, className, ...props }, ref) {\n return (\n <div\n className={cx(\n 'gds-radius-popover overflow-hidden border border-border',\n glassClass(glass),\n className,\n )}\n data-component=\"avatar-list\"\n ref={ref}\n {...props}\n >\n {users.map((user) => {\n const content = (\n <>\n <Avatar name={user.name} src={user.src} status={user.status} size=\"sm\" />\n <div className=\"min-w-0 flex-1\">\n <div className=\"truncate gds-text-body font-medium text-fg\">{user.name}</div>\n {compact !== true && user.role !== undefined && (\n <div className=\"truncate gds-text-caption text-fg-muted\">{user.role}</div>\n )}\n </div>\n </>\n )\n\n const rowCls = cx(\n 'flex items-center gds-gap gds-pad-x gds-pad-y',\n 'border-b border-border last:border-b-0',\n onSelect !== undefined && `cursor-pointer transition-colors hover:bg-bg-tertiary/30 ${focusCls}`,\n )\n\n if (onSelect !== undefined) {\n return (\n <button\n key={user.name}\n type=\"button\"\n className={cx(rowCls, 'w-full text-left')}\n onClick={() => onSelect(user.name)}\n >\n {content}\n </button>\n )\n }\n\n return (\n <div key={user.name} className={rowCls}>\n {content}\n </div>\n )\n })}\n </div>\n )\n },\n)\n\nexport type { AvatarListProps, AvatarListUser }\n","// calendar-utils — date grid computation for calendar component\n\nexport const WEEKDAYS = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']\n\nexport const MONTHS = [\n 'January', 'February', 'March', 'April', 'May', 'June',\n 'July', 'August', 'September', 'October', 'November', 'December',\n]\n\nexport function isSameDay(a: Date, b: Date): boolean {\n return a.getFullYear() === b.getFullYear()\n && a.getMonth() === b.getMonth()\n && a.getDate() === b.getDate()\n}\n\nexport function isDisabled(day: Date, min?: Date, max?: Date): boolean {\n if (min !== undefined && day < new Date(min.getFullYear(), min.getMonth(), min.getDate())) {\n return true\n }\n if (max !== undefined && day > new Date(max.getFullYear(), max.getMonth(), max.getDate())) {\n return true\n }\n return false\n}\n\nfunction getDaysInMonth(year: number, month: number): Date[] {\n const days: Date[] = []\n const date = new Date(year, month, 1)\n while (date.getMonth() === month) {\n days.push(new Date(date))\n date.setDate(date.getDate() + 1)\n }\n return days\n}\n\nexport function getCalendarGrid(year: number, month: number): (Date | null)[] {\n const days = getDaysInMonth(year, month)\n const firstDow = days[0].getDay()\n const grid: (Date | null)[] = Array.from({ length: firstDow }, () => null)\n grid.push(...days)\n while (grid.length < 42) {\n grid.push(null)\n }\n return grid\n}\n","// calendar — month grid with day selection, min/max constraints\nimport { forwardRef, useState } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\nimport { getCalendarGrid, isDisabled, isSameDay, MONTHS, WEEKDAYS } from './calendar-utils'\n\nexport type CalendarProps = {\n value?: Date\n onChange?: (date: Date) => void\n min?: Date\n max?: Date\n className?: string\n}\n\nexport const Calendar = forwardRef<HTMLDivElement, CalendarProps>(\n function Calendar({ value, onChange, min, max, className }, ref) {\n const today = new Date()\n const initial = value ?? today\n const [viewYear, setViewYear] = useState(initial.getFullYear())\n const [viewMonth, setViewMonth] = useState(initial.getMonth())\n\n const grid = getCalendarGrid(viewYear, viewMonth)\n\n const prevMonth = () => {\n if (viewMonth === 0) {\n setViewYear((y) => y - 1)\n setViewMonth(11)\n } else {\n setViewMonth((m) => m - 1)\n }\n }\n\n const nextMonth = () => {\n if (viewMonth === 11) {\n setViewYear((y) => y + 1)\n setViewMonth(0)\n } else {\n setViewMonth((m) => m + 1)\n }\n }\n\n return (\n <div\n ref={ref}\n className={cx('w-64 gds-radius-popover border border-border bg-surface gds-pad-x gds-pad-y select-none', className)}\n data-component=\"calendar\"\n >\n <div className=\"mb-2 flex items-center justify-between\">\n <button\n type=\"button\"\n className={cx('rounded p-1 text-fg-muted hover:bg-bg-secondary hover:text-fg', focusCls)}\n onClick={prevMonth}\n aria-label=\"Previous month\"\n >\n <svg className=\"h-4 w-4\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M10 4L6 8L10 12\" />\n </svg>\n </button>\n <span className=\"text-sm font-medium text-fg\">\n {MONTHS[viewMonth]} {viewYear}\n </span>\n <button\n type=\"button\"\n className={cx('rounded p-1 text-fg-muted hover:bg-bg-secondary hover:text-fg', focusCls)}\n onClick={nextMonth}\n aria-label=\"Next month\"\n >\n <svg className=\"h-4 w-4\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M6 4L10 8L6 12\" />\n </svg>\n </button>\n </div>\n\n <div className=\"grid grid-cols-7 gds-gap-xs text-center gds-text-body text-fg-muted\">\n {WEEKDAYS.map((d) => (\n <div key={d} className=\"gds-pad-y-sm font-medium\">{d}</div>\n ))}\n </div>\n\n <div className=\"grid grid-cols-7 gds-gap-xs text-center gds-text-body\">\n {grid.map((day, i) => {\n if (day === null) {\n return <div key={`e-${i}`} className=\"gds-pad-y-sm\" />\n }\n const disabled = isDisabled(day, min, max)\n const selected = value !== undefined && isSameDay(day, value)\n const isToday = isSameDay(day, today)\n return (\n <button\n key={day.toISOString()}\n type=\"button\"\n disabled={disabled}\n className={cx(\n 'gds-radius-badge gds-pad-y-sm transition-colors',\n focusCls,\n disabled && 'cursor-not-allowed opacity-30',\n !disabled && !selected && 'hover:bg-bg-secondary',\n selected && 'bg-accent text-accent-fg',\n !selected && isToday && 'ring-1 ring-accent',\n !disabled && 'text-fg',\n )}\n onClick={() => {\n if (!disabled && onChange !== undefined) onChange(day)\n }}\n >\n {day.getDate()}\n </button>\n )\n })}\n </div>\n </div>\n )\n },\n)\n","// carousel — horizontal slide carousel with prev/next navigation\nimport type { ReactNode } from 'react'\nimport { Children, forwardRef, useCallback, useEffect, useRef, useState } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\nexport type CarouselProps = {\n children: ReactNode\n autoPlay?: boolean\n interval?: number\n showDots?: boolean\n showArrows?: boolean\n glass?: boolean\n className?: string\n}\n\nconst ArrowLeft = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M10 3L5 8l5 5\" />\n </svg>\n)\n\nconst ArrowRight = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M6 3l5 5-5 5\" />\n </svg>\n)\n\nexport const Carousel = forwardRef<HTMLDivElement, CarouselProps>(\n function Carousel({ children, autoPlay = false, interval = 5000, showDots = true, showArrows = true, glass = false, className }, ref) {\n const slides = Children.toArray(children)\n const count = slides.length\n const [activeIndex, setActiveIndex] = useState(0)\n const hoverRef = useRef(false)\n const touchStartRef = useRef<number | null>(null)\n\n const goTo = useCallback((index: number) => {\n const next = ((index % count) + count) % count\n setActiveIndex(next)\n }, [count])\n\n const goPrev = useCallback(() => goTo(activeIndex - 1), [activeIndex, goTo])\n const goNext = useCallback(() => goTo(activeIndex + 1), [activeIndex, goTo])\n\n // auto-play\n useEffect(() => {\n if (!autoPlay || count <= 1) return\n const id = setInterval(() => {\n if (!hoverRef.current) {\n setActiveIndex((prev) => (prev + 1) % count)\n }\n }, interval)\n return () => clearInterval(id)\n }, [autoPlay, interval, count])\n\n // touch handling\n const handleTouchStart = useCallback((e: React.TouchEvent) => {\n touchStartRef.current = e.touches[0].clientX\n }, [])\n\n const handleTouchEnd = useCallback((e: React.TouchEvent) => {\n if (touchStartRef.current === null) return\n const diff = e.changedTouches[0].clientX - touchStartRef.current\n if (Math.abs(diff) > 50) {\n if (diff < 0) goNext()\n else goPrev()\n }\n touchStartRef.current = null\n }, [goNext, goPrev])\n\n return (\n <div\n ref={ref}\n className={cx('relative overflow-hidden gds-radius', glass && glassClass(glass), className)}\n data-component=\"carousel\"\n onMouseEnter={() => { hoverRef.current = true }}\n onMouseLeave={() => { hoverRef.current = false }}\n onTouchStart={handleTouchStart}\n onTouchEnd={handleTouchEnd}\n >\n {/* slides track */}\n <div\n className=\"flex transition-transform duration-300 ease-out\"\n style={{ transform: `translateX(-${activeIndex * 100}%)` }}\n >\n {slides.map((slide, i) => (\n <div key={i} className=\"w-full shrink-0\" data-slide={i}>\n {slide}\n </div>\n ))}\n </div>\n\n {/* arrows */}\n {showArrows && count > 1 && (\n <>\n <button\n type=\"button\"\n onClick={goPrev}\n className={cx(\n 'absolute left-2 top-1/2 -translate-y-1/2 rounded-full border border-border bg-bg/80 p-1.5 text-fg transition-colors hover:bg-bg',\n focusCls,\n )}\n aria-label=\"Previous slide\"\n >\n <ArrowLeft />\n </button>\n <button\n type=\"button\"\n onClick={goNext}\n className={cx(\n 'absolute right-2 top-1/2 -translate-y-1/2 rounded-full border border-border bg-bg/80 p-1.5 text-fg transition-colors hover:bg-bg',\n focusCls,\n )}\n aria-label=\"Next slide\"\n >\n <ArrowRight />\n </button>\n </>\n )}\n\n {/* dots */}\n {showDots && count > 1 && (\n <div className=\"absolute bottom-2 left-1/2 flex -translate-x-1/2 gap-1.5\" role=\"tablist\">\n {slides.map((_, i) => (\n <button\n key={i}\n type=\"button\"\n onClick={() => goTo(i)}\n role=\"tab\"\n aria-selected={i === activeIndex}\n aria-label={`Slide ${i + 1}`}\n className={cx(\n 'h-2 w-2 rounded-full transition-all',\n i === activeIndex ? 'bg-accent scale-125' : 'bg-fg-muted/30 hover:bg-fg-muted/50',\n focusCls,\n )}\n />\n ))}\n </div>\n )}\n </div>\n )\n },\n)\n","// changelog — versioned changelog display\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nconst typeColors = {\n added: 'bg-success/15 text-success',\n changed: 'bg-accent/15 text-accent',\n fixed: 'bg-warning/15 text-warning',\n removed: 'bg-danger/15 text-danger',\n} as const\n\ntype ChangeType = 'added' | 'changed' | 'fixed' | 'removed'\n\ntype ChangelogChange = {\n type: ChangeType\n text: string\n}\n\ntype ChangelogEntry = {\n version: string\n date: string\n changes: ChangelogChange[]\n}\n\ntype ChangelogProps = React.HTMLAttributes<HTMLDivElement> & {\n entries: ChangelogEntry[]\n}\n\nexport const Changelog = forwardRef<HTMLDivElement, ChangelogProps>(\n function Changelog({ entries, className, ...props }, ref) {\n return (\n <div ref={ref} className={cx('flex flex-col gap-6', className)} data-component=\"changelog\" {...props}>\n {entries.map((entry) => (\n <div key={entry.version} className=\"flex flex-col gap-2\">\n <div className=\"flex items-baseline gap-2\">\n <span className=\"font-semibold text-fg gds-heading\">{entry.version}</span>\n <span className=\"text-xs text-fg-muted\">{entry.date}</span>\n </div>\n <ul className=\"flex flex-col gap-1\">\n {entry.changes.map((change, i) => (\n <li key={i} className=\"flex items-start gap-2 gds-text text-fg\">\n <span className={cx(\n 'mt-0.5 shrink-0 rounded-full px-1.5 py-px text-[9px] font-bold uppercase leading-tight',\n typeColors[change.type],\n )}>\n {change.type}\n </span>\n <span>{change.text}</span>\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n )\n },\n)\n\nexport type { ChangelogChange, ChangelogEntry, ChangelogProps, ChangeType }\n","// command-palette-list — grouped results list (internal)\nimport { cx } from '../utils/cx'\nimport type { CommandItem } from './command-palette'\n\ntype CommandPaletteListProps = {\n groups: Map<string, CommandItem[]>\n activeIndex: number\n filteredCount: number\n onSelect: (id: string) => void\n}\n\nfunction CommandPaletteList({\n groups,\n activeIndex,\n filteredCount,\n onSelect,\n}: CommandPaletteListProps) {\n let flatIndex = -1\n\n if (filteredCount === 0) {\n return (\n <div className=\"py-8 text-center text-sm text-fg-muted/40\">No results found</div>\n )\n }\n\n return (\n <>\n {Array.from(groups.entries()).map(([group, groupItems]) => (\n <div key={group}>\n {group !== '' && (\n <div className=\"px-3 pb-1 pt-3 text-[10px] font-semibold uppercase tracking-[0.1em] text-fg-muted/30\">\n {group}\n </div>\n )}\n {groupItems.map((item) => {\n flatIndex++\n const isActive = flatIndex === activeIndex\n return (\n <button\n key={item.id}\n className={cx(\n 'flex w-full items-center gap-3 rounded-lg px-3 py-2 text-left text-[13px] transition-colors select-none',\n isActive ? 'bg-accent/15 text-accent' : 'text-fg hover:bg-white/[0.04]',\n )}\n onClick={() => onSelect(item.id)}\n data-active={isActive}\n >\n {item.icon !== undefined && (\n <span className=\"flex h-5 w-5 shrink-0 items-center justify-center text-fg-muted/50\">{item.icon}</span>\n )}\n <span className=\"flex-1 truncate\">{item.label}</span>\n {item.group !== undefined && (\n <span className=\"shrink-0 text-[11px] text-fg-muted/25\">{item.group}</span>\n )}\n {item.shortcut !== undefined && (\n <kbd className=\"shrink-0 rounded border border-white/[0.06] bg-white/[0.03] px-1.5 py-px text-[10px] text-fg-muted/30\">\n {item.shortcut}\n </kbd>\n )}\n </button>\n )\n })}\n </div>\n ))}\n </>\n )\n}\n\nexport { CommandPaletteList }\nexport type { CommandPaletteListProps }\n","// command-palette — searchable command launcher overlay\nimport type { ReactNode } from 'react'\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { createPortal } from 'react-dom'\n\nimport { cx } from '../utils/cx'\nimport { useEscapeKey, useScrollLock } from '../utils/hooks'\nimport { CommandPaletteList } from './command-palette-list'\n\nexport type CommandItem = {\n id: string\n label: string\n icon?: ReactNode\n shortcut?: string\n group?: string\n}\n\nexport type CommandPaletteProps = {\n open: boolean\n onClose: () => void\n items: CommandItem[]\n onSelect: (id: string) => void\n placeholder?: string\n className?: string\n}\n\nexport function CommandPalette({\n open,\n onClose,\n items,\n onSelect,\n placeholder = 'Search components, patterns, tokens...',\n className,\n}: CommandPaletteProps) {\n const [query, setQuery] = useState('')\n const [activeIndex, setActiveIndex] = useState(0)\n const inputRef = useRef<HTMLInputElement>(null)\n const listRef = useRef<HTMLDivElement>(null)\n\n useScrollLock(open)\n useEscapeKey(open, onClose)\n\n // reset + focus on open\n useEffect(() => {\n if (open) {\n setQuery('')\n setActiveIndex(0)\n requestAnimationFrame(() => inputRef.current?.focus())\n }\n }, [open])\n\n const filtered = useMemo(() => {\n if (query === '') return items\n const lower = query.toLowerCase()\n return items.filter((item) => item.label.toLowerCase().includes(lower))\n }, [items, query])\n\n // group items\n const groups = useMemo(() => {\n const map = new Map<string, CommandItem[]>()\n for (const item of filtered) {\n const group = item.group ?? ''\n const list = map.get(group)\n if (list !== undefined) {\n list.push(item)\n } else {\n map.set(group, [item])\n }\n }\n return map\n }, [filtered])\n\n // scroll active item into view\n useEffect(() => {\n const el = listRef.current?.querySelector('[data-active=\"true\"]')\n if (el !== null && el !== undefined) {\n el.scrollIntoView({ block: 'nearest' })\n }\n }, [activeIndex])\n\n const handleSelect = useCallback((id: string) => {\n onSelect(id)\n onClose()\n }, [onSelect, onClose])\n\n const handleKeyDown = useCallback((e: React.KeyboardEvent) => {\n if (e.key === 'ArrowDown') {\n e.preventDefault()\n setActiveIndex((prev) => (prev + 1) % Math.max(filtered.length, 1))\n } else if (e.key === 'ArrowUp') {\n e.preventDefault()\n setActiveIndex((prev) => (prev - 1 + filtered.length) % Math.max(filtered.length, 1))\n } else if (e.key === 'Enter' && filtered[activeIndex] !== undefined) {\n e.preventDefault()\n handleSelect(filtered[activeIndex].id)\n }\n }, [filtered, activeIndex, handleSelect])\n\n if (!open) return null\n\n return createPortal(\n <div\n className=\"fixed inset-0 z-50 flex items-start justify-center bg-black/60 pt-[15vh]\"\n data-component=\"command-palette\"\n data-state=\"open\"\n onClick={(e) => { if (e.target === e.currentTarget) onClose() }}\n onKeyDown={handleKeyDown}\n >\n <div\n className={cx(\n 'w-full max-w-xl animate-scale-in rounded-xl border border-white/[0.06] bg-bg-secondary shadow-2xl',\n className,\n )}\n >\n {/* search bar */}\n <div className=\"flex items-center gap-3 border-b border-white/[0.06] px-4\">\n <svg className=\"h-4 w-4 shrink-0 text-fg-muted/40\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2} viewBox=\"0 0 24 24\">\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <path d=\"m21 21-4.35-4.35\" strokeLinecap=\"round\" />\n </svg>\n <input\n ref={inputRef}\n type=\"text\"\n value={query}\n onChange={(e) => { setQuery(e.target.value); setActiveIndex(0) }}\n placeholder={placeholder}\n className=\"flex-1 bg-transparent py-3.5 text-sm text-fg placeholder:text-fg-muted/30 outline-none\"\n />\n <kbd className=\"shrink-0 rounded border border-white/[0.08] bg-white/[0.04] px-1.5 py-0.5 text-[10px] font-medium text-fg-muted/40\">\n ESC\n </kbd>\n </div>\n\n {/* results */}\n <div ref={listRef} className=\"max-h-80 overflow-y-auto p-1.5\">\n <CommandPaletteList\n groups={groups}\n activeIndex={activeIndex}\n filteredCount={filtered.length}\n onSelect={handleSelect}\n />\n </div>\n\n {/* footer hints */}\n <div className=\"flex items-center justify-between border-t border-white/[0.06] px-4 py-2 text-[10px] text-fg-muted/25\">\n <div className=\"flex items-center gap-3\">\n <span>↑↓ navigate</span>\n <span>↵ select</span>\n <span>esc close</span>\n </div>\n <span>{items.length} commands</span>\n </div>\n </div>\n </div>,\n document.body,\n )\n}\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype CommentData = {\n author: string\n avatar?: string\n content: string\n id: string\n replies?: CommentData[]\n timestamp: string\n}\n\ntype CommentThreadProps = React.HTMLAttributes<HTMLDivElement> & {\n comments: CommentData[]\n}\n\nfunction CommentNode({ comment, depth = 0 }: { comment: CommentData; depth?: number }) {\n return (\n <div className={cx(depth > 0 && 'ml-8 border-l border-border pl-4')}>\n <div className=\"flex items-start gds-gap\">\n <div className=\"flex h-7 w-7 shrink-0 items-center justify-center rounded-full bg-accent/10 text-xs font-medium text-accent\">\n {comment.avatar ?? comment.author.charAt(0).toUpperCase()}\n </div>\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-baseline gds-gap-sm\">\n <span className=\"text-sm font-medium text-fg\">{comment.author}</span>\n <span className=\"gds-text-label text-fg-muted\">{comment.timestamp}</span>\n </div>\n <p className=\"mt-1 text-sm text-fg-muted\">{comment.content}</p>\n </div>\n </div>\n {comment.replies !== undefined && comment.replies.length > 0 && (\n <div className=\"mt-3 flex flex-col gds-gap\">\n {comment.replies.map((reply) => (\n <CommentNode comment={reply} depth={depth + 1} key={reply.id} />\n ))}\n </div>\n )}\n </div>\n )\n}\n\nexport const CommentThread = forwardRef<HTMLDivElement, CommentThreadProps>(\n function CommentThread({ className, comments, ...props }, ref) {\n return (\n <div\n className={cx('flex flex-col gds-gap', className)}\n data-component=\"comment-thread\"\n ref={ref}\n role=\"list\"\n {...props}\n >\n {comments.map((comment) => (\n <div key={comment.id} role=\"listitem\">\n <CommentNode comment={comment} />\n </div>\n ))}\n </div>\n )\n },\n)\n\nexport type { CommentData, CommentThreadProps }\n","// confetti-physics — particle creation, update, and rendering\n\nexport type Particle = {\n color: string\n drag: number\n gravity: number\n rotation: number\n rotationSpeed: number\n size: number\n vx: number\n vy: number\n x: number\n y: number\n}\n\nexport function createParticle(\n canvasWidth: number,\n colors: string[],\n): Particle {\n return {\n x: Math.random() * canvasWidth,\n y: -10,\n vx: (Math.random() - 0.5) * 8,\n vy: Math.random() * -6 - 4,\n size: Math.random() * 6 + 4,\n color: colors[Math.floor(Math.random() * colors.length)],\n rotation: Math.random() * 360,\n rotationSpeed: (Math.random() - 0.5) * 10,\n gravity: 0.15,\n drag: 0.98,\n }\n}\n\nexport function updateParticle(p: Particle): Particle {\n return {\n ...p,\n x: p.x + p.vx,\n y: p.y + p.vy,\n vx: p.vx * p.drag,\n vy: (p.vy + p.gravity) * p.drag,\n rotation: p.rotation + p.rotationSpeed,\n }\n}\n\nexport function drawParticle(ctx: CanvasRenderingContext2D, p: Particle): void {\n ctx.save()\n ctx.translate(p.x, p.y)\n ctx.rotate((p.rotation * Math.PI) / 180)\n ctx.fillStyle = p.color\n ctx.fillRect(-p.size / 2, -p.size / 2, p.size, p.size * 0.6)\n ctx.restore()\n}\n","// confetti — canvas-based celebration particle animation\nimport { useEffect, useRef } from 'react'\nimport { createPortal } from 'react-dom'\n\nimport { cx } from '../utils/cx'\nimport type { Particle } from './confetti-physics'\nimport { createParticle, drawParticle, updateParticle } from './confetti-physics'\n\ntype ConfettiProps = {\n active: boolean\n className?: string\n colors?: string[]\n duration?: number\n particleCount?: number\n}\n\nconst DEFAULT_COLORS = [\n '#6366f1', '#ec4899', '#14b8a6', '#f59e0b',\n '#8b5cf6', '#ef4444', '#22c55e', '#3b82f6',\n]\n\nexport function Confetti({\n active,\n className,\n colors = DEFAULT_COLORS,\n duration = 3000,\n particleCount = 100,\n}: ConfettiProps) {\n const canvasRef = useRef<HTMLCanvasElement>(null)\n const particlesRef = useRef<Particle[]>([])\n const rafRef = useRef<number>(0)\n const startTimeRef = useRef<number>(0)\n\n useEffect(() => {\n if (!active) {\n particlesRef.current = []\n return\n }\n\n const canvas = canvasRef.current\n if (canvas === null) return\n\n const ctx = canvas.getContext('2d')\n if (ctx === null) return\n\n // size canvas to viewport\n canvas.width = window.innerWidth\n canvas.height = window.innerHeight\n\n particlesRef.current = []\n startTimeRef.current = performance.now()\n let spawnedCount = 0\n\n function animate(now: number) {\n if (canvas === null || ctx === null) return\n\n const elapsed = now - startTimeRef.current\n ctx.clearRect(0, 0, canvas.width, canvas.height)\n\n // spawn particles over time\n if (elapsed < duration) {\n const targetSpawned = Math.min(\n particleCount,\n Math.floor((elapsed / duration) * particleCount),\n )\n while (spawnedCount < targetSpawned) {\n particlesRef.current = [\n ...particlesRef.current,\n createParticle(canvas.width, colors),\n ]\n spawnedCount += 1\n }\n }\n\n // update and draw\n particlesRef.current = particlesRef.current\n .map(updateParticle)\n .filter((p) => p.y < canvas.height + 20)\n\n for (const p of particlesRef.current) {\n drawParticle(ctx, p)\n }\n\n // keep animating if there are still particles\n if (particlesRef.current.length > 0 || elapsed < duration) {\n rafRef.current = requestAnimationFrame(animate)\n }\n }\n\n rafRef.current = requestAnimationFrame(animate)\n\n return () => {\n cancelAnimationFrame(rafRef.current)\n }\n }, [active, colors, duration, particleCount])\n\n if (!active) return null\n\n return createPortal(\n <canvas\n ref={canvasRef}\n className={cx('fixed inset-0 pointer-events-none z-[9999]', className)}\n data-component=\"confetti\"\n />,\n document.body,\n )\n}\n\nexport type { ConfettiProps }\n","import type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype ContactCardProps = React.HTMLAttributes<HTMLDivElement> & {\n actions?: ReactNode\n avatar?: string\n email?: string\n name: string\n phone?: string\n role?: string\n}\n\nexport const ContactCard = forwardRef<HTMLDivElement, ContactCardProps>(\n function ContactCard({ actions, avatar, className, email, name, phone, role, ...props }, ref) {\n const initials = name\n .split(' ')\n .map((w) => w[0])\n .join('')\n .slice(0, 2)\n .toUpperCase()\n\n return (\n <div\n className={cx('gds-ctx gds-radius-card border border-border bg-surface gds-pad text-center', className)}\n data-component=\"contact-card\"\n ref={ref}\n {...props}\n >\n {avatar !== undefined ? (\n <img src={avatar} alt={name} className=\"mx-auto h-14 w-14 rounded-full object-cover\" />\n ) : (\n <div className=\"mx-auto flex h-14 w-14 items-center justify-center rounded-full bg-accent/10 text-sm font-semibold text-accent\">\n {initials}\n </div>\n )}\n <div className=\"mt-3 font-semibold text-fg\">{name}</div>\n {role !== undefined && <div className=\"mt-0.5 text-xs text-fg-muted\">{role}</div>}\n {email !== undefined && (\n <div className=\"mt-2 text-xs text-fg-muted\">{email}</div>\n )}\n {phone !== undefined && (\n <div className=\"mt-0.5 text-xs text-fg-muted\">{phone}</div>\n )}\n {actions !== undefined && <div className=\"mt-3 flex justify-center gap-2\">{actions}</div>}\n </div>\n )\n },\n)\n\nexport type { ContactCardProps }\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype ContainerStatus = 'paused' | 'running' | 'stopped'\n\ntype ContainerInfo = {\n image: string\n name: string\n ports?: string\n status: ContainerStatus\n}\n\ntype ContainerListProps = React.HTMLAttributes<HTMLDivElement> & {\n containers: ContainerInfo[]\n}\n\nconst dotCls: Record<ContainerStatus, string> = {\n running: 'bg-success',\n stopped: 'bg-danger',\n paused: 'bg-warning',\n}\n\nexport const ContainerList = forwardRef<HTMLDivElement, ContainerListProps>(\n function ContainerList({ className, containers, ...props }, ref) {\n return (\n <div\n className={cx('gds-radius-popover overflow-hidden border border-border', className)}\n data-component=\"container-list\"\n ref={ref}\n {...props}\n >\n <table className=\"w-full\">\n <thead>\n <tr className=\"bg-bg-tertiary/50 text-left gds-text-body text-fg-muted\">\n <th className=\"px-3 py-1.5 font-medium\">Name</th>\n <th className=\"px-3 py-1.5 font-medium\">Image</th>\n <th className=\"px-3 py-1.5 font-medium\">Status</th>\n <th className=\"px-3 py-1.5 font-medium\">Ports</th>\n </tr>\n </thead>\n <tbody>\n {containers.map((c) => (\n <tr key={c.name} className=\"border-t border-border gds-text-body hover:bg-bg-tertiary/30 transition-colors\">\n <td className=\"px-3 py-1.5 font-medium text-fg\">{c.name}</td>\n <td className=\"px-3 py-1.5 font-mono text-fg-muted text-xs\">{c.image}</td>\n <td className=\"px-3 py-1.5\">\n <span className=\"inline-flex items-center gap-1.5\">\n <span className={cx('h-2 w-2 rounded-full', dotCls[c.status])} />\n <span className=\"text-fg-muted\">{c.status}</span>\n </span>\n </td>\n <td className=\"px-3 py-1.5 font-mono text-fg-muted text-xs\">{c.ports ?? '—'}</td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )\n },\n)\n\nexport type { ContainerInfo, ContainerListProps, ContainerStatus }\n","// cookie-banner — GDPR-style consent banner with accept/reject\nimport { forwardRef } from 'react'\nimport { createPortal } from 'react-dom'\n\nimport { Button } from '../l2-primitives/button'\nimport { cx } from '../utils/cx'\n\ntype CookieBannerProps = {\n onAccept: () => void\n onReject?: () => void\n message?: string\n className?: string\n}\n\nconst defaultMessage = 'We use cookies to improve your experience. By continuing to use this site, you agree to our use of cookies.'\n\nconst CookieBannerInner = forwardRef<HTMLDivElement, CookieBannerProps>(\n function CookieBannerInner({ onAccept, onReject, message, className }, ref) {\n return (\n <div\n ref={ref}\n className={cx(\n 'fixed inset-x-0 bottom-0 z-50 flex items-center justify-between gap-4 border-t border-border bg-surface/80 px-6 py-4 backdrop-blur-lg',\n className,\n )}\n data-component=\"cookie-banner\"\n role=\"banner\"\n >\n <p className=\"text-sm text-fg-muted flex-1\">{message ?? defaultMessage}</p>\n <div className=\"flex shrink-0 gap-2\">\n {onReject !== undefined && (\n <Button variant=\"ghost\" size=\"sm\" onClick={onReject}>Reject</Button>\n )}\n <Button variant=\"primary\" size=\"sm\" onClick={onAccept}>Accept</Button>\n </div>\n </div>\n )\n },\n)\n\nconst CookieBanner = forwardRef<HTMLDivElement, CookieBannerProps>(\n function CookieBanner(props, ref) {\n if (typeof document === 'undefined') return null\n return createPortal(<CookieBannerInner {...props} ref={ref} />, document.body)\n },\n)\n\nexport { CookieBanner }\nexport type { CookieBannerProps }\n","// cron-schedule — human-readable display of a cron expression\nimport { forwardRef, useMemo } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype CronScheduleProps = React.HTMLAttributes<HTMLDivElement> & {\n expression: string\n}\n\nconst DAYS = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']\n\nfunction parseCron(expr: string): string {\n const parts = expr.trim().split(/\\s+/)\n if (parts.length !== 5) return `Cron: ${expr}`\n\n const [minute, hour, dayOfMonth, , dayOfWeek] = parts\n\n const time = hour !== '*' && minute !== '*'\n ? `${hour.padStart(2, '0')}:${minute.padStart(2, '0')}`\n : null\n\n if (dayOfWeek !== '*' && dayOfWeek !== '?') {\n const dayNum = parseInt(dayOfWeek, 10)\n const dayName = !isNaN(dayNum) ? DAYS[dayNum % 7] ?? dayOfWeek : dayOfWeek\n return time !== null ? `Every ${dayName} at ${time}` : `Every ${dayName}`\n }\n\n if (dayOfMonth !== '*' && dayOfMonth !== '?') {\n return time !== null ? `Day ${dayOfMonth} of every month at ${time}` : `Day ${dayOfMonth} of every month`\n }\n\n if (hour === '*' && minute === '*') return 'Every minute'\n if (hour === '*') return `Every hour at minute ${minute}`\n if (minute === '0' && hour === '0') return 'Every day at midnight'\n\n return time !== null ? `Every day at ${time}` : `Cron: ${expr}`\n}\n\nconst CronSchedule = forwardRef<HTMLDivElement, CronScheduleProps>(\n function CronSchedule({ expression, className, ...props }, ref) {\n const description = useMemo(() => parseCron(expression), [expression])\n\n return (\n <div ref={ref} className={cx('flex items-center gap-3', className)} data-component=\"cron-schedule\" {...props}>\n <code className=\"rounded bg-bg-secondary px-2 py-1 text-xs text-fg-muted font-mono\">{expression}</code>\n <span className=\"gds-text-body text-fg\">{description}</span>\n </div>\n )\n },\n)\n\nexport { CronSchedule }\nexport type { CronScheduleProps }\n","// data-list — key-value list display for structured data\nimport type { ReactNode } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\nexport type DataListItem = {\n label: string\n value: ReactNode\n}\n\nexport type DataListProps = {\n items: DataListItem[]\n layout?: 'vertical' | 'horizontal'\n striped?: boolean\n glass?: boolean\n className?: string\n}\n\nexport function DataList({\n items,\n layout = 'vertical',\n striped = false,\n glass,\n className,\n}: DataListProps) {\n const isHorizontal = layout === 'horizontal'\n\n return (\n <div\n className={cx(\n 'gds-radius-popover border border-border overflow-hidden',\n glass !== undefined && glass !== false\n ? cx('border-white/10 bg-bg/60', glassClass(glass))\n : '',\n className,\n )}\n data-component=\"data-list\"\n data-variant={layout}\n >\n {items.map((item, i) => (\n <div\n key={item.label}\n className={cx(\n 'gds-pad-x gds-pad-y-sm',\n i < items.length - 1 ? 'border-b border-border' : '',\n isHorizontal ? 'flex items-center justify-between gap-4' : '',\n striped && i % 2 === 1 ? 'bg-bg-tertiary/20' : '',\n )}\n >\n <div className=\"gds-text-body font-medium text-fg-muted\">{item.label}</div>\n <div className={cx('text-fg gds-text-body', isHorizontal ? '' : 'mt-1')}>\n {item.value}\n </div>\n </div>\n ))}\n </div>\n )\n}\n","// data-table — sortable, striped table with loading and empty states\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassSurface } from '../utils/glass'\n\nexport type Column<T> = {\n key: string\n header: string\n render?: (row: T) => ReactNode\n sortable?: boolean\n width?: string\n}\n\nexport type DataTableProps<T extends Record<string, unknown>> = {\n columns: Column<T>[]\n data: T[]\n className?: string\n onRowClick?: (row: T) => void\n sortKey?: string\n sortDir?: 'asc' | 'desc'\n onSort?: (key: string) => void\n emptyText?: string\n loading?: boolean\n glass?: boolean\n}\n\nfunction SortChevron({ dir }: { dir?: 'asc' | 'desc' }) {\n if (dir === undefined) {\n return (\n <svg className=\"ml-1 inline h-3 w-3 text-fg-muted/40\" viewBox=\"0 0 12 12\" fill=\"currentColor\">\n <path d=\"M6 2L9 5H3L6 2Z\" />\n <path d=\"M6 10L3 7H9L6 10Z\" />\n </svg>\n )\n }\n return (\n <svg className=\"ml-1 inline h-3 w-3 text-fg-muted\" viewBox=\"0 0 12 12\" fill=\"currentColor\">\n {dir === 'asc'\n ? <path d=\"M6 2L9 5H3L6 2Z\" />\n : <path d=\"M6 10L3 7H9L6 10Z\" />\n }\n </svg>\n )\n}\n\nfunction SkeletonRows<T extends Record<string, unknown>>({ columns }: { columns: Column<T>[] }) {\n return (\n <>\n {Array.from({ length: 5 }, (_, i) => (\n <tr key={i} className=\"border-b border-border\">\n {columns.map((col) => (\n <td key={col.key} className=\"gds-pad-x gds-pad-y\">\n <div className=\"h-4 animate-pulse rounded bg-bg-tertiary\" />\n </td>\n ))}\n </tr>\n ))}\n </>\n )\n}\n\nfunction EmptyState({ colSpan, text }: { colSpan: number; text: string }) {\n return (\n <tr>\n <td colSpan={colSpan} className=\"gds-pad-x py-12 text-center text-sm text-fg-muted\">\n {text}\n </td>\n </tr>\n )\n}\n\nfunction DataTableInner<T extends Record<string, unknown>>(\n {\n columns,\n data,\n className,\n onRowClick,\n sortKey,\n sortDir,\n onSort,\n emptyText = 'No data',\n loading,\n glass,\n }: DataTableProps<T>,\n ref: React.ForwardedRef<HTMLDivElement>,\n) {\n const handleHeaderClick = (col: Column<T>) => {\n if (col.sortable !== true || onSort === undefined) return\n onSort(col.key)\n }\n\n return (\n <div\n ref={ref}\n className={cx(\n 'overflow-auto gds-radius-popover border',\n glass === true\n ? cx(glassSurface(glass), 'bg-bg/60')\n : 'border-border bg-surface',\n className,\n )}\n data-component=\"data-table\"\n data-state={loading === true ? 'loading' : undefined}\n >\n <table className=\"w-full border-collapse text-sm\">\n <thead>\n <tr className=\"border-b border-border bg-bg-secondary/50\">\n {columns.map((col) => (\n <th\n key={col.key}\n className={cx(\n 'gds-pad-x gds-pad-y text-left gds-text-body font-medium uppercase tracking-wider text-fg-muted select-none',\n col.sortable === true && 'cursor-pointer hover:text-fg',\n )}\n style={col.width !== undefined ? { width: col.width } : undefined}\n onClick={() => handleHeaderClick(col)}\n >\n {col.header}\n {col.sortable === true && (\n <SortChevron dir={sortKey === col.key ? sortDir : undefined} />\n )}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {loading === true && <SkeletonRows columns={columns} />}\n {loading !== true && data.length === 0 && (\n <EmptyState colSpan={columns.length} text={emptyText} />\n )}\n {loading !== true && data.map((row, i) => (\n <tr\n key={i}\n className={cx(\n 'border-b border-border transition-colors',\n i % 2 === 1 && 'bg-bg-secondary/30',\n onRowClick !== undefined && 'cursor-pointer hover:bg-bg-secondary/60',\n )}\n onClick={onRowClick !== undefined ? () => onRowClick(row) : undefined}\n >\n {columns.map((col) => (\n <td key={col.key} className=\"gds-pad-x gds-pad-y text-fg\">\n {col.render !== undefined\n ? col.render(row)\n : String(row[col.key] ?? '')\n }\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )\n}\n\nexport const DataTable = forwardRef(DataTableInner) as <T extends Record<string, unknown>>(\n props: DataTableProps<T> & { ref?: React.Ref<HTMLDivElement> },\n) => ReactNode\n","// date-picker — input with calendar dropdown\nimport { forwardRef, useCallback, useRef, useState } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\nimport { useClickOutside, useEscapeKey } from '../utils/hooks'\nimport { Calendar } from './calendar'\n\nexport type DatePickerProps = {\n value?: Date\n onChange?: (date: Date) => void\n placeholder?: string\n min?: Date\n max?: Date\n glass?: boolean\n className?: string\n}\n\nfunction formatDate(d: Date): string {\n const y = d.getFullYear()\n const m = String(d.getMonth() + 1).padStart(2, '0')\n const day = String(d.getDate()).padStart(2, '0')\n return `${y}-${m}-${day}`\n}\n\nexport const DatePicker = forwardRef<HTMLDivElement, DatePickerProps>(\n function DatePicker({ value, onChange, placeholder = 'Select date', min, max, glass, className }, ref) {\n const [open, setOpen] = useState(false)\n const containerRef = useRef<HTMLDivElement>(null)\n\n const close = useCallback(() => setOpen(false), [])\n useClickOutside(containerRef, open, close)\n useEscapeKey(open, close)\n\n const handleSelect = (date: Date) => {\n if (onChange !== undefined) onChange(date)\n setOpen(false)\n }\n\n return (\n <div\n ref={ref}\n className={cx('relative inline-block', className)}\n data-component=\"date-picker\"\n data-state={open ? 'open' : 'closed'}\n >\n <div ref={containerRef}>\n <button\n type=\"button\"\n className={cx(\n 'flex gds-h-lg items-center gds-gap-sm gds-radius-button border gds-pad-x text-sm transition-colors',\n focusCls,\n glass === true\n ? cx(glassClass(glass), 'border-white/10 bg-bg/60')\n : 'border-border bg-surface',\n value !== undefined ? 'text-fg' : 'text-fg-muted',\n )}\n onClick={() => setOpen((prev) => !prev)}\n >\n <svg className=\"h-4 w-4 text-fg-muted\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <rect x=\"2\" y=\"3\" width=\"12\" height=\"11\" rx=\"1.5\" />\n <path d=\"M2 6.5H14M5 1.5V4M11 1.5V4\" />\n </svg>\n {value !== undefined ? formatDate(value) : placeholder}\n </button>\n\n {open && (\n <div className=\"absolute left-0 top-full z-50 mt-1 animate-popup\">\n <Calendar\n value={value}\n onChange={handleSelect}\n min={min}\n max={max}\n />\n </div>\n )}\n </div>\n </div>\n )\n },\n)\n","// deploy-log — CI/deploy log table with status badges\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type DeployLogEntry = { project: string; device: string; version: string; status: 'failure' | 'pending' | 'success'; timestamp: string }\nexport type DeployLogProps = { entries: DeployLogEntry[]; className?: string }\n\nconst statusCls: Record<DeployLogEntry['status'], string> = { success: 'bg-success/15 text-success', failure: 'bg-danger/15 text-danger', pending: 'bg-warning/15 text-warning' }\n\nexport const DeployLog = forwardRef<HTMLDivElement, DeployLogProps>(\n function DeployLog({ entries, className }, ref) {\n return (\n <div\n ref={ref}\n className={cx('gds-radius-popover overflow-hidden border border-border', className)}\n data-component=\"deploy-log\"\n >\n <table className=\"w-full\">\n <thead>\n <tr className=\"bg-bg-tertiary/50 text-left gds-text-body text-fg-muted\">\n <th className=\"px-3 py-1.5 font-medium\">Project</th>\n <th className=\"px-3 py-1.5 font-medium\">Device</th>\n <th className=\"px-3 py-1.5 font-medium\">Version</th>\n <th className=\"px-3 py-1.5 font-medium\">Status</th>\n <th className=\"px-3 py-1.5 font-medium\">Time</th>\n </tr>\n </thead>\n <tbody>\n {entries.map((e, i) => (\n <tr key={i} className=\"border-t border-border gds-text-body hover:bg-bg-tertiary/30 transition-colors\">\n <td className=\"px-3 py-1.5 font-medium text-fg\">{e.project}</td>\n <td className=\"px-3 py-1.5 text-fg-muted\">{e.device}</td>\n <td className=\"px-3 py-1.5 font-mono text-fg-muted\">{e.version}</td>\n <td className=\"px-3 py-1.5\">\n <span className={cx('rounded-full px-2 py-0.5 text-[10px] font-medium', statusCls[e.status])}>\n {e.status}\n </span>\n </td>\n <td className=\"px-3 py-1.5 text-fg-muted\">{e.timestamp}</td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )\n },\n)\n","// description-list — semantic dt/dd pairs with layout options\nimport type { ReactNode } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type DescriptionListItem = {\n term: string\n description: ReactNode\n}\n\nexport type DescriptionListProps = {\n items: DescriptionListItem[]\n layout?: 'stacked' | 'horizontal'\n dividers?: boolean\n className?: string\n}\n\nexport function DescriptionList({\n items,\n layout = 'stacked',\n dividers = true,\n className,\n}: DescriptionListProps) {\n const isHorizontal = layout === 'horizontal'\n\n return (\n <dl\n className={cx('gds-text-body', className)}\n data-component=\"description-list\"\n data-variant={layout}\n >\n {items.map((item, i) => (\n <div\n key={item.term}\n className={cx(\n 'gds-pad-x gds-pad-y-sm',\n isHorizontal && 'grid grid-cols-[1fr_2fr] gap-4',\n dividers && i < items.length - 1 && 'border-b border-border',\n )}\n >\n <dt className=\"font-medium text-fg-muted\">{item.term}</dt>\n <dd className={cx('text-fg', isHorizontal ? '' : 'mt-1')}>{item.description}</dd>\n </div>\n ))}\n </dl>\n )\n}\n","// diff-algorithm — pure LCS diff computation (no React dependency)\n\ntype DiffLine = {\n type: 'added' | 'removed' | 'unchanged'\n content: string\n oldLineNum: number | null\n newLineNum: number | null\n}\n\n// simple line-by-line diff using longest common subsequence\nfunction computeLcs(oldLines: string[], newLines: string[]): DiffLine[] {\n const m = oldLines.length\n const n = newLines.length\n\n // build LCS table\n const dp: number[][] = Array.from({ length: m + 1 }, () => Array(n + 1).fill(0))\n for (let i = 1; i <= m; i++) {\n for (let j = 1; j <= n; j++) {\n if (oldLines[i - 1] === newLines[j - 1]) {\n dp[i][j] = dp[i - 1][j - 1] + 1\n } else {\n dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1])\n }\n }\n }\n\n // backtrack to produce diff\n const result: DiffLine[] = []\n let i = m\n let j = n\n while (i > 0 && j > 0) {\n if (oldLines[i - 1] === newLines[j - 1]) {\n result.unshift({ type: 'unchanged', content: oldLines[i - 1], oldLineNum: i, newLineNum: j })\n i--\n j--\n } else if (dp[i - 1][j] >= dp[i][j - 1]) {\n result.unshift({ type: 'removed', content: oldLines[i - 1], oldLineNum: i, newLineNum: null })\n i--\n } else {\n result.unshift({ type: 'added', content: newLines[j - 1], oldLineNum: null, newLineNum: j })\n j--\n }\n }\n while (i > 0) {\n result.unshift({ type: 'removed', content: oldLines[i - 1], oldLineNum: i, newLineNum: null })\n i--\n }\n while (j > 0) {\n result.unshift({ type: 'added', content: newLines[j - 1], oldLineNum: null, newLineNum: j })\n j--\n }\n\n return result\n}\n\nfunction lineClass(type: DiffLine['type']): string {\n if (type === 'added') return 'bg-success/10'\n if (type === 'removed') return 'bg-danger/10'\n return ''\n}\n\nfunction linePrefix(type: DiffLine['type']): string {\n if (type === 'added') return '+'\n if (type === 'removed') return '-'\n return ' '\n}\n\nexport { computeLcs, lineClass, linePrefix }\nexport type { DiffLine }\n","// diff-viewer — side-by-side or unified text diff viewer\nimport { forwardRef, useMemo } from 'react'\n\nimport { cx } from '../utils/cx'\nimport type { DiffLine } from './diff-algorithm'\nimport { computeLcs, lineClass, linePrefix } from './diff-algorithm'\n\nexport type DiffViewerProps = {\n oldText: string\n newText: string\n mode?: 'split' | 'unified'\n oldTitle?: string\n newTitle?: string\n glass?: boolean\n className?: string\n}\n\nfunction UnifiedView({ lines }: { lines: DiffLine[] }) {\n return (\n <table className=\"w-full border-collapse font-mono text-xs\">\n <tbody>\n {lines.map((line, idx) => (\n <tr key={idx} className={lineClass(line.type)}>\n <td className=\"w-10 select-none pr-2 text-right text-fg-muted/50\">\n {line.oldLineNum ?? ''}\n </td>\n <td className=\"w-10 select-none pr-2 text-right text-fg-muted/50\">\n {line.newLineNum ?? ''}\n </td>\n <td className=\"w-4 select-none text-center text-fg-muted/70\">\n {linePrefix(line.type)}\n </td>\n <td className=\"whitespace-pre px-2\">{line.content}</td>\n </tr>\n ))}\n </tbody>\n </table>\n )\n}\n\nfunction SplitView({ lines, oldTitle, newTitle }: {\n lines: DiffLine[]\n oldTitle: string\n newTitle: string\n}) {\n // separate into old and new columns\n const oldLines: Array<DiffLine | null> = []\n const newLines: Array<DiffLine | null> = []\n\n for (const line of lines) {\n if (line.type === 'unchanged') {\n oldLines.push(line)\n newLines.push(line)\n } else if (line.type === 'removed') {\n oldLines.push(line)\n newLines.push(null)\n } else {\n oldLines.push(null)\n newLines.push(line)\n }\n }\n\n return (\n <div className=\"grid grid-cols-2 divide-x divide-border\">\n <div>\n <div className=\"border-b border-border px-3 py-1.5 text-[10px] font-medium text-fg-muted select-none\">\n {oldTitle}\n </div>\n <table className=\"w-full border-collapse font-mono text-xs\">\n <tbody>\n {oldLines.map((line, idx) => (\n <tr key={idx} className={line !== null ? lineClass(line.type) : ''}>\n <td className=\"w-10 select-none pr-2 text-right text-fg-muted/50\">\n {line?.oldLineNum ?? ''}\n </td>\n <td className=\"whitespace-pre px-2\">{line?.content ?? ''}</td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n <div>\n <div className=\"border-b border-border px-3 py-1.5 text-[10px] font-medium text-fg-muted select-none\">\n {newTitle}\n </div>\n <table className=\"w-full border-collapse font-mono text-xs\">\n <tbody>\n {newLines.map((line, idx) => (\n <tr key={idx} className={line !== null ? lineClass(line.type) : ''}>\n <td className=\"w-10 select-none pr-2 text-right text-fg-muted/50\">\n {line?.newLineNum ?? ''}\n </td>\n <td className=\"whitespace-pre px-2\">{line?.content ?? ''}</td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n )\n}\n\nexport const DiffViewer = forwardRef<HTMLDivElement, DiffViewerProps>(\n function DiffViewer(\n { oldText, newText, mode = 'unified', oldTitle = 'Old', newTitle = 'New', glass, className },\n ref,\n ) {\n const lines = useMemo(() => {\n const oldLines = oldText.split('\\n')\n const newLines = newText.split('\\n')\n return computeLcs(oldLines, newLines)\n }, [oldText, newText])\n\n return (\n <div\n ref={ref}\n className={cx(\n 'overflow-auto gds-radius-popover border border-border',\n glass === true && 'bg-white/5 backdrop-blur-md',\n glass !== true && 'bg-bg-secondary',\n className,\n )}\n data-component=\"diff-viewer\"\n data-variant={mode}\n >\n {mode === 'split' ? (\n <SplitView lines={lines} oldTitle={oldTitle} newTitle={newTitle} />\n ) : (\n <UnifiedView lines={lines} />\n )}\n </div>\n )\n },\n)\n","// email-list-item — inbox list entry with sender, subject, preview, timestamp\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type EmailListItemProps = {\n sender: string\n senderAvatar?: string\n subject: string\n preview?: string\n timestamp: string\n unread?: boolean\n starred?: boolean\n selected?: boolean\n onClick?: () => void\n className?: string\n}\n\nexport const EmailListItem = forwardRef<HTMLDivElement, EmailListItemProps>(\n function EmailListItem({ sender, senderAvatar, subject, preview, timestamp, unread, starred, selected, onClick, className }, ref) {\n const isUnread = unread === true\n const avatarText = senderAvatar ?? sender.charAt(0).toUpperCase()\n\n return (\n <div\n ref={ref}\n role={onClick !== undefined ? 'button' : undefined}\n tabIndex={onClick !== undefined ? 0 : undefined}\n onClick={onClick}\n onKeyDown={onClick !== undefined ? (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n onClick()\n }\n } : undefined}\n className={cx(\n 'flex items-start gap-3 gds-pad-x gds-pad-y-sm gds-text-body select-none',\n onClick !== undefined && 'cursor-pointer hover:bg-bg-tertiary',\n selected === true && 'bg-accent/5',\n className,\n )}\n data-component=\"email-list-item\"\n data-state={isUnread ? 'unread' : 'read'}\n >\n {/* avatar */}\n <div className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-bg-tertiary text-xs font-semibold text-fg-muted\">\n {avatarText}\n </div>\n\n {/* body */}\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2\">\n {isUnread && <span className=\"h-2 w-2 shrink-0 rounded-full bg-accent\" />}\n <span className={cx('truncate', isUnread ? 'font-semibold text-fg' : 'text-fg')}>{sender}</span>\n {starred === true && <span className=\"shrink-0 text-warning\">★</span>}\n </div>\n <div className={cx('truncate', isUnread ? 'font-medium text-fg' : 'text-fg-muted')}>{subject}</div>\n {preview !== undefined && (\n <div className=\"truncate text-fg-muted/60\">{preview}</div>\n )}\n </div>\n\n {/* timestamp */}\n <span className=\"shrink-0 text-xs text-fg-muted\">{timestamp}</span>\n </div>\n )\n },\n)\n","// embed — responsive embed container for iframes (videos, maps, etc)\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type EmbedProps = {\n src: string\n title?: string\n ratio?: number\n allowFullscreen?: boolean\n sandbox?: string\n loading?: 'eager' | 'lazy'\n glass?: boolean\n className?: string\n}\n\nexport const Embed = forwardRef<HTMLDivElement, EmbedProps>(\n function Embed(\n {\n src,\n title,\n ratio = 16 / 9,\n allowFullscreen = true,\n sandbox,\n loading = 'lazy',\n glass = false,\n className,\n },\n ref,\n ) {\n return (\n <div\n ref={ref}\n className={cx(\n 'relative w-full overflow-hidden border border-white/[0.06] gds-radius-card',\n glass && 'gds-glass',\n className,\n )}\n data-component=\"embed\"\n style={{ aspectRatio: ratio }}\n >\n <iframe\n src={src}\n title={title}\n className=\"absolute inset-0 h-full w-full border-none\"\n allowFullScreen={allowFullscreen}\n sandbox={sandbox}\n loading={loading}\n data-testid=\"embed-iframe\"\n />\n </div>\n )\n },\n)\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype EmployeeStatus = 'active' | 'inactive' | 'onboarding'\n\ntype EmployeeCardProps = React.HTMLAttributes<HTMLDivElement> & {\n avatar?: string\n department?: string\n email?: string\n name: string\n phone?: string\n role?: string\n status?: EmployeeStatus\n}\n\nconst statusCls: Record<EmployeeStatus, string> = {\n active: 'bg-success/15 text-success',\n inactive: 'bg-danger/15 text-danger',\n onboarding: 'bg-warning/15 text-warning',\n}\n\nexport const EmployeeCard = forwardRef<HTMLDivElement, EmployeeCardProps>(\n function EmployeeCard({ avatar, className, department, email, name, phone, role, status, ...props }, ref) {\n const initials = name.split(' ').map((w) => w[0]).join('').slice(0, 2).toUpperCase()\n\n return (\n <div\n className={cx('gds-ctx gds-radius-card border border-border bg-surface gds-pad', className)}\n data-component=\"employee-card\"\n ref={ref}\n {...props}\n >\n <div className=\"flex items-center gds-gap\">\n {avatar !== undefined ? (\n <img src={avatar} alt={name} className=\"h-12 w-12 rounded-full object-cover\" />\n ) : (\n <div className=\"flex h-12 w-12 items-center justify-center rounded-full bg-accent/10 text-sm font-semibold text-accent\">\n {initials}\n </div>\n )}\n <div className=\"flex-1 min-w-0\">\n <div className=\"font-semibold text-fg truncate\">{name}</div>\n {role !== undefined && <div className=\"text-xs text-fg-muted truncate\">{role}</div>}\n {department !== undefined && <div className=\"text-xs text-fg-muted truncate\">{department}</div>}\n </div>\n {status !== undefined && (\n <span className={cx('shrink-0 rounded-full px-2 py-0.5 text-xs font-medium', statusCls[status])}>\n {status}\n </span>\n )}\n </div>\n {(email !== undefined || phone !== undefined) && (\n <div className=\"mt-3 space-y-0.5 text-xs text-fg-muted\">\n {email !== undefined && <div>{email}</div>}\n {phone !== undefined && <div>{phone}</div>}\n </div>\n )}\n </div>\n )\n },\n)\n\nexport type { EmployeeCardProps, EmployeeStatus }\n","// error-boundary — catches render errors and shows fallback UI\nimport type { ErrorInfo, ReactNode } from 'react'\nimport { Component } from 'react'\n\nexport type ErrorBoundaryProps = {\n children: ReactNode\n fallback?: ReactNode | ((error: Error) => ReactNode)\n onError?: (error: Error, info: ErrorInfo) => void\n}\n\ntype ErrorBoundaryState = {\n error: Error | null\n}\n\nclass ErrorBoundaryClass extends Component<ErrorBoundaryProps, ErrorBoundaryState> {\n state: ErrorBoundaryState = { error: null }\n\n static getDerivedStateFromError(error: Error): ErrorBoundaryState {\n return { error }\n }\n\n componentDidCatch(error: Error, info: ErrorInfo) {\n if (this.props.onError !== undefined) {\n this.props.onError(error, info)\n }\n }\n\n render() {\n const { error } = this.state\n const { children, fallback } = this.props\n\n if (error === null) {\n return children\n }\n\n if (fallback !== undefined) {\n if (typeof fallback === 'function') {\n return fallback(error)\n }\n return fallback\n }\n\n return (\n <div\n className=\"flex flex-col items-center justify-center gap-2 gds-pad gds-text-body text-danger\"\n data-component=\"error-boundary\"\n >\n <p className=\"font-semibold\">Something went wrong</p>\n <p className=\"text-fg-muted gds-text-caption\">{error.message}</p>\n </div>\n )\n }\n}\n\nexport { ErrorBoundaryClass as ErrorBoundary }\n","// file-browser — table layout for file/folder navigation\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\n\nexport type FileNode = {\n id: string\n name: string\n type: 'file' | 'folder'\n size?: number\n modified?: string\n icon?: ReactNode\n}\n\nexport type FileBrowserProps = {\n files: FileNode[]\n onNavigate?: (id: string) => void\n onSelect?: (id: string) => void\n selected?: string\n className?: string\n}\n\nfunction FolderIcon() {\n return (\n <svg className=\"h-4 w-4 text-warning\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <path d=\"M1 3.5A1.5 1.5 0 012.5 2h3.379a1.5 1.5 0 011.06.44L8.062 3.5H13.5A1.5 1.5 0 0115 5v7.5a1.5 1.5 0 01-1.5 1.5h-11A1.5 1.5 0 011 12.5v-9z\" />\n </svg>\n )\n}\n\nfunction FileIcon() {\n return (\n <svg className=\"h-4 w-4 text-fg-muted\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.2\">\n <path d=\"M4 1.5h5l3.5 3.5V14a.5.5 0 01-.5.5H4a.5.5 0 01-.5-.5V2a.5.5 0 01.5-.5z\" />\n <path d=\"M9 1.5V5h3.5\" />\n </svg>\n )\n}\n\nfunction formatSize(bytes?: number): string {\n if (bytes === undefined) return '—'\n if (bytes < 1024) return `${bytes} B`\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`\n}\n\nexport const FileBrowser = forwardRef<HTMLDivElement, FileBrowserProps>(\n function FileBrowser({ files, onNavigate, onSelect, selected, className }, ref) {\n const handleClick = (node: FileNode) => {\n if (node.type === 'folder' && onNavigate !== undefined) {\n onNavigate(node.id)\n } else if (node.type === 'file' && onSelect !== undefined) {\n onSelect(node.id)\n }\n }\n\n return (\n <div\n ref={ref}\n className={cx('overflow-auto gds-radius-popover border border-border bg-surface', className)}\n data-component=\"file-browser\"\n >\n <table className=\"w-full border-collapse text-sm\">\n <thead>\n <tr className=\"border-b border-border bg-bg-secondary/50\">\n <th className=\"gds-pad-x gds-pad-y text-left gds-text-body font-medium uppercase tracking-wider text-fg-muted select-none\">\n Name\n </th>\n <th className=\"w-24 gds-pad-x gds-pad-y text-right gds-text-body font-medium uppercase tracking-wider text-fg-muted select-none\">\n Size\n </th>\n <th className=\"w-32 gds-pad-x gds-pad-y text-right gds-text-body font-medium uppercase tracking-wider text-fg-muted select-none\">\n Modified\n </th>\n </tr>\n </thead>\n <tbody>\n {files.length === 0 && (\n <tr>\n <td colSpan={3} className=\"gds-pad-x py-12 text-center text-sm text-fg-muted\">\n Empty folder\n </td>\n </tr>\n )}\n {files.map((node) => (\n <tr\n key={node.id}\n className={cx(\n 'border-b border-border transition-colors',\n focusCls,\n selected === node.id && 'bg-accent/10',\n selected !== node.id && 'hover:bg-bg-secondary/60',\n 'cursor-pointer',\n )}\n onClick={() => handleClick(node)}\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === 'Enter') handleClick(node)\n }}\n >\n <td className=\"gds-pad-x gds-pad-y\">\n <div className=\"flex items-center gds-gap-sm text-fg\">\n {node.icon ?? (node.type === 'folder' ? <FolderIcon /> : <FileIcon />)}\n <span className={node.type === 'folder' ? 'font-medium' : ''}>\n {node.name}\n </span>\n </div>\n </td>\n <td className=\"gds-pad-x gds-pad-y text-right text-fg-muted\">\n {node.type === 'folder' ? '—' : formatSize(node.size)}\n </td>\n <td className=\"gds-pad-x gds-pad-y text-right text-fg-muted\">\n {node.modified ?? '—'}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )\n },\n)\n","// file-card — file/document card with thumbnail, name, size, type badge, and actions\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { Badge } from '../l2-primitives/badge'\nimport { cx } from '../utils/cx'\n\ntype FileCardProps = {\n name: string\n size?: string\n type?: string\n thumbnail?: string\n actions?: ReactNode\n onClick?: () => void\n className?: string\n}\n\nconst FileCard = forwardRef<HTMLDivElement, FileCardProps>(\n function FileCard({ name, size, type, thumbnail, actions, onClick, className }, ref) {\n const isClickable = onClick !== undefined\n\n return (\n <div\n ref={ref}\n role={isClickable ? 'button' : undefined}\n tabIndex={isClickable ? 0 : undefined}\n onClick={isClickable ? onClick : undefined}\n onKeyDown={isClickable ? (e) => {\n if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); onClick() }\n } : undefined}\n className={cx(\n 'gds-ctx gds-radius-card border border-border bg-surface overflow-hidden select-none',\n isClickable && 'cursor-pointer hover:border-accent/40 transition-colors',\n className,\n )}\n data-component=\"file-card\"\n >\n {thumbnail !== undefined && (\n <div className=\"flex h-28 items-center justify-center bg-bg-tertiary\">\n <img src={thumbnail} alt={name} className=\"h-full w-full object-cover\" />\n </div>\n )}\n <div className=\"gds-pad\">\n <div className=\"truncate font-medium text-fg gds-text-body\">{name}</div>\n <div className=\"mt-1 flex items-center gap-2\">\n {size !== undefined && <span className=\"text-fg-muted gds-text-caption\">{size}</span>}\n {type !== undefined && <Badge>{type}</Badge>}\n </div>\n {actions !== undefined && <div className=\"mt-2 flex gap-1\">{actions}</div>}\n </div>\n </div>\n )\n },\n)\n\nexport { FileCard }\nexport type { FileCardProps }\n","// form-builder — schema-driven form renderer\nimport { forwardRef } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\n\nexport type FormField = {\n id: string\n label: string\n type: 'checkbox' | 'number' | 'select' | 'text' | 'textarea'\n options?: string[]\n required?: boolean\n placeholder?: string\n}\n\nexport type FormBuilderProps = {\n fields: FormField[]\n values: Record<string, unknown>\n onChange: (id: string, value: unknown) => void\n className?: string\n}\n\nconst inputCls = cx(\n 'w-full gds-radius-button border border-border bg-bg gds-pad-x gds-pad-y-sm text-sm text-fg',\n 'placeholder:text-fg-muted/50',\n focusCls,\n)\n\nfunction renderField(\n field: FormField,\n value: unknown,\n onChange: (id: string, value: unknown) => void,\n) {\n const id = `form-field-${field.id}`\n\n if (field.type === 'checkbox') {\n return (\n <label htmlFor={id} className=\"flex cursor-pointer items-center gds-gap-sm select-none\">\n <input\n id={id}\n type=\"checkbox\"\n checked={Boolean(value)}\n onChange={(e) => onChange(field.id, e.target.checked)}\n className={cx('h-4 w-4 rounded border-border', focusCls)}\n />\n <span className=\"text-sm text-fg\">{field.label}</span>\n {field.required === true && <span className=\"text-danger\">*</span>}\n </label>\n )\n }\n\n if (field.type === 'textarea') {\n return (\n <div className=\"flex flex-col gds-gap-xs\">\n <label htmlFor={id} className=\"gds-text-body font-medium text-fg-muted select-none\">\n {field.label}\n {field.required === true && <span className=\"ml-0.5 text-danger\">*</span>}\n </label>\n <textarea\n id={id}\n value={String(value ?? '')}\n placeholder={field.placeholder}\n onChange={(e) => onChange(field.id, e.target.value)}\n className={cx(inputCls, 'min-h-[72px] resize-y')}\n rows={3}\n />\n </div>\n )\n }\n\n if (field.type === 'select') {\n return (\n <div className=\"flex flex-col gds-gap-xs\">\n <label htmlFor={id} className=\"gds-text-body font-medium text-fg-muted select-none\">\n {field.label}\n {field.required === true && <span className=\"ml-0.5 text-danger\">*</span>}\n </label>\n <select\n id={id}\n value={String(value ?? '')}\n onChange={(e) => onChange(field.id, e.target.value)}\n className={cx(inputCls, 'cursor-pointer')}\n >\n <option value=\"\">{field.placeholder ?? 'Select...'}</option>\n {field.options?.map((opt) => (\n <option key={opt} value={opt}>{opt}</option>\n ))}\n </select>\n </div>\n )\n }\n\n // text or number\n return (\n <div className=\"flex flex-col gds-gap-xs\">\n <label htmlFor={id} className=\"gds-text-body font-medium text-fg-muted select-none\">\n {field.label}\n {field.required === true && <span className=\"ml-0.5 text-danger\">*</span>}\n </label>\n <input\n id={id}\n type={field.type}\n value={String(value ?? '')}\n placeholder={field.placeholder}\n onChange={(e) => {\n if (field.type === 'number') {\n onChange(field.id, e.target.value === '' ? '' : Number(e.target.value))\n } else {\n onChange(field.id, e.target.value)\n }\n }}\n className={inputCls}\n />\n </div>\n )\n}\n\nexport const FormBuilder = forwardRef<HTMLDivElement, FormBuilderProps>(\n function FormBuilder({ fields, values, onChange, className }, ref) {\n return (\n <div\n ref={ref}\n className={cx('flex flex-col gap-4', className)}\n data-component=\"form-builder\"\n >\n {fields.map((field) => (\n <div key={field.id}>\n {renderField(field, values[field.id], onChange)}\n </div>\n ))}\n </div>\n )\n },\n)\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype HeatmapRow = {\n label: string\n values: number[]\n}\n\ntype HeatmapTableProps = React.HTMLAttributes<HTMLTableElement> & {\n headers: string[]\n maxValue?: number\n rows: HeatmapRow[]\n}\n\nexport const HeatmapTable = forwardRef<HTMLTableElement, HeatmapTableProps>(\n function HeatmapTable({ className, headers, maxValue, rows, ...props }, ref) {\n const resolvedMax = maxValue ?? Math.max(1, ...rows.flatMap((r) => r.values))\n\n return (\n <table\n className={cx('w-full border-collapse text-xs', className)}\n data-component=\"heatmap-table\"\n ref={ref}\n {...props}\n >\n <thead>\n <tr>\n <th className=\"p-1.5 text-left font-medium text-fg-muted\" />\n {headers.map((h) => (\n <th className=\"p-1.5 text-center font-medium text-fg-muted\" key={h}>{h}</th>\n ))}\n </tr>\n </thead>\n <tbody>\n {rows.map((row) => (\n <tr key={row.label}>\n <td className=\"p-1.5 font-medium text-fg\">{row.label}</td>\n {row.values.map((val, i) => {\n const intensity = Math.min(val / resolvedMax, 1)\n return (\n <td\n className=\"p-1.5 text-center tabular-nums text-fg\"\n key={i}\n style={{ backgroundColor: `color-mix(in srgb, var(--color-accent) ${Math.round(intensity * 20)}%, transparent)` }}\n >\n {val}\n </td>\n )\n })}\n </tr>\n ))}\n </tbody>\n </table>\n )\n },\n)\n\nexport type { HeatmapRow, HeatmapTableProps }\n","// image-preview — lightbox image viewer with fullscreen overlay\nimport { forwardRef, useCallback, useEffect, useState } from 'react'\nimport { createPortal } from 'react-dom'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\n\nexport type ImagePreviewProps = {\n src: string\n alt?: string\n thumbnailClassName?: string\n className?: string\n}\n\nexport const ImagePreview = forwardRef<HTMLDivElement, ImagePreviewProps>(\n function ImagePreview({ src, alt = '', thumbnailClassName, className }, ref) {\n const [open, setOpen] = useState(false)\n\n const handleOpen = useCallback(() => setOpen(true), [])\n const handleClose = useCallback(() => setOpen(false), [])\n\n // escape key to close\n useEffect(() => {\n if (!open) return\n const handler = (e: KeyboardEvent) => {\n if (e.key === 'Escape') handleClose()\n }\n window.addEventListener('keydown', handler)\n return () => window.removeEventListener('keydown', handler)\n }, [open, handleClose])\n\n // scroll lock when open\n useEffect(() => {\n if (!open) return\n const prev = document.body.style.overflow\n document.body.style.overflow = 'hidden'\n return () => { document.body.style.overflow = prev }\n }, [open])\n\n return (\n <div ref={ref} className={cx('inline-block', className)} data-component=\"image-preview\">\n {/* thumbnail */}\n <button\n type=\"button\"\n onClick={handleOpen}\n className={cx('cursor-pointer border-0 bg-transparent p-0', focusCls)}\n aria-label={`Preview ${alt}`}\n >\n <img\n src={src}\n alt={alt}\n className={cx('gds-radius object-cover', thumbnailClassName)}\n data-testid=\"thumbnail\"\n />\n </button>\n\n {/* lightbox overlay */}\n {open && createPortal(\n <div\n className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/90\"\n onClick={(e) => { if (e.target === e.currentTarget) handleClose() }}\n data-testid=\"lightbox\"\n >\n {/* close button */}\n <button\n type=\"button\"\n onClick={handleClose}\n className={cx(\n 'absolute right-4 top-4 rounded-full bg-white/10 p-2 text-white transition-colors hover:bg-white/20',\n focusCls,\n )}\n aria-label=\"Close preview\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\">\n <path d=\"M3 3l10 10M13 3L3 13\" />\n </svg>\n </button>\n\n {/* full image */}\n <img\n src={src}\n alt={alt}\n className=\"max-h-[90vh] max-w-[90vw] object-contain\"\n />\n </div>,\n document.body,\n )}\n </div>\n )\n },\n)\n","import type { ReactNode } from 'react'\nimport { forwardRef, useEffect, useRef } from 'react'\n\nimport { LoadingDots } from '../l3-atoms/loading-dots'\nimport { cx } from '../utils/cx'\n\ntype InfiniteScrollProps = React.HTMLAttributes<HTMLDivElement> & {\n onLoadMore: () => void\n hasMore: boolean\n loading?: boolean\n threshold?: number\n loader?: ReactNode\n}\n\nexport const InfiniteScroll = forwardRef<HTMLDivElement, InfiniteScrollProps>(\n function InfiniteScroll(\n {\n children,\n className,\n hasMore,\n loader,\n loading,\n onLoadMore,\n threshold = 0.8,\n ...props\n },\n ref,\n ) {\n const sentinelRef = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n const sentinel = sentinelRef.current\n if (sentinel === null) return\n\n const observer = new IntersectionObserver(\n (entries) => {\n const entry = entries[0]\n if (entry !== undefined && entry.isIntersecting && hasMore && !loading) {\n onLoadMore()\n }\n },\n { threshold },\n )\n\n observer.observe(sentinel)\n return () => observer.disconnect()\n }, [hasMore, loading, onLoadMore, threshold])\n\n return (\n <div\n className={cx('relative', className)}\n data-component=\"infinite-scroll\"\n ref={ref}\n {...props}\n >\n {children}\n\n {loading === true && (\n <div className=\"flex items-center justify-center py-4\">\n {loader ?? <LoadingDots />}\n </div>\n )}\n\n <div ref={sentinelRef} data-sentinel=\"true\" className=\"h-px w-full\" />\n </div>\n )\n },\n)\n\nexport type { InfiniteScrollProps }\n","// json-node — recursive tree node for json-viewer\nimport { useCallback, useState } from 'react'\n\ntype NodeProps = {\n value: unknown\n keyName?: string\n depth: number\n defaultExpanded: boolean | number\n}\n\nfunction isExpandedAtDepth(defaultExpanded: boolean | number, depth: number): boolean {\n if (defaultExpanded === true) return true\n if (defaultExpanded === false) return false\n return depth < defaultExpanded\n}\n\nfunction JsonString({ value }: { value: string }) {\n return <span className=\"text-success\">\"{value}\"</span>\n}\n\nfunction JsonNumber({ value }: { value: number }) {\n return <span className=\"text-accent\">{String(value)}</span>\n}\n\nfunction JsonBoolean({ value }: { value: boolean }) {\n return <span className=\"text-[#c084fc]\">{String(value)}</span>\n}\n\nfunction JsonNull() {\n return <span className=\"text-fg-muted\">null</span>\n}\n\nexport function JsonNode({ value, keyName, depth, defaultExpanded }: NodeProps) {\n const [expanded, setExpanded] = useState(() => isExpandedAtDepth(defaultExpanded, depth))\n\n const handleToggle = useCallback(() => {\n setExpanded((prev) => !prev)\n }, [])\n\n // render key prefix\n const keyPrefix = keyName !== undefined ? (\n <span className=\"text-fg\">{keyName}: </span>\n ) : null\n\n // primitives\n if (value === null || value === undefined) {\n return <div style={{ paddingLeft: `${depth * 16}px` }}>{keyPrefix}<JsonNull /></div>\n }\n if (typeof value === 'string') {\n return <div style={{ paddingLeft: `${depth * 16}px` }}>{keyPrefix}<JsonString value={value} /></div>\n }\n if (typeof value === 'number') {\n return <div style={{ paddingLeft: `${depth * 16}px` }}>{keyPrefix}<JsonNumber value={value} /></div>\n }\n if (typeof value === 'boolean') {\n return <div style={{ paddingLeft: `${depth * 16}px` }}>{keyPrefix}<JsonBoolean value={value} /></div>\n }\n\n // arrays\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return <div style={{ paddingLeft: `${depth * 16}px` }}>{keyPrefix}[]</div>\n }\n\n if (!expanded) {\n return (\n <div style={{ paddingLeft: `${depth * 16}px` }}>\n {keyPrefix}\n <button\n className=\"cursor-pointer text-fg-muted hover:text-fg\"\n onClick={handleToggle}\n data-testid=\"toggle\"\n >\n [...{value.length} items]\n </button>\n </div>\n )\n }\n\n return (\n <div>\n <div style={{ paddingLeft: `${depth * 16}px` }}>\n {keyPrefix}\n <button\n className=\"cursor-pointer text-fg-muted hover:text-fg\"\n onClick={handleToggle}\n data-testid=\"toggle\"\n >\n [\n </button>\n </div>\n {value.map((item, idx) => (\n <JsonNode key={idx} value={item} depth={depth + 1} defaultExpanded={defaultExpanded} />\n ))}\n <div style={{ paddingLeft: `${depth * 16}px` }}>]</div>\n </div>\n )\n }\n\n // objects\n if (typeof value === 'object') {\n const entries = Object.entries(value)\n if (entries.length === 0) {\n return <div style={{ paddingLeft: `${depth * 16}px` }}>{keyPrefix}{'{}'}</div>\n }\n\n if (!expanded) {\n return (\n <div style={{ paddingLeft: `${depth * 16}px` }}>\n {keyPrefix}\n <button\n className=\"cursor-pointer text-fg-muted hover:text-fg\"\n onClick={handleToggle}\n data-testid=\"toggle\"\n >\n {'{'} ...{entries.length} keys {'}'}\n </button>\n </div>\n )\n }\n\n return (\n <div>\n <div style={{ paddingLeft: `${depth * 16}px` }}>\n {keyPrefix}\n <button\n className=\"cursor-pointer text-fg-muted hover:text-fg\"\n onClick={handleToggle}\n data-testid=\"toggle\"\n >\n {'{'}\n </button>\n </div>\n {entries.map(([k, v]) => (\n <JsonNode key={k} value={v} keyName={k} depth={depth + 1} defaultExpanded={defaultExpanded} />\n ))}\n <div style={{ paddingLeft: `${depth * 16}px` }}>{'}'}</div>\n </div>\n )\n }\n\n // fallback\n return <div style={{ paddingLeft: `${depth * 16}px` }}>{keyPrefix}{String(value)}</div>\n}\n","// json-viewer — interactive collapsible JSON tree viewer\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { JsonNode } from './json-node'\n\nexport type JsonViewerProps = {\n data: unknown\n defaultExpanded?: boolean | number\n glass?: boolean\n className?: string\n}\n\nexport const JsonViewer = forwardRef<HTMLDivElement, JsonViewerProps>(\n function JsonViewer({ data, defaultExpanded = 2, glass, className }, ref) {\n return (\n <div\n ref={ref}\n className={cx(\n 'overflow-auto gds-radius-popover border border-border gds-pad-x gds-pad-y font-mono text-xs leading-5',\n glass === true && 'bg-white/5 backdrop-blur-md',\n glass !== true && 'bg-bg-secondary',\n className,\n )}\n data-component=\"json-viewer\"\n >\n <JsonNode value={data} depth={0} defaultExpanded={defaultExpanded} />\n </div>\n )\n },\n)\n","// kanban — column-based board layout for items\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type KanbanItem = {\n id: string\n title: string\n description?: string\n tags?: string[]\n}\n\nexport type KanbanColumn = {\n id: string\n title: string\n items: KanbanItem[]\n}\n\nexport type KanbanProps = {\n columns: KanbanColumn[]\n onMoveItem?: (itemId: string, fromCol: string, toCol: string) => void\n renderItem?: (item: KanbanItem) => ReactNode\n className?: string\n}\n\nfunction KanbanTag({ label }: { label: string }) {\n return (\n <span className=\"inline-block gds-radius-badge bg-bg-tertiary gds-pad-x-sm py-0.5 gds-text-caption font-medium text-fg-muted\">\n {label}\n </span>\n )\n}\n\nfunction KanbanCard({ item }: { item: KanbanItem }) {\n return (\n <div className=\"gds-radius-popover border border-border bg-surface gds-pad-x gds-pad-y transition-colors hover:border-fg-muted/30\">\n <div className=\"text-sm font-medium text-fg\">{item.title}</div>\n {item.description !== undefined && (\n <p className=\"mt-1 gds-text-body text-fg-muted\">{item.description}</p>\n )}\n {item.tags !== undefined && item.tags.length > 0 && (\n <div className=\"mt-2 flex flex-wrap gds-gap-xs\">\n {item.tags.map((tag) => (\n <KanbanTag key={tag} label={tag} />\n ))}\n </div>\n )}\n </div>\n )\n}\n\nfunction KanbanColumnView({\n column,\n renderItem,\n}: {\n column: KanbanColumn\n renderItem?: (item: KanbanItem) => ReactNode\n}) {\n return (\n <div className=\"flex w-72 shrink-0 flex-col gds-radius-popover bg-bg-secondary/50 gds-pad-x-sm gds-pad-y\">\n <div className=\"mb-2 flex items-center justify-between px-1\">\n <h3 className=\"gds-text-body font-semibold uppercase tracking-wider text-fg-muted\">\n {column.title}\n </h3>\n <span className=\"gds-text-body text-fg-muted/60\">{column.items.length}</span>\n </div>\n <div className=\"flex flex-1 flex-col gds-gap-sm overflow-y-auto\">\n {column.items.map((item) => (\n <div key={item.id}>\n {renderItem !== undefined ? renderItem(item) : <KanbanCard item={item} />}\n </div>\n ))}\n {column.items.length === 0 && (\n <div className=\"py-8 text-center gds-text-body text-fg-muted/40\">\n No items\n </div>\n )}\n </div>\n </div>\n )\n}\n\nexport const Kanban = forwardRef<HTMLDivElement, KanbanProps>(\n function Kanban({ columns, renderItem, className }, ref) {\n return (\n <div\n ref={ref}\n className={cx('flex gds-gap overflow-x-auto p-1', className)}\n data-component=\"kanban\"\n >\n {columns.map((col) => (\n <KanbanColumnView\n key={col.id}\n column={col}\n renderItem={renderItem}\n />\n ))}\n </div>\n )\n },\n)\n","// markdown-parser — pure markdown-to-html conversion without external deps\n\nfunction sanitize(html: string): string {\n return html\n .replace(/<script[\\s\\S]*?<\\/script>/gi, '')\n .replace(/<script[^>]*>/gi, '')\n .replace(/\\son\\w+\\s*=\\s*\"[^\"]*\"/gi, '')\n .replace(/\\son\\w+\\s*=\\s*'[^']*'/gi, '')\n .replace(/\\son\\w+\\s*=\\s*[^\\s>]*/gi, '')\n}\n\nfunction escapeHtml(text: string): string {\n return text\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n}\n\nfunction parseInline(text: string): string {\n let result = escapeHtml(text)\n // code (backtick) — must come before bold/italic\n result = result.replace(/`([^`]+)`/g, '<code class=\"rounded bg-bg-tertiary px-1 py-0.5 font-mono text-[0.85em]\">$1</code>')\n // bold\n result = result.replace(/\\*\\*([^*]+)\\*\\*/g, '<strong>$1</strong>')\n // italic\n result = result.replace(/\\*([^*]+)\\*/g, '<em>$1</em>')\n // links\n result = result.replace(\n /\\[([^\\]]+)\\]\\(([^)]+)\\)/g,\n '<a href=\"$2\" class=\"text-accent hover:underline\" target=\"_blank\" rel=\"noopener noreferrer\">$1</a>',\n )\n return result\n}\n\nexport function parseMarkdown(content: string): string {\n const lines = content.split('\\n')\n const output: string[] = []\n let inCodeBlock = false\n let codeLines: string[] = []\n let inList = false\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i]\n\n // fenced code blocks\n if (line.trimStart().startsWith('```')) {\n if (inCodeBlock) {\n output.push(\n `<pre class=\"overflow-auto rounded-lg bg-bg-tertiary p-3 font-mono text-xs\"><code>${escapeHtml(codeLines.join('\\n'))}</code></pre>`,\n )\n codeLines = []\n inCodeBlock = false\n } else {\n if (inList) {\n output.push('</ul>')\n inList = false\n }\n inCodeBlock = true\n }\n continue\n }\n\n if (inCodeBlock) {\n codeLines.push(line)\n continue\n }\n\n // horizontal rule\n if (/^---+$/.test(line.trim())) {\n if (inList) {\n output.push('</ul>')\n inList = false\n }\n output.push('<hr class=\"my-3 border-border\" />')\n continue\n }\n\n // headings\n const headingMatch = line.match(/^(#{1,6})\\s+(.+)$/)\n if (headingMatch !== null) {\n if (inList) {\n output.push('</ul>')\n inList = false\n }\n const level = headingMatch[1].length\n const sizes = ['text-xl', 'text-lg', 'text-base', 'text-sm', 'text-xs', 'text-xs']\n const margins = ['mt-4 mb-2', 'mt-3 mb-2', 'mt-3 mb-1', 'mt-2 mb-1', 'mt-2 mb-1', 'mt-2 mb-1']\n output.push(\n `<h${level} class=\"font-semibold ${sizes[level - 1]} ${margins[level - 1]}\">${parseInline(headingMatch[2])}</h${level}>`,\n )\n continue\n }\n\n // blockquote\n if (line.trimStart().startsWith('> ')) {\n if (inList) {\n output.push('</ul>')\n inList = false\n }\n const text = line.replace(/^>\\s*/, '')\n output.push(\n `<blockquote class=\"border-l-2 border-accent/30 pl-3 text-fg-muted italic\">${parseInline(text)}</blockquote>`,\n )\n continue\n }\n\n // unordered list\n const listMatch = line.match(/^(\\s*)[-*]\\s+(.+)$/)\n if (listMatch !== null) {\n if (!inList) {\n output.push('<ul class=\"list-disc pl-5 space-y-0.5\">')\n inList = true\n }\n output.push(`<li>${parseInline(listMatch[2])}</li>`)\n continue\n }\n\n // close list if non-list line\n if (inList) {\n output.push('</ul>')\n inList = false\n }\n\n // empty line\n if (line.trim() === '') {\n continue\n }\n\n // paragraph\n output.push(`<p class=\"mb-2\">${parseInline(line)}</p>`)\n }\n\n // close dangling blocks\n if (inCodeBlock) {\n output.push(\n `<pre class=\"overflow-auto rounded-lg bg-bg-tertiary p-3 font-mono text-xs\"><code>${escapeHtml(codeLines.join('\\n'))}</code></pre>`,\n )\n }\n if (inList) {\n output.push('</ul>')\n }\n\n return sanitize(output.join('\\n'))\n}\n","// markdown-preview — simple markdown renderer without external deps\nimport { forwardRef, useMemo } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { parseMarkdown } from './markdown-parser'\n\nexport type MarkdownPreviewProps = {\n content: string\n glass?: boolean\n className?: string\n}\n\nexport const MarkdownPreview = forwardRef<HTMLDivElement, MarkdownPreviewProps>(\n function MarkdownPreview({ content, glass, className }, ref) {\n const html = useMemo(() => parseMarkdown(content), [content])\n\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-radius-popover gds-pad-x gds-pad-y text-sm text-fg leading-relaxed',\n glass === true && 'bg-white/5 backdrop-blur-md',\n className,\n )}\n data-component=\"markdown-preview\"\n dangerouslySetInnerHTML={{ __html: html }}\n />\n )\n },\n)\n","// markdown-editor — split pane editor with live preview\nimport { forwardRef, useCallback } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { MarkdownPreview } from './markdown-preview'\n\ntype MarkdownEditorProps = {\n value: string\n onChange: (value: string) => void\n placeholder?: string\n className?: string\n}\n\nconst MarkdownEditor = forwardRef<HTMLDivElement, MarkdownEditorProps>(\n function MarkdownEditor({ value, onChange, placeholder, className }, ref) {\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLTextAreaElement>) => onChange(e.target.value),\n [onChange],\n )\n\n return (\n <div\n ref={ref}\n className={cx('flex gap-px rounded-lg border border-border bg-surface overflow-hidden', className)}\n data-component=\"markdown-editor\"\n >\n <textarea\n className=\"flex-1 resize-none bg-transparent p-3 text-sm text-fg outline-none font-mono min-h-[200px]\"\n value={value}\n onChange={handleChange}\n placeholder={placeholder}\n />\n <div className=\"w-px bg-border\" />\n <div className=\"flex-1 overflow-auto min-h-[200px]\">\n <MarkdownPreview content={value} className=\"h-full\" />\n </div>\n </div>\n )\n },\n)\n\nexport { MarkdownEditor }\nexport type { MarkdownEditorProps }\n","// notification-center — notification list panel with dismiss and clear\nimport { forwardRef } from 'react'\n\nimport { Notification } from '../l4-molecules/notification'\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\ntype NotificationItem = {\n id: string\n message?: string\n timestamp?: string\n title: string\n variant?: 'danger' | 'info' | 'success' | 'warning'\n}\n\nexport type NotificationCenterProps = React.HTMLAttributes<HTMLDivElement> & {\n emptyMessage?: string\n glass?: boolean\n notifications: NotificationItem[]\n onClear?: () => void\n onDismiss?: (id: string) => void\n}\n\nexport const NotificationCenter = forwardRef<HTMLDivElement, NotificationCenterProps>(\n function NotificationCenter(\n {\n className,\n emptyMessage = 'No notifications',\n glass,\n notifications,\n onClear,\n onDismiss,\n ...props\n },\n ref,\n ) {\n const hasItems = notifications.length > 0\n\n return (\n <div\n ref={ref}\n className={cx(\n 'flex flex-col gds-radius-popover border border-border',\n glass === true ? cx(glassClass(glass), 'border-white/10 bg-bg/60') : 'bg-surface',\n className,\n )}\n data-component=\"notification-center\"\n {...props}\n >\n <div className=\"flex items-center justify-between border-b border-border gds-pad-x gds-pad-y-sm\">\n <span className=\"gds-text-body font-medium text-fg select-none\">Notifications</span>\n {hasItems && onClear !== undefined && (\n <button\n type=\"button\"\n onClick={onClear}\n className={cx('gds-text-label text-accent hover:text-accent-hover', focusCls)}\n >\n Clear all\n </button>\n )}\n </div>\n\n <div className=\"flex-1 overflow-y-auto\">\n {hasItems ? (\n <div className=\"flex flex-col gds-gap-sm gds-pad\">\n {notifications.map((n) => (\n <Notification\n key={n.id}\n title={n.title}\n description={n.message}\n variant={n.variant ?? 'info'}\n onClose={onDismiss !== undefined ? () => onDismiss(n.id) : undefined}\n />\n ))}\n </div>\n ) : (\n <div className=\"flex items-center justify-center gds-pad-lg\">\n <span className=\"gds-text-label text-fg-muted\">{emptyMessage}</span>\n </div>\n )}\n </div>\n </div>\n )\n },\n)\n\nexport type { NotificationItem }\n","// notification-toast — renders stacked toasts with auto-dismiss via portal\nimport { forwardRef, useEffect } from 'react'\nimport { createPortal } from 'react-dom'\n\nimport { Toast } from '../l4-molecules/toast'\nimport { cx } from '../utils/cx'\n\ntype ToastEntry = {\n id: string\n message?: string\n title: string\n variant?: 'danger' | 'info' | 'success' | 'warning'\n}\n\ntype NotificationToastPosition = 'bottom-right' | 'top-right'\n\ntype NotificationToastProps = {\n className?: string\n onDismiss: (id: string) => void\n position?: NotificationToastPosition\n toasts: ToastEntry[]\n}\n\nconst positionMap: Record<NotificationToastPosition, string> = {\n 'top-right': 'top-4 right-4',\n 'bottom-right': 'bottom-4 right-4',\n}\n\nconst variantToToast = (v?: ToastEntry['variant']) => {\n if (v === 'info') return 'default'\n return v ?? 'default'\n}\n\nexport const NotificationToast = forwardRef<HTMLDivElement, NotificationToastProps>(\n function NotificationToast({ toasts, onDismiss, position = 'top-right', className }, ref) {\n useEffect(() => {\n const timers = toasts.map((t) =>\n window.setTimeout(() => onDismiss(t.id), 5000),\n )\n return () => timers.forEach((id) => window.clearTimeout(id))\n }, [toasts, onDismiss])\n\n if (toasts.length === 0) return null\n\n return createPortal(\n <div\n ref={ref}\n className={cx('fixed z-50 flex w-80 flex-col gap-2', positionMap[position], className)}\n data-component=\"notification-toast\"\n >\n {toasts.map((t) => (\n <Toast key={t.id} title={t.title} description={t.message} variant={variantToToast(t.variant)} onClose={() => onDismiss(t.id)} />\n ))}\n </div>,\n document.body,\n )\n },\n)\n\nexport type { NotificationToastPosition, NotificationToastProps, ToastEntry }\n","// parallax — container where children move at different speeds on scroll\nimport type { ReactNode } from 'react'\nimport { forwardRef, useCallback, useEffect, useRef, useState } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type ParallaxProps = {\n children: ReactNode\n speed?: number\n direction?: 'horizontal' | 'vertical'\n disabled?: boolean\n className?: string\n}\n\nexport const Parallax = forwardRef<HTMLDivElement, ParallaxProps>(\n function Parallax({ children, speed = 0.5, direction = 'vertical', disabled = false, className }, ref) {\n const innerRef = useRef<HTMLDivElement | null>(null)\n const [offset, setOffset] = useState(0)\n const rafRef = useRef<number>(0)\n\n const handleScroll = useCallback(() => {\n if (rafRef.current !== 0) return\n rafRef.current = requestAnimationFrame(() => {\n const el = innerRef.current\n if (el !== null) {\n const rect = el.getBoundingClientRect()\n const scrollOffset = direction === 'vertical'\n ? -rect.top * speed\n : -rect.left * speed\n setOffset(scrollOffset)\n }\n rafRef.current = 0\n })\n }, [speed, direction])\n\n useEffect(() => {\n if (disabled) return\n window.addEventListener('scroll', handleScroll, { passive: true })\n handleScroll()\n return () => {\n window.removeEventListener('scroll', handleScroll)\n if (rafRef.current !== 0) {\n cancelAnimationFrame(rafRef.current)\n }\n }\n }, [disabled, handleScroll])\n\n // check prefers-reduced-motion\n const prefersReducedMotion = useRef(false)\n useEffect(() => {\n const mq = window.matchMedia('(prefers-reduced-motion: reduce)')\n prefersReducedMotion.current = mq.matches\n }, [])\n\n const shouldDisable = disabled || prefersReducedMotion.current\n\n const transform = shouldDisable\n ? undefined\n : direction === 'vertical'\n ? `translateY(${offset}px)`\n : `translateX(${offset}px)`\n\n return (\n <div\n ref={(node) => {\n innerRef.current = node\n if (typeof ref === 'function') {\n ref(node)\n } else if (ref !== null && ref !== undefined) {\n (ref as React.MutableRefObject<HTMLDivElement | null>).current = node\n }\n }}\n className={cx('will-change-transform', className)}\n style={transform !== undefined ? { transform } : undefined}\n data-component=\"parallax\"\n >\n {children}\n </div>\n )\n },\n)\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype PayslipDeduction = { label: string; amount: number }\n\ntype PayslipCardProps = React.HTMLAttributes<HTMLDivElement> & {\n currency?: string\n deductions: PayslipDeduction[]\n gross: number\n net: number\n period: string\n}\n\nexport const PayslipCard = forwardRef<HTMLDivElement, PayslipCardProps>(\n function PayslipCard({ className, currency = '\\u00a5', deductions, gross, net, period, ...props }, ref) {\n const fmt = (n: number) => `${currency}${n.toLocaleString()}`\n\n return (\n <div\n className={cx('gds-ctx gds-radius-card border border-border bg-surface gds-pad', className)}\n data-component=\"payslip-card\"\n ref={ref}\n {...props}\n >\n <div className=\"mb-3 font-semibold text-fg\">{period}</div>\n <div className=\"flex justify-between text-sm\">\n <span className=\"text-fg-muted\">Gross</span>\n <span className=\"text-fg\">{fmt(gross)}</span>\n </div>\n {deductions.map((d) => (\n <div key={d.label} className=\"flex justify-between text-sm\">\n <span className=\"text-fg-muted\">{d.label}</span>\n <span className=\"text-danger\">-{fmt(d.amount)}</span>\n </div>\n ))}\n <div className=\"my-2 border-t border-border\" />\n <div className=\"flex justify-between font-bold\">\n <span className=\"text-fg\">Net Pay</span>\n <span className=\"text-fg\">{fmt(net)}</span>\n </div>\n </div>\n )\n },\n)\n\nexport type { PayslipCardProps, PayslipDeduction }\n","// permission-matrix — role/permission grid with checkbox intersections\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype PermissionMatrixProps = Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> & {\n roles: string[]\n permissions: string[]\n values: boolean[][]\n onChange?: (perm: number, role: number, value: boolean) => void\n readonly?: boolean\n}\n\nconst PermissionMatrix = forwardRef<HTMLDivElement, PermissionMatrixProps>(\n function PermissionMatrix({ roles, permissions, values, onChange, readonly, className, ...props }, ref) {\n return (\n <div ref={ref} className={cx('overflow-auto', className)} data-component=\"permission-matrix\" {...props}>\n <table className=\"w-full border-collapse gds-text-body\">\n <thead>\n <tr>\n <th className=\"border border-border bg-bg-secondary px-3 py-2 text-left text-fg-muted font-medium select-none\">Permission</th>\n {roles.map((role) => (\n <th key={role} className=\"border border-border bg-bg-secondary px-3 py-2 text-center text-fg-muted font-medium select-none\">{role}</th>\n ))}\n </tr>\n </thead>\n <tbody>\n {permissions.map((perm, pi) => (\n <tr key={perm}>\n <td className=\"border border-border px-3 py-2 text-fg select-none\">{perm}</td>\n {roles.map((_, ri) => {\n const checked = values[pi]?.[ri] ?? false\n return (\n <td key={ri} className=\"border border-border px-3 py-2 text-center\">\n {readonly === true ? (\n <span className={checked ? 'text-success' : 'text-fg-muted'}>{checked ? '✓' : '—'}</span>\n ) : (\n <input\n type=\"checkbox\"\n checked={checked}\n onChange={(e) => onChange?.(pi, ri, e.target.checked)}\n className=\"cursor-pointer accent-accent\"\n aria-label={`${perm} - ${roles[ri]}`}\n />\n )}\n </td>\n )\n })}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )\n },\n)\n\nexport { PermissionMatrix }\nexport type { PermissionMatrixProps }\n","// property-editor — key-value property editor with inline editing\nimport { forwardRef } from 'react'\n\nimport { InlineEdit } from '../l4-molecules/inline-edit'\nimport { cx } from '../utils/cx'\n\ntype PropertyItem = {\n editable?: boolean\n key: string\n value: string\n}\n\ntype PropertyEditorProps = {\n className?: string\n onChange?: (key: string, value: string) => void\n properties: PropertyItem[]\n}\n\nexport const PropertyEditor = forwardRef<HTMLDivElement, PropertyEditorProps>(\n function PropertyEditor({ className, onChange, properties }, ref) {\n return (\n <div\n ref={ref}\n className={cx('gds-radius-popover border border-border overflow-hidden', className)}\n data-component=\"property-editor\"\n >\n {properties.map((prop, i) => (\n <div\n key={prop.key}\n className={cx(\n 'flex items-center justify-between gds-pad-x gds-pad-y-sm',\n i < properties.length - 1 && 'border-b border-border',\n )}\n >\n <span className=\"gds-text-body font-medium text-fg-muted\">{prop.key}</span>\n <div className=\"text-right\">\n {prop.editable === true && onChange !== undefined ? (\n <InlineEdit\n onSave={(v) => onChange(prop.key, v)}\n value={prop.value}\n />\n ) : (\n <span className=\"gds-text-body text-fg\">{prop.value}</span>\n )}\n </div>\n </div>\n ))}\n </div>\n )\n },\n)\n\nexport type { PropertyEditorProps, PropertyItem }\n","import type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\n\ntype QuickLink = {\n href?: string\n icon?: ReactNode\n label: string\n onClick?: () => void\n}\n\ntype QuickLinksProps = React.HTMLAttributes<HTMLDivElement> & {\n columns?: number\n links: QuickLink[]\n}\n\nexport const QuickLinks = forwardRef<HTMLDivElement, QuickLinksProps>(\n function QuickLinks({ className, columns = 4, links, ...props }, ref) {\n return (\n <div\n className={cx('grid gap-3', className)}\n data-component=\"quick-links\"\n ref={ref}\n style={{ gridTemplateColumns: `repeat(${columns}, minmax(0, 1fr))` }}\n {...props}\n >\n {links.map((link) => {\n const Tag = link.href !== undefined ? 'a' : 'button'\n return (\n <Tag\n key={link.label}\n className={cx(\n 'flex flex-col items-center gap-2 rounded-lg border border-border bg-surface p-4 text-fg transition-colors hover:bg-bg-secondary',\n focusCls,\n )}\n {...(link.href !== undefined ? { href: link.href } : {})}\n onClick={link.onClick}\n >\n {link.icon !== undefined && <div className=\"text-fg-muted\">{link.icon}</div>}\n <span className=\"text-xs font-medium select-none\">{link.label}</span>\n </Tag>\n )\n })}\n </div>\n )\n },\n)\n\nexport type { QuickLink, QuickLinksProps }\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype RecentActivityItem = {\n action: string\n timestamp: string\n user: string\n}\n\ntype RecentActivityProps = React.HTMLAttributes<HTMLDivElement> & {\n items: RecentActivityItem[]\n title?: string\n}\n\nconst RecentActivity = forwardRef<HTMLDivElement, RecentActivityProps>(\n function RecentActivity({ className, items, title = 'Recent Activity', ...props }, ref) {\n return (\n <div className={cx('flex flex-col', className)} data-component=\"recent-activity\" ref={ref} {...props}>\n <h3 className=\"mb-2 text-xs font-semibold uppercase tracking-wider text-fg-muted\">{title}</h3>\n <div className=\"flex flex-col gap-1\">\n {items.map((item, i) => (\n <div className=\"flex items-baseline justify-between gap-2 py-1 text-sm\" key={i}>\n <div className=\"min-w-0 truncate\">\n <span className=\"font-medium text-fg\">{item.user}</span>\n <span className=\"text-fg-muted\"> {item.action}</span>\n </div>\n <span className=\"shrink-0 text-xs text-fg-muted\">{item.timestamp}</span>\n </div>\n ))}\n {items.length === 0 && (\n <p className=\"py-2 text-center text-xs text-fg-muted\">No activity</p>\n )}\n </div>\n </div>\n )\n },\n)\n\nexport { RecentActivity }\nexport type { RecentActivityItem, RecentActivityProps }\n","// table — lightweight styled table wrapper\n// for when DataTable is overkill — just semantic HTML table elements with styling\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\nexport type TableProps = React.HTMLAttributes<HTMLTableElement> & {\n striped?: boolean\n compact?: boolean\n hoverable?: boolean\n glass?: boolean\n className?: string\n}\n\nexport const Table = forwardRef<HTMLTableElement, TableProps>(\n function Table({ striped, compact, hoverable = true, glass, className, children, ...props }, ref) {\n return (\n <div\n data-component=\"table\"\n data-striped={striped ?? undefined}\n data-compact={compact ?? undefined}\n className={cx(\n 'gds-radius-popover overflow-hidden border border-border',\n glassClass(glass),\n striped && '[&_tbody_tr:nth-child(even)]:bg-bg-secondary/30',\n compact && '[&_th]:px-2 [&_th]:py-1 [&_td]:px-2 [&_td]:py-1',\n !compact && '[&_th]:gds-pad-x [&_th]:py-1.5 [&_td]:gds-pad-x [&_td]:gds-pad-y',\n hoverable && '[&_tbody_tr]:transition-colors [&_tbody_tr:hover]:bg-bg-tertiary/30',\n '[&_th]:bg-bg-tertiary/50 [&_th]:text-left [&_th]:font-medium [&_th]:text-fg-muted [&_th]:border-b [&_th]:border-border [&_th]:gds-text-body',\n '[&_td]:border-b [&_td]:border-border [&_td]:gds-text-body [&_tbody_tr:last-child_td]:border-0',\n className,\n )}\n >\n <table ref={ref} className=\"w-full\" {...props}>\n {children}\n </table>\n </div>\n )\n },\n)\n","import { forwardRef, useSyncExternalStore } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\nimport { Table } from './table'\n\ntype ResponsiveTableColumn = { key: string; header: string }\n\ntype ResponsiveTableProps = React.HTMLAttributes<HTMLDivElement> & {\n columns: ResponsiveTableColumn[]\n data: Record<string, unknown>[]\n glass?: boolean\n className?: string\n}\n\n// simple media query hook without useEffect\nconst mobileQuery = typeof window !== 'undefined' ? window.matchMedia('(max-width: 1023px)') : null\n\nfunction subscribeMobile(cb: () => void) {\n mobileQuery?.addEventListener('change', cb)\n return () => mobileQuery?.removeEventListener('change', cb)\n}\n\nfunction getIsMobile() {\n return mobileQuery?.matches ?? false\n}\n\nexport const ResponsiveTable = forwardRef<HTMLDivElement, ResponsiveTableProps>(\n function ResponsiveTable({ columns, data, glass, className, ...props }, ref) {\n const isMobile = useSyncExternalStore(subscribeMobile, getIsMobile, () => false)\n\n if (isMobile) {\n return (\n <div\n className={cx('flex flex-col gds-gap', className)}\n data-component=\"responsive-table\"\n data-mode=\"cards\"\n ref={ref}\n {...props}\n >\n {data.map((row, i) => (\n <div\n key={i}\n className={cx(\n 'gds-radius-popover border border-border gds-pad',\n glassClass(glass),\n )}\n >\n {columns.map((col) => (\n <div key={col.key} className=\"flex justify-between gds-pad-y-sm\">\n <span className=\"gds-text-caption font-medium text-fg-muted\">{col.header}</span>\n <span className=\"gds-text-body text-fg\">{String(row[col.key] ?? '')}</span>\n </div>\n ))}\n </div>\n ))}\n </div>\n )\n }\n\n return (\n <div data-component=\"responsive-table\" data-mode=\"table\" ref={ref} {...props}>\n <Table glass={glass} className={className}>\n <thead>\n <tr>\n {columns.map((col) => (\n <th key={col.key}>{col.header}</th>\n ))}\n </tr>\n </thead>\n <tbody>\n {data.map((row, i) => (\n <tr key={i}>\n {columns.map((col) => (\n <td key={col.key}>{String(row[col.key] ?? '')}</td>\n ))}\n </tr>\n ))}\n </tbody>\n </Table>\n </div>\n )\n },\n)\n\nexport type { ResponsiveTableColumn, ResponsiveTableProps }\n","// rich-select-list — option list dropdown for rich-select\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\nimport type { RichSelectOption } from './rich-select'\n\ntype RichSelectListProps = {\n options: RichSelectOption[]\n value: string | null\n focusedIndex: number\n glass?: boolean\n onSelect: (value: string) => void\n onFocus: (index: number) => void\n}\n\nexport function RichSelectList({ options, value, focusedIndex, glass, onSelect, onFocus }: RichSelectListProps) {\n return (\n <div\n role=\"listbox\"\n className={cx(\n 'absolute z-50 mt-1 w-full gds-radius-popover border border-border bg-bg shadow-lg overflow-auto max-h-60',\n glassClass(glass),\n )}\n >\n {options.map((opt, i) => (\n <div\n key={opt.value}\n role=\"option\"\n aria-selected={opt.value === value}\n data-focused={i === focusedIndex ? '' : undefined}\n className={cx(\n 'flex items-start gap-2 px-3 py-2 cursor-pointer transition-colors',\n opt.value === value && 'bg-accent/10 text-accent',\n i === focusedIndex && 'bg-bg-tertiary/50',\n opt.value !== value && i !== focusedIndex && 'hover:bg-bg-tertiary/30',\n )}\n onClick={() => onSelect(opt.value)}\n onMouseEnter={() => onFocus(i)}\n >\n {opt.icon !== undefined && <span className=\"mt-0.5 shrink-0\">{opt.icon}</span>}\n <div className=\"flex-1 min-w-0\">\n <div className=\"text-sm truncate\">{opt.label}</div>\n {opt.description !== undefined && (\n <div className=\"text-xs text-fg-muted truncate\">{opt.description}</div>\n )}\n </div>\n {opt.badge !== undefined && (\n <span className=\"shrink-0 rounded-full bg-bg-tertiary px-2 py-0.5 text-[10px] text-fg-muted\">\n {opt.badge}\n </span>\n )}\n </div>\n ))}\n </div>\n )\n}\n","// rich-select — dropdown with icons, descriptions, and badges per option\nimport { forwardRef, useCallback, useEffect, useRef, useState } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\nimport { mergeRefs } from '../utils/dom'\nimport { glassClass } from '../utils/glass'\nimport { RichSelectList } from './rich-select-list'\n\nexport type RichSelectOption = {\n value: string\n label: string\n description?: string\n icon?: React.ReactNode\n badge?: string\n}\n\nexport type RichSelectProps = {\n options: RichSelectOption[]\n value: string | null\n onChange: (value: string | null) => void\n placeholder?: string\n disabled?: boolean\n error?: boolean\n glass?: boolean\n className?: string\n}\n\nexport const RichSelect = forwardRef<HTMLDivElement, RichSelectProps>(\n function RichSelect({ options, value, onChange, placeholder, disabled, error, glass, className }, ref) {\n const [open, setOpen] = useState(false)\n const [focusedIndex, setFocusedIndex] = useState(-1)\n const containerRef = useRef<HTMLDivElement>(null)\n\n const selected = options.find((o) => o.value === value)\n\n // close on outside click\n useEffect(() => {\n if (!open) return\n function handleClick(e: MouseEvent) {\n if (containerRef.current !== null && !containerRef.current.contains(e.target as Node)) {\n setOpen(false)\n }\n }\n document.addEventListener('mousedown', handleClick)\n return () => document.removeEventListener('mousedown', handleClick)\n }, [open])\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (disabled) return\n\n if (e.key === 'Escape') {\n setOpen(false)\n return\n }\n\n if (!open) {\n if (e.key === 'Enter' || e.key === ' ' || e.key === 'ArrowDown') {\n e.preventDefault()\n setOpen(true)\n setFocusedIndex(0)\n }\n return\n }\n\n if (e.key === 'ArrowDown') {\n e.preventDefault()\n setFocusedIndex((prev) => (prev < options.length - 1 ? prev + 1 : 0))\n } else if (e.key === 'ArrowUp') {\n e.preventDefault()\n setFocusedIndex((prev) => (prev > 0 ? prev - 1 : options.length - 1))\n } else if (e.key === 'Enter') {\n e.preventDefault()\n if (focusedIndex >= 0 && focusedIndex < options.length) {\n onChange(options[focusedIndex].value)\n setOpen(false)\n }\n }\n },\n [disabled, open, options, focusedIndex, onChange],\n )\n\n const handleSelect = useCallback((val: string) => {\n onChange(val)\n setOpen(false)\n }, [onChange])\n\n return (\n <div\n ref={mergeRefs(ref, containerRef)}\n data-component=\"rich-select\"\n data-state={open ? 'open' : 'closed'}\n className={cx('relative', className)}\n onKeyDown={handleKeyDown}\n >\n <button\n type=\"button\"\n disabled={disabled}\n className={cx(\n 'flex w-full items-center gap-2 gds-radius-input border gds-pad-x gds-h-lg text-sm text-left transition-colors',\n error ? 'border-danger' : 'border-border hover:border-fg-muted',\n disabled && 'opacity-50 cursor-not-allowed',\n glassClass(glass),\n focusCls,\n )}\n onClick={() => setOpen((p) => !p)}\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n >\n {selected !== undefined ? (\n <>\n {selected.icon !== undefined && <span className=\"shrink-0\">{selected.icon}</span>}\n <span className=\"flex-1 truncate text-fg\">{selected.label}</span>\n </>\n ) : (\n <span className=\"flex-1 truncate text-fg-muted\">{placeholder ?? 'Select...'}</span>\n )}\n <svg className=\"ml-auto h-3 w-3 shrink-0 text-fg-muted\" viewBox=\"0 0 12 12\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M3 4.5l3 3 3-3\" />\n </svg>\n </button>\n\n {open && (\n <RichSelectList\n options={options}\n value={value}\n focusedIndex={focusedIndex}\n glass={glass}\n onSelect={handleSelect}\n onFocus={setFocusedIndex}\n />\n )}\n </div>\n )\n },\n)\n","// search-results — list of search results with query highlighting and category badges\nimport { forwardRef } from 'react'\n\nimport { Badge } from '../l2-primitives/badge'\nimport { Highlight } from '../l2-primitives/highlight'\nimport { cx } from '../utils/cx'\n\ntype SearchResult = {\n id: string\n title: string\n description?: string\n category?: string\n url?: string\n}\n\ntype SearchResultsProps = {\n results: SearchResult[]\n query: string\n total?: number\n onSelect?: (id: string) => void\n className?: string\n}\n\nconst SearchResults = forwardRef<HTMLDivElement, SearchResultsProps>(\n function SearchResults({ results, query, total, onSelect, className }, ref) {\n return (\n <div ref={ref} className={cx('flex flex-col', className)} data-component=\"search-results\">\n {total !== undefined && (\n <div className=\"gds-pad-x py-2 text-xs text-fg-muted\">\n {total} result{total !== 1 ? 's' : ''} found\n </div>\n )}\n {results.map((result) => (\n <div\n key={result.id}\n role={onSelect !== undefined ? 'button' : undefined}\n tabIndex={onSelect !== undefined ? 0 : undefined}\n onClick={onSelect !== undefined ? () => onSelect(result.id) : undefined}\n onKeyDown={onSelect !== undefined ? (e) => {\n if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); onSelect(result.id) }\n } : undefined}\n className={cx(\n 'gds-pad-x gds-pad-y border-b border-border last:border-b-0',\n onSelect !== undefined && 'cursor-pointer hover:bg-bg-tertiary transition-colors',\n )}\n >\n <div className=\"flex items-center gap-2\">\n <Highlight text={result.title} query={query} className=\"font-medium text-fg gds-text-body\" />\n {result.category !== undefined && <Badge>{result.category}</Badge>}\n </div>\n {result.description !== undefined && (\n <Highlight text={result.description} query={query} className=\"mt-0.5 text-fg-muted gds-text-caption line-clamp-2\" />\n )}\n </div>\n ))}\n </div>\n )\n },\n)\n\nexport { SearchResults }\nexport type { SearchResult, SearchResultsProps }\n","// service-card — service/server status card with health, metrics, and tags\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type ServiceCardStatus = 'error' | 'healthy' | 'offline' | 'warning'\n\nexport type ServiceCardProps = {\n name: string\n description?: string\n status: ServiceCardStatus\n metrics?: { label: string; value: string }[]\n tags?: string[]\n url?: string\n className?: string\n}\n\nconst statusDot: Record<ServiceCardStatus, string> = {\n healthy: 'bg-success',\n warning: 'bg-warning',\n error: 'bg-danger',\n offline: 'bg-fg-muted/40',\n}\n\nconst statusLabel: Record<ServiceCardStatus, string> = {\n healthy: 'Healthy',\n warning: 'Warning',\n error: 'Error',\n offline: 'Offline',\n}\n\nexport const ServiceCard = forwardRef<HTMLDivElement, ServiceCardProps>(\n function ServiceCard({ name, description, status, metrics, tags, url, className }, ref) {\n return (\n <div\n ref={ref}\n className={cx('gds-ctx gds-radius-card border border-border bg-surface gds-pad', className)}\n data-component=\"service-card\"\n data-state={status}\n >\n {/* header */}\n <div className=\"flex items-center gap-2\">\n <span className={cx('h-2.5 w-2.5 rounded-full', statusDot[status])} />\n <span className=\"font-semibold text-fg\">{name}</span>\n <span className=\"ml-auto text-xs text-fg-muted\">{statusLabel[status]}</span>\n </div>\n\n {description !== undefined && (\n <p className=\"mt-1.5 gds-text-body text-fg-muted\">{description}</p>\n )}\n\n {/* metrics */}\n {metrics !== undefined && metrics.length > 0 && (\n <div className=\"mt-3 flex flex-wrap gap-x-4 gap-y-1 text-xs\">\n {metrics.map((m) => (\n <div key={m.label} className=\"flex gap-1\">\n <span className=\"text-fg-muted\">{m.label}</span>\n <span className=\"font-medium text-fg\">{m.value}</span>\n </div>\n ))}\n </div>\n )}\n\n {/* tags + url */}\n {(tags !== undefined || url !== undefined) && (\n <div className=\"mt-3 flex flex-wrap items-center gap-1.5\">\n {tags?.map((tag) => (\n <span key={tag} className=\"rounded-full bg-bg-tertiary px-2 py-0.5 text-[10px] text-fg-muted\">\n {tag}\n </span>\n ))}\n {url !== undefined && (\n <a href={url} target=\"_blank\" rel=\"noreferrer\" className=\"ml-auto text-xs text-accent hover:underline\">\n {url}\n </a>\n )}\n </div>\n )}\n </div>\n )\n },\n)\n","// signature-drawing — pure canvas drawing utilities (no React dependency)\n\ntype Point = { x: number; y: number }\n\ntype DrawConfig = {\n strokeColor: string\n strokeWidth: number\n}\n\nfunction getCanvasPosition(\n canvas: HTMLCanvasElement,\n clientX: number,\n clientY: number,\n): Point {\n const rect = canvas.getBoundingClientRect()\n return {\n x: (clientX - rect.left) * (canvas.width / rect.width),\n y: (clientY - rect.top) * (canvas.height / rect.height),\n }\n}\n\nfunction beginStroke(\n ctx: CanvasRenderingContext2D,\n point: Point,\n config: DrawConfig,\n): void {\n ctx.strokeStyle = config.strokeColor\n ctx.lineWidth = config.strokeWidth\n ctx.lineCap = 'round'\n ctx.lineJoin = 'round'\n ctx.beginPath()\n ctx.moveTo(point.x, point.y)\n}\n\nfunction continueStroke(\n ctx: CanvasRenderingContext2D,\n point: Point,\n): void {\n ctx.lineTo(point.x, point.y)\n ctx.stroke()\n}\n\nfunction clearCanvas(canvas: HTMLCanvasElement): void {\n const ctx = canvas.getContext('2d')\n if (ctx === null) return\n ctx.clearRect(0, 0, canvas.width, canvas.height)\n}\n\nfunction canvasToDataUrl(canvas: HTMLCanvasElement): string {\n return canvas.toDataURL('image/png')\n}\n\nexport { beginStroke, canvasToDataUrl, clearCanvas, continueStroke, getCanvasPosition }\nexport type { DrawConfig, Point }\n","// signature-pad — canvas-based signature capture\nimport { forwardRef, useCallback, useRef, useState } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\nimport { beginStroke, canvasToDataUrl, clearCanvas, continueStroke, getCanvasPosition } from './signature-drawing'\n\ntype SignaturePadProps = Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> & {\n disabled?: boolean\n height?: number\n onSign: (dataUrl: string) => void\n strokeColor?: string\n strokeWidth?: number\n width?: number\n}\n\nexport const SignaturePad = forwardRef<HTMLDivElement, SignaturePadProps>(\n function SignaturePad(\n {\n className,\n disabled,\n height = 200,\n onSign,\n strokeColor = 'var(--gds-fg)',\n strokeWidth = 2,\n width = 400,\n ...props\n },\n ref,\n ) {\n const canvasRef = useRef<HTMLCanvasElement>(null)\n const isDrawingRef = useRef(false)\n const [isEmpty, setIsEmpty] = useState(true)\n\n const startDraw = useCallback(\n (clientX: number, clientY: number) => {\n if (disabled === true) return\n const canvas = canvasRef.current\n if (canvas === null) return\n const ctx = canvas.getContext('2d')\n if (ctx === null) return\n isDrawingRef.current = true\n const pos = getCanvasPosition(canvas, clientX, clientY)\n beginStroke(ctx, pos, { strokeColor, strokeWidth })\n },\n [disabled, strokeColor, strokeWidth],\n )\n\n const draw = useCallback(\n (clientX: number, clientY: number) => {\n if (!isDrawingRef.current) return\n const canvas = canvasRef.current\n if (canvas === null) return\n const ctx = canvas.getContext('2d')\n if (ctx === null) return\n const pos = getCanvasPosition(canvas, clientX, clientY)\n continueStroke(ctx, pos)\n setIsEmpty(false)\n },\n [],\n )\n\n const endDraw = useCallback(() => {\n if (!isDrawingRef.current) return\n isDrawingRef.current = false\n const canvas = canvasRef.current\n if (canvas !== null) {\n onSign(canvasToDataUrl(canvas))\n }\n }, [onSign])\n\n const handleMouseDown = useCallback(\n (e: React.MouseEvent<HTMLCanvasElement>) => {\n startDraw(e.clientX, e.clientY)\n },\n [startDraw],\n )\n\n const handleMouseMove = useCallback(\n (e: React.MouseEvent<HTMLCanvasElement>) => {\n draw(e.clientX, e.clientY)\n },\n [draw],\n )\n\n const handleTouchStart = useCallback(\n (e: React.TouchEvent<HTMLCanvasElement>) => {\n e.preventDefault()\n const touch = e.touches[0]\n if (touch === undefined) return\n startDraw(touch.clientX, touch.clientY)\n },\n [startDraw],\n )\n\n const handleTouchMove = useCallback(\n (e: React.TouchEvent<HTMLCanvasElement>) => {\n e.preventDefault()\n const touch = e.touches[0]\n if (touch === undefined) return\n draw(touch.clientX, touch.clientY)\n },\n [draw],\n )\n\n const handleTouchEnd = useCallback(\n (e: React.TouchEvent<HTMLCanvasElement>) => {\n e.preventDefault()\n endDraw()\n },\n [endDraw],\n )\n\n const handleClear = useCallback(() => {\n const canvas = canvasRef.current\n if (canvas === null) return\n clearCanvas(canvas)\n setIsEmpty(true)\n }, [])\n\n return (\n <div\n className={cx(\n 'gds-ctx inline-flex flex-col gap-2 gds-radius-popover border border-border bg-surface p-3',\n disabled === true && 'pointer-events-none opacity-40',\n className,\n )}\n data-component=\"signature-pad\"\n ref={ref}\n {...props}\n >\n <div className=\"relative\">\n <canvas\n className=\"block cursor-crosshair rounded border border-border/50 bg-bg\"\n height={height}\n onMouseDown={handleMouseDown}\n onMouseLeave={endDraw}\n onMouseMove={handleMouseMove}\n onMouseUp={endDraw}\n onTouchEnd={handleTouchEnd}\n onTouchMove={handleTouchMove}\n onTouchStart={handleTouchStart}\n ref={canvasRef}\n style={{ width, height }}\n width={width}\n />\n {isEmpty && (\n <div className=\"pointer-events-none absolute inset-0 flex items-end justify-center pb-4\">\n <span className=\"select-none text-xs text-fg-muted/50\">Sign above</span>\n </div>\n )}\n </div>\n <div className=\"flex justify-end\">\n <button\n className={cx(\n 'rounded px-2.5 py-1 text-xs text-fg-muted transition-colors hover:bg-fg-muted/10 hover:text-fg',\n focusCls,\n )}\n onClick={handleClear}\n type=\"button\"\n >\n Clear\n </button>\n </div>\n </div>\n )\n },\n)\n\nexport type { SignaturePadProps }\n","import type { ReactNode } from 'react'\nimport { forwardRef, useState } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype SortableItem = {\n id: string\n content: ReactNode\n}\n\ntype SortableListProps = React.HTMLAttributes<HTMLDivElement> & {\n items: SortableItem[]\n onReorder: (items: SortableItem[]) => void\n disabled?: boolean\n itemClassName?: string\n}\n\n// grip icon inline svg\nfunction GripIcon() {\n return (\n <svg\n className=\"h-4 w-4 text-fg-muted/50\"\n fill=\"currentColor\"\n viewBox=\"0 0 16 16\"\n >\n <circle cx=\"5\" cy=\"3\" r=\"1.2\" />\n <circle cx=\"11\" cy=\"3\" r=\"1.2\" />\n <circle cx=\"5\" cy=\"8\" r=\"1.2\" />\n <circle cx=\"11\" cy=\"8\" r=\"1.2\" />\n <circle cx=\"5\" cy=\"13\" r=\"1.2\" />\n <circle cx=\"11\" cy=\"13\" r=\"1.2\" />\n </svg>\n )\n}\n\nexport const SortableList = forwardRef<HTMLDivElement, SortableListProps>(\n function SortableList(\n { className, disabled, itemClassName, items, onReorder, ...props },\n ref,\n ) {\n const [dragIndex, setDragIndex] = useState<number | null>(null)\n const [dropIndex, setDropIndex] = useState<number | null>(null)\n\n function handleDragStart(index: number) {\n if (disabled) return\n setDragIndex(index)\n }\n\n function handleDragOver(e: React.DragEvent, index: number) {\n e.preventDefault()\n setDropIndex(index)\n }\n\n function handleDragLeave() {\n setDropIndex(null)\n }\n\n function handleDrop(e: React.DragEvent, targetIndex: number) {\n e.preventDefault()\n if (dragIndex === null || dragIndex === targetIndex) {\n setDragIndex(null)\n setDropIndex(null)\n return\n }\n\n const reordered = [...items]\n const [moved] = reordered.splice(dragIndex, 1)\n if (moved !== undefined) {\n reordered.splice(targetIndex, 0, moved)\n }\n onReorder(reordered)\n setDragIndex(null)\n setDropIndex(null)\n }\n\n function handleDragEnd() {\n setDragIndex(null)\n setDropIndex(null)\n }\n\n return (\n <div\n className={cx('flex flex-col', className)}\n data-component=\"sortable-list\"\n ref={ref}\n {...props}\n >\n {items.map((item, index) => (\n <div\n className={cx(\n 'flex items-center gds-gap border-b border-border px-2 py-2 transition-opacity',\n dragIndex === index && 'opacity-50',\n dropIndex === index && 'border-t-2 border-t-accent',\n disabled !== true && 'cursor-grab active:cursor-grabbing',\n disabled === true && 'pointer-events-none opacity-60',\n itemClassName,\n )}\n data-item-id={item.id}\n draggable={disabled !== true}\n key={item.id}\n onDragEnd={handleDragEnd}\n onDragLeave={handleDragLeave}\n onDragOver={(e) => handleDragOver(e, index)}\n onDragStart={() => handleDragStart(index)}\n onDrop={(e) => handleDrop(e, index)}\n >\n {disabled !== true && (\n <span className=\"flex-shrink-0 select-none\">\n <GripIcon />\n </span>\n )}\n <div className=\"flex-1\">{item.content}</div>\n </div>\n ))}\n </div>\n )\n },\n)\n\nexport type { SortableItem, SortableListProps }\n","// spotlight — dims everything except a target element for onboarding/tutorials\nimport type { ReactNode } from 'react'\nimport { useCallback, useEffect, useRef, useState } from 'react'\nimport { createPortal } from 'react-dom'\n\nimport { cx } from '../utils/cx'\n\ntype Rect = { top: number; left: number; width: number; height: number }\n\nexport type SpotlightProps = {\n active: boolean\n targetRef: React.RefObject<HTMLElement | null>\n title?: string\n description?: string\n placement?: 'top' | 'bottom' | 'left' | 'right'\n onClose?: () => void\n className?: string\n}\n\nfunction useTargetRect(\n targetRef: React.RefObject<HTMLElement | null>,\n active: boolean,\n): Rect | null {\n const [rect, setRect] = useState<Rect | null>(null)\n\n useEffect(() => {\n if (!active) {\n setRect(null)\n return\n }\n const el = targetRef.current\n if (el === null) return\n\n const measure = () => {\n const r = el.getBoundingClientRect()\n setRect({ top: r.top, left: r.left, width: r.width, height: r.height })\n }\n measure()\n\n window.addEventListener('resize', measure)\n window.addEventListener('scroll', measure, true)\n return () => {\n window.removeEventListener('resize', measure)\n window.removeEventListener('scroll', measure, true)\n }\n }, [active, targetRef])\n\n return rect\n}\n\nfunction computeCardStyle(\n rect: Rect,\n placement: 'top' | 'bottom' | 'left' | 'right',\n): React.CSSProperties {\n const gap = 12\n const base: React.CSSProperties = { position: 'fixed' }\n\n if (placement === 'bottom') {\n return { ...base, top: rect.top + rect.height + gap, left: rect.left }\n }\n if (placement === 'top') {\n return { ...base, bottom: window.innerHeight - rect.top + gap, left: rect.left }\n }\n if (placement === 'left') {\n return { ...base, top: rect.top, right: window.innerWidth - rect.left + gap }\n }\n // right\n return { ...base, top: rect.top, left: rect.left + rect.width + gap }\n}\n\nexport function Spotlight({\n active,\n targetRef,\n title,\n description,\n placement = 'bottom',\n onClose,\n className,\n}: SpotlightProps): ReactNode {\n const rect = useTargetRect(targetRef, active)\n\n // escape key\n const onCloseRef = useRef(onClose)\n onCloseRef.current = onClose\n\n const handleEscape = useCallback((e: KeyboardEvent) => {\n if (e.key === 'Escape' && onCloseRef.current !== undefined) {\n onCloseRef.current()\n }\n }, [])\n\n useEffect(() => {\n if (!active) return\n window.addEventListener('keydown', handleEscape)\n return () => window.removeEventListener('keydown', handleEscape)\n }, [active, handleEscape])\n\n if (!active || rect === null) return null\n\n const pad = 6\n const overlay = (\n <div\n className={cx('fixed inset-0 z-[9998]', className)}\n data-component=\"spotlight\"\n onClick={onClose}\n >\n {/* highlight hole via box-shadow */}\n <div\n className=\"absolute rounded-md\"\n style={{\n top: rect.top - pad,\n left: rect.left - pad,\n width: rect.width + pad * 2,\n height: rect.height + pad * 2,\n boxShadow: '0 0 0 9999px rgba(0,0,0,0.6)',\n pointerEvents: 'none',\n }}\n />\n\n {/* tooltip card */}\n <div\n className=\"z-[9999] max-w-xs rounded-lg border border-white/10 bg-bg-secondary p-4 shadow-lg\"\n style={computeCardStyle(rect, placement)}\n onClick={(e) => e.stopPropagation()}\n >\n {title !== undefined && (\n <p className=\"text-sm font-semibold text-fg\">{title}</p>\n )}\n {description !== undefined && (\n <p className=\"mt-1 text-xs text-fg-muted\">{description}</p>\n )}\n {onClose !== undefined && (\n <button\n className=\"mt-3 text-xs font-medium text-accent hover:text-accent/80\"\n onClick={onClose}\n >\n Got it\n </button>\n )}\n </div>\n </div>\n )\n\n return createPortal(overlay, document.body)\n}\n","// stacked-list — vertical list with header, footer, and selectable items\nimport type { ReactNode } from 'react'\n\nimport { ListItem } from '../l4-molecules/list-item'\nimport { cx } from '../utils/cx'\n\nexport type StackedListItem = {\n id: string\n title: string\n description?: string\n icon?: ReactNode\n trailing?: ReactNode\n}\n\nexport type StackedListProps = {\n items: StackedListItem[]\n header?: ReactNode\n footer?: ReactNode\n onSelect?: (id: string) => void\n selectedId?: string\n dividers?: boolean\n glass?: boolean\n className?: string\n}\n\nexport function StackedList({\n items,\n header,\n footer,\n onSelect,\n selectedId,\n dividers = true,\n glass,\n className,\n}: StackedListProps) {\n return (\n <div\n data-component=\"stacked-list\"\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 {header !== undefined && (\n <div className=\"border-b border-border bg-bg-tertiary/30 px-4 py-2.5\">{header}</div>\n )}\n <div>\n {items.map((item, i) => (\n <ListItem\n key={item.id}\n icon={item.icon}\n title={item.title}\n description={item.description}\n trailing={item.trailing}\n active={selectedId === item.id}\n onClick={onSelect !== undefined ? () => onSelect(item.id) : undefined}\n className={cx(\n dividers === true && i < items.length - 1 && 'border-b border-border/50',\n )}\n />\n ))}\n </div>\n {footer !== undefined && (\n <div className=\"border-t border-border px-4 py-2.5\">{footer}</div>\n )}\n </div>\n )\n}\n","import { forwardRef } from 'react'\n\nimport { Progress } from '../l2-primitives/progress'\nimport { cx } from '../utils/cx'\n\ntype HealthMetric = {\n label: string\n max?: number\n unit?: string\n value: number\n}\n\ntype SystemHealthProps = React.HTMLAttributes<HTMLDivElement> & {\n metrics: HealthMetric[]\n}\n\nfunction barVariant(pct: number): 'danger' | 'default' | 'success' | 'warning' {\n if (pct >= 90) return 'danger'\n if (pct >= 70) return 'warning'\n return 'success'\n}\n\nexport const SystemHealth = forwardRef<HTMLDivElement, SystemHealthProps>(\n function SystemHealth({ className, metrics, ...props }, ref) {\n return (\n <div\n className={cx('flex flex-col gds-gap', className)}\n data-component=\"system-health\"\n ref={ref}\n {...props}\n >\n {metrics.map((m) => {\n const max = m.max ?? 100\n const pct = max > 0 ? Math.round((m.value / max) * 100) : 0\n return (\n <div key={m.label} className=\"flex flex-col gap-1\">\n <div className=\"flex items-center justify-between gds-text-label\">\n <span className=\"text-fg\">{m.label}</span>\n <span className=\"text-fg-muted font-mono tabular-nums\">\n {m.value}{m.unit ?? ''} / {max}{m.unit ?? ''} ({pct}%)\n </span>\n </div>\n <Progress value={pct} variant={barVariant(pct)} size=\"sm\" />\n </div>\n )\n })}\n </div>\n )\n },\n)\n\nexport type { HealthMetric, SystemHealthProps }\n","// tag-cloud — interactive tag cloud with counts and selection\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type TagCloudTag = {\n label: string\n count: number\n}\n\nexport type TagCloudProps = {\n tags: TagCloudTag[]\n selected?: string[]\n onToggle?: (label: string) => void\n className?: string\n}\n\nexport const TagCloud = forwardRef<HTMLDivElement, TagCloudProps>(\n function TagCloud({ tags, selected, onToggle, className }, ref) {\n const selectedSet = new Set(selected ?? [])\n return (\n <div\n ref={ref}\n className={cx('flex flex-wrap gap-2', className)}\n data-component=\"tag-cloud\"\n >\n {tags.map((tag) => {\n const isSelected = selectedSet.has(tag.label)\n return (\n <button\n key={tag.label}\n type=\"button\"\n onClick={() => onToggle?.(tag.label)}\n className={cx(\n 'rounded-full px-3 py-1 gds-text-body font-medium transition-colors select-none',\n isSelected\n ? 'bg-accent/15 text-accent'\n : 'bg-bg-tertiary text-fg-muted hover:bg-bg-tertiary/80',\n )}\n >\n {tag.label}\n <span className=\"ml-1.5 text-[10px] opacity-60\">{tag.count}</span>\n </button>\n )\n })}\n </div>\n )\n },\n)\n","import { forwardRef } from 'react'\n\nimport { TaskItem } from '../l4-molecules/task-item'\nimport { cx } from '../utils/cx'\n\ntype TaskBoardItem = {\n completed?: boolean\n id: string\n priority?: 'low' | 'medium' | 'high' | 'critical'\n title: string\n}\n\ntype TaskBoardSection = {\n id: string\n items: TaskBoardItem[]\n title: string\n}\n\ntype TaskBoardProps = React.HTMLAttributes<HTMLDivElement> & {\n onToggle?: (sectionId: string, itemId: string) => void\n sections: TaskBoardSection[]\n}\n\nconst TaskBoard = forwardRef<HTMLDivElement, TaskBoardProps>(\n function TaskBoard({ className, onToggle, sections, ...props }, ref) {\n return (\n <div className={cx('flex flex-col gds-gap', className)} data-component=\"task-board\" ref={ref} {...props}>\n {sections.map((section) => (\n <div className=\"rounded-lg border border-border bg-surface gds-pad\" key={section.id}>\n <h3 className=\"mb-2 text-xs font-semibold uppercase tracking-wider text-fg-muted\">{section.title}</h3>\n <div className=\"flex flex-col gap-0.5\">\n {section.items.map((item) => (\n <TaskItem\n completed={item.completed}\n key={item.id}\n onToggle={onToggle !== undefined ? () => onToggle(section.id, item.id) : undefined}\n priority={item.priority}\n title={item.title}\n />\n ))}\n {section.items.length === 0 && (\n <p className=\"py-2 text-center text-xs text-fg-muted\">No items</p>\n )}\n </div>\n </div>\n ))}\n </div>\n )\n },\n)\n\nexport { TaskBoard }\nexport type { TaskBoardItem, TaskBoardProps, TaskBoardSection }\n","// timeline — vertical event timeline with variant-colored nodes\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type TimelineItem = {\n id: string\n title: string\n description?: string\n date?: string\n icon?: ReactNode\n variant?: 'danger' | 'default' | 'success' | 'warning'\n}\n\nexport type TimelineProps = {\n items: TimelineItem[]\n orientation?: 'vertical'\n className?: string\n}\n\nconst dotColors: Record<string, string> = {\n default: 'bg-fg-muted',\n success: 'bg-success',\n warning: 'bg-warning',\n danger: 'bg-danger',\n}\n\nexport const Timeline = forwardRef<HTMLDivElement, TimelineProps>(\n function Timeline({ items, className }, ref) {\n return (\n <div\n ref={ref}\n className={cx('relative', className)}\n data-component=\"timeline\"\n >\n {/* vertical line */}\n <div className=\"absolute left-[7px] top-2 bottom-2 w-px bg-border\" />\n\n <div className=\"flex flex-col gap-4\">\n {items.map((item) => {\n const variant = item.variant ?? 'default'\n return (\n <div key={item.id} className=\"relative flex gds-gap pl-6\">\n {/* dot */}\n <div className=\"absolute left-0 top-1.5\">\n {item.icon !== undefined ? (\n <span className=\"flex h-[15px] w-[15px] items-center justify-center text-fg-muted\">\n {item.icon}\n </span>\n ) : (\n <span className={cx(\n 'block h-[15px] w-[15px] gds-radius-badge border-2 border-bg',\n dotColors[variant],\n )} />\n )}\n </div>\n\n {/* content */}\n <div className=\"min-w-0 flex-1 pb-1\">\n <div className=\"flex items-baseline justify-between gds-gap-sm\">\n <span className=\"text-sm font-medium text-fg\">{item.title}</span>\n {item.date !== undefined && (\n <span className=\"shrink-0 gds-text-body text-fg-muted\">{item.date}</span>\n )}\n </div>\n {item.description !== undefined && (\n <p className=\"mt-0.5 gds-text-body text-fg-muted\">{item.description}</p>\n )}\n </div>\n </div>\n )\n })}\n </div>\n </div>\n )\n },\n)\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype Transaction = {\n amount: number\n currency?: string\n date: string\n description: string\n id: string\n}\n\ntype TransactionListProps = React.HTMLAttributes<HTMLDivElement> & {\n transactions: Transaction[]\n}\n\nfunction formatAmount(amount: number, currency: string): string {\n const sign = amount >= 0 ? '+' : ''\n return `${sign}${currency}${Math.abs(amount).toLocaleString()}`\n}\n\nexport const TransactionList = forwardRef<HTMLDivElement, TransactionListProps>(\n function TransactionList({ className, transactions, ...props }, ref) {\n return (\n <div\n className={cx('flex flex-col divide-y divide-border', className)}\n data-component=\"transaction-list\"\n ref={ref}\n {...props}\n >\n {transactions.map((tx) => {\n const currency = tx.currency ?? '\\u00a5'\n const isPositive = tx.amount >= 0\n return (\n <div className=\"flex items-center justify-between px-3 py-2.5\" key={tx.id}>\n <div className=\"flex flex-col gap-0.5\">\n <span className=\"text-sm font-medium text-fg\">{tx.description}</span>\n <span className=\"text-xs text-fg-muted\">{tx.date}</span>\n </div>\n <span\n className={cx(\n 'text-sm font-semibold tabular-nums',\n isPositive ? 'text-success' : 'text-danger',\n )}\n >\n {formatAmount(tx.amount, currency)}\n </span>\n </div>\n )\n })}\n </div>\n )\n },\n)\n\nexport type { Transaction, TransactionListProps }\n","// tree — recursive collapsible tree view\nimport type { ReactNode } from 'react'\nimport { forwardRef, useCallback, useState } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\n\nexport type TreeNode = {\n id: string\n label: string\n icon?: ReactNode\n children?: TreeNode[]\n disabled?: boolean\n}\n\nexport type TreeProps = {\n nodes: TreeNode[]\n onSelect?: (id: string) => void\n selected?: string\n defaultExpanded?: string[]\n className?: string\n}\n\nfunction ChevronSvg({ expanded }: { expanded: boolean }) {\n return (\n <svg\n className={cx('h-3 w-3 shrink-0 text-fg-muted transition-transform', expanded && 'rotate-90')}\n viewBox=\"0 0 12 12\"\n fill=\"currentColor\"\n >\n <path d=\"M4 2L8 6L4 10V2Z\" />\n </svg>\n )\n}\n\nfunction TreeNodeItem({\n node,\n depth,\n selected,\n expanded,\n onToggle,\n onSelect,\n}: {\n node: TreeNode\n depth: number\n selected?: string\n expanded: Set<string>\n onToggle: (id: string) => void\n onSelect?: (id: string) => void\n}) {\n const hasChildren = node.children !== undefined && node.children.length > 0\n const isExpanded = expanded.has(node.id)\n const isSelected = selected === node.id\n const isDisabled = node.disabled === true\n\n const handleClick = () => {\n if (isDisabled) return\n if (hasChildren) {\n onToggle(node.id)\n }\n if (onSelect !== undefined) {\n onSelect(node.id)\n }\n }\n\n return (\n <div>\n <button\n className={cx(\n 'flex w-full items-center gds-gap-sm gds-radius-button gds-pad-x-sm gds-pad-y-sm text-sm select-none',\n isSelected ? 'bg-accent/10 text-accent' : 'text-fg hover:bg-bg-secondary',\n isDisabled && 'cursor-not-allowed opacity-50',\n focusCls,\n )}\n style={{ paddingLeft: `${depth * 16 + 8}px` }}\n onClick={handleClick}\n disabled={isDisabled}\n data-state={isSelected ? 'selected' : undefined}\n >\n {hasChildren ? (\n <ChevronSvg expanded={isExpanded} />\n ) : (\n <span className=\"h-3 w-3 shrink-0\" />\n )}\n {node.icon !== undefined && (\n <span className=\"shrink-0 text-fg-muted\">{node.icon}</span>\n )}\n <span className=\"truncate\">{node.label}</span>\n </button>\n {hasChildren && isExpanded && (\n <div>\n {node.children!.map((child) => (\n <TreeNodeItem\n key={child.id}\n node={child}\n depth={depth + 1}\n selected={selected}\n expanded={expanded}\n onToggle={onToggle}\n onSelect={onSelect}\n />\n ))}\n </div>\n )}\n </div>\n )\n}\n\nexport const Tree = forwardRef<HTMLDivElement, TreeProps>(\n function Tree({ nodes, onSelect, selected, defaultExpanded, className }, ref) {\n const [expanded, setExpanded] = useState<Set<string>>(\n () => new Set(defaultExpanded ?? []),\n )\n\n const handleToggle = useCallback((id: string) => {\n setExpanded((prev) => {\n const next = new Set(prev)\n if (next.has(id)) {\n next.delete(id)\n } else {\n next.add(id)\n }\n return next\n })\n }, [])\n\n return (\n <div\n ref={ref}\n className={cx('flex flex-col gds-gap-xs', className)}\n data-component=\"tree\"\n role=\"tree\"\n >\n {nodes.map((node) => (\n <TreeNodeItem\n key={node.id}\n node={node}\n depth={0}\n selected={selected}\n expanded={expanded}\n onToggle={handleToggle}\n onSelect={onSelect}\n />\n ))}\n </div>\n )\n },\n)\n","// video-controls — custom controls bar for video player (internal)\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\n\ntype VideoControlsProps = {\n currentTime: number\n duration: number\n playing: boolean\n isMuted: boolean\n showControls: boolean\n onTogglePlay: () => void\n onToggleMute: () => void\n onSeek: (e: React.MouseEvent<HTMLDivElement>) => void\n onFullscreen: () => void\n}\n\nfunction formatTime(seconds: number): string {\n const m = Math.floor(seconds / 60)\n const s = Math.floor(seconds % 60)\n return `${m}:${s.toString().padStart(2, '0')}`\n}\n\nfunction PlayIcon() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <path d=\"M4 2l10 6-10 6V2z\" />\n </svg>\n )\n}\n\nfunction PauseIcon() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <rect x=\"3\" y=\"2\" width=\"4\" height=\"12\" rx=\"1\" />\n <rect x=\"9\" y=\"2\" width=\"4\" height=\"12\" rx=\"1\" />\n </svg>\n )\n}\n\nfunction MuteIcon() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <path d=\"M2 5h3l4-3v12l-4-3H2V5z\" />\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"11\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n </svg>\n )\n}\n\nfunction UnmuteIcon() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <path d=\"M2 5h3l4-3v12l-4-3H2V5z\" />\n <path d=\"M11 4c1.5 1 2 2.5 2 4s-.5 3-2 4\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n </svg>\n )\n}\n\nfunction FullscreenIcon() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <path d=\"M2 6V2h4M10 2h4v4M14 10v4h-4M6 14H2v-4\" />\n </svg>\n )\n}\n\nfunction VideoControls({\n currentTime,\n duration,\n playing,\n isMuted,\n showControls,\n onTogglePlay,\n onToggleMute,\n onSeek,\n onFullscreen,\n}: VideoControlsProps) {\n const progressPercent = duration > 0 ? (currentTime / duration) * 100 : 0\n\n return (\n <div\n className={cx(\n 'absolute inset-x-0 bottom-0 flex items-center gap-2 bg-black/60 px-3 py-2 transition-opacity duration-200',\n showControls ? 'opacity-100' : 'pointer-events-none opacity-0',\n )}\n data-testid=\"controls\"\n >\n <button\n type=\"button\"\n onClick={onTogglePlay}\n className={cx('text-white', focusCls)}\n aria-label={playing ? 'Pause' : 'Play'}\n data-testid=\"play-button\"\n >\n {playing ? <PauseIcon /> : <PlayIcon />}\n </button>\n\n <div\n className={cx('relative h-1 flex-1 cursor-pointer rounded-full bg-white/30', focusCls)}\n onClick={onSeek}\n role=\"slider\"\n aria-label=\"Seek\"\n aria-valuemin={0}\n aria-valuemax={Math.floor(duration)}\n aria-valuenow={Math.floor(currentTime)}\n tabIndex={0}\n data-testid=\"progress-bar\"\n >\n <div\n className=\"absolute inset-y-0 left-0 rounded-full bg-white\"\n style={{ width: `${progressPercent}%` }}\n />\n </div>\n\n <span className=\"select-none text-xs text-white/80\" data-testid=\"time-display\">\n {formatTime(currentTime)} / {formatTime(duration)}\n </span>\n\n <button\n type=\"button\"\n onClick={onToggleMute}\n className={cx('text-white', focusCls)}\n aria-label={isMuted ? 'Unmute' : 'Mute'}\n data-testid=\"mute-button\"\n >\n {isMuted ? <MuteIcon /> : <UnmuteIcon />}\n </button>\n\n <button\n type=\"button\"\n onClick={onFullscreen}\n className={cx('text-white', focusCls)}\n aria-label=\"Fullscreen\"\n data-testid=\"fullscreen-button\"\n >\n <FullscreenIcon />\n </button>\n </div>\n )\n}\n\nexport { VideoControls }\nexport type { VideoControlsProps }\n","// video-player — styled html5 video player with custom controls\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react'\n\nimport { cx } from '../utils/cx'\nimport { VideoControls } from './video-controls'\n\nexport type VideoPlayerProps = {\n src: string\n poster?: string\n autoPlay?: boolean\n muted?: boolean\n loop?: boolean\n controls?: boolean\n glass?: boolean\n className?: string\n}\n\nexport const VideoPlayer = forwardRef<HTMLDivElement, VideoPlayerProps>(\n function VideoPlayer(\n {\n src,\n poster,\n autoPlay = false,\n muted: mutedProp = false,\n loop = false,\n controls = true,\n glass = false,\n className,\n },\n ref,\n ) {\n const videoRef = useRef<HTMLVideoElement>(null)\n const hideTimerRef = useRef<ReturnType<typeof setTimeout>>(null)\n\n const [playing, setPlaying] = useState(false)\n const [currentTime, setCurrentTime] = useState(0)\n const [duration, setDuration] = useState(0)\n const [isMuted, setIsMuted] = useState(mutedProp)\n const [showControls, setShowControls] = useState(true)\n\n const resetHideTimer = useCallback(() => {\n setShowControls(true)\n if (hideTimerRef.current !== null) {\n clearTimeout(hideTimerRef.current)\n }\n hideTimerRef.current = setTimeout(() => {\n if (playing) setShowControls(false)\n }, 3000)\n }, [playing])\n\n // auto-hide controls\n useEffect(() => {\n if (!controls) return\n resetHideTimer()\n return () => {\n if (hideTimerRef.current !== null) clearTimeout(hideTimerRef.current)\n }\n }, [controls, resetHideTimer])\n\n const togglePlay = useCallback(() => {\n const video = videoRef.current\n if (video === null) return\n if (video.paused) {\n video.play().catch(() => {})\n setPlaying(true)\n } else {\n video.pause()\n setPlaying(false)\n }\n }, [])\n\n const toggleMute = useCallback(() => {\n const video = videoRef.current\n if (video === null) return\n video.muted = !video.muted\n setIsMuted(video.muted)\n }, [])\n\n const handleTimeUpdate = useCallback(() => {\n const video = videoRef.current\n if (video === null) return\n setCurrentTime(video.currentTime)\n }, [])\n\n const handleLoadedMetadata = useCallback(() => {\n const video = videoRef.current\n if (video === null) return\n setDuration(video.duration)\n }, [])\n\n const handleSeek = useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n const video = videoRef.current\n if (video === null) return\n const rect = e.currentTarget.getBoundingClientRect()\n const ratio = (e.clientX - rect.left) / rect.width\n video.currentTime = ratio * duration\n },\n [duration],\n )\n\n const handleFullscreen = useCallback(() => {\n const video = videoRef.current\n if (video === null) return\n if (document.fullscreenElement !== null) {\n document.exitFullscreen().catch(() => {})\n } else {\n video.requestFullscreen().catch(() => {})\n }\n }, [])\n\n const handleEnded = useCallback(() => {\n setPlaying(false)\n setShowControls(true)\n }, [])\n\n return (\n <div\n ref={ref}\n className={cx(\n 'relative overflow-hidden gds-radius-card',\n glass && 'gds-glass',\n className,\n )}\n data-component=\"video-player\"\n onMouseMove={controls ? resetHideTimer : undefined}\n onMouseLeave={controls ? () => setShowControls(false) : undefined}\n >\n <video\n ref={videoRef}\n src={src}\n poster={poster}\n autoPlay={autoPlay}\n muted={isMuted}\n loop={loop}\n className=\"block h-full w-full object-cover\"\n onTimeUpdate={handleTimeUpdate}\n onLoadedMetadata={handleLoadedMetadata}\n onEnded={handleEnded}\n data-testid=\"video-element\"\n />\n\n {controls && (\n <VideoControls\n currentTime={currentTime}\n duration={duration}\n playing={playing}\n isMuted={isMuted}\n showControls={showControls}\n onTogglePlay={togglePlay}\n onToggleMute={toggleMute}\n onSeek={handleSeek}\n onFullscreen={handleFullscreen}\n />\n )}\n </div>\n )\n },\n)\n","// virtual-list — windowed list rendering for large datasets\nimport type { ReactNode } from 'react'\nimport { forwardRef, useCallback, useMemo, useRef, useState } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type VirtualListProps<T> = {\n items: T[]\n itemHeight: number\n renderItem: (item: T, index: number) => ReactNode\n overscan?: number\n className?: string\n height?: number | string\n}\n\nfunction VirtualListInner<T>(\n {\n items,\n itemHeight,\n renderItem,\n overscan = 3,\n className,\n height = 400,\n }: VirtualListProps<T>,\n ref: React.ForwardedRef<HTMLDivElement>,\n) {\n const [scrollTop, setScrollTop] = useState(0)\n const innerRef = useRef<HTMLDivElement>(null)\n\n const totalHeight = items.length * itemHeight\n\n const containerHeight = typeof height === 'number' ? height : undefined\n\n const { visibleItems } = useMemo(() => {\n const viewportHeight = containerHeight ?? 400\n const rawStart = Math.floor(scrollTop / itemHeight)\n const rawEnd = Math.ceil((scrollTop + viewportHeight) / itemHeight)\n const start = Math.max(0, rawStart - overscan)\n const end = Math.min(items.length, rawEnd + overscan)\n\n const visible: Array<{ item: T; index: number }> = []\n for (let i = start; i < end; i++) {\n visible.push({ item: items[i], index: i })\n }\n\n return { startIndex: start, endIndex: end, visibleItems: visible }\n }, [items, itemHeight, scrollTop, containerHeight, overscan])\n\n const handleScroll = useCallback((e: React.UIEvent<HTMLDivElement>) => {\n setScrollTop(e.currentTarget.scrollTop)\n }, [])\n\n return (\n <div\n ref={ref}\n className={cx('overflow-y-auto', className)}\n style={{ height }}\n onScroll={handleScroll}\n data-component=\"virtual-list\"\n >\n <div\n ref={innerRef}\n style={{ height: totalHeight, position: 'relative' }}\n >\n {visibleItems.map(({ item, index }) => (\n <div\n key={index}\n style={{\n position: 'absolute',\n top: index * itemHeight,\n left: 0,\n right: 0,\n height: itemHeight,\n }}\n >\n {renderItem(item, index)}\n </div>\n ))}\n </div>\n </div>\n )\n}\n\nexport const VirtualList = forwardRef(VirtualListInner) as <T>(\n props: VirtualListProps<T> & { ref?: React.Ref<HTMLDivElement> },\n) => ReactNode\n","import type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype WeatherWidgetProps = React.HTMLAttributes<HTMLDivElement> & {\n condition: string\n icon?: ReactNode\n location: string\n temp: number\n unit?: 'C' | 'F'\n}\n\nexport const WeatherWidget = forwardRef<HTMLDivElement, WeatherWidgetProps>(\n function WeatherWidget({ className, condition, icon, location, temp, unit = 'C', ...props }, ref) {\n return (\n <div\n className={cx(\n 'inline-flex items-center gap-4 rounded-xl border border-border bg-surface p-4 select-none',\n className,\n )}\n data-component=\"weather-widget\"\n ref={ref}\n {...props}\n >\n {icon !== undefined && <div className=\"text-2xl text-fg-muted\">{icon}</div>}\n <div className=\"flex flex-col\">\n <span className=\"text-2xl font-bold text-fg leading-tight\">\n {temp}°{unit}\n </span>\n <span className=\"text-sm text-fg-muted\">{condition}</span>\n <span className=\"text-xs text-fg-muted/70\">{location}</span>\n </div>\n </div>\n )\n },\n)\n\nexport type { WeatherWidgetProps }\n","import { forwardRef } from 'react'\nimport {\n Area,\n AreaChart as RAreaChart,\n CartesianGrid,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from 'recharts'\n\nimport { cx } from '../utils/cx'\n\ntype ChartData = Record<string, unknown>\n\nexport type AreaChartProps = {\n data: ChartData[]\n dataKey: string\n xKey?: string\n className?: string\n height?: number\n color?: string\n glass?: boolean\n}\n\nconst GRADIENT_ID = 'gds-area-gradient'\n\nexport const AreaChart = forwardRef<HTMLDivElement, AreaChartProps>(\n function AreaChart(\n { data, dataKey, xKey = 'name', className, height = 300, color = 'var(--gds-accent)', glass, ...props },\n ref,\n ) {\n return (\n <div\n className={cx('w-full', glass && 'gds-radius-popover backdrop-blur-md bg-white/5', className)}\n data-component=\"area-chart\"\n ref={ref}\n {...props}\n >\n <ResponsiveContainer height={height} width=\"100%\">\n <RAreaChart data={data}>\n <defs>\n <linearGradient id={GRADIENT_ID} x1=\"0\" x2=\"0\" y1=\"0\" y2=\"1\">\n <stop offset=\"5%\" stopColor={color} stopOpacity={0.3} />\n <stop offset=\"95%\" stopColor={color} stopOpacity={0} />\n </linearGradient>\n </defs>\n <CartesianGrid stroke=\"var(--gds-border, #e5e7eb)\" strokeDasharray=\"3 3\" />\n <XAxis dataKey={xKey} stroke=\"var(--gds-fg-muted, #6b7280)\" tick={{ fontSize: 11 }} />\n <YAxis stroke=\"var(--gds-fg-muted, #6b7280)\" tick={{ fontSize: 11 }} />\n <Tooltip />\n <Area\n dataKey={dataKey}\n fill={`url(#${GRADIENT_ID})`}\n fillOpacity={1}\n stroke={color}\n strokeWidth={2}\n type=\"monotone\"\n />\n </RAreaChart>\n </ResponsiveContainer>\n </div>\n )\n },\n)\n","import { forwardRef } from 'react'\nimport {\n Bar,\n BarChart as RBarChart,\n CartesianGrid,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from 'recharts'\n\nimport { cx } from '../utils/cx'\n\ntype ChartData = Record<string, unknown>\n\nexport type BarChartProps = {\n data: ChartData[]\n dataKey: string\n xKey?: string\n className?: string\n height?: number\n color?: string\n glass?: boolean\n}\n\nexport const BarChart = forwardRef<HTMLDivElement, BarChartProps>(\n function BarChart(\n { data, dataKey, xKey = 'name', className, height = 300, color = 'var(--gds-accent)', glass, ...props },\n ref,\n ) {\n return (\n <div\n className={cx('w-full', glass && 'gds-radius-popover backdrop-blur-md bg-white/5', className)}\n data-component=\"bar-chart\"\n ref={ref}\n {...props}\n >\n <ResponsiveContainer height={height} width=\"100%\">\n <RBarChart data={data}>\n <CartesianGrid stroke=\"var(--gds-border, #e5e7eb)\" strokeDasharray=\"3 3\" />\n <XAxis dataKey={xKey} stroke=\"var(--gds-fg-muted, #6b7280)\" tick={{ fontSize: 11 }} />\n <YAxis stroke=\"var(--gds-fg-muted, #6b7280)\" tick={{ fontSize: 11 }} />\n <Tooltip />\n <Bar dataKey={dataKey} fill={color} radius={[4, 4, 0, 0]} />\n </RBarChart>\n </ResponsiveContainer>\n </div>\n )\n },\n)\n","// box-plot-stats — quartile and whisker computation\n\nfunction quantile(sorted: number[], q: number): number {\n const pos = (sorted.length - 1) * q\n const lo = Math.floor(pos)\n const hi = Math.ceil(pos)\n if (lo === hi) return sorted[lo]\n return sorted[lo] + (sorted[hi] - sorted[lo]) * (pos - lo)\n}\n\nexport type BoxStats = {\n q1: number\n median: number\n q3: number\n whiskerMin: number\n whiskerMax: number\n}\n\nexport function computeStats(values: number[]): BoxStats {\n const sorted = [...values].sort((a, b) => a - b)\n const q1 = quantile(sorted, 0.25)\n const median = quantile(sorted, 0.5)\n const q3 = quantile(sorted, 0.75)\n const iqr = q3 - q1\n const whiskerMin = Math.max(sorted[0], q1 - 1.5 * iqr)\n const whiskerMax = Math.min(sorted[sorted.length - 1], q3 + 1.5 * iqr)\n return { q1, median, q3, whiskerMin, whiskerMax }\n}\n","// box-plot — box and whisker plot using pure SVG\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { computeStats } from './box-plot-stats'\n\ntype BoxPlotGroup = {\n label: string\n values: number[]\n}\n\nexport type BoxPlotProps = {\n data: BoxPlotGroup[]\n width?: number\n height?: number\n glass?: boolean\n className?: string\n}\n\nconst PALETTE = [\n 'var(--gds-palette-0, #6366f1)',\n 'var(--gds-palette-1, #8b5cf6)',\n 'var(--gds-palette-2, #06b6d4)',\n 'var(--gds-palette-3, #10b981)',\n 'var(--gds-palette-4, #f59e0b)',\n]\n\nexport const BoxPlot = forwardRef<HTMLDivElement, BoxPlotProps>(\n function BoxPlot({ data, width = 400, height = 300, glass, className }, ref) {\n const padding = { top: 20, right: 20, bottom: 40, left: 50 }\n const chartW = width - padding.left - padding.right\n const chartH = height - padding.top - padding.bottom\n\n const allValues = data.flatMap((g) => g.values)\n const globalMin = allValues.length > 0 ? Math.min(...allValues) : 0\n const globalMax = allValues.length > 0 ? Math.max(...allValues) : 1\n const range = globalMax - globalMin\n const yMin = globalMin - range * 0.1\n const yMax = globalMax + range * 0.1\n const yScale = (v: number) => padding.top + chartH * (1 - (v - yMin) / (yMax - yMin))\n\n const groupW = data.length > 0 ? chartW / data.length : chartW\n const boxW = Math.min(groupW * 0.6, 60)\n\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-radius-popover border border-border',\n glass && 'backdrop-blur-md bg-white/5',\n className,\n )}\n data-component=\"box-plot\"\n >\n <svg width={width} height={height} viewBox={`0 0 ${width} ${height}`}>\n {/* y-axis */}\n <line\n x1={padding.left}\n y1={padding.top}\n x2={padding.left}\n y2={padding.top + chartH}\n stroke=\"var(--gds-border, #374151)\"\n strokeWidth={1}\n />\n {/* x-axis */}\n <line\n x1={padding.left}\n y1={padding.top + chartH}\n x2={padding.left + chartW}\n y2={padding.top + chartH}\n stroke=\"var(--gds-border, #374151)\"\n strokeWidth={1}\n />\n\n {data.map((group, i) => {\n if (group.values.length === 0) return null\n const stats = computeStats(group.values)\n const cx = padding.left + groupW * (i + 0.5)\n const color = PALETTE[i % PALETTE.length]\n\n return (\n <g key={group.label} data-box={group.label}>\n {/* whisker line */}\n <line\n x1={cx}\n y1={yScale(stats.whiskerMax)}\n x2={cx}\n y2={yScale(stats.whiskerMin)}\n stroke={color}\n strokeWidth={1.5}\n />\n {/* whisker caps */}\n <line x1={cx - boxW * 0.3} y1={yScale(stats.whiskerMin)} x2={cx + boxW * 0.3} y2={yScale(stats.whiskerMin)} stroke={color} strokeWidth={1.5} />\n <line x1={cx - boxW * 0.3} y1={yScale(stats.whiskerMax)} x2={cx + boxW * 0.3} y2={yScale(stats.whiskerMax)} stroke={color} strokeWidth={1.5} />\n {/* box */}\n <rect\n x={cx - boxW / 2}\n y={yScale(stats.q3)}\n width={boxW}\n height={yScale(stats.q1) - yScale(stats.q3)}\n fill={color}\n fillOpacity={0.2}\n stroke={color}\n strokeWidth={1.5}\n />\n {/* median line */}\n <line\n x1={cx - boxW / 2}\n y1={yScale(stats.median)}\n x2={cx + boxW / 2}\n y2={yScale(stats.median)}\n stroke={color}\n strokeWidth={2}\n />\n {/* label */}\n <text\n x={cx}\n y={padding.top + chartH + 20}\n textAnchor=\"middle\"\n fill=\"var(--gds-fg-muted, #9ca3af)\"\n fontSize={10}\n >\n {group.label}\n </text>\n </g>\n )\n })}\n </svg>\n </div>\n )\n },\n)\n\nexport { computeStats } from './box-plot-stats'\nexport type { BoxPlotGroup }\n","import { forwardRef } from 'react'\nimport {\n ResponsiveContainer,\n Scatter,\n ScatterChart,\n Tooltip,\n XAxis,\n YAxis,\n ZAxis,\n} from 'recharts'\n\nimport { cx } from '../utils/cx'\n\nexport type BubbleChartProps = {\n data: { x: number; y: number; z: number; name?: string }[]\n xLabel?: string\n yLabel?: string\n height?: number\n glass?: boolean\n className?: string\n}\n\nexport const BubbleChart = forwardRef<HTMLDivElement, BubbleChartProps>(\n function BubbleChart(\n { data, xLabel, yLabel, height = 300, glass, className, ...props },\n ref,\n ) {\n return (\n <div\n className={cx(\n 'w-full gds-radius-popover border border-[var(--gds-border,#e5e7eb)]',\n glass && 'backdrop-blur-md bg-white/5',\n className,\n )}\n data-component=\"bubble-chart\"\n ref={ref}\n {...props}\n >\n <ResponsiveContainer height={height} width=\"100%\">\n <ScatterChart>\n <XAxis\n dataKey=\"x\"\n name={xLabel}\n stroke=\"var(--gds-fg-muted, #6b7280)\"\n tick={{ fontSize: 11 }}\n type=\"number\"\n />\n <YAxis\n dataKey=\"y\"\n name={yLabel}\n stroke=\"var(--gds-fg-muted, #6b7280)\"\n tick={{ fontSize: 11 }}\n type=\"number\"\n />\n <ZAxis dataKey=\"z\" range={[20, 400]} type=\"number\" />\n <Tooltip />\n <Scatter data={data} fill=\"var(--gds-accent)\" fillOpacity={0.6} />\n </ScatterChart>\n </ResponsiveContainer>\n </div>\n )\n },\n)\n","import { forwardRef } from 'react'\nimport {\n CartesianGrid,\n Line,\n LineChart,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from 'recharts'\n\nimport { cx } from '../utils/cx'\n\nconst PALETTE = [\n 'var(--gds-palette-0, #6366f1)',\n 'var(--gds-palette-1, #8b5cf6)',\n 'var(--gds-palette-2, #06b6d4)',\n 'var(--gds-palette-3, #10b981)',\n 'var(--gds-palette-4, #f59e0b)',\n 'var(--gds-palette-5, #ef4444)',\n 'var(--gds-palette-6, #ec4899)',\n 'var(--gds-palette-7, #14b8a6)',\n 'var(--gds-palette-8, #f97316)',\n 'var(--gds-palette-9, #a855f7)',\n]\n\nexport type BumpChartProps = {\n data: Record<string, unknown>[]\n series: string[]\n xKey?: string\n height?: number\n glass?: boolean\n className?: string\n}\n\nexport const BumpChart = forwardRef<HTMLDivElement, BumpChartProps>(\n function BumpChart({ data, series, xKey = 'name', height = 300, glass, className, ...props }, ref) {\n return (\n <div\n ref={ref}\n className={cx(\n 'w-full gds-radius-popover border border-border',\n glass && 'backdrop-blur-md bg-white/5',\n className,\n )}\n data-component=\"bump-chart\"\n {...props}\n >\n <ResponsiveContainer height={height} width=\"100%\">\n <LineChart data={data}>\n <CartesianGrid stroke=\"var(--gds-border, #e5e7eb)\" strokeDasharray=\"3 3\" />\n <XAxis dataKey={xKey} stroke=\"var(--gds-fg-muted, #6b7280)\" tick={{ fontSize: 11 }} />\n <YAxis reversed stroke=\"var(--gds-fg-muted, #6b7280)\" tick={{ fontSize: 11 }} />\n <Tooltip />\n {series.map((key, i) => (\n <Line\n key={key}\n dataKey={key}\n dot={{ r: 4, fill: PALETTE[i % PALETTE.length] }}\n stroke={PALETTE[i % PALETTE.length]}\n strokeWidth={2}\n type=\"monotone\"\n />\n ))}\n </LineChart>\n </ResponsiveContainer>\n </div>\n )\n },\n)\n","// heatmap-utils — pure date computation for calendar heatmap\n\nexport type HeatmapDatum = { date: string; value: number }\n\nexport type HeatmapCell = {\n x: number\n y: number\n date: string\n value: number\n level: number\n}\n\nexport type MonthLabel = { label: string; x: number }\n\nexport type HeatmapGrid = {\n cells: HeatmapCell[]\n monthLabels: MonthLabel[]\n weeks: number\n}\n\nexport const DAY_LABELS = ['Mon', '', 'Wed', '', 'Fri', '', '']\nconst MONTH_NAMES = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']\n\nfunction getWeekday(d: Date): number {\n // 0=Mon ... 6=Sun\n return (d.getDay() + 6) % 7\n}\n\nfunction computeThresholds(data: HeatmapDatum[]): number[] {\n const values = data.map((d) => d.value).filter((v) => v > 0).sort((a, b) => a - b)\n const thresholds: number[] = []\n if (values.length > 0) {\n for (let i = 1; i <= 4; i++) {\n const idx = Math.min(Math.floor((i / 4) * values.length), values.length - 1)\n thresholds.push(values[idx])\n }\n }\n return thresholds\n}\n\nfunction getLevel(value: number, thresholds: number[]): number {\n if (value <= 0) return 0\n for (let i = 0; i < thresholds.length; i++) {\n if (value <= thresholds[i]) return i + 1\n }\n return 4\n}\n\nexport function computeHeatmapGrid(\n data: HeatmapDatum[],\n startDate: string | undefined,\n endDate: string | undefined,\n step: number,\n): HeatmapGrid {\n const end = endDate !== undefined ? new Date(endDate) : new Date()\n const start = startDate !== undefined\n ? new Date(startDate)\n : new Date(end.getFullYear() - 1, end.getMonth(), end.getDate() + 1)\n\n const lookup = new Map<string, number>()\n for (const d of data) {\n lookup.set(d.date, d.value)\n }\n\n const thresholds = computeThresholds(data)\n\n const cells: HeatmapCell[] = []\n const months: MonthLabel[] = []\n let weekIdx = 0\n let lastMonth = -1\n const cur = new Date(start)\n\n // align to start of week (Monday)\n const startWeekday = getWeekday(cur)\n if (startWeekday > 0) {\n cur.setDate(cur.getDate() - startWeekday)\n }\n\n while (cur <= end) {\n const day = getWeekday(cur)\n const dateStr = cur.toISOString().slice(0, 10)\n const value = lookup.get(dateStr) ?? 0\n\n if (cur.getMonth() !== lastMonth && day <= 3) {\n months.push({ label: MONTH_NAMES[cur.getMonth()], x: weekIdx * step })\n lastMonth = cur.getMonth()\n }\n\n cells.push({\n x: weekIdx * step,\n y: day * step,\n date: dateStr,\n value,\n level: getLevel(value, thresholds),\n })\n\n if (day === 6) {\n weekIdx++\n }\n cur.setDate(cur.getDate() + 1)\n }\n\n return { cells, monthLabels: months, weeks: weekIdx + 1 }\n}\n","// calendar-heatmap — GitHub-style contribution heatmap\nimport { forwardRef, useMemo, useState } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\nimport { computeHeatmapGrid, DAY_LABELS } from './heatmap-utils'\n\ntype HeatmapDatum = { date: string; value: number }\n\nexport type CalendarHeatmapProps = {\n data: HeatmapDatum[]\n startDate?: string\n endDate?: string\n colorScale?: string[]\n cellSize?: number\n glass?: boolean\n className?: string\n}\n\nexport const CalendarHeatmap = forwardRef<SVGSVGElement, CalendarHeatmapProps>(\n function CalendarHeatmap(\n {\n data,\n startDate,\n endDate,\n colorScale = ['var(--gds-bg-tertiary)', 'var(--gds-accent-dim, rgba(99,179,163,0.3))', 'var(--gds-accent-muted, rgba(99,179,163,0.55))', 'var(--gds-accent-soft, rgba(99,179,163,0.75))', 'var(--gds-accent)'],\n cellSize = 12,\n glass,\n className,\n },\n ref,\n ) {\n const [tooltip, setTooltip] = useState<{ x: number; y: number; text: string } | null>(null)\n const gap = 2\n const step = cellSize + gap\n\n const { cells, monthLabels, weeks } = useMemo(\n () => computeHeatmapGrid(data, startDate, endDate, step),\n [data, startDate, endDate, step],\n )\n\n const labelWidth = 28\n const headerHeight = 14\n const svgWidth = labelWidth + weeks * step\n const svgHeight = headerHeight + 7 * step\n\n return (\n <div\n className={cx(\n 'relative inline-block',\n glass === true && cx(glassClass(glass), 'rounded-lg border border-white/10 p-3'),\n className,\n )}\n data-component=\"calendar-heatmap\"\n >\n <svg ref={ref} height={svgHeight} width={svgWidth}>\n {monthLabels.map((m) => (\n <text\n key={`${m.label}-${m.x}`}\n fill=\"var(--gds-fg-muted, #888)\"\n fontSize={9}\n x={labelWidth + m.x}\n y={10}\n >\n {m.label}\n </text>\n ))}\n {DAY_LABELS.map((label, i) =>\n label !== '' ? (\n <text\n key={label}\n fill=\"var(--gds-fg-muted, #888)\"\n fontSize={9}\n textAnchor=\"end\"\n x={labelWidth - 4}\n y={headerHeight + i * step + cellSize - 2}\n >\n {label}\n </text>\n ) : null,\n )}\n {cells.map((c) => (\n <rect\n key={c.date}\n fill={colorScale[c.level] ?? colorScale[colorScale.length - 1]}\n height={cellSize}\n rx={2}\n ry={2}\n width={cellSize}\n x={labelWidth + c.x}\n y={headerHeight + c.y}\n onMouseEnter={(e) => {\n const rect = (e.target as SVGRectElement).getBoundingClientRect()\n setTooltip({ x: rect.x, y: rect.y, text: `${c.date}: ${c.value}` })\n }}\n onMouseLeave={() => setTooltip(null)}\n />\n ))}\n </svg>\n {tooltip !== null && (\n <div\n className=\"pointer-events-none fixed z-50 rounded bg-surface px-2 py-1 text-[10px] text-fg shadow-md border border-border\"\n style={{ left: tooltip.x, top: tooltip.y - 28 }}\n >\n {tooltip.text}\n </div>\n )}\n </div>\n )\n },\n)\n","import { forwardRef, useMemo } from 'react'\nimport {\n Bar,\n CartesianGrid,\n ComposedChart,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from 'recharts'\n\nimport { cx } from '../utils/cx'\n\ntype CandleData = {\n date: string\n open: number\n high: number\n low: number\n close: number\n}\n\nexport type CandlestickChartProps = {\n data: CandleData[]\n height?: number\n upColor?: string\n downColor?: string\n glass?: boolean\n className?: string\n}\n\ntype PreparedCandle = {\n date: string\n bodyBottom: number\n bodyHeight: number\n fill: string\n high: number\n low: number\n}\n\nfunction CandleShape(shapeProps: any) {\n const { x, y, width, height: h, payload } = shapeProps as {\n x: number\n y: number\n width: number\n height: number\n payload: PreparedCandle\n }\n if (h === 0 && payload.bodyHeight === 0) return null\n const centerX = x + width / 2\n // wick: from high to low in chart coordinates\n // y corresponds to bodyBottom + bodyHeight (top of body), we need to compute wick positions\n const bodyTop = y\n const bodyBottom = y + h\n return (\n <g>\n <line\n stroke={payload.fill}\n strokeWidth={1}\n x1={centerX}\n x2={centerX}\n y1={bodyTop - 2}\n y2={bodyBottom + 2}\n />\n <rect\n fill={payload.fill}\n height={Math.max(h, 1)}\n rx={1}\n width={Math.max(width - 2, 2)}\n x={x + 1}\n y={y}\n />\n </g>\n )\n}\n\nexport const CandlestickChart = forwardRef<HTMLDivElement, CandlestickChartProps>(\n function CandlestickChart(\n {\n data,\n height = 300,\n upColor = 'var(--gds-success, #22c55e)',\n downColor = 'var(--gds-danger, #ef4444)',\n glass,\n className,\n ...props\n },\n ref,\n ) {\n const prepared = useMemo(\n () =>\n data.map((d) => ({\n date: d.date,\n bodyBottom: Math.min(d.open, d.close),\n bodyHeight: Math.abs(d.close - d.open),\n fill: d.close >= d.open ? upColor : downColor,\n high: d.high,\n low: d.low,\n })),\n [data, upColor, downColor],\n )\n\n const domain = useMemo(() => {\n const lows = data.map((d) => d.low)\n const highs = data.map((d) => d.high)\n return [Math.min(...lows), Math.max(...highs)]\n }, [data])\n\n return (\n <div\n className={cx(\n 'w-full gds-radius-popover border border-[var(--gds-border,#e5e7eb)]',\n glass && 'backdrop-blur-md bg-white/5',\n className,\n )}\n data-component=\"candlestick-chart\"\n ref={ref}\n {...props}\n >\n <ResponsiveContainer height={height} width=\"100%\">\n <ComposedChart data={prepared}>\n <CartesianGrid stroke=\"var(--gds-border, #e5e7eb)\" strokeDasharray=\"3 3\" />\n <XAxis dataKey=\"date\" stroke=\"var(--gds-fg-muted, #6b7280)\" tick={{ fontSize: 11 }} />\n <YAxis\n domain={domain}\n stroke=\"var(--gds-fg-muted, #6b7280)\"\n tick={{ fontSize: 11 }}\n />\n <Tooltip />\n <Bar\n dataKey=\"bodyHeight\"\n shape={<CandleShape />}\n stackId=\"candle\"\n />\n </ComposedChart>\n </ResponsiveContainer>\n </div>\n )\n },\n)\n","// chord-math — pure math functions for chord diagram arc/chord geometry\n\nexport const CHORD_PALETTE = [\n 'var(--gds-palette-0, #6366f1)',\n 'var(--gds-palette-1, #8b5cf6)',\n 'var(--gds-palette-2, #06b6d4)',\n 'var(--gds-palette-3, #10b981)',\n 'var(--gds-palette-4, #f59e0b)',\n 'var(--gds-palette-5, #ef4444)',\n 'var(--gds-palette-6, #ec4899)',\n 'var(--gds-palette-7, #14b8a6)',\n 'var(--gds-palette-8, #f97316)',\n 'var(--gds-palette-9, #a855f7)',\n]\n\nexport type ArcSpan = { start: number; end: number }\n\nexport type ChordSpan = {\n source: number\n target: number\n sourceStart: number\n sourceEnd: number\n targetStart: number\n targetEnd: number\n}\n\nexport function polarToCartesian(cx: number, cy: number, r: number, angle: number) {\n return {\n x: cx + r * Math.cos(angle),\n y: cy + r * Math.sin(angle),\n }\n}\n\nexport function arcPath(cx: number, cy: number, r: number, startAngle: number, endAngle: number) {\n const start = polarToCartesian(cx, cy, r, endAngle)\n const end = polarToCartesian(cx, cy, r, startAngle)\n const largeArc = endAngle - startAngle > Math.PI ? 1 : 0\n return `M ${start.x} ${start.y} A ${r} ${r} 0 ${largeArc} 0 ${end.x} ${end.y}`\n}\n\nexport function computeArcs(totals: number[], grandTotal: number, n: number, gap: number): ArcSpan[] {\n const totalAngle = 2 * Math.PI - n * gap\n const arcs: ArcSpan[] = []\n let currentAngle = -Math.PI / 2\n\n for (let i = 0; i < n; i++) {\n const sweep = (totals[i] / grandTotal) * totalAngle\n arcs.push({ start: currentAngle, end: currentAngle + sweep })\n currentAngle += sweep + gap\n }\n\n return arcs\n}\n\nexport function computeChords(\n matrix: number[][],\n arcs: ArcSpan[],\n grandTotal: number,\n n: number,\n gap: number,\n): ChordSpan[] {\n const totalAngle = 2 * Math.PI - n * gap\n const chords: ChordSpan[] = []\n const arcOffsets = arcs.map((a) => a.start)\n\n for (let i = 0; i < n; i++) {\n for (let j = i + 1; j < n; j++) {\n const val = matrix[i][j] + matrix[j][i]\n if (val <= 0) continue\n\n const iSweep = (matrix[i][j] / grandTotal) * totalAngle\n const jSweep = (matrix[j][i] / grandTotal) * totalAngle\n\n chords.push({\n source: i,\n target: j,\n sourceStart: arcOffsets[i],\n sourceEnd: arcOffsets[i] + iSweep,\n targetStart: arcOffsets[j],\n targetEnd: arcOffsets[j] + jSweep,\n })\n arcOffsets[i] += iSweep\n arcOffsets[j] += jSweep\n }\n }\n\n return chords\n}\n\nexport function chordPath(\n chord: ChordSpan,\n centerX: number,\n centerY: number,\n innerR: number,\n): string {\n const s0 = polarToCartesian(centerX, centerY, innerR, chord.sourceStart)\n const s1 = polarToCartesian(centerX, centerY, innerR, chord.sourceEnd)\n const t0 = polarToCartesian(centerX, centerY, innerR, chord.targetStart)\n const t1 = polarToCartesian(centerX, centerY, innerR, chord.targetEnd)\n\n return [\n `M ${s0.x} ${s0.y}`,\n `A ${innerR} ${innerR} 0 0 1 ${s1.x} ${s1.y}`,\n `Q ${centerX} ${centerY} ${t0.x} ${t0.y}`,\n `A ${innerR} ${innerR} 0 0 1 ${t1.x} ${t1.y}`,\n `Q ${centerX} ${centerY} ${s0.x} ${s0.y}`,\n 'Z',\n ].join(' ')\n}\n","// chord-diagram — chord diagram showing relationships between entities\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { arcPath, CHORD_PALETTE, chordPath, computeArcs, computeChords, polarToCartesian } from './chord-math'\n\nexport type ChordDiagramProps = {\n matrix: number[][]\n labels: string[]\n width?: number\n height?: number\n glass?: boolean\n className?: string\n}\n\nexport const ChordDiagram = forwardRef<HTMLDivElement, ChordDiagramProps>(\n function ChordDiagram({ matrix, labels, width = 300, height = 300, glass, className }, ref) {\n const n = labels.length\n const centerX = width / 2\n const centerY = height / 2\n const outerR = Math.min(width, height) / 2 - 30\n const innerR = outerR - 12\n const gap = 0.04\n\n // compute totals per entity\n const totals = matrix.map((row) => row.reduce((sum, v) => sum + v, 0))\n const grandTotal = totals.reduce((sum, v) => sum + v, 0)\n\n if (grandTotal === 0 || n === 0) {\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-radius-popover border border-border',\n glass && 'backdrop-blur-md bg-white/5',\n className,\n )}\n data-component=\"chord-diagram\"\n >\n <svg width={width} height={height} viewBox={`0 0 ${width} ${height}`} />\n </div>\n )\n }\n\n const arcs = computeArcs(totals, grandTotal, n, gap)\n const chords = computeChords(matrix, arcs, grandTotal, n, gap)\n\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-radius-popover border border-border',\n glass && 'backdrop-blur-md bg-white/5',\n className,\n )}\n data-component=\"chord-diagram\"\n >\n <svg width={width} height={height} viewBox={`0 0 ${width} ${height}`}>\n {arcs.map((arc, i) => (\n <path\n key={`arc-${labels[i]}`}\n d={arcPath(centerX, centerY, outerR, arc.start, arc.end)}\n data-arc={labels[i]}\n fill=\"none\"\n stroke={CHORD_PALETTE[i % CHORD_PALETTE.length]}\n strokeWidth={12}\n strokeLinecap=\"round\"\n />\n ))}\n\n {chords.map((chord, i) => (\n <path\n key={`chord-${i}`}\n d={chordPath(chord, centerX, centerY, innerR)}\n fill={CHORD_PALETTE[chord.source % CHORD_PALETTE.length]}\n fillOpacity={0.25}\n stroke={CHORD_PALETTE[chord.source % CHORD_PALETTE.length]}\n strokeOpacity={0.4}\n strokeWidth={0.5}\n />\n ))}\n\n {arcs.map((arc, i) => {\n const midAngle = (arc.start + arc.end) / 2\n const labelR = outerR + 16\n const pos = polarToCartesian(centerX, centerY, labelR, midAngle)\n const anchor = midAngle > Math.PI / 2 && midAngle < (3 * Math.PI) / 2 ? 'end' : 'start'\n\n return (\n <text\n key={`label-${labels[i]}`}\n x={pos.x}\n y={pos.y}\n textAnchor={anchor}\n dominantBaseline=\"middle\"\n fill=\"var(--gds-fg-muted, #9ca3af)\"\n fontSize={10}\n >\n {labels[i]}\n </text>\n )\n })}\n </svg>\n </div>\n )\n },\n)\n","import { forwardRef } from 'react'\nimport {\n Bar,\n CartesianGrid,\n ComposedChart,\n Legend,\n Line,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from 'recharts'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\nexport type ComboChartProps = {\n data: Record<string, unknown>[]\n barKey: string\n lineKey: string\n xKey?: string\n barColor?: string\n lineColor?: string\n height?: number\n glass?: boolean\n className?: string\n}\n\nexport const ComboChart = forwardRef<HTMLDivElement, ComboChartProps>(\n function ComboChart(\n {\n data,\n barKey,\n lineKey,\n xKey = 'name',\n barColor = 'var(--gds-accent)',\n lineColor = 'var(--gds-success)',\n height = 300,\n glass,\n className,\n ...props\n },\n ref,\n ) {\n return (\n <div\n className={cx(\n 'w-full gds-radius-popover border border-white/[0.06]',\n glassClass(glass),\n className,\n )}\n data-component=\"combo-chart\"\n ref={ref}\n {...props}\n >\n <ResponsiveContainer height={height} width=\"100%\">\n <ComposedChart data={data}>\n <CartesianGrid stroke=\"var(--gds-border, #e5e7eb)\" strokeDasharray=\"3 3\" />\n <XAxis dataKey={xKey} stroke=\"var(--gds-fg-muted, #6b7280)\" tick={{ fontSize: 11 }} />\n <YAxis stroke=\"var(--gds-fg-muted, #6b7280)\" tick={{ fontSize: 11 }} />\n <Tooltip />\n <Legend />\n <Bar dataKey={barKey} fill={barColor} radius={[4, 4, 0, 0]} />\n <Line dataKey={lineKey} dot={false} stroke={lineColor} strokeWidth={2} type=\"monotone\" />\n </ComposedChart>\n </ResponsiveContainer>\n </div>\n )\n },\n)\n","// flow-chart — simple left-to-right flow diagram using pure SVG\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype FlowNode = {\n id: string\n label: string\n type?: 'start' | 'end' | 'process' | 'decision'\n}\n\ntype FlowEdge = {\n from: string\n to: string\n label?: string\n}\n\nexport type FlowChartProps = {\n nodes: FlowNode[]\n edges: FlowEdge[]\n width?: number\n height?: number\n glass?: boolean\n className?: string\n}\n\nconst NODE_COLORS: Record<string, string> = {\n start: 'var(--gds-palette-3, #10b981)',\n end: 'var(--gds-palette-5, #ef4444)',\n process: 'var(--gds-palette-0, #6366f1)',\n decision: 'var(--gds-palette-4, #f59e0b)',\n}\n\nconst NODE_W = 100\nconst NODE_H = 40\n\nfunction renderNode(node: FlowNode, x: number, y: number) {\n const color = NODE_COLORS[node.type ?? 'process']\n const nodeType = node.type ?? 'process'\n\n if (nodeType === 'decision') {\n const half = NODE_H * 0.7\n return (\n <g key={node.id} data-node={node.id}>\n <polygon\n points={`${x},${y - half} ${x + half},${y} ${x},${y + half} ${x - half},${y}`}\n fill={color}\n fillOpacity={0.15}\n stroke={color}\n strokeWidth={1.5}\n />\n <text x={x} y={y + 4} textAnchor=\"middle\" fill=\"var(--gds-fg, #e5e7eb)\" fontSize={10}>\n {node.label}\n </text>\n </g>\n )\n }\n\n const rx = nodeType === 'start' || nodeType === 'end' ? NODE_H / 2 : 4\n return (\n <g key={node.id} data-node={node.id}>\n <rect\n x={x - NODE_W / 2}\n y={y - NODE_H / 2}\n width={NODE_W}\n height={NODE_H}\n rx={rx}\n fill={color}\n fillOpacity={0.15}\n stroke={color}\n strokeWidth={1.5}\n />\n <text x={x} y={y + 4} textAnchor=\"middle\" fill=\"var(--gds-fg, #e5e7eb)\" fontSize={10}>\n {node.label}\n </text>\n </g>\n )\n}\n\nexport const FlowChart = forwardRef<HTMLDivElement, FlowChartProps>(\n function FlowChart({ nodes, edges, width = 600, height = 200, glass, className }, ref) {\n const spacing = nodes.length > 1 ? (width - 80) / (nodes.length - 1) : 0\n const startX = nodes.length === 1 ? width / 2 : 40\n const centerY = height / 2\n\n const posMap = new Map(nodes.map((n, i) => [n.id, { x: startX + i * spacing, y: centerY }]))\n\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-radius-popover border border-border',\n glass && 'backdrop-blur-md bg-white/5',\n className,\n )}\n data-component=\"flow-chart\"\n >\n <svg width={width} height={height} viewBox={`0 0 ${width} ${height}`}>\n <defs>\n <marker id=\"gds-arrow\" markerWidth=\"8\" markerHeight=\"6\" refX=\"8\" refY=\"3\" orient=\"auto\">\n <path d=\"M0,0 L8,3 L0,6\" fill=\"var(--gds-fg-muted, #6b7280)\" />\n </marker>\n </defs>\n\n {/* edges */}\n {edges.map((edge, i) => {\n const from = posMap.get(edge.from)\n const to = posMap.get(edge.to)\n if (from === undefined || to === undefined) return null\n const x1 = from.x + NODE_W / 2\n const x2 = to.x - NODE_W / 2\n const midX = (x1 + x2) / 2\n const midY = (from.y + to.y) / 2\n return (\n <g key={i}>\n <line\n x1={x1}\n y1={from.y}\n x2={x2}\n y2={to.y}\n stroke=\"var(--gds-fg-muted, #6b7280)\"\n strokeWidth={1.5}\n markerEnd=\"url(#gds-arrow)\"\n />\n {edge.label !== undefined && (\n <text x={midX} y={midY - 8} textAnchor=\"middle\" fill=\"var(--gds-fg-muted, #9ca3af)\" fontSize={9}>\n {edge.label}\n </text>\n )}\n </g>\n )\n })}\n\n {/* nodes */}\n {nodes.map((node, _i) => {\n const pos = posMap.get(node.id)\n if (pos === undefined) return null\n return renderNode(node, pos.x, pos.y)\n })}\n </svg>\n </div>\n )\n },\n)\n\nexport type { FlowEdge, FlowNode }\n","import { forwardRef } from 'react'\nimport { Cell, Funnel, FunnelChart as RFunnelChart, ResponsiveContainer, Tooltip } from 'recharts'\n\nimport { cx } from '../utils/cx'\n\ntype ChartData = Record<string, unknown>\n\nconst PALETTE = [\n 'var(--gds-palette-0, #6366f1)',\n 'var(--gds-palette-1, #22d3ee)',\n 'var(--gds-palette-2, #f59e0b)',\n 'var(--gds-palette-3, #10b981)',\n 'var(--gds-palette-4, #ef4444)',\n 'var(--gds-palette-5, #8b5cf6)',\n 'var(--gds-palette-6, #ec4899)',\n 'var(--gds-palette-7, #14b8a6)',\n 'var(--gds-palette-8, #f97316)',\n 'var(--gds-palette-9, #3b82f6)',\n]\n\nexport type FunnelChartProps = {\n data: ChartData[]\n dataKey: string\n className?: string\n height?: number\n colors?: string[]\n glass?: boolean\n}\n\nexport const FunnelChart = forwardRef<HTMLDivElement, FunnelChartProps>(\n function FunnelChart({ data, dataKey, className, height = 300, colors = PALETTE, glass, ...props }, ref) {\n return (\n <div\n className={cx('w-full', glass && 'gds-radius-popover backdrop-blur-md bg-white/5', className)}\n data-component=\"funnel-chart\"\n ref={ref}\n {...props}\n >\n <ResponsiveContainer height={height} width=\"100%\">\n <RFunnelChart>\n <Tooltip />\n <Funnel dataKey={dataKey} data={data} isAnimationActive={false}>\n {data.map((_, i) => (\n <Cell fill={colors[i % colors.length]} key={i} />\n ))}\n </Funnel>\n </RFunnelChart>\n </ResponsiveContainer>\n </div>\n )\n },\n)\n","import { forwardRef } from 'react'\nimport { Cell, Pie, PieChart, ResponsiveContainer } from 'recharts'\n\nimport { cx } from '../utils/cx'\n\nexport type GaugeProps = {\n value: number\n max?: number\n className?: string\n height?: number\n color?: string\n trackColor?: string\n label?: string\n glass?: boolean\n}\n\nexport const Gauge = forwardRef<HTMLDivElement, GaugeProps>(\n function Gauge(\n {\n value,\n max = 100,\n className,\n height = 200,\n color = 'var(--gds-accent)',\n trackColor = 'var(--gds-border, #e5e7eb)',\n label,\n glass,\n ...props\n },\n ref,\n ) {\n const clamped = Math.min(Math.max(value, 0), max)\n const remaining = max - clamped\n const data = [\n { name: 'value', value: clamped },\n { name: 'remaining', value: remaining },\n ]\n\n return (\n <div\n className={cx('relative w-full', glass && 'gds-radius-popover backdrop-blur-md bg-white/5', className)}\n data-component=\"gauge\"\n ref={ref}\n {...props}\n >\n <ResponsiveContainer height={height} width=\"100%\">\n <PieChart>\n <Pie\n cx=\"50%\"\n cy=\"70%\"\n data={data}\n dataKey=\"value\"\n endAngle={0}\n innerRadius=\"60%\"\n outerRadius=\"80%\"\n startAngle={180}\n stroke=\"none\"\n >\n <Cell fill={color} />\n <Cell fill={trackColor} />\n </Pie>\n </PieChart>\n </ResponsiveContainer>\n <div className=\"absolute inset-0 flex flex-col items-center justify-center\" style={{ top: '20%' }}>\n <span className=\"text-2xl font-semibold\" style={{ color }}>\n {clamped}\n </span>\n {label !== undefined && <span className=\"gds-text-body text-[var(--gds-fg-muted,#6b7280)]\">{label}</span>}\n </div>\n </div>\n )\n },\n)\n","import { forwardRef, useMemo } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type HeatmapChartProps = {\n data: number[][]\n xLabels?: string[]\n yLabels?: string[]\n colorScale?: { min: string; max: string }\n className?: string\n cellSize?: number\n glass?: boolean\n}\n\nfunction interpolateColor(min: string, max: string, t: number): string {\n const parse = (hex: string) => {\n const h = hex.replace('#', '')\n return [parseInt(h.slice(0, 2), 16), parseInt(h.slice(2, 4), 16), parseInt(h.slice(4, 6), 16)]\n }\n const [r1, g1, b1] = parse(min)\n const [r2, g2, b2] = parse(max)\n const r = Math.round(r1 + (r2 - r1) * t)\n const g = Math.round(g1 + (g2 - g1) * t)\n const b = Math.round(b1 + (b2 - b1) * t)\n return `rgb(${r},${g},${b})`\n}\n\nexport const HeatmapChart = forwardRef<HTMLDivElement, HeatmapChartProps>(\n function HeatmapChart(\n {\n data,\n xLabels,\n yLabels,\n colorScale = { min: '#1e293b', max: '#6366f1' },\n className,\n cellSize = 32,\n glass,\n ...props\n },\n ref,\n ) {\n const { dataMin, dataMax } = useMemo(() => {\n const flat = data.flat()\n return { dataMin: Math.min(...flat), dataMax: Math.max(...flat) }\n }, [data])\n\n const normalize = (v: number) => {\n if (dataMax === dataMin) return 0.5\n return (v - dataMin) / (dataMax - dataMin)\n }\n\n return (\n <div\n className={cx('inline-block', glass && 'gds-radius-popover backdrop-blur-md bg-white/5', className)}\n data-component=\"heatmap-chart\"\n ref={ref}\n {...props}\n >\n <div className=\"flex flex-col gap-px\">\n {xLabels !== undefined && (\n <div className=\"flex gap-px\" style={{ paddingLeft: yLabels !== undefined ? cellSize + 4 : 0 }}>\n {xLabels.map((l) => (\n <div\n className=\"flex items-center justify-center gds-text-caption text-[var(--gds-fg-muted,#6b7280)]\"\n key={l}\n style={{ width: cellSize, height: 16 }}\n >\n {l}\n </div>\n ))}\n </div>\n )}\n {data.map((row, ri) => (\n <div className=\"flex items-center gap-px\" key={ri}>\n {yLabels !== undefined && yLabels[ri] !== undefined && (\n <div\n className=\"flex-shrink-0 text-right gds-text-caption text-[var(--gds-fg-muted,#6b7280)] pr-1\"\n style={{ width: cellSize }}\n >\n {yLabels[ri]}\n </div>\n )}\n {row.map((val, ci) => (\n <div\n className=\"rounded-sm\"\n key={ci}\n style={{\n width: cellSize,\n height: cellSize,\n backgroundColor: interpolateColor(colorScale.min, colorScale.max, normalize(val)),\n }}\n title={String(val)}\n />\n ))}\n </div>\n ))}\n </div>\n </div>\n )\n },\n)\n","// histogram — frequency distribution of continuous data\nimport { forwardRef } from 'react'\nimport {\n Bar,\n BarChart,\n CartesianGrid,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from 'recharts'\n\nimport { cx } from '../utils/cx'\n\nexport type HistogramProps = {\n data: number[]\n bins?: number\n height?: number\n color?: string\n glass?: boolean\n className?: string\n}\n\nfunction computeBins(data: number[], binCount: number) {\n if (data.length === 0) return []\n const min = Math.min(...data)\n const max = Math.max(...data)\n const range = max - min\n const binWidth = range === 0 ? 1 : range / binCount\n\n return Array.from({ length: binCount }, (_, i) => {\n const lo = min + i * binWidth\n const hi = lo + binWidth\n const count = data.filter((v) => (i === binCount - 1 ? v >= lo && v <= hi : v >= lo && v < hi)).length\n return { range: `${lo.toFixed(1)}–${hi.toFixed(1)}`, count }\n })\n}\n\nexport const Histogram = forwardRef<HTMLDivElement, HistogramProps>(\n function Histogram(\n { data, bins = 10, height = 300, color = 'var(--gds-accent)', glass, className, ...props },\n ref,\n ) {\n const binData = computeBins(data, bins)\n\n return (\n <div\n className={cx(\n 'w-full gds-radius-popover border border-border',\n glass && 'backdrop-blur-md bg-white/5',\n className,\n )}\n data-component=\"histogram\"\n ref={ref}\n {...props}\n >\n <ResponsiveContainer height={height} width=\"100%\">\n <BarChart data={binData}>\n <CartesianGrid stroke=\"var(--gds-border, #e5e7eb)\" strokeDasharray=\"3 3\" />\n <XAxis dataKey=\"range\" stroke=\"var(--gds-fg-muted, #6b7280)\" tick={{ fontSize: 10 }} />\n <YAxis stroke=\"var(--gds-fg-muted, #6b7280)\" tick={{ fontSize: 11 }} />\n <Tooltip />\n <Bar dataKey=\"count\" fill={color} radius={[4, 4, 0, 0]} />\n </BarChart>\n </ResponsiveContainer>\n </div>\n )\n },\n)\n\nexport { computeBins }\n","import { forwardRef } from 'react'\nimport {\n CartesianGrid,\n Line,\n LineChart as RLineChart,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from 'recharts'\n\nimport { cx } from '../utils/cx'\n\ntype ChartData = Record<string, unknown>\n\nexport type LineChartProps = {\n data: ChartData[]\n dataKey: string\n xKey?: string\n className?: string\n height?: number\n color?: string\n glass?: boolean\n}\n\nexport const LineChart = forwardRef<HTMLDivElement, LineChartProps>(\n function LineChart(\n { data, dataKey, xKey = 'name', className, height = 300, color = 'var(--gds-accent)', glass, ...props },\n ref,\n ) {\n return (\n <div\n className={cx('w-full', glass && 'gds-radius-popover backdrop-blur-md bg-white/5', className)}\n data-component=\"line-chart\"\n ref={ref}\n {...props}\n >\n <ResponsiveContainer height={height} width=\"100%\">\n <RLineChart data={data}>\n <CartesianGrid stroke=\"var(--gds-border, #e5e7eb)\" strokeDasharray=\"3 3\" />\n <XAxis dataKey={xKey} stroke=\"var(--gds-fg-muted, #6b7280)\" tick={{ fontSize: 11 }} />\n <YAxis stroke=\"var(--gds-fg-muted, #6b7280)\" tick={{ fontSize: 11 }} />\n <Tooltip />\n <Line dataKey={dataKey} dot={false} stroke={color} strokeWidth={2} type=\"monotone\" />\n </RLineChart>\n </ResponsiveContainer>\n </div>\n )\n },\n)\n","// network-graph — simple circle-layout network graph using SVG\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype NetworkNode = {\n id: string\n label: string\n group?: number\n}\n\ntype NetworkEdge = {\n source: string\n target: string\n}\n\nexport type NetworkGraphProps = {\n nodes: NetworkNode[]\n edges: NetworkEdge[]\n width?: number\n height?: number\n glass?: boolean\n className?: string\n}\n\nconst PALETTE = [\n 'var(--gds-palette-0, #6366f1)',\n 'var(--gds-palette-1, #8b5cf6)',\n 'var(--gds-palette-2, #06b6d4)',\n 'var(--gds-palette-3, #10b981)',\n 'var(--gds-palette-4, #f59e0b)',\n 'var(--gds-palette-5, #ef4444)',\n 'var(--gds-palette-6, #ec4899)',\n 'var(--gds-palette-7, #14b8a6)',\n 'var(--gds-palette-8, #f97316)',\n 'var(--gds-palette-9, #84cc16)',\n]\n\nfunction computePositions(count: number, cx: number, cy: number, radius: number) {\n return Array.from({ length: count }, (_, i) => {\n const angle = (2 * Math.PI * i) / count - Math.PI / 2\n return { x: cx + radius * Math.cos(angle), y: cy + radius * Math.sin(angle) }\n })\n}\n\nexport const NetworkGraph = forwardRef<HTMLDivElement, NetworkGraphProps>(\n function NetworkGraph({ nodes, edges, width = 400, height = 300, glass, className }, ref) {\n const centerX = width / 2\n const centerY = height / 2\n const layoutRadius = Math.min(centerX, centerY) * 0.65\n const positions = computePositions(nodes.length, centerX, centerY, layoutRadius)\n\n const nodeMap = new Map(nodes.map((n, i) => [n.id, i]))\n const nodeRadius = Math.max(8, Math.min(16, 120 / Math.max(nodes.length, 1)))\n\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-radius-popover border border-border',\n glass && 'backdrop-blur-md bg-white/5',\n className,\n )}\n data-component=\"network-graph\"\n >\n <svg width={width} height={height} viewBox={`0 0 ${width} ${height}`}>\n {edges.map((edge, i) => {\n const si = nodeMap.get(edge.source)\n const ti = nodeMap.get(edge.target)\n if (si === undefined || ti === undefined) return null\n const s = positions[si]\n const t = positions[ti]\n return (\n <line\n key={i}\n x1={s.x}\n y1={s.y}\n x2={t.x}\n y2={t.y}\n stroke=\"var(--gds-border, #374151)\"\n strokeWidth={1.5}\n strokeOpacity={0.5}\n />\n )\n })}\n {nodes.map((node, i) => {\n const pos = positions[i]\n const color = PALETTE[(node.group ?? i) % PALETTE.length]\n return (\n <g key={node.id}>\n <circle cx={pos.x} cy={pos.y} r={nodeRadius} fill={color} fillOpacity={0.8} />\n <text\n x={pos.x}\n y={pos.y + nodeRadius + 14}\n textAnchor=\"middle\"\n fill=\"var(--gds-fg-muted, #9ca3af)\"\n fontSize={10}\n >\n {node.label}\n </text>\n </g>\n )\n })}\n </svg>\n </div>\n )\n },\n)\n\nexport type { NetworkEdge, NetworkNode }\n","import { forwardRef, useMemo } from 'react'\nimport {\n Area,\n AreaChart,\n CartesianGrid,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from 'recharts'\n\nimport { cx } from '../utils/cx'\n\ntype OrderEntry = {\n price: number\n depth: number\n}\n\nexport type OrderBookChartProps = {\n bids: OrderEntry[]\n asks: OrderEntry[]\n height?: number\n bidColor?: string\n askColor?: string\n glass?: boolean\n className?: string\n}\n\nexport const OrderBookChart = forwardRef<HTMLDivElement, OrderBookChartProps>(\n function OrderBookChart(\n {\n bids,\n asks,\n height = 300,\n bidColor = 'var(--gds-success, #22c55e)',\n askColor = 'var(--gds-danger, #ef4444)',\n glass,\n className,\n ...props\n },\n ref,\n ) {\n const combined = useMemo(() => {\n const bidPoints = bids.map((b) => ({ price: b.price, bidDepth: b.depth, askDepth: undefined }))\n const askPoints = asks.map((a) => ({ price: a.price, bidDepth: undefined, askDepth: a.depth }))\n return [...bidPoints, ...askPoints].sort((a, b) => a.price - b.price)\n }, [bids, asks])\n\n return (\n <div\n ref={ref}\n className={cx(\n 'w-full gds-radius-popover border border-border',\n glass && 'backdrop-blur-md bg-white/5',\n className,\n )}\n data-component=\"order-book-chart\"\n {...props}\n >\n <ResponsiveContainer height={height} width=\"100%\">\n <AreaChart data={combined}>\n <CartesianGrid stroke=\"var(--gds-border, #e5e7eb)\" strokeDasharray=\"3 3\" />\n <XAxis\n dataKey=\"price\"\n stroke=\"var(--gds-fg-muted, #6b7280)\"\n tick={{ fontSize: 11 }}\n type=\"number\"\n domain={['dataMin', 'dataMax']}\n />\n <YAxis stroke=\"var(--gds-fg-muted, #6b7280)\" tick={{ fontSize: 11 }} />\n <Tooltip />\n <Area\n dataKey=\"bidDepth\"\n fill={bidColor}\n fillOpacity={0.3}\n stroke={bidColor}\n strokeWidth={2}\n type=\"stepAfter\"\n connectNulls={false}\n />\n <Area\n dataKey=\"askDepth\"\n fill={askColor}\n fillOpacity={0.3}\n stroke={askColor}\n strokeWidth={2}\n type=\"stepBefore\"\n connectNulls={false}\n />\n </AreaChart>\n </ResponsiveContainer>\n </div>\n )\n },\n)\n","import { forwardRef } from 'react'\nimport { Cell, Pie, PieChart as RPieChart, ResponsiveContainer, Tooltip } from 'recharts'\n\nimport { cx } from '../utils/cx'\n\ntype ChartData = Record<string, unknown>\n\nconst PALETTE = [\n 'var(--gds-palette-0, #6366f1)',\n 'var(--gds-palette-1, #22d3ee)',\n 'var(--gds-palette-2, #f59e0b)',\n 'var(--gds-palette-3, #10b981)',\n 'var(--gds-palette-4, #ef4444)',\n 'var(--gds-palette-5, #8b5cf6)',\n 'var(--gds-palette-6, #ec4899)',\n 'var(--gds-palette-7, #14b8a6)',\n 'var(--gds-palette-8, #f97316)',\n 'var(--gds-palette-9, #3b82f6)',\n]\n\nexport type PieChartProps = {\n data: ChartData[]\n dataKey: string\n nameKey?: string\n className?: string\n height?: number\n colors?: string[]\n innerRadius?: number\n glass?: boolean\n}\n\nexport const PieChart = forwardRef<HTMLDivElement, PieChartProps>(\n function PieChart(\n { data, dataKey, nameKey = 'name', className, height = 300, colors = PALETTE, innerRadius = 0, glass, ...props },\n ref,\n ) {\n return (\n <div\n className={cx('w-full', glass && 'gds-radius-popover backdrop-blur-md bg-white/5', className)}\n data-component=\"pie-chart\"\n ref={ref}\n {...props}\n >\n <ResponsiveContainer height={height} width=\"100%\">\n <RPieChart>\n <Tooltip />\n <Pie cx=\"50%\" cy=\"50%\" data={data} dataKey={dataKey} innerRadius={innerRadius} nameKey={nameKey}>\n {data.map((_, i) => (\n <Cell fill={colors[i % colors.length]} key={i} />\n ))}\n </Pie>\n </RPieChart>\n </ResponsiveContainer>\n </div>\n )\n },\n)\n","import { forwardRef } from 'react'\nimport {\n PolarAngleAxis,\n PolarGrid,\n PolarRadiusAxis,\n Radar,\n RadarChart as RRadarChart,\n ResponsiveContainer,\n Tooltip,\n} from 'recharts'\n\nimport { cx } from '../utils/cx'\n\ntype ChartData = Record<string, unknown>\n\nexport type RadarChartProps = {\n data: ChartData[]\n dataKey: string\n angleKey?: string\n className?: string\n height?: number\n color?: string\n glass?: boolean\n}\n\nexport const RadarChart = forwardRef<HTMLDivElement, RadarChartProps>(\n function RadarChart(\n { data, dataKey, angleKey = 'name', className, height = 300, color = 'var(--gds-accent)', glass, ...props },\n ref,\n ) {\n return (\n <div\n className={cx('w-full', glass && 'gds-radius-popover backdrop-blur-md bg-white/5', className)}\n data-component=\"radar-chart\"\n ref={ref}\n {...props}\n >\n <ResponsiveContainer height={height} width=\"100%\">\n <RRadarChart cx=\"50%\" cy=\"50%\" data={data} outerRadius=\"80%\">\n <PolarGrid stroke=\"var(--gds-border, #e5e7eb)\" />\n <PolarAngleAxis dataKey={angleKey} stroke=\"var(--gds-fg-muted, #6b7280)\" tick={{ fontSize: 11 }} />\n <PolarRadiusAxis stroke=\"var(--gds-fg-muted, #6b7280)\" tick={{ fontSize: 10 }} />\n <Tooltip />\n <Radar dataKey={dataKey} fill={color} fillOpacity={0.3} stroke={color} strokeWidth={2} />\n </RRadarChart>\n </ResponsiveContainer>\n </div>\n )\n },\n)\n","import { forwardRef } from 'react'\nimport {\n Legend,\n RadialBar,\n RadialBarChart as RRadialBarChart,\n ResponsiveContainer,\n Tooltip,\n} from 'recharts'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\nconst PALETTE = [\n 'var(--gds-palette-0, #6366f1)',\n 'var(--gds-palette-1, #22d3ee)',\n 'var(--gds-palette-2, #f59e0b)',\n 'var(--gds-palette-3, #10b981)',\n 'var(--gds-palette-4, #ef4444)',\n 'var(--gds-palette-5, #8b5cf6)',\n 'var(--gds-palette-6, #ec4899)',\n 'var(--gds-palette-7, #14b8a6)',\n 'var(--gds-palette-8, #f97316)',\n 'var(--gds-palette-9, #3b82f6)',\n]\n\ntype RadialBarDatum = {\n name: string\n value: number\n fill?: string\n}\n\nexport type RadialBarChartProps = {\n data: RadialBarDatum[]\n height?: number\n innerRadius?: string\n glass?: boolean\n className?: string\n}\n\nexport const RadialBarChart = forwardRef<HTMLDivElement, RadialBarChartProps>(\n function RadialBarChart(\n { data, height = 300, innerRadius = '20%', glass, className, ...props },\n ref,\n ) {\n // assign palette colors to items without explicit fill\n const coloredData = data.map((d, i) => ({\n ...d,\n fill: d.fill ?? PALETTE[i % PALETTE.length],\n }))\n\n return (\n <div\n className={cx(\n 'w-full gds-radius-popover border border-white/[0.06]',\n glassClass(glass),\n className,\n )}\n data-component=\"radial-bar-chart\"\n ref={ref}\n {...props}\n >\n <ResponsiveContainer height={height} width=\"100%\">\n <RRadialBarChart\n cx=\"50%\"\n cy=\"50%\"\n data={coloredData}\n innerRadius={innerRadius}\n outerRadius=\"90%\"\n >\n <RadialBar dataKey=\"value\" background={{ fill: 'rgba(255,255,255,0.05)' }} />\n <Tooltip />\n <Legend iconSize={8} />\n </RRadialBarChart>\n </ResponsiveContainer>\n </div>\n )\n },\n)\n","import { forwardRef } from 'react'\nimport { ResponsiveContainer, Sankey, Tooltip } from 'recharts'\n\nimport { cx } from '../utils/cx'\n\ntype SankeyNode = {\n name: string\n [key: string]: unknown\n}\n\ntype SankeyLink = {\n source: number\n target: number\n value: number\n [key: string]: unknown\n}\n\nexport type SankeyChartProps = {\n nodes: SankeyNode[]\n links: SankeyLink[]\n className?: string\n height?: number\n nodePadding?: number\n nodeWidth?: number\n glass?: boolean\n}\n\nexport const SankeyChart = forwardRef<HTMLDivElement, SankeyChartProps>(\n function SankeyChart(\n { nodes, links, className, height = 300, nodePadding = 50, nodeWidth = 10, glass, ...props },\n ref,\n ) {\n const data = { nodes, links }\n\n return (\n <div\n className={cx('w-full', glass && 'gds-radius-popover backdrop-blur-md bg-white/5', className)}\n data-component=\"sankey-chart\"\n ref={ref}\n {...props}\n >\n <ResponsiveContainer height={height} width=\"100%\">\n <Sankey data={data} nodePadding={nodePadding} nodeWidth={nodeWidth}>\n <Tooltip />\n </Sankey>\n </ResponsiveContainer>\n </div>\n )\n },\n)\n","import { forwardRef } from 'react'\nimport {\n CartesianGrid,\n ResponsiveContainer,\n Scatter,\n ScatterChart as RScatterChart,\n Tooltip,\n XAxis,\n YAxis,\n} from 'recharts'\n\nimport { cx } from '../utils/cx'\n\ntype ChartData = Record<string, unknown>\n\nexport type ScatterChartProps = {\n data: ChartData[]\n xKey: string\n yKey: string\n className?: string\n height?: number\n color?: string\n glass?: boolean\n}\n\nexport const ScatterChart = forwardRef<HTMLDivElement, ScatterChartProps>(\n function ScatterChart(\n { data, xKey, yKey, className, height = 300, color = 'var(--gds-accent)', glass, ...props },\n ref,\n ) {\n return (\n <div\n className={cx('w-full', glass && 'gds-radius-popover backdrop-blur-md bg-white/5', className)}\n data-component=\"scatter-chart\"\n ref={ref}\n {...props}\n >\n <ResponsiveContainer height={height} width=\"100%\">\n <RScatterChart>\n <CartesianGrid stroke=\"var(--gds-border, #e5e7eb)\" strokeDasharray=\"3 3\" />\n <XAxis dataKey={xKey} stroke=\"var(--gds-fg-muted, #6b7280)\" tick={{ fontSize: 11 }} type=\"number\" />\n <YAxis dataKey={yKey} stroke=\"var(--gds-fg-muted, #6b7280)\" tick={{ fontSize: 11 }} type=\"number\" />\n <Tooltip />\n <Scatter data={data} fill={color} />\n </RScatterChart>\n </ResponsiveContainer>\n </div>\n )\n },\n)\n","import { forwardRef } from 'react'\nimport { Line, LineChart, ResponsiveContainer } from 'recharts'\n\nimport { cx } from '../utils/cx'\n\ntype ChartData = Record<string, unknown>\n\nexport type SparklineProps = {\n data: ChartData[]\n dataKey: string\n className?: string\n height?: number\n width?: number | `${number}%`\n color?: string\n glass?: boolean\n}\n\nexport const Sparkline = forwardRef<HTMLDivElement, SparklineProps>(\n function Sparkline(\n { data, dataKey, className, height = 32, width = 120, color = 'var(--gds-accent)', glass, ...props },\n ref,\n ) {\n return (\n <div\n className={cx('inline-block', glass && 'rounded backdrop-blur-md bg-white/5', className)}\n data-component=\"sparkline\"\n ref={ref}\n {...props}\n >\n <ResponsiveContainer height={height} width={width}>\n <LineChart data={data}>\n <Line dataKey={dataKey} dot={false} stroke={color} strokeWidth={1.5} type=\"monotone\" />\n </LineChart>\n </ResponsiveContainer>\n </div>\n )\n },\n)\n","// stream-chart — stacked area chart with organic curves\nimport { forwardRef } from 'react'\nimport { Area, AreaChart, ResponsiveContainer, Tooltip, XAxis } from 'recharts'\n\nimport { cx } from '../utils/cx'\n\nconst PALETTE = [\n 'var(--gds-palette-0, #6366f1)',\n 'var(--gds-palette-1, #8b5cf6)',\n 'var(--gds-palette-2, #06b6d4)',\n 'var(--gds-palette-3, #10b981)',\n 'var(--gds-palette-4, #f59e0b)',\n 'var(--gds-palette-5, #ef4444)',\n 'var(--gds-palette-6, #ec4899)',\n 'var(--gds-palette-7, #14b8a6)',\n 'var(--gds-palette-8, #f97316)',\n 'var(--gds-palette-9, #a855f7)',\n]\n\nexport type StreamChartProps = {\n data: Record<string, unknown>[]\n keys: string[]\n xKey?: string\n height?: number\n glass?: boolean\n className?: string\n}\n\nexport const StreamChart = forwardRef<HTMLDivElement, StreamChartProps>(\n function StreamChart({ data, keys, xKey = 'name', height = 300, glass, className, ...props }, ref) {\n return (\n <div\n ref={ref}\n className={cx(\n 'w-full gds-radius-popover border border-border',\n glass && 'backdrop-blur-md bg-white/5',\n className,\n )}\n data-component=\"stream-chart\"\n {...props}\n >\n <ResponsiveContainer height={height} width=\"100%\">\n <AreaChart data={data}>\n <XAxis dataKey={xKey} stroke=\"var(--gds-fg-muted, #6b7280)\" tick={{ fontSize: 11 }} />\n <Tooltip />\n {keys.map((key, i) => (\n <Area\n key={key}\n dataKey={key}\n fill={PALETTE[i % PALETTE.length]}\n fillOpacity={0.6}\n stackId=\"1\"\n stroke={PALETTE[i % PALETTE.length]}\n strokeWidth={1.5}\n type=\"monotone\"\n />\n ))}\n </AreaChart>\n </ResponsiveContainer>\n </div>\n )\n },\n)\n","// sunburst-math — pure math helpers for sunburst chart arc computation\n\nimport type { SunburstNode } from './sunburst-chart'\n\nexport type ArcSegment = {\n depth: number\n index: number\n startAngle: number\n endAngle: number\n}\n\n// compute total value for a node (sum of children or own value)\nexport function nodeTotal(node: SunburstNode): number {\n if (node.children !== undefined && node.children.length > 0) {\n return node.children.reduce((sum, c) => sum + nodeTotal(c), 0)\n }\n return node.value ?? 0\n}\n\n// describe an arc path\nexport function arcPath(\n cx: number,\n cy: number,\n innerR: number,\n outerR: number,\n startAngle: number,\n endAngle: number,\n): string {\n // clamp to avoid full-circle issues\n const sweep = Math.min(endAngle - startAngle, 2 * Math.PI - 0.001)\n const largeArc = sweep > Math.PI ? 1 : 0\n\n const x1 = cx + outerR * Math.cos(startAngle)\n const y1 = cy + outerR * Math.sin(startAngle)\n const x2 = cx + outerR * Math.cos(startAngle + sweep)\n const y2 = cy + outerR * Math.sin(startAngle + sweep)\n const x3 = cx + innerR * Math.cos(startAngle + sweep)\n const y3 = cy + innerR * Math.sin(startAngle + sweep)\n const x4 = cx + innerR * Math.cos(startAngle)\n const y4 = cy + innerR * Math.sin(startAngle)\n\n return [\n `M ${x1} ${y1}`,\n `A ${outerR} ${outerR} 0 ${largeArc} 1 ${x2} ${y2}`,\n `L ${x3} ${y3}`,\n `A ${innerR} ${innerR} 0 ${largeArc} 0 ${x4} ${y4}`,\n 'Z',\n ].join(' ')\n}\n\n// collect all arcs recursively\nexport function collectArcs(\n node: SunburstNode,\n depth: number,\n startAngle: number,\n endAngle: number,\n parentIndex: number,\n): ArcSegment[] {\n if (node.children === undefined || node.children.length === 0) return []\n\n const arcs: ArcSegment[] = []\n const total = nodeTotal(node)\n if (total === 0) return []\n\n let angle = startAngle\n for (let i = 0; i < node.children.length; i++) {\n const child = node.children[i]\n const childTotal = nodeTotal(child)\n const sweep = (childTotal / total) * (endAngle - startAngle)\n const childEnd = angle + sweep\n\n arcs.push({ depth, index: parentIndex * 10 + i, startAngle: angle, endAngle: childEnd })\n arcs.push(...collectArcs(child, depth + 1, angle, childEnd, parentIndex * 10 + i))\n angle = childEnd\n }\n\n return arcs\n}\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\nimport { arcPath, collectArcs } from './sunburst-math'\n\nconst PALETTE = [\n 'var(--gds-palette-0, #6366f1)',\n 'var(--gds-palette-1, #22d3ee)',\n 'var(--gds-palette-2, #f59e0b)',\n 'var(--gds-palette-3, #10b981)',\n 'var(--gds-palette-4, #ef4444)',\n 'var(--gds-palette-5, #8b5cf6)',\n 'var(--gds-palette-6, #ec4899)',\n 'var(--gds-palette-7, #14b8a6)',\n 'var(--gds-palette-8, #f97316)',\n 'var(--gds-palette-9, #3b82f6)',\n]\n\nexport type SunburstNode = {\n name: string\n value?: number\n children?: SunburstNode[]\n}\n\nexport type SunburstChartProps = {\n data: SunburstNode\n width?: number\n height?: number\n glass?: boolean\n className?: string\n}\n\nexport const SunburstChart = forwardRef<HTMLDivElement, SunburstChartProps>(\n function SunburstChart({ data, width = 300, height = 300, glass, className, ...props }, ref) {\n const cxVal = width / 2\n const cyVal = height / 2\n const maxRadius = Math.min(cxVal, cyVal) - 10\n const arcs = collectArcs(data, 0, -Math.PI / 2, 1.5 * Math.PI, 0)\n\n // find max depth for ring sizing\n const maxDepth = arcs.reduce((m, a) => Math.max(m, a.depth), 0)\n const centerR = maxRadius * 0.25\n const ringWidth = (maxRadius - centerR) / (maxDepth + 1)\n\n return (\n <div\n className={cx(\n 'inline-flex gds-radius-popover border border-white/[0.06]',\n glassClass(glass),\n className,\n )}\n data-component=\"sunburst-chart\"\n ref={ref}\n {...props}\n >\n <svg height={height} width={width} viewBox={`0 0 ${width} ${height}`}>\n {arcs.map((arc, i) => {\n const innerR = centerR + arc.depth * ringWidth\n const outerR = innerR + ringWidth - 1\n const color = PALETTE[(arc.index + arc.depth) % PALETTE.length]\n return (\n <path\n key={i}\n d={arcPath(cxVal, cyVal, innerR, outerR, arc.startAngle, arc.endAngle)}\n fill={color}\n opacity={1 - arc.depth * 0.15}\n stroke=\"var(--gds-bg, #000)\"\n strokeWidth={1}\n data-arc\n />\n )\n })}\n <text\n x={cxVal}\n y={cyVal}\n textAnchor=\"middle\"\n dominantBaseline=\"central\"\n fill=\"var(--gds-fg, #fff)\"\n fontSize={12}\n fontWeight={600}\n data-center-label\n >\n {data.name}\n </text>\n </svg>\n </div>\n )\n },\n)\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\nconst PALETTE = [\n 'var(--gds-palette-0, #6366f1)',\n 'var(--gds-palette-1, #22d3ee)',\n 'var(--gds-palette-2, #f59e0b)',\n 'var(--gds-palette-3, #10b981)',\n 'var(--gds-palette-4, #ef4444)',\n 'var(--gds-palette-5, #8b5cf6)',\n]\n\nexport type TimelineEvent = {\n date: string | Date\n label: string\n color?: string\n}\n\nexport type TimelineChartProps = {\n events: TimelineEvent[]\n width?: number\n height?: number\n glass?: boolean\n className?: string\n}\n\nexport const TimelineChart = forwardRef<HTMLDivElement, TimelineChartProps>(\n function TimelineChart({ events, width = 600, height = 120, glass, className, ...props }, ref) {\n if (events.length === 0) {\n return (\n <div\n className={cx('inline-flex gds-radius-popover border border-white/[0.06]', glassClass(glass), className)}\n data-component=\"timeline-chart\"\n ref={ref}\n {...props}\n >\n <svg height={height} width={width} />\n </div>\n )\n }\n\n const padX = 40\n const lineY = height / 2\n const timestamps = events.map((e) => new Date(e.date).getTime())\n const minT = Math.min(...timestamps)\n const maxT = Math.max(...timestamps)\n const range = maxT - minT\n\n function xPos(t: number): number {\n if (range === 0) return width / 2\n return padX + ((t - minT) / range) * (width - padX * 2)\n }\n\n return (\n <div\n className={cx('inline-flex gds-radius-popover border border-white/[0.06]', glassClass(glass), className)}\n data-component=\"timeline-chart\"\n ref={ref}\n {...props}\n >\n <svg height={height} width={width} viewBox={`0 0 ${width} ${height}`}>\n {/* axis line */}\n <line\n x1={padX}\n y1={lineY}\n x2={width - padX}\n y2={lineY}\n stroke=\"var(--gds-border, #e5e7eb)\"\n strokeWidth={2}\n />\n {events.map((event, i) => {\n const t = timestamps[i]\n const x = xPos(t)\n const above = i % 2 === 0\n const labelY = above ? lineY - 24 : lineY + 32\n const dotColor = event.color ?? PALETTE[i % PALETTE.length]\n const dateStr = new Date(event.date).toLocaleDateString()\n\n return (\n <g key={i} data-event>\n <circle cx={x} cy={lineY} r={5} fill={dotColor} />\n <line\n x1={x}\n y1={lineY + (above ? -6 : 6)}\n x2={x}\n y2={labelY + (above ? 10 : -10)}\n stroke=\"var(--gds-border, #e5e7eb)\"\n strokeWidth={1}\n />\n <text\n x={x}\n y={labelY}\n textAnchor=\"middle\"\n fill=\"var(--gds-fg, #fff)\"\n fontSize={10}\n fontWeight={500}\n data-label={above ? 'above' : 'below'}\n >\n {event.label}\n </text>\n <text\n x={x}\n y={labelY + (above ? -10 : 12)}\n textAnchor=\"middle\"\n fill=\"var(--gds-fg-muted, #6b7280)\"\n fontSize={8}\n >\n {dateStr}\n </text>\n </g>\n )\n })}\n </svg>\n </div>\n )\n },\n)\n","import { forwardRef } from 'react'\nimport { ResponsiveContainer, Treemap } from 'recharts'\n\nimport { cx } from '../utils/cx'\n\ntype TreemapNode = {\n name: string\n value?: number\n children?: TreemapNode[]\n [key: string]: unknown\n}\n\nexport type TreemapChartProps = {\n data: TreemapNode[]\n dataKey?: string\n className?: string\n height?: number\n color?: string\n glass?: boolean\n}\n\nexport const TreemapChart = forwardRef<HTMLDivElement, TreemapChartProps>(\n function TreemapChart(\n { data, dataKey = 'value', className, height = 300, color = 'var(--gds-accent)', glass, ...props },\n ref,\n ) {\n return (\n <div\n className={cx('w-full', glass && 'gds-radius-popover backdrop-blur-md bg-white/5', className)}\n data-component=\"treemap-chart\"\n ref={ref}\n {...props}\n >\n <ResponsiveContainer height={height} width=\"100%\">\n <Treemap data={data} dataKey={dataKey} fill={color} stroke=\"var(--gds-bg, #fff)\" />\n </ResponsiveContainer>\n </div>\n )\n },\n)\n","// violin-plot — distribution shape visualization using pure SVG\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nconst PALETTE = [\n 'var(--gds-palette-0, #6366f1)',\n 'var(--gds-palette-1, #8b5cf6)',\n 'var(--gds-palette-2, #06b6d4)',\n 'var(--gds-palette-3, #10b981)',\n 'var(--gds-palette-4, #f59e0b)',\n]\n\nexport type ViolinPlotProps = {\n data: { label: string; values: number[] }[]\n width?: number\n height?: number\n glass?: boolean\n className?: string\n}\n\nfunction computeDensity(values: number[], bins: number, min: number, max: number): number[] {\n const range = max - min\n if (range === 0) return Array(bins).fill(1 / bins) as number[]\n\n const density = Array(bins).fill(0) as number[]\n const binWidth = range / bins\n\n for (const v of values) {\n const idx = Math.min(Math.floor((v - min) / binWidth), bins - 1)\n density[idx]++\n }\n\n const maxDensity = Math.max(...density)\n if (maxDensity === 0) return density\n return density.map((d) => d / maxDensity)\n}\n\nfunction median(values: number[]): number {\n const sorted = [...values].sort((a, b) => a - b)\n const mid = Math.floor(sorted.length / 2)\n if (sorted.length % 2 !== 0) return sorted[mid]\n return (sorted[mid - 1] + sorted[mid]) / 2\n}\n\nexport const ViolinPlot = forwardRef<HTMLDivElement, ViolinPlotProps>(\n function ViolinPlot({ data, width = 400, height = 300, glass, className }, ref) {\n const padding = { top: 20, right: 20, bottom: 40, left: 50 }\n const chartW = width - padding.left - padding.right\n const chartH = height - padding.top - padding.bottom\n const bins = 20\n\n const allValues = data.flatMap((g) => g.values)\n const globalMin = allValues.length > 0 ? Math.min(...allValues) : 0\n const globalMax = allValues.length > 0 ? Math.max(...allValues) : 1\n const range = globalMax - globalMin\n const yMin = globalMin - range * 0.1\n const yMax = globalMax + range * 0.1\n const yScale = (v: number) => padding.top + chartH * (1 - (v - yMin) / (yMax - yMin))\n\n const groupW = data.length > 0 ? chartW / data.length : chartW\n const violinMaxW = Math.min(groupW * 0.7, 80) / 2\n\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-radius-popover border border-border',\n glass && 'backdrop-blur-md bg-white/5',\n className,\n )}\n data-component=\"violin-plot\"\n >\n <svg width={width} height={height} viewBox={`0 0 ${width} ${height}`}>\n {/* y-axis */}\n <line\n x1={padding.left}\n y1={padding.top}\n x2={padding.left}\n y2={padding.top + chartH}\n stroke=\"var(--gds-border, #374151)\"\n strokeWidth={1}\n />\n {/* x-axis */}\n <line\n x1={padding.left}\n y1={padding.top + chartH}\n x2={padding.left + chartW}\n y2={padding.top + chartH}\n stroke=\"var(--gds-border, #374151)\"\n strokeWidth={1}\n />\n\n {data.map((group, i) => {\n if (group.values.length === 0) return null\n const centerX = padding.left + groupW * (i + 0.5)\n const color = PALETTE[i % PALETTE.length]\n const density = computeDensity(group.values, bins, globalMin, globalMax)\n const binHeight = (yMax - yMin) / bins\n const med = median(group.values)\n\n // build violin path (right side then left side mirrored)\n const rightPoints = density.map((d, bi) => {\n const y = yScale(yMin + binHeight * (bi + 0.5))\n const x = centerX + d * violinMaxW\n return `${x},${y}`\n })\n const leftPoints = [...density].reverse().map((d, bi) => {\n const y = yScale(yMin + binHeight * (bins - 1 - bi + 0.5))\n const x = centerX - d * violinMaxW\n return `${x},${y}`\n })\n\n const pathD = `M ${rightPoints[0]} ${rightPoints.map((p) => `L ${p}`).join(' ')} ${leftPoints.map((p) => `L ${p}`).join(' ')} Z`\n\n return (\n <g key={group.label} data-violin={group.label}>\n <path\n d={pathD}\n fill={color}\n fillOpacity={0.25}\n stroke={color}\n strokeWidth={1.5}\n />\n {/* median dot */}\n <circle\n cx={centerX}\n cy={yScale(med)}\n r={3}\n fill={color}\n />\n {/* label */}\n <text\n x={centerX}\n y={padding.top + chartH + 20}\n textAnchor=\"middle\"\n fill=\"var(--gds-fg-muted, #9ca3af)\"\n fontSize={10}\n >\n {group.label}\n </text>\n </g>\n )\n })}\n </svg>\n </div>\n )\n },\n)\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\nconst PALETTE = [\n 'var(--gds-palette-0, #6366f1)',\n 'var(--gds-palette-1, #22d3ee)',\n 'var(--gds-palette-2, #f59e0b)',\n 'var(--gds-palette-3, #10b981)',\n 'var(--gds-palette-4, #ef4444)',\n 'var(--gds-palette-5, #8b5cf6)',\n 'var(--gds-palette-6, #ec4899)',\n 'var(--gds-palette-7, #14b8a6)',\n 'var(--gds-palette-8, #f97316)',\n 'var(--gds-palette-9, #3b82f6)',\n]\n\ntype WaffleSegment = {\n label: string\n value: number\n color?: string\n}\n\nexport type WaffleChartProps = {\n data: WaffleSegment[]\n size?: number\n glass?: boolean\n className?: string\n}\n\nexport const WaffleChart = forwardRef<HTMLDivElement, WaffleChartProps>(\n function WaffleChart({ data, size = 200, glass, className, ...props }, ref) {\n // build cell color map (100 cells)\n const cells: string[] = []\n let cellIndex = 0\n for (let i = 0; i < data.length; i++) {\n const segment = data[i]\n const count = Math.round(segment.value)\n const color = segment.color ?? PALETTE[i % PALETTE.length]\n for (let j = 0; j < count && cellIndex < 100; j++) {\n cells[cellIndex] = color\n cellIndex++\n }\n }\n // fill remaining cells with transparent\n while (cellIndex < 100) {\n cells[cellIndex] = 'transparent'\n cellIndex++\n }\n\n const cellSize = size / 10\n const gap = Math.max(1, cellSize * 0.1)\n\n return (\n <div\n className={cx('inline-flex flex-col gds-radius-popover border border-white/[0.06]', glassClass(glass), className)}\n data-component=\"waffle-chart\"\n ref={ref}\n {...props}\n >\n <svg height={size} width={size} viewBox={`0 0 ${size} ${size}`}>\n {cells.map((color, i) => {\n const row = Math.floor(i / 10)\n const col = i % 10\n return (\n <rect\n key={i}\n x={col * cellSize + gap}\n y={row * cellSize + gap}\n width={cellSize - gap * 2}\n height={cellSize - gap * 2}\n rx={2}\n fill={color}\n data-cell={i}\n />\n )\n })}\n </svg>\n <div className=\"flex flex-wrap gap-3 px-2 pb-2 pt-1\">\n {data.map((segment, i) => (\n <div key={segment.label} className=\"flex items-center gap-1.5 text-[10px] text-fg-muted\">\n <span\n className=\"inline-block h-2 w-2 rounded-full\"\n style={{ backgroundColor: segment.color ?? PALETTE[i % PALETTE.length] }}\n />\n <span>{segment.label}</span>\n <span className=\"text-fg-muted/50\">{segment.value}%</span>\n </div>\n ))}\n </div>\n </div>\n )\n },\n)\n","import { forwardRef, useMemo } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type WaveformDisplayProps = {\n data: number[]\n width?: number\n height?: number\n progress?: number\n color?: string\n playedColor?: string\n glass?: boolean\n className?: string\n}\n\nexport const WaveformDisplay = forwardRef<HTMLDivElement, WaveformDisplayProps>(\n function WaveformDisplay(\n {\n data,\n width = 400,\n height = 100,\n progress = 0,\n color = 'var(--gds-accent, #6366f1)',\n playedColor,\n glass,\n className,\n ...props\n },\n ref,\n ) {\n const resolvedPlayedColor = playedColor ?? color\n const progressIndex = Math.floor(progress * data.length)\n const centerY = height / 2\n\n const bars = useMemo(() => {\n if (data.length === 0) return []\n const barWidth = width / data.length\n return data.map((amp, i) => {\n const barHeight = Math.max(amp * centerY, 1)\n return {\n x: i * barWidth,\n y: centerY - barHeight,\n w: Math.max(barWidth - 1, 1),\n h: barHeight * 2,\n played: i < progressIndex,\n }\n })\n }, [data, width, centerY, progressIndex])\n\n return (\n <div\n ref={ref}\n className={cx(\n 'inline-block gds-radius-popover border border-border',\n glass && 'backdrop-blur-md bg-white/5',\n className,\n )}\n data-component=\"waveform-display\"\n {...props}\n >\n <svg height={height} width={width} viewBox={`0 0 ${width} ${height}`}>\n {bars.map((bar, i) => (\n <rect\n key={i}\n x={bar.x}\n y={bar.y}\n width={bar.w}\n height={bar.h}\n fill={bar.played ? resolvedPlayedColor : color}\n opacity={bar.played ? 1 : 0.3}\n rx={1}\n />\n ))}\n </svg>\n </div>\n )\n },\n)\n","import { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nconst PALETTE = Array.from({ length: 10 }, (_, i) => `var(--gds-palette-${i})`)\n\nexport type WordCloudProps = {\n words: { text: string; weight: number }[]\n maxFontSize?: number\n minFontSize?: number\n glass?: boolean\n height?: number\n className?: string\n}\n\nexport const WordCloud = forwardRef<HTMLDivElement, WordCloudProps>(\n function WordCloud(\n { words, maxFontSize = 48, minFontSize = 12, glass, height = 300, className, ...props },\n ref,\n ) {\n const weights = words.map((w) => w.weight)\n const minW = Math.min(...weights)\n const maxW = Math.max(...weights)\n const range = maxW - minW\n\n return (\n <div\n className={cx(\n 'flex flex-wrap items-center justify-center gap-2 overflow-hidden gds-radius-popover border border-[var(--gds-border,#e5e7eb)]',\n glass && 'backdrop-blur-md bg-white/5',\n className,\n )}\n data-component=\"word-cloud\"\n ref={ref}\n style={{ height }}\n {...props}\n >\n {words.map((w, i) => {\n const t = range === 0 ? 0.5 : (w.weight - minW) / range\n const fontSize = Math.round(minFontSize + t * (maxFontSize - minFontSize))\n return (\n <span\n className=\"inline-block select-none px-1\"\n key={`${w.text}-${i}`}\n style={{ fontSize, color: PALETTE[i % PALETTE.length] }}\n >\n {w.text}\n </span>\n )\n })}\n </div>\n )\n },\n)\n","// 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-white'\n : variant === 'gradient'\n ? 'bg-gradient-to-r from-accent to-success text-white'\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 { 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 rounded bg-accent px-4 py-2 text-sm font-medium text-white hover:bg-accent/90 transition-colors select-none\">\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-white 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-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-white 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"],"x_google_ignoreList":[16,17,19],"mappings":"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"}
|