@goliapkg/gds 1.0.10 → 1.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/README.md +10 -6
  2. package/dist/{avatar-By0U5Vts.js → avatar-l3SaMCmU.js} +10 -10
  3. package/dist/avatar-l3SaMCmU.js.map +1 -0
  4. package/dist/index.js +25 -25
  5. package/dist/l2-primitives/divider.d.ts +11 -2
  6. package/dist/l2-primitives/divider.d.ts.map +1 -1
  7. package/dist/l2-primitives/index.d.ts +1 -1
  8. package/dist/l2-primitives/index.d.ts.map +1 -1
  9. package/dist/l2-primitives/index.js +10 -10
  10. package/dist/l2-primitives/input.d.ts +6 -0
  11. package/dist/l2-primitives/input.d.ts.map +1 -1
  12. package/dist/l2-primitives/number-input.d.ts +4 -0
  13. package/dist/l2-primitives/number-input.d.ts.map +1 -1
  14. package/dist/{l2-primitives-BIiL8hFH.js → l2-primitives-Le0006ck.js} +105 -81
  15. package/dist/l2-primitives-Le0006ck.js.map +1 -0
  16. package/dist/l3-atoms/avatar-badge.d.ts +1 -0
  17. package/dist/l3-atoms/avatar-badge.d.ts.map +1 -1
  18. package/dist/l3-atoms/avatar.d.ts +2 -0
  19. package/dist/l3-atoms/avatar.d.ts.map +1 -1
  20. package/dist/l3-atoms/checkbox.d.ts +7 -0
  21. package/dist/l3-atoms/checkbox.d.ts.map +1 -1
  22. package/dist/l3-atoms/index.d.ts +4 -4
  23. package/dist/l3-atoms/index.d.ts.map +1 -1
  24. package/dist/l3-atoms/index.js +6 -6
  25. package/dist/l3-atoms/status-badge.d.ts +8 -0
  26. package/dist/l3-atoms/status-badge.d.ts.map +1 -1
  27. package/dist/l3-atoms/status-dot.d.ts +4 -0
  28. package/dist/l3-atoms/status-dot.d.ts.map +1 -1
  29. package/dist/l3-atoms/toggle-group.d.ts +16 -2
  30. package/dist/l3-atoms/toggle-group.d.ts.map +1 -1
  31. package/dist/{l3-atoms-CsN9IA9J.js → l3-atoms-BxDg3rXt.js} +196 -189
  32. package/dist/{l3-atoms-CsN9IA9J.js.map → l3-atoms-BxDg3rXt.js.map} +1 -1
  33. package/dist/l4-molecules/alert.d.ts +7 -1
  34. package/dist/l4-molecules/alert.d.ts.map +1 -1
  35. package/dist/l4-molecules/dialog.d.ts +8 -2
  36. package/dist/l4-molecules/dialog.d.ts.map +1 -1
  37. package/dist/l4-molecules/index.d.ts +3 -3
  38. package/dist/l4-molecules/index.d.ts.map +1 -1
  39. package/dist/l4-molecules/index.js +3 -3
  40. package/dist/l4-molecules/tabs.d.ts +1 -2
  41. package/dist/l4-molecules/tabs.d.ts.map +1 -1
  42. package/dist/{l4-molecules-DHsPjYhl.js → l4-molecules-DftsX-gO.js} +212 -205
  43. package/dist/l4-molecules-DftsX-gO.js.map +1 -0
  44. package/dist/l5-organisms/data-table/data-table-body.d.ts +31 -0
  45. package/dist/l5-organisms/data-table/data-table-body.d.ts.map +1 -0
  46. package/dist/l5-organisms/data-table/data-table-head.d.ts +22 -0
  47. package/dist/l5-organisms/data-table/data-table-head.d.ts.map +1 -0
  48. package/dist/l5-organisms/data-table/data-table-pagination.d.ts +13 -0
  49. package/dist/l5-organisms/data-table/data-table-pagination.d.ts.map +1 -0
  50. package/dist/l5-organisms/data-table/data-table-toolbar.d.ts +19 -0
  51. package/dist/l5-organisms/data-table/data-table-toolbar.d.ts.map +1 -0
  52. package/dist/l5-organisms/data-table/data-table-types.d.ts +88 -0
  53. package/dist/l5-organisms/data-table/data-table-types.d.ts.map +1 -0
  54. package/dist/l5-organisms/data-table/data-table-utils.d.ts +13 -0
  55. package/dist/l5-organisms/data-table/data-table-utils.d.ts.map +1 -0
  56. package/dist/l5-organisms/data-table/data-table.d.ts +6 -0
  57. package/dist/l5-organisms/data-table/data-table.d.ts.map +1 -0
  58. package/dist/l5-organisms/data-table/index.d.ts +4 -0
  59. package/dist/l5-organisms/data-table/index.d.ts.map +1 -0
  60. package/dist/l5-organisms/gantt-chart/gantt-chart-types.d.ts +52 -0
  61. package/dist/l5-organisms/gantt-chart/gantt-chart-types.d.ts.map +1 -0
  62. package/dist/l5-organisms/gantt-chart/gantt-chart-utils.d.ts +11 -0
  63. package/dist/l5-organisms/gantt-chart/gantt-chart-utils.d.ts.map +1 -0
  64. package/dist/l5-organisms/gantt-chart/gantt-chart.d.ts +3 -0
  65. package/dist/l5-organisms/gantt-chart/gantt-chart.d.ts.map +1 -0
  66. package/dist/l5-organisms/gantt-chart/index.d.ts +3 -0
  67. package/dist/l5-organisms/gantt-chart/index.d.ts.map +1 -0
  68. package/dist/l5-organisms/index.d.ts +4 -2
  69. package/dist/l5-organisms/index.d.ts.map +1 -1
  70. package/dist/l5-organisms/index.js +2 -2
  71. package/dist/l5-organisms/table.d.ts +12 -0
  72. package/dist/l5-organisms/table.d.ts.map +1 -1
  73. package/dist/{l5-organisms-z8mU4eoy.js → l5-organisms-Di1Bm_R6.js} +1352 -292
  74. package/dist/l5-organisms-Di1Bm_R6.js.map +1 -0
  75. package/dist/l6-charts/annotated-chart.d.ts +18 -0
  76. package/dist/l6-charts/annotated-chart.d.ts.map +1 -0
  77. package/dist/l6-charts/bullet-chart.d.ts +11 -0
  78. package/dist/l6-charts/bullet-chart.d.ts.map +1 -0
  79. package/dist/l6-charts/donut-gauge.d.ts +14 -0
  80. package/dist/l6-charts/donut-gauge.d.ts.map +1 -0
  81. package/dist/l6-charts/flame-chart.d.ts +13 -0
  82. package/dist/l6-charts/flame-chart.d.ts.map +1 -0
  83. package/dist/l6-charts/index.d.ts +12 -0
  84. package/dist/l6-charts/index.d.ts.map +1 -1
  85. package/dist/l6-charts/index.js +2 -2
  86. package/dist/l6-charts/realtime-chart.d.ts +13 -0
  87. package/dist/l6-charts/realtime-chart.d.ts.map +1 -0
  88. package/dist/l6-charts/waterfall-chart.d.ts +12 -0
  89. package/dist/l6-charts/waterfall-chart.d.ts.map +1 -0
  90. package/dist/l6-charts-Bn9RQLbe.js +2145 -0
  91. package/dist/l6-charts-Bn9RQLbe.js.map +1 -0
  92. package/dist/l7-patterns/index.js +1 -1
  93. package/dist/{l7-patterns-E9ls7Nw6.js → l7-patterns-BCpw0-CS.js} +4 -4
  94. package/dist/{l7-patterns-E9ls7Nw6.js.map → l7-patterns-BCpw0-CS.js.map} +1 -1
  95. package/dist/{resize-handle-CktEYqwi.js → resize-handle-ilSc7QRM.js} +6 -3
  96. package/dist/{resize-handle-CktEYqwi.js.map → resize-handle-ilSc7QRM.js.map} +1 -1
  97. package/dist/{spinner-D8Ti-TFe.js → spinner-N7UNjdsQ.js} +66 -23
  98. package/dist/spinner-N7UNjdsQ.js.map +1 -0
  99. package/package.json +1 -1
  100. package/dist/avatar-By0U5Vts.js.map +0 -1
  101. package/dist/l2-primitives-BIiL8hFH.js.map +0 -1
  102. package/dist/l4-molecules-DHsPjYhl.js.map +0 -1
  103. package/dist/l5-organisms/data-table.d.ts +0 -24
  104. package/dist/l5-organisms/data-table.d.ts.map +0 -1
  105. package/dist/l5-organisms-z8mU4eoy.js.map +0 -1
  106. package/dist/l6-charts-DYnr5B9X.js +0 -1743
  107. package/dist/l6-charts-DYnr5B9X.js.map +0 -1
  108. package/dist/spinner-D8Ti-TFe.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"l4-molecules-DHsPjYhl.js","names":[],"sources":["../src/l4-molecules/action-card.tsx","../src/l4-molecules/action-menu.tsx","../src/l4-molecules/alert.tsx","../src/l4-molecules/banner.tsx","../src/l4-molecules/before-after.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/code-snippet.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/copy-to-clipboard.tsx","../src/l4-molecules/currency-display.tsx","../src/l4-molecules/currency-input.tsx","../src/l4-molecules/data-card.tsx","../src/l4-molecules/date-display.tsx","../src/l4-molecules/date-range-input.tsx","../src/l4-molecules/description.tsx","../src/l4-molecules/dock.tsx","../src/l4-molecules/download-button.tsx","../src/l4-molecules/drawer.tsx","../src/l4-molecules/drop-zone.tsx","../src/l4-molecules/dropdown.tsx","../src/l4-molecules/editable.tsx","../src/l4-molecules/emoji-picker.tsx","../src/l4-molecules/empty-placeholder.tsx","../src/l4-molecules/empty-search.tsx","../src/l4-molecules/environment-badge.tsx","../src/l4-molecules/field-group.tsx","../src/l4-molecules/field-set.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/glass-button.tsx","../src/l4-molecules/glass-card.tsx","../src/l4-molecules/hover-card.tsx","../src/l4-molecules/info-row.tsx","../src/l4-molecules/input-group.tsx","../src/l4-molecules/input-with-button.tsx","../src/l4-molecules/key-value-list.tsx","../src/l4-molecules/kv-table.tsx","../src/l4-molecules/link-preview.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-bell.tsx","../src/l4-molecules/notification-dot.tsx","../src/l4-molecules/overflow-menu.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/pin-input.tsx","../src/l4-molecules/popover.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-header.tsx","../src/l4-molecules/split-button.tsx","../src/l4-molecules/stacked-progress.tsx","../src/l4-molecules/stat-comparison.tsx","../src/l4-molecules/status-bar-component.tsx","../src/l4-molecules/tabs.tsx","../src/l4-molecules/tab-group.tsx","../src/l4-molecules/tag-input.tsx","../src/l4-molecules/time-picker-grid.tsx","../src/l4-molecules/time-picker.tsx","../src/l4-molecules/timeline-item.tsx","../src/l4-molecules/toggle-field.tsx","../src/l4-molecules/toolbar-generic.tsx","../src/l4-molecules/toolbar-group.tsx","../src/l4-molecules/user-card.tsx","../src/l4-molecules/user-info.tsx","../src/l4-molecules/user-menu.tsx","../src/l4-molecules/version-badge.tsx","../src/l4-molecules/watermark.tsx","../src/l4-molecules/wizard.tsx"],"sourcesContent":["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","// banner — full-width contextual feedback strip with variant colors and optional dismiss\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 BannerVariant = 'danger' | 'info' | 'success' | 'warning'\n\nconst variantStyles: Record<BannerVariant, string> = {\n danger: 'bg-danger/10 text-danger',\n info: 'bg-accent/10 text-accent',\n success: 'bg-success/10 text-success',\n warning: 'bg-warning/10 text-warning',\n}\n\nconst variantIcons: Record<BannerVariant, ReactNode> = {\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 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}\n\nexport type BannerProps = {\n message: ReactNode\n variant?: BannerVariant\n dismissible?: boolean\n onDismiss?: () => void\n glass?: boolean\n className?: string\n}\n\nexport const Banner = forwardRef<HTMLDivElement, BannerProps>(\n function Banner({ message, variant = 'info', dismissible = false, onDismiss, glass, className }, ref) {\n return (\n <div\n ref={ref}\n className={cx(\n 'flex w-full items-center gds-gap gds-pad-x gds-pad-y gds-text-body',\n variantStyles[variant],\n glass === true && glassClass(glass),\n className,\n )}\n data-component=\"banner\"\n data-variant={variant}\n role=\"status\"\n >\n <span className=\"shrink-0\">{variantIcons[variant]}</span>\n <span className=\"flex-1\">{message}</span>\n {dismissible && onDismiss !== undefined && (\n <button\n type=\"button\"\n onClick={onDismiss}\n className={cx('shrink-0 gds-radius-button p-0.5 transition-opacity hover:opacity-70', 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 type { BannerVariant }\n","// before-after — interactive slider to compare two overlaid views\nimport type { ReactNode } from 'react'\nimport { forwardRef, useCallback, useRef, useState } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type BeforeAfterProps = {\n before: ReactNode\n after: ReactNode\n initialPosition?: number\n className?: string\n}\n\nexport const BeforeAfter = forwardRef<HTMLDivElement, BeforeAfterProps>(\n function BeforeAfter({ before, after, initialPosition = 50, className }, ref) {\n const [position, setPosition] = useState(initialPosition)\n const containerRef = useRef<HTMLDivElement>(null)\n const dragging = useRef(false)\n\n const updatePosition = useCallback((clientX: number) => {\n const el = containerRef.current\n if (el === null) return\n const rect = el.getBoundingClientRect()\n const x = clientX - rect.left\n const pct = Math.max(0, Math.min(100, (x / rect.width) * 100))\n setPosition(pct)\n }, [])\n\n const onPointerDown = useCallback(\n (e: React.PointerEvent) => {\n dragging.current = true\n ;(e.target as HTMLElement).setPointerCapture(e.pointerId)\n updatePosition(e.clientX)\n },\n [updatePosition],\n )\n\n const onPointerMove = useCallback(\n (e: React.PointerEvent) => {\n if (!dragging.current) return\n updatePosition(e.clientX)\n },\n [updatePosition],\n )\n\n const onPointerUp = useCallback(() => {\n dragging.current = false\n }, [])\n\n return (\n <div\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 className={cx('relative overflow-hidden gds-radius select-none', className)}\n data-component=\"before-after\"\n style={{ cursor: 'ew-resize' }}\n onPointerDown={onPointerDown}\n onPointerMove={onPointerMove}\n onPointerUp={onPointerUp}\n >\n {/* after layer (full width, behind) */}\n <div className=\"relative\">{after}</div>\n\n {/* before layer (clipped) */}\n <div\n className=\"absolute inset-0\"\n style={{ clipPath: `inset(0 ${100 - position}% 0 0)` }}\n >\n {before}\n </div>\n\n {/* divider handle */}\n <div\n className=\"absolute inset-y-0 z-10 w-0.5 bg-fg/80\"\n style={{ left: `${position}%` }}\n >\n <div className=\"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 rounded-full border border-border bg-bg p-1 shadow\">\n <svg\n className=\"h-3 w-3 text-fg-muted\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M8 6l-4 6 4 6M16 6l4 6-4 6\" />\n </svg>\n </div>\n </div>\n </div>\n )\n },\n)\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={`${item.label}-${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 flex flex-col gds-gap 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 flex flex-col gds-gap 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={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('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'\nimport { isActivationKey } from '../utils/dom'\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 onKeyDown={onClick !== undefined ? (e) => { if (isActivationKey(e)) { e.preventDefault(); onClick() } } : undefined}\n ref={ref}\n role={onClick !== undefined ? 'button' : undefined}\n tabIndex={onClick !== undefined ? 0 : 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 = Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> & {\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","// code-snippet — compact code display with optional line numbers and copy\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 CodeSnippetProps = {\n code: string\n language?: string\n copyable?: boolean\n showLineNumbers?: boolean\n glass?: boolean\n className?: string\n}\n\nexport const CodeSnippet = forwardRef<HTMLPreElement, CodeSnippetProps>(\n function CodeSnippet({ code, language, copyable = true, showLineNumbers = true, glass, className }, ref) {\n const [copied, setCopied] = useState(false)\n const lines = code.split('\\n')\n\n const handleCopy = useCallback(() => {\n navigator.clipboard.writeText(code).then(() => {\n setCopied(true)\n setTimeout(() => setCopied(false), 2000)\n }).catch(() => {\n // clipboard api not available\n })\n }, [code])\n\n return (\n <div\n className={cx(\n 'group relative overflow-hidden gds-radius-popover border',\n glass === true\n ? cx(glassClass(glass), 'border-white/10 bg-bg/60')\n : 'border-border/40 bg-bg-secondary',\n className,\n )}\n data-component=\"code-snippet\"\n >\n {/* header */}\n {language !== undefined && (\n <div className=\"flex items-center justify-between border-b border-border/20 px-3 py-1.5\">\n <span className=\"select-none text-[10px] uppercase text-fg-muted/40\">\n {language}\n </span>\n </div>\n )}\n\n {/* copy button */}\n {copyable && (\n <button\n type=\"button\"\n aria-label=\"Copy code\"\n className={cx(\n 'absolute top-2 right-2 flex h-6 w-6 items-center justify-center gds-radius-button bg-bg-tertiary/80 text-fg-muted opacity-0 transition-opacity group-hover:opacity-100 hover:text-fg',\n focusCls,\n )}\n onClick={handleCopy}\n >\n {copied ? (\n <svg width=\"12\" height=\"12\" 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=\"12\" height=\"12\" 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 )}\n\n {/* code */}\n <pre\n ref={ref}\n className=\"overflow-x-auto p-3 font-mono text-[11px] leading-relaxed text-fg\"\n data-selectable\n >\n <code>\n {lines.map((line, i) => (\n <div className=\"flex\" key={i}>\n {showLineNumbers && (\n <span className=\"mr-4 inline-block w-6 shrink-0 select-none text-right text-fg-muted/30\">\n {i + 1}\n </span>\n )}\n <span className=\"flex-1\">{line || ' '}</span>\n </div>\n ))}\n </code>\n </pre>\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'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\nimport { useEscapeKey, useFocusTrap, useScrollLock } from '../utils/hooks'\nimport { renderPortal } from '../utils/portal'\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 renderPortal(\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 )\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","// copy-to-clipboard — inline wrapper that copies a value on click with feedback tooltip\nimport type { ReactNode } from 'react'\nimport { forwardRef, useCallback, useRef, useState } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\nimport { isActivationKey } from '../utils/dom'\n\nexport type CopyToClipboardProps = {\n children: ReactNode\n value: string\n feedback?: string\n className?: string\n}\n\nexport const CopyToClipboard = forwardRef<HTMLSpanElement, CopyToClipboardProps>(\n function CopyToClipboard({ children, value, feedback = 'Copied!', className }, ref) {\n const [showFeedback, setShowFeedback] = useState(false)\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n const handleClick = useCallback(() => {\n navigator.clipboard.writeText(value).then(() => {\n setShowFeedback(true)\n if (timerRef.current !== null) {\n clearTimeout(timerRef.current)\n }\n timerRef.current = setTimeout(() => {\n setShowFeedback(false)\n timerRef.current = null\n }, 2000)\n }).catch(() => {\n // clipboard api not available\n })\n }, [value])\n\n return (\n <span\n ref={ref}\n className={cx('relative inline-flex cursor-pointer select-none', focusCls, className)}\n data-component=\"copy-to-clipboard\"\n onClick={handleClick}\n onKeyDown={(e) => { if (isActivationKey(e)) { e.preventDefault(); handleClick() } }}\n role=\"button\"\n tabIndex={0}\n >\n {children}\n {showFeedback && (\n <span className=\"absolute -top-8 left-1/2 -translate-x-1/2 rounded bg-fg px-2 py-0.5 text-[11px] whitespace-nowrap text-bg shadow-md\">\n {feedback}\n </span>\n )}\n </span>\n )\n },\n)\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","// data-card — metric card with title, value, optional change indicator and footer\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\ntype DataCardChangeType = 'down' | 'neutral' | 'up'\n\nconst changeColors: Record<DataCardChangeType, string> = {\n down: 'text-danger',\n neutral: 'text-fg-muted',\n up: 'text-success',\n}\n\nexport type DataCardProps = {\n title: string\n value: number | string\n change?: string\n changeType?: DataCardChangeType\n icon?: ReactNode\n footer?: ReactNode\n glass?: boolean\n className?: string\n}\n\nexport const DataCard = forwardRef<HTMLDivElement, DataCardProps>(\n function DataCard({ title, value, change, changeType = 'neutral', icon, footer, glass, className }, ref) {\n return (\n <div\n ref={ref}\n className={cx(\n 'gds-ctx gds-radius border border-border/40 bg-surface gds-pad select-none',\n glass === true && glassClass(glass),\n className,\n )}\n data-component=\"data-card\"\n >\n <div className=\"flex items-start justify-between\">\n <span className=\"gds-text-body text-fg-muted\">{title}</span>\n {icon !== undefined && (\n <span className=\"text-fg-muted/30\">{icon}</span>\n )}\n </div>\n\n <div className=\"mt-2 text-xl font-bold text-fg\">{value}</div>\n\n {change !== undefined && (\n <div className={cx('mt-1 flex items-center gap-1 text-[11px]', changeColors[changeType])}>\n {changeType === 'up' && (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M2 12l5-5 3 3 5-6\" /><path d=\"M11 4h4v4\" />\n </svg>\n )}\n {changeType === 'down' && (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M2 4l5 5 3-3 5 6\" /><path d=\"M11 12h4V8\" />\n </svg>\n )}\n <span>{change}</span>\n </div>\n )}\n\n {footer !== undefined && (\n <div className=\"mt-3 border-t border-border/20 pt-2 text-[10px] text-fg-muted/50\">\n {footer}\n </div>\n )}\n </div>\n )\n },\n)\n\nexport type { DataCardChangeType }\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\">&rarr;</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","// description — title + muted body text pair for inline descriptions\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type DescriptionProps = {\n children: ReactNode\n title?: string\n className?: string\n}\n\nexport const Description = forwardRef<HTMLDivElement, DescriptionProps>(\n function Description({ children, title, className }, ref) {\n return (\n <div ref={ref} className={cx('space-y-0.5', className)} data-component=\"description\">\n {title !== undefined && (\n <div className=\"gds-text-body font-medium text-fg\">{title}</div>\n )}\n <div className=\"gds-text-body text-fg-muted\">{children}</div>\n </div>\n )\n },\n)\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","// download-button — button with progress and completion state for downloads\nimport { forwardRef } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\n\nexport type DownloadButtonProps = {\n label: string\n progress?: number\n complete?: boolean\n onClick: () => void\n disabled?: boolean\n className?: string\n}\n\nexport const DownloadButton = forwardRef<HTMLButtonElement, DownloadButtonProps>(\n function DownloadButton({ label, progress, complete = false, onClick, disabled = false, className }, ref) {\n const isDownloading = progress !== undefined && !complete\n const isDisabled = disabled || isDownloading\n\n return (\n <button\n ref={ref}\n type=\"button\"\n className={cx(\n 'inline-flex items-center gap-2 gds-radius-button border border-border bg-bg px-4 py-2 text-sm font-medium text-fg transition-colors select-none',\n 'hover:bg-bg-secondary',\n isDisabled && 'cursor-not-allowed opacity-50',\n complete && 'border-success/30 text-success',\n focusCls,\n className,\n )}\n data-component=\"download-button\"\n disabled={isDisabled}\n onClick={onClick}\n >\n {complete && (\n <>\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=\"M3 8.5l4 4 6-7\" />\n </svg>\n <span>Downloaded</span>\n </>\n )}\n {!complete && isDownloading && (\n <>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" className=\"animate-spin\">\n <path d=\"M8 2a6 6 0 1 0 6 6\" />\n </svg>\n <span className=\"tabular-nums\">{progress}%</span>\n </>\n )}\n {!complete && !isDownloading && (\n <>\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=\"M8 2v8M4.5 7.5L8 11l3.5-3.5\" /><path d=\"M3 13h10\" />\n </svg>\n <span>{label}</span>\n </>\n )}\n </button>\n )\n },\n)\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 { mergeRefs } from '../utils/dom'\nimport { glassClass } from '../utils/glass'\nimport { useEscapeKey, useFocusTrap, 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 const trapRef = useFocusTrap(open)\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={mergeRefs(ref, trapRef)}\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","// drop-zone — file drop area with drag-over visual feedback\nimport type { ReactNode } from 'react'\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 DropZoneProps = {\n onDrop: (files: File[]) => void\n accept?: string\n active?: boolean\n children?: ReactNode\n glass?: boolean\n className?: string\n}\n\nexport const DropZone = forwardRef<HTMLDivElement, DropZoneProps>(\n function DropZone({ onDrop, accept, active, children, glass, className }, ref) {\n const [dragOver, setDragOver] = useState(false)\n\n const isActive = active === true || dragOver\n\n const handleDragOver = useCallback((e: React.DragEvent) => {\n e.preventDefault()\n setDragOver(true)\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 const files = Array.from(e.dataTransfer.files)\n onDrop(files)\n },\n [onDrop],\n )\n\n return (\n <div\n ref={ref}\n className={cx(\n 'flex flex-col items-center justify-center gds-gap gds-radius border-2 border-dashed p-8 transition-colors',\n focusCls,\n isActive\n ? 'border-accent bg-accent/5'\n : 'border-border/40 bg-bg-secondary/20',\n glass === true && glassClass(glass),\n className,\n )}\n data-component=\"drop-zone\"\n data-state={isActive ? 'active' : 'idle'}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n >\n {children ?? (\n <span className=\"text-sm text-fg-muted select-none\">\n Drop files here\n </span>\n )}\n {accept !== undefined && (\n <span className=\"text-xs text-fg-muted/60\">{accept}</span>\n )}\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","// 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","// 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","// empty-search — placeholder shown when a search returns no results\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type EmptySearchProps = {\n query: string\n suggestions?: string[]\n className?: string\n}\n\nexport const EmptySearch = forwardRef<HTMLDivElement, EmptySearchProps>(\n function EmptySearch({ query, suggestions, className }, ref) {\n return (\n <div\n ref={ref}\n className={cx(\n 'flex flex-col items-center justify-center py-12 text-center select-none',\n className,\n )}\n data-component=\"empty-search\"\n >\n <div className=\"flex h-12 w-12 items-center justify-center rounded-full bg-bg-tertiary/50\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\">\n <circle cx=\"11\" cy=\"11\" r=\"7\" /><path d=\"M21 21l-4.35-4.35\" />\n </svg>\n </div>\n <h3 className=\"mt-3 text-sm font-medium text-fg\">\n No results for &apos;{query}&apos;\n </h3>\n {suggestions !== undefined && suggestions.length > 0 && (\n <div className=\"mt-3 flex flex-wrap justify-center gap-2\">\n {suggestions.map((suggestion) => (\n <span\n key={suggestion}\n className=\"rounded-full bg-bg-tertiary/50 px-3 py-1 text-[11px] text-fg-muted\"\n >\n {suggestion}\n </span>\n ))}\n </div>\n )}\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","// field-group — titled group of form fields with optional multi-column grid\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\ntype FieldGroupColumns = 1 | 2 | 3\n\nconst columnClasses: Record<FieldGroupColumns, string> = {\n 1: 'grid-cols-1',\n 2: 'grid-cols-1 md:grid-cols-2',\n 3: 'grid-cols-1 md:grid-cols-2 lg:grid-cols-3',\n}\n\nexport type FieldGroupProps = {\n children: ReactNode\n columns?: FieldGroupColumns\n title?: string\n description?: string\n className?: string\n}\n\nexport const FieldGroup = forwardRef<HTMLFieldSetElement, FieldGroupProps>(\n function FieldGroup({ children, columns = 1, title, description, className }, ref) {\n return (\n <fieldset ref={ref} className={cx('space-y-4', className)} data-component=\"field-group\">\n {title !== undefined && (\n <div>\n <legend className=\"text-sm font-semibold text-fg\">{title}</legend>\n {description !== undefined && (\n <p className=\"mt-0.5 gds-text-body text-fg-muted\">{description}</p>\n )}\n </div>\n )}\n <div className={cx('grid gds-gap', columnClasses[columns])}>{children}</div>\n </fieldset>\n )\n },\n)\n\nexport type { FieldGroupColumns }\n","// field-set — bordered fieldset with legend label\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type FieldSetProps = {\n children: ReactNode\n legend: string\n disabled?: boolean\n className?: string\n}\n\nexport const FieldSet = forwardRef<HTMLFieldSetElement, FieldSetProps>(\n function FieldSet({ children, legend, disabled = false, className }, ref) {\n return (\n <fieldset\n ref={ref}\n className={cx(\n 'gds-radius border border-border gds-pad',\n disabled && 'cursor-not-allowed opacity-50',\n className,\n )}\n data-component=\"field-set\"\n disabled={disabled}\n >\n <legend className=\"px-2 text-xs font-medium text-fg-muted select-none\">\n {legend}\n </legend>\n {children}\n </fieldset>\n )\n },\n)\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 = Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> & {\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 { Button } from '../l2-primitives/button'\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\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 variant=\"ghost\" disabled={disabled} onClick={onReset} type=\"button\">\n Reset\n </Button>\n )}\n {onCancel !== undefined && (\n <Button variant=\"secondary\" disabled={disabled} onClick={onCancel} type=\"button\">\n Cancel\n </Button>\n )}\n {onSave !== undefined && (\n <Button disabled={disabled ?? loading} loading={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","// glass-button — frosted glass variant button with size and color variants\nimport { cva } from 'class-variance-authority'\nimport type { ButtonHTMLAttributes, 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 glassButtonVariants = cva(\n cx(\n 'inline-flex select-none items-center justify-center font-medium gds-glass transition-colors',\n focusCls,\n ),\n {\n variants: {\n variant: {\n default:\n 'border border-border/30 bg-bg/50 text-fg hover:bg-bg/70',\n accent:\n 'border border-accent/30 bg-accent/20 text-accent hover:bg-accent/30',\n },\n size: {\n sm: 'h-7 gap-1 gds-radius-button px-2 text-[11px]',\n default: 'h-8 gap-1.5 gds-radius-button px-3 text-xs',\n lg: 'h-9 gap-2 gds-radius px-4 text-sm',\n },\n },\n defaultVariants: { variant: 'default', size: 'default' },\n },\n)\n\nexport type GlassButtonProps = ButtonHTMLAttributes<HTMLButtonElement> &\n VariantProps<typeof glassButtonVariants> & {\n children: ReactNode\n }\n\nexport const GlassButton = forwardRef<HTMLButtonElement, GlassButtonProps>(\n function GlassButton({ children, className, size, variant, ...props }, ref) {\n return (\n <button\n ref={ref}\n className={cx(glassButtonVariants({ size, variant }), className)}\n data-component=\"glass-button\"\n {...props}\n >\n {children}\n </button>\n )\n },\n)\n\nexport { glassButtonVariants }\n","// glass-card — frosted glass container with blur intensity variants\nimport { cva } from 'class-variance-authority'\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport type { VariantProps } from '../utils/types'\n\nconst glassCardVariants = cva(\n 'gds-ctx gds-radius border bg-bg/60',\n {\n variants: {\n blur: {\n sm: 'gds-glass-sm border-border/25',\n default: 'gds-glass border-border/20',\n lg: 'gds-glass-lg border-border/15',\n },\n },\n defaultVariants: { blur: 'default' },\n },\n)\n\nexport type GlassCardProps = VariantProps<typeof glassCardVariants> & {\n children: ReactNode\n className?: string\n}\n\nexport const GlassCard = forwardRef<HTMLDivElement, GlassCardProps>(\n function GlassCard({ blur, children, className }, ref) {\n return (\n <div\n ref={ref}\n className={cx(glassCardVariants({ blur }), className)}\n data-component=\"glass-card\"\n >\n {children}\n </div>\n )\n },\n)\n\nexport { glassCardVariants }\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","// 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 = Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> & {\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","// key-value-list — compact list of label-value pairs in one or two columns\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type KeyValueItem = {\n key: string\n value: ReactNode\n}\n\nexport type KeyValueListProps = {\n items: KeyValueItem[]\n columns?: 1 | 2\n className?: string\n}\n\nexport const KeyValueList = forwardRef<HTMLDivElement, KeyValueListProps>(\n function KeyValueList({ items, columns = 1, className }, ref) {\n return (\n <div\n ref={ref}\n className={cx(\n 'grid gap-x-8 gap-y-2',\n columns === 2 ? 'grid-cols-2' : 'grid-cols-1',\n className,\n )}\n data-component=\"key-value-list\"\n >\n {items.map((item) => (\n <div className=\"flex items-baseline justify-between gap-4\" key={item.key}>\n <span className=\"shrink-0 gds-text-body text-fg-muted\">{item.key}</span>\n <span className=\"text-right gds-text-body text-fg\">{item.value}</span>\n </div>\n ))}\n </div>\n )\n },\n)\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","// link-preview — rich preview card for an external link with image, title, description\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\nexport type LinkPreviewProps = {\n title: string\n url: string\n description?: string\n domain?: string\n image?: string\n glass?: boolean\n className?: string\n}\n\nexport const LinkPreview = forwardRef<HTMLAnchorElement, LinkPreviewProps>(\n function LinkPreview({ title, url, description, domain, image, glass, className }, ref) {\n return (\n <a\n ref={ref}\n className={cx(\n 'flex gds-gap gds-radius border-l-4 border-accent bg-bg-secondary gds-pad transition-colors select-none hover:bg-bg-tertiary',\n glass === true && glassClass(glass),\n className,\n )}\n data-component=\"link-preview\"\n href={url}\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n >\n <div className=\"flex min-w-0 flex-1 flex-col gap-1\">\n <span className=\"truncate text-sm font-medium text-accent\">{title}</span>\n {description !== undefined && (\n <span className=\"line-clamp-2 gds-text-body text-fg-muted\">\n {description}\n </span>\n )}\n {domain !== undefined && (\n <span className=\"text-[10px] text-fg-muted/60\">{domain}</span>\n )}\n </div>\n {image !== undefined && (\n <img\n alt={title}\n className=\"h-16 w-16 shrink-0 gds-radius object-cover\"\n src={image}\n />\n )}\n </a>\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 { MentionListProps, 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-bell — icon button with unread count badge\nimport { forwardRef } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\n\nexport type NotificationBellProps = {\n unread: number\n onClick: () => void\n className?: string\n}\n\nexport const NotificationBell = forwardRef<HTMLButtonElement, NotificationBellProps>(\n function NotificationBell({ unread, onClick, className }, ref) {\n return (\n <button\n ref={ref}\n type=\"button\"\n className={cx(\n 'relative inline-flex h-8 w-8 items-center justify-center gds-radius-button text-fg-muted transition-colors select-none hover:bg-bg-tertiary hover:text-fg',\n focusCls,\n className,\n )}\n data-component=\"notification-bell\"\n onClick={onClick}\n aria-label={`Notifications${unread > 0 ? ` (${unread} unread)` : ''}`}\n >\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={cx(unread > 0 && 'animate-pulse')}\n >\n <path d=\"M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9\" />\n <path d=\"M13.73 21a2 2 0 0 1-3.46 0\" />\n </svg>\n {unread > 0 && (\n <span className=\"absolute -top-0.5 -right-0.5 flex h-4 min-w-4 items-center justify-center rounded-full bg-danger px-1 text-[10px] font-medium text-white\">\n {unread > 99 ? '99+' : unread}\n </span>\n )}\n </button>\n )\n },\n)\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-accent-fg',\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","// 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","// 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\">&hellip;</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","// pin-input — PIN/OTP code input with auto-focus progression\nimport type { ClipboardEvent, KeyboardEvent } from 'react'\nimport { forwardRef, useCallback, useRef, useState } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\n\ntype PinInputProps = Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> & {\n disabled?: boolean\n error?: boolean\n length?: number\n mask?: boolean\n numeric?: boolean\n onChange?: (value: string) => void\n onComplete?: (value: string) => void\n value?: string\n}\n\nexport const PinInput = forwardRef<HTMLDivElement, PinInputProps>(\n function PinInput(\n {\n className,\n disabled = false,\n error = false,\n length = 4,\n mask = false,\n numeric = false,\n onChange,\n onComplete,\n value,\n ...props\n },\n ref,\n ) {\n const [internalValues, setInternalValues] = useState<string[]>(() =>\n Array.from({ length }, () => ''),\n )\n const isControlled = value !== undefined\n const inputRefs = useRef<(HTMLInputElement | null)[]>([])\n\n const setInputRef = useCallback(\n (index: number) => (el: HTMLInputElement | null) => {\n inputRefs.current[index] = el\n },\n [],\n )\n\n const focusInput = useCallback((index: number) => {\n const target = inputRefs.current[index]\n if (target !== null && target !== undefined) {\n target.focus()\n }\n }, [])\n\n const getDisplayValues = (): string[] => {\n if (isControlled) {\n return Array.from({ length }, (_, i) => value[i] ?? '')\n }\n return internalValues\n }\n\n const checkComplete = useCallback(\n (newValue: string, newValues?: string[]) => {\n if (onComplete !== undefined) {\n if (isControlled) {\n if (newValue.length === length) {\n onComplete(newValue)\n }\n } else if (\n newValues !== undefined &&\n newValues.every((v) => v !== '') &&\n newValues.join('').length === length\n ) {\n onComplete(newValues.join(''))\n }\n }\n },\n [isControlled, length, onComplete],\n )\n\n const handleInput = useCallback(\n (index: number, char: string) => {\n if (char.length !== 1) return\n if (numeric && !/^\\d$/.test(char)) return\n\n if (isControlled) {\n const chars = (value ?? '').split('')\n while (chars.length < index) {\n chars.push('')\n }\n chars[index] = char\n const next = chars.join('')\n if (onChange !== undefined) {\n onChange(next)\n }\n checkComplete(next)\n } else {\n const newValues = [...internalValues]\n newValues[index] = char\n setInternalValues(newValues)\n checkComplete('', newValues)\n }\n\n if (index < length - 1) {\n focusInput(index + 1)\n }\n },\n [value, length, numeric, isControlled, internalValues, onChange, checkComplete, focusInput],\n )\n\n const handleKeyDown = useCallback(\n (index: number, e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Backspace') {\n e.preventDefault()\n if (isControlled) {\n const chars = (value ?? '').split('')\n if (chars[index] !== undefined && chars[index] !== '') {\n chars[index] = ''\n if (onChange !== undefined) {\n onChange(chars.join('').replace(/\\s+$/, ''))\n }\n } else if (index > 0) {\n chars.splice(index - 1, 1)\n if (onChange !== undefined) {\n onChange(chars.join(''))\n }\n focusInput(index - 1)\n }\n } else {\n const newValues = [...internalValues]\n if (newValues[index] !== '') {\n newValues[index] = ''\n setInternalValues(newValues)\n } else if (index > 0) {\n newValues[index - 1] = ''\n setInternalValues(newValues)\n focusInput(index - 1)\n }\n }\n }\n },\n [value, isControlled, internalValues, onChange, focusInput],\n )\n\n const handlePaste = useCallback(\n (e: ClipboardEvent<HTMLInputElement>) => {\n e.preventDefault()\n let pasted = e.clipboardData.getData('text').slice(0, length)\n if (numeric) {\n pasted = pasted.replace(/\\D/g, '')\n }\n if (pasted.length === 0) return\n\n if (isControlled) {\n if (onChange !== undefined) {\n onChange(pasted)\n }\n checkComplete(pasted)\n } else {\n const newValues = Array.from({ length }, (_, i) => pasted[i] ?? '')\n setInternalValues(newValues)\n checkComplete('', newValues)\n }\n\n const nextIndex = Math.min(pasted.length, length - 1)\n focusInput(nextIndex)\n },\n [length, numeric, isControlled, onChange, checkComplete, focusInput],\n )\n\n const displayValues = getDisplayValues()\n\n return (\n <div\n className={cx('flex gap-2', error && 'animate-shake', className)}\n data-component=\"pin-input\"\n ref={ref}\n {...props}\n >\n {Array.from({ length }, (_, i) => (\n <input\n aria-label={`${numeric ? 'Digit' : 'Pin digit'} ${i + 1}`}\n autoComplete={numeric ? 'one-time-code' : undefined}\n className={cx(\n 'h-10 w-10 rounded-md border bg-bg text-center text-sm text-fg transition-colors outline-none',\n numeric && 'h-12 font-mono text-lg tabular-nums',\n error\n ? 'border-danger'\n : 'border-border hover:border-border-strong',\n focusCls,\n disabled && 'cursor-not-allowed opacity-50',\n )}\n disabled={disabled}\n inputMode={numeric ? 'numeric' : undefined}\n key={i}\n maxLength={1}\n onInput={(e) => {\n const target = e.target as HTMLInputElement\n const char = target.value\n if (char.length > 0) {\n handleInput(i, char[char.length - 1])\n }\n target.value = displayValues[i] ?? ''\n }}\n onKeyDown={(e) => handleKeyDown(i, e)}\n onPaste={handlePaste}\n pattern={numeric ? '[0-9]*' : undefined}\n ref={setInputRef(i)}\n type={mask ? 'password' : 'text'}\n value={\n mask && displayValues[i] !== undefined && displayValues[i] !== ''\n ? '\\u2022'\n : (displayValues[i] ?? '')\n }\n />\n ))}\n </div>\n )\n },\n)\n\nexport type { PinInputProps }\n","import type { ReactNode } from 'react'\nimport { forwardRef, useRef, useState } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { isActivationKey } from '../utils/dom'\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\n onClick={() => setOpen((v) => !v)}\n onKeyDown={(e) => { if (isActivationKey(e)) { e.preventDefault(); setOpen((v) => !v) } }}\n role=\"button\"\n tabIndex={0}\n >\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 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-fg\" />\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 { mergeRefs } from '../utils/dom'\nimport { glassClass } from '../utils/glass'\nimport { useEscapeKey, useFocusTrap, 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 const trapRef = useFocusTrap(open)\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={mergeRefs(ref, trapRef)}\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-header — table column header with sort direction indicator\nimport { forwardRef } from 'react'\n\nimport { focusCls } from '../utils/a11y'\nimport { cx } from '../utils/cx'\n\ntype SortDirection = 'asc' | 'desc' | null\n\nexport type SortableHeaderProps = {\n label: string\n direction: SortDirection\n onSort: () => void\n className?: string\n}\n\nexport const SortableHeader = forwardRef<HTMLTableCellElement, SortableHeaderProps>(\n function SortableHeader({ label, direction, onSort, className }, ref) {\n const active = direction !== null\n\n return (\n <th\n ref={ref}\n className={cx(\n 'px-3 py-2 text-left text-xs font-medium transition-colors select-none',\n focusCls,\n active ? 'text-accent' : 'text-fg-muted',\n 'cursor-pointer hover:text-accent',\n className,\n )}\n data-component=\"sortable-header\"\n data-state={direction ?? 'none'}\n onClick={onSort}\n role=\"columnheader\"\n tabIndex={0}\n >\n <span className=\"inline-flex items-center gap-1\">\n {label}\n {direction === 'asc' && (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M8 12V4M4.5 7.5L8 4l3.5 3.5\" />\n </svg>\n )}\n {direction === 'desc' && (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M8 4v8M4.5 8.5L8 12l3.5-3.5\" />\n </svg>\n )}\n </span>\n </th>\n )\n },\n)\n\nexport type { SortDirection }\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-accent-fg 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","// stacked-progress — multi-segment horizontal progress bar with optional labels\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type StackedSegment = {\n label: string\n value: number\n color?: string\n}\n\nexport type StackedProgressProps = {\n segments: StackedSegment[]\n showLabels?: boolean\n className?: string\n}\n\nconst defaultColors = [\n 'var(--color-accent)',\n 'var(--color-success)',\n 'var(--color-warning)',\n 'var(--color-danger)',\n 'var(--color-fg-muted)',\n]\n\nexport const StackedProgress = forwardRef<HTMLDivElement, StackedProgressProps>(\n function StackedProgress({ segments, showLabels = true, className }, ref) {\n const total = segments.reduce((sum, s) => sum + s.value, 0)\n\n return (\n <div ref={ref} className={cx('select-none', className)} data-component=\"stacked-progress\">\n <div className=\"flex h-3 overflow-hidden rounded-full bg-fg-muted/10\">\n {segments.map((seg, i) => {\n const pct = total > 0 ? (seg.value / total) * 100 : 0\n if (pct <= 0) return null\n const color = seg.color ?? defaultColors[i % defaultColors.length]\n\n return (\n <div\n key={`${seg.label}-${i}`}\n className=\"transition-all duration-300\"\n style={{ width: `${pct}%`, backgroundColor: color }}\n />\n )\n })}\n </div>\n {showLabels && (\n <div className=\"mt-2 flex flex-wrap gap-3\">\n {segments.map((seg, i) => {\n const pct = total > 0 ? (seg.value / total) * 100 : 0\n const color = seg.color ?? defaultColors[i % defaultColors.length]\n\n return (\n <div key={`${seg.label}-${i}`} className=\"flex items-center gap-1.5 gds-text-body text-fg-muted\">\n <div\n className=\"h-2 w-2 rounded-full\"\n style={{ backgroundColor: color }}\n />\n <span>{seg.label}</span>\n <span className=\"font-medium text-fg\">{pct.toFixed(1)}%</span>\n </div>\n )\n })}\n </div>\n )}\n </div>\n )\n },\n)\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","// 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, 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","// 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","// 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","// toolbar-generic — horizontal toolbar container with optional floating variant\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\nexport type ToolbarGenericProps = {\n children: ReactNode\n variant?: 'default' | 'floating'\n glass?: boolean\n className?: string\n}\n\nexport const ToolbarGeneric = forwardRef<HTMLDivElement, ToolbarGenericProps>(\n function ToolbarGeneric({ children, variant = 'default', glass, className }, ref) {\n const variantCls =\n variant === 'floating'\n ? 'gds-radius border border-border bg-surface shadow-md'\n : 'border-b border-border bg-bg'\n\n return (\n <div\n ref={ref}\n className={cx(\n 'flex items-center gds-gap px-3 py-2 select-none',\n variantCls,\n glass === true && glassClass(glass),\n className,\n )}\n data-component=\"toolbar-generic\"\n data-variant={variant}\n role=\"toolbar\"\n >\n {children}\n </div>\n )\n },\n)\n\nexport const ToolbarSeparator = forwardRef<HTMLDivElement>(\n function ToolbarSeparator(_props, ref) {\n return <div ref={ref} className=\"h-4 w-px bg-border/50\" data-component=\"toolbar-separator\" />\n },\n)\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","// user-card — compact user display with avatar, name, role, and contact info\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\nimport { glassClass } from '../utils/glass'\n\ntype UserCardStatus = 'away' | 'busy' | 'offline' | 'online'\n\nconst statusColors: Record<UserCardStatus, string> = {\n away: 'bg-warning',\n busy: 'bg-danger',\n offline: 'bg-fg-muted/40',\n online: 'bg-success',\n}\n\nexport type UserCardProps = {\n name: string\n avatar?: string\n role?: string\n department?: string\n email?: string\n status?: UserCardStatus\n glass?: boolean\n className?: string\n children?: ReactNode\n}\n\nexport const UserCard = forwardRef<HTMLDivElement, UserCardProps>(\n function UserCard({ name, avatar, role, department, email, status, glass, className, children }, 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 ref={ref}\n className={cx(\n 'inline-flex items-center gds-gap gds-radius border border-border bg-surface gds-pad select-none',\n glass === true && glassClass(glass),\n className,\n )}\n data-component=\"user-card\"\n >\n {/* avatar */}\n <div className=\"relative\">\n {avatar !== undefined ? (\n <img src={avatar} alt={name} className=\"h-9 w-9 rounded-full object-cover\" />\n ) : (\n <div className=\"flex h-9 w-9 items-center justify-center rounded-full bg-accent/15 text-xs font-medium text-accent\">\n {initials}\n </div>\n )}\n {status !== undefined && (\n <span\n className={cx(\n 'absolute -bottom-0.5 -right-0.5 h-3 w-3 rounded-full border-2 border-surface',\n statusColors[status],\n )}\n />\n )}\n </div>\n\n {/* info */}\n <div className=\"flex min-w-0 flex-col gap-0.5\">\n <span className=\"truncate text-sm font-medium text-fg\">{name}</span>\n {(role !== undefined || department !== undefined) && (\n <span className=\"flex items-center gap-1 gds-text-body text-fg-muted\">\n {role !== undefined && <span>{role}</span>}\n {role !== undefined && department !== undefined && (\n <span className=\"text-fg-muted/40\">/</span>\n )}\n {department !== undefined && <span>{department}</span>}\n </span>\n )}\n {email !== undefined && (\n <span className=\"flex items-center gap-1 gds-text-body text-fg-muted/60\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"2\" y=\"3.5\" width=\"12\" height=\"9\" rx=\"1.5\" /><path d=\"M2 5l6 4 6-4\" />\n </svg>\n <span className=\"truncate\">{email}</span>\n </span>\n )}\n </div>\n\n {children}\n </div>\n )\n },\n)\n\nexport type { UserCardStatus }\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","// watermark — overlay repeated text watermark on content\nimport type { ReactNode } from 'react'\nimport { forwardRef } from 'react'\n\nimport { cx } from '../utils/cx'\n\nexport type WatermarkProps = {\n children: ReactNode\n text: string\n opacity?: number\n className?: string\n}\n\nexport const Watermark = forwardRef<HTMLDivElement, WatermarkProps>(\n function Watermark({ children, text, opacity = 0.1, className }, ref) {\n return (\n <div\n ref={ref}\n className={cx('relative overflow-hidden', className)}\n data-component=\"watermark\"\n >\n {children}\n <div\n className=\"pointer-events-none absolute inset-0 flex items-center justify-center overflow-hidden select-none\"\n style={{ opacity }}\n >\n <div\n className=\"absolute inset-[-50%] flex flex-wrap items-center justify-center gap-16\"\n style={{ transform: 'rotate(-30deg)' }}\n >\n {Array.from({ length: 64 }, (_, i) => (\n <span key={i} className=\"text-lg font-bold whitespace-nowrap text-fg\">\n {text}\n </span>\n ))}\n </div>\n </div>\n </div>\n )\n },\n)\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={`${step.title}-${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-accent-fg',\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"],"mappings":"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"}