sherick-ui 2.9.0 → 2.10.1

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 +11 -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 +11 -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 +502 -166
  283. package/dist/types/index.d.ts +502 -166
  284. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Drawer.js","sources":["../../../src/components/Drawer.tsx"],"sourcesContent":["\"use client\";\n\nimport { Dialog as BaseDialog } from \"@base-ui/react/dialog\";\nimport React, { createContext, useContext, useRef, type ComponentProps, type ReactElement, type ReactNode } from \"react\";\nimport { cn } from \"@/libs/utils\";\nimport { DialogDescription } from \"./DialogDescription\";\nimport { DialogHeader } from \"./DialogHeader\";\nimport { DialogDismiss, DialogSurface, type DialogAttachment } from \"./DialogSurface\";\n\n/**\n * The viewport edge a sheet is attached to. Sides are **physical** rather than logical: the\n * contract places the sheet against that edge of the screen rather than resolving a writing\n * direction the component cannot see, so a direction-sensitive placement is the consumer's own\n * `dir`-aware arrangement rather than an inferred one.\n */\nexport type DrawerSide = Exclude<DialogAttachment, \"center\">;\n\nexport interface DrawerProps {\n children: ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n /** Base's own open-change callback, event details included. */\n onOpenChange?: BaseDialog.Root.Props[\"onOpenChange\"];\n /** The edge the sheet is attached to. */\n side?: DrawerSide;\n}\n\nexport interface DrawerTriggerProps {\n /**\n * The element the trigger's own props are handed to — usually a Sherick `Button`. The sheet\n * opens from whatever this renders, so the control that opens it looks like the control it is.\n */\n render?: ReactElement;\n children?: ReactNode;\n /** Adds to the rendered element. The trigger writes no visual rules of its own. */\n className?: string;\n}\n\nexport interface DrawerContentProps {\n children: ReactNode;\n /** Adds to the sheet's own surface. Its shell, elevation and presence are the recipe's. */\n className?: string;\n}\n\nexport interface DrawerHeaderProps {\n children: ReactNode;\n className?: string;\n}\n\nexport interface DrawerDescriptionProps {\n children: ReactNode;\n className?: string;\n}\n\nexport interface DrawerFooterProps {\n children: ReactNode;\n className?: string;\n}\n\ntype DrawerComponent = ((props: DrawerProps) => React.JSX.Element) & {\n Trigger: typeof DrawerTrigger;\n Content: typeof DrawerContent;\n Header: typeof DrawerHeader;\n Description: typeof DrawerDescription;\n Footer: typeof DrawerFooter;\n Close: typeof DrawerClose;\n};\n\n/* Base's dialog root has no notion of an edge, so the side a sheet was given travels down to the\n sheet's own part through context rather than through a second prop a consumer would have to\n keep in step with the first. */\nconst SideContext = createContext<DrawerSide>(\"bottom\");\n\nconst DrawerTrigger = ({ ...props }: DrawerTriggerProps) => <BaseDialog.Trigger {...props} />;\n\n/**\n * The sheet itself: the plane behind it, the viewport, the edge-attached surface, and the\n * dismissal control every sheet carries. Base UI — through the same dialog root a `Dialog` uses —\n * owns the portal, focus trapping and restoration, document scroll locking, Escape and outside\n * dismissal; Sherick UI owns the surface and how it slides out of its edge.\n *\n * It is a `Dialog` that changed its attachment: there is no second modal system here, so a sheet\n * traps focus, restores it, locks the page and dismisses exactly as a dialog does. Use a `Dialog`\n * when the surface has no edge.\n */\nconst DrawerContent = ({ children, className }: DrawerContentProps) => {\n const side = useContext(SideContext);\n const contentRef = useRef<HTMLDivElement | null>(null);\n\n return (\n /* Focus the reading region, so native PageDown/Space scroll the sheet before a control\n has been visited. Base still owns initial focus and the focus trap. */\n <DialogSurface\n attachment={side}\n className={cn(className)}\n initialFocus={contentRef}\n >\n <DialogDismiss label=\"Close\" />\n <div ref={contentRef} tabIndex={-1} className={cn(\"flex min-h-0 flex-1 flex-col overflow-y-auto overscroll-contain outline-none\")}>\n {children}\n </div>\n </DialogSurface>\n );\n};\n\n/* A sheet is a dialog with an edge, so its title and description are the dialog's own parts rather\n than copies that could drift from them. */\nconst DrawerHeader = ({ children, className }: DrawerHeaderProps) => (\n <DialogHeader className={cn(className)}>{children}</DialogHeader>\n);\n\nconst DrawerDescription = ({ children, className }: DrawerDescriptionProps) => (\n <DialogDescription className={cn(className)}>{children}</DialogDescription>\n);\n\n/* Actions stay on the sheet's own surface: no divider, no second layer. */\nconst DrawerFooter = ({ children, className }: DrawerFooterProps) => (\n <div className={cn(\"mt-auto flex flex-wrap items-center justify-end gap-3 px-6 pb-6 pt-4 sm:px-7\", className)}>\n {children}\n </div>\n);\n\n/* The dismissal control as a part, for an action that closes the sheet from its own footer: Base\n hands the close behavior to whatever the caller renders. */\nconst DrawerClose = (props: ComponentProps<typeof BaseDialog.Close>) => (\n <BaseDialog.Close {...props} />\n);\n\n/**\n * A surface attached to one edge of the viewport: a bottom sheet, a side panel, a top drawer. It\n * is a `Dialog` with an edge rather than a second kind of modal — the same root, the same scrim,\n * the same focus trapping and restoration, the same Escape and outside dismissal, the same\n * document scroll locking and the same portal — and only the placement and the direction the\n * surface arrives from differ.\n *\n * Compose a `Drawer.Trigger` and a `Drawer.Content`; the header, description and footer parts\n * mirror a `Dialog`'s, because it is the same surface.\n */\nconst Drawer = (({ children, side = \"bottom\", ...props }: DrawerProps) => {\n return (\n <SideContext.Provider value={side}>\n <BaseDialog.Root {...props}>{children}</BaseDialog.Root>\n </SideContext.Provider>\n );\n}) as DrawerComponent;\n\nDrawer.Trigger = DrawerTrigger;\nDrawer.Content = DrawerContent;\nDrawer.Header = DrawerHeader;\nDrawer.Description = DrawerDescription;\nDrawer.Footer = DrawerFooter;\nDrawer.Close = DrawerClose;\n\nexport default Drawer;\n"],"names":["_jsx","BaseDialog","_jsxs"],"mappings":"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"}
1
+ {"version":3,"file":"Drawer.js","sources":["../../../src/components/Drawer.tsx"],"sourcesContent":["\"use client\";\n\nimport { Dialog as BaseDialog } from \"@base-ui/react/dialog\";\nimport React, {\n createContext,\n forwardRef,\n useContext,\n useMemo,\n useRef,\n type ComponentProps,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"@/libs/utils\";\nimport { DialogDescription } from \"./DialogDescription\";\nimport { DialogFooter } from \"./DialogFooter\";\nimport { DialogHeader } from \"./DialogHeader\";\nimport { DialogSurface, type DialogAttachment } from \"./DialogSurface\";\nimport type { PartProps } from \"./ui.types\";\n\n/**\n * The viewport edge a sheet is attached to. Sides are **physical** rather than logical: the\n * contract places the sheet against that edge of the screen rather than resolving a writing\n * direction the component cannot see, so a direction-sensitive placement is the consumer's own\n * `dir`-aware arrangement rather than an inferred one.\n */\nexport type DrawerSide = Exclude<DialogAttachment, \"center\">;\n\nexport interface DrawerProps {\n children: ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n /** Base's own open-change callback, event details included. */\n onOpenChange?: BaseDialog.Root.Props[\"onOpenChange\"];\n /** The edge the sheet is attached to. */\n side?: DrawerSide;\n /** The accessible name of the sheet's dismissal control. Defaults to \"Close\". */\n closeLabel?: string;\n}\n\nexport interface DrawerTriggerProps {\n /**\n * The element the trigger's own props are handed to — usually a Sherick `Button`. The sheet\n * opens from whatever this renders, so the control that opens it looks like the control it is.\n */\n render?: ReactElement;\n children?: ReactNode;\n /** Adds to the rendered element. The trigger writes no visual rules of its own. */\n className?: string;\n}\n\n/** The sheet's own surface element: the popup, which takes the rest props and the ref. */\nexport type DrawerContentProps = PartProps<\"div\">;\n\n/** The header's own `div`. */\nexport type DrawerHeaderProps = PartProps<\"div\">;\n\n/** The supporting line's own `p`. */\nexport type DrawerDescriptionProps = PartProps<\"p\">;\n\n/** The footer's own `div`. */\nexport type DrawerFooterProps = PartProps<\"div\">;\n\ntype DrawerComponent = ((props: DrawerProps) => React.JSX.Element) & {\n Trigger: typeof DrawerTrigger;\n Content: typeof DrawerContent;\n Header: typeof DrawerHeader;\n Description: typeof DrawerDescription;\n Footer: typeof DrawerFooter;\n Close: typeof DrawerClose;\n};\n\n/* Base's dialog root has no notion of an edge, so the side a sheet was given, and the name of its\n dismissal control, travel down to the sheet's own parts through context rather than through a second\n prop a consumer would have to keep in step with the root. */\nconst DrawerContext = createContext<{ side: DrawerSide; closeLabel: string }>({\n side: \"bottom\",\n closeLabel: \"Close\",\n});\n\nconst DrawerTrigger = ({ ...props }: DrawerTriggerProps) => <BaseDialog.Trigger {...props} />;\n\n/**\n * The sheet itself: the plane behind it, the viewport, the edge-attached surface, and the\n * dismissal control every sheet carries. Base UI — through the same dialog root a `Dialog` uses —\n * owns the portal, focus trapping and restoration, document scroll locking, Escape and outside\n * dismissal; Sherick UI owns the surface and how it slides out of its edge.\n *\n * It is a `Dialog` that changed its attachment: there is no second modal system here, so a sheet\n * traps focus, restores it, locks the page and dismisses exactly as a dialog does. Use a `Dialog`\n * when the surface has no edge.\n */\nconst DrawerContent = forwardRef<HTMLDivElement, DrawerContentProps>(({ children, className, ...props }, ref) => {\n const { side, closeLabel } = useContext(DrawerContext);\n const contentRef = useRef<HTMLDivElement | null>(null);\n\n return (\n /* Focus the reading region, so native PageDown/Space scroll the sheet before a control\n has been visited. Base still owns initial focus and the focus trap. */\n <DialogSurface\n {...props}\n attachment={side}\n className={cn(className)}\n popupRef={ref}\n initialFocus={contentRef}\n closeLabel={closeLabel}\n >\n <div ref={contentRef} tabIndex={-1} className={cn(\"flex min-h-0 flex-1 flex-col overflow-y-auto overscroll-contain [outline-style:none]\")}>\n {children}\n </div>\n </DialogSurface>\n );\n});\n\nDrawerContent.displayName = \"DrawerContent\";\n\n/* A sheet is a dialog with an edge, so its title and description are the dialog's own parts rather\n than copies that could drift from them. */\nconst DrawerHeader = forwardRef<HTMLDivElement, DrawerHeaderProps>(({ className, ...props }, ref) => (\n <DialogHeader {...props} ref={ref} className={cn(className)} />\n));\n\nDrawerHeader.displayName = \"DrawerHeader\";\n\nconst DrawerDescription = forwardRef<HTMLParagraphElement, DrawerDescriptionProps>(({ className, ...props }, ref) => (\n <DialogDescription {...props} ref={ref} className={cn(className)} />\n));\n\nDrawerDescription.displayName = \"DrawerDescription\";\n\n/* The dialog's own footer, so a sheet's actions keep the dialog's insets. Like an AlertDialog's,\n it follows content with no padded body below it, so it opens its own space above. */\nconst DrawerFooter = forwardRef<HTMLDivElement, DrawerFooterProps>(({ className, ...props }, ref) => (\n <DialogFooter {...props} ref={ref} className={cn(\"pt-4\", className)} />\n));\n\nDrawerFooter.displayName = \"DrawerFooter\";\n\n/* The dismissal control as a part, for an action that closes the sheet from its own footer: Base\n hands the close behavior to whatever the caller renders. */\nconst DrawerClose = (props: ComponentProps<typeof BaseDialog.Close>) => (\n <BaseDialog.Close {...props} />\n);\n\n/**\n * A surface attached to one edge of the viewport: a bottom sheet, a side panel, a top drawer. It\n * is a `Dialog` with an edge rather than a second kind of modal — the same root, the same scrim,\n * the same focus trapping and restoration, the same Escape and outside dismissal, the same\n * document scroll locking and the same portal — and only the placement and the direction the\n * surface arrives from differ.\n *\n * Compose a `Drawer.Trigger` and a `Drawer.Content`; the header, description and footer parts\n * mirror a `Dialog`'s, because it is the same surface.\n */\nconst Drawer = (({ children, side = \"bottom\", closeLabel = \"Close\", ...props }: DrawerProps) => {\n const context = useMemo(() => ({ side, closeLabel }), [side, closeLabel]);\n\n return (\n <DrawerContext.Provider value={context}>\n <BaseDialog.Root {...props}>{children}</BaseDialog.Root>\n </DrawerContext.Provider>\n );\n}) as DrawerComponent;\n\nDrawer.Trigger = DrawerTrigger;\nDrawer.Content = DrawerContent;\nDrawer.Header = DrawerHeader;\nDrawer.Description = DrawerDescription;\nDrawer.Footer = DrawerFooter;\nDrawer.Close = DrawerClose;\n\nexport default Drawer;\n"],"names":["_jsx","BaseDialog"],"mappings":"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"}
@@ -1,19 +1,62 @@
1
1
  'use client';
2
- import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
3
3
  import { Field as Field$1 } from '@base-ui/react/field';
4
- import { forwardRef } from 'react';
4
+ import { forwardRef, useEffect } from 'react';
5
5
  import { cn } from '../libs/utils.js';
6
- import { fieldLabel, fieldMessage, fieldLayout } from './ui.common.js';
6
+ import { fieldLabel, fieldMessage, fieldLayout, density } from './ui.common.js';
7
+ import { FieldLabel } from './FieldLabel.js';
7
8
 
9
+ /** The height and type step a field's own box takes, so a row of fields and buttons shares one rhythm. */
10
+ const fieldDensity = {
11
+ sm: density.compact,
12
+ md: density.normal,
13
+ lg: density.prominent,
14
+ };
15
+ /* A setting row: its label and description at the start, its control at the end, centred on the
16
+ block of text. The gap is the one a row of settings needs, and the text block keeps the column
17
+ rhythm of `fieldLayout`, so the label and its description still touch at 4px. */
18
+ /* A setting row wraps rather than squeezing its label: when the container cannot hold a readable label
19
+ beside the control, the control moves to its own line, still at the end. */
20
+ const settingRow = "flex min-w-0 w-full flex-wrap items-center justify-between gap-x-6 gap-y-2";
8
21
  /**
9
22
  * Labels and validates one form control. Base UI owns the generated IDs and the
10
23
  * `aria-describedby` / `aria-invalid` wiring; this component owns only the order and the
11
24
  * typography of label, control, description and error.
12
25
  */
13
- const Field = forwardRef(({ label, description, error, required, className, children, invalid, ...rootProps }, ref) => {
14
- return (jsxs(Field$1.Root, { ...rootProps, ref: ref, invalid: Boolean(error) || invalid, className: cn(fieldLayout, className), children: [label && (jsxs(Field$1.Label, { className: cn(fieldLabel), children: [label, required && (jsx("span", { className: cn("ms-1 text-sherick-danger"), "aria-hidden": "true", children: "*" }))] })), children, description && (jsx(Field$1.Description, { className: cn(fieldMessage.description), children: description })), jsx(Field$1.Error, { match: error ? true : undefined, className: cn(fieldMessage.error), ...(error ? { children: error } : {}) })] }));
26
+ const Field = forwardRef(({ label, description, error, required, orientation = "vertical", className, children, invalid, ...rootProps }, ref) => {
27
+ const horizontal = orientation === "horizontal";
28
+ const labelNode = label ? (jsx(Field$1.Label, { className: cn(fieldLabel), children: jsx(FieldLabel, { required: required, children: label }) })) : null;
29
+ const descriptionNode = description ? (jsx(Field$1.Description, { className: cn(fieldMessage.description), children: description })) : null;
30
+ /* Mounted whether or not a message was passed: without `match` this part renders whatever
31
+ Base's own validation reports, so `validate`/`validationMode` are usable on their own,
32
+ and `match` pins a caller-supplied message in its place. */
33
+ const errorNode = (jsx(Field$1.Error, { match: error ? true : undefined, className: cn(fieldMessage.error), ...(error ? { children: error } : {}) }));
34
+ return (jsx(Field$1.Root, { ...rootProps, ref: ref, invalid: Boolean(error) || invalid, className: cn(horizontal ? settingRow : fieldLayout, className), children: horizontal ? (jsxs(Fragment, { children: [jsxs("div", { className: cn(fieldLayout, "min-w-[min(12rem,100%)] flex-1"), children: [labelNode, descriptionNode, errorNode] }), jsx("div", { className: cn("ms-auto flex max-w-full shrink-0 items-center"), children: children })] })) : (jsxs(Fragment, { children: [labelNode, children, descriptionNode, errorNode] })) }));
15
35
  });
16
36
  Field.displayName = "Field";
37
+ /*
38
+ * Development-only check for a Checkbox or Switch that nothing names. A control outside a `Field` has
39
+ * no name unless it is given `aria-label` or `aria-labelledby`, and a screen reader then announces it
40
+ * as an unlabelled toggle. Inside a `Field` Base wires `aria-labelledby` itself, so that is what is
41
+ * looked for on the mounted element, and production builds never run the check.
42
+ */
43
+ const useControlNameWarning = (ref, control, namedByProps) => {
44
+ useEffect(() => {
45
+ var _a, _b;
46
+ if (process.env.NODE_ENV === "production" || namedByProps)
47
+ return;
48
+ const element = ref.current;
49
+ if (!element)
50
+ return;
51
+ const named = element.hasAttribute("aria-labelledby") ||
52
+ ((_b = (_a = element.labels) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0) > 0 ||
53
+ element.closest("label") !== null;
54
+ if (!named) {
55
+ console.warn(`Sherick UI: ${control} has no accessible name. Give it an aria-label, or place it in a Field with a label.`);
56
+ }
57
+ // Checked once, when the control mounts: the name it is given is the name it keeps.
58
+ }, []);
59
+ };
17
60
 
18
- export { Field, Field as default };
61
+ export { Field, Field as default, fieldDensity, useControlNameWarning };
19
62
  //# sourceMappingURL=Field.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Field.js","sources":["../../../src/components/Field.tsx"],"sourcesContent":["\"use client\";\n\nimport { Field as BaseField } from \"@base-ui/react/field\";\nimport React, { forwardRef, type ComponentProps, type ReactNode } from \"react\";\nimport { cn } from \"@/libs/utils\";\nimport { fieldLabel, fieldLayout, fieldMessage } from \"./ui.common\";\n\nexport interface FieldProps\n extends Omit<ComponentProps<typeof BaseField.Root>, \"children\" | \"className\" | \"ref\"> {\n /** The field's label. Base UI associates it with the control and names the group. */\n label?: ReactNode;\n /** Supporting copy beneath the control. */\n description?: ReactNode;\n /**\n * The message shown while the field is invalid. Its presence is what makes the field invalid,\n * so an error can never be rendered without the state that explains it. Omit it and Base UI's\n * own validation message is shown instead.\n */\n error?: ReactNode;\n /**\n * Renders the required mark beside the label. This is presentational only: the requirement\n * itself can only be declared by the control, so pass `required` to the control as well —\n * every example, fixture and test in this repository does.\n */\n required?: boolean;\n /** Styles the field's own column. The control inside styles itself. */\n className?: string;\n /**\n * A Base-backed control that is one control: `Checkbox`, `Slider` or `NumberField`. A\n * group of controls names itself — `RadioGroup` carries its own label — because the\n * field's label belongs to the single control it validates.\n */\n children: ReactNode;\n}\n\n/**\n * Labels and validates one form control. Base UI owns the generated IDs and the\n * `aria-describedby` / `aria-invalid` wiring; this component owns only the order and the\n * typography of label, control, description and error.\n */\nexport const Field = forwardRef<HTMLDivElement, FieldProps>(\n (\n { label, description, error, required, className, children, invalid, ...rootProps },\n ref\n ) => {\n return (\n <BaseField.Root\n {...rootProps}\n ref={ref}\n invalid={Boolean(error) || invalid}\n className={cn(fieldLayout, className)}\n >\n {label && (\n <BaseField.Label className={cn(fieldLabel)}>\n {label}\n {required && (\n <span className={cn(\"ms-1 text-sherick-danger\")} aria-hidden=\"true\">\n *\n </span>\n )}\n </BaseField.Label>\n )}\n {children}\n {description && (\n <BaseField.Description className={cn(fieldMessage.description)}>\n {description}\n </BaseField.Description>\n )}\n {/* Mounted whether or not a message was passed: without `match` this part renders whatever\n Base's own validation reports, so `validate`/`validationMode` are usable on their own,\n and `match` pins a caller-supplied message in its place. */}\n <BaseField.Error\n match={error ? true : undefined}\n className={cn(fieldMessage.error)}\n {...(error ? { children: error } : {})}\n />\n </BaseField.Root>\n );\n }\n);\n\nField.displayName = \"Field\";\n\nexport default Field;\n"],"names":["_jsxs","BaseField","_jsx"],"mappings":"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"}
1
+ {"version":3,"file":"Field.js","sources":["../../../src/components/Field.tsx"],"sourcesContent":["\"use client\";\n\nimport { Field as BaseField } from \"@base-ui/react/field\";\nimport React, { forwardRef, useEffect, type ComponentProps, type ReactNode, type RefObject } from \"react\";\nimport { cn } from \"@/libs/utils\";\nimport { density, fieldLabel, fieldLayout, fieldMessage } from \"./ui.common\";\nimport FieldLabel from \"./FieldLabel\";\n\n/** The density a field takes: `sm` for a dense row, `md` the default and `lg` a prominent field. */\nexport type FieldSize = \"sm\" | \"md\" | \"lg\";\n\n/** The height and type step a field's own box takes, so a row of fields and buttons shares one rhythm. */\nexport const fieldDensity: Record<FieldSize, string> = {\n sm: density.compact,\n md: density.normal,\n lg: density.prominent,\n};\n\n/* A setting row: its label and description at the start, its control at the end, centred on the\n block of text. The gap is the one a row of settings needs, and the text block keeps the column\n rhythm of `fieldLayout`, so the label and its description still touch at 4px. */\n/* A setting row wraps rather than squeezing its label: when the container cannot hold a readable label\n beside the control, the control moves to its own line, still at the end. */\nconst settingRow = \"flex min-w-0 w-full flex-wrap items-center justify-between gap-x-6 gap-y-2\";\n\nexport interface FieldProps\n extends Omit<ComponentProps<typeof BaseField.Root>, \"children\" | \"className\" | \"ref\"> {\n /** The field's label. Base UI associates it with the control and names the group. */\n label?: ReactNode;\n /** Supporting copy beneath the control. In a horizontal field it sits beneath the label. */\n description?: ReactNode;\n /**\n * The message shown while the field is invalid. Its presence is what makes the field invalid,\n * so an error can never be rendered without the state that explains it. Omit it and Base UI's\n * own validation message is shown instead.\n */\n error?: ReactNode;\n /**\n * Renders the required mark beside the label. This is presentational only: the requirement\n * itself can only be declared by the control, so pass `required` to the control as well —\n * every example, fixture and test in this repository does.\n */\n required?: boolean;\n /**\n * `vertical` stacks the label, the control, the description and the error in one column. `horizontal`\n * is a setting row: the label and its description sit at the start and the control at the end.\n */\n orientation?: \"vertical\" | \"horizontal\";\n /** Styles the field's own column. The control inside styles itself. */\n className?: string;\n /**\n * A Base-backed control that is one control: `Checkbox`, `Switch`, `Slider`, `NumberField`, `Select`\n * or `Combobox`. A group of controls names itself — `RadioGroup` carries its own label — because\n * the field's label belongs to the single control it validates.\n */\n children: ReactNode;\n}\n\n/**\n * Labels and validates one form control. Base UI owns the generated IDs and the\n * `aria-describedby` / `aria-invalid` wiring; this component owns only the order and the\n * typography of label, control, description and error.\n */\nexport const Field = forwardRef<HTMLDivElement, FieldProps>(\n (\n { label, description, error, required, orientation = \"vertical\", className, children, invalid, ...rootProps },\n ref\n ) => {\n const horizontal = orientation === \"horizontal\";\n\n const labelNode = label ? (\n <BaseField.Label className={cn(fieldLabel)}>\n <FieldLabel required={required}>{label}</FieldLabel>\n </BaseField.Label>\n ) : null;\n\n const descriptionNode = description ? (\n <BaseField.Description className={cn(fieldMessage.description)}>{description}</BaseField.Description>\n ) : null;\n\n /* Mounted whether or not a message was passed: without `match` this part renders whatever\n Base's own validation reports, so `validate`/`validationMode` are usable on their own,\n and `match` pins a caller-supplied message in its place. */\n const errorNode = (\n <BaseField.Error\n match={error ? true : undefined}\n className={cn(fieldMessage.error)}\n {...(error ? { children: error } : {})}\n />\n );\n\n return (\n <BaseField.Root\n {...rootProps}\n ref={ref}\n invalid={Boolean(error) || invalid}\n className={cn(horizontal ? settingRow : fieldLayout, className)}\n >\n {horizontal ? (\n <>\n {/* The text block is one column, so its label, description and error keep the vertical rhythm. */}\n <div className={cn(fieldLayout, \"min-w-[min(12rem,100%)] flex-1\")}>\n {labelNode}\n {descriptionNode}\n {errorNode}\n </div>\n <div className={cn(\"ms-auto flex max-w-full shrink-0 items-center\")}>{children}</div>\n </>\n ) : (\n <>\n {labelNode}\n {children}\n {descriptionNode}\n {errorNode}\n </>\n )}\n </BaseField.Root>\n );\n }\n);\n\nField.displayName = \"Field\";\n\n/*\n * Development-only check for a Checkbox or Switch that nothing names. A control outside a `Field` has\n * no name unless it is given `aria-label` or `aria-labelledby`, and a screen reader then announces it\n * as an unlabelled toggle. Inside a `Field` Base wires `aria-labelledby` itself, so that is what is\n * looked for on the mounted element, and production builds never run the check.\n */\nexport const useControlNameWarning = (\n ref: RefObject<HTMLButtonElement | null>,\n control: \"Checkbox\" | \"Switch\",\n namedByProps: boolean\n) => {\n useEffect(() => {\n if (process.env.NODE_ENV === \"production\" || namedByProps) return;\n const element = ref.current;\n if (!element) return;\n const named =\n element.hasAttribute(\"aria-labelledby\") ||\n (element.labels?.length ?? 0) > 0 ||\n element.closest(\"label\") !== null;\n if (!named) {\n console.warn(\n `Sherick UI: ${control} has no accessible name. Give it an aria-label, or place it in a Field with a label.`\n );\n }\n // Checked once, when the control mounts: the name it is given is the name it keeps.\n }, []);\n};\n\nexport default Field;\n"],"names":["_jsx","BaseField","_jsxs","_Fragment"],"mappings":";;;;;;;;AAWA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,YAAY,CAAA,CAAA,CAA8B;IACrD,CAAA,CAAE,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO;IACnB,CAAA,CAAE,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM;IAClB,CAAA,CAAE,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS;;AAGvB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;AAEmF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACnF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAC8E,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CA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"}
@@ -0,0 +1,15 @@
1
+ import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
+ import { cn } from '../libs/utils.js';
3
+ import { tone } from './ui.common.js';
4
+
5
+ /*
6
+ * The words of a field's name and, when the control is required, the mark that says so. The wrapper
7
+ * that names the control is the caller's — Base's `Field.Label`, a `legend`, a `Slider` label — so the
8
+ * typography (`fieldLabel`) stays with that wrapper. The mark lives here once, and is hidden from
9
+ * assistive technology because the control's own `required` already announces it.
10
+ */
11
+ const FieldLabel = ({ children, required = false }) => (jsxs(Fragment, { children: [children, required && (jsx("span", { className: cn("ms-1", tone.text.danger), "aria-hidden": "true", children: "*" }))] }));
12
+ FieldLabel.displayName = "FieldLabel";
13
+
14
+ export { FieldLabel, FieldLabel as default };
15
+ //# sourceMappingURL=FieldLabel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldLabel.js","sources":["../../../src/components/FieldLabel.tsx"],"sourcesContent":["import React, { type ReactNode } from \"react\";\nimport { cn } from \"@/libs/utils\";\nimport { tone } from \"./ui.common\";\n\nexport interface FieldLabelProps {\n children: ReactNode;\n /** Adds the required mark. The control itself declares the requirement, so the mark is decorative. */\n required?: boolean;\n}\n\n/*\n * The words of a field's name and, when the control is required, the mark that says so. The wrapper\n * that names the control is the caller's — Base's `Field.Label`, a `legend`, a `Slider` label — so the\n * typography (`fieldLabel`) stays with that wrapper. The mark lives here once, and is hidden from\n * assistive technology because the control's own `required` already announces it.\n */\nexport const FieldLabel = ({ children, required = false }: FieldLabelProps) => (\n <>\n {children}\n {required && (\n <span className={cn(\"ms-1\", tone.text.danger)} aria-hidden=\"true\">\n *\n </span>\n )}\n </>\n);\n\nFieldLabel.displayName = \"FieldLabel\";\n\nexport default FieldLabel;\n"],"names":["_jsxs","_Fragment","_jsx"],"mappings":";;;;AAUA;;;;;AAKG;AACI,MAAM,UAAU,GAAG,CAAC,EAAE,QAAQ,EAAE,QAAQ,GAAG,KAAK,EAAmB,MACxEA,IAAA,CAAAC,QAAA,EAAA,EAAA,QAAA,EAAA,CACG,QAAQ,EACR,QAAQ,KACPC,cAAM,SAAS,EAAE,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAA,aAAA,EAAc,MAAM,kBAE1D,CACR,CAAA,EAAA,CACA;AAGL,UAAU,CAAC,WAAW,GAAG,YAAY;;"}
@@ -1,17 +1,27 @@
1
1
  'use client';
2
2
  import { jsxs, jsx } from 'react/jsx-runtime';
3
- import { Button } from '@base-ui/react/button';
4
3
  import { Field } from '@base-ui/react/field';
5
4
  import { HugeiconsIcon } from '@hugeicons/react';
6
- import { Upload04Icon, Image01Icon, File01Icon, Cancel01Icon, Delete02Icon } from '@hugeicons/core-free-icons';
5
+ import { Upload04Icon, Image01Icon, File01Icon, Delete02Icon } from '@hugeicons/core-free-icons';
7
6
  import { forwardRef, useId, useRef, useState, useEffect } from 'react';
8
7
  import { cn } from '../libs/utils.js';
9
- import Button$1 from './Button.js';
10
- import { fieldLabel, iconStroke, text, state, tone, stateLayer, focusRingDrag, focusRingWithin, rim, material, shape, type, focusRingInset, density, edge, recessedTop, matteInset, fieldMessage, fieldLayout } from './ui.common.js';
11
- import { motionFeedback, motionInkPress } from './ui.motion.js';
8
+ import Button from './Button.js';
9
+ import DismissButton from './DismissButton.js';
10
+ import { FieldLabel } from './FieldLabel.js';
11
+ import { fieldLabel, iconStroke, text, type, state, tone, stateLayer, focusRingDrag, focusRingWithin, rim, material, shape, edge, recessedTop, matteInset, fieldMessage, fieldLayout } from './ui.common.js';
12
+ import { motionFeedback } from './ui.motion.js';
12
13
  import { fileKey, formatBytes, resolveMaxFiles, resolveMaxSize, selectFiles } from './fileUpload.rules.js';
13
14
 
14
- const FileUpload = forwardRef(({ label, description, error, files, defaultFiles, onFilesChange, multiple = false, accept, maxSize, maxFiles, disabled = false, onReject, selectLabel = "Select files", removeLabel, clearLabel = "Clear files", className, ...rootProps }, forwardedRef) => {
15
+ /* The noun follows the count through the locale's own plural rules, so "1 file" and "2 files" come from
16
+ the platform rather than from a test on `=== 1`. */
17
+ const fileNoun = (count) => (new Intl.PluralRules().select(count) === "one" ? "file" : "files");
18
+ const defaultFileUploadLabels = {
19
+ removedFile: (name) => `Removed ${name}.`,
20
+ removedFiles: (count) => `Removed ${count} ${fileNoun(count)}.`,
21
+ addedFiles: (count) => `Added ${count} ${fileNoun(count)}.`,
22
+ };
23
+ const FileUpload = forwardRef(({ label, description, error, files, defaultFiles, onFilesChange, multiple = false, accept, maxSize, maxFiles, disabled = false, onReject, selectLabel = "Select files", removeLabel, clearLabel = "Clear files", labels, className, ...rootProps }, forwardedRef) => {
24
+ const copy = { ...defaultFileUploadLabels, ...labels };
15
25
  const baseId = useId();
16
26
  const hintId = `${baseId}-hint`;
17
27
  const inputRef = useRef(null);
@@ -50,11 +60,11 @@ const FileUpload = forwardRef(({ label, description, error, files, defaultFiles,
50
60
  const removed = before.filter((file) => !afterKeys.has(fileKey(file)));
51
61
  const parts = [];
52
62
  if (removed.length === 1)
53
- parts.push(`Removed ${removed[0].name}.`);
63
+ parts.push(copy.removedFile(removed[0].name));
54
64
  else if (removed.length > 1)
55
- parts.push(`Removed ${removed.length} files.`);
65
+ parts.push(copy.removedFiles(removed.length));
56
66
  if (added > 0)
57
- parts.push(`Added ${added} file${added === 1 ? "" : "s"}.`);
67
+ parts.push(copy.addedFiles(added));
58
68
  setAnnouncement(parts.join(" "));
59
69
  if (!focus || removed.length === 0)
60
70
  return;
@@ -182,17 +192,17 @@ const FileUpload = forwardRef(({ label, description, error, files, defaultFiles,
182
192
  ]
183
193
  .filter((part) => part !== null)
184
194
  .join(" · ");
185
- return (jsxs(Field.Root, { ...rootProps, disabled: disabled, invalid: Boolean(error), className: cn(fieldLayout, className), children: [jsx(Field.Label, { className: cn(fieldLabel), children: label }), jsxs("label", { className: cn("relative z-10 flex min-w-0 flex-col items-center gap-2 px-4 py-4 text-center", shape.control, material.control, rim.dashed, !disabled && rim.dashedHover, rim.dashedDragging, motionFeedback, focusRingWithin, focusRingDrag, !disabled && state.enabled, !disabled && stateLayer.quiet, !disabled && dragging && tone.tonal.primary, disabled && state.disabled), "data-sui-drop-target": "", "data-dragging": dragging || undefined, onDragEnter: handleDragEnter, onDragOver: handleDragOver, onDragLeave: handleDragLeave, onDrop: handleDrop, children: [jsx("span", { className: cn("inline-flex size-8 shrink-0 items-center justify-center [&>svg]:size-7", text.medium), "aria-hidden": "true", children: jsx(HugeiconsIcon, { icon: Upload04Icon, "aria-hidden": "true", className: cn(iconStroke.glyph) }) }), jsxs("span", { className: cn("flex min-w-0 flex-col items-center gap-1"), children: [jsx("span", { className: cn("text-base font-semibold", text.high), children: dragging ? (multiple ? "Drop files here" : "Drop the file here") : selectLabel }), jsx("span", { className: cn("text-sm leading-5", text.medium), children: multiple ? "or drag and drop files" : "or drag and drop a file" })] }), jsx(Field.Control, { ref: forwardedRef, render: jsx("input", { ref: inputRef }), type: "file", multiple: multiple || undefined, accept: accept, "aria-describedby": hint ? hintId : undefined, onChange: handlePickerChange, className: cn("sr-only") })] }), selected.length > 0 && (jsxs("div", { className: cn("mx-4 min-w-0 overflow-hidden", shape.control, "rounded-t-none", matteInset, recessedTop), children: [jsx("ul", { role: "list", className: cn("m-0 min-w-0 list-none px-3 pt-3"), children: selected.map((file, index) => {
195
+ return (jsxs(Field.Root, { ...rootProps, disabled: disabled, invalid: Boolean(error), className: cn(fieldLayout, className), children: [label && (jsx(Field.Label, { className: cn(fieldLabel), children: jsx(FieldLabel, { children: label }) })), jsxs("label", { className: cn("relative z-10 flex min-w-0 flex-col items-center gap-2 px-4 py-4 text-center", shape.control, material.control, rim.dashed, !disabled && rim.dashedHover, rim.dashedDragging, motionFeedback, focusRingWithin, focusRingDrag, !disabled && state.enabled, !disabled && stateLayer.quiet, !disabled && dragging && tone.tonal.primary, disabled && state.disabled), "data-sui-drop-target": "", "data-dragging": dragging || undefined, onDragEnter: handleDragEnter, onDragOver: handleDragOver, onDragLeave: handleDragLeave, onDrop: handleDrop, children: [jsx("span", { className: cn("inline-flex size-8 shrink-0 items-center justify-center [&>svg]:size-7", text.medium), "aria-hidden": "true", children: jsx(HugeiconsIcon, { icon: Upload04Icon, "aria-hidden": "true", className: cn(iconStroke.glyph) }) }), jsxs("span", { className: cn("flex min-w-0 flex-col items-center gap-1"), children: [jsx("span", { className: cn(type.title, text.high), children: dragging ? (multiple ? "Drop files here" : "Drop the file here") : selectLabel }), jsx("span", { className: cn(type.body, text.medium), children: multiple ? "or drag and drop files" : "or drag and drop a file" })] }), jsx(Field.Control, { ref: forwardedRef, render: jsx("input", { ref: inputRef }), type: "file", multiple: multiple || undefined, accept: accept, "aria-describedby": hint ? hintId : undefined, onChange: handlePickerChange, className: cn("sr-only") })] }), selected.length > 0 && (jsxs("div", { className: cn("-mt-2 mx-4 min-w-0 overflow-hidden", shape.control, "rounded-t-none", matteInset, recessedTop), children: [jsx("ul", { role: "list", className: cn("m-0 min-w-0 list-none px-3 pt-3"), children: selected.map((file, index) => {
186
196
  const key = fileKey(file);
187
197
  const extension = file.name.includes(".") ? file.name.slice(file.name.lastIndexOf(".") + 1) : "";
188
198
  const fileType = (extension || file.type.split("/").pop() || "File").toUpperCase();
189
- return (jsxs("li", { className: cn("flex min-w-0 items-start gap-3 py-2 ps-3", edge.row, text.high), children: [jsx("span", { "aria-hidden": "true", className: cn("inline-flex h-11 w-5 shrink-0 items-center [&>svg]:size-5", text.medium), children: file.type.startsWith("image/") ? jsx(HugeiconsIcon, { icon: Image01Icon, "aria-hidden": "true", className: cn(iconStroke.glyph) }) : jsx(HugeiconsIcon, { icon: File01Icon, "aria-hidden": "true", className: cn(iconStroke.glyph) }) }), jsxs("span", { className: cn("flex min-w-0 flex-1 flex-col [overflow-wrap:anywhere]", type.body), children: [jsx("span", { children: file.name }), jsxs("span", { className: cn(type.supporting, text.medium), children: [formatBytes(file.size), " \u00B7 ", fileType] })] }), jsx(Button, { ref: (node) => {
199
+ return (jsxs("li", { className: cn("flex min-w-0 items-start gap-3 py-2 ps-3", edge.row, text.high), children: [jsx("span", { "aria-hidden": "true", className: cn("inline-flex h-11 w-5 shrink-0 items-center [&>svg]:size-5", text.medium), children: file.type.startsWith("image/") ? jsx(HugeiconsIcon, { icon: Image01Icon, "aria-hidden": "true", className: cn(iconStroke.glyph) }) : jsx(HugeiconsIcon, { icon: File01Icon, "aria-hidden": "true", className: cn(iconStroke.glyph) }) }), jsxs("span", { className: cn("flex min-w-0 flex-1 flex-col [overflow-wrap:anywhere]", type.body), children: [jsx("span", { children: file.name }), jsxs("span", { className: cn(type.supporting, text.medium), children: [formatBytes(file.size), " \u00B7 ", fileType] })] }), jsx(DismissButton, { ref: (node) => {
190
200
  if (node)
191
201
  removalRefs.current.set(key, node);
192
202
  else
193
203
  removalRefs.current.delete(key);
194
- }, type: "button", "aria-label": removeLabel ? removeLabel(file) : `Remove ${file.name}`, disabled: disabled, onClick: () => removeFile(index), className: cn("group inline-flex shrink-0 items-center justify-center", density.target, shape.circle, text.medium, !disabled && "hover:text-sherick-ink", motionFeedback, focusRingInset, stateLayer.quiet, disabled ? state.disabled : state.enabled), children: jsx("span", { className: cn("inline-flex items-center justify-center", motionInkPress), children: jsx(HugeiconsIcon, { icon: Cancel01Icon, className: cn(iconStroke.glyph, "size-5"), "aria-hidden": "true" }) }) })] }, key));
195
- }) }), jsx("div", { className: cn("flex justify-end px-3 pb-2 pt-1"), children: jsx(Button$1, { ref: clearRef, type: "button", appearance: "text", variant: "danger", icon: jsx(HugeiconsIcon, { icon: Delete02Icon, "aria-hidden": "true", className: cn(iconStroke.glyph) }), size: "sm", disabled: disabled, onClick: clearFiles, children: clearLabel }) })] })), hint && (jsx("span", { id: hintId, className: cn(fieldMessage.description), children: hint })), description && (jsx(Field.Description, { className: cn(fieldMessage.description), children: description })), error ? (jsx(Field.Error, { match: true, className: cn(fieldMessage.error), children: error })) : null, jsxs("div", { role: "status", className: cn(rejections.length > 0 && cn("mt-2 flex flex-col gap-1", type.supporting)), children: [announcement !== "" && jsx("span", { className: cn("sr-only"), children: announcement }), rejections.length > 0 && (jsx("span", { className: cn("text-sherick-danger"), children: rejections.map((rejection) => rejection.message).join(" ") }, attempt))] })] }));
204
+ }, label: removeLabel ? removeLabel(file) : `Remove ${file.name}`, inRow: true, disabled: disabled, onClick: () => removeFile(index), className: cn(disabled ? state.disabled : undefined) })] }, key));
205
+ }) }), jsx("div", { className: cn("flex justify-end px-3 pb-2 pt-1"), children: jsx(Button, { ref: clearRef, type: "button", appearance: "text", variant: "danger", icon: jsx(HugeiconsIcon, { icon: Delete02Icon, "aria-hidden": "true", className: cn(iconStroke.glyph) }), size: "sm", disabled: disabled, onClick: clearFiles, children: clearLabel }) })] })), hint && (jsx("span", { id: hintId, className: cn(fieldMessage.description), children: hint })), description && (jsx(Field.Description, { className: cn(fieldMessage.description), children: description })), error ? (jsx(Field.Error, { match: true, className: cn(fieldMessage.error), children: error })) : null, jsxs("div", { role: "status", className: cn(rejections.length > 0 ? cn("flex flex-col gap-1", type.supporting) : "absolute"), children: [announcement !== "" && jsx("span", { className: cn("sr-only"), children: announcement }), rejections.length > 0 && (jsx("span", { className: cn("text-sherick-danger"), children: rejections.map((rejection) => rejection.message).join(" ") }, attempt))] })] }));
196
206
  });
197
207
  FileUpload.displayName = "FileUpload";
198
208