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
@@ -5,15 +5,25 @@ import React from 'react';
5
5
  import { HugeiconsIcon } from '@hugeicons/react';
6
6
  import { ArrowDown01Icon, Tick02Icon } from '@hugeicons/core-free-icons';
7
7
  import { cn } from '../libs/utils.js';
8
- import { text, iconStroke, state, focusRingHeld, rim, material, shape, density, list, overlay, stacking, tone, elevation } from './ui.common.js';
8
+ import { text, iconStroke, state, focusRingHeld, rim, material, shape, type, list, overlay, stacking, tone, elevation } from './ui.common.js';
9
9
  import { motionOrient, motionFeedback, motionTactileField, motionPresenceAnchored, motionArrive } from './ui.motion.js';
10
- import { toOptionSections, flattenOptions } from './option-groups.js';
10
+ import { flattenOptions, toOptionSections } from './option-groups.js';
11
+ import { Spinner } from './Spinner.js';
12
+ import { fieldDensity } from './Field.js';
11
13
 
12
- const Select = React.forwardRef(({ options, variant = "primary", value, defaultValue, onValueChange, placeholder = "Select an option", className, disabled, readOnly, required, name, form, id, ...triggerProps }, ref) => {
13
- const renderOption = (option) => (jsxs(Select$1.Item, { value: option.value, disabled: option.disabled, className: ({ selected: isSelected }) => cn(list.option, isSelected && cn(tone.selected[variant], elevation.control)), children: [jsx(Select$1.ItemText, { className: cn("min-w-0 flex-1 truncate"), children: option.label }), jsx(Select$1.ItemIndicator, { children: jsx(HugeiconsIcon, { icon: Tick02Icon, "aria-hidden": "true", className: cn(iconStroke.glyph, "size-4", motionArrive, tone.text[variant]) }) })] }, option.value));
14
- return (jsxs(Select$1.Root, { items: flattenOptions(options), value: value, defaultValue: defaultValue !== null && defaultValue !== void 0 ? defaultValue : null, onValueChange: (nextValue, eventDetails) => {
14
+ const Select = React.forwardRef(({ options, variant = "primary", value, defaultValue, onValueChange, placeholder = "Select an option", emptyMessage, loading = false, size = "md", popupClassName, className, disabled, readOnly, required, name, form, id, ...triggerProps }, ref) => {
15
+ const flatOptions = flattenOptions(options);
16
+ const isEmpty = flatOptions.length === 0;
17
+ /* A compact trigger keeps its 40px height with a 20px line, so its vertical padding steps down with it. */
18
+ const padding = size === "sm" ? "py-2" : "py-3";
19
+ /* The indicator stays mounted, so a selection made while the list is open springs in. A mark that
20
+ mounts already selected does not, so opening the list animates nothing. The spring belongs to the
21
+ indicator, which Base marks as arriving, and not to the svg inside it. An unselected mark holds its
22
+ slot at zero opacity, so the label does not move when the selection does. */
23
+ const renderOption = (option) => (jsxs(Select$1.Item, { value: option.value, disabled: option.disabled, className: ({ selected: isSelected }) => cn(list.option, isSelected && cn(tone.selected[variant], elevation.control)), children: [jsx(Select$1.ItemText, { className: cn("min-w-0 flex-1 truncate"), children: option.label }), jsx(Select$1.ItemIndicator, { keepMounted: true, className: ({ selected: isSelected }) => cn("inline-flex shrink-0 items-center justify-center", motionArrive, !isSelected && "opacity-0"), children: jsx(HugeiconsIcon, { icon: Tick02Icon, "aria-hidden": "true", className: cn(iconStroke.glyph, "size-4", tone.text[variant]) }) })] }, option.value));
24
+ return (jsxs(Select$1.Root, { items: flatOptions, value: value, defaultValue: defaultValue !== null && defaultValue !== void 0 ? defaultValue : null, onValueChange: (nextValue, eventDetails) => {
15
25
  onValueChange === null || onValueChange === void 0 ? void 0 : onValueChange(typeof nextValue === "string" ? nextValue : null, eventDetails);
16
- }, disabled: disabled, readOnly: readOnly, required: required, name: name, form: form, children: [jsx("div", { className: cn("relative block min-w-0 w-full", motionTactileField), children: jsxs(Select$1.Trigger, { ...triggerProps, ref: ref, id: id, className: ({ open, disabled: fieldDisabled }) => cn("group flex w-full items-center justify-between gap-3 px-5 py-3 text-start", density.normal, shape.control, material.control, rim.field, motionFeedback, focusRingHeld, !fieldDisabled && !open && state.field.hover, !fieldDisabled && state.field.focus, open && state.field.engaged, state.field.invalid, !fieldDisabled && !open && state.field.invalidHover, !fieldDisabled && state.field.invalidFocusWithin, open && state.field.invalidEngaged, fieldDisabled ? state.disabled : state.enabled, className), children: [jsx(Select$1.Value, { placeholder: placeholder, className: ({ placeholder: showingPlaceholder }) => cn("truncate", showingPlaceholder && text.medium) }), jsx(Select$1.Icon, { className: cn("shrink-0"), children: jsx(HugeiconsIcon, { icon: ArrowDown01Icon, "aria-hidden": "true", className: cn(iconStroke.glyph, "size-5", text.high, motionOrient, "group-data-[popup-open]:rotate-180") }) })] }) }), jsx(Select$1.Portal, { children: jsx(Select$1.Positioner, { alignItemWithTrigger: false, side: "bottom", align: "start", sideOffset: 8, className: cn(stacking.float), children: jsx(Select$1.Popup, { className: cn(list.sheet, "w-max min-w-[var(--anchor-width)] p-2", overlay.popup, motionPresenceAnchored), children: jsx(Select$1.List, { className: cn("space-y-1"), children: toOptionSections(options).map((section) => section.label === undefined ? (jsx(React.Fragment, { children: section.items.map(renderOption) }, section.key)) : (jsxs(Select$1.Group, { className: cn("space-y-1"), children: [jsx(Select$1.GroupLabel, { className: cn(list.groupLabel), children: section.label }), section.items.map(renderOption)] }, section.key))) }) }) }) })] }));
26
+ }, disabled: disabled, readOnly: readOnly, required: required, name: name, form: form, children: [jsx("div", { className: cn("relative block min-w-0 w-full", motionTactileField), children: jsxs(Select$1.Trigger, { ...triggerProps, ref: ref, id: id, "aria-busy": loading || undefined, className: ({ open, disabled: fieldDisabled }) => cn("group flex w-full items-center justify-between gap-3 px-5 text-start", padding, fieldDensity[size], shape.control, material.control, rim.field, motionFeedback, focusRingHeld, state.busy, !fieldDisabled && !open && state.field.hover, !fieldDisabled && state.field.focus, open && state.field.engaged, state.field.invalid, !fieldDisabled && !open && state.field.invalidHover, !fieldDisabled && state.field.invalidFocusWithin, open && state.field.invalidEngaged, fieldDisabled ? state.disabled : state.enabled, className), children: [jsx(Select$1.Value, { placeholder: placeholder, className: ({ placeholder: showingPlaceholder }) => cn("truncate", showingPlaceholder && text.medium) }), jsx(Select$1.Icon, { className: cn("shrink-0"), children: loading ? (jsx(Spinner, { className: cn("size-5", text.high), size: "small" })) : (jsx(HugeiconsIcon, { icon: ArrowDown01Icon, "aria-hidden": "true", className: cn(iconStroke.glyph, "size-5", text.high, motionOrient, "group-data-[popup-open]:rotate-180") })) })] }) }), (!isEmpty || emptyMessage != null) && (jsx(Select$1.Portal, { children: jsx(Select$1.Positioner, { alignItemWithTrigger: false, side: "bottom", align: "start", sideOffset: 8, className: cn(stacking.float), children: jsx(Select$1.Popup, { className: cn(list.sheet, "w-max min-w-[var(--anchor-width)] p-2", overlay.popup, motionPresenceAnchored, popupClassName), children: isEmpty ? (jsx("div", { className: cn("px-3 py-3", type.body, text.medium), children: emptyMessage })) : (jsx(Select$1.List, { className: cn("space-y-1"), children: toOptionSections(options).map((section) => section.label === undefined ? (jsx(React.Fragment, { children: section.items.map(renderOption) }, section.key)) : (jsxs(Select$1.Group, { className: cn("space-y-1"), children: [jsx(Select$1.GroupLabel, { className: cn(list.groupLabel), children: section.label }), section.items.map(renderOption)] }, section.key))) })) }) }) }))] }));
17
27
  });
18
28
  Select.displayName = "Select";
19
29
 
@@ -1 +1 @@
1
- {"version":3,"file":"Select.js","sources":["../../../src/components/Select.tsx"],"sourcesContent":["\"use client\";\n\nimport { Select as BaseSelect } from \"@base-ui/react/select\";\nimport React, { type ButtonHTMLAttributes } from \"react\";\nimport { HugeiconsIcon } from \"@hugeicons/react\";\nimport { ArrowDown01Icon, Tick02Icon } from \"@hugeicons/core-free-icons\";\nimport { cn } from \"@/libs/utils\";\nimport {\n density,\n elevation,\n focusRingHeld,\n iconStroke,\n list,\n material,\n overlay,\n rim,\n shape,\n stacking,\n state,\n text,\n tone,\n} from \"./ui.common\";\nimport { motionArrive, motionFeedback, motionOrient, motionPresenceAnchored, motionTactileField } from \"./ui.motion\";\nimport { flattenOptions, toOptionSections, type OptionGroup } from \"./option-groups\";\nimport { Variant } from \"./ui.types\";\n\nexport interface SelectOption {\n label: string;\n value: string;\n disabled?: boolean;\n}\n\n/** Options filed under one heading, such as channels under their category. */\nexport type SelectOptionGroup = OptionGroup<SelectOption>;\n\ntype SelectRootProps = BaseSelect.Root.Props<string>;\ntype SelectChangeDetails = Parameters<NonNullable<SelectRootProps[\"onValueChange\"]>>[1];\n\nexport interface SelectProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"value\" | \"defaultValue\"> {\n /**\n * The options, in the order they read. Any of them may be filed under a heading by passing a group\n * (`{ label, options }`) in its place; an option outside every group is listed where it stands.\n */\n options: Array<SelectOption | SelectOptionGroup>;\n variant?: Variant;\n value?: string | null;\n defaultValue?: string | null;\n /** Base's value-change event details are passed through unchanged. */\n onValueChange?: (value: string | null, eventDetails: SelectChangeDetails) => void;\n placeholder?: string;\n readOnly?: boolean;\n required?: boolean;\n}\n\nconst Select = React.forwardRef<HTMLButtonElement, SelectProps>(\n ({\n options,\n variant = \"primary\",\n value,\n defaultValue,\n onValueChange,\n placeholder = \"Select an option\",\n className,\n disabled,\n readOnly,\n required,\n name,\n form,\n id,\n ...triggerProps\n }, ref) => {\n const renderOption = (option: SelectOption) => (\n <BaseSelect.Item\n key={option.value}\n value={option.value}\n disabled={option.disabled}\n className={({ selected: isSelected }) =>\n cn(list.option, isSelected && cn(tone.selected[variant], elevation.control))\n }\n >\n <BaseSelect.ItemText className={cn(\"min-w-0 flex-1 truncate\")}>\n {option.label}\n </BaseSelect.ItemText>\n <BaseSelect.ItemIndicator>\n <HugeiconsIcon icon={Tick02Icon} aria-hidden=\"true\" className={cn(iconStroke.glyph, \"size-4\", motionArrive, tone.text[variant])} />\n </BaseSelect.ItemIndicator>\n </BaseSelect.Item>\n );\n\n return (\n <BaseSelect.Root\n items={flattenOptions(options)}\n value={value}\n defaultValue={defaultValue ?? null}\n onValueChange={(nextValue, eventDetails) => {\n onValueChange?.(typeof nextValue === \"string\" ? nextValue : null, eventDetails);\n }}\n disabled={disabled}\n readOnly={readOnly}\n required={required}\n name={name}\n form={form}\n >\n {/* The field is the control the user presses, so the *wrapper* carries the tactile answer:\n a `Select` trigger's own active state is suppressed by the primitive, while a press on\n it still activates this element as its ancestor. The trigger itself is the field's\n surface, so it takes the tone. */}\n <div className={cn(\"relative block min-w-0 w-full\", motionTactileField)}>\n <BaseSelect.Trigger\n {...triggerProps}\n ref={ref}\n id={id}\n className={({ open, disabled: fieldDisabled }) =>\n cn(\n \"group flex w-full items-center justify-between gap-3 px-5 py-3 text-start\",\n density.normal,\n shape.control,\n material.control,\n rim.field,\n motionFeedback,\n focusRingHeld,\n !fieldDisabled && !open && state.field.hover,\n !fieldDisabled && state.field.focus,\n open && state.field.engaged,\n state.field.invalid,\n !fieldDisabled && !open && state.field.invalidHover,\n !fieldDisabled && state.field.invalidFocusWithin,\n open && state.field.invalidEngaged,\n fieldDisabled ? state.disabled : state.enabled,\n className\n )\n }\n >\n <BaseSelect.Value\n placeholder={placeholder}\n className={({ placeholder: showingPlaceholder }) =>\n cn(\"truncate\", showingPlaceholder && text.medium)\n }\n />\n <BaseSelect.Icon className={cn(\"shrink-0\")}>\n <HugeiconsIcon icon={ArrowDown01Icon}\n aria-hidden=\"true\"\n className={cn(iconStroke.glyph, \n \"size-5\",\n text.high,\n motionOrient,\n \"group-data-[popup-open]:rotate-180\"\n )}\n />\n </BaseSelect.Icon>\n </BaseSelect.Trigger>\n </div>\n\n <BaseSelect.Portal>\n <BaseSelect.Positioner\n alignItemWithTrigger={false}\n side=\"bottom\"\n align=\"start\"\n sideOffset={8}\n className={cn(stacking.float)}\n >\n <BaseSelect.Popup\n className={cn(\n list.sheet,\n \"w-max min-w-[var(--anchor-width)] p-2\",\n overlay.popup,\n motionPresenceAnchored\n )}\n >\n <BaseSelect.List className={cn(\"space-y-1\")}>\n {/* A heading names the group it opens; an ungrouped run sits directly in the list. */}\n {toOptionSections(options).map((section) =>\n section.label === undefined ? (\n <React.Fragment key={section.key}>{section.items.map(renderOption)}</React.Fragment>\n ) : (\n <BaseSelect.Group key={section.key} className={cn(\"space-y-1\")}>\n <BaseSelect.GroupLabel className={cn(list.groupLabel)}>{section.label}</BaseSelect.GroupLabel>\n {section.items.map(renderOption)}\n </BaseSelect.Group>\n )\n )}\n </BaseSelect.List>\n </BaseSelect.Popup>\n </BaseSelect.Positioner>\n </BaseSelect.Portal>\n </BaseSelect.Root>\n );\n }\n);\n\nSelect.displayName = \"Select\";\n\nexport default Select;\n"],"names":["_jsxs","BaseSelect","_jsx"],"mappings":"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"}
1
+ {"version":3,"file":"Select.js","sources":["../../../src/components/Select.tsx"],"sourcesContent":["\"use client\";\n\nimport { Select as BaseSelect } from \"@base-ui/react/select\";\nimport React, { type ButtonHTMLAttributes, type ReactNode } from \"react\";\nimport { HugeiconsIcon } from \"@hugeicons/react\";\nimport { ArrowDown01Icon, Tick02Icon } from \"@hugeicons/core-free-icons\";\nimport { cn } from \"@/libs/utils\";\nimport {\n elevation,\n focusRingHeld,\n iconStroke,\n list,\n material,\n overlay,\n rim,\n shape,\n stacking,\n state,\n text,\n tone,\n type,\n} from \"./ui.common\";\nimport { motionArrive, motionFeedback, motionOrient, motionPresenceAnchored, motionTactileField } from \"./ui.motion\";\nimport { flattenOptions, toOptionSections, type OptionGroup } from \"./option-groups\";\nimport { Variant } from \"./ui.types\";\nimport { Spinner } from \"./Spinner\";\nimport { fieldDensity, type FieldSize } from \"./Field\";\n\nexport interface SelectOption {\n label: string;\n value: string;\n disabled?: boolean;\n}\n\n/** Options filed under one heading, such as channels under their category. */\nexport type SelectOptionGroup = OptionGroup<SelectOption>;\n\ntype SelectRootProps = BaseSelect.Root.Props<string>;\ntype SelectChangeDetails = Parameters<NonNullable<SelectRootProps[\"onValueChange\"]>>[1];\n\nexport interface SelectProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"value\" | \"defaultValue\"> {\n /**\n * The options, in the order they read. Any of them may be filed under a heading by passing a group\n * (`{ label, options }`) in its place; an option outside every group is listed where it stands.\n */\n options: Array<SelectOption | SelectOptionGroup>;\n variant?: Variant;\n value?: string | null;\n defaultValue?: string | null;\n /** Base's value-change event details are passed through unchanged. */\n onValueChange?: (value: string | null, eventDetails: SelectChangeDetails) => void;\n placeholder?: string;\n /**\n * Shown in the list when there are no options. With no message either, the list does not open at all,\n * so an empty select never shows an empty sheet.\n */\n emptyMessage?: ReactNode;\n /** Waiting for its options: a spinner takes the chevron's place and the trigger reports itself busy. */\n loading?: boolean;\n /** The field's density: `sm` for a dense filter row, `md` (the default) or `lg`. */\n size?: FieldSize;\n /** Styles the list's own sheet. The trigger is styled through `className`, and the rows style themselves. */\n popupClassName?: string;\n readOnly?: boolean;\n required?: boolean;\n}\n\nconst Select = React.forwardRef<HTMLButtonElement, SelectProps>(\n ({\n options,\n variant = \"primary\",\n value,\n defaultValue,\n onValueChange,\n placeholder = \"Select an option\",\n emptyMessage,\n loading = false,\n size = \"md\",\n popupClassName,\n className,\n disabled,\n readOnly,\n required,\n name,\n form,\n id,\n ...triggerProps\n }, ref) => {\n const flatOptions = flattenOptions(options);\n const isEmpty = flatOptions.length === 0;\n /* A compact trigger keeps its 40px height with a 20px line, so its vertical padding steps down with it. */\n const padding = size === \"sm\" ? \"py-2\" : \"py-3\";\n\n /* The indicator stays mounted, so a selection made while the list is open springs in. A mark that\n mounts already selected does not, so opening the list animates nothing. The spring belongs to the\n indicator, which Base marks as arriving, and not to the svg inside it. An unselected mark holds its\n slot at zero opacity, so the label does not move when the selection does. */\n const renderOption = (option: SelectOption) => (\n <BaseSelect.Item\n key={option.value}\n value={option.value}\n disabled={option.disabled}\n className={({ selected: isSelected }) =>\n cn(list.option, isSelected && cn(tone.selected[variant], elevation.control))\n }\n >\n <BaseSelect.ItemText className={cn(\"min-w-0 flex-1 truncate\")}>\n {option.label}\n </BaseSelect.ItemText>\n <BaseSelect.ItemIndicator\n keepMounted\n className={({ selected: isSelected }) =>\n cn(\"inline-flex shrink-0 items-center justify-center\", motionArrive, !isSelected && \"opacity-0\")\n }\n >\n <HugeiconsIcon icon={Tick02Icon} aria-hidden=\"true\" className={cn(iconStroke.glyph, \"size-4\", tone.text[variant])} />\n </BaseSelect.ItemIndicator>\n </BaseSelect.Item>\n );\n\n return (\n <BaseSelect.Root\n items={flatOptions}\n value={value}\n defaultValue={defaultValue ?? null}\n onValueChange={(nextValue, eventDetails) => {\n onValueChange?.(typeof nextValue === \"string\" ? nextValue : null, eventDetails);\n }}\n disabled={disabled}\n readOnly={readOnly}\n required={required}\n name={name}\n form={form}\n >\n {/* The field is the control the user presses, so the *wrapper* carries the tactile answer:\n a `Select` trigger's own active state is suppressed by the primitive, while a press on\n it still activates this element as its ancestor. The trigger itself is the field's\n surface, so it takes the tone. */}\n <div className={cn(\"relative block min-w-0 w-full\", motionTactileField)}>\n <BaseSelect.Trigger\n {...triggerProps}\n ref={ref}\n id={id}\n aria-busy={loading || undefined}\n className={({ open, disabled: fieldDisabled }) =>\n cn(\n \"group flex w-full items-center justify-between gap-3 px-5 text-start\",\n padding,\n fieldDensity[size],\n shape.control,\n material.control,\n rim.field,\n motionFeedback,\n focusRingHeld,\n state.busy,\n !fieldDisabled && !open && state.field.hover,\n !fieldDisabled && state.field.focus,\n open && state.field.engaged,\n state.field.invalid,\n !fieldDisabled && !open && state.field.invalidHover,\n !fieldDisabled && state.field.invalidFocusWithin,\n open && state.field.invalidEngaged,\n fieldDisabled ? state.disabled : state.enabled,\n className\n )\n }\n >\n <BaseSelect.Value\n placeholder={placeholder}\n className={({ placeholder: showingPlaceholder }) =>\n cn(\"truncate\", showingPlaceholder && text.medium)\n }\n />\n <BaseSelect.Icon className={cn(\"shrink-0\")}>\n {loading ? (\n <Spinner className={cn(\"size-5\", text.high)} size=\"small\" />\n ) : (\n <HugeiconsIcon icon={ArrowDown01Icon}\n aria-hidden=\"true\"\n className={cn(iconStroke.glyph,\n \"size-5\",\n text.high,\n motionOrient,\n \"group-data-[popup-open]:rotate-180\"\n )}\n />\n )}\n </BaseSelect.Icon>\n </BaseSelect.Trigger>\n </div>\n\n {(!isEmpty || emptyMessage != null) && (\n <BaseSelect.Portal>\n <BaseSelect.Positioner\n alignItemWithTrigger={false}\n side=\"bottom\"\n align=\"start\"\n sideOffset={8}\n className={cn(stacking.float)}\n >\n <BaseSelect.Popup\n className={cn(\n list.sheet,\n \"w-max min-w-[var(--anchor-width)] p-2\",\n overlay.popup,\n motionPresenceAnchored,\n popupClassName\n )}\n >\n {isEmpty ? (\n <div className={cn(\"px-3 py-3\", type.body, text.medium)}>{emptyMessage}</div>\n ) : (\n <BaseSelect.List className={cn(\"space-y-1\")}>\n {/* A heading names the group it opens; an ungrouped run sits directly in the list. */}\n {toOptionSections(options).map((section) =>\n section.label === undefined ? (\n <React.Fragment key={section.key}>{section.items.map(renderOption)}</React.Fragment>\n ) : (\n <BaseSelect.Group key={section.key} className={cn(\"space-y-1\")}>\n <BaseSelect.GroupLabel className={cn(list.groupLabel)}>{section.label}</BaseSelect.GroupLabel>\n {section.items.map(renderOption)}\n </BaseSelect.Group>\n )\n )}\n </BaseSelect.List>\n )}\n </BaseSelect.Popup>\n </BaseSelect.Positioner>\n </BaseSelect.Portal>\n )}\n </BaseSelect.Root>\n );\n }\n);\n\nSelect.displayName = \"Select\";\n\nexport default Select;\n"],"names":["_jsxs","BaseSelect","_jsx"],"mappings":"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"}
@@ -1,13 +1,15 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
+ import { forwardRef } from 'react';
2
3
  import { cn } from '../libs/utils.js';
3
4
  import { shape, material } from './ui.common.js';
4
5
  import { motionActivityPulse } from './ui.motion.js';
5
6
 
6
7
  /* Loading feedback reports progress rather than answering an event, so it is its own intent
7
8
  rather than an exception to interaction motion; under reduced motion it is a static block. */
8
- const Skeleton = ({ className, "aria-hidden": ariaHidden = true, ...props }) => {
9
- return (jsx("div", { "aria-hidden": ariaHidden, className: cn(motionActivityPulse, material.matteHigh, shape.control, className), ...props }));
10
- };
9
+ const Skeleton = forwardRef(({ className, "aria-hidden": ariaHidden = true, ...props }, ref) => {
10
+ return (jsx("div", { ref: ref, "aria-hidden": ariaHidden, className: cn(motionActivityPulse, material.matteHigh, shape.control, className), ...props }));
11
+ });
12
+ Skeleton.displayName = "Skeleton";
11
13
 
12
14
  export { Skeleton };
13
15
  //# sourceMappingURL=Skeleton.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Skeleton.js","sources":["../../../src/components/Skeleton.tsx"],"sourcesContent":["import React, { type HTMLAttributes } from \"react\";\nimport { cn } from \"@/libs/utils\";\nimport { material, shape } from \"./ui.common\";\nimport { motionActivityPulse } from \"./ui.motion\";\n\nexport type SkeletonProps = HTMLAttributes<HTMLDivElement>;\n\n/* Loading feedback reports progress rather than answering an event, so it is its own intent\n rather than an exception to interaction motion; under reduced motion it is a static block. */\nexport const Skeleton = ({ className, \"aria-hidden\": ariaHidden = true, ...props }: SkeletonProps) => {\n return (\n <div\n aria-hidden={ariaHidden}\n className={cn(\n motionActivityPulse,\n material.matteHigh,\n shape.control,\n className\n )}\n {...props}\n />\n );\n};\n"],"names":["_jsx"],"mappings":";;;;;AAOA;AACgG;AACzF,MAAM,QAAQ,GAAG,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,GAAG,IAAI,EAAE,GAAG,KAAK,EAAiB,KAAI;IACnG,QACEA,GAAA,CAAA,KAAA,EAAA,EAAA,aAAA,EACe,UAAU,EACvB,SAAS,EAAE,EAAE,CACX,mBAAmB,EACnB,QAAQ,CAAC,SAAS,EAClB,KAAK,CAAC,OAAO,EACb,SAAS,CACV,EAAA,GACG,KAAK,EAAA,CACT;AAEN;;"}
1
+ {"version":3,"file":"Skeleton.js","sources":["../../../src/components/Skeleton.tsx"],"sourcesContent":["import React, { forwardRef, type HTMLAttributes } from \"react\";\nimport { cn } from \"@/libs/utils\";\nimport { material, shape } from \"./ui.common\";\nimport { motionActivityPulse } from \"./ui.motion\";\n\nexport type SkeletonProps = HTMLAttributes<HTMLDivElement>;\n\n/* Loading feedback reports progress rather than answering an event, so it is its own intent\n rather than an exception to interaction motion; under reduced motion it is a static block. */\nexport const Skeleton = forwardRef<HTMLDivElement, SkeletonProps>(\n ({ className, \"aria-hidden\": ariaHidden = true, ...props }, ref) => {\n return (\n <div\n ref={ref}\n aria-hidden={ariaHidden}\n className={cn(\n motionActivityPulse,\n material.matteHigh,\n shape.control,\n className\n )}\n {...props}\n />\n );\n }\n);\n\nSkeleton.displayName = \"Skeleton\";\n"],"names":["_jsx"],"mappings":";;;;;;AAOA;AACgG;MACnF,QAAQ,GAAG,UAAU,CAChC,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,GAAG,IAAI,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,KAAI;AACjE,IAAA,QACEA,GAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,GAAG,EAAA,aAAA,EACK,UAAU,EACvB,SAAS,EAAE,EAAE,CACX,mBAAmB,EACnB,QAAQ,CAAC,SAAS,EAClB,KAAK,CAAC,OAAO,EACb,SAAS,CACV,EAAA,GACG,KAAK,EAAA,CACT;AAEN,CAAC;AAGH,QAAQ,CAAC,WAAW,GAAG,UAAU;;"}
@@ -3,14 +3,14 @@ import { jsxs, jsx } from 'react/jsx-runtime';
3
3
  import { Slider as Slider$1 } from '@base-ui/react/slider';
4
4
  import { forwardRef } from 'react';
5
5
  import { cn } from '../libs/utils.js';
6
- import { fieldLabel, tone, shape, focusRingWithin, state, material, elevation, selectable } from './ui.common.js';
6
+ import { fieldLabel, tone, shape, focusRingWithin, state, material, elevation, selectable, fieldLayout } from './ui.common.js';
7
7
  import { motionDirect } from './ui.motion.js';
8
8
 
9
9
  /**
10
10
  * A single handle on a groove. The ref points at the handle, which is the part a user grabs.
11
11
  */
12
12
  const Slider = forwardRef(({ value, defaultValue, onValueChange, onValueCommitted, min, max, step, disabled, name, form, label, className, thumbClassName, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledby, ...rootProps }, ref) => {
13
- return (jsxs(Slider$1.Root, { ...rootProps, value: value, defaultValue: defaultValue, onValueChange: onValueChange, onValueCommitted: onValueCommitted, min: min, max: max, step: step, disabled: disabled, name: name, form: form, className: cn("flex w-full flex-col", state.effectiveDisabled, className), children: [label && jsx(Slider$1.Label, { className: cn(fieldLabel), children: label }), jsx(Slider$1.Control, { className: cn("group flex touch-none select-none items-center py-3"), children: jsxs(Slider$1.Track, { className: cn("h-1.5 w-full [--sui-slider-reserve:0.875rem]", shape.pill, selectable.surface, material.matteHigh), children: [jsx(Slider$1.Indicator, { className: cn("box-border border-e-[length:var(--sui-slider-reserve)] border-e-transparent bg-clip-padding", shape.pill, tone.strong.primary, motionDirect) }), jsx(Slider$1.Thumb, { "aria-label": ariaLabel, "aria-labelledby": ariaLabelledby, ref: ref, "data-sui-slider-thumb": "", className: cn("size-5", shape.circle, motionDirect, elevation.control, material.handle, state.engaged, focusRingWithin, thumbClassName) })] }) })] }));
13
+ return (jsxs(Slider$1.Root, { ...rootProps, value: value, defaultValue: defaultValue, onValueChange: onValueChange, onValueCommitted: onValueCommitted, min: min, max: max, step: step, disabled: disabled, name: name, form: form, className: cn(fieldLayout, className), children: [label && jsx(Slider$1.Label, { className: cn(fieldLabel), children: label }), jsx(Slider$1.Control, { className: cn("group flex touch-none select-none items-center py-3", state.effectiveDisabled), children: jsxs(Slider$1.Track, { className: cn("h-1.5 w-full [--sui-slider-reserve:0.875rem]", shape.pill, selectable.surface, material.matteHigh), children: [jsx(Slider$1.Indicator, { className: cn("box-border border-e-[length:var(--sui-slider-reserve)] border-e-transparent bg-clip-padding", shape.pill, tone.strong.primary, motionDirect) }), jsx(Slider$1.Thumb, { "aria-label": ariaLabel, "aria-labelledby": ariaLabelledby, ref: ref, "data-sui-slider-thumb": "", className: cn("size-5", shape.circle, motionDirect, elevation.control, material.handle, state.engaged, focusRingWithin, thumbClassName) })] }) })] }));
14
14
  });
15
15
  Slider.displayName = "Slider";
16
16
 
@@ -1 +1 @@
1
- {"version":3,"file":"Slider.js","sources":["../../../src/components/Slider.tsx"],"sourcesContent":["\"use client\";\n\nimport { Slider as BaseSlider } from \"@base-ui/react/slider\";\nimport React, { forwardRef, type ComponentProps, type ReactNode } from \"react\";\nimport { cn } from \"@/libs/utils\";\nimport {\n elevation,\n fieldLabel,\n focusRingWithin,\n material,\n selectable,\n shape,\n state,\n tone,\n} from \"./ui.common\";\nimport { motionDirect } from \"./ui.motion\";\n\nexport interface SliderProps\n extends Omit<ComponentProps<\"div\">, \"defaultValue\" | \"onChange\" | \"children\"> {\n value?: number;\n defaultValue?: number;\n onValueChange?: BaseSlider.Root.Props<number>[\"onValueChange\"];\n /** Fires when a change is committed — a drag released, a stepper pressed, a blur. */\n onValueCommitted?: BaseSlider.Root.Props<number>[\"onValueCommitted\"];\n min?: number;\n max?: number;\n step?: number;\n disabled?: boolean;\n /** Identifies the field when a form is submitted. */\n name?: string;\n form?: string;\n /** A visible label for the slider, for a slider that is not inside a `Field`. */\n label?: ReactNode;\n /** Styles the slider's own column. The handle is styled through `thumbClassName`. */\n className?: string;\n thumbClassName?: string;\n /**\n * Label props reach the handle, which is the only element a slider can name itself with; every\n * other prop, `className` included, styles the slider's root.\n */\n \"aria-label\"?: string;\n \"aria-labelledby\"?: string;\n}\n\n/**\n * A single handle on a groove. The ref points at the handle, which is the part a user grabs.\n */\nexport const Slider = forwardRef<HTMLDivElement, SliderProps>(\n (\n {\n value,\n defaultValue,\n onValueChange,\n onValueCommitted,\n min,\n max,\n step,\n disabled,\n name,\n form,\n label,\n className,\n thumbClassName,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledby,\n ...rootProps\n },\n ref\n ) => {\n return (\n <BaseSlider.Root\n {...rootProps}\n value={value}\n defaultValue={defaultValue}\n onValueChange={onValueChange}\n onValueCommitted={onValueCommitted}\n min={min}\n max={max}\n step={step}\n disabled={disabled}\n name={name}\n form={form}\n className={cn(\"flex w-full flex-col\", state.effectiveDisabled, className)}\n >\n {label && <BaseSlider.Label className={cn(fieldLabel)}>{label}</BaseSlider.Label>}\n <BaseSlider.Control className={cn(\"group flex touch-none select-none items-center py-3\")}>\n {/* The groove is the matte step every sunk track takes; the handle separates from it by\n its own mid-emphasis fill and its control elevation. */}\n {/* The reservation the range leaves for the handle: its half-width (10px) plus 4px of\n air, owned here because both the groove and the range read it. */}\n <BaseSlider.Track\n className={cn(\n \"h-1.5 w-full [--sui-slider-reserve:0.875rem]\",\n shape.pill,\n selectable.surface,\n material.matteHigh\n )}\n >\n {/* The range stops short of the handle by the handle's own half-width plus its air, so\n the fill ends where the handle begins. One variable owns that reservation. */}\n <BaseSlider.Indicator\n className={cn(\n \"box-border border-e-[length:var(--sui-slider-reserve)] border-e-transparent bg-clip-padding\",\n shape.pill,\n tone.strong.primary,\n motionDirect\n )}\n />\n {/* The same round handle a switch thumb is: one family of parts the user moves. */}\n <BaseSlider.Thumb\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledby}\n ref={ref}\n data-sui-slider-thumb=\"\"\n className={cn(\n \"size-5\",\n shape.circle,\n motionDirect,\n elevation.control,\n material.handle,\n state.engaged,\n focusRingWithin,\n thumbClassName\n )}\n />\n </BaseSlider.Track>\n </BaseSlider.Control>\n </BaseSlider.Root>\n );\n }\n);\n\nSlider.displayName = \"Slider\";\n\nexport default Slider;\n"],"names":["_jsxs","BaseSlider","_jsx"],"mappings":"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"}
1
+ {"version":3,"file":"Slider.js","sources":["../../../src/components/Slider.tsx"],"sourcesContent":["\"use client\";\n\nimport { Slider as BaseSlider } from \"@base-ui/react/slider\";\nimport React, { forwardRef, type ComponentProps, type ReactNode } from \"react\";\nimport { cn } from \"@/libs/utils\";\nimport {\n elevation,\n fieldLabel,\n fieldLayout,\n focusRingWithin,\n material,\n selectable,\n shape,\n state,\n tone,\n} from \"./ui.common\";\nimport { motionDirect } from \"./ui.motion\";\n\nexport interface SliderProps\n extends Omit<ComponentProps<\"div\">, \"defaultValue\" | \"onChange\" | \"children\"> {\n value?: number;\n defaultValue?: number;\n onValueChange?: BaseSlider.Root.Props<number>[\"onValueChange\"];\n /** Fires when a change is committed — a drag released, a stepper pressed, a blur. */\n onValueCommitted?: BaseSlider.Root.Props<number>[\"onValueCommitted\"];\n min?: number;\n max?: number;\n step?: number;\n disabled?: boolean;\n /** Identifies the field when a form is submitted. */\n name?: string;\n form?: string;\n /** A visible label for the slider, for a slider that is not inside a `Field`. */\n label?: ReactNode;\n /** Styles the slider's own column. The handle is styled through `thumbClassName`. */\n className?: string;\n thumbClassName?: string;\n /**\n * Label props reach the handle, which is the only element a slider can name itself with; every\n * other prop, `className` included, styles the slider's root.\n */\n \"aria-label\"?: string;\n \"aria-labelledby\"?: string;\n}\n\n/**\n * A single handle on a groove. The ref points at the handle, which is the part a user grabs.\n */\nexport const Slider = forwardRef<HTMLDivElement, SliderProps>(\n (\n {\n value,\n defaultValue,\n onValueChange,\n onValueCommitted,\n min,\n max,\n step,\n disabled,\n name,\n form,\n label,\n className,\n thumbClassName,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledby,\n ...rootProps\n },\n ref\n ) => {\n return (\n <BaseSlider.Root\n {...rootProps}\n value={value}\n defaultValue={defaultValue}\n onValueChange={onValueChange}\n onValueCommitted={onValueCommitted}\n min={min}\n max={max}\n step={step}\n disabled={disabled}\n name={name}\n form={form}\n className={cn(fieldLayout, className)}\n >\n {label && <BaseSlider.Label className={cn(fieldLabel)}>{label}</BaseSlider.Label>}\n {/* The disabled step belongs to the groove and the handle, the control part. The label keeps its\n ink, so a disabled slider still names itself at full strength. */}\n <BaseSlider.Control className={cn(\"group flex touch-none select-none items-center py-3\", state.effectiveDisabled)}>\n {/* The groove is the matte step every sunk track takes; the handle separates from it by\n its own mid-emphasis fill and its control elevation. */}\n {/* The reservation the range leaves for the handle: its half-width (10px) plus 4px of\n air, owned here because both the groove and the range read it. */}\n <BaseSlider.Track\n className={cn(\n \"h-1.5 w-full [--sui-slider-reserve:0.875rem]\",\n shape.pill,\n selectable.surface,\n material.matteHigh\n )}\n >\n {/* The range stops short of the handle by the handle's own half-width plus its air, so\n the fill ends where the handle begins. One variable owns that reservation. */}\n <BaseSlider.Indicator\n className={cn(\n \"box-border border-e-[length:var(--sui-slider-reserve)] border-e-transparent bg-clip-padding\",\n shape.pill,\n tone.strong.primary,\n motionDirect\n )}\n />\n {/* The same round handle a switch thumb is: one family of parts the user moves. */}\n <BaseSlider.Thumb\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledby}\n ref={ref}\n data-sui-slider-thumb=\"\"\n className={cn(\n \"size-5\",\n shape.circle,\n motionDirect,\n elevation.control,\n material.handle,\n state.engaged,\n focusRingWithin,\n thumbClassName\n )}\n />\n </BaseSlider.Track>\n </BaseSlider.Control>\n </BaseSlider.Root>\n );\n }\n);\n\nSlider.displayName = \"Slider\";\n\nexport default Slider;\n"],"names":["_jsxs","BaseSlider","_jsx"],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { forwardRef } from 'react';
2
3
  import { HugeiconsIcon } from '@hugeicons/react';
3
4
  import { Loading03Icon } from '@hugeicons/core-free-icons';
4
5
  import { cva } from 'class-variance-authority';
@@ -20,21 +21,30 @@ const spinnerVariants = cva("flex flex-col items-center justify-center", {
20
21
  show: true,
21
22
  },
22
23
  });
23
- const loaderVariants = cva(`text-current ${motionActivitySpin}`, {
24
- variants: {
25
- size: {
26
- small: "size-4",
27
- medium: "size-8",
28
- large: "size-10",
29
- },
30
- },
31
- defaultVariants: {
32
- size: "medium",
33
- },
24
+ /* The box a size names. A bare Spinner carries it on its wrapper and the loader fills the wrapper, so a
25
+ slot's `className` (a 20px icon slot, a full-size target) sizes the whole mark. A Spinner with visible
26
+ children keeps the box on the loader, because the wrapper is then a row that holds the copy beside it. */
27
+ const sizeBox = {
28
+ small: "size-4",
29
+ medium: "size-8",
30
+ large: "size-10",
31
+ };
32
+ const loaderSizes = {
33
+ sm: "small",
34
+ md: "medium",
35
+ lg: "large",
36
+ };
37
+ /* Work that is running is announced once, by the element that owns the label. A control that shows a
38
+ spinner in its own slot (a Button while it loads) has no label of its own, so the control's `aria-busy`
39
+ is what tells assistive technology the work is running, and the spinner adds no second status region. */
40
+ const Spinner = forwardRef(({ size, show, label, children, className, ...props }, ref) => {
41
+ const loaderSize = size === "sm" || size === "md" || size === "lg" ? loaderSizes[size] : size;
42
+ const decorative = label === undefined && children === undefined;
43
+ const boxed = children === undefined;
44
+ const box = sizeBox[loaderSize !== null && loaderSize !== void 0 ? loaderSize : "medium"];
45
+ return (jsxs("span", { ...props, ref: ref, role: label || children ? "status" : undefined, "aria-hidden": decorative ? true : undefined, className: cn(spinnerVariants({ show }), boxed && box, className), children: [jsx(HugeiconsIcon, { icon: Loading03Icon, "aria-hidden": "true", className: cn(iconStroke.glyph, "text-current", motionActivitySpin, boxed ? "size-full" : box) }), label ? jsx("span", { className: cn("sr-only"), children: label }) : null, children] }));
34
46
  });
35
- function Spinner({ size, show, children, className }) {
36
- return (jsxs("span", { className: cn(spinnerVariants({ show })), role: "status", "aria-live": "polite", children: [jsx(HugeiconsIcon, { icon: Loading03Icon, "aria-hidden": "true", className: cn(iconStroke.glyph, loaderVariants({ size }), className) }), children] }));
37
- }
47
+ Spinner.displayName = "Spinner";
38
48
 
39
49
  export { Spinner };
40
50
  //# sourceMappingURL=Spinner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Spinner.js","sources":["../../../src/components/Spinner.tsx"],"sourcesContent":["import React from \"react\";\nimport { HugeiconsIcon } from \"@hugeicons/react\";\nimport { Loading03Icon } from \"@hugeicons/core-free-icons\";\nimport { type VariantProps, cva } from \"class-variance-authority\";\nimport { cn } from \"@/libs/utils\";\nimport { iconStroke } from \"./ui.common\";\nimport { motionActivitySpin } from \"./ui.motion\";\n\n/* The mark's box belongs to the slot a control puts around it, not to this component: a labelled\n Spinner (`children` renders beside the loader) has to be able to shrink in a narrow row, so the\n non-shrinking half lives in the slot. */\nconst spinnerVariants = cva(\"flex flex-col items-center justify-center\", {\n variants: {\n show: {\n true: \"flex\",\n false: \"hidden\",\n },\n },\n defaultVariants: {\n show: true,\n },\n});\n\nconst loaderVariants = cva(`text-current ${motionActivitySpin}`, {\n variants: {\n size: {\n small: \"size-4\",\n medium: \"size-8\",\n large: \"size-10\",\n },\n },\n defaultVariants: {\n size: \"medium\",\n },\n});\n\nexport interface SpinnerProps\n extends VariantProps<typeof spinnerVariants>,\n VariantProps<typeof loaderVariants> {\n className?: string;\n children?: React.ReactNode;\n}\n\nexport function Spinner({ size, show, children, className }: SpinnerProps) {\n return (\n <span className={cn(spinnerVariants({ show }))} role=\"status\" aria-live=\"polite\">\n <HugeiconsIcon icon={Loading03Icon} aria-hidden=\"true\" className={cn(iconStroke.glyph, loaderVariants({ size }), className)} />\n {children}\n </span>\n );\n}\n"],"names":["_jsxs","_jsx"],"mappings":";;;;;;;;AAQA;;AAE2C;AAC3C,MAAM,eAAe,GAAG,GAAG,CAAC,2CAA2C,EAAE;AACvE,IAAA,QAAQ,EAAE;AACR,QAAA,IAAI,EAAE;AACJ,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,KAAK,EAAE,QAAQ;AAChB,SAAA;AACF,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,IAAI,EAAE,IAAI;AACX,KAAA;AACF,CAAA,CAAC;AAEF,MAAM,cAAc,GAAG,GAAG,CAAC,CAAA,aAAA,EAAgB,kBAAkB,EAAE,EAAE;AAC/D,IAAA,QAAQ,EAAE;AACR,QAAA,IAAI,EAAE;AACJ,YAAA,KAAK,EAAE,QAAQ;AACf,YAAA,MAAM,EAAE,QAAQ;AAChB,YAAA,KAAK,EAAE,SAAS;AACjB,SAAA;AACF,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,IAAI,EAAE,QAAQ;AACf,KAAA;AACF,CAAA,CAAC;AASI,SAAU,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAgB,EAAA;IACvE,QACEA,eAAM,SAAS,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAC,QAAQ,EAAA,WAAA,EAAW,QAAQ,EAAA,QAAA,EAAA,CAC9EC,GAAA,CAAC,aAAa,EAAA,EAAC,IAAI,EAAE,aAAa,EAAA,aAAA,EAAc,MAAM,EAAC,SAAS,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,cAAc,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,CAAC,GAAI,EAC9H,QAAQ,CAAA,EAAA,CACJ;AAEX;;"}
1
+ {"version":3,"file":"Spinner.js","sources":["../../../src/components/Spinner.tsx"],"sourcesContent":["import React, { forwardRef, type ComponentPropsWithoutRef, type ReactNode } from \"react\";\nimport { HugeiconsIcon } from \"@hugeicons/react\";\nimport { Loading03Icon } from \"@hugeicons/core-free-icons\";\nimport { type VariantProps, cva } from \"class-variance-authority\";\nimport { cn } from \"@/libs/utils\";\nimport { iconStroke } from \"./ui.common\";\nimport { motionActivitySpin } from \"./ui.motion\";\n\n/* The mark's box belongs to the slot a control puts around it, not to this component: a labelled\n Spinner (`children` renders beside the loader) has to be able to shrink in a narrow row, so the\n non-shrinking half lives in the slot. */\nconst spinnerVariants = cva(\"flex flex-col items-center justify-center\", {\n variants: {\n show: {\n true: \"flex\",\n false: \"hidden\",\n },\n },\n defaultVariants: {\n show: true,\n },\n});\n\n/* The box a size names. A bare Spinner carries it on its wrapper and the loader fills the wrapper, so a\n slot's `className` (a 20px icon slot, a full-size target) sizes the whole mark. A Spinner with visible\n children keeps the box on the loader, because the wrapper is then a row that holds the copy beside it. */\nconst sizeBox = {\n small: \"size-4\",\n medium: \"size-8\",\n large: \"size-10\",\n} as const;\n\n/* The short names are the Sherick scale; the long ones are the loader's own, kept so existing callers do not\n change. */\nexport type SpinnerSize = \"small\" | \"medium\" | \"large\" | \"sm\" | \"md\" | \"lg\";\n\nconst loaderSizes: Record<\"sm\" | \"md\" | \"lg\", \"small\" | \"medium\" | \"large\"> = {\n sm: \"small\",\n md: \"medium\",\n lg: \"large\",\n};\n\nexport interface SpinnerProps\n extends Omit<ComponentPropsWithoutRef<\"span\">, \"children\">,\n VariantProps<typeof spinnerVariants> {\n /** The loader's size. `sm`, `md` and `lg` are aliases of `small`, `medium` and `large`. */\n size?: SpinnerSize | null;\n /**\n * What the work is, read to a screen reader. A spinner with a label, or with visible children, is a status\n * that announces itself. A spinner with neither is decoration, and assistive technology skips it.\n */\n label?: string;\n /** Visible copy beside the loader. */\n children?: ReactNode;\n}\n\n/* Work that is running is announced once, by the element that owns the label. A control that shows a\n spinner in its own slot (a Button while it loads) has no label of its own, so the control's `aria-busy`\n is what tells assistive technology the work is running, and the spinner adds no second status region. */\nexport const Spinner = forwardRef<HTMLSpanElement, SpinnerProps>(\n ({ size, show, label, children, className, ...props }, ref) => {\n const loaderSize = size === \"sm\" || size === \"md\" || size === \"lg\" ? loaderSizes[size] : size;\n const decorative = label === undefined && children === undefined;\n const boxed = children === undefined;\n const box = sizeBox[loaderSize ?? \"medium\"];\n\n return (\n <span\n {...props}\n ref={ref}\n role={label || children ? \"status\" : undefined}\n aria-hidden={decorative ? true : undefined}\n className={cn(spinnerVariants({ show }), boxed && box, className)}\n >\n <HugeiconsIcon\n icon={Loading03Icon}\n aria-hidden=\"true\"\n className={cn(iconStroke.glyph, \"text-current\", motionActivitySpin, boxed ? \"size-full\" : box)}\n />\n {label ? <span className={cn(\"sr-only\")}>{label}</span> : null}\n {children}\n </span>\n );\n }\n);\n\nSpinner.displayName = \"Spinner\";\n"],"names":["_jsxs","_jsx"],"mappings":";;;;;;;;;AAQA;;AAE2C;AAC3C,MAAM,eAAe,GAAG,GAAG,CAAC,2CAA2C,EAAE;AACvE,IAAA,QAAQ,EAAE;AACR,QAAA,IAAI,EAAE;AACJ,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,KAAK,EAAE,QAAQ;AAChB,SAAA;AACF,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,IAAI,EAAE,IAAI;AACX,KAAA;AACF,CAAA,CAAC;AAEF;;AAE4G;AAC5G,MAAM,OAAO,GAAG;AACd,IAAA,KAAK,EAAE,QAAQ;AACf,IAAA,MAAM,EAAE,QAAQ;AAChB,IAAA,KAAK,EAAE,SAAS;CACR;AAMV,MAAM,WAAW,GAA6D;AAC5E,IAAA,EAAE,EAAE,OAAO;AACX,IAAA,EAAE,EAAE,QAAQ;AACZ,IAAA,EAAE,EAAE,OAAO;CACZ;AAgBD;;AAE2G;AACpG,MAAM,OAAO,GAAG,UAAU,CAC/B,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,KAAI;IAC5D,MAAM,UAAU,GAAG,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI;IAC7F,MAAM,UAAU,GAAG,KAAK,KAAK,SAAS,IAAI,QAAQ,KAAK,SAAS;AAChE,IAAA,MAAM,KAAK,GAAG,QAAQ,KAAK,SAAS;AACpC,IAAA,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,KAAA,IAAA,IAAV,UAAU,KAAA,MAAA,GAAV,UAAU,GAAI,QAAQ,CAAC;IAE3C,QACEA,kBACM,KAAK,EACT,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,KAAK,IAAI,QAAQ,GAAG,QAAQ,GAAG,SAAS,EAAA,aAAA,EACjC,UAAU,GAAG,IAAI,GAAG,SAAS,EAC1C,SAAS,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,IAAI,GAAG,EAAE,SAAS,CAAC,EAAA,QAAA,EAAA,CAEjEC,GAAA,CAAC,aAAa,IACZ,IAAI,EAAE,aAAa,EAAA,aAAA,EACP,MAAM,EAClB,SAAS,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,KAAK,GAAG,WAAW,GAAG,GAAG,CAAC,EAAA,CAC9F,EACD,KAAK,GAAGA,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAA,QAAA,EAAG,KAAK,EAAA,CAAQ,GAAG,IAAI,EAC7D,QAAQ,CAAA,EAAA,CACJ;AAEX,CAAC;AAGH,OAAO,CAAC,WAAW,GAAG,SAAS;;"}
@@ -0,0 +1,38 @@
1
+ 'use client';
2
+ import { jsx } from 'react/jsx-runtime';
3
+ import { HugeiconsIcon } from '@hugeicons/react';
4
+ import { CheckmarkCircle02Icon, Alert02Icon, CancelCircleIcon, InformationCircleIcon } from '@hugeicons/core-free-icons';
5
+ import { cn } from '../libs/utils.js';
6
+ import { tone, iconStroke, iconSlot } from './ui.common.js';
7
+
8
+ /*
9
+ * The one map from a status to its glyph. An Alert and a Toast both report a status, so both take
10
+ * their mark from here: a variant has one silhouette, and a neutral information line is still the
11
+ * circled information mark in the accent. Warning is the triangle in every feedback surface (§13).
12
+ */
13
+ const glyphs = {
14
+ primary: InformationCircleIcon,
15
+ secondary: InformationCircleIcon,
16
+ danger: CancelCircleIcon,
17
+ warning: Alert02Icon,
18
+ success: CheckmarkCircle02Icon,
19
+ };
20
+ /* The information mark stays in the accent whatever the surface is, so a neutral alert's only
21
+ colour is the one thing that says "information" (§10). */
22
+ const tones = {
23
+ primary: tone.text.primary,
24
+ secondary: tone.text.primary,
25
+ danger: tone.text.danger,
26
+ warning: tone.text.warning,
27
+ success: tone.text.success,
28
+ };
29
+ /*
30
+ * The mark is the normal icon slot (20px): an Alert's status is a first-line mark beside 14px copy,
31
+ * the exception §13 records, and a Toast's mark is the same 20px. The slot is the only sizing source,
32
+ * so the caller places the mark and never sizes it.
33
+ */
34
+ const StatusMark = ({ variant, className }) => (jsx("span", { className: cn(iconSlot.normal, className), "aria-hidden": "true", children: jsx(HugeiconsIcon, { icon: glyphs[variant], "aria-hidden": "true", className: cn(iconStroke.glyph, tones[variant]) }) }));
35
+ StatusMark.displayName = "StatusMark";
36
+
37
+ export { StatusMark, StatusMark as default };
38
+ //# sourceMappingURL=StatusMark.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatusMark.js","sources":["../../../src/components/StatusMark.tsx"],"sourcesContent":["\"use client\";\n\nimport React from \"react\";\nimport { HugeiconsIcon, type IconSvgElement } from \"@hugeicons/react\";\nimport { Alert02Icon, CancelCircleIcon, CheckmarkCircle02Icon, InformationCircleIcon } from \"@hugeicons/core-free-icons\";\nimport { cn } from \"@/libs/utils\";\nimport { iconSlot, iconStroke, tone } from \"./ui.common\";\nimport type { Variant } from \"./ui.types\";\n\n/*\n * The one map from a status to its glyph. An Alert and a Toast both report a status, so both take\n * their mark from here: a variant has one silhouette, and a neutral information line is still the\n * circled information mark in the accent. Warning is the triangle in every feedback surface (§13).\n */\nconst glyphs: Record<Variant, IconSvgElement> = {\n primary: InformationCircleIcon,\n secondary: InformationCircleIcon,\n danger: CancelCircleIcon,\n warning: Alert02Icon,\n success: CheckmarkCircle02Icon,\n};\n\n/* The information mark stays in the accent whatever the surface is, so a neutral alert's only\n colour is the one thing that says \"information\" (§10). */\nconst tones: Record<Variant, string> = {\n primary: tone.text.primary,\n secondary: tone.text.primary,\n danger: tone.text.danger,\n warning: tone.text.warning,\n success: tone.text.success,\n};\n\nexport interface StatusMarkProps {\n variant: Variant;\n className?: string;\n}\n\n/*\n * The mark is the normal icon slot (20px): an Alert's status is a first-line mark beside 14px copy,\n * the exception §13 records, and a Toast's mark is the same 20px. The slot is the only sizing source,\n * so the caller places the mark and never sizes it.\n */\nexport const StatusMark = ({ variant, className }: StatusMarkProps) => (\n <span className={cn(iconSlot.normal, className)} aria-hidden=\"true\">\n <HugeiconsIcon icon={glyphs[variant]} aria-hidden=\"true\" className={cn(iconStroke.glyph, tones[variant])} />\n </span>\n);\n\nStatusMark.displayName = \"StatusMark\";\n\nexport default StatusMark;\n"],"names":["_jsx"],"mappings":"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"}
@@ -4,20 +4,20 @@ import { HugeiconsIcon } from '@hugeicons/react';
4
4
  import { Tick02Icon } from '@hugeicons/core-free-icons';
5
5
  import { forwardRef } from 'react';
6
6
  import { cn } from '../libs/utils.js';
7
- import { tone, shape, material, elevation, iconStroke, currentDestination, text, type, state, stateLayer, focusRing } from './ui.common.js';
7
+ import { type, tone, shape, material, elevation, iconStroke, currentDestination, text, state, stateLayer, focusRing } from './ui.common.js';
8
8
  import { motionFeedback, motionInkPress } from './ui.motion.js';
9
9
 
10
10
  /* A discrete progress track, not a row of floating badges. The groove and fill are the
11
11
  same recipes as Progress; each segment describes only its own explicit state, never an
12
12
  inferred percentage or completion of earlier items. */
13
- const Stepper = forwardRef(({ items, value, onValueChange, orientation = "horizontal", disabled = false, className, "aria-label": ariaLabel, ...navProps }, ref) => {
13
+ const Stepper = forwardRef(({ items, value, onValueChange, orientation = "horizontal", disabled = false, completeLabel = "Complete", className, "aria-label": ariaLabel, ...navProps }, ref) => {
14
14
  const interactive = onValueChange !== undefined;
15
15
  const listDisabled = interactive && disabled;
16
16
  const stack = orientation === "vertical";
17
17
  /* Native container queries adapt to a sidebar as well as a device. Longer sequences need
18
18
  a wider content band before their labels share a line. No measuring or duplicate controls. */
19
19
  const long = items.length > 4;
20
- const rowLayout = cn("grid min-w-0 w-full grid-cols-[0.375rem_minmax(0,1fr)] gap-x-4 gap-y-3 px-2 py-3 text-start text-sm", !stack && (long
20
+ const rowLayout = cn("grid min-w-0 w-full grid-cols-[0.375rem_minmax(0,1fr)] gap-x-4 gap-y-3 px-2 py-3 text-start", type.body, !stack && (long
21
21
  ? "[@container(min-width:64rem)]:grid-cols-1"
22
22
  : "[@container(min-width:32rem)]:grid-cols-1"));
23
23
  return (jsx("nav", { ...navProps, ref: ref, "aria-label": ariaLabel !== null && ariaLabel !== void 0 ? ariaLabel : "Progress steps", className: cn("w-full min-w-0 max-w-full p-1 [container-type:inline-size]", listDisabled && state.disabled, className), children: jsx("ol", { role: "list", className: cn("m-0 flex list-none flex-col p-0", !stack && (long ? "[@container(min-width:64rem)]:flex-row" : "[@container(min-width:32rem)]:flex-row")), children: items.map((item, index) => {
@@ -34,7 +34,7 @@ const Stepper = forwardRef(({ items, value, onValueChange, orientation = "horizo
34
34
  fill the priority action owns; a completed step holds the selected tone with an
35
35
  ink tick, and a step still ahead the neutral well its connector runs in. The
36
36
  track segment above it is the workflow's range, and keeps the range's fill. */
37
- "inline-flex size-5 shrink-0 items-center justify-center font-medium [&>svg]:size-3.5", type.caption, type.numeric, shape.circle, current ? currentDestination.inTrack : complete ? tone.selected.primary : cn(material.matteHigh, text.medium), interactive && !unavailable && motionInkPress), children: complete && !current ? (jsxs(Fragment, { children: [jsx(HugeiconsIcon, { icon: Tick02Icon, "aria-hidden": "true", className: cn(iconStroke.glyph) }), jsx("span", { className: cn("sr-only"), children: "Complete" })] })) : index + 1 }), jsx("span", { className: cn("leading-5 [overflow-wrap:anywhere]", current && "font-medium"), children: item.label }), item.description ? (jsx("span", { className: cn("[overflow-wrap:anywhere]", type.supporting, "col-start-2", !stack && (long ? "[@container(min-width:64rem)]:col-span-2" : "[@container(min-width:32rem)]:col-span-2"), text.medium), children: item.description })) : null] })] }));
37
+ "inline-flex size-5 shrink-0 items-center justify-center font-medium [&>svg]:size-3.5", type.caption, type.numeric, shape.circle, current ? currentDestination.inTrack : complete ? tone.selected.primary : cn(material.matteHigh, text.medium), interactive && !unavailable && motionInkPress), children: complete && !current ? (jsxs(Fragment, { children: [jsx(HugeiconsIcon, { icon: Tick02Icon, "aria-hidden": "true", className: cn(iconStroke.glyph) }), jsx("span", { className: cn("sr-only"), children: completeLabel })] })) : index + 1 }), jsx("span", { className: cn("leading-5 [overflow-wrap:anywhere]", current && "font-medium"), children: item.label }), item.description ? (jsx("span", { className: cn("[overflow-wrap:anywhere]", type.supporting, "col-start-2", !stack && (long ? "[@container(min-width:64rem)]:col-span-2" : "[@container(min-width:32rem)]:col-span-2"), text.medium), children: item.description })) : null] })] }));
38
38
  return (jsx("li", { "aria-current": !interactive && current ? "step" : undefined, className: cn("min-w-0 flex-1", dimmed && state.disabled), children: onValueChange ? (jsx("button", { type: "button", disabled: unavailable, "aria-current": current ? "step" : undefined, onClick: () => onValueChange(item.value), className: cn(rowLayout, shape.row, !unavailable && "group", motionFeedback, focusRing, stateLayer.quiet, current ? text.high : text.medium, unavailable ? state.disabledDescendant : state.enabled), children: content })) : (jsx("div", { className: cn(rowLayout, current ? text.high : text.medium), children: content })) }, item.value));
39
39
  }) }) }));
40
40
  });
@@ -1 +1 @@
1
- {"version":3,"file":"Stepper.js","sources":["../../../src/components/Stepper.tsx"],"sourcesContent":["\"use client\";\n\nimport { HugeiconsIcon } from \"@hugeicons/react\";\nimport { Tick02Icon } from \"@hugeicons/core-free-icons\";\nimport React, { forwardRef, type ComponentProps, type ReactNode } from \"react\";\nimport { cn } from \"@/libs/utils\";\nimport { currentDestination, elevation, focusRing, iconStroke, material, shape, state, stateLayer, text, tone, type } from \"./ui.common\";\nimport { motionFeedback, motionInkPress } from \"./ui.motion\";\n\nexport interface StepperItem {\n value: string;\n label: ReactNode;\n description?: ReactNode;\n complete?: boolean;\n disabled?: boolean;\n}\n\nexport interface StepperProps\n extends Omit<ComponentProps<\"nav\">, \"children\" | \"defaultValue\" | \"onChange\"> {\n items: StepperItem[];\n /**\n * The step the workflow has reached. Deliberately controlled, and deliberately nullable: the\n * consumer owns the workflow, and `null` is a workflow that has not started, not its first step.\n */\n value: string | null;\n /**\n * Reports the step a native button activated. Its presence is what makes the list interactive:\n * without it the steps are informative text, and no focusable fake controls are rendered.\n */\n onValueChange?: (value: string) => void;\n /** Horizontal when the container has room; otherwise the same sequence stacks vertically. */\n orientation?: \"horizontal\" | \"vertical\";\n disabled?: boolean;\n}\n\n/* A discrete progress track, not a row of floating badges. The groove and fill are the\n same recipes as Progress; each segment describes only its own explicit state, never an\n inferred percentage or completion of earlier items. */\nconst Stepper = forwardRef<HTMLElement, StepperProps>(\n (\n {\n items,\n value,\n onValueChange,\n orientation = \"horizontal\",\n disabled = false,\n className,\n \"aria-label\": ariaLabel,\n ...navProps\n },\n ref\n ) => {\n const interactive = onValueChange !== undefined;\n const listDisabled = interactive && disabled;\n const stack = orientation === \"vertical\";\n /* Native container queries adapt to a sidebar as well as a device. Longer sequences need\n a wider content band before their labels share a line. No measuring or duplicate controls. */\n const long = items.length > 4;\n const rowLayout = cn(\n \"grid min-w-0 w-full grid-cols-[0.375rem_minmax(0,1fr)] gap-x-4 gap-y-3 px-2 py-3 text-start text-sm\",\n !stack && (long\n ? \"[@container(min-width:64rem)]:grid-cols-1\"\n : \"[@container(min-width:32rem)]:grid-cols-1\")\n );\n\n return (\n <nav\n {...navProps}\n ref={ref}\n aria-label={ariaLabel ?? \"Progress steps\"}\n className={cn(\n \"w-full min-w-0 max-w-full p-1 [container-type:inline-size]\",\n listDisabled && state.disabled,\n className\n )}\n >\n {/* The DOM order and controls never change when the arrangement changes. */}\n <ol\n role=\"list\"\n className={cn(\n \"m-0 flex list-none flex-col p-0\",\n !stack && (long ? \"[@container(min-width:64rem)]:flex-row\" : \"[@container(min-width:32rem)]:flex-row\")\n )}\n >\n {items.map((item, index) => {\n const current = value !== null && item.value === value;\n const complete = item.complete === true;\n const unavailable = interactive && (disabled || item.disabled === true);\n const dimmed = interactive && !disabled && item.disabled === true;\n const content = (\n <>\n <span\n aria-hidden=\"true\"\n data-sui-step-track=\"\"\n className={cn(\n \"relative overflow-hidden\",\n \"w-1.5 self-stretch\",\n !stack && (long\n ? \"[@container(min-width:64rem)]:h-1.5 [@container(min-width:64rem)]:w-full\"\n : \"[@container(min-width:32rem)]:h-1.5 [@container(min-width:32rem)]:w-full\"),\n shape.pill,\n elevation.recessed,\n material.matteHigh\n )}\n >\n {(current || complete) && (\n <span\n data-sui-progress-indicator=\"\"\n className={cn(\n \"absolute inset-0\",\n shape.pill,\n motionFeedback,\n current ? tone.strong.primary : tone.selected.primary\n )}\n />\n )}\n </span>\n <span className={cn(\"grid min-w-0 grid-cols-[1.25rem_minmax(0,1fr)] items-start gap-x-2 gap-y-1\")}>\n <span\n data-sui-step-mark=\"\"\n className={cn(\n /* The index is a mark of its own, centred on the label's first line. The current\n step is where the reader is (`aria-current`), so its mark takes the in-track\n destination — the selected step with an accent numeral — rather than the strong\n fill the priority action owns; a completed step holds the selected tone with an\n ink tick, and a step still ahead the neutral well its connector runs in. The\n track segment above it is the workflow's range, and keeps the range's fill. */\n \"inline-flex size-5 shrink-0 items-center justify-center font-medium [&>svg]:size-3.5\",\n type.caption,\n type.numeric,\n shape.circle,\n current ? currentDestination.inTrack : complete ? tone.selected.primary : cn(material.matteHigh, text.medium),\n interactive && !unavailable && motionInkPress\n )}\n >\n {complete && !current ? (\n <>\n <HugeiconsIcon icon={Tick02Icon} aria-hidden=\"true\" className={cn(iconStroke.glyph)} />\n <span className={cn(\"sr-only\")}>Complete</span>\n </>\n ) : index + 1}\n </span>\n <span className={cn(\"leading-5 [overflow-wrap:anywhere]\", current && \"font-medium\")}>\n {item.label}\n </span>\n {item.description ? (\n <span className={cn(\n \"[overflow-wrap:anywhere]\",\n type.supporting,\n \"col-start-2\",\n !stack && (long ? \"[@container(min-width:64rem)]:col-span-2\" : \"[@container(min-width:32rem)]:col-span-2\"),\n text.medium\n )}>\n {item.description}\n </span>\n ) : null}\n </span>\n </>\n );\n\n return (\n <li\n key={item.value}\n aria-current={!interactive && current ? \"step\" : undefined}\n className={cn(\n \"min-w-0 flex-1\",\n dimmed && state.disabled\n )}\n >\n {onValueChange ? (\n <button\n type=\"button\"\n disabled={unavailable}\n aria-current={current ? \"step\" : undefined}\n onClick={() => onValueChange(item.value)}\n className={cn(\n rowLayout,\n shape.row,\n !unavailable && \"group\",\n motionFeedback,\n focusRing,\n stateLayer.quiet,\n current ? text.high : text.medium,\n unavailable ? state.disabledDescendant : state.enabled\n )}\n >\n {content}\n </button>\n ) : (\n <div className={cn(rowLayout, current ? text.high : text.medium)}>{content}</div>\n )}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n }\n);\n\nStepper.displayName = \"Stepper\";\n\nexport default Stepper;\n"],"names":["_jsx","_jsxs","_Fragment"],"mappings":"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,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;;;;AAKiF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACjF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA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"}
1
+ {"version":3,"file":"Stepper.js","sources":["../../../src/components/Stepper.tsx"],"sourcesContent":["\"use client\";\n\nimport { HugeiconsIcon } from \"@hugeicons/react\";\nimport { Tick02Icon } from \"@hugeicons/core-free-icons\";\nimport React, { forwardRef, type ComponentProps, type ReactNode } from \"react\";\nimport { cn } from \"@/libs/utils\";\nimport { currentDestination, elevation, focusRing, iconStroke, material, shape, state, stateLayer, text, tone, type } from \"./ui.common\";\nimport { motionFeedback, motionInkPress } from \"./ui.motion\";\n\nexport interface StepperItem {\n value: string;\n label: ReactNode;\n description?: ReactNode;\n complete?: boolean;\n disabled?: boolean;\n}\n\nexport interface StepperProps\n extends Omit<ComponentProps<\"nav\">, \"children\" | \"defaultValue\" | \"onChange\"> {\n items: StepperItem[];\n /**\n * The step the workflow has reached. Deliberately controlled, and deliberately nullable: the\n * consumer owns the workflow, and `null` is a workflow that has not started, not its first step.\n */\n value: string | null;\n /**\n * Reports the step a native button activated. Its presence is what makes the list interactive:\n * without it the steps are informative text, and no focusable fake controls are rendered.\n */\n onValueChange?: (value: string) => void;\n /** Horizontal when the container has room; otherwise the same sequence stacks vertically. */\n orientation?: \"horizontal\" | \"vertical\";\n disabled?: boolean;\n /** The name a completed step's mark carries for a screen reader. Defaults to `Complete`. */\n completeLabel?: string;\n}\n\n/* A discrete progress track, not a row of floating badges. The groove and fill are the\n same recipes as Progress; each segment describes only its own explicit state, never an\n inferred percentage or completion of earlier items. */\nconst Stepper = forwardRef<HTMLElement, StepperProps>(\n (\n {\n items,\n value,\n onValueChange,\n orientation = \"horizontal\",\n disabled = false,\n completeLabel = \"Complete\",\n className,\n \"aria-label\": ariaLabel,\n ...navProps\n },\n ref\n ) => {\n const interactive = onValueChange !== undefined;\n const listDisabled = interactive && disabled;\n const stack = orientation === \"vertical\";\n /* Native container queries adapt to a sidebar as well as a device. Longer sequences need\n a wider content band before their labels share a line. No measuring or duplicate controls. */\n const long = items.length > 4;\n const rowLayout = cn(\n \"grid min-w-0 w-full grid-cols-[0.375rem_minmax(0,1fr)] gap-x-4 gap-y-3 px-2 py-3 text-start\",\n type.body,\n !stack && (long\n ? \"[@container(min-width:64rem)]:grid-cols-1\"\n : \"[@container(min-width:32rem)]:grid-cols-1\")\n );\n\n return (\n <nav\n {...navProps}\n ref={ref}\n aria-label={ariaLabel ?? \"Progress steps\"}\n className={cn(\n \"w-full min-w-0 max-w-full p-1 [container-type:inline-size]\",\n listDisabled && state.disabled,\n className\n )}\n >\n {/* The DOM order and controls never change when the arrangement changes. */}\n <ol\n role=\"list\"\n className={cn(\n \"m-0 flex list-none flex-col p-0\",\n !stack && (long ? \"[@container(min-width:64rem)]:flex-row\" : \"[@container(min-width:32rem)]:flex-row\")\n )}\n >\n {items.map((item, index) => {\n const current = value !== null && item.value === value;\n const complete = item.complete === true;\n const unavailable = interactive && (disabled || item.disabled === true);\n const dimmed = interactive && !disabled && item.disabled === true;\n const content = (\n <>\n <span\n aria-hidden=\"true\"\n data-sui-step-track=\"\"\n className={cn(\n \"relative overflow-hidden\",\n \"w-1.5 self-stretch\",\n !stack && (long\n ? \"[@container(min-width:64rem)]:h-1.5 [@container(min-width:64rem)]:w-full\"\n : \"[@container(min-width:32rem)]:h-1.5 [@container(min-width:32rem)]:w-full\"),\n shape.pill,\n elevation.recessed,\n material.matteHigh\n )}\n >\n {(current || complete) && (\n <span\n data-sui-progress-indicator=\"\"\n className={cn(\n \"absolute inset-0\",\n shape.pill,\n motionFeedback,\n current ? tone.strong.primary : tone.selected.primary\n )}\n />\n )}\n </span>\n <span className={cn(\"grid min-w-0 grid-cols-[1.25rem_minmax(0,1fr)] items-start gap-x-2 gap-y-1\")}>\n <span\n data-sui-step-mark=\"\"\n className={cn(\n /* The index is a mark of its own, centred on the label's first line. The current\n step is where the reader is (`aria-current`), so its mark takes the in-track\n destination — the selected step with an accent numeral — rather than the strong\n fill the priority action owns; a completed step holds the selected tone with an\n ink tick, and a step still ahead the neutral well its connector runs in. The\n track segment above it is the workflow's range, and keeps the range's fill. */\n \"inline-flex size-5 shrink-0 items-center justify-center font-medium [&>svg]:size-3.5\",\n type.caption,\n type.numeric,\n shape.circle,\n current ? currentDestination.inTrack : complete ? tone.selected.primary : cn(material.matteHigh, text.medium),\n interactive && !unavailable && motionInkPress\n )}\n >\n {complete && !current ? (\n <>\n <HugeiconsIcon icon={Tick02Icon} aria-hidden=\"true\" className={cn(iconStroke.glyph)} />\n <span className={cn(\"sr-only\")}>{completeLabel}</span>\n </>\n ) : index + 1}\n </span>\n <span className={cn(\"leading-5 [overflow-wrap:anywhere]\", current && \"font-medium\")}>\n {item.label}\n </span>\n {item.description ? (\n <span className={cn(\n \"[overflow-wrap:anywhere]\",\n type.supporting,\n \"col-start-2\",\n !stack && (long ? \"[@container(min-width:64rem)]:col-span-2\" : \"[@container(min-width:32rem)]:col-span-2\"),\n text.medium\n )}>\n {item.description}\n </span>\n ) : null}\n </span>\n </>\n );\n\n return (\n <li\n key={item.value}\n aria-current={!interactive && current ? \"step\" : undefined}\n className={cn(\n \"min-w-0 flex-1\",\n dimmed && state.disabled\n )}\n >\n {onValueChange ? (\n <button\n type=\"button\"\n disabled={unavailable}\n aria-current={current ? \"step\" : undefined}\n onClick={() => onValueChange(item.value)}\n className={cn(\n rowLayout,\n shape.row,\n !unavailable && \"group\",\n motionFeedback,\n focusRing,\n stateLayer.quiet,\n current ? text.high : text.medium,\n unavailable ? state.disabledDescendant : state.enabled\n )}\n >\n {content}\n </button>\n ) : (\n <div className={cn(rowLayout, current ? text.high : text.medium)}>{content}</div>\n )}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n }\n);\n\nStepper.displayName = \"Stepper\";\n\nexport default Stepper;\n"],"names":["_jsx","_jsxs","_Fragment"],"mappings":"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A,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;;;;AAKiF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACjF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CA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"}