sherick-ui 2.9.0 → 2.11.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 (284) hide show
  1. package/README.md +32 -0
  2. package/dist/cjs/components/Accordion.cjs +14 -26
  3. package/dist/cjs/components/Accordion.cjs.map +1 -1
  4. package/dist/cjs/components/Alert.cjs +60 -19
  5. package/dist/cjs/components/Alert.cjs.map +1 -1
  6. package/dist/cjs/components/AlertDialog.cjs +5 -3
  7. package/dist/cjs/components/AlertDialog.cjs.map +1 -1
  8. package/dist/cjs/components/Avatar.cjs +12 -3
  9. package/dist/cjs/components/Avatar.cjs.map +1 -1
  10. package/dist/cjs/components/Badge.cjs +5 -3
  11. package/dist/cjs/components/Badge.cjs.map +1 -1
  12. package/dist/cjs/components/Breadcrumb.cjs +8 -4
  13. package/dist/cjs/components/Breadcrumb.cjs.map +1 -1
  14. package/dist/cjs/components/Button.cjs +14 -4
  15. package/dist/cjs/components/Button.cjs.map +1 -1
  16. package/dist/cjs/components/Calendar.cjs +39 -4
  17. package/dist/cjs/components/Calendar.cjs.map +1 -1
  18. package/dist/cjs/components/Card.cjs +10 -6
  19. package/dist/cjs/components/Card.cjs.map +1 -1
  20. package/dist/cjs/components/Checkbox.cjs +15 -3
  21. package/dist/cjs/components/Checkbox.cjs.map +1 -1
  22. package/dist/cjs/components/CheckboxGroup.cjs +3 -2
  23. package/dist/cjs/components/CheckboxGroup.cjs.map +1 -1
  24. package/dist/cjs/components/Chip.cjs +53 -43
  25. package/dist/cjs/components/Chip.cjs.map +1 -1
  26. package/dist/cjs/components/ChipGroup.cjs +17 -0
  27. package/dist/cjs/components/ChipGroup.cjs.map +1 -1
  28. package/dist/cjs/components/Collapsible.cjs +1 -1
  29. package/dist/cjs/components/Collapsible.cjs.map +1 -1
  30. package/dist/cjs/components/Combobox.cjs +58 -14
  31. package/dist/cjs/components/Combobox.cjs.map +1 -1
  32. package/dist/cjs/components/Command.cjs +10 -4
  33. package/dist/cjs/components/Command.cjs.map +1 -1
  34. package/dist/cjs/components/CommandPalette.cjs +5 -2
  35. package/dist/cjs/components/CommandPalette.cjs.map +1 -1
  36. package/dist/cjs/components/DatePicker.cjs +6 -3
  37. package/dist/cjs/components/DatePicker.cjs.map +1 -1
  38. package/dist/cjs/components/DateRangePicker.cjs +3 -2
  39. package/dist/cjs/components/DateRangePicker.cjs.map +1 -1
  40. package/dist/cjs/components/DateTimePicker.cjs +1 -1
  41. package/dist/cjs/components/DateTimePicker.cjs.map +1 -1
  42. package/dist/cjs/components/Dialog.cjs +10 -3
  43. package/dist/cjs/components/Dialog.cjs.map +1 -1
  44. package/dist/cjs/components/DialogContent.cjs +5 -3
  45. package/dist/cjs/components/DialogContent.cjs.map +1 -1
  46. package/dist/cjs/components/DialogDescription.cjs +5 -3
  47. package/dist/cjs/components/DialogDescription.cjs.map +1 -1
  48. package/dist/cjs/components/DialogFooter.cjs +3 -3
  49. package/dist/cjs/components/DialogFooter.cjs.map +1 -1
  50. package/dist/cjs/components/DialogHeader.cjs +5 -3
  51. package/dist/cjs/components/DialogHeader.cjs.map +1 -1
  52. package/dist/cjs/components/DialogSurface.cjs +37 -15
  53. package/dist/cjs/components/DialogSurface.cjs.map +1 -1
  54. package/dist/cjs/components/DismissButton.cjs +24 -0
  55. package/dist/cjs/components/DismissButton.cjs.map +1 -0
  56. package/dist/cjs/components/Divider.cjs +3 -1
  57. package/dist/cjs/components/Divider.cjs.map +1 -1
  58. package/dist/cjs/components/Drawer.cjs +24 -14
  59. package/dist/cjs/components/Drawer.cjs.map +1 -1
  60. package/dist/cjs/components/Field.cjs +47 -2
  61. package/dist/cjs/components/Field.cjs.map +1 -1
  62. package/dist/cjs/components/FieldLabel.cjs +20 -0
  63. package/dist/cjs/components/FieldLabel.cjs.map +1 -0
  64. package/dist/cjs/components/FileUpload.cjs +19 -9
  65. package/dist/cjs/components/FileUpload.cjs.map +1 -1
  66. package/dist/cjs/components/IconButton.cjs +28 -7
  67. package/dist/cjs/components/IconButton.cjs.map +1 -1
  68. package/dist/cjs/components/Input.cjs +14 -5
  69. package/dist/cjs/components/Input.cjs.map +1 -1
  70. package/dist/cjs/components/Menu.cjs +18 -4
  71. package/dist/cjs/components/Menu.cjs.map +1 -1
  72. package/dist/cjs/components/NavGroup.cjs +7 -1
  73. package/dist/cjs/components/NavGroup.cjs.map +1 -1
  74. package/dist/cjs/components/NavItem.cjs +28 -3
  75. package/dist/cjs/components/NavItem.cjs.map +1 -1
  76. package/dist/cjs/components/NumberField.cjs +7 -6
  77. package/dist/cjs/components/NumberField.cjs.map +1 -1
  78. package/dist/cjs/components/Pagination.cjs +42 -8
  79. package/dist/cjs/components/Pagination.cjs.map +1 -1
  80. package/dist/cjs/components/Popover.cjs +13 -5
  81. package/dist/cjs/components/Popover.cjs.map +1 -1
  82. package/dist/cjs/components/Progress.cjs +5 -3
  83. package/dist/cjs/components/Progress.cjs.map +1 -1
  84. package/dist/cjs/components/RadioGroup.cjs +3 -2
  85. package/dist/cjs/components/RadioGroup.cjs.map +1 -1
  86. package/dist/cjs/components/Search.cjs +35 -14
  87. package/dist/cjs/components/Search.cjs.map +1 -1
  88. package/dist/cjs/components/SegmentedControl.cjs +2 -1
  89. package/dist/cjs/components/SegmentedControl.cjs.map +1 -1
  90. package/dist/cjs/components/Select.cjs +14 -4
  91. package/dist/cjs/components/Select.cjs.map +1 -1
  92. package/dist/cjs/components/Skeleton.cjs +5 -3
  93. package/dist/cjs/components/Skeleton.cjs.map +1 -1
  94. package/dist/cjs/components/Slider.cjs +1 -1
  95. package/dist/cjs/components/Slider.cjs.map +1 -1
  96. package/dist/cjs/components/Spinner.cjs +24 -14
  97. package/dist/cjs/components/Spinner.cjs.map +1 -1
  98. package/dist/cjs/components/StatusMark.cjs +43 -0
  99. package/dist/cjs/components/StatusMark.cjs.map +1 -0
  100. package/dist/cjs/components/Stepper.cjs +3 -3
  101. package/dist/cjs/components/Stepper.cjs.map +1 -1
  102. package/dist/cjs/components/Switch.cjs +20 -1
  103. package/dist/cjs/components/Switch.cjs.map +1 -1
  104. package/dist/cjs/components/Table.cjs +15 -7
  105. package/dist/cjs/components/Table.cjs.map +1 -1
  106. package/dist/cjs/components/Tabs.cjs +10 -3
  107. package/dist/cjs/components/Tabs.cjs.map +1 -1
  108. package/dist/cjs/components/Textarea.cjs +8 -4
  109. package/dist/cjs/components/Textarea.cjs.map +1 -1
  110. package/dist/cjs/components/Toast.cjs +47 -34
  111. package/dist/cjs/components/Toast.cjs.map +1 -1
  112. package/dist/cjs/components/ToggleGroup.cjs +14 -3
  113. package/dist/cjs/components/ToggleGroup.cjs.map +1 -1
  114. package/dist/cjs/components/Tooltip.cjs +16 -2
  115. package/dist/cjs/components/Tooltip.cjs.map +1 -1
  116. package/dist/cjs/components/TreeView.cjs +8 -4
  117. package/dist/cjs/components/TreeView.cjs.map +1 -1
  118. package/dist/cjs/components/choice-row.cjs +1 -1
  119. package/dist/cjs/components/choice-row.cjs.map +1 -1
  120. package/dist/cjs/components/date-family.cjs +16 -2
  121. package/dist/cjs/components/date-family.cjs.map +1 -1
  122. package/dist/cjs/components/date-field.cjs +4 -2
  123. package/dist/cjs/components/date-field.cjs.map +1 -1
  124. package/dist/cjs/components/edge-fade.cjs +80 -0
  125. package/dist/cjs/components/edge-fade.cjs.map +1 -0
  126. package/dist/cjs/components/scroll-region.cjs +56 -0
  127. package/dist/cjs/components/scroll-region.cjs.map +1 -0
  128. package/dist/cjs/components/time-panel.cjs +1 -1
  129. package/dist/cjs/components/time-panel.cjs.map +1 -1
  130. package/dist/cjs/components/ui.common.cjs +115 -58
  131. package/dist/cjs/components/ui.common.cjs.map +1 -1
  132. package/dist/cjs/components/ui.motion.cjs +41 -15
  133. package/dist/cjs/components/ui.motion.cjs.map +1 -1
  134. package/dist/cjs/dev.cjs +5 -0
  135. package/dist/cjs/dev.cjs.map +1 -1
  136. package/dist/cjs/index.cjs +1 -0
  137. package/dist/cjs/index.cjs.map +1 -1
  138. package/dist/esm/components/Accordion.js +16 -28
  139. package/dist/esm/components/Accordion.js.map +1 -1
  140. package/dist/esm/components/Alert.js +62 -22
  141. package/dist/esm/components/Alert.js.map +1 -1
  142. package/dist/esm/components/AlertDialog.js +6 -4
  143. package/dist/esm/components/AlertDialog.js.map +1 -1
  144. package/dist/esm/components/Avatar.js +14 -5
  145. package/dist/esm/components/Avatar.js.map +1 -1
  146. package/dist/esm/components/Badge.js +5 -3
  147. package/dist/esm/components/Badge.js.map +1 -1
  148. package/dist/esm/components/Breadcrumb.js +9 -5
  149. package/dist/esm/components/Breadcrumb.js.map +1 -1
  150. package/dist/esm/components/Button.js +14 -4
  151. package/dist/esm/components/Button.js.map +1 -1
  152. package/dist/esm/components/Calendar.js +42 -7
  153. package/dist/esm/components/Calendar.js.map +1 -1
  154. package/dist/esm/components/Card.js +12 -8
  155. package/dist/esm/components/Card.js.map +1 -1
  156. package/dist/esm/components/Checkbox.js +16 -4
  157. package/dist/esm/components/Checkbox.js.map +1 -1
  158. package/dist/esm/components/CheckboxGroup.js +3 -2
  159. package/dist/esm/components/CheckboxGroup.js.map +1 -1
  160. package/dist/esm/components/Chip.js +56 -46
  161. package/dist/esm/components/Chip.js.map +1 -1
  162. package/dist/esm/components/ChipGroup.js +18 -1
  163. package/dist/esm/components/ChipGroup.js.map +1 -1
  164. package/dist/esm/components/CodeBlock.js +58 -28
  165. package/dist/esm/components/CodeBlock.js.map +1 -1
  166. package/dist/esm/components/Collapsible.js +1 -1
  167. package/dist/esm/components/Collapsible.js.map +1 -1
  168. package/dist/esm/components/Combobox.js +62 -18
  169. package/dist/esm/components/Combobox.js.map +1 -1
  170. package/dist/esm/components/Command.js +11 -5
  171. package/dist/esm/components/Command.js.map +1 -1
  172. package/dist/esm/components/CommandPalette.js +7 -4
  173. package/dist/esm/components/CommandPalette.js.map +1 -1
  174. package/dist/esm/components/DatePicker.js +7 -4
  175. package/dist/esm/components/DatePicker.js.map +1 -1
  176. package/dist/esm/components/DateRangePicker.js +4 -3
  177. package/dist/esm/components/DateRangePicker.js.map +1 -1
  178. package/dist/esm/components/DateTimePicker.js +1 -1
  179. package/dist/esm/components/DateTimePicker.js.map +1 -1
  180. package/dist/esm/components/Dialog.js +12 -6
  181. package/dist/esm/components/Dialog.js.map +1 -1
  182. package/dist/esm/components/DialogContent.js +6 -4
  183. package/dist/esm/components/DialogContent.js.map +1 -1
  184. package/dist/esm/components/DialogDescription.js +6 -4
  185. package/dist/esm/components/DialogDescription.js.map +1 -1
  186. package/dist/esm/components/DialogFooter.js +3 -3
  187. package/dist/esm/components/DialogFooter.js.map +1 -1
  188. package/dist/esm/components/DialogHeader.js +5 -3
  189. package/dist/esm/components/DialogHeader.js.map +1 -1
  190. package/dist/esm/components/DialogSurface.js +38 -17
  191. package/dist/esm/components/DialogSurface.js.map +1 -1
  192. package/dist/esm/components/DismissButton.js +20 -0
  193. package/dist/esm/components/DismissButton.js.map +1 -0
  194. package/dist/esm/components/Divider.js +3 -1
  195. package/dist/esm/components/Divider.js.map +1 -1
  196. package/dist/esm/components/Drawer.js +27 -17
  197. package/dist/esm/components/Drawer.js.map +1 -1
  198. package/dist/esm/components/Field.js +49 -6
  199. package/dist/esm/components/Field.js.map +1 -1
  200. package/dist/esm/components/FieldLabel.js +15 -0
  201. package/dist/esm/components/FieldLabel.js.map +1 -0
  202. package/dist/esm/components/FileUpload.js +23 -13
  203. package/dist/esm/components/FileUpload.js.map +1 -1
  204. package/dist/esm/components/IconButton.js +30 -9
  205. package/dist/esm/components/IconButton.js.map +1 -1
  206. package/dist/esm/components/Input.js +15 -6
  207. package/dist/esm/components/Input.js.map +1 -1
  208. package/dist/esm/components/Markdown.js +7 -4
  209. package/dist/esm/components/Markdown.js.map +1 -1
  210. package/dist/esm/components/Menu.js +20 -6
  211. package/dist/esm/components/Menu.js.map +1 -1
  212. package/dist/esm/components/NavGroup.js +8 -2
  213. package/dist/esm/components/NavGroup.js.map +1 -1
  214. package/dist/esm/components/NavItem.js +30 -6
  215. package/dist/esm/components/NavItem.js.map +1 -1
  216. package/dist/esm/components/NumberField.js +8 -7
  217. package/dist/esm/components/NumberField.js.map +1 -1
  218. package/dist/esm/components/Pagination.js +43 -9
  219. package/dist/esm/components/Pagination.js.map +1 -1
  220. package/dist/esm/components/Popover.js +14 -6
  221. package/dist/esm/components/Popover.js.map +1 -1
  222. package/dist/esm/components/Progress.js +5 -3
  223. package/dist/esm/components/Progress.js.map +1 -1
  224. package/dist/esm/components/RadioGroup.js +3 -2
  225. package/dist/esm/components/RadioGroup.js.map +1 -1
  226. package/dist/esm/components/Search.js +36 -15
  227. package/dist/esm/components/Search.js.map +1 -1
  228. package/dist/esm/components/SegmentedControl.js +2 -1
  229. package/dist/esm/components/SegmentedControl.js.map +1 -1
  230. package/dist/esm/components/Select.js +16 -6
  231. package/dist/esm/components/Select.js.map +1 -1
  232. package/dist/esm/components/Skeleton.js +5 -3
  233. package/dist/esm/components/Skeleton.js.map +1 -1
  234. package/dist/esm/components/Slider.js +2 -2
  235. package/dist/esm/components/Slider.js.map +1 -1
  236. package/dist/esm/components/Spinner.js +24 -14
  237. package/dist/esm/components/Spinner.js.map +1 -1
  238. package/dist/esm/components/StatusMark.js +38 -0
  239. package/dist/esm/components/StatusMark.js.map +1 -0
  240. package/dist/esm/components/Stepper.js +4 -4
  241. package/dist/esm/components/Stepper.js.map +1 -1
  242. package/dist/esm/components/Switch.js +21 -2
  243. package/dist/esm/components/Switch.js.map +1 -1
  244. package/dist/esm/components/Table.js +16 -8
  245. package/dist/esm/components/Table.js.map +1 -1
  246. package/dist/esm/components/Tabs.js +11 -4
  247. package/dist/esm/components/Tabs.js.map +1 -1
  248. package/dist/esm/components/Textarea.js +8 -4
  249. package/dist/esm/components/Textarea.js.map +1 -1
  250. package/dist/esm/components/Toast.js +49 -36
  251. package/dist/esm/components/Toast.js.map +1 -1
  252. package/dist/esm/components/ToggleGroup.js +16 -5
  253. package/dist/esm/components/ToggleGroup.js.map +1 -1
  254. package/dist/esm/components/Tooltip.js +17 -4
  255. package/dist/esm/components/Tooltip.js.map +1 -1
  256. package/dist/esm/components/TreeView.js +9 -5
  257. package/dist/esm/components/TreeView.js.map +1 -1
  258. package/dist/esm/components/choice-row.js +1 -1
  259. package/dist/esm/components/choice-row.js.map +1 -1
  260. package/dist/esm/components/date-family.js +15 -3
  261. package/dist/esm/components/date-family.js.map +1 -1
  262. package/dist/esm/components/date-field.js +5 -3
  263. package/dist/esm/components/date-field.js.map +1 -1
  264. package/dist/esm/components/edge-fade.js +77 -0
  265. package/dist/esm/components/edge-fade.js.map +1 -0
  266. package/dist/esm/components/scroll-region.js +52 -0
  267. package/dist/esm/components/scroll-region.js.map +1 -0
  268. package/dist/esm/components/time-panel.js +1 -1
  269. package/dist/esm/components/time-panel.js.map +1 -1
  270. package/dist/esm/components/ui.common.js +115 -60
  271. package/dist/esm/components/ui.common.js.map +1 -1
  272. package/dist/esm/components/ui.motion.js +39 -16
  273. package/dist/esm/components/ui.motion.js.map +1 -1
  274. package/dist/esm/content.js +1 -1
  275. package/dist/esm/dev.js +2 -2
  276. package/dist/esm/index.js +1 -1
  277. package/dist/styles.css +326 -200
  278. package/dist/theme.css +15 -12
  279. package/dist/types/content.d.ts +13 -3
  280. package/dist/types/dev.d.cts +65 -30
  281. package/dist/types/dev.d.ts +65 -30
  282. package/dist/types/index.d.cts +505 -166
  283. package/dist/types/index.d.ts +505 -166
  284. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Collapsible.cjs","sources":["../../../src/components/Collapsible.tsx"],"sourcesContent":["\"use client\";\n\nimport { Collapsible as BaseCollapsible } from \"@base-ui/react/collapsible\";\nimport React, { type ReactNode } from \"react\";\nimport { HugeiconsIcon } from \"@hugeicons/react\";\nimport { ArrowDown01Icon } from \"@hugeicons/core-free-icons\";\nimport { cn } from \"@/libs/utils\";\nimport { disclosure, iconStroke } from \"./ui.common\";\nimport { motionOrient } from \"./ui.motion\";\n\nexport interface CollapsibleProps {\n children: ReactNode;\n /** Whether the region is expanded, when the application owns the state. */\n open?: boolean;\n /** Whether the region starts expanded, for a collapsible that owns its own state. */\n defaultOpen?: boolean;\n /** Base's own open-change callback, event details included. */\n onOpenChange?: BaseCollapsible.Root.Props[\"onOpenChange\"];\n /** Whether the disclosure is inert. */\n disabled?: boolean;\n /** Adds to the disclosure's own column. The row and the panel style themselves. */\n className?: string;\n}\n\nexport interface CollapsibleTriggerProps {\n children: ReactNode;\n /** Adds to the row. The row's shape, tone and states are the disclosure recipe's. */\n className?: string;\n}\n\nexport interface CollapsiblePanelProps {\n children: ReactNode;\n /** Adds to the measured region. The region's height and clipping are the recipe's. */\n className?: string;\n}\n\ntype CollapsibleComponent = ((props: CollapsibleProps) => React.JSX.Element) & {\n Trigger: typeof CollapsibleTrigger;\n Panel: typeof CollapsiblePanel;\n};\n\nconst CollapsibleTrigger = ({ children, className }: CollapsibleTriggerProps) => (\n <BaseCollapsible.Trigger className={cn(disclosure.trigger, className)}>\n <span className={cn(\"min-w-0 flex-1\")}>{children}</span>\n {/* The same affordance, and the same in-place turn, as an `Accordion` row: the two are one\n object at two scopes. */}\n <HugeiconsIcon icon={ArrowDown01Icon}\n aria-hidden=\"true\"\n className={cn(iconStroke.glyph, \"size-4 shrink-0\", motionOrient, \"group-data-[panel-open]:rotate-180\")}\n />\n </BaseCollapsible.Trigger>\n);\n\nconst CollapsiblePanel = ({ children, className }: CollapsiblePanelProps) => (\n <BaseCollapsible.Panel\n className={cn(\n \"[--sui-disclose-height:var(--collapsible-panel-height)]\",\n disclosure.panel,\n className\n )}\n >\n <div className={cn(\"px-4 pb-4 pt-1\")}>{children}</div>\n </BaseCollapsible.Panel>\n);\n\n/**\n * One region that expands where it sits, without belonging to a group. Base UI owns the expanded\n * state and the trigger's `aria-expanded`/`aria-controls` plumbing — including making the\n * trigger's own state reachable, since nothing else in the page holds it; Sherick UI owns the\n * row, the panel's clipping and how the height moves.\n *\n * It is the same object an `Accordion` item is, at the scope of a single disclosure: use a\n * `Collapsible` for one region on its own, and an `Accordion` when several sections belong to\n * one group.\n */\nconst Collapsible = (({ children, className, ...props }: CollapsibleProps) => {\n return (\n <BaseCollapsible.Root {...props} className={cn(\"flex min-w-0 flex-col\", className)}>\n {children}\n </BaseCollapsible.Root>\n );\n}) as CollapsibleComponent;\n\nCollapsible.Trigger = CollapsibleTrigger;\nCollapsible.Panel = CollapsiblePanel;\n\nexport default Collapsible;\n"],"names":["_jsxs","BaseCollapsible","cn","disclosure","_jsx","HugeiconsIcon","ArrowDown01Icon","iconStroke","motionOrient"],"mappings":"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"}
1
+ {"version":3,"file":"Collapsible.cjs","sources":["../../../src/components/Collapsible.tsx"],"sourcesContent":["\"use client\";\n\nimport { Collapsible as BaseCollapsible } from \"@base-ui/react/collapsible\";\nimport React, { type ReactNode } from \"react\";\nimport { HugeiconsIcon } from \"@hugeicons/react\";\nimport { ArrowDown01Icon } from \"@hugeicons/core-free-icons\";\nimport { cn } from \"@/libs/utils\";\nimport { disclosure, iconStroke } from \"./ui.common\";\nimport { motionOrient } from \"./ui.motion\";\n\nexport interface CollapsibleProps {\n children: ReactNode;\n /** Whether the region is expanded, when the application owns the state. */\n open?: boolean;\n /** Whether the region starts expanded, for a collapsible that owns its own state. */\n defaultOpen?: boolean;\n /** Base's own open-change callback, event details included. */\n onOpenChange?: BaseCollapsible.Root.Props[\"onOpenChange\"];\n /** Whether the disclosure is inert. */\n disabled?: boolean;\n /** Adds to the disclosure's own column. The row and the panel style themselves. */\n className?: string;\n}\n\nexport interface CollapsibleTriggerProps {\n children: ReactNode;\n /** Adds to the row. The row's shape, tone and states are the disclosure recipe's. */\n className?: string;\n}\n\nexport interface CollapsiblePanelProps {\n children: ReactNode;\n /** Adds to the measured region. The region's height and clipping are the recipe's. */\n className?: string;\n}\n\ntype CollapsibleComponent = ((props: CollapsibleProps) => React.JSX.Element) & {\n Trigger: typeof CollapsibleTrigger;\n Panel: typeof CollapsiblePanel;\n};\n\nconst CollapsibleTrigger = ({ children, className }: CollapsibleTriggerProps) => (\n <BaseCollapsible.Trigger className={cn(disclosure.trigger, className)}>\n <span className={cn(\"min-w-0 flex-1\")}>{children}</span>\n {/* The same affordance, at the same slot size and with the same in-place turn, as an `Accordion` row:\n the two are one object at two scopes. */}\n <span className={cn(disclosure.chevron)} aria-hidden=\"true\">\n <HugeiconsIcon\n icon={ArrowDown01Icon}\n aria-hidden=\"true\"\n className={cn(iconStroke.glyph, motionOrient, \"group-data-[panel-open]:rotate-180\")}\n />\n </span>\n </BaseCollapsible.Trigger>\n);\n\nconst CollapsiblePanel = ({ children, className }: CollapsiblePanelProps) => (\n <BaseCollapsible.Panel\n className={cn(\n \"[--sui-disclose-height:var(--collapsible-panel-height)]\",\n disclosure.panel,\n className\n )}\n >\n <div className={cn(\"px-4 pb-4 pt-1\")}>{children}</div>\n </BaseCollapsible.Panel>\n);\n\n/**\n * One region that expands where it sits, without belonging to a group. Base UI owns the expanded\n * state and the trigger's `aria-expanded`/`aria-controls` plumbing — including making the\n * trigger's own state reachable, since nothing else in the page holds it; Sherick UI owns the\n * row, the panel's clipping and how the height moves.\n *\n * It is the same object an `Accordion` item is, at the scope of a single disclosure: use a\n * `Collapsible` for one region on its own, and an `Accordion` when several sections belong to\n * one group.\n */\nconst Collapsible = (({ children, className, ...props }: CollapsibleProps) => {\n return (\n <BaseCollapsible.Root {...props} className={cn(\"flex min-w-0 flex-col\", className)}>\n {children}\n </BaseCollapsible.Root>\n );\n}) as CollapsibleComponent;\n\nCollapsible.Trigger = CollapsibleTrigger;\nCollapsible.Panel = CollapsiblePanel;\n\nexport default Collapsible;\n"],"names":["_jsxs","BaseCollapsible","cn","disclosure","_jsx","HugeiconsIcon","ArrowDown01Icon","iconStroke","motionOrient"],"mappings":"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"}
@@ -12,7 +12,17 @@ var utils = require('../libs/utils.cjs');
12
12
  var ui_common = require('./ui.common.cjs');
13
13
  var ui_motion = require('./ui.motion.cjs');
14
14
  var optionGroups = require('./option-groups.cjs');
15
+ var DismissButton = require('./DismissButton.cjs');
16
+ var Spinner = require('./Spinner.cjs');
17
+ var Field = require('./Field.cjs');
15
18
 
19
+ const defaultComboboxLabels = {
20
+ removeChip: (label) => `Remove ${label}`,
21
+ clearAll: "Clear all",
22
+ clearSelection: "Clear selection",
23
+ showOptions: "Show options",
24
+ noResults: "No results found.",
25
+ };
16
26
  const isCreateItem = (item) => item.create === true;
17
27
  const sameText = (a, b) => a.localeCompare(b, undefined, { sensitivity: "accent" }) === 0;
18
28
  /* The composite field's own controls are not standalone `IconButton`s: the field owns their
@@ -24,7 +34,7 @@ const sameText = (a, b) => a.localeCompare(b, undefined, { sensitivity: "accent"
24
34
  a read-only combobox still opens and browses, only its value is fixed. The clear control is
25
35
  handed its own `disabled` for that case because Base itself refuses to clear a read-only
26
36
  control; nothing here has to be derived from Sherick's props. */
27
- const partClassName = `inline-flex shrink-0 items-center justify-center ${ui_common.density.part} ${ui_common.shape.circle} ${ui_common.text.medium} [&>svg]:size-5 ${ui_motion.motionFeedback} ${ui_common.stateLayer.fieldPart} ${ui_common.state.enabled} ${ui_common.state.disabledPart} [&:not([data-disabled]):not(:disabled)]:hover:text-sherick-ink`;
37
+ const partClassName = `inline-flex shrink-0 items-center justify-center ${ui_common.density.part} ${ui_common.shape.circle} ${ui_common.state.quietInk} [&>svg]:size-5 ${ui_motion.motionFeedback} ${ui_common.stateLayer.fieldPart} ${ui_common.state.enabled} ${ui_common.state.disabledPart} ${ui_common.state.busy}`;
28
38
  /* A chosen value inside the field is a held choice riding in the field's tray, so it is the tray's
29
39
  puck: the brightest surface in the view, at `elevation.control`, with its copy at full emphasis. A
30
40
  neutral tonal pill is the tray's own tone, and a row of them read as one grey band rather than as
@@ -33,12 +43,15 @@ const partClassName = `inline-flex shrink-0 items-center justify-center ${ui_com
33
43
  resting height intact around one line of chips. Base gives a chip real focus while the arrow keys
34
44
  walk the row, so the focused chip takes the inset ring — the one this chip is, inside the field's
35
45
  own ring, which keeps marking the field as engaged. */
36
- const valueChipClassName = utils.cn("inline-flex h-7 min-w-0 max-w-full items-center gap-0.5 ps-3 pe-0.5 text-sm leading-5 font-medium outline-none", ui_common.shape.pill, ui_common.puck, ui_common.elevation.control, ui_common.text.high, ui_common.focusRingInset);
46
+ const valueChipClassName = utils.cn("inline-flex h-7 min-w-0 max-w-full items-center gap-0.5 ps-3 pe-0.5 [outline-style:none]", ui_common.shape.pill, ui_common.type.label, ui_common.puck, ui_common.elevation.control, ui_common.text.high, ui_common.focusRingInset);
37
47
  /* The dismiss target is a part of the chip the pointer is already in: 24px clears the pointer
38
- minimum, its circle nests in the chip's pill at the chip's own 2px end inset, and the glyph inside
39
- it takes the press so the target never moves. Base keeps it out of the tab order — Backspace and
40
- Delete remove a focused chip — and marks it disabled with the combobox. */
41
- const chipRemoveClassName = utils.cn("group inline-flex size-6 shrink-0 items-center justify-center", ui_common.shape.circle, ui_common.text.medium, "[&:not([data-disabled]):not(:disabled)]:hover:text-sherick-ink", ui_motion.motionFeedback, ui_common.stateLayer.quiet, ui_common.state.enabled, ui_common.state.disabledPart);
48
+ minimum, its circle nests in the chip's pill at the chip's own 2px end inset, and the 16px mark
49
+ inside it takes the press so the target never moves. `DismissButton` supplies the mark and the
50
+ quiet ink; these classes give it the chip's own geometry in place of the standalone 44px floor. */
51
+ const chipRemoveClassName = "size-6 min-h-0 min-w-0 shrink-0";
52
+ /* The clear control is one part of the field, so it keeps the part's 32px cluster and its 32px hover
53
+ circle, with the 16px dismiss mark inside it. */
54
+ const clearClassName = utils.cn(ui_common.density.part, ui_common.stateLayer.fieldPart, ui_common.state.enabled, ui_common.state.disabledPart);
42
55
  /**
43
56
  * A text field that filters a list of options and selects one of them, or several. It is the
44
57
  * searchable sibling of `Select`: the same option shape, the same value contract and the same box,
@@ -51,7 +64,26 @@ const chipRemoveClassName = utils.cn("group inline-flex size-6 shrink-0 items-ce
51
64
  */
52
65
  const Combobox = React.forwardRef((props, ref) => {
53
66
  var _a, _b, _c;
54
- const { options, multiple, value, defaultValue, onValueChange, creatable, createLabel = (query) => `Add “${query}”`, chipsLabel = "Selected", placeholder = "Select an option", emptyMessage, className, disabled, readOnly, filter, autoHighlight, inputValue, defaultInputValue, onInputValueChange, onOpenChange, ...rootProps } = props;
67
+ const { options, multiple, value, defaultValue, onValueChange, creatable, createLabel = (query) => `Add “${query}”`, chipsLabel = "Selected", placeholder = "Select an option", emptyMessage, loading = false, size = "md", labels, className, popupClassName, disabled, readOnly, filter, autoHighlight, inputValue, defaultInputValue, onInputValueChange, onOpenChange, ...rootProps } = props;
68
+ const copy = { ...defaultComboboxLabels, ...labels };
69
+ /* The field's own box, so a chip that is removed can find the chips and the input that remain. */
70
+ const fieldRef = React.useRef(null);
71
+ /* Set when a chip is removed while it holds focus: focus then moves to the chip that takes its place,
72
+ or to the input when the last chip went. Applied after the new value has rendered. */
73
+ const focusAfterRemoval = React.useRef(null);
74
+ React.useEffect(() => {
75
+ var _a;
76
+ const index = focusAfterRemoval.current;
77
+ if (index === null)
78
+ return;
79
+ focusAfterRemoval.current = null;
80
+ const field = fieldRef.current;
81
+ if (!field)
82
+ return;
83
+ const chips = field.querySelectorAll("[data-sui-value-chip]");
84
+ const target = (_a = chips[index]) !== null && _a !== void 0 ? _a : field.querySelector("input");
85
+ target === null || target === void 0 ? void 0 : target.focus();
86
+ });
55
87
  const flatOptions = optionGroups.flattenOptions(options);
56
88
  const optionByValue = new Map(flatOptions.map((option) => [option.value, option]));
57
89
  /* A value that is not among the options — a created entry — is shown under its own text. */
@@ -132,7 +164,7 @@ const Combobox = React.forwardRef((props, ref) => {
132
164
  setNotice({ visible: "", announced: "" });
133
165
  };
134
166
  const renderItem = (option) => isCreateItem(option) ? (jsxRuntime.jsxs(combobox.Combobox.Item, { value: option, className: utils.cn(ui_common.list.option, "justify-start gap-3"), children: [jsxRuntime.jsx(react.HugeiconsIcon, { icon: coreFreeIcons.PlusSignIcon, "aria-hidden": "true", className: utils.cn(ui_common.iconStroke.glyph, "size-4 shrink-0", ui_common.tone.text.primary) }), jsxRuntime.jsx("span", { className: utils.cn("min-w-0 flex-1 truncate"), children: createLabel(option.label) })] }, "sui-create")) : (jsxRuntime.jsxs(combobox.Combobox.Item, { value: option, disabled: option.disabled, className: ({ selected: isSelected }) => utils.cn(ui_common.list.option, isSelected && utils.cn(ui_common.tone.selected.primary, ui_common.elevation.control)), children: [jsxRuntime.jsx("span", { className: utils.cn("min-w-0 flex-1 truncate"), children: option.label }), jsxRuntime.jsx(combobox.Combobox.ItemIndicator, { children: jsxRuntime.jsx(react.HugeiconsIcon, { icon: coreFreeIcons.Tick02Icon, "aria-hidden": "true", className: utils.cn(ui_common.iconStroke.glyph, "size-4", ui_motion.motionArrive, ui_common.tone.text.primary) }) })] }, option.value));
135
- const input = (chosenCount) => (jsxRuntime.jsx(combobox.Combobox.Input, { ref: ref, placeholder: chosenCount > 0 ? undefined : placeholder, onPaste: handlePaste, className: utils.cn("min-w-0 flex-1 bg-transparent outline-none placeholder:text-sherick-ink-muted disabled:cursor-not-allowed", multiple && "h-7 min-w-16") }));
167
+ const input = (chosenCount) => (jsxRuntime.jsx(combobox.Combobox.Input, { ref: ref, placeholder: chosenCount > 0 ? undefined : placeholder, onPaste: handlePaste, className: utils.cn("min-w-0 flex-1 bg-transparent [outline-style:none] placeholder:text-sherick-ink-muted disabled:cursor-not-allowed", multiple && "h-7 min-w-16") }));
136
168
  const selectedOptions = values.map(toOption);
137
169
  /* Base types its single and multiple roots as two different components; the value contract is
138
170
  chosen here, once, and the rest of the root is shared. */
@@ -141,6 +173,7 @@ const Combobox = React.forwardRef((props, ref) => {
141
173
  multiple: true,
142
174
  value: selectedOptions,
143
175
  onValueChange: (next, eventDetails) => {
176
+ var _a, _b, _c, _d;
144
177
  const created = next.find(isCreateItem);
145
178
  const removed = values.filter((chosen) => !next.some((option) => option.value === chosen));
146
179
  const added = next.filter((option) => !values.includes(option.value));
@@ -167,7 +200,15 @@ const Combobox = React.forwardRef((props, ref) => {
167
200
  flagNotice(0, [trimmedQuery]);
168
201
  return;
169
202
  }
203
+ /* A chip removed while it holds focus would take focus with it, so the request is recorded here
204
+ and applied once the chip is gone. A chip that was not focused leaves focus where it was. */
205
+ const removedIndex = removed.length === 1 ? values.indexOf(removed[0]) : -1;
206
+ const focusedChip = (_b = (_a = document.activeElement) === null || _a === void 0 ? void 0 : _a.closest("[data-sui-value-chip]")) !== null && _b !== void 0 ? _b : null;
207
+ const chipsNow = Array.from((_d = (_c = fieldRef.current) === null || _c === void 0 ? void 0 : _c.querySelectorAll("[data-sui-value-chip]")) !== null && _d !== void 0 ? _d : []);
170
208
  const applied = commitValues(next.map((option) => option.value), eventDetails);
209
+ if (applied && removedIndex >= 0 && focusedChip !== null && chipsNow[removedIndex] === focusedChip) {
210
+ focusAfterRemoval.current = removedIndex;
211
+ }
171
212
  if (applied && created) {
172
213
  /* Base keeps the typed filter while the list stays open, so several matches can be
173
214
  chosen from one query. A created entry used the query up, so it starts over. */
@@ -194,7 +235,7 @@ const Combobox = React.forwardRef((props, ref) => {
194
235
  the next can be chosen without reopening it. Escape, Tab and a press outside still close. */
195
236
  if (multiple && !open && eventDetails.reason === "item-press")
196
237
  eventDetails.cancel();
197
- }, disabled: disabled, readOnly: readOnly, children: [jsxRuntime.jsxs(combobox.Combobox.InputGroup, { className: ({ open, disabled: fieldDisabled }) => utils.cn(
238
+ }, disabled: disabled, readOnly: readOnly, children: [jsxRuntime.jsxs(combobox.Combobox.InputGroup, { ref: fieldRef, className: ({ open, disabled: fieldDisabled }) => utils.cn(
198
239
  /* The field's own inline padding is what places the trailing cluster, and it is set on the
199
240
  logical ends so the cluster stays at the field's end in either writing direction. The
200
241
  20px a mark's box then sits from the edge — 14px of padding plus the 6px each `density.part`
@@ -202,22 +243,25 @@ const Combobox = React.forwardRef((props, ref) => {
202
243
  field reads with one inset at both ends. Once chips lead the field, its start inset
203
244
  drops to the chips' own block inset, so the first pill sits as far from the field's
204
245
  start as from its top. */
205
- "group/field flex min-w-0 w-full items-center ps-5 pe-3.5", multiple && "has-[[data-sui-value-chip]]:ps-2.5", ui_common.density.normal, ui_common.shape.control, ui_common.material.control, ui_common.rim.field, ui_motion.motionTactileField, ui_common.focusRingWithin, !fieldDisabled && !open && ui_common.state.field.hover, !fieldDisabled && ui_common.state.field.focusWithin, open && ui_common.state.field.engaged, ui_common.state.field.invalid, open && ui_common.state.field.invalidEngaged, !fieldDisabled && !open && ui_common.state.field.invalidHover, !fieldDisabled && ui_common.state.field.invalidFocusWithin, fieldDisabled ? ui_common.state.disabled : ui_common.state.text, className), children: [multiple ? (
246
+ "group/field flex min-w-0 w-full items-center ps-5 pe-3.5", multiple && "has-[[data-sui-value-chip]]:ps-2.5", Field.fieldDensity[size], ui_common.shape.control, ui_common.material.control, ui_common.rim.field, ui_motion.motionTactileField, ui_common.focusRingWithin, !fieldDisabled && !open && ui_common.state.field.hover, !fieldDisabled && ui_common.state.field.focusWithin, open && ui_common.state.field.engaged, ui_common.state.field.invalid, open && ui_common.state.field.invalidEngaged, !fieldDisabled && !open && ui_common.state.field.invalidHover, !fieldDisabled && ui_common.state.field.invalidFocusWithin, fieldDisabled ? ui_common.state.disabled : ui_common.state.text, className), children: [multiple ? (
206
247
  /* The chips and the input wrap together, so a long selection grows the field downward
207
248
  rather than squeezing the query. Base names the row a toolbar once it holds chips. */
208
249
  jsxRuntime.jsxs(combobox.Combobox.Chips, { "aria-label": selectedOptions.length > 0 ? chipsLabel : undefined, className: utils.cn("flex min-w-0 flex-1 flex-wrap items-center gap-1.5 py-2"), children: [selectedOptions.map((option) => (jsxRuntime.jsxs(combobox.Combobox.Chip, { "data-sui-value-chip": "", "aria-readonly": undefined,
209
250
  // Without its dismiss target the chip ends on its copy, so it takes its start inset again.
210
- className: utils.cn(valueChipClassName, (readOnly || disabled) && "pe-3"), children: [jsxRuntime.jsx("span", { className: utils.cn("min-w-0 truncate"), children: option.label }), !readOnly && !disabled && (jsxRuntime.jsx(combobox.Combobox.ChipRemove, { "aria-label": `Remove ${option.label}`, className: utils.cn(chipRemoveClassName), children: jsxRuntime.jsx("span", { className: utils.cn("inline-flex items-center justify-center", ui_motion.motionInkPress), children: jsxRuntime.jsx(react.HugeiconsIcon, { icon: coreFreeIcons.Cancel01Icon, "aria-hidden": "true", className: utils.cn(ui_common.iconStroke.glyph, "size-4") }) }) }))] }, option.value))), input(selectedOptions.length)] })) : (input(0)), jsxRuntime.jsx(combobox.Combobox.Clear, { "aria-label": multiple ? "Clear all" : "Clear selection",
251
+ className: utils.cn(valueChipClassName, (readOnly || disabled) && "pe-3"), children: [jsxRuntime.jsx("span", { className: utils.cn("min-w-0 truncate"), children: option.label }), !readOnly && !disabled && (jsxRuntime.jsx(combobox.Combobox.ChipRemove, { render: jsxRuntime.jsx(DismissButton.default, { label: copy.removeChip(option.label), size: "compact", inRow: true, className: utils.cn(chipRemoveClassName) }) }))] }, option.value))), input(selectedOptions.length)] })) : (input(0)), jsxRuntime.jsx(combobox.Combobox.Clear
252
+ // Clearing changes the value, so a read-only control cannot offer it — which is Base's own
253
+ // reading of the same state, since its clear control refuses the press.
254
+ , {
211
255
  // Clearing changes the value, so a read-only control cannot offer it — which is Base's own
212
256
  // reading of the same state, since its clear control refuses the press.
213
- disabled: disabled || readOnly, className: utils.cn(partClassName), children: jsxRuntime.jsx(react.HugeiconsIcon, { icon: coreFreeIcons.Cancel01Icon, "aria-hidden": "true", className: utils.cn(ui_common.iconStroke.glyph) }) }), jsxRuntime.jsx(combobox.Combobox.Trigger, { "aria-label": "Show options", className: utils.cn(partClassName, "group"), children: jsxRuntime.jsx(react.HugeiconsIcon, { icon: coreFreeIcons.ArrowDown01Icon, "aria-hidden": "true", className: utils.cn(ui_common.iconStroke.glyph, "size-5", ui_motion.motionOrient, "group-data-[popup-open]:rotate-180") }) })] }), creatable && (
257
+ disabled: disabled || readOnly, render: jsxRuntime.jsx(DismissButton.default, { label: multiple ? copy.clearAll : copy.clearSelection, size: "compact", inRow: true, className: utils.cn(clearClassName) }) }), jsxRuntime.jsx(combobox.Combobox.Trigger, { "aria-label": copy.showOptions, "aria-busy": loading || undefined, className: utils.cn(partClassName, "group"), children: loading ? (jsxRuntime.jsx(Spinner.Spinner, { className: utils.cn("size-5", ui_common.text.high), size: "small" })) : (jsxRuntime.jsx(react.HugeiconsIcon, { icon: coreFreeIcons.ArrowDown01Icon, "aria-hidden": "true", className: utils.cn(ui_common.iconStroke.glyph, "size-5", ui_motion.motionOrient, "group-data-[popup-open]:rotate-180") })) })] }), creatable && (
214
258
  /* Mounted from the start so a screen reader is already listening when a paste or a refused
215
259
  duplicate reports itself. Only the skipped entries are shown: the chips already show what
216
260
  was added. While the list is open Base hides everything outside it from assistive
217
261
  technology, so the same report is also made from inside the list (below). */
218
- jsxRuntime.jsx("div", { role: "status", className: utils.cn(notice.visible !== "" && ui_common.fieldMessage.description), children: notice.announced === notice.visible ? (notice.visible) : (
262
+ jsxRuntime.jsx("div", { role: "status", className: utils.cn(notice.visible !== "" ? ui_common.fieldMessage.description : "absolute"), children: notice.announced === notice.visible ? (notice.visible) : (
219
263
  // The spoken report is the fuller one; the visible line is not read a second time.
220
- jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("span", { "aria-hidden": "true", children: notice.visible }), jsxRuntime.jsx("span", { className: utils.cn("sr-only"), children: notice.announced })] })) })), jsxRuntime.jsx(combobox.Combobox.Portal, { children: jsxRuntime.jsx(combobox.Combobox.Positioner, { side: "bottom", align: "start", sideOffset: 8, className: utils.cn(ui_common.stacking.float), children: jsxRuntime.jsxs(combobox.Combobox.Popup, { className: utils.cn(ui_common.list.sheet, "w-max min-w-[var(--anchor-width)] p-2", ui_common.overlay.popup, ui_motion.motionPresenceAnchored), children: [creatable && (jsxRuntime.jsx(combobox.Combobox.Status, { className: utils.cn("sr-only"), children: notice.announced })), jsxRuntime.jsx(combobox.Combobox.Empty, { children: jsxRuntime.jsx("div", { className: utils.cn("px-3 py-3", ui_common.type.body, ui_common.text.medium), children: emptyMessage !== null && emptyMessage !== void 0 ? emptyMessage : (creatable ? "Type to add an entry." : "No results found.") }) }), jsxRuntime.jsx(combobox.Combobox.List, { className: utils.cn("space-y-1"), children: grouped
264
+ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("span", { "aria-hidden": "true", children: notice.visible }), jsxRuntime.jsx("span", { className: utils.cn("sr-only"), children: notice.announced })] })) })), jsxRuntime.jsx(combobox.Combobox.Portal, { children: jsxRuntime.jsx(combobox.Combobox.Positioner, { side: "bottom", align: "start", sideOffset: 8, className: utils.cn(ui_common.stacking.float), children: jsxRuntime.jsxs(combobox.Combobox.Popup, { className: utils.cn(ui_common.list.sheet, "w-max min-w-[var(--anchor-width)] p-2", ui_common.overlay.popup, ui_motion.motionPresenceAnchored, popupClassName), children: [creatable && (jsxRuntime.jsx(combobox.Combobox.Status, { className: utils.cn("sr-only"), children: notice.announced })), jsxRuntime.jsx(combobox.Combobox.Empty, { children: jsxRuntime.jsx("div", { className: utils.cn("px-3 py-3", ui_common.type.body, ui_common.text.medium), children: emptyMessage !== null && emptyMessage !== void 0 ? emptyMessage : (creatable ? "Type to add an entry." : copy.noResults) }) }), jsxRuntime.jsx(combobox.Combobox.List, { className: utils.cn("space-y-1"), children: grouped
221
265
  ? (section) => (
222
266
  /* A heading names the group it opens. A run of options outside every group is a
223
267
  section without one, because the primitive reads a list as all groups or none. */