@duestel/ui 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (226) hide show
  1. package/README.md +110 -0
  2. package/dist/components/accordion/Accordion.d.ts +34 -0
  3. package/dist/components/accordion/Accordion.js +54 -0
  4. package/dist/components/accordion/Accordion.js.map +1 -0
  5. package/dist/components/accordion/index.d.ts +1 -0
  6. package/dist/components/accordion/index.js +2 -0
  7. package/dist/components/alert-dialog/AlertDialog.d.ts +53 -0
  8. package/dist/components/alert-dialog/AlertDialog.js +69 -0
  9. package/dist/components/alert-dialog/AlertDialog.js.map +1 -0
  10. package/dist/components/alert-dialog/index.d.ts +1 -0
  11. package/dist/components/alert-dialog/index.js +2 -0
  12. package/dist/components/autocomplete/Autocomplete.d.ts +90 -0
  13. package/dist/components/autocomplete/Autocomplete.js +137 -0
  14. package/dist/components/autocomplete/Autocomplete.js.map +1 -0
  15. package/dist/components/autocomplete/index.d.ts +1 -0
  16. package/dist/components/autocomplete/index.js +2 -0
  17. package/dist/components/avatar/Avatar.d.ts +44 -0
  18. package/dist/components/avatar/Avatar.js +45 -0
  19. package/dist/components/avatar/Avatar.js.map +1 -0
  20. package/dist/components/avatar/index.d.ts +2 -0
  21. package/dist/components/avatar/index.js +2 -0
  22. package/dist/components/badge/Badge.d.ts +43 -0
  23. package/dist/components/badge/Badge.js +32 -0
  24. package/dist/components/badge/Badge.js.map +1 -0
  25. package/dist/components/badge/index.d.ts +2 -0
  26. package/dist/components/badge/index.js +2 -0
  27. package/dist/components/button/Button.d.ts +60 -0
  28. package/dist/components/button/Button.js +61 -0
  29. package/dist/components/button/Button.js.map +1 -0
  30. package/dist/components/button/index.d.ts +1 -0
  31. package/dist/components/button/index.js +2 -0
  32. package/dist/components/carousel/Carousel.d.ts +32 -0
  33. package/dist/components/carousel/Carousel.js +113 -0
  34. package/dist/components/carousel/Carousel.js.map +1 -0
  35. package/dist/components/carousel/index.d.ts +1 -0
  36. package/dist/components/carousel/index.js +2 -0
  37. package/dist/components/checkbox/Checkbox.d.ts +64 -0
  38. package/dist/components/checkbox/Checkbox.js +59 -0
  39. package/dist/components/checkbox/Checkbox.js.map +1 -0
  40. package/dist/components/checkbox/index.d.ts +1 -0
  41. package/dist/components/checkbox/index.js +2 -0
  42. package/dist/components/collapsible/Collapsible.d.ts +28 -0
  43. package/dist/components/collapsible/Collapsible.js +40 -0
  44. package/dist/components/collapsible/Collapsible.js.map +1 -0
  45. package/dist/components/collapsible/index.d.ts +1 -0
  46. package/dist/components/collapsible/index.js +2 -0
  47. package/dist/components/combobox/Combobox.d.ts +113 -0
  48. package/dist/components/combobox/Combobox.js +189 -0
  49. package/dist/components/combobox/Combobox.js.map +1 -0
  50. package/dist/components/combobox/index.d.ts +1 -0
  51. package/dist/components/combobox/index.js +2 -0
  52. package/dist/components/command/Command.d.ts +37 -0
  53. package/dist/components/command/Command.js +90 -0
  54. package/dist/components/command/Command.js.map +1 -0
  55. package/dist/components/command/index.d.ts +1 -0
  56. package/dist/components/command/index.js +2 -0
  57. package/dist/components/context-menu/ContextMenu.d.ts +76 -0
  58. package/dist/components/context-menu/ContextMenu.js +132 -0
  59. package/dist/components/context-menu/ContextMenu.js.map +1 -0
  60. package/dist/components/context-menu/index.d.ts +1 -0
  61. package/dist/components/context-menu/index.js +2 -0
  62. package/dist/components/data-table/DataTable.d.ts +32 -0
  63. package/dist/components/data-table/DataTable.js +102 -0
  64. package/dist/components/data-table/DataTable.js.map +1 -0
  65. package/dist/components/data-table/Table.d.ts +51 -0
  66. package/dist/components/data-table/Table.js +69 -0
  67. package/dist/components/data-table/Table.js.map +1 -0
  68. package/dist/components/data-table/index.d.ts +3 -0
  69. package/dist/components/data-table/index.js +3 -0
  70. package/dist/components/date-picker/DatePicker.d.ts +63 -0
  71. package/dist/components/date-picker/DatePicker.js +247 -0
  72. package/dist/components/date-picker/DatePicker.js.map +1 -0
  73. package/dist/components/date-picker/index.d.ts +2 -0
  74. package/dist/components/date-picker/index.js +2 -0
  75. package/dist/components/dialog/Dialog.d.ts +59 -0
  76. package/dist/components/dialog/Dialog.js +71 -0
  77. package/dist/components/dialog/Dialog.js.map +1 -0
  78. package/dist/components/dialog/index.d.ts +1 -0
  79. package/dist/components/dialog/index.js +2 -0
  80. package/dist/components/drawer/Drawer.d.ts +93 -0
  81. package/dist/components/drawer/Drawer.js +106 -0
  82. package/dist/components/drawer/Drawer.js.map +1 -0
  83. package/dist/components/drawer/index.d.ts +1 -0
  84. package/dist/components/drawer/index.js +2 -0
  85. package/dist/components/form/Field.d.ts +52 -0
  86. package/dist/components/form/Field.js +54 -0
  87. package/dist/components/form/Field.js.map +1 -0
  88. package/dist/components/form/Fieldset.d.ts +24 -0
  89. package/dist/components/form/Fieldset.js +24 -0
  90. package/dist/components/form/Fieldset.js.map +1 -0
  91. package/dist/components/form/Form.d.ts +18 -0
  92. package/dist/components/form/Form.js +14 -0
  93. package/dist/components/form/Form.js.map +1 -0
  94. package/dist/components/form/Input.d.ts +33 -0
  95. package/dist/components/form/Input.js +99 -0
  96. package/dist/components/form/Input.js.map +1 -0
  97. package/dist/components/form/app-form.d.ts +71 -0
  98. package/dist/components/form/app-form.js +95 -0
  99. package/dist/components/form/app-form.js.map +1 -0
  100. package/dist/components/form/index.d.ts +5 -0
  101. package/dist/components/form/index.js +6 -0
  102. package/dist/components/hotkeys/Kbd.d.ts +20 -0
  103. package/dist/components/hotkeys/Kbd.js +31 -0
  104. package/dist/components/hotkeys/Kbd.js.map +1 -0
  105. package/dist/components/hotkeys/hotkeys.d.ts +14 -0
  106. package/dist/components/hotkeys/hotkeys.js +2 -0
  107. package/dist/components/hotkeys/index.d.ts +2 -0
  108. package/dist/components/hotkeys/index.js +3 -0
  109. package/dist/components/menu/Menu.d.ts +84 -0
  110. package/dist/components/menu/Menu.js +142 -0
  111. package/dist/components/menu/Menu.js.map +1 -0
  112. package/dist/components/menu/index.d.ts +1 -0
  113. package/dist/components/menu/index.js +2 -0
  114. package/dist/components/menubar/Menubar.d.ts +87 -0
  115. package/dist/components/menubar/Menubar.js +142 -0
  116. package/dist/components/menubar/Menubar.js.map +1 -0
  117. package/dist/components/menubar/index.d.ts +1 -0
  118. package/dist/components/menubar/index.js +2 -0
  119. package/dist/components/meter/Meter.d.ts +33 -0
  120. package/dist/components/meter/Meter.js +45 -0
  121. package/dist/components/meter/Meter.js.map +1 -0
  122. package/dist/components/meter/index.d.ts +1 -0
  123. package/dist/components/meter/index.js +2 -0
  124. package/dist/components/navigation-menu/NavigationMenu.d.ts +81 -0
  125. package/dist/components/navigation-menu/NavigationMenu.js +112 -0
  126. package/dist/components/navigation-menu/NavigationMenu.js.map +1 -0
  127. package/dist/components/navigation-menu/index.d.ts +1 -0
  128. package/dist/components/navigation-menu/index.js +2 -0
  129. package/dist/components/number-field/NumberField.d.ts +53 -0
  130. package/dist/components/number-field/NumberField.js +72 -0
  131. package/dist/components/number-field/NumberField.js.map +1 -0
  132. package/dist/components/number-field/index.d.ts +1 -0
  133. package/dist/components/number-field/index.js +2 -0
  134. package/dist/components/otp-field/OtpField.d.ts +33 -0
  135. package/dist/components/otp-field/OtpField.js +31 -0
  136. package/dist/components/otp-field/OtpField.js.map +1 -0
  137. package/dist/components/otp-field/index.d.ts +1 -0
  138. package/dist/components/otp-field/index.js +2 -0
  139. package/dist/components/pagination/Pagination.d.ts +17 -0
  140. package/dist/components/pagination/Pagination.js +75 -0
  141. package/dist/components/pagination/Pagination.js.map +1 -0
  142. package/dist/components/pagination/index.d.ts +1 -0
  143. package/dist/components/pagination/index.js +2 -0
  144. package/dist/components/popover/Popover.d.ts +73 -0
  145. package/dist/components/popover/Popover.js +97 -0
  146. package/dist/components/popover/Popover.js.map +1 -0
  147. package/dist/components/popover/index.d.ts +1 -0
  148. package/dist/components/popover/index.js +2 -0
  149. package/dist/components/preview-card/PreviewCard.d.ts +60 -0
  150. package/dist/components/preview-card/PreviewCard.js +83 -0
  151. package/dist/components/preview-card/PreviewCard.js.map +1 -0
  152. package/dist/components/preview-card/index.d.ts +1 -0
  153. package/dist/components/preview-card/index.js +2 -0
  154. package/dist/components/progress/Progress.d.ts +36 -0
  155. package/dist/components/progress/Progress.js +45 -0
  156. package/dist/components/progress/Progress.js.map +1 -0
  157. package/dist/components/progress/index.d.ts +1 -0
  158. package/dist/components/progress/index.js +2 -0
  159. package/dist/components/radio/Radio.d.ts +39 -0
  160. package/dist/components/radio/Radio.js +39 -0
  161. package/dist/components/radio/Radio.js.map +1 -0
  162. package/dist/components/radio/index.d.ts +1 -0
  163. package/dist/components/radio/index.js +2 -0
  164. package/dist/components/resizable/Resizable.d.ts +35 -0
  165. package/dist/components/resizable/Resizable.js +38 -0
  166. package/dist/components/resizable/Resizable.js.map +1 -0
  167. package/dist/components/resizable/index.d.ts +1 -0
  168. package/dist/components/resizable/index.js +2 -0
  169. package/dist/components/scroll-area/ScrollArea.d.ts +37 -0
  170. package/dist/components/scroll-area/ScrollArea.js +52 -0
  171. package/dist/components/scroll-area/ScrollArea.js.map +1 -0
  172. package/dist/components/scroll-area/index.d.ts +1 -0
  173. package/dist/components/scroll-area/index.js +2 -0
  174. package/dist/components/select/Select.d.ts +94 -0
  175. package/dist/components/select/Select.js +151 -0
  176. package/dist/components/select/Select.js.map +1 -0
  177. package/dist/components/select/index.d.ts +1 -0
  178. package/dist/components/select/index.js +2 -0
  179. package/dist/components/separator/Separator.d.ts +29 -0
  180. package/dist/components/separator/Separator.js +20 -0
  181. package/dist/components/separator/Separator.js.map +1 -0
  182. package/dist/components/separator/index.d.ts +1 -0
  183. package/dist/components/separator/index.js +2 -0
  184. package/dist/components/slider/Slider.d.ts +53 -0
  185. package/dist/components/slider/Slider.js +70 -0
  186. package/dist/components/slider/Slider.js.map +1 -0
  187. package/dist/components/slider/index.d.ts +1 -0
  188. package/dist/components/slider/index.js +2 -0
  189. package/dist/components/switch/Switch.d.ts +28 -0
  190. package/dist/components/switch/Switch.js +31 -0
  191. package/dist/components/switch/Switch.js.map +1 -0
  192. package/dist/components/switch/index.d.ts +1 -0
  193. package/dist/components/switch/index.js +2 -0
  194. package/dist/components/tabs/Tabs.d.ts +41 -0
  195. package/dist/components/tabs/Tabs.js +45 -0
  196. package/dist/components/tabs/Tabs.js.map +1 -0
  197. package/dist/components/tabs/index.d.ts +1 -0
  198. package/dist/components/tabs/index.js +2 -0
  199. package/dist/components/toast/Toast.d.ts +70 -0
  200. package/dist/components/toast/Toast.js +95 -0
  201. package/dist/components/toast/Toast.js.map +1 -0
  202. package/dist/components/toast/index.d.ts +1 -0
  203. package/dist/components/toast/index.js +2 -0
  204. package/dist/components/toggle/Toggle.d.ts +38 -0
  205. package/dist/components/toggle/Toggle.js +30 -0
  206. package/dist/components/toggle/Toggle.js.map +1 -0
  207. package/dist/components/toggle/index.d.ts +1 -0
  208. package/dist/components/toggle/index.js +2 -0
  209. package/dist/components/toolbar/Toolbar.d.ts +50 -0
  210. package/dist/components/toolbar/Toolbar.js +59 -0
  211. package/dist/components/toolbar/Toolbar.js.map +1 -0
  212. package/dist/components/toolbar/index.d.ts +1 -0
  213. package/dist/components/toolbar/index.js +2 -0
  214. package/dist/components/tooltip/Tooltip.d.ts +58 -0
  215. package/dist/components/tooltip/Tooltip.js +57 -0
  216. package/dist/components/tooltip/Tooltip.js.map +1 -0
  217. package/dist/components/tooltip/index.d.ts +1 -0
  218. package/dist/components/tooltip/index.js +2 -0
  219. package/dist/index.d.ts +60 -0
  220. package/dist/index.js +48 -0
  221. package/dist/lib/cn.d.ts +3 -0
  222. package/dist/lib/cn.js +29 -0
  223. package/dist/lib/cn.js.map +1 -0
  224. package/dist/styles.css +2 -0
  225. package/dist/theme.css +109 -0
  226. package/package.json +131 -0
@@ -0,0 +1,59 @@
1
+ import { cn as e } from "../../lib/cn.js";
2
+ import { Check as t, Minus as n } from "lucide-react";
3
+ import { Fragment as r, jsx as i, jsxs as a } from "react/jsx-runtime";
4
+ import { Checkbox as o } from "@base-ui/react/checkbox";
5
+ import { CheckboxGroup as s } from "@base-ui/react/checkbox-group";
6
+ //#region src/components/checkbox/Checkbox.tsx
7
+ function c({ className: t, ...n }) {
8
+ return /* @__PURE__ */ i(o.Root, {
9
+ className: e("group relative flex size-5 shrink-0 cursor-pointer items-center justify-center", "rounded-[6px] bg-surface-container-highest transition-colors duration-150", "data-[checked]:bg-inverse-primary data-[indeterminate]:bg-inverse-primary", "before:absolute before:-inset-2.5 before:rounded-full before:transition-colors before:duration-500", "hover:before:bg-surface-container-highest/30", "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary", "data-[disabled]:cursor-not-allowed data-[disabled]:opacity-[0.38]", "data-[readonly]:cursor-default", t),
10
+ ...n
11
+ });
12
+ }
13
+ function l({ className: s, children: c, ...l }) {
14
+ return /* @__PURE__ */ i(o.Indicator, {
15
+ className: e("flex items-center justify-center text-white", "transition-all duration-150 ease-out", "data-[starting-style]:scale-50 data-[starting-style]:opacity-0", "data-[ending-style]:scale-50 data-[ending-style]:opacity-0", s),
16
+ ...l,
17
+ children: c ?? /* @__PURE__ */ a(r, { children: [/* @__PURE__ */ i(n, {
18
+ "aria-hidden": !0,
19
+ className: "hidden size-3.5 group-data-[indeterminate]:block"
20
+ }), /* @__PURE__ */ i(t, {
21
+ "aria-hidden": !0,
22
+ className: "size-3.5 group-data-[indeterminate]:hidden"
23
+ })] })
24
+ });
25
+ }
26
+ function u({ className: t, ...n }) {
27
+ return /* @__PURE__ */ i(s, {
28
+ className: e("flex flex-col items-start gap-3", t),
29
+ ...n
30
+ });
31
+ }
32
+ function d({ className: t, ...n }) {
33
+ return /* @__PURE__ */ i("label", {
34
+ className: e("flex cursor-pointer items-center gap-3.5 text-body-small text-on-surface", "has-data-[disabled]:cursor-not-allowed", t),
35
+ ...n
36
+ });
37
+ }
38
+ function f({ label: e, children: t, ariaLabel: n, onChange: r, onCheckedChange: o, className: s, ...u }) {
39
+ let f = e ?? t, p = /* @__PURE__ */ i(c, {
40
+ "aria-label": n,
41
+ onCheckedChange: (e, t) => {
42
+ o?.(e, t), r?.(e);
43
+ },
44
+ className: s,
45
+ ...u,
46
+ children: /* @__PURE__ */ i(l, {})
47
+ });
48
+ return f == null ? p : /* @__PURE__ */ a(d, { children: [p, f] });
49
+ }
50
+ var p = Object.assign(f, {
51
+ Root: c,
52
+ Indicator: l,
53
+ Group: u,
54
+ Label: d
55
+ });
56
+ //#endregion
57
+ export { p as Checkbox, u as Group, l as Indicator, d as Label, c as Root };
58
+
59
+ //# sourceMappingURL=Checkbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Checkbox.js","names":[],"sources":["../../../src/components/checkbox/Checkbox.tsx"],"sourcesContent":["import { Checkbox as BaseCheckbox } from '@base-ui/react/checkbox'\nimport { CheckboxGroup as BaseCheckboxGroup } from '@base-ui/react/checkbox-group'\nimport { Check, Minus } from 'lucide-react'\nimport { cn } from '#/lib/cn'\n\nimport type { ComponentProps, ReactNode } from 'react'\n\n/**\n * Checkbox — Material 3 styled wrapper over Base UI's headless Checkbox +\n * Checkbox Group.\n * Behaviour/accessibility (hidden input, aria-checked incl. \"mixed\",\n * keyboard toggling, parent/child group state): Base UI\n * (https://base-ui.com/react/components/checkbox and\n * https://base-ui.com/react/components/checkbox-group).\n * Visuals ported from port/core/ui/elements/common/Checkbox.tsx +\n * port/pages/examples/selection (see CLAUDE.md): 20px box with the port's\n * 6px corner on a 40px circular state layer (surface-container-highest/30\n * hover, slow fade), surface-container-highest fill when unticked,\n * inverse-primary fill with a white check when ticked (the port's native\n * `text-inverse-primary` accent), indeterminate dash, body-small label.\n *\n * Primary API is the port's single component (port/core/ui/elements/common):\n * <Checkbox ariaLabel=\"Checkbox\" />\n * <Checkbox label=\"I agree to everything\" defaultChecked />\n * <Checkbox>I only agree to the <a href=\"#\">Terms of Service</a></Checkbox>\n *\n * Compound parts remain for advanced composition (parent/child groups):\n * <Checkbox.Group allValues={...} defaultValue={...}>\n * <Checkbox.Label>\n * <Checkbox.Root parent><Checkbox.Indicator /></Checkbox.Root>\n * Select all\n * </Checkbox.Label>\n * …\n * </Checkbox.Group>\n */\n\nfunction Root({ className, ...props }: ComponentProps<typeof BaseCheckbox.Root>) {\n return (\n <BaseCheckbox.Root\n className={cn(\n 'group relative flex size-5 shrink-0 cursor-pointer items-center justify-center',\n // Port metrics: 6px corner (hardcoded in port, between the 4/8px tokens).\n 'rounded-[6px] bg-surface-container-highest transition-colors duration-150',\n 'data-[checked]:bg-inverse-primary data-[indeterminate]:bg-inverse-primary',\n // 40px circular state layer, port hover color + slow fade.\n 'before:absolute before:-inset-2.5 before:rounded-full before:transition-colors before:duration-500',\n 'hover:before:bg-surface-container-highest/30',\n 'focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary',\n 'data-[disabled]:cursor-not-allowed data-[disabled]:opacity-[0.38]',\n 'data-[readonly]:cursor-default',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction Indicator({\n className,\n children,\n ...props\n}: ComponentProps<typeof BaseCheckbox.Indicator>) {\n return (\n <BaseCheckbox.Indicator\n className={cn(\n // White glyph like the port's native checkbox check, on inverse-primary.\n 'flex items-center justify-center text-white',\n 'transition-all duration-150 ease-out',\n 'data-[starting-style]:scale-50 data-[starting-style]:opacity-0',\n 'data-[ending-style]:scale-50 data-[ending-style]:opacity-0',\n className,\n )}\n {...props}\n >\n {children ?? (\n <>\n <Minus aria-hidden className=\"hidden size-3.5 group-data-[indeterminate]:block\" />\n <Check aria-hidden className=\"size-3.5 group-data-[indeterminate]:hidden\" />\n </>\n )}\n </BaseCheckbox.Indicator>\n )\n}\n\n/** Shared state for a series of checkboxes; pass `allValues` to enable a parent checkbox. */\nfunction Group({ className, ...props }: ComponentProps<typeof BaseCheckboxGroup>) {\n return (\n <BaseCheckboxGroup\n className={cn('flex flex-col items-start gap-3', className)}\n {...props}\n />\n )\n}\n\n/**\n * Convenience `<label>` row pairing a checkbox box with its label text —\n * port spacing (4px after the 40px state layer ≈ gap-3.5 from the 20px box)\n * and the port's body-small label.\n */\nfunction Label({ className, ...props }: ComponentProps<'label'>) {\n return (\n <label\n className={cn(\n 'flex cursor-pointer items-center gap-3.5 text-body-small text-on-surface',\n 'has-data-[disabled]:cursor-not-allowed',\n className,\n )}\n {...props}\n />\n )\n}\n\ntype CheckboxProps = Omit<ComponentProps<typeof Root>, 'onChange' | 'children'> & {\n /** Label text to the right of the box (port API; children work too). */\n label?: ReactNode\n /** Label content, port style: <Checkbox>I agree…</Checkbox>. */\n children?: ReactNode\n /** Accessible name for a bare box without a visible label (port API). */\n ariaLabel?: string\n /** Port-compat change callback; receives the new checked state. */\n onChange?: (checked: boolean) => void\n}\n\n/**\n * Port-style single checkbox: box + optional label row in one element.\n * `label` (or children) renders the port's body-small label; without either\n * it's a bare box — pass `ariaLabel`.\n */\nfunction CheckboxComponent({\n label,\n children,\n ariaLabel,\n onChange,\n onCheckedChange,\n className,\n ...props\n}: CheckboxProps) {\n const content = label ?? children\n const box = (\n <Root\n aria-label={ariaLabel}\n onCheckedChange={(checked, eventDetails) => {\n onCheckedChange?.(checked, eventDetails)\n onChange?.(checked)\n }}\n className={className}\n {...props}\n >\n <Indicator />\n </Root>\n )\n if (content == null) return box\n return (\n <Label>\n {box}\n {content}\n </Label>\n )\n}\n\nexport const Checkbox = Object.assign(CheckboxComponent, { Root, Indicator, Group, Label })\nexport { Root, Indicator, Group, Label }\n"],"mappings":";;;;;;AAoCA,SAAS,EAAK,EAAE,cAAW,GAAG,KAAmD;CAC/E,OACE,kBAAC,EAAa,MAAd;EACE,WAAW,EACT,kFAEA,6EACA,6EAEA,sGACA,gDACA,wFACA,qEACA,kCACA,CACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,EAAU,EACjB,cACA,aACA,GAAG,KAC6C;CAChD,OACE,kBAAC,EAAa,WAAd;EACE,WAAW,EAET,+CACA,wCACA,kEACA,8DACA,CACF;EACA,GAAI;YAEH,KACC,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,GAAD;GAAO,eAAA;GAAY,WAAU;EAAoD,CAAA,GACjF,kBAAC,GAAD;GAAO,eAAA;GAAY,WAAU;EAA8C,CAAA,CAC3E,EAAA,CAAA;CAEkB,CAAA;AAE5B;AAGA,SAAS,EAAM,EAAE,cAAW,GAAG,KAAmD;CAChF,OACE,kBAAC,GAAD;EACE,WAAW,EAAG,mCAAmC,CAAS;EAC1D,GAAI;CACL,CAAA;AAEL;AAOA,SAAS,EAAM,EAAE,cAAW,GAAG,KAAkC;CAC/D,OACE,kBAAC,SAAD;EACE,WAAW,EACT,4EACA,0CACA,CACF;EACA,GAAI;CACL,CAAA;AAEL;AAkBA,SAAS,EAAkB,EACzB,UACA,aACA,cACA,aACA,oBACA,cACA,GAAG,KACa;CAChB,IAAM,IAAU,KAAS,GACnB,IACJ,kBAAC,GAAD;EACE,cAAY;EACZ,kBAAkB,GAAS,MAAiB;GAE1C,AADA,IAAkB,GAAS,CAAY,GACvC,IAAW,CAAO;EACpB;EACW;EACX,GAAI;YAEJ,kBAAC,GAAD,CAAY,CAAA;CACR,CAAA;CAGR,OADI,KAAW,OAAa,IAE1B,kBAAC,GAAD,EAAA,UAAA,CACG,GACA,CACI,EAAA,CAAA;AAEX;AAEA,IAAa,IAAW,OAAO,OAAO,GAAmB;CAAE;CAAM;CAAW;CAAO;AAAM,CAAC"}
@@ -0,0 +1 @@
1
+ export { Checkbox, Root, Indicator, Group, Label } from './Checkbox';
@@ -0,0 +1,2 @@
1
+ import { Checkbox as e, Group as t, Indicator as n, Label as r, Root as i } from "./Checkbox.js";
2
+ export { e as Checkbox, t as Group, n as Indicator, r as Label, i as Root };
@@ -0,0 +1,28 @@
1
+ import { Collapsible as BaseCollapsible } from '@base-ui/react/collapsible';
2
+ import { ComponentProps, ReactNode } from 'react';
3
+ /**
4
+ * Collapsible — Material 3 styled wrapper over Base UI's headless Collapsible.
5
+ * Behaviour/accessibility: Base UI (https://base-ui.com/react/components/collapsible).
6
+ * Visuals: M3 surface, shape, type scale, and state layers — same expansion
7
+ * anatomy as the Accordion (single standalone section instead of a list).
8
+ * Design ref: styling reused from src/components/accordion (see CLAUDE.md).
9
+ *
10
+ * Compound API mirrors Base UI:
11
+ * <Collapsible.Root>
12
+ * <Collapsible.Trigger>Title</Collapsible.Trigger>
13
+ * <Collapsible.Panel>Content</Collapsible.Panel>
14
+ * </Collapsible.Root>
15
+ */
16
+ declare function Root({ className, ...props }: ComponentProps<typeof BaseCollapsible.Root>): import("react").JSX.Element;
17
+ type TriggerProps = ComponentProps<typeof BaseCollapsible.Trigger> & {
18
+ /** Replace the trailing chevron with a custom node, or `null` to hide it. */
19
+ icon?: ReactNode;
20
+ };
21
+ declare function Trigger({ className, children, icon, ...props }: TriggerProps): import("react").JSX.Element;
22
+ declare function Panel({ className, children, ...props }: ComponentProps<typeof BaseCollapsible.Panel>): import("react").JSX.Element;
23
+ export declare const Collapsible: {
24
+ Root: typeof Root;
25
+ Trigger: typeof Trigger;
26
+ Panel: typeof Panel;
27
+ };
28
+ export { Root, Trigger, Panel };
@@ -0,0 +1,40 @@
1
+ import { cn as e } from "../../lib/cn.js";
2
+ import { ChevronDown as t } from "lucide-react";
3
+ import { jsx as n, jsxs as r } from "react/jsx-runtime";
4
+ import { Collapsible as i } from "@base-ui/react/collapsible";
5
+ //#region src/components/collapsible/Collapsible.tsx
6
+ function a({ className: t, ...r }) {
7
+ return /* @__PURE__ */ n(i.Root, {
8
+ className: e("flex w-full flex-col overflow-hidden rounded-medium bg-surface-container-low text-on-surface", t),
9
+ ...r
10
+ });
11
+ }
12
+ function o({ className: a, children: o, icon: s, ...c }) {
13
+ return /* @__PURE__ */ r(i.Trigger, {
14
+ className: e("group flex w-full cursor-pointer items-center justify-between gap-4", "px-4 py-[18px] text-left text-title-medium text-on-surface", "transition-colors hover:bg-on-surface/[0.08]", "focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-primary", "disabled:cursor-not-allowed disabled:opacity-[0.38]", a),
15
+ ...c,
16
+ children: [o, s === void 0 ? /* @__PURE__ */ n(t, {
17
+ "aria-hidden": !0,
18
+ className: "size-5 shrink-0 text-on-surface-variant transition-transform duration-200 ease-out group-data-[panel-open]:rotate-180"
19
+ }) : s]
20
+ });
21
+ }
22
+ function s({ className: t, children: r, ...a }) {
23
+ return /* @__PURE__ */ n(i.Panel, {
24
+ className: e("h-(--collapsible-panel-height) overflow-hidden transition-[height] duration-200 ease-out", "data-[ending-style]:h-0 data-[starting-style]:h-0", t),
25
+ ...a,
26
+ children: /* @__PURE__ */ n("div", {
27
+ className: "px-4 pb-4 text-body-medium text-on-surface-variant",
28
+ children: r
29
+ })
30
+ });
31
+ }
32
+ var c = {
33
+ Root: a,
34
+ Trigger: o,
35
+ Panel: s
36
+ };
37
+ //#endregion
38
+ export { c as Collapsible, s as Panel, a as Root, o as Trigger };
39
+
40
+ //# sourceMappingURL=Collapsible.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Collapsible.js","names":[],"sources":["../../../src/components/collapsible/Collapsible.tsx"],"sourcesContent":["import { Collapsible as BaseCollapsible } from '@base-ui/react/collapsible'\nimport { ChevronDown } from 'lucide-react'\nimport { cn } from '#/lib/cn'\n\nimport type { ComponentProps, ReactNode } from 'react'\n\n/**\n * Collapsible — Material 3 styled wrapper over Base UI's headless Collapsible.\n * Behaviour/accessibility: Base UI (https://base-ui.com/react/components/collapsible).\n * Visuals: M3 surface, shape, type scale, and state layers — same expansion\n * anatomy as the Accordion (single standalone section instead of a list).\n * Design ref: styling reused from src/components/accordion (see CLAUDE.md).\n *\n * Compound API mirrors Base UI:\n * <Collapsible.Root>\n * <Collapsible.Trigger>Title</Collapsible.Trigger>\n * <Collapsible.Panel>Content</Collapsible.Panel>\n * </Collapsible.Root>\n */\n\nfunction Root({ className, ...props }: ComponentProps<typeof BaseCollapsible.Root>) {\n return (\n <BaseCollapsible.Root\n className={cn(\n 'flex w-full flex-col overflow-hidden rounded-medium bg-surface-container-low text-on-surface',\n className,\n )}\n {...props}\n />\n )\n}\n\ntype TriggerProps = ComponentProps<typeof BaseCollapsible.Trigger> & {\n /** Replace the trailing chevron with a custom node, or `null` to hide it. */\n icon?: ReactNode\n}\n\nfunction Trigger({ className, children, icon, ...props }: TriggerProps) {\n return (\n <BaseCollapsible.Trigger\n className={cn(\n 'group flex w-full cursor-pointer items-center justify-between gap-4',\n 'px-4 py-[18px] text-left text-title-medium text-on-surface',\n 'transition-colors hover:bg-on-surface/[0.08]',\n 'focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-primary',\n 'disabled:cursor-not-allowed disabled:opacity-[0.38]',\n className,\n )}\n {...props}\n >\n {children}\n {icon === undefined ? (\n <ChevronDown\n aria-hidden\n className=\"size-5 shrink-0 text-on-surface-variant transition-transform duration-200 ease-out group-data-[panel-open]:rotate-180\"\n />\n ) : (\n icon\n )}\n </BaseCollapsible.Trigger>\n )\n}\n\nfunction Panel({ className, children, ...props }: ComponentProps<typeof BaseCollapsible.Panel>) {\n return (\n <BaseCollapsible.Panel\n className={cn(\n 'h-(--collapsible-panel-height) overflow-hidden transition-[height] duration-200 ease-out',\n 'data-[ending-style]:h-0 data-[starting-style]:h-0',\n className,\n )}\n {...props}\n >\n <div className=\"px-4 pb-4 text-body-medium text-on-surface-variant\">{children}</div>\n </BaseCollapsible.Panel>\n )\n}\n\nexport const Collapsible = { Root, Trigger, Panel }\nexport { Root, Trigger, Panel }\n"],"mappings":";;;;;AAoBA,SAAS,EAAK,EAAE,cAAW,GAAG,KAAsD;CAClF,OACE,kBAAC,EAAgB,MAAjB;EACE,WAAW,EACT,gGACA,CACF;EACA,GAAI;CACL,CAAA;AAEL;AAOA,SAAS,EAAQ,EAAE,cAAW,aAAU,SAAM,GAAG,KAAuB;CACtE,OACE,kBAAC,EAAgB,SAAjB;EACE,WAAW,EACT,uEACA,8DACA,gDACA,yFACA,uDACA,CACF;EACA,GAAI;YATN,CAWG,GACA,MAAS,KAAA,IACR,kBAAC,GAAD;GACE,eAAA;GACA,WAAU;EACX,CAAA,IAED,CAEqB;;AAE7B;AAEA,SAAS,EAAM,EAAE,cAAW,aAAU,GAAG,KAAuD;CAC9F,OACE,kBAAC,EAAgB,OAAjB;EACE,WAAW,EACT,4FACA,qDACA,CACF;EACA,GAAI;YAEJ,kBAAC,OAAD;GAAK,WAAU;GAAsD;EAAc,CAAA;CAC9D,CAAA;AAE3B;AAEA,IAAa,IAAc;CAAE;CAAM;CAAS;AAAM"}
@@ -0,0 +1 @@
1
+ export { Collapsible, Root, Trigger, Panel } from './Collapsible';
@@ -0,0 +1,2 @@
1
+ import { Collapsible as e, Panel as t, Root as n, Trigger as r } from "./Collapsible.js";
2
+ export { e as Collapsible, t as Panel, n as Root, r as Trigger };
@@ -0,0 +1,113 @@
1
+ import { Combobox as BaseCombobox } from '@base-ui/react/combobox';
2
+ import { ComponentProps } from 'react';
3
+ /**
4
+ * Combobox — Material 3 styled wrapper over Base UI's headless Combobox.
5
+ * Behaviour/accessibility (filtering, listbox semantics, typeahead, chips for
6
+ * multiple selection): Base UI (https://base-ui.com/react/components/combobox).
7
+ * Visuals: M3 "menu anchored to a text field" anatomy — outlined text-field
8
+ * container (56px, extra-small corner, outline → primary on focus), menu popup
9
+ * on surface-container with small corner + level-2 elevation, 48px list items
10
+ * with state layers, input chips for multi-select.
11
+ * Design refs: port/core/ui/components/dropdown, port/core/ui/components/text-field
12
+ * (see CLAUDE.md).
13
+ *
14
+ * Compound API mirrors Base UI:
15
+ * <Combobox.Root items={items}>
16
+ * <Combobox.Label>Fruit</Combobox.Label>
17
+ * <Combobox.InputGroup>
18
+ * <Combobox.Input placeholder="Search…" />
19
+ * <Combobox.Clear />
20
+ * <Combobox.Trigger />
21
+ * </Combobox.InputGroup>
22
+ * <Combobox.Portal>
23
+ * <Combobox.Positioner>
24
+ * <Combobox.Popup>
25
+ * <Combobox.Empty>No results.</Combobox.Empty>
26
+ * <Combobox.List>
27
+ * {(item) => (
28
+ * <Combobox.Item key={item} value={item}>
29
+ * {item}
30
+ * <Combobox.ItemIndicator />
31
+ * </Combobox.Item>
32
+ * )}
33
+ * </Combobox.List>
34
+ * </Combobox.Popup>
35
+ * </Combobox.Positioner>
36
+ * </Combobox.Portal>
37
+ * </Combobox.Root>
38
+ */
39
+ declare const Root: typeof BaseCombobox.Root;
40
+ declare const Portal: import('react').ForwardRefExoticComponent<Omit<import('@base-ui/react').AutocompletePortalProps, "ref"> & import('react').RefAttributes<HTMLDivElement>>;
41
+ declare const Value: typeof BaseCombobox.Value;
42
+ declare const Collection: typeof BaseCombobox.Collection;
43
+ declare const useFilter: typeof BaseCombobox.useFilter;
44
+ declare const useFilteredItems: typeof BaseCombobox.useFilteredItems;
45
+ declare function Label({ className, ...props }: ComponentProps<typeof BaseCombobox.Label>): import("react").JSX.Element;
46
+ /**
47
+ * The M3 outlined text-field container: draws the 56px outlined box around the
48
+ * input and its trailing controls; turns primary on focus-within.
49
+ */
50
+ declare function InputGroup({ className, ...props }: ComponentProps<typeof BaseCombobox.InputGroup>): import("react").JSX.Element;
51
+ /** Borderless by design — the surrounding InputGroup draws the M3 field box. */
52
+ declare function Input({ className, ...props }: ComponentProps<typeof BaseCombobox.Input>): import("react").JSX.Element;
53
+ declare function Trigger({ className, children, ...props }: ComponentProps<typeof BaseCombobox.Trigger>): import("react").JSX.Element;
54
+ /** Chevron wrapper; flips while the popup is open (parent Trigger is `group`). */
55
+ declare function Icon({ className, ...props }: ComponentProps<typeof BaseCombobox.Icon>): import("react").JSX.Element;
56
+ /** Clears the value; only mounted while there is something to clear. */
57
+ declare function Clear({ className, children, ...props }: ComponentProps<typeof BaseCombobox.Clear>): import("react").JSX.Element;
58
+ declare function Backdrop({ className, ...props }: ComponentProps<typeof BaseCombobox.Backdrop>): import("react").JSX.Element;
59
+ declare function Positioner({ className, ...props }: ComponentProps<typeof BaseCombobox.Positioner>): import("react").JSX.Element;
60
+ /** M3 menu container: surface-container, small corner, level-2 elevation. */
61
+ declare function Popup({ className, ...props }: ComponentProps<typeof BaseCombobox.Popup>): import("react").JSX.Element;
62
+ declare function Arrow({ className, ...props }: ComponentProps<typeof BaseCombobox.Arrow>): import("react").JSX.Element;
63
+ declare function List({ className, ...props }: ComponentProps<typeof BaseCombobox.List>): import("react").JSX.Element;
64
+ /** Polite screen-reader status region (e.g. async loading); stays mounted. */
65
+ declare function Status({ className, ...props }: ComponentProps<typeof BaseCombobox.Status>): import("react").JSX.Element;
66
+ /** Shown only when the filtered list is empty; collapses otherwise. */
67
+ declare function Empty({ className, ...props }: ComponentProps<typeof BaseCombobox.Empty>): import("react").JSX.Element;
68
+ declare function Group({ className, ...props }: ComponentProps<typeof BaseCombobox.Group>): import("react").JSX.Element;
69
+ /** M3 list subheader. */
70
+ declare function GroupLabel({ className, ...props }: ComponentProps<typeof BaseCombobox.GroupLabel>): import("react").JSX.Element;
71
+ /** M3 menu item: 48px row, label-large, hover/highlight state layers. */
72
+ declare function Item({ className, ...props }: ComponentProps<typeof BaseCombobox.Item>): import("react").JSX.Element;
73
+ /** Trailing selected check (primary role); only mounted while selected. */
74
+ declare function ItemIndicator({ className, children, ...props }: ComponentProps<typeof BaseCombobox.ItemIndicator>): import("react").JSX.Element;
75
+ /** Wraps selected-value chips and the inline input in multiple mode. */
76
+ declare function Chips({ className, ...props }: ComponentProps<typeof BaseCombobox.Chips>): import("react").JSX.Element;
77
+ /** M3 input chip: 32px, small corner, outlined. */
78
+ declare function Chip({ className, ...props }: ComponentProps<typeof BaseCombobox.Chip>): import("react").JSX.Element;
79
+ declare function ChipRemove({ className, children, ...props }: ComponentProps<typeof BaseCombobox.ChipRemove>): import("react").JSX.Element;
80
+ /** Single row of items when the listbox is in grid mode. */
81
+ declare function Row({ className, ...props }: ComponentProps<typeof BaseCombobox.Row>): import("react").JSX.Element;
82
+ declare function Separator({ className, ...props }: ComponentProps<typeof BaseCombobox.Separator>): import("react").JSX.Element;
83
+ export declare const Combobox: {
84
+ Root: typeof BaseCombobox.Root;
85
+ Label: typeof Label;
86
+ Value: typeof BaseCombobox.Value;
87
+ Input: typeof Input;
88
+ InputGroup: typeof InputGroup;
89
+ Trigger: typeof Trigger;
90
+ List: typeof List;
91
+ Status: typeof Status;
92
+ Portal: import('react').ForwardRefExoticComponent<Omit<import('@base-ui/react').AutocompletePortalProps, "ref"> & import('react').RefAttributes<HTMLDivElement>>;
93
+ Backdrop: typeof Backdrop;
94
+ Positioner: typeof Positioner;
95
+ Popup: typeof Popup;
96
+ Arrow: typeof Arrow;
97
+ Icon: typeof Icon;
98
+ Group: typeof Group;
99
+ GroupLabel: typeof GroupLabel;
100
+ Item: typeof Item;
101
+ ItemIndicator: typeof ItemIndicator;
102
+ Chips: typeof Chips;
103
+ Chip: typeof Chip;
104
+ ChipRemove: typeof ChipRemove;
105
+ Row: typeof Row;
106
+ Collection: typeof BaseCombobox.Collection;
107
+ Empty: typeof Empty;
108
+ Clear: typeof Clear;
109
+ Separator: typeof Separator;
110
+ useFilter: typeof BaseCombobox.useFilter;
111
+ useFilteredItems: typeof BaseCombobox.useFilteredItems;
112
+ };
113
+ export { Root, Label, Value, Input, InputGroup, Trigger, List, Status, Portal, Backdrop, Positioner, Popup, Arrow, Icon, Group, GroupLabel, Item, ItemIndicator, Chips, Chip, ChipRemove, Row, Collection, Empty, Clear, Separator, useFilter, useFilteredItems, };
@@ -0,0 +1,189 @@
1
+ import { cn as e } from "../../lib/cn.js";
2
+ import { Check as t, ChevronDown as n, X as r } from "lucide-react";
3
+ import { jsx as i } from "react/jsx-runtime";
4
+ import { Combobox as a } from "@base-ui/react/combobox";
5
+ //#region src/components/combobox/Combobox.tsx
6
+ var o = a.Root, s = a.Portal, c = a.Value, l = a.Collection, u = a.useFilter, d = a.useFilteredItems;
7
+ function f({ className: t, ...n }) {
8
+ return /* @__PURE__ */ i(a.Label, {
9
+ className: e("mb-1.5 block text-label-large text-on-surface", t),
10
+ ...n
11
+ });
12
+ }
13
+ function p({ className: t, ...n }) {
14
+ return /* @__PURE__ */ i(a.InputGroup, {
15
+ className: e("flex min-h-14 w-full flex-wrap items-center gap-1 py-1 pl-4 pr-2", "rounded-extra-small border border-outline bg-surface text-on-surface", "transition-colors", "focus-within:border-primary focus-within:outline-2 focus-within:-outline-offset-2 focus-within:outline-primary", "data-[disabled]:pointer-events-none data-[disabled]:opacity-[0.38]", t),
16
+ ...n
17
+ });
18
+ }
19
+ function m({ className: t, ...n }) {
20
+ return /* @__PURE__ */ i(a.Input, {
21
+ className: e("h-12 min-w-12 flex-1 bg-transparent text-body-large text-on-surface", "outline-none placeholder:text-on-surface-variant", "disabled:cursor-not-allowed", t),
22
+ ...n
23
+ });
24
+ }
25
+ function h({ className: t, children: r, ...o }) {
26
+ return /* @__PURE__ */ i(a.Trigger, {
27
+ className: e("group flex size-8 shrink-0 cursor-pointer items-center justify-center rounded-full", "text-on-surface-variant transition-colors hover:bg-on-surface/[0.08]", "focus-visible:outline-2 focus-visible:outline-primary", "disabled:cursor-not-allowed disabled:opacity-[0.38]", t),
28
+ ...o,
29
+ children: r ?? /* @__PURE__ */ i(g, { children: /* @__PURE__ */ i(n, {
30
+ "aria-hidden": !0,
31
+ className: "size-5"
32
+ }) })
33
+ });
34
+ }
35
+ function g({ className: t, ...n }) {
36
+ return /* @__PURE__ */ i(a.Icon, {
37
+ className: e("flex transition-transform duration-200 ease-out group-data-[popup-open]:rotate-180", t),
38
+ ...n
39
+ });
40
+ }
41
+ function _({ className: t, children: n, ...o }) {
42
+ return /* @__PURE__ */ i(a.Clear, {
43
+ className: e("flex size-8 shrink-0 cursor-pointer items-center justify-center rounded-full", "text-on-surface-variant transition-opacity hover:bg-on-surface/[0.08]", "focus-visible:outline-2 focus-visible:outline-primary", "data-[ending-style]:opacity-0 data-[starting-style]:opacity-0", "disabled:cursor-not-allowed disabled:opacity-[0.38]", t),
44
+ ...o,
45
+ children: n ?? /* @__PURE__ */ i(r, {
46
+ "aria-hidden": !0,
47
+ className: "size-4"
48
+ })
49
+ });
50
+ }
51
+ function v({ className: t, ...n }) {
52
+ return /* @__PURE__ */ i(a.Backdrop, {
53
+ className: e("fixed inset-0 z-40", t),
54
+ ...n
55
+ });
56
+ }
57
+ function y({ className: t, ...n }) {
58
+ return /* @__PURE__ */ i(a.Positioner, {
59
+ sideOffset: 4,
60
+ className: e("z-50 outline-none", t),
61
+ ...n
62
+ });
63
+ }
64
+ function b({ className: t, ...n }) {
65
+ return /* @__PURE__ */ i(a.Popup, {
66
+ className: e("max-h-[min(24rem,var(--available-height))] w-(--anchor-width) overflow-y-auto overscroll-contain", "rounded-small bg-surface-container py-2 text-on-surface shadow-mm-2", "origin-(--transform-origin) transition-[transform,opacity] duration-150 ease-out", "outline-none data-[ending-style]:scale-95 data-[ending-style]:opacity-0", "data-[starting-style]:scale-95 data-[starting-style]:opacity-0", t),
67
+ ...n
68
+ });
69
+ }
70
+ function x({ className: t, ...n }) {
71
+ return /* @__PURE__ */ i(a.Arrow, {
72
+ className: e("flex", t),
73
+ ...n
74
+ });
75
+ }
76
+ function S({ className: t, ...n }) {
77
+ return /* @__PURE__ */ i(a.List, {
78
+ className: e("outline-none", t),
79
+ ...n
80
+ });
81
+ }
82
+ function C({ className: t, ...n }) {
83
+ return /* @__PURE__ */ i(a.Status, {
84
+ className: e("px-4 py-2 text-body-small text-on-surface-variant empty:p-0", t),
85
+ ...n
86
+ });
87
+ }
88
+ function w({ className: t, ...n }) {
89
+ return /* @__PURE__ */ i(a.Empty, {
90
+ className: e("px-4 py-3 text-body-medium text-on-surface-variant empty:p-0", t),
91
+ ...n
92
+ });
93
+ }
94
+ function T({ className: t, ...n }) {
95
+ return /* @__PURE__ */ i(a.Group, {
96
+ className: e(t),
97
+ ...n
98
+ });
99
+ }
100
+ function E({ className: t, ...n }) {
101
+ return /* @__PURE__ */ i(a.GroupLabel, {
102
+ className: e("px-4 pb-1 pt-3 text-label-medium text-on-surface-variant", t),
103
+ ...n
104
+ });
105
+ }
106
+ function D({ className: t, ...n }) {
107
+ return /* @__PURE__ */ i(a.Item, {
108
+ className: e("flex min-h-12 cursor-pointer select-none items-center gap-3 px-4", "text-label-large text-on-surface outline-none transition-colors", "data-[highlighted]:bg-on-surface/[0.08]", "data-[disabled]:cursor-not-allowed data-[disabled]:opacity-[0.38]", t),
109
+ ...n
110
+ });
111
+ }
112
+ function O({ className: n, children: r, ...o }) {
113
+ return /* @__PURE__ */ i(a.ItemIndicator, {
114
+ className: e("ml-auto flex shrink-0 items-center text-primary", n),
115
+ ...o,
116
+ children: r ?? /* @__PURE__ */ i(t, {
117
+ "aria-hidden": !0,
118
+ className: "size-5"
119
+ })
120
+ });
121
+ }
122
+ function k({ className: t, ...n }) {
123
+ return /* @__PURE__ */ i(a.Chips, {
124
+ className: e("flex flex-1 flex-wrap items-center gap-1.5", t),
125
+ ...n
126
+ });
127
+ }
128
+ function A({ className: t, ...n }) {
129
+ return /* @__PURE__ */ i(a.Chip, {
130
+ className: e("flex h-8 cursor-default items-center gap-1 rounded-small border border-outline-variant", "bg-surface-container-low pl-3 pr-1 text-label-large text-on-surface", "data-[disabled]:cursor-not-allowed data-[disabled]:opacity-[0.38]", t),
131
+ ...n
132
+ });
133
+ }
134
+ function j({ className: t, children: n, ...o }) {
135
+ return /* @__PURE__ */ i(a.ChipRemove, {
136
+ className: e("flex size-6 cursor-pointer items-center justify-center rounded-full", "text-on-surface-variant transition-colors hover:bg-on-surface/[0.08]", "focus-visible:outline-2 focus-visible:outline-primary", t),
137
+ ...o,
138
+ children: n ?? /* @__PURE__ */ i(r, {
139
+ "aria-hidden": !0,
140
+ className: "size-4"
141
+ })
142
+ });
143
+ }
144
+ function M({ className: t, ...n }) {
145
+ return /* @__PURE__ */ i(a.Row, {
146
+ className: e("flex", t),
147
+ ...n
148
+ });
149
+ }
150
+ function N({ className: t, ...n }) {
151
+ return /* @__PURE__ */ i(a.Separator, {
152
+ className: e("mx-4 my-2 h-px bg-outline-variant", t),
153
+ ...n
154
+ });
155
+ }
156
+ var P = {
157
+ Root: o,
158
+ Label: f,
159
+ Value: c,
160
+ Input: m,
161
+ InputGroup: p,
162
+ Trigger: h,
163
+ List: S,
164
+ Status: C,
165
+ Portal: s,
166
+ Backdrop: v,
167
+ Positioner: y,
168
+ Popup: b,
169
+ Arrow: x,
170
+ Icon: g,
171
+ Group: T,
172
+ GroupLabel: E,
173
+ Item: D,
174
+ ItemIndicator: O,
175
+ Chips: k,
176
+ Chip: A,
177
+ ChipRemove: j,
178
+ Row: M,
179
+ Collection: l,
180
+ Empty: w,
181
+ Clear: _,
182
+ Separator: N,
183
+ useFilter: u,
184
+ useFilteredItems: d
185
+ };
186
+ //#endregion
187
+ export { x as Arrow, v as Backdrop, A as Chip, j as ChipRemove, k as Chips, _ as Clear, l as Collection, P as Combobox, w as Empty, T as Group, E as GroupLabel, g as Icon, m as Input, p as InputGroup, D as Item, O as ItemIndicator, f as Label, S as List, b as Popup, s as Portal, y as Positioner, o as Root, M as Row, N as Separator, C as Status, h as Trigger, c as Value, u as useFilter, d as useFilteredItems };
188
+
189
+ //# sourceMappingURL=Combobox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Combobox.js","names":[],"sources":["../../../src/components/combobox/Combobox.tsx"],"sourcesContent":["import { Combobox as BaseCombobox } from '@base-ui/react/combobox'\nimport { Check, ChevronDown, X } from 'lucide-react'\nimport { cn } from '#/lib/cn'\n\nimport type { ComponentProps } from 'react'\n\n/**\n * Combobox — Material 3 styled wrapper over Base UI's headless Combobox.\n * Behaviour/accessibility (filtering, listbox semantics, typeahead, chips for\n * multiple selection): Base UI (https://base-ui.com/react/components/combobox).\n * Visuals: M3 \"menu anchored to a text field\" anatomy — outlined text-field\n * container (56px, extra-small corner, outline → primary on focus), menu popup\n * on surface-container with small corner + level-2 elevation, 48px list items\n * with state layers, input chips for multi-select.\n * Design refs: port/core/ui/components/dropdown, port/core/ui/components/text-field\n * (see CLAUDE.md).\n *\n * Compound API mirrors Base UI:\n * <Combobox.Root items={items}>\n * <Combobox.Label>Fruit</Combobox.Label>\n * <Combobox.InputGroup>\n * <Combobox.Input placeholder=\"Search…\" />\n * <Combobox.Clear />\n * <Combobox.Trigger />\n * </Combobox.InputGroup>\n * <Combobox.Portal>\n * <Combobox.Positioner>\n * <Combobox.Popup>\n * <Combobox.Empty>No results.</Combobox.Empty>\n * <Combobox.List>\n * {(item) => (\n * <Combobox.Item key={item} value={item}>\n * {item}\n * <Combobox.ItemIndicator />\n * </Combobox.Item>\n * )}\n * </Combobox.List>\n * </Combobox.Popup>\n * </Combobox.Positioner>\n * </Combobox.Portal>\n * </Combobox.Root>\n */\n\n// These parts render no HTML element of their own (Root/Portal/Value/Collection),\n// so there is nothing to style — re-export them directly (preserves Root's generics).\nconst Root = BaseCombobox.Root\nconst Portal = BaseCombobox.Portal\nconst Value = BaseCombobox.Value\nconst Collection = BaseCombobox.Collection\n\n// Filtering hooks, re-exported for convenience.\nconst useFilter = BaseCombobox.useFilter\nconst useFilteredItems = BaseCombobox.useFilteredItems\n\nfunction Label({ className, ...props }: ComponentProps<typeof BaseCombobox.Label>) {\n return (\n <BaseCombobox.Label\n className={cn('mb-1.5 block text-label-large text-on-surface', className)}\n {...props}\n />\n )\n}\n\n/**\n * The M3 outlined text-field container: draws the 56px outlined box around the\n * input and its trailing controls; turns primary on focus-within.\n */\nfunction InputGroup({ className, ...props }: ComponentProps<typeof BaseCombobox.InputGroup>) {\n return (\n <BaseCombobox.InputGroup\n className={cn(\n 'flex min-h-14 w-full flex-wrap items-center gap-1 py-1 pl-4 pr-2',\n 'rounded-extra-small border border-outline bg-surface text-on-surface',\n 'transition-colors',\n 'focus-within:border-primary focus-within:outline-2 focus-within:-outline-offset-2 focus-within:outline-primary',\n 'data-[disabled]:pointer-events-none data-[disabled]:opacity-[0.38]',\n className,\n )}\n {...props}\n />\n )\n}\n\n/** Borderless by design — the surrounding InputGroup draws the M3 field box. */\nfunction Input({ className, ...props }: ComponentProps<typeof BaseCombobox.Input>) {\n return (\n <BaseCombobox.Input\n className={cn(\n 'h-12 min-w-12 flex-1 bg-transparent text-body-large text-on-surface',\n 'outline-none placeholder:text-on-surface-variant',\n 'disabled:cursor-not-allowed',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction Trigger({ className, children, ...props }: ComponentProps<typeof BaseCombobox.Trigger>) {\n return (\n <BaseCombobox.Trigger\n className={cn(\n 'group flex size-8 shrink-0 cursor-pointer items-center justify-center rounded-full',\n 'text-on-surface-variant transition-colors hover:bg-on-surface/[0.08]',\n 'focus-visible:outline-2 focus-visible:outline-primary',\n 'disabled:cursor-not-allowed disabled:opacity-[0.38]',\n className,\n )}\n {...props}\n >\n {children ?? (\n <Icon>\n <ChevronDown aria-hidden className=\"size-5\" />\n </Icon>\n )}\n </BaseCombobox.Trigger>\n )\n}\n\n/** Chevron wrapper; flips while the popup is open (parent Trigger is `group`). */\nfunction Icon({ className, ...props }: ComponentProps<typeof BaseCombobox.Icon>) {\n return (\n <BaseCombobox.Icon\n className={cn(\n 'flex transition-transform duration-200 ease-out group-data-[popup-open]:rotate-180',\n className,\n )}\n {...props}\n />\n )\n}\n\n/** Clears the value; only mounted while there is something to clear. */\nfunction Clear({ className, children, ...props }: ComponentProps<typeof BaseCombobox.Clear>) {\n return (\n <BaseCombobox.Clear\n className={cn(\n 'flex size-8 shrink-0 cursor-pointer items-center justify-center rounded-full',\n 'text-on-surface-variant transition-opacity hover:bg-on-surface/[0.08]',\n 'focus-visible:outline-2 focus-visible:outline-primary',\n 'data-[ending-style]:opacity-0 data-[starting-style]:opacity-0',\n 'disabled:cursor-not-allowed disabled:opacity-[0.38]',\n className,\n )}\n {...props}\n >\n {children ?? <X aria-hidden className=\"size-4\" />}\n </BaseCombobox.Clear>\n )\n}\n\nfunction Backdrop({ className, ...props }: ComponentProps<typeof BaseCombobox.Backdrop>) {\n return <BaseCombobox.Backdrop className={cn('fixed inset-0 z-40', className)} {...props} />\n}\n\nfunction Positioner({ className, ...props }: ComponentProps<typeof BaseCombobox.Positioner>) {\n return (\n <BaseCombobox.Positioner\n sideOffset={4}\n className={cn('z-50 outline-none', className)}\n {...props}\n />\n )\n}\n\n/** M3 menu container: surface-container, small corner, level-2 elevation. */\nfunction Popup({ className, ...props }: ComponentProps<typeof BaseCombobox.Popup>) {\n return (\n <BaseCombobox.Popup\n className={cn(\n 'max-h-[min(24rem,var(--available-height))] w-(--anchor-width) overflow-y-auto overscroll-contain',\n 'rounded-small bg-surface-container py-2 text-on-surface shadow-mm-2',\n 'origin-(--transform-origin) transition-[transform,opacity] duration-150 ease-out',\n 'outline-none data-[ending-style]:scale-95 data-[ending-style]:opacity-0',\n 'data-[starting-style]:scale-95 data-[starting-style]:opacity-0',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction Arrow({ className, ...props }: ComponentProps<typeof BaseCombobox.Arrow>) {\n return <BaseCombobox.Arrow className={cn('flex', className)} {...props} />\n}\n\nfunction List({ className, ...props }: ComponentProps<typeof BaseCombobox.List>) {\n return <BaseCombobox.List className={cn('outline-none', className)} {...props} />\n}\n\n/** Polite screen-reader status region (e.g. async loading); stays mounted. */\nfunction Status({ className, ...props }: ComponentProps<typeof BaseCombobox.Status>) {\n return (\n <BaseCombobox.Status\n className={cn('px-4 py-2 text-body-small text-on-surface-variant empty:p-0', className)}\n {...props}\n />\n )\n}\n\n/** Shown only when the filtered list is empty; collapses otherwise. */\nfunction Empty({ className, ...props }: ComponentProps<typeof BaseCombobox.Empty>) {\n return (\n <BaseCombobox.Empty\n className={cn('px-4 py-3 text-body-medium text-on-surface-variant empty:p-0', className)}\n {...props}\n />\n )\n}\n\nfunction Group({ className, ...props }: ComponentProps<typeof BaseCombobox.Group>) {\n return <BaseCombobox.Group className={cn(className)} {...props} />\n}\n\n/** M3 list subheader. */\nfunction GroupLabel({ className, ...props }: ComponentProps<typeof BaseCombobox.GroupLabel>) {\n return (\n <BaseCombobox.GroupLabel\n className={cn('px-4 pb-1 pt-3 text-label-medium text-on-surface-variant', className)}\n {...props}\n />\n )\n}\n\n/** M3 menu item: 48px row, label-large, hover/highlight state layers. */\nfunction Item({ className, ...props }: ComponentProps<typeof BaseCombobox.Item>) {\n return (\n <BaseCombobox.Item\n className={cn(\n 'flex min-h-12 cursor-pointer select-none items-center gap-3 px-4',\n 'text-label-large text-on-surface outline-none transition-colors',\n 'data-[highlighted]:bg-on-surface/[0.08]',\n 'data-[disabled]:cursor-not-allowed data-[disabled]:opacity-[0.38]',\n className,\n )}\n {...props}\n />\n )\n}\n\n/** Trailing selected check (primary role); only mounted while selected. */\nfunction ItemIndicator({\n className,\n children,\n ...props\n}: ComponentProps<typeof BaseCombobox.ItemIndicator>) {\n return (\n <BaseCombobox.ItemIndicator\n className={cn('ml-auto flex shrink-0 items-center text-primary', className)}\n {...props}\n >\n {children ?? <Check aria-hidden className=\"size-5\" />}\n </BaseCombobox.ItemIndicator>\n )\n}\n\n/** Wraps selected-value chips and the inline input in multiple mode. */\nfunction Chips({ className, ...props }: ComponentProps<typeof BaseCombobox.Chips>) {\n return (\n <BaseCombobox.Chips\n className={cn('flex flex-1 flex-wrap items-center gap-1.5', className)}\n {...props}\n />\n )\n}\n\n/** M3 input chip: 32px, small corner, outlined. */\nfunction Chip({ className, ...props }: ComponentProps<typeof BaseCombobox.Chip>) {\n return (\n <BaseCombobox.Chip\n className={cn(\n 'flex h-8 cursor-default items-center gap-1 rounded-small border border-outline-variant',\n 'bg-surface-container-low pl-3 pr-1 text-label-large text-on-surface',\n 'data-[disabled]:cursor-not-allowed data-[disabled]:opacity-[0.38]',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction ChipRemove({\n className,\n children,\n ...props\n}: ComponentProps<typeof BaseCombobox.ChipRemove>) {\n return (\n <BaseCombobox.ChipRemove\n className={cn(\n 'flex size-6 cursor-pointer items-center justify-center rounded-full',\n 'text-on-surface-variant transition-colors hover:bg-on-surface/[0.08]',\n 'focus-visible:outline-2 focus-visible:outline-primary',\n className,\n )}\n {...props}\n >\n {children ?? <X aria-hidden className=\"size-4\" />}\n </BaseCombobox.ChipRemove>\n )\n}\n\n/** Single row of items when the listbox is in grid mode. */\nfunction Row({ className, ...props }: ComponentProps<typeof BaseCombobox.Row>) {\n return <BaseCombobox.Row className={cn('flex', className)} {...props} />\n}\n\nfunction Separator({ className, ...props }: ComponentProps<typeof BaseCombobox.Separator>) {\n return (\n <BaseCombobox.Separator\n className={cn('mx-4 my-2 h-px bg-outline-variant', className)}\n {...props}\n />\n )\n}\n\nexport const Combobox = {\n Root,\n Label,\n Value,\n Input,\n InputGroup,\n Trigger,\n List,\n Status,\n Portal,\n Backdrop,\n Positioner,\n Popup,\n Arrow,\n Icon,\n Group,\n GroupLabel,\n Item,\n ItemIndicator,\n Chips,\n Chip,\n ChipRemove,\n Row,\n Collection,\n Empty,\n Clear,\n Separator,\n useFilter,\n useFilteredItems,\n}\nexport {\n Root,\n Label,\n Value,\n Input,\n InputGroup,\n Trigger,\n List,\n Status,\n Portal,\n Backdrop,\n Positioner,\n Popup,\n Arrow,\n Icon,\n Group,\n GroupLabel,\n Item,\n ItemIndicator,\n Chips,\n Chip,\n ChipRemove,\n Row,\n Collection,\n Empty,\n Clear,\n Separator,\n useFilter,\n useFilteredItems,\n}\n"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export { Combobox, Root, Label, Value, Input, InputGroup, Trigger, List, Status, Portal, Backdrop, Positioner, Popup, Arrow, Icon, Group, GroupLabel, Item, ItemIndicator, Chips, Chip, ChipRemove, Row, Collection, Empty, Clear, Separator, useFilter, useFilteredItems, } from './Combobox';
@@ -0,0 +1,2 @@
1
+ import { Arrow as e, Backdrop as t, Chip as n, ChipRemove as r, Chips as i, Clear as a, Collection as o, Combobox as s, Empty as c, Group as l, GroupLabel as u, Icon as d, Input as f, InputGroup as p, Item as m, ItemIndicator as h, Label as g, List as _, Popup as v, Portal as y, Positioner as b, Root as x, Row as S, Separator as C, Status as w, Trigger as T, Value as E, useFilter as D, useFilteredItems as O } from "./Combobox.js";
2
+ export { e as Arrow, t as Backdrop, n as Chip, r as ChipRemove, i as Chips, a as Clear, o as Collection, s as Combobox, c as Empty, l as Group, u as GroupLabel, d as Icon, f as Input, p as InputGroup, m as Item, h as ItemIndicator, g as Label, _ as List, v as Popup, y as Portal, b as Positioner, x as Root, S as Row, C as Separator, w as Status, T as Trigger, E as Value, D as useFilter, O as useFilteredItems };
@@ -0,0 +1,37 @@
1
+ import { Command as CommandPrimitive } from 'cmdk';
2
+ import { ComponentProps } from 'react';
3
+ declare function Root({ className, ...props }: ComponentProps<typeof CommandPrimitive>): import("react").JSX.Element;
4
+ /** Search row — M3 search view header: 56dp, leading icon, bare body-large input. */
5
+ declare function Input({ className, ...props }: ComponentProps<typeof CommandPrimitive.Input>): import("react").JSX.Element;
6
+ declare function List({ className, ...props }: ComponentProps<typeof CommandPrimitive.List>): import("react").JSX.Element;
7
+ /** Rendered by cmdk only when no item matches the query. */
8
+ declare function Empty({ className, ...props }: ComponentProps<typeof CommandPrimitive.Empty>): import("react").JSX.Element;
9
+ /** Group with optional `heading` — M3 list subheader: label-small, on-surface-variant. */
10
+ declare function Group({ className, ...props }: ComponentProps<typeof CommandPrimitive.Group>): import("react").JSX.Element;
11
+ /** Command — M3 menu item: 48dp row, label-large, on-surface 8% selected layer. */
12
+ declare function Item({ className, ...props }: ComponentProps<typeof CommandPrimitive.Item>): import("react").JSX.Element;
13
+ declare function Separator({ className, ...props }: ComponentProps<typeof CommandPrimitive.Separator>): import("react").JSX.Element;
14
+ /** Render conditionally while resolving async items. */
15
+ declare function Loading({ className, ...props }: ComponentProps<typeof CommandPrimitive.Loading>): import("react").JSX.Element;
16
+ /** Trailing keyboard-shortcut hint — not a cmdk part, just a styled span. */
17
+ declare function Shortcut({ className, ...props }: ComponentProps<'span'>): import("react").JSX.Element;
18
+ /**
19
+ * Modal command palette — cmdk's Radix-based Dialog with M3 chrome:
20
+ * full-screen scrim overlay, palette centered horizontally at ~20vh.
21
+ * `className` styles the inner Command root; children are the usual
22
+ * Input/List parts. Pass `label` for the accessible name.
23
+ */
24
+ declare function CommandDialog({ className, overlayClassName, contentClassName, ...props }: ComponentProps<typeof CommandPrimitive.Dialog>): import("react").JSX.Element;
25
+ export declare const Command: {
26
+ Root: typeof Root;
27
+ Input: typeof Input;
28
+ List: typeof List;
29
+ Empty: typeof Empty;
30
+ Group: typeof Group;
31
+ Item: typeof Item;
32
+ Separator: typeof Separator;
33
+ Loading: typeof Loading;
34
+ Shortcut: typeof Shortcut;
35
+ Dialog: typeof CommandDialog;
36
+ };
37
+ export { Root, Input, List, Empty, Group, Item, Separator, Loading, Shortcut, CommandDialog, };