@spark-ui/components 13.1.4 → 13.2.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 (731) hide show
  1. package/dist/Button-B6rA3-e5.js +2 -0
  2. package/dist/Button-B6rA3-e5.js.map +1 -0
  3. package/dist/{chunk-2YM6GKWW.mjs → Button-C3C0aixy.mjs} +130 -173
  4. package/dist/Button-C3C0aixy.mjs.map +1 -0
  5. package/dist/DialogContent.styles-B5pR8ECK.js +2 -0
  6. package/dist/DialogContent.styles-B5pR8ECK.js.map +1 -0
  7. package/dist/{chunk-XZ47F6TP.mjs → DialogContent.styles-_lRDsl8c.mjs} +6 -8
  8. package/dist/DialogContent.styles-_lRDsl8c.mjs.map +1 -0
  9. package/dist/Icon-CF0W0LKr.js +2 -0
  10. package/dist/Icon-CF0W0LKr.js.map +1 -0
  11. package/dist/Icon-Ck-dhfLd.mjs +58 -0
  12. package/dist/Icon-Ck-dhfLd.mjs.map +1 -0
  13. package/dist/IconButton-C62-axzv.mjs +43 -0
  14. package/dist/IconButton-C62-axzv.mjs.map +1 -0
  15. package/dist/IconButton-D3g86WpZ.js +2 -0
  16. package/dist/IconButton-D3g86WpZ.js.map +1 -0
  17. package/dist/Slot-D2Bbf8Gw.mjs +14 -0
  18. package/dist/Slot-D2Bbf8Gw.mjs.map +1 -0
  19. package/dist/Slot-DQ8z2zsy.js +2 -0
  20. package/dist/Slot-DQ8z2zsy.js.map +1 -0
  21. package/dist/Spinner-_Kffli3B.js +2 -0
  22. package/dist/Spinner-_Kffli3B.js.map +1 -0
  23. package/dist/{chunk-GAK4SC2F.mjs → Spinner-jF3-zoh_.mjs} +29 -40
  24. package/dist/Spinner-jF3-zoh_.mjs.map +1 -0
  25. package/dist/{chunk-RKPP7ZOK.mjs → TextLink-BuzFRWO6.mjs} +27 -36
  26. package/dist/TextLink-BuzFRWO6.mjs.map +1 -0
  27. package/dist/TextLink-C3xDLsbC.js +2 -0
  28. package/dist/TextLink-C3xDLsbC.js.map +1 -0
  29. package/dist/VisuallyHidden-CB6Nx76j.js +2 -0
  30. package/dist/VisuallyHidden-CB6Nx76j.js.map +1 -0
  31. package/dist/VisuallyHidden-KH1biLx-.mjs +28 -0
  32. package/dist/VisuallyHidden-KH1biLx-.mjs.map +1 -0
  33. package/dist/accordion/Accordion.d.ts +27 -0
  34. package/dist/accordion/AccordionItem.d.ts +12 -0
  35. package/dist/accordion/AccordionItemContent.d.ts +12 -0
  36. package/dist/accordion/AccordionItemHeader.d.ts +9 -0
  37. package/dist/accordion/AccordionItemTrigger.d.ts +12 -0
  38. package/dist/accordion/index.d.mts +10 -68
  39. package/dist/accordion/index.d.ts +10 -68
  40. package/dist/accordion/index.js +2 -325
  41. package/dist/accordion/index.js.map +1 -1
  42. package/dist/accordion/index.mjs +114 -154
  43. package/dist/accordion/index.mjs.map +1 -1
  44. package/dist/accordion/useRenderSlot.d.ts +3 -0
  45. package/dist/alert-dialog/AlertDialog.d.ts +29 -0
  46. package/dist/alert-dialog/AlertDialogAction.d.ts +13 -0
  47. package/dist/alert-dialog/AlertDialogBody.d.ts +12 -0
  48. package/dist/alert-dialog/AlertDialogCancel.d.ts +13 -0
  49. package/dist/alert-dialog/AlertDialogContent.d.ts +9 -0
  50. package/dist/alert-dialog/AlertDialogContext.d.ts +12 -0
  51. package/dist/alert-dialog/AlertDialogDescription.d.ts +9 -0
  52. package/dist/alert-dialog/AlertDialogFooter.d.ts +10 -0
  53. package/dist/alert-dialog/AlertDialogHeader.d.ts +10 -0
  54. package/dist/alert-dialog/AlertDialogOverlay.d.ts +9 -0
  55. package/dist/alert-dialog/AlertDialogPortal.d.ts +7 -0
  56. package/dist/alert-dialog/AlertDialogTitle.d.ts +9 -0
  57. package/dist/alert-dialog/AlertDialogTrigger.d.ts +13 -0
  58. package/dist/alert-dialog/index.d.mts +26 -147
  59. package/dist/alert-dialog/index.d.ts +26 -147
  60. package/dist/alert-dialog/index.js +2 -405
  61. package/dist/alert-dialog/index.js.map +1 -1
  62. package/dist/alert-dialog/index.mjs +172 -260
  63. package/dist/alert-dialog/index.mjs.map +1 -1
  64. package/dist/alert-dialog/useRenderSlot.d.ts +3 -0
  65. package/dist/avatar/Avatar.d.ts +3 -0
  66. package/dist/avatar/AvatarAction.d.ts +9 -0
  67. package/dist/avatar/AvatarImage.d.ts +7 -0
  68. package/dist/avatar/AvatarOnlineBadge.d.ts +9 -0
  69. package/dist/avatar/AvatarPlaceholder.d.ts +8 -0
  70. package/dist/avatar/AvatarUser.d.ts +7 -0
  71. package/dist/avatar/context.d.ts +5 -0
  72. package/dist/avatar/index.d.mts +8 -59
  73. package/dist/avatar/index.d.ts +8 -59
  74. package/dist/avatar/index.js +2 -1323
  75. package/dist/avatar/index.js.map +1 -1
  76. package/dist/avatar/index.mjs +149 -207
  77. package/dist/avatar/index.mjs.map +1 -1
  78. package/dist/avatar/types.d.ts +24 -0
  79. package/dist/badge/Badge.d.ts +9 -0
  80. package/dist/badge/BadgeItem.d.ts +31 -0
  81. package/dist/badge/BadgeItem.styles.d.ts +7 -0
  82. package/dist/badge/index.d.mts +1 -47
  83. package/dist/badge/index.d.ts +1 -47
  84. package/dist/badge/index.js +2 -122
  85. package/dist/badge/index.js.map +1 -1
  86. package/dist/badge/index.mjs +32 -44
  87. package/dist/badge/index.mjs.map +1 -1
  88. package/dist/breadcrumb/Breadcrumb.d.ts +10 -0
  89. package/dist/breadcrumb/Breadcrumb.styles.d.ts +0 -0
  90. package/dist/breadcrumb/BreadcrumbCurrentPage.d.ts +11 -0
  91. package/dist/breadcrumb/BreadcrumbItem.d.ts +9 -0
  92. package/dist/breadcrumb/BreadcrumbLink.d.ts +12 -0
  93. package/dist/breadcrumb/BreadcrumbSeparator.d.ts +10 -0
  94. package/dist/breadcrumb/index.d.mts +7 -59
  95. package/dist/breadcrumb/index.d.ts +7 -59
  96. package/dist/breadcrumb/index.js +2 -327
  97. package/dist/breadcrumb/index.js.map +1 -1
  98. package/dist/breadcrumb/index.mjs +106 -146
  99. package/dist/breadcrumb/index.mjs.map +1 -1
  100. package/dist/button/Button.d.ts +26 -0
  101. package/dist/button/Button.styles.d.ts +10 -0
  102. package/dist/button/index.d.mts +1 -41
  103. package/dist/button/index.d.ts +1 -41
  104. package/dist/button/index.js +2 -935
  105. package/dist/button/index.js.map +1 -1
  106. package/dist/button/index.mjs +3 -8
  107. package/dist/button/index.mjs.map +1 -1
  108. package/dist/button/variants/contrast.d.ts +45 -0
  109. package/dist/button/variants/filled.d.ts +45 -0
  110. package/dist/button/variants/ghost.d.ts +45 -0
  111. package/dist/button/variants/index.d.mts +5 -0
  112. package/dist/button/variants/index.d.ts +5 -0
  113. package/dist/button/variants/outlined.d.ts +45 -0
  114. package/dist/button/variants/tinted.d.ts +45 -0
  115. package/dist/card/Backdrop.d.ts +14 -0
  116. package/dist/card/Card.d.ts +16 -0
  117. package/dist/card/Card.styles.d.ts +7 -0
  118. package/dist/card/Content.d.ts +15 -0
  119. package/dist/card/Content.styles.d.ts +8 -0
  120. package/dist/card/context.d.ts +11 -0
  121. package/dist/card/index.d.mts +5 -58
  122. package/dist/card/index.d.ts +5 -58
  123. package/dist/card/index.js +2 -502
  124. package/dist/card/index.js.map +1 -1
  125. package/dist/card/index.mjs +125 -178
  126. package/dist/card/index.mjs.map +1 -1
  127. package/dist/card/utils.d.ts +3 -0
  128. package/dist/carousel/Carousel.d.ts +12 -0
  129. package/dist/carousel/CarouselControls.d.ts +9 -0
  130. package/dist/carousel/CarouselNextButton.d.ts +5 -0
  131. package/dist/carousel/CarouselPageIndicator.d.ts +14 -0
  132. package/dist/carousel/CarouselPagePicker.d.ts +14 -0
  133. package/dist/carousel/CarouselPrevButton.d.ts +5 -0
  134. package/dist/carousel/CarouselSlide.d.ts +12 -0
  135. package/dist/carousel/CarouselSlides.d.ts +10 -0
  136. package/dist/carousel/CarouselViewport.d.ts +9 -0
  137. package/dist/carousel/index.d.mts +18 -263
  138. package/dist/carousel/index.d.ts +18 -263
  139. package/dist/carousel/index.js +2 -1882
  140. package/dist/carousel/index.js.map +1 -1
  141. package/dist/carousel/index.mjs +428 -650
  142. package/dist/carousel/index.mjs.map +1 -1
  143. package/dist/carousel/types.d.ts +165 -0
  144. package/dist/carousel/useCarousel.d.ts +2 -0
  145. package/dist/carousel/useCarouselVisibility.d.ts +13 -0
  146. package/dist/carousel/useEvent.d.ts +7 -0
  147. package/dist/carousel/useIsMounted.d.ts +1 -0
  148. package/dist/carousel/useIsVisible.d.ts +6 -0
  149. package/dist/carousel/useResizeObserver.d.ts +2 -0
  150. package/dist/carousel/useScrollEnd.d.ts +3 -0
  151. package/dist/carousel/useSnapPoints.d.ts +10 -0
  152. package/dist/carousel/utils.d.ts +24 -0
  153. package/dist/checkbox/Checkbox.d.ts +10 -0
  154. package/dist/checkbox/CheckboxGroup.d.ts +18 -0
  155. package/dist/checkbox/CheckboxGroup.styles.d.ts +5 -0
  156. package/dist/checkbox/CheckboxGroupContext.d.ts +41 -0
  157. package/dist/checkbox/CheckboxIndicator.d.ts +9 -0
  158. package/dist/checkbox/CheckboxInput.d.ts +47 -0
  159. package/dist/checkbox/CheckboxInput.styles.d.ts +5 -0
  160. package/dist/checkbox/CheckboxLabel.d.ts +12 -0
  161. package/dist/checkbox/CheckboxLabel.styles.d.ts +5 -0
  162. package/dist/checkbox/index.d.mts +2 -120
  163. package/dist/checkbox/index.d.ts +2 -120
  164. package/dist/checkbox/index.js +2 -511
  165. package/dist/checkbox/index.js.map +1 -1
  166. package/dist/checkbox/index.mjs +135 -226
  167. package/dist/checkbox/index.mjs.map +1 -1
  168. package/dist/chip/Chip.d.ts +34 -0
  169. package/dist/chip/Chip.styles.d.ts +8 -0
  170. package/dist/chip/ChipClearButton.d.ts +10 -0
  171. package/dist/chip/ChipClearButton.styles.d.ts +10 -0
  172. package/dist/chip/ChipContent.d.ts +8 -0
  173. package/dist/chip/ChipIcon.d.ts +8 -0
  174. package/dist/chip/ChipLeadingIcon.d.ts +9 -0
  175. package/dist/chip/ChipTrailingIcon.d.ts +9 -0
  176. package/dist/chip/index.d.mts +10 -92
  177. package/dist/chip/index.d.ts +10 -92
  178. package/dist/chip/index.js +2 -908
  179. package/dist/chip/index.js.map +1 -1
  180. package/dist/chip/index.mjs +218 -324
  181. package/dist/chip/index.mjs.map +1 -1
  182. package/dist/chip/useChipContext.d.ts +4 -0
  183. package/dist/chip/useChipElement.d.ts +41 -0
  184. package/dist/chip/variants/dashed.d.ts +49 -0
  185. package/dist/chip/variants/index.d.mts +3 -0
  186. package/dist/chip/variants/index.d.ts +3 -0
  187. package/dist/chip/variants/outlined.d.ts +49 -0
  188. package/dist/chip/variants/tinted.d.ts +49 -0
  189. package/dist/collapsible/Content.d.ts +12 -0
  190. package/dist/collapsible/Root.d.ts +12 -0
  191. package/dist/collapsible/Trigger.d.ts +11 -0
  192. package/dist/collapsible/index.d.mts +4 -40
  193. package/dist/collapsible/index.d.ts +4 -40
  194. package/dist/collapsible/index.js +2 -109
  195. package/dist/collapsible/index.js.map +1 -1
  196. package/dist/collapsible/index.mjs +39 -58
  197. package/dist/collapsible/index.mjs.map +1 -1
  198. package/dist/collapsible/useRenderSlot.d.ts +3 -0
  199. package/dist/combobox/Combobox.d.ts +6 -0
  200. package/dist/combobox/ComboboxClearButton.d.ts +9 -0
  201. package/dist/combobox/ComboboxContext.d.ts +108 -0
  202. package/dist/combobox/ComboboxDisclosure.d.ts +13 -0
  203. package/dist/combobox/ComboboxEmpty.d.ts +11 -0
  204. package/dist/combobox/ComboboxGroup.d.ts +11 -0
  205. package/dist/combobox/ComboboxInput.d.ts +15 -0
  206. package/dist/combobox/ComboboxItem.d.ts +12 -0
  207. package/dist/combobox/ComboboxItemContext.d.ts +17 -0
  208. package/dist/combobox/ComboboxItemIndicator.d.ts +11 -0
  209. package/dist/combobox/ComboboxItemText.d.ts +10 -0
  210. package/dist/combobox/ComboboxItems.d.ts +11 -0
  211. package/dist/combobox/ComboboxItemsGroupContext.d.ts +8 -0
  212. package/dist/combobox/ComboboxLabel.d.ts +11 -0
  213. package/dist/combobox/ComboboxLeadingIcon.d.ts +7 -0
  214. package/dist/combobox/ComboboxPopover.d.ts +10 -0
  215. package/dist/combobox/ComboboxPortal.d.ts +2 -0
  216. package/dist/combobox/ComboboxSelectedItems.d.ts +4 -0
  217. package/dist/combobox/ComboboxTrigger.d.ts +11 -0
  218. package/dist/combobox/ComboboxTrigger.styles.d.ts +6 -0
  219. package/dist/combobox/index.d.mts +19 -271
  220. package/dist/combobox/index.d.ts +19 -271
  221. package/dist/combobox/index.js +2 -2588
  222. package/dist/combobox/index.js.map +1 -1
  223. package/dist/combobox/index.mjs +623 -1017
  224. package/dist/combobox/index.mjs.map +1 -1
  225. package/dist/combobox/tests/test-utils.d.ts +8 -0
  226. package/dist/combobox/types.d.ts +8 -0
  227. package/dist/combobox/useCombobox/multipleSelectionReducer.d.ts +13 -0
  228. package/dist/combobox/useCombobox/singleSelectionReducer.d.ts +8 -0
  229. package/dist/combobox/utils/index.d.mts +14 -0
  230. package/dist/combobox/utils/index.d.ts +14 -0
  231. package/dist/combobox/utils/useWidthIncreaseCallback.d.ts +2 -0
  232. package/dist/dialog/Dialog.d.ts +32 -0
  233. package/dist/dialog/DialogBody.d.ts +12 -0
  234. package/dist/dialog/DialogClose.d.ts +9 -0
  235. package/dist/dialog/DialogCloseButton.d.ts +9 -0
  236. package/dist/dialog/DialogContent.d.ts +14 -0
  237. package/dist/dialog/DialogContent.styles.d.ts +6 -0
  238. package/dist/dialog/DialogContext.d.ts +11 -0
  239. package/dist/dialog/DialogDescription.d.ts +9 -0
  240. package/dist/dialog/DialogFooter.d.ts +10 -0
  241. package/dist/dialog/DialogHeader.d.ts +10 -0
  242. package/dist/dialog/DialogOverlay.d.ts +9 -0
  243. package/dist/dialog/DialogPortal.d.ts +7 -0
  244. package/dist/dialog/DialogTitle.d.ts +9 -0
  245. package/dist/dialog/DialogTrigger.d.ts +17 -0
  246. package/dist/dialog/index.d.mts +25 -154
  247. package/dist/dialog/index.d.ts +25 -154
  248. package/dist/dialog/index.js +2 -1389
  249. package/dist/dialog/index.js.map +1 -1
  250. package/dist/dialog/index.mjs +163 -258
  251. package/dist/dialog/index.mjs.map +1 -1
  252. package/dist/divider/Divider.d.ts +30 -0
  253. package/dist/divider/Divider.styles.d.ts +9 -0
  254. package/dist/divider/DividerContent.d.ts +13 -0
  255. package/dist/divider/index.d.mts +4 -59
  256. package/dist/divider/index.d.ts +4 -59
  257. package/dist/divider/index.js +2 -224
  258. package/dist/divider/index.js.map +1 -1
  259. package/dist/divider/index.mjs +79 -100
  260. package/dist/divider/index.mjs.map +1 -1
  261. package/dist/divider/variants/intents.d.ts +17 -0
  262. package/dist/drawer/Drawer.d.ts +39 -0
  263. package/dist/drawer/DrawerBody.d.ts +11 -0
  264. package/dist/drawer/DrawerBody.styles.d.ts +5 -0
  265. package/dist/drawer/DrawerClose.d.ts +9 -0
  266. package/dist/drawer/DrawerCloseButton.d.ts +7 -0
  267. package/dist/drawer/DrawerContent.d.ts +10 -0
  268. package/dist/drawer/DrawerContent.styles.d.ts +6 -0
  269. package/dist/drawer/DrawerContext.d.ts +9 -0
  270. package/dist/drawer/DrawerDescription.d.ts +9 -0
  271. package/dist/drawer/DrawerFooter.d.ts +8 -0
  272. package/dist/drawer/DrawerHeader.d.ts +10 -0
  273. package/dist/drawer/DrawerOverlay.d.ts +9 -0
  274. package/dist/drawer/DrawerPortal.d.ts +7 -0
  275. package/dist/drawer/DrawerTitle.d.ts +9 -0
  276. package/dist/drawer/DrawerTrigger.d.ts +13 -0
  277. package/dist/drawer/index.d.mts +24 -141
  278. package/dist/drawer/index.d.ts +24 -141
  279. package/dist/drawer/index.js +2 -1400
  280. package/dist/drawer/index.js.map +1 -1
  281. package/dist/drawer/index.mjs +141 -230
  282. package/dist/drawer/index.mjs.map +1 -1
  283. package/dist/dropdown/Dropdown.d.ts +6 -0
  284. package/dist/dropdown/DropdownContext.d.ts +81 -0
  285. package/dist/dropdown/DropdownDivider.d.ts +10 -0
  286. package/dist/dropdown/DropdownGroup.d.ts +11 -0
  287. package/dist/dropdown/DropdownItem.d.ts +12 -0
  288. package/dist/dropdown/DropdownItemContext.d.ts +17 -0
  289. package/dist/dropdown/DropdownItemIndicator.d.ts +11 -0
  290. package/dist/dropdown/DropdownItemText.d.ts +9 -0
  291. package/dist/dropdown/DropdownItems.d.ts +21 -0
  292. package/dist/dropdown/DropdownItemsGroupContext.d.ts +8 -0
  293. package/dist/dropdown/DropdownLabel.d.ts +11 -0
  294. package/dist/dropdown/DropdownLeadingIcon.d.ts +7 -0
  295. package/dist/dropdown/DropdownPopover.d.ts +6 -0
  296. package/dist/dropdown/DropdownPortal.d.ts +2 -0
  297. package/dist/dropdown/DropdownTrigger.d.ts +12 -0
  298. package/dist/dropdown/DropdownTrigger.styles.d.ts +5 -0
  299. package/dist/dropdown/DropdownValue.d.ts +11 -0
  300. package/dist/dropdown/index.d.mts +16 -220
  301. package/dist/dropdown/index.d.ts +16 -220
  302. package/dist/dropdown/index.js +2 -2051
  303. package/dist/dropdown/index.js.map +1 -1
  304. package/dist/dropdown/index.mjs +352 -584
  305. package/dist/dropdown/index.mjs.map +1 -1
  306. package/dist/dropdown/types.d.ts +8 -0
  307. package/dist/dropdown/useDropdown.d.ts +41 -0
  308. package/dist/dropdown/utils.d.ts +13 -0
  309. package/dist/file-upload/FileUpload.d.ts +130 -0
  310. package/dist/file-upload/FileUploadAcceptedFile.d.ts +25 -0
  311. package/dist/file-upload/FileUploadContext.d.ts +17 -0
  312. package/dist/file-upload/FileUploadDropzone.d.ts +10 -0
  313. package/dist/file-upload/FileUploadItemDeleteTrigger.d.ts +11 -0
  314. package/dist/file-upload/FileUploadPreviewImage.d.ts +17 -0
  315. package/dist/file-upload/FileUploadRejectedFile.d.ts +24 -0
  316. package/dist/file-upload/FileUploadRejectedFileDeleteTrigger.d.ts +12 -0
  317. package/dist/file-upload/FileUploadTrigger.d.ts +12 -0
  318. package/dist/file-upload/constants.d.ts +29 -0
  319. package/dist/file-upload/index.d.mts +14 -262
  320. package/dist/file-upload/index.d.ts +14 -262
  321. package/dist/file-upload/index.js +2 -2255
  322. package/dist/file-upload/index.js.map +1 -1
  323. package/dist/file-upload/index.mjs +506 -834
  324. package/dist/file-upload/index.mjs.map +1 -1
  325. package/dist/file-upload/test-utils.d.ts +9 -0
  326. package/dist/file-upload/useFileUploadState.d.ts +88 -0
  327. package/dist/file-upload/utils.d.ts +40 -0
  328. package/dist/form-field/FormField.d.ts +21 -0
  329. package/dist/form-field/FormFieldAlertMessage.d.ts +9 -0
  330. package/dist/form-field/FormFieldCharactersCount.d.ts +26 -0
  331. package/dist/form-field/FormFieldContext.d.ts +49 -0
  332. package/dist/form-field/FormFieldControl.d.ts +12 -0
  333. package/dist/form-field/FormFieldErrorMessage.d.ts +9 -0
  334. package/dist/form-field/FormFieldHelperMessage.d.ts +9 -0
  335. package/dist/form-field/FormFieldLabel.d.ts +13 -0
  336. package/dist/form-field/FormFieldMessage.d.ts +8 -0
  337. package/dist/form-field/FormFieldProvider.d.ts +9 -0
  338. package/dist/form-field/FormFieldRequiredIndicator.d.ts +9 -0
  339. package/dist/form-field/FormFieldStateMessage.d.ts +10 -0
  340. package/dist/form-field/FormFieldSuccessMessage.d.ts +9 -0
  341. package/dist/form-field/index.d.mts +21 -176
  342. package/dist/form-field/index.d.ts +21 -176
  343. package/dist/form-field/index.js +2 -553
  344. package/dist/form-field/index.js.map +1 -1
  345. package/dist/form-field/index.mjs +246 -349
  346. package/dist/form-field/index.mjs.map +1 -1
  347. package/dist/icon/Icon.d.ts +17 -0
  348. package/dist/icon/Icon.styles.d.ts +6 -0
  349. package/dist/icon/index.d.mts +1 -28
  350. package/dist/icon/index.d.ts +1 -28
  351. package/dist/icon/index.js +2 -127
  352. package/dist/icon/index.js.map +1 -1
  353. package/dist/icon/index.mjs +3 -7
  354. package/dist/icon/index.mjs.map +1 -1
  355. package/dist/icon-button/IconButton.d.ts +10 -0
  356. package/dist/icon-button/IconButton.styles.d.ts +5 -0
  357. package/dist/icon-button/index.d.mts +1 -16
  358. package/dist/icon-button/index.d.ts +1 -16
  359. package/dist/icon-button/index.js +2 -980
  360. package/dist/icon-button/index.js.map +1 -1
  361. package/dist/icon-button/index.mjs +3 -9
  362. package/dist/icon-button/index.mjs.map +1 -1
  363. package/dist/input/Input.d.ts +14 -0
  364. package/dist/input/Input.styles.d.ts +11 -0
  365. package/dist/input/InputAddon.d.ts +9 -0
  366. package/dist/input/InputAddon.styles.d.ts +9 -0
  367. package/dist/input/InputClearButton.d.ts +12 -0
  368. package/dist/input/InputGroup.d.ts +17 -0
  369. package/dist/input/InputGroup.styles.d.ts +6 -0
  370. package/dist/input/InputGroupContext.d.ts +14 -0
  371. package/dist/input/InputIcon.d.ts +6 -0
  372. package/dist/input/InputLeadingAddon.d.ts +11 -0
  373. package/dist/input/InputLeadingIcon.d.ts +7 -0
  374. package/dist/input/InputTrailingAddon.d.ts +11 -0
  375. package/dist/input/InputTrailingIcon.d.ts +7 -0
  376. package/dist/input/index.d.mts +15 -72
  377. package/dist/input/index.d.ts +15 -72
  378. package/dist/input/index.js +2 -724
  379. package/dist/input/index.js.map +1 -1
  380. package/dist/input/index.mjs +453 -12
  381. package/dist/input/index.mjs.map +1 -1
  382. package/dist/input-otp/InputOTP.d.ts +85 -0
  383. package/dist/input-otp/InputOTP.styles.d.ts +10 -0
  384. package/dist/input-otp/InputOTPContext.d.ts +16 -0
  385. package/dist/input-otp/InputOTPGroup.d.ts +7 -0
  386. package/dist/input-otp/InputOTPSeparator.d.ts +7 -0
  387. package/dist/input-otp/InputOTPSlot.d.ts +12 -0
  388. package/dist/input-otp/index.d.mts +10 -128
  389. package/dist/input-otp/index.d.ts +10 -128
  390. package/dist/input-otp/index.js +2 -668
  391. package/dist/input-otp/index.js.map +1 -1
  392. package/dist/input-otp/index.mjs +295 -462
  393. package/dist/input-otp/index.mjs.map +1 -1
  394. package/dist/input-otp/useInputOTP.d.ts +45 -0
  395. package/dist/kbd/Kbd.d.ts +5 -0
  396. package/dist/kbd/index.d.mts +1 -9
  397. package/dist/kbd/index.d.ts +1 -9
  398. package/dist/kbd/index.js +2 -47
  399. package/dist/kbd/index.js.map +1 -1
  400. package/dist/kbd/index.mjs +15 -18
  401. package/dist/kbd/index.mjs.map +1 -1
  402. package/dist/label/Label.d.ts +9 -0
  403. package/dist/label/LabelRequiredIndicator.d.ts +6 -0
  404. package/dist/label/index.d.mts +5 -9
  405. package/dist/label/index.d.ts +5 -9
  406. package/dist/label/index.js +2 -78
  407. package/dist/label/index.js.map +1 -1
  408. package/dist/label/index.mjs +38 -5
  409. package/dist/label/index.mjs.map +1 -1
  410. package/dist/link-box/LinkBox.d.ts +8 -0
  411. package/dist/link-box/LinkBoxLink.d.ts +8 -0
  412. package/dist/link-box/LinkBoxRaised.d.ts +9 -0
  413. package/dist/link-box/index.d.mts +6 -31
  414. package/dist/link-box/index.d.ts +6 -31
  415. package/dist/link-box/index.js +2 -92
  416. package/dist/link-box/index.js.map +1 -1
  417. package/dist/link-box/index.mjs +34 -56
  418. package/dist/link-box/index.mjs.map +1 -1
  419. package/dist/pagination/Pagination.d.ts +8 -0
  420. package/dist/pagination/PaginationContext.d.ts +43 -0
  421. package/dist/pagination/PaginationEllipsis.d.ts +9 -0
  422. package/dist/pagination/PaginationFirstPageTrigger.d.ts +16 -0
  423. package/dist/pagination/PaginationItem.d.ts +17 -0
  424. package/dist/pagination/PaginationLastPageTrigger.d.ts +16 -0
  425. package/dist/pagination/PaginationNextTrigger.d.ts +16 -0
  426. package/dist/pagination/PaginationPages.d.ts +16 -0
  427. package/dist/pagination/PaginationPrevTrigger.d.ts +16 -0
  428. package/dist/pagination/index.d.mts +10 -135
  429. package/dist/pagination/index.d.ts +10 -135
  430. package/dist/pagination/index.js +2 -1353
  431. package/dist/pagination/index.js.map +1 -1
  432. package/dist/pagination/index.mjs +176 -269
  433. package/dist/pagination/index.mjs.map +1 -1
  434. package/dist/pagination/utils.d.ts +1 -0
  435. package/dist/popover/Popover.d.ts +9 -0
  436. package/dist/popover/PopoverAnchor.d.ts +9 -0
  437. package/dist/popover/PopoverArrow.d.ts +9 -0
  438. package/dist/popover/PopoverCloseButton.d.ts +10 -0
  439. package/dist/popover/PopoverContent.d.ts +10 -0
  440. package/dist/popover/PopoverContent.styles.d.ts +9 -0
  441. package/dist/popover/PopoverContext.d.ts +15 -0
  442. package/dist/popover/PopoverHeader.d.ts +10 -0
  443. package/dist/popover/PopoverPortal.d.ts +7 -0
  444. package/dist/popover/PopoverTrigger.d.ts +9 -0
  445. package/dist/popover/index.d.mts +17 -6
  446. package/dist/popover/index.d.ts +17 -6
  447. package/dist/popover/index.js +2 -1339
  448. package/dist/popover/index.js.map +1 -1
  449. package/dist/popover/index.mjs +239 -11
  450. package/dist/popover/index.mjs.map +1 -1
  451. package/dist/portal/Portal.d.ts +10 -0
  452. package/dist/portal/index.d.mts +1 -13
  453. package/dist/portal/index.d.ts +1 -13
  454. package/dist/portal/index.js +2 -37
  455. package/dist/portal/index.js.map +1 -1
  456. package/dist/portal/index.mjs +5 -8
  457. package/dist/portal/index.mjs.map +1 -1
  458. package/dist/progress/Progress.d.ts +16 -0
  459. package/dist/progress/ProgressBar.d.ts +6 -0
  460. package/dist/progress/ProgressBar.styles.d.ts +5 -0
  461. package/dist/progress/ProgressContext.d.ts +13 -0
  462. package/dist/progress/ProgressIndicator.d.ts +6 -0
  463. package/dist/progress/ProgressIndicator.styles.d.ts +7 -0
  464. package/dist/progress/ProgressLabel.d.ts +6 -0
  465. package/dist/progress/index.d.mts +9 -48
  466. package/dist/progress/index.d.ts +9 -48
  467. package/dist/progress/index.js +2 -240
  468. package/dist/progress/index.js.map +1 -1
  469. package/dist/progress/index.mjs +166 -5
  470. package/dist/progress/index.mjs.map +1 -1
  471. package/dist/progress-tracker/ProgressTracker.d.ts +27 -0
  472. package/dist/progress-tracker/ProgressTracker.styles.d.ts +1 -0
  473. package/dist/progress-tracker/ProgressTrackerContext.d.ts +15 -0
  474. package/dist/progress-tracker/ProgressTrackerStep.d.ts +12 -0
  475. package/dist/progress-tracker/ProgressTrackerStep.styles.d.ts +10 -0
  476. package/dist/progress-tracker/ProgressTrackerStepIndicator.d.ts +15 -0
  477. package/dist/progress-tracker/ProgressTrackerStepIndicator.styles.d.ts +7 -0
  478. package/dist/progress-tracker/ProgressTrackerStepLabel.d.ts +9 -0
  479. package/dist/progress-tracker/index.d.mts +10 -80
  480. package/dist/progress-tracker/index.d.ts +10 -80
  481. package/dist/progress-tracker/index.js +2 -571
  482. package/dist/progress-tracker/index.js.map +1 -1
  483. package/dist/progress-tracker/index.mjs +115 -183
  484. package/dist/progress-tracker/index.mjs.map +1 -1
  485. package/dist/radio-group/Radio.d.ts +9 -0
  486. package/dist/radio-group/RadioGroup.d.ts +54 -0
  487. package/dist/radio-group/RadioGroup.styles.d.ts +5 -0
  488. package/dist/radio-group/RadioGroupContext.d.ts +5 -0
  489. package/dist/radio-group/RadioGroupProvider.d.ts +7 -0
  490. package/dist/radio-group/RadioIndicator.d.ts +18 -0
  491. package/dist/radio-group/RadioIndicator.styles.d.ts +5 -0
  492. package/dist/radio-group/RadioInput.d.ts +25 -0
  493. package/dist/radio-group/RadioInput.styles.d.ts +5 -0
  494. package/dist/radio-group/RadioLabel.d.ts +20 -0
  495. package/dist/radio-group/RadioLabel.styles.d.ts +5 -0
  496. package/dist/radio-group/index.d.mts +5 -98
  497. package/dist/radio-group/index.d.ts +5 -98
  498. package/dist/radio-group/index.js +2 -318
  499. package/dist/radio-group/index.js.map +1 -1
  500. package/dist/radio-group/index.mjs +105 -174
  501. package/dist/radio-group/index.mjs.map +1 -1
  502. package/dist/rating/Rating.d.ts +52 -0
  503. package/dist/rating/RatingStar.d.ts +10 -0
  504. package/dist/rating/RatingStar.styles.d.ts +14 -0
  505. package/dist/rating/index.d.mts +1 -78
  506. package/dist/rating/index.d.ts +1 -78
  507. package/dist/rating/index.js +2 -363
  508. package/dist/rating/index.js.map +1 -1
  509. package/dist/rating/index.mjs +125 -170
  510. package/dist/rating/index.mjs.map +1 -1
  511. package/dist/rating/types.d.ts +1 -0
  512. package/dist/rating/utils.d.ts +8 -0
  513. package/dist/scrolling-list/ScrollingList.d.ts +57 -0
  514. package/dist/scrolling-list/ScrollingListControls.d.ts +18 -0
  515. package/dist/scrolling-list/ScrollingListItem.d.ts +17 -0
  516. package/dist/scrolling-list/ScrollingListItems.d.ts +11 -0
  517. package/dist/scrolling-list/ScrollingListNextButton.d.ts +5 -0
  518. package/dist/scrolling-list/ScrollingListPrevButton.d.ts +5 -0
  519. package/dist/scrolling-list/ScrollingListSkipButton.d.ts +9 -0
  520. package/dist/scrolling-list/index.d.mts +14 -117
  521. package/dist/scrolling-list/index.d.ts +14 -117
  522. package/dist/scrolling-list/index.js +2 -1428
  523. package/dist/scrolling-list/index.js.map +1 -1
  524. package/dist/scrolling-list/index.mjs +193 -325
  525. package/dist/scrolling-list/index.mjs.map +1 -1
  526. package/dist/scrolling-list/useFocusWithinScroll.d.ts +3 -0
  527. package/dist/segmented-gauge/SegmentedGauge.d.ts +66 -0
  528. package/dist/segmented-gauge/SegmentedGaugeContext.d.ts +14 -0
  529. package/dist/segmented-gauge/SegmentedGaugeLabel.d.ts +9 -0
  530. package/dist/segmented-gauge/SegmentedGaugeSegment.d.ts +12 -0
  531. package/dist/segmented-gauge/SegmentedGaugeTrack.d.ts +8 -0
  532. package/dist/segmented-gauge/index.d.mts +9 -101
  533. package/dist/segmented-gauge/index.d.ts +9 -101
  534. package/dist/segmented-gauge/index.js +2 -274
  535. package/dist/segmented-gauge/index.js.map +1 -1
  536. package/dist/segmented-gauge/index.mjs +132 -178
  537. package/dist/segmented-gauge/index.mjs.map +1 -1
  538. package/dist/select/Select.d.ts +6 -0
  539. package/dist/select/SelectContext.d.ts +59 -0
  540. package/dist/select/SelectGroup.d.ts +11 -0
  541. package/dist/select/SelectItem.d.ts +11 -0
  542. package/dist/select/SelectItems.d.ts +10 -0
  543. package/dist/select/SelectItemsGroupContext.d.ts +9 -0
  544. package/dist/select/SelectLabel.d.ts +8 -0
  545. package/dist/select/SelectLeadingIcon.d.ts +7 -0
  546. package/dist/select/SelectPlaceholder.d.ts +10 -0
  547. package/dist/select/SelectTrigger.d.ts +16 -0
  548. package/dist/select/SelectTrigger.styles.d.ts +5 -0
  549. package/dist/select/SelectValue.d.ts +15 -0
  550. package/dist/select/index.d.mts +12 -158
  551. package/dist/select/index.d.ts +12 -158
  552. package/dist/select/index.js +2 -581
  553. package/dist/select/index.js.map +1 -1
  554. package/dist/select/index.mjs +207 -339
  555. package/dist/select/index.mjs.map +1 -1
  556. package/dist/select/types.d.ts +6 -0
  557. package/dist/select/utils.d.ts +4 -0
  558. package/dist/skeleton/Skeleton.d.ts +17 -0
  559. package/dist/skeleton/Skeleton.styles.d.ts +5 -0
  560. package/dist/skeleton/SkeletonItem.d.ts +31 -0
  561. package/dist/skeleton/SkeletonItem.styles.d.ts +8 -0
  562. package/dist/skeleton/index.d.mts +8 -67
  563. package/dist/skeleton/index.d.ts +8 -67
  564. package/dist/skeleton/index.js +2 -206
  565. package/dist/skeleton/index.js.map +1 -1
  566. package/dist/skeleton/index.mjs +64 -96
  567. package/dist/skeleton/index.mjs.map +1 -1
  568. package/dist/slider/Slider.d.ts +60 -0
  569. package/dist/slider/Slider.styles.d.ts +1 -0
  570. package/dist/slider/SliderContext.d.ts +7 -0
  571. package/dist/slider/SliderThumb.d.ts +14 -0
  572. package/dist/slider/SliderThumb.styles.d.ts +5 -0
  573. package/dist/slider/SliderTrack.d.ts +14 -0
  574. package/dist/slider/SliderTrack.styles.d.ts +9 -0
  575. package/dist/slider/index.d.mts +8 -97
  576. package/dist/slider/index.d.ts +8 -97
  577. package/dist/slider/index.js +2 -220
  578. package/dist/slider/index.js.map +1 -1
  579. package/dist/slider/index.mjs +94 -111
  580. package/dist/slider/index.mjs.map +1 -1
  581. package/dist/slot/Slot.d.ts +12 -0
  582. package/dist/slot/index.d.mts +1 -16
  583. package/dist/slot/index.d.ts +1 -16
  584. package/dist/slot/index.js +2 -51
  585. package/dist/slot/index.js.map +1 -1
  586. package/dist/slot/index.mjs +5 -9
  587. package/dist/slot/index.mjs.map +1 -1
  588. package/dist/snackbar/Snackbar.d.ts +29 -0
  589. package/dist/snackbar/SnackbarItem.d.ts +49 -0
  590. package/dist/snackbar/SnackbarItem.styles.d.ts +10 -0
  591. package/dist/snackbar/SnackbarItemAction.d.ts +10 -0
  592. package/dist/snackbar/SnackbarItemClose.d.ts +9 -0
  593. package/dist/snackbar/SnackbarItemContext.d.ts +8 -0
  594. package/dist/snackbar/SnackbarItemIcon.d.ts +7 -0
  595. package/dist/snackbar/SnackbarRegion.d.ts +30 -0
  596. package/dist/snackbar/SnackbarRegion.styles.d.ts +5 -0
  597. package/dist/snackbar/index.d.mts +13 -158
  598. package/dist/snackbar/index.d.ts +13 -158
  599. package/dist/snackbar/index.js +2 -1756
  600. package/dist/snackbar/index.js.map +1 -1
  601. package/dist/snackbar/index.mjs +237 -429
  602. package/dist/snackbar/index.mjs.map +1 -1
  603. package/dist/snackbar/snackbarVariants.d.ts +82 -0
  604. package/dist/snackbar/useSnackbarGlobalStore.d.ts +18 -0
  605. package/dist/snackbar/useSwipe.d.ts +15 -0
  606. package/dist/spinner/Spinner.d.ts +9 -0
  607. package/dist/spinner/Spinner.styles.d.ts +7 -0
  608. package/dist/spinner/index.d.mts +1 -21
  609. package/dist/spinner/index.d.ts +1 -21
  610. package/dist/spinner/index.js +2 -139
  611. package/dist/spinner/index.js.map +1 -1
  612. package/dist/spinner/index.mjs +3 -7
  613. package/dist/spinner/index.mjs.map +1 -1
  614. package/dist/stepper/Stepper.d.ts +9 -0
  615. package/dist/stepper/StepperButton.d.ts +14 -0
  616. package/dist/stepper/StepperInput.d.ts +7 -0
  617. package/dist/stepper/index.d.mts +9 -81
  618. package/dist/stepper/index.d.ts +9 -81
  619. package/dist/stepper/index.js +2 -1847
  620. package/dist/stepper/index.js.map +1 -1
  621. package/dist/stepper/index.mjs +143 -195
  622. package/dist/stepper/index.mjs.map +1 -1
  623. package/dist/stepper/types.d.ts +46 -0
  624. package/dist/stepper/useStepper.d.ts +2 -0
  625. package/dist/switch/Switch.d.ts +6 -0
  626. package/dist/switch/SwitchInput.d.ts +51 -0
  627. package/dist/switch/SwitchInput.styles.d.ts +16 -0
  628. package/dist/switch/SwitchLabel.d.ts +17 -0
  629. package/dist/switch/SwitchLabel.styles.d.ts +5 -0
  630. package/dist/switch/index.d.mts +1 -64
  631. package/dist/switch/index.d.ts +1 -64
  632. package/dist/switch/index.js +2 -327
  633. package/dist/switch/index.js.map +1 -1
  634. package/dist/switch/index.mjs +90 -130
  635. package/dist/switch/index.mjs.map +1 -1
  636. package/dist/tabs/Tabs.d.ts +24 -0
  637. package/dist/tabs/TabsContent.d.ts +22 -0
  638. package/dist/tabs/TabsContent.styles.d.ts +3 -0
  639. package/dist/tabs/TabsContext.d.ts +7 -0
  640. package/dist/tabs/TabsList.d.ts +20 -0
  641. package/dist/tabs/TabsList.styles.d.ts +3 -0
  642. package/dist/tabs/TabsPopover.d.ts +29 -0
  643. package/dist/tabs/TabsPopoverAbstraction.d.ts +27 -0
  644. package/dist/tabs/TabsRoot.styles.d.ts +1 -0
  645. package/dist/tabs/TabsTrigger.d.ts +41 -0
  646. package/dist/tabs/TabsTrigger.styles.d.ts +8 -0
  647. package/dist/tabs/index.d.mts +13 -137
  648. package/dist/tabs/index.d.ts +13 -137
  649. package/dist/tabs/index.js +2 -1830
  650. package/dist/tabs/index.js.map +1 -1
  651. package/dist/tabs/index.mjs +224 -350
  652. package/dist/tabs/index.mjs.map +1 -1
  653. package/dist/tabs/useResizeObserver.d.ts +8 -0
  654. package/dist/tag/Tag.d.ts +17 -0
  655. package/dist/tag/Tag.styles.d.ts +8 -0
  656. package/dist/tag/index.d.mts +1 -29
  657. package/dist/tag/index.d.ts +1 -29
  658. package/dist/tag/index.js +2 -283
  659. package/dist/tag/index.js.map +1 -1
  660. package/dist/tag/index.mjs +66 -90
  661. package/dist/tag/index.mjs.map +1 -1
  662. package/dist/tag/variants/filled.d.ts +41 -0
  663. package/dist/tag/variants/index.d.mts +3 -0
  664. package/dist/tag/variants/index.d.ts +3 -0
  665. package/dist/tag/variants/outlined.d.ts +37 -0
  666. package/dist/tag/variants/tinted.d.ts +37 -0
  667. package/dist/text-link/TextLink.d.ts +16 -0
  668. package/dist/text-link/index.d.mts +1 -20
  669. package/dist/text-link/index.d.ts +1 -20
  670. package/dist/text-link/index.js +2 -100
  671. package/dist/text-link/index.js.map +1 -1
  672. package/dist/text-link/index.mjs +3 -6
  673. package/dist/text-link/index.mjs.map +1 -1
  674. package/dist/textarea/Textarea.d.ts +14 -0
  675. package/dist/textarea/TextareaClearButton.d.ts +10 -0
  676. package/dist/textarea/TextareaGroup.d.ts +6 -0
  677. package/dist/textarea/TextareaLeadingIcon.d.ts +7 -0
  678. package/dist/textarea/TextareaTrailingIcon.d.ts +7 -0
  679. package/dist/textarea/index.d.mts +10 -53
  680. package/dist/textarea/index.d.ts +10 -53
  681. package/dist/textarea/index.js +2 -797
  682. package/dist/textarea/index.js.map +1 -1
  683. package/dist/textarea/index.mjs +50 -83
  684. package/dist/textarea/index.mjs.map +1 -1
  685. package/dist/toast/Toast.d.ts +4 -0
  686. package/dist/toast/Toast.styles.d.ts +10 -0
  687. package/dist/toast/index.d.mts +10 -53
  688. package/dist/toast/index.d.ts +10 -53
  689. package/dist/toast/index.js +2 -1454
  690. package/dist/toast/index.js.map +1 -1
  691. package/dist/toast/index.mjs +126 -180
  692. package/dist/toast/index.mjs.map +1 -1
  693. package/dist/toast/types.d.ts +41 -0
  694. package/dist/toast/useRenderSlot.d.ts +3 -0
  695. package/dist/toast/useToastManager.d.ts +2 -0
  696. package/dist/visually-hidden/VisuallyHidden.d.ts +12 -0
  697. package/dist/visually-hidden/index.d.mts +1 -16
  698. package/dist/visually-hidden/index.d.ts +1 -16
  699. package/dist/visually-hidden/index.js +2 -67
  700. package/dist/visually-hidden/index.js.map +1 -1
  701. package/dist/visually-hidden/index.mjs +3 -6
  702. package/dist/visually-hidden/index.mjs.map +1 -1
  703. package/package.json +6 -6
  704. package/dist/Input-N8AWWSmt.d.mts +0 -41
  705. package/dist/Input-N8AWWSmt.d.ts +0 -41
  706. package/dist/InputTrailingIcon-BBp7sE6D.d.mts +0 -20
  707. package/dist/InputTrailingIcon-ZZx8PoJy.d.ts +0 -20
  708. package/dist/LabelRequiredIndicator-DRnCzHMU.d.mts +0 -19
  709. package/dist/LabelRequiredIndicator-DRnCzHMU.d.ts +0 -19
  710. package/dist/chunk-2YM6GKWW.mjs.map +0 -1
  711. package/dist/chunk-6QCEPQ3U.mjs +0 -26
  712. package/dist/chunk-6QCEPQ3U.mjs.map +0 -1
  713. package/dist/chunk-7EWSMIZU.mjs +0 -214
  714. package/dist/chunk-7EWSMIZU.mjs.map +0 -1
  715. package/dist/chunk-DCXWGQVZ.mjs +0 -53
  716. package/dist/chunk-DCXWGQVZ.mjs.map +0 -1
  717. package/dist/chunk-GAK4SC2F.mjs.map +0 -1
  718. package/dist/chunk-GPJMLIHC.mjs +0 -308
  719. package/dist/chunk-GPJMLIHC.mjs.map +0 -1
  720. package/dist/chunk-HLXYG643.mjs +0 -52
  721. package/dist/chunk-HLXYG643.mjs.map +0 -1
  722. package/dist/chunk-KEGAAGJW.mjs +0 -36
  723. package/dist/chunk-KEGAAGJW.mjs.map +0 -1
  724. package/dist/chunk-RKPP7ZOK.mjs.map +0 -1
  725. package/dist/chunk-UMUMFMFB.mjs +0 -68
  726. package/dist/chunk-UMUMFMFB.mjs.map +0 -1
  727. package/dist/chunk-VBX7BTNU.mjs +0 -614
  728. package/dist/chunk-VBX7BTNU.mjs.map +0 -1
  729. package/dist/chunk-XZ47F6TP.mjs.map +0 -1
  730. package/dist/index-Cno_GFuW.d.mts +0 -93
  731. package/dist/index-Cno_GFuW.d.ts +0 -93
@@ -1,32 +1,20 @@
1
- import {
2
- Progress
3
- } from "../chunk-7EWSMIZU.mjs";
4
- import {
5
- IconButton
6
- } from "../chunk-DCXWGQVZ.mjs";
7
- import {
8
- Icon
9
- } from "../chunk-UMUMFMFB.mjs";
10
- import {
11
- Button,
12
- buttonStyles
13
- } from "../chunk-2YM6GKWW.mjs";
14
- import "../chunk-GAK4SC2F.mjs";
15
- import "../chunk-KEGAAGJW.mjs";
16
- import {
17
- Slot
18
- } from "../chunk-6QCEPQ3U.mjs";
19
-
20
- // src/file-upload/FileUpload.tsx
21
- import { useFormFieldControl } from "@spark-ui/components/form-field";
22
- import { createContext, useContext, useId, useRef } from "react";
23
-
24
- // src/file-upload/useFileUploadState.tsx
25
- import { useCombinedState } from "@spark-ui/hooks/use-combined-state";
26
- import { useState } from "react";
27
-
28
- // src/file-upload/constants.ts
29
- var FILE_UPLOAD_ERRORS = {
1
+ import { jsx as s, jsxs as M, Fragment as Fe } from "react/jsx-runtime";
2
+ import { useFormFieldControl as be } from "@spark-ui/components/form-field";
3
+ import { createElement as X, useState as G, createContext as se, useId as he, useRef as z, useContext as le, useEffect as de, useCallback as ye } from "react";
4
+ import { useCombinedState as Ie } from "@spark-ui/hooks/use-combined-state";
5
+ import { CvOutline as Re } from "@spark-ui/icons/CvOutline";
6
+ import { FilePdfOutline as Le } from "@spark-ui/icons/FilePdfOutline";
7
+ import { ImageOutline as Ne } from "@spark-ui/icons/ImageOutline";
8
+ import { PlayOutline as xe } from "@spark-ui/icons/PlayOutline";
9
+ import { cx as _ } from "class-variance-authority";
10
+ import { I as K } from "../Icon-Ck-dhfLd.mjs";
11
+ import { Progress as Ee } from "../progress/index.mjs";
12
+ import { Close as ce } from "@spark-ui/icons/Close";
13
+ import { I as ue } from "../IconButton-C62-axzv.mjs";
14
+ import { WarningOutline as je } from "@spark-ui/icons/WarningOutline";
15
+ import { b as Te, B as De } from "../Button-C3C0aixy.mjs";
16
+ import { a as Oe } from "../Slot-D2Bbf8Gw.mjs";
17
+ const O = {
30
18
  /**
31
19
  * Exceeds the maxFiles limit
32
20
  */
@@ -52,425 +40,256 @@ var FILE_UPLOAD_ERRORS = {
52
40
  */
53
41
  FILE_EXISTS: "FILE_EXISTS"
54
42
  };
55
-
56
- // src/file-upload/utils.ts
57
- import { CvOutline } from "@spark-ui/icons/CvOutline";
58
- import { FilePdfOutline } from "@spark-ui/icons/FilePdfOutline";
59
- import { ImageOutline } from "@spark-ui/icons/ImageOutline";
60
- import { PlayOutline } from "@spark-ui/icons/PlayOutline";
61
- import { createElement } from "react";
62
- function validateFileAccept(file, accept) {
63
- if (!accept) {
64
- return true;
65
- }
66
- const patterns = accept.split(",").map((pattern) => pattern.trim());
67
- return patterns.some((pattern) => {
68
- if (pattern.includes("/")) {
69
- if (pattern.endsWith("/*")) {
70
- const baseType = pattern.slice(0, -2);
71
- return file.type.startsWith(baseType + "/");
43
+ function oe(t, r) {
44
+ return r ? r.split(",").map((e) => e.trim()).some((e) => {
45
+ if (e.includes("/")) {
46
+ if (e.endsWith("/*")) {
47
+ const d = e.slice(0, -2);
48
+ return t.type.startsWith(d + "/");
72
49
  }
73
- return file.type === pattern;
50
+ return t.type === e;
74
51
  }
75
- if (pattern.startsWith(".")) {
76
- const extension2 = pattern.toLowerCase();
77
- const fileName2 = file.name.toLowerCase();
78
- return fileName2.endsWith(extension2);
52
+ if (e.startsWith(".")) {
53
+ const d = e.toLowerCase();
54
+ return t.name.toLowerCase().endsWith(d);
79
55
  }
80
- const extension = "." + pattern.toLowerCase();
81
- const fileName = file.name.toLowerCase();
82
- return fileName.endsWith(extension);
83
- });
56
+ const o = "." + e.toLowerCase();
57
+ return t.name.toLowerCase().endsWith(o);
58
+ }) : !0;
84
59
  }
85
- function validateFileSize(file, minFileSize, maxFileSize, locale) {
86
- const defaultLocale = locale || getDefaultLocale();
87
- if (minFileSize !== void 0 && file.size < minFileSize) {
88
- const errorMessage = `File "${file.name}" is too small. Minimum size is ${formatFileSize(minFileSize, defaultLocale)}.`;
89
- return {
90
- valid: false,
91
- error: errorMessage
92
- };
93
- }
94
- if (maxFileSize !== void 0 && file.size > maxFileSize) {
95
- const errorMessage = `File "${file.name}" is too large. Maximum size is ${formatFileSize(maxFileSize, defaultLocale)}.`;
96
- return {
97
- valid: false,
98
- error: errorMessage
99
- };
100
- }
101
- return { valid: true };
60
+ function _e(t, r, i, e) {
61
+ const o = e || fe();
62
+ return r !== void 0 && t.size < r ? {
63
+ valid: !1,
64
+ error: `File "${t.name}" is too small. Minimum size is ${W(r, o)}.`
65
+ } : i !== void 0 && t.size > i ? {
66
+ valid: !1,
67
+ error: `File "${t.name}" is too large. Maximum size is ${W(i, o)}.`
68
+ } : { valid: !0 };
102
69
  }
103
- function getDefaultLocale() {
104
- if (typeof navigator !== "undefined" && navigator.language) {
105
- return navigator.language;
106
- }
107
- return "en";
70
+ function fe() {
71
+ return typeof navigator < "u" && navigator.language ? navigator.language : "en";
108
72
  }
109
- function formatFileSize(bytes, locale) {
110
- const defaultLocale = locale || getDefaultLocale();
111
- let normalizedLocale = defaultLocale;
112
- if (defaultLocale.length === 2) {
113
- normalizedLocale = defaultLocale === "fr" ? "fr-FR" : "en-US";
114
- }
115
- if (bytes === 0) {
116
- const formatter2 = new Intl.NumberFormat(normalizedLocale, {
73
+ function W(t, r) {
74
+ const i = r || fe();
75
+ let e = i;
76
+ if (i.length === 2 && (e = i === "fr" ? "fr-FR" : "en-US"), t === 0)
77
+ return new Intl.NumberFormat(e, {
117
78
  style: "unit",
118
79
  unit: "byte",
119
80
  unitDisplay: "long",
120
81
  minimumFractionDigits: 0,
121
82
  maximumFractionDigits: 0
122
- });
123
- return formatter2.format(0);
124
- }
125
- const k = 1024;
126
- const i = Math.floor(Math.log(bytes) / Math.log(k));
127
- const units = ["byte", "kilobyte", "megabyte", "gigabyte"];
128
- const unit = units[i] || "byte";
129
- const size = bytes / Math.pow(k, i);
130
- const unitDisplay = i === 0 ? "long" : "short";
131
- const formatter = new Intl.NumberFormat(normalizedLocale, {
83
+ }).format(0);
84
+ const o = 1024, c = Math.floor(Math.log(t) / Math.log(o)), a = ["byte", "kilobyte", "megabyte", "gigabyte"][c] || "byte", l = t / Math.pow(o, c), n = c === 0 ? "long" : "short";
85
+ return new Intl.NumberFormat(e, {
132
86
  style: "unit",
133
- unit,
134
- unitDisplay,
87
+ unit: a,
88
+ unitDisplay: n,
135
89
  minimumFractionDigits: 0,
136
90
  maximumFractionDigits: 2
137
- });
138
- return formatter.format(size);
91
+ }).format(l);
139
92
  }
140
- function getFileIcon(file) {
141
- const fileType = file.type.toLowerCase();
142
- const fileName = file.name.toLowerCase();
143
- if (fileType.startsWith("image/") || /\.(jpg|jpeg|png|gif|bmp|webp|svg|ico)$/i.test(fileName)) {
144
- return createElement(ImageOutline);
145
- }
146
- if (fileType === "application/pdf" || fileName.endsWith(".pdf")) {
147
- return createElement(FilePdfOutline);
148
- }
149
- if (fileType.startsWith("video/") || /\.(mp4|avi|mov|wmv|flv|webm|mkv)$/i.test(fileName)) {
150
- return createElement(PlayOutline);
151
- }
152
- return createElement(CvOutline);
93
+ function we(t) {
94
+ const r = t.type.toLowerCase(), i = t.name.toLowerCase();
95
+ return r.startsWith("image/") || /\.(jpg|jpeg|png|gif|bmp|webp|svg|ico)$/i.test(i) ? X(Ne) : r === "application/pdf" || i.endsWith(".pdf") ? X(Le) : r.startsWith("video/") || /\.(mp4|avi|mov|wmv|flv|webm|mkv)$/i.test(i) ? X(xe) : X(Re);
153
96
  }
154
- function isFocusable(element) {
155
- if (!element) {
156
- return false;
157
- }
158
- const tabIndex = element.tabIndex;
159
- if (tabIndex >= 0) {
160
- return true;
161
- }
162
- const isContentEditable = String(element.contentEditable) === "true";
163
- const naturallyFocusable = element instanceof HTMLInputElement || element instanceof HTMLButtonElement || element instanceof HTMLSelectElement || element instanceof HTMLTextAreaElement || element instanceof HTMLAnchorElement && Boolean(element.href) || isContentEditable;
164
- return naturallyFocusable;
97
+ function Ae(t) {
98
+ if (!t)
99
+ return !1;
100
+ if (t.tabIndex >= 0)
101
+ return !0;
102
+ const i = String(t.contentEditable) === "true";
103
+ return t instanceof HTMLInputElement || t instanceof HTMLButtonElement || t instanceof HTMLSelectElement || t instanceof HTMLTextAreaElement || t instanceof HTMLAnchorElement && !!t.href || i;
165
104
  }
166
- function findFocusableElement(candidates, inputRef) {
167
- for (const candidate of candidates) {
168
- if (isFocusable(candidate)) {
169
- return candidate;
170
- }
171
- }
172
- if (inputRef.current) {
173
- return inputRef.current;
174
- }
175
- return null;
105
+ function me(t, r) {
106
+ for (const i of t)
107
+ if (Ae(i))
108
+ return i;
109
+ return r.current ? r.current : null;
176
110
  }
177
-
178
- // src/file-upload/useFileUploadState.tsx
179
- function useFileUploadState({
180
- defaultValue = [],
181
- value: controlledValue,
182
- onFileAccept,
183
- onFileReject,
184
- onFileChange,
185
- multiple = true,
186
- accept,
187
- maxFiles,
188
- maxFileSize,
189
- minFileSize,
190
- disabled = false,
191
- readOnly = false,
192
- locale
111
+ function ze({
112
+ defaultValue: t = [],
113
+ value: r,
114
+ onFileAccept: i,
115
+ onFileReject: e,
116
+ onFileChange: o,
117
+ multiple: c = !0,
118
+ accept: d,
119
+ maxFiles: a,
120
+ maxFileSize: l,
121
+ minFileSize: n,
122
+ disabled: m = !1,
123
+ readOnly: p = !1,
124
+ locale: x
193
125
  }) {
194
- const defaultLocale = locale || (typeof navigator !== "undefined" && navigator.language ? navigator.language : "en");
195
- const [filesState, setFilesState] = useCombinedState(controlledValue, defaultValue);
196
- const files = filesState ?? [];
197
- const setFiles = setFilesState;
198
- const [rejectedFiles, setRejectedFiles] = useState([]);
199
- const addFiles = (newFiles) => {
200
- if (disabled || readOnly) {
126
+ const f = x || (typeof navigator < "u" && navigator.language ? navigator.language : "en"), [E, F] = Ie(r, t), u = E ?? [], I = F, [b, g] = G([]), U = (j) => {
127
+ if (m || p)
201
128
  return;
202
- }
203
- setRejectedFiles([]);
204
- const newRejectedFiles = [];
205
- const fileExists = (file, existingFiles) => {
206
- return existingFiles.some(
207
- (existingFile) => existingFile.name === file.name && existingFile.size === file.size
129
+ g([]);
130
+ const T = [], P = (L, N) => N.some(
131
+ (y) => y.name === L.name && y.size === L.size
132
+ ), h = (L, N) => {
133
+ const y = T.find(
134
+ (w) => w.file.name === L.name && w.file.size === L.size
208
135
  );
136
+ y ? y.errors.includes(N) || y.errors.push(N) : T.push({
137
+ file: L,
138
+ errors: [N]
139
+ });
209
140
  };
210
- const addRejectedFile = (file, error) => {
211
- const existingRejection = newRejectedFiles.find(
212
- (rejected) => rejected.file.name === file.name && rejected.file.size === file.size
213
- );
214
- if (existingRejection) {
215
- if (!existingRejection.errors.includes(error)) {
216
- existingRejection.errors.push(error);
217
- }
218
- } else {
219
- newRejectedFiles.push({
220
- file,
221
- errors: [error]
222
- });
223
- }
224
- };
225
- setFiles((prev) => {
226
- const currentFiles = prev ?? [];
227
- const remainingSlots = maxFiles !== void 0 ? maxFiles - currentFiles.length : void 0;
228
- if (remainingSlots !== void 0 && remainingSlots <= 0) {
229
- newFiles.forEach((file) => {
230
- addRejectedFile(file, FILE_UPLOAD_ERRORS.TOO_MANY_FILES);
231
- });
232
- }
233
- let filteredFiles = newFiles;
234
- if (accept) {
235
- const rejectedByAccept = newFiles.filter((file) => !validateFileAccept(file, accept));
236
- rejectedByAccept.forEach((file) => {
237
- addRejectedFile(file, FILE_UPLOAD_ERRORS.FILE_INVALID_TYPE);
238
- });
239
- filteredFiles = newFiles.filter((file) => validateFileAccept(file, accept));
240
- }
241
- let validSizeFiles = filteredFiles;
242
- if (minFileSize !== void 0 || maxFileSize !== void 0) {
243
- validSizeFiles = filteredFiles.filter((file) => {
244
- const validation = validateFileSize(file, minFileSize, maxFileSize, defaultLocale);
245
- if (!validation.valid) {
246
- if (maxFileSize !== void 0 && file.size > maxFileSize) {
247
- addRejectedFile(file, FILE_UPLOAD_ERRORS.FILE_TOO_LARGE);
248
- } else if (minFileSize !== void 0 && file.size < minFileSize) {
249
- addRejectedFile(file, FILE_UPLOAD_ERRORS.FILE_TOO_SMALL);
250
- } else {
251
- addRejectedFile(file, FILE_UPLOAD_ERRORS.FILE_INVALID);
252
- }
253
- return false;
254
- }
255
- return true;
256
- });
257
- }
258
- const seenFiles = /* @__PURE__ */ new Map();
259
- const uniqueFiles = validSizeFiles.filter((file) => {
260
- const fileKey = `${file.name}-${file.size}`;
261
- const existsInPrev = fileExists(file, currentFiles);
262
- if (existsInPrev) {
263
- addRejectedFile(file, FILE_UPLOAD_ERRORS.FILE_EXISTS);
264
- return false;
265
- }
266
- if (seenFiles.has(fileKey)) {
267
- addRejectedFile(file, FILE_UPLOAD_ERRORS.FILE_EXISTS);
268
- return false;
269
- }
270
- seenFiles.set(fileKey, file);
271
- return true;
141
+ I((L) => {
142
+ const N = L ?? [], y = a !== void 0 ? a - N.length : void 0;
143
+ y !== void 0 && y <= 0 && j.forEach((v) => {
144
+ h(v, O.TOO_MANY_FILES);
272
145
  });
273
- let filesToAdd = multiple ? uniqueFiles : uniqueFiles.slice(0, 1);
274
- if (remainingSlots !== void 0) {
275
- if (remainingSlots <= 0) {
276
- filesToAdd = [];
277
- } else if (filesToAdd.length > remainingSlots) {
278
- filesToAdd.forEach((file) => {
279
- addRejectedFile(file, FILE_UPLOAD_ERRORS.TOO_MANY_FILES);
280
- });
281
- filesToAdd = [];
282
- }
283
- }
284
- const updated = multiple ? [...currentFiles, ...filesToAdd] : filesToAdd;
285
- const rejectedFilesToAdd = [...newRejectedFiles];
286
- setRejectedFiles(rejectedFilesToAdd);
287
- if (filesToAdd.length > 0 && onFileAccept) {
288
- onFileAccept({ files: filesToAdd });
289
- }
290
- if (rejectedFilesToAdd.length > 0 && onFileReject) {
291
- onFileReject({ files: rejectedFilesToAdd });
292
- }
293
- if (onFileChange) {
294
- onFileChange({
295
- acceptedFiles: updated,
296
- rejectedFiles: rejectedFilesToAdd
297
- });
298
- }
299
- return updated;
146
+ let w = j;
147
+ d && (j.filter((D) => !oe(D, d)).forEach((D) => {
148
+ h(D, O.FILE_INVALID_TYPE);
149
+ }), w = j.filter((D) => oe(D, d)));
150
+ let Y = w;
151
+ (n !== void 0 || l !== void 0) && (Y = w.filter((v) => _e(v, n, l, f).valid ? !0 : (l !== void 0 && v.size > l ? h(v, O.FILE_TOO_LARGE) : n !== void 0 && v.size < n ? h(v, O.FILE_TOO_SMALL) : h(v, O.FILE_INVALID), !1)));
152
+ const H = /* @__PURE__ */ new Map(), q = Y.filter((v) => {
153
+ const D = `${v.name}-${v.size}`;
154
+ return P(v, N) || H.has(D) ? (h(v, O.FILE_EXISTS), !1) : (H.set(D, v), !0);
155
+ });
156
+ let A = c ? q : q.slice(0, 1);
157
+ y !== void 0 && (y <= 0 ? A = [] : A.length > y && (A.forEach((v) => {
158
+ h(v, O.TOO_MANY_FILES);
159
+ }), A = []));
160
+ const ae = c ? [...N, ...A] : A, V = [...T];
161
+ return g(V), A.length > 0 && i && i({ files: A }), V.length > 0 && e && e({ files: V }), o && o({
162
+ acceptedFiles: ae,
163
+ rejectedFiles: V
164
+ }), ae;
300
165
  });
301
- };
302
- const removeFile = (index) => {
303
- if (disabled || readOnly) {
304
- return;
305
- }
306
- setFiles((prev) => {
307
- const currentFiles = prev ?? [];
308
- const updated = currentFiles.filter((_, i) => i !== index);
309
- let updatedRejectedFiles = rejectedFiles;
310
- if (maxFiles !== void 0 && updated.length < maxFiles) {
311
- updatedRejectedFiles = rejectedFiles.filter(
312
- (rejected) => !rejected.errors.includes(FILE_UPLOAD_ERRORS.TOO_MANY_FILES)
313
- );
314
- setRejectedFiles(updatedRejectedFiles);
315
- }
316
- if (onFileChange) {
317
- onFileChange({
318
- acceptedFiles: updated,
319
- rejectedFiles: updatedRejectedFiles
320
- });
321
- }
322
- return updated;
166
+ }, C = (j) => {
167
+ m || p || I((T) => {
168
+ const h = (T ?? []).filter((N, y) => y !== j);
169
+ let L = b;
170
+ return a !== void 0 && h.length < a && (L = b.filter(
171
+ (N) => !N.errors.includes(O.TOO_MANY_FILES)
172
+ ), g(L)), o && o({
173
+ acceptedFiles: h,
174
+ rejectedFiles: L
175
+ }), h;
323
176
  });
324
- };
325
- const clearFiles = () => {
326
- if (disabled || readOnly) {
327
- return;
328
- }
329
- setFiles([]);
330
- setRejectedFiles([]);
331
- if (onFileChange) {
332
- onFileChange({
333
- acceptedFiles: [],
334
- rejectedFiles: []
335
- });
336
- }
337
- };
338
- const removeRejectedFile = (index) => {
339
- if (disabled || readOnly) {
340
- return;
341
- }
342
- setRejectedFiles((prev) => prev.filter((_, i) => i !== index));
343
- };
344
- const clearRejectedFiles = () => {
345
- setRejectedFiles([]);
346
- };
347
- const maxFilesReached = maxFiles !== void 0 && files.length >= maxFiles;
177
+ }, R = () => {
178
+ m || p || (I([]), g([]), o && o({
179
+ acceptedFiles: [],
180
+ rejectedFiles: []
181
+ }));
182
+ }, $ = (j) => {
183
+ m || p || g((T) => T.filter((P, h) => h !== j));
184
+ }, k = () => {
185
+ g([]);
186
+ }, B = a !== void 0 && u.length >= a;
348
187
  return {
349
- files,
350
- rejectedFiles,
351
- addFiles,
352
- removeFile,
353
- removeRejectedFile,
354
- clearFiles,
355
- clearRejectedFiles,
356
- maxFilesReached
188
+ files: u,
189
+ rejectedFiles: b,
190
+ addFiles: U,
191
+ removeFile: C,
192
+ removeRejectedFile: $,
193
+ clearFiles: R,
194
+ clearRejectedFiles: k,
195
+ maxFilesReached: B
357
196
  };
358
197
  }
359
-
360
- // src/file-upload/FileUpload.tsx
361
- import { jsx, jsxs } from "react/jsx-runtime";
362
- var FileUploadContext = createContext(null);
363
- var ID_PREFIX = ":file-upload";
364
- var FileUpload = ({
365
- asChild: _asChild = false,
366
- children,
367
- defaultValue = [],
368
- value: controlledValue,
369
- onFileAccept,
370
- onFileReject,
371
- onFileChange,
372
- multiple = true,
373
- accept,
374
- maxFiles,
375
- maxFileSize,
376
- minFileSize,
377
- disabled: disabledProp = false,
378
- readOnly: readOnlyProp = false,
379
- locale
198
+ const pe = se(null), Ue = ":file-upload", ge = ({
199
+ asChild: t = !1,
200
+ children: r,
201
+ defaultValue: i = [],
202
+ value: e,
203
+ onFileAccept: o,
204
+ onFileReject: c,
205
+ onFileChange: d,
206
+ multiple: a = !0,
207
+ accept: l,
208
+ maxFiles: n,
209
+ maxFileSize: m,
210
+ minFileSize: p,
211
+ disabled: x = !1,
212
+ readOnly: f = !1,
213
+ locale: E
380
214
  }) => {
381
- const field = useFormFieldControl();
382
- const internalId = useId();
383
- const inputId = field.id || `${ID_PREFIX}-${internalId}`;
384
- const inputName = field.name;
385
- const inputRef = useRef(null);
386
- const triggerRef = useRef(null);
387
- const dropzoneRef = useRef(null);
388
- const deleteButtonRefs = useRef([]);
389
- const rejectedFileDeleteButtonRefs = useRef([]);
390
- const disabled = field.disabled ?? disabledProp;
391
- const readOnly = field.readOnly ?? readOnlyProp;
392
- const {
393
- files,
394
- rejectedFiles,
395
- addFiles,
396
- removeFile,
397
- removeRejectedFile,
398
- clearFiles: clearFilesFromHook,
399
- clearRejectedFiles,
400
- maxFilesReached
401
- } = useFileUploadState({
402
- defaultValue,
403
- value: controlledValue,
404
- onFileAccept,
405
- onFileReject,
406
- onFileChange,
407
- multiple,
408
- accept,
409
- maxFiles,
410
- maxFileSize,
411
- minFileSize,
412
- disabled,
413
- readOnly,
414
- locale
415
- });
416
- const clearFiles = () => {
417
- clearFilesFromHook();
418
- deleteButtonRefs.current = [];
419
- };
420
- const clearRejectedFilesWithRefs = () => {
421
- clearRejectedFiles();
422
- rejectedFileDeleteButtonRefs.current = [];
215
+ const F = be(), u = he(), I = F.id || `${Ue}-${u}`, b = F.name, g = z(null), U = z(null), C = z(null), R = z([]), $ = z([]), k = F.disabled ?? x, B = F.readOnly ?? f, {
216
+ files: j,
217
+ rejectedFiles: T,
218
+ addFiles: P,
219
+ removeFile: h,
220
+ removeRejectedFile: L,
221
+ clearFiles: N,
222
+ clearRejectedFiles: y,
223
+ maxFilesReached: w
224
+ } = ze({
225
+ defaultValue: i,
226
+ value: e,
227
+ onFileAccept: o,
228
+ onFileReject: c,
229
+ onFileChange: d,
230
+ multiple: a,
231
+ accept: l,
232
+ maxFiles: n,
233
+ maxFileSize: m,
234
+ minFileSize: p,
235
+ disabled: k,
236
+ readOnly: B,
237
+ locale: E
238
+ }), Y = () => {
239
+ N(), R.current = [];
240
+ }, H = () => {
241
+ y(), $.current = [];
423
242
  };
424
- return /* @__PURE__ */ jsx(
425
- FileUploadContext.Provider,
243
+ return /* @__PURE__ */ s(
244
+ pe.Provider,
426
245
  {
427
246
  value: {
428
- inputRef,
429
- files,
430
- rejectedFiles,
431
- addFiles,
432
- removeFile,
433
- removeRejectedFile,
434
- clearFiles,
435
- clearRejectedFiles: clearRejectedFilesWithRefs,
436
- triggerRef,
437
- dropzoneRef,
438
- deleteButtonRefs,
439
- rejectedFileDeleteButtonRefs,
440
- multiple,
441
- maxFiles,
442
- maxFilesReached,
443
- disabled,
444
- readOnly,
445
- locale: locale || (typeof navigator !== "undefined" && navigator.language ? navigator.language : "en"),
446
- description: field.description,
447
- isInvalid: field.isInvalid,
448
- isRequired: field.isRequired
247
+ inputRef: g,
248
+ files: j,
249
+ rejectedFiles: T,
250
+ addFiles: P,
251
+ removeFile: h,
252
+ removeRejectedFile: L,
253
+ clearFiles: Y,
254
+ clearRejectedFiles: H,
255
+ triggerRef: U,
256
+ dropzoneRef: C,
257
+ deleteButtonRefs: R,
258
+ rejectedFileDeleteButtonRefs: $,
259
+ multiple: a,
260
+ maxFiles: n,
261
+ maxFilesReached: w,
262
+ disabled: k,
263
+ readOnly: B,
264
+ locale: E || (typeof navigator < "u" && navigator.language ? navigator.language : "en"),
265
+ description: F.description,
266
+ isInvalid: F.isInvalid,
267
+ isRequired: F.isRequired
449
268
  },
450
- children: /* @__PURE__ */ jsxs("div", { className: "relative", children: [
451
- children,
452
- /* @__PURE__ */ jsx(
269
+ children: /* @__PURE__ */ M("div", { className: "relative", children: [
270
+ r,
271
+ /* @__PURE__ */ s(
453
272
  "input",
454
273
  {
455
- ref: inputRef,
274
+ ref: g,
456
275
  type: "file",
457
276
  tabIndex: -1,
458
- id: inputId,
459
- multiple,
460
- name: inputName,
461
- accept,
462
- disabled,
463
- readOnly: readOnly && !disabled,
464
- required: field.isRequired,
465
- "aria-invalid": field.isInvalid,
466
- "aria-describedby": field.description,
467
- "aria-label": !field.labelId ? "Upload files" : void 0,
277
+ id: I,
278
+ multiple: a,
279
+ name: b,
280
+ accept: l,
281
+ disabled: k,
282
+ readOnly: B && !k,
283
+ required: F.isRequired,
284
+ "aria-invalid": F.isInvalid,
285
+ "aria-describedby": F.description,
286
+ "aria-label": F.labelId ? void 0 : "Upload files",
468
287
  className: "sr-only",
469
- onChange: (e) => {
470
- if (e.target.files && !disabled && !readOnly) {
471
- addFiles(Array.from(e.target.files));
288
+ onChange: (q) => {
289
+ if (q.target.files && !k && !B) {
290
+ P(Array.from(q.target.files));
472
291
  try {
473
- e.target.value = "";
292
+ q.target.value = "";
474
293
  } catch {
475
294
  }
476
295
  }
@@ -481,544 +300,397 @@ var FileUpload = ({
481
300
  }
482
301
  );
483
302
  };
484
- FileUpload.displayName = "FileUpload";
485
- var useFileUploadContext = () => {
486
- const context = useContext(FileUploadContext);
487
- if (!context) {
303
+ ge.displayName = "FileUpload";
304
+ const S = () => {
305
+ const t = le(pe);
306
+ if (!t)
488
307
  throw Error("useFileUploadContext must be used within a FileUpload provider");
489
- }
490
- return context;
491
- };
492
-
493
- // src/file-upload/FileUploadAcceptedFile.tsx
494
- import { cx as cx2 } from "class-variance-authority";
495
- import { useCallback, useEffect, useState as useState2 } from "react";
496
-
497
- // src/file-upload/FileUploadItemDeleteTrigger.tsx
498
- import { Close } from "@spark-ui/icons/Close";
499
- import { cx } from "class-variance-authority";
500
- import { useRef as useRef2 } from "react";
501
- import { jsx as jsx2 } from "react/jsx-runtime";
502
- var ItemDeleteTrigger = ({
503
- className,
504
- file,
505
- onClick,
506
- ...props
308
+ return t;
309
+ }, J = ({
310
+ className: t,
311
+ file: r,
312
+ onClick: i,
313
+ ...e
507
314
  }) => {
508
315
  const {
509
- removeFile,
510
- triggerRef,
511
- dropzoneRef,
512
- deleteButtonRefs,
513
- inputRef,
514
- disabled,
515
- readOnly,
516
- files
517
- } = useFileUploadContext();
518
- const buttonRef = useRef2(null);
519
- const fileIndex = files.findIndex((f) => f.name === file.name && f.size === file.size);
520
- const handleClick = (e) => {
521
- if (disabled || readOnly) {
522
- return;
523
- }
524
- removeFile(fileIndex);
525
- requestAnimationFrame(() => {
526
- const remainingButtons = deleteButtonRefs.current.filter(Boolean);
527
- if (remainingButtons.length > 0) {
528
- const targetIndex = Math.min(fileIndex, remainingButtons.length - 1);
529
- const nextButton = remainingButtons[targetIndex];
530
- if (nextButton) {
531
- nextButton.focus();
532
- }
316
+ removeFile: o,
317
+ triggerRef: c,
318
+ dropzoneRef: d,
319
+ deleteButtonRefs: a,
320
+ inputRef: l,
321
+ disabled: n,
322
+ readOnly: m,
323
+ files: p
324
+ } = S(), x = z(null), f = p.findIndex((u) => u.name === r.name && u.size === r.size), E = (u) => {
325
+ n || m || (o(f), requestAnimationFrame(() => {
326
+ const I = a.current.filter(Boolean);
327
+ if (I.length > 0) {
328
+ const b = Math.min(f, I.length - 1), g = I[b];
329
+ g && g.focus();
533
330
  } else {
534
- const focusTarget = findFocusableElement(
535
- [triggerRef.current, dropzoneRef.current],
536
- inputRef
331
+ const b = me(
332
+ [c.current, d.current],
333
+ l
537
334
  );
538
- if (focusTarget) {
539
- focusTarget.focus();
540
- }
335
+ b && b.focus();
541
336
  }
542
- });
543
- onClick?.(e);
544
- };
545
- const setRef = (node) => {
546
- buttonRef.current = node;
547
- if (node) {
548
- while (deleteButtonRefs.current.length <= fileIndex) {
549
- deleteButtonRefs.current.push(null);
550
- }
551
- deleteButtonRefs.current[fileIndex] = node;
552
- } else {
553
- if (deleteButtonRefs.current[fileIndex]) {
554
- deleteButtonRefs.current[fileIndex] = null;
555
- }
556
- }
337
+ }), i?.(u));
557
338
  };
558
- return /* @__PURE__ */ jsx2(
559
- IconButton,
339
+ return /* @__PURE__ */ s(
340
+ ue,
560
341
  {
561
- ref: setRef,
342
+ ref: (u) => {
343
+ if (x.current = u, u) {
344
+ for (; a.current.length <= f; )
345
+ a.current.push(null);
346
+ a.current[f] = u;
347
+ } else
348
+ a.current[f] && (a.current[f] = null);
349
+ },
562
350
  "data-spark-component": "file-upload-item-delete-trigger",
563
- className: cx(className),
564
- onClick: handleClick,
565
- disabled: disabled || readOnly,
351
+ className: _(t),
352
+ onClick: E,
353
+ disabled: n || m,
566
354
  size: "sm",
567
355
  design: "contrast",
568
356
  intent: "surface",
569
- ...props,
570
- children: /* @__PURE__ */ jsx2(Icon, { size: "sm", children: /* @__PURE__ */ jsx2(Close, {}) })
357
+ ...e,
358
+ children: /* @__PURE__ */ s(K, { size: "sm", children: /* @__PURE__ */ s(ce, {}) })
571
359
  }
572
360
  );
573
361
  };
574
- ItemDeleteTrigger.displayName = "FileUpload.ItemDeleteTrigger";
575
-
576
- // src/file-upload/FileUploadAcceptedFile.tsx
577
- import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
578
- var AcceptedFile = ({
579
- className,
580
- file,
581
- uploadProgress,
582
- deleteButtonAriaLabel,
583
- progressAriaLabel,
584
- ...props
362
+ J.displayName = "FileUpload.ItemDeleteTrigger";
363
+ const Z = ({
364
+ className: t,
365
+ file: r,
366
+ uploadProgress: i,
367
+ deleteButtonAriaLabel: e,
368
+ progressAriaLabel: o,
369
+ ...c
585
370
  }) => {
586
- const { locale } = useFileUploadContext();
587
- const [showProgress, setShowProgress] = useState2(uploadProgress !== void 0);
588
- useEffect(() => {
589
- if (uploadProgress !== void 0) {
590
- setShowProgress(true);
591
- } else {
592
- setShowProgress(false);
593
- }
594
- }, [uploadProgress]);
595
- const handleProgressComplete = useCallback(() => {
596
- setShowProgress(false);
371
+ const { locale: d } = S(), [a, l] = G(i !== void 0);
372
+ de(() => {
373
+ l(i !== void 0);
374
+ }, [i]);
375
+ const n = ye(() => {
376
+ l(!1);
597
377
  }, []);
598
- return /* @__PURE__ */ jsxs2(
378
+ return /* @__PURE__ */ M(
599
379
  "li",
600
380
  {
601
381
  "data-spark-component": "file-upload-accepted-file",
602
- className: cx2(
382
+ className: _(
603
383
  "relative",
604
384
  "default:bg-surface default:border-sm default:border-outline default:p-md default:rounded-md",
605
385
  "gap-md flex items-center justify-between default:w-full",
606
- className
386
+ t
607
387
  ),
608
- ...props,
388
+ ...c,
609
389
  children: [
610
- /* @__PURE__ */ jsx3("div", { className: "size-sz-36 bg-support-container flex items-center justify-center rounded-md", children: /* @__PURE__ */ jsx3(Icon, { size: "md", children: getFileIcon(file) }) }),
611
- /* @__PURE__ */ jsxs2("div", { className: "gap-md relative flex min-w-0 flex-1 flex-row items-center justify-between self-stretch", children: [
612
- /* @__PURE__ */ jsx3("p", { className: "text-body-2 truncate font-medium", children: file.name }),
613
- /* @__PURE__ */ jsx3("p", { className: "text-caption opacity-dim-1", children: formatFileSize(file.size, locale) }),
614
- showProgress && uploadProgress !== void 0 && /* @__PURE__ */ jsx3("div", { className: "absolute bottom-0 left-0 w-full", children: /* @__PURE__ */ jsx3(
615
- Progress,
390
+ /* @__PURE__ */ s("div", { className: "size-sz-36 bg-support-container flex items-center justify-center rounded-md", children: /* @__PURE__ */ s(K, { size: "md", children: we(r) }) }),
391
+ /* @__PURE__ */ M("div", { className: "gap-md relative flex min-w-0 flex-1 flex-row items-center justify-between self-stretch", children: [
392
+ /* @__PURE__ */ s("p", { className: "text-body-2 truncate font-medium", children: r.name }),
393
+ /* @__PURE__ */ s("p", { className: "text-caption opacity-dim-1", children: W(r.size, d) }),
394
+ a && i !== void 0 && /* @__PURE__ */ s("div", { className: "absolute bottom-0 left-0 w-full", children: /* @__PURE__ */ s(
395
+ Ee,
616
396
  {
617
- value: uploadProgress,
397
+ value: i,
618
398
  max: 100,
619
- "aria-label": progressAriaLabel,
620
- onComplete: handleProgressComplete
399
+ "aria-label": o,
400
+ onComplete: n
621
401
  }
622
402
  ) })
623
403
  ] }),
624
- /* @__PURE__ */ jsx3(ItemDeleteTrigger, { "aria-label": deleteButtonAriaLabel, file })
404
+ /* @__PURE__ */ s(J, { "aria-label": e, file: r })
625
405
  ]
626
406
  }
627
407
  );
628
408
  };
629
- AcceptedFile.displayName = "FileUpload.AcceptedFile";
630
-
631
- // src/file-upload/FileUploadContext.tsx
632
- import { Fragment, jsx as jsx4 } from "react/jsx-runtime";
633
- var Context = ({ children }) => {
634
- const { files = [], rejectedFiles = [], locale } = useFileUploadContext();
635
- return /* @__PURE__ */ jsx4(Fragment, { children: children({
636
- acceptedFiles: files,
637
- rejectedFiles,
638
- formatFileSize,
639
- locale
409
+ Z.displayName = "FileUpload.AcceptedFile";
410
+ const ee = ({ children: t }) => {
411
+ const { files: r = [], rejectedFiles: i = [], locale: e } = S();
412
+ return /* @__PURE__ */ s(Fe, { children: t({
413
+ acceptedFiles: r,
414
+ rejectedFiles: i,
415
+ formatFileSize: W,
416
+ locale: e
640
417
  }) });
641
418
  };
642
- Context.displayName = "FileUpload.Context";
643
-
644
- // src/file-upload/FileUploadDropzone.tsx
645
- import { cx as cx3 } from "class-variance-authority";
646
- import { createContext as createContext2, useContext as useContext2, useRef as useRef3 } from "react";
647
- import { jsx as jsx5 } from "react/jsx-runtime";
648
- var DropzoneContext = createContext2(false);
649
- var useDropzoneContext = () => useContext2(DropzoneContext);
650
- function Dropzone({
651
- children,
652
- className,
653
- unstyled = false
419
+ ee.displayName = "FileUpload.Context";
420
+ const ve = se(!1), Ce = () => le(ve);
421
+ function te({
422
+ children: t,
423
+ className: r,
424
+ unstyled: i = !1
654
425
  }) {
655
- const ctx = useFileUploadContext();
656
- const dropzoneRef = useRef3(null);
657
- if (!ctx) throw new Error("FileUploadDropzone must be used inside <FileUpload>");
658
- const handleDrop = (e) => {
659
- e.preventDefault();
660
- e.stopPropagation();
661
- e.currentTarget.setAttribute("data-drag-over", "false");
662
- if (ctx.disabled || ctx.readOnly) {
426
+ const e = S(), o = z(null);
427
+ if (!e) throw new Error("FileUploadDropzone must be used inside <FileUpload>");
428
+ const c = (n) => {
429
+ if (n.preventDefault(), n.stopPropagation(), n.currentTarget.setAttribute("data-drag-over", "false"), e.disabled || e.readOnly)
663
430
  return;
664
- }
665
- const files = e.dataTransfer.files;
666
- let filesArray = [];
667
- if (files) {
668
- filesArray = Array.isArray(files) ? [...files] : Array.from(files);
669
- }
670
- if (filesArray.length > 0) {
671
- ctx.addFiles(filesArray);
672
- }
673
- };
674
- const handleClick = () => {
675
- if (!ctx.disabled && !ctx.readOnly) {
676
- ctx.inputRef.current?.click();
677
- }
678
- };
679
- const handleKeyDown = (e) => {
680
- if (e.key === "Enter" || e.key === " ") {
681
- e.preventDefault();
682
- if (!ctx.disabled && !ctx.readOnly) {
683
- ctx.inputRef.current?.click();
684
- }
685
- }
686
- };
687
- const isDisabled = ctx.disabled || ctx.readOnly;
688
- return /* @__PURE__ */ jsx5(DropzoneContext.Provider, { value: true, children: /* @__PURE__ */ jsx5(
431
+ const m = n.dataTransfer.files;
432
+ let p = [];
433
+ m && (p = Array.isArray(m) ? [...m] : Array.from(m)), p.length > 0 && e.addFiles(p);
434
+ }, d = () => {
435
+ !e.disabled && !e.readOnly && e.inputRef.current?.click();
436
+ }, a = (n) => {
437
+ (n.key === "Enter" || n.key === " ") && (n.preventDefault(), !e.disabled && !e.readOnly && e.inputRef.current?.click());
438
+ }, l = e.disabled || e.readOnly;
439
+ return /* @__PURE__ */ s(ve.Provider, { value: !0, children: /* @__PURE__ */ s(
689
440
  "div",
690
441
  {
691
- ref: (node) => {
692
- dropzoneRef.current = node;
693
- if (ctx.dropzoneRef) {
694
- ctx.dropzoneRef.current = node;
695
- }
442
+ ref: (n) => {
443
+ o.current = n, e.dropzoneRef && (e.dropzoneRef.current = n);
696
444
  },
697
445
  role: "button",
698
- tabIndex: isDisabled ? -1 : 0,
699
- "aria-disabled": ctx.disabled ? true : void 0,
700
- "aria-describedby": ctx.description,
701
- "aria-invalid": ctx.isInvalid,
702
- "aria-required": ctx.isRequired,
703
- onClick: handleClick,
704
- onKeyDown: handleKeyDown,
705
- onDrop: handleDrop,
706
- onDragOver: (e) => {
707
- e.preventDefault();
446
+ tabIndex: l ? -1 : 0,
447
+ "aria-disabled": e.disabled ? !0 : void 0,
448
+ "aria-describedby": e.description,
449
+ "aria-invalid": e.isInvalid,
450
+ "aria-required": e.isRequired,
451
+ onClick: d,
452
+ onKeyDown: a,
453
+ onDrop: c,
454
+ onDragOver: (n) => {
455
+ n.preventDefault();
708
456
  },
709
- className: unstyled ? className : cx3(
457
+ className: i ? r : _(
710
458
  "default:bg-surface default:border-sm default:border-outline default:relative default:rounded-lg default:border-dashed",
711
459
  "gap-lg flex flex-col items-center justify-center text-center",
712
460
  "default:p-xl",
713
461
  "transition-colors duration-200",
714
- !isDisabled && "default:hover:bg-surface-hovered",
462
+ !l && "default:hover:bg-surface-hovered",
715
463
  "data-[drag-over=true]:border-outline-high data-[drag-over=true]:bg-surface-hovered data-[drag-over=true]:border-solid",
716
464
  // Disabled: more visually disabled (opacity + cursor)
717
- ctx.disabled && "cursor-not-allowed opacity-50",
465
+ e.disabled && "cursor-not-allowed opacity-50",
718
466
  // ReadOnly: less visually disabled (just cursor, no opacity)
719
- ctx.readOnly && !ctx.disabled && "cursor-default",
720
- className
467
+ e.readOnly && !e.disabled && "cursor-default",
468
+ r
721
469
  ),
722
- onDragEnter: (e) => {
723
- if (!isDisabled) {
724
- e.currentTarget.setAttribute("data-drag-over", "true");
725
- }
470
+ onDragEnter: (n) => {
471
+ l || n.currentTarget.setAttribute("data-drag-over", "true");
726
472
  },
727
- onDragLeave: (e) => {
728
- e.currentTarget.setAttribute("data-drag-over", "false");
473
+ onDragLeave: (n) => {
474
+ n.currentTarget.setAttribute("data-drag-over", "false");
729
475
  },
730
- children
476
+ children: t
731
477
  }
732
478
  ) });
733
479
  }
734
- Dropzone.displayName = "FileUploadDropzone";
735
-
736
- // src/file-upload/FileUploadPreviewImage.tsx
737
- import { cx as cx4 } from "class-variance-authority";
738
- import { useEffect as useEffect2, useState as useState3 } from "react";
739
- import { jsx as jsx6, jsxs as jsxs3 } from "react/jsx-runtime";
740
- var PreviewImage = ({
741
- className,
742
- file,
743
- fallback = "\u{1F4C4}",
744
- ...props
480
+ te.displayName = "FileUploadDropzone";
481
+ const re = ({
482
+ className: t,
483
+ file: r,
484
+ fallback: i = "📄",
485
+ ...e
745
486
  }) => {
746
- const [imageError, setImageError] = useState3(false);
747
- const [imageLoaded, setImageLoaded] = useState3(false);
748
- const isImage = file.type.startsWith("image/");
749
- const imageUrl = isImage ? URL.createObjectURL(file) : null;
750
- useEffect2(() => {
751
- return () => {
752
- if (imageUrl) {
753
- URL.revokeObjectURL(imageUrl);
754
- }
755
- };
756
- }, [imageUrl]);
757
- if (!isImage || imageError) {
758
- return /* @__PURE__ */ jsx6(
759
- "div",
760
- {
761
- "data-spark-component": "file-upload-preview-image",
762
- className: cx4(
763
- "bg-neutral-container flex items-center justify-center rounded-md",
764
- className
765
- ),
766
- ...props,
767
- children: fallback
768
- }
769
- );
770
- }
771
- return /* @__PURE__ */ jsxs3(
487
+ const [o, c] = G(!1), [d, a] = G(!1), l = r.type.startsWith("image/"), n = l ? URL.createObjectURL(r) : null;
488
+ return de(() => () => {
489
+ n && URL.revokeObjectURL(n);
490
+ }, [n]), !l || o ? /* @__PURE__ */ s(
772
491
  "div",
773
492
  {
774
493
  "data-spark-component": "file-upload-preview-image",
775
- className: cx4("bg-neutral-container overflow-hidden", className),
776
- ...props,
494
+ className: _(
495
+ "bg-neutral-container flex items-center justify-center rounded-md",
496
+ t
497
+ ),
498
+ ...e,
499
+ children: i
500
+ }
501
+ ) : /* @__PURE__ */ M(
502
+ "div",
503
+ {
504
+ "data-spark-component": "file-upload-preview-image",
505
+ className: _("bg-neutral-container overflow-hidden", t),
506
+ ...e,
777
507
  children: [
778
- /* @__PURE__ */ jsx6(
508
+ /* @__PURE__ */ s(
779
509
  "img",
780
510
  {
781
- src: imageUrl,
782
- alt: file.name,
783
- className: cx4("size-full object-cover", !imageLoaded && "opacity-0"),
784
- onLoad: () => setImageLoaded(true),
785
- onError: () => setImageError(true)
511
+ src: n,
512
+ alt: r.name,
513
+ className: _("size-full object-cover", !d && "opacity-0"),
514
+ onLoad: () => a(!0),
515
+ onError: () => c(!0)
786
516
  }
787
517
  ),
788
- !imageLoaded && /* @__PURE__ */ jsx6("div", { className: "absolute inset-0 flex items-center justify-center", children: fallback })
518
+ !d && /* @__PURE__ */ s("div", { className: "absolute inset-0 flex items-center justify-center", children: i })
789
519
  ]
790
520
  }
791
521
  );
792
522
  };
793
- PreviewImage.displayName = "FileUpload.PreviewImage";
794
-
795
- // src/file-upload/FileUploadRejectedFile.tsx
796
- import { WarningOutline } from "@spark-ui/icons/WarningOutline";
797
- import { cx as cx6 } from "class-variance-authority";
798
-
799
- // src/file-upload/FileUploadRejectedFileDeleteTrigger.tsx
800
- import { Close as Close2 } from "@spark-ui/icons/Close";
801
- import { cx as cx5 } from "class-variance-authority";
802
- import { useRef as useRef4 } from "react";
803
- import { jsx as jsx7 } from "react/jsx-runtime";
804
- var RejectedFileDeleteTrigger = ({
805
- className,
806
- rejectedFile,
807
- onClick,
808
- ...props
523
+ re.displayName = "FileUpload.PreviewImage";
524
+ const Q = ({
525
+ className: t,
526
+ rejectedFile: r,
527
+ onClick: i,
528
+ ...e
809
529
  }) => {
810
530
  const {
811
- removeRejectedFile,
812
- triggerRef,
813
- dropzoneRef,
814
- rejectedFileDeleteButtonRefs,
815
- inputRef,
816
- disabled,
817
- readOnly,
818
- rejectedFiles
819
- } = useFileUploadContext();
820
- const buttonRef = useRef4(null);
821
- const rejectedFileIndex = rejectedFiles.findIndex(
822
- (rf) => rf.file.name === rejectedFile.file.name && rf.file.size === rejectedFile.file.size
823
- );
824
- const handleClick = (e) => {
825
- if (disabled || readOnly) {
826
- return;
827
- }
828
- removeRejectedFile(rejectedFileIndex);
829
- requestAnimationFrame(() => {
830
- const remainingButtons = rejectedFileDeleteButtonRefs.current.filter(Boolean);
831
- if (remainingButtons.length > 0) {
832
- const targetIndex = Math.min(rejectedFileIndex, remainingButtons.length - 1);
833
- const nextButton = remainingButtons[targetIndex];
834
- if (nextButton) {
835
- nextButton.focus();
836
- }
531
+ removeRejectedFile: o,
532
+ triggerRef: c,
533
+ dropzoneRef: d,
534
+ rejectedFileDeleteButtonRefs: a,
535
+ inputRef: l,
536
+ disabled: n,
537
+ readOnly: m,
538
+ rejectedFiles: p
539
+ } = S(), x = z(null), f = p.findIndex(
540
+ (u) => u.file.name === r.file.name && u.file.size === r.file.size
541
+ ), E = (u) => {
542
+ n || m || (o(f), requestAnimationFrame(() => {
543
+ const I = a.current.filter(Boolean);
544
+ if (I.length > 0) {
545
+ const b = Math.min(f, I.length - 1), g = I[b];
546
+ g && g.focus();
837
547
  } else {
838
- const focusTarget = findFocusableElement(
839
- [triggerRef.current, dropzoneRef.current],
840
- inputRef
548
+ const b = me(
549
+ [c.current, d.current],
550
+ l
841
551
  );
842
- if (focusTarget) {
843
- focusTarget.focus();
844
- }
845
- }
846
- });
847
- onClick?.(e);
848
- };
849
- const setRef = (node) => {
850
- buttonRef.current = node;
851
- if (node) {
852
- while (rejectedFileDeleteButtonRefs.current.length <= rejectedFileIndex) {
853
- rejectedFileDeleteButtonRefs.current.push(null);
854
- }
855
- rejectedFileDeleteButtonRefs.current[rejectedFileIndex] = node;
856
- } else {
857
- if (rejectedFileDeleteButtonRefs.current[rejectedFileIndex]) {
858
- rejectedFileDeleteButtonRefs.current[rejectedFileIndex] = null;
552
+ b && b.focus();
859
553
  }
860
- }
554
+ }), i?.(u));
861
555
  };
862
- return /* @__PURE__ */ jsx7(
863
- IconButton,
556
+ return /* @__PURE__ */ s(
557
+ ue,
864
558
  {
865
- ref: setRef,
559
+ ref: (u) => {
560
+ if (x.current = u, u) {
561
+ for (; a.current.length <= f; )
562
+ a.current.push(null);
563
+ a.current[f] = u;
564
+ } else
565
+ a.current[f] && (a.current[f] = null);
566
+ },
866
567
  "data-spark-component": "file-upload-rejected-file-delete-trigger",
867
- className: cx5(className),
868
- onClick: handleClick,
869
- disabled: disabled || readOnly,
568
+ className: _(t),
569
+ onClick: E,
570
+ disabled: n || m,
870
571
  size: "sm",
871
572
  design: "contrast",
872
573
  intent: "surface",
873
- ...props,
874
- children: /* @__PURE__ */ jsx7(Icon, { size: "sm", children: /* @__PURE__ */ jsx7(Close2, {}) })
574
+ ...e,
575
+ children: /* @__PURE__ */ s(K, { size: "sm", children: /* @__PURE__ */ s(ce, {}) })
875
576
  }
876
577
  );
877
578
  };
878
- RejectedFileDeleteTrigger.displayName = "FileUpload.RejectedFileDeleteTrigger";
879
-
880
- // src/file-upload/FileUploadRejectedFile.tsx
881
- import { jsx as jsx8, jsxs as jsxs4 } from "react/jsx-runtime";
882
- var RejectedFile = ({
883
- className,
884
- rejectedFile,
885
- renderError,
886
- deleteButtonAriaLabel,
887
- ...props
579
+ Q.displayName = "FileUpload.RejectedFileDeleteTrigger";
580
+ const ie = ({
581
+ className: t,
582
+ rejectedFile: r,
583
+ renderError: i,
584
+ deleteButtonAriaLabel: e,
585
+ ...o
888
586
  }) => {
889
- const { locale } = useFileUploadContext();
890
- return /* @__PURE__ */ jsxs4(
587
+ const { locale: c } = S();
588
+ return /* @__PURE__ */ M(
891
589
  "li",
892
590
  {
893
591
  "data-spark-component": "file-upload-rejected-file",
894
- className: cx6(
592
+ className: _(
895
593
  "relative",
896
594
  "default:bg-surface default:border-sm default:border-outline default:p-md default:rounded-md",
897
595
  "gap-md flex items-center justify-between default:w-full",
898
596
  "border-error border-md",
899
- className
597
+ t
900
598
  ),
901
- ...props,
599
+ ...o,
902
600
  children: [
903
- /* @__PURE__ */ jsx8("div", { className: "size-sz-36 bg-error-container flex items-center justify-center rounded-md", children: /* @__PURE__ */ jsx8(Icon, { size: "md", className: "text-error", children: /* @__PURE__ */ jsx8(WarningOutline, {}) }) }),
904
- /* @__PURE__ */ jsx8("div", { className: "min-w-0 flex-1", children: /* @__PURE__ */ jsxs4("div", { className: "gap-md flex flex-col", children: [
905
- /* @__PURE__ */ jsxs4("div", { className: "gap-md flex flex-row items-center justify-between", children: [
906
- /* @__PURE__ */ jsx8("p", { className: "text-body-2 truncate font-medium", children: rejectedFile.file.name }),
907
- /* @__PURE__ */ jsx8("p", { className: "text-caption opacity-dim-1", children: formatFileSize(rejectedFile.file.size, locale) })
601
+ /* @__PURE__ */ s("div", { className: "size-sz-36 bg-error-container flex items-center justify-center rounded-md", children: /* @__PURE__ */ s(K, { size: "md", className: "text-error", children: /* @__PURE__ */ s(je, {}) }) }),
602
+ /* @__PURE__ */ s("div", { className: "min-w-0 flex-1", children: /* @__PURE__ */ M("div", { className: "gap-md flex flex-col", children: [
603
+ /* @__PURE__ */ M("div", { className: "gap-md flex flex-row items-center justify-between", children: [
604
+ /* @__PURE__ */ s("p", { className: "text-body-2 truncate font-medium", children: r.file.name }),
605
+ /* @__PURE__ */ s("p", { className: "text-caption opacity-dim-1", children: W(r.file.size, c) })
908
606
  ] }),
909
- /* @__PURE__ */ jsx8("div", { className: "gap-xs flex flex-col", children: rejectedFile.errors.map((error, errorIndex) => /* @__PURE__ */ jsx8("div", { className: "text-caption text-error", "data-error-code": error, children: renderError(error) }, errorIndex)) })
607
+ /* @__PURE__ */ s("div", { className: "gap-xs flex flex-col", children: r.errors.map((d, a) => /* @__PURE__ */ s("div", { className: "text-caption text-error", "data-error-code": d, children: i(d) }, a)) })
910
608
  ] }) }),
911
- /* @__PURE__ */ jsx8(RejectedFileDeleteTrigger, { "aria-label": deleteButtonAriaLabel, rejectedFile })
609
+ /* @__PURE__ */ s(Q, { "aria-label": e, rejectedFile: r })
912
610
  ]
913
611
  }
914
612
  );
915
613
  };
916
- RejectedFile.displayName = "FileUpload.RejectedFile";
917
-
918
- // src/file-upload/FileUploadTrigger.tsx
919
- import { cx as cx7 } from "class-variance-authority";
920
- import { jsx as jsx9 } from "react/jsx-runtime";
921
- var Trigger = ({
922
- className,
923
- children,
924
- asChild = false,
925
- unstyled = false,
926
- design = "filled",
927
- intent = "basic",
928
- size = "md",
929
- shape = "rounded",
930
- ref,
931
- ...props
614
+ ie.displayName = "FileUpload.RejectedFile";
615
+ const ne = ({
616
+ className: t,
617
+ children: r,
618
+ asChild: i = !1,
619
+ unstyled: e = !1,
620
+ design: o = "filled",
621
+ intent: c = "basic",
622
+ size: d = "md",
623
+ shape: a = "rounded",
624
+ ref: l,
625
+ ...n
932
626
  }) => {
933
- const { inputRef, triggerRef, disabled, readOnly, description, isInvalid, isRequired } = useFileUploadContext();
934
- const isInsideDropzone = useDropzoneContext();
935
- const handleClick = (e) => {
936
- e.stopPropagation();
937
- e.preventDefault();
938
- if (!disabled && !readOnly) {
939
- inputRef.current?.click();
940
- }
941
- };
942
- const handleRef = (node) => {
943
- if (triggerRef) {
944
- triggerRef.current = node;
945
- }
946
- if (ref) {
947
- if (typeof ref === "function") {
948
- ref(node);
949
- } else {
950
- ref.current = node;
951
- }
952
- }
627
+ const { inputRef: m, triggerRef: p, disabled: x, readOnly: f, description: E, isInvalid: F, isRequired: u } = S(), I = Ce(), b = (R) => {
628
+ R.stopPropagation(), R.preventDefault(), !x && !f && m.current?.click();
629
+ }, g = (R) => {
630
+ p && (p.current = R), l && (typeof l == "function" ? l(R) : l.current = R);
953
631
  };
954
- let Component;
955
- let componentProps;
956
- if (isInsideDropzone) {
957
- Component = "span";
958
- const spanStyles = unstyled ? className : buttonStyles({
959
- design,
960
- intent,
961
- size,
962
- shape,
963
- disabled: disabled || readOnly,
964
- className
632
+ let U, C;
633
+ if (I) {
634
+ U = "span";
635
+ const R = e ? t : Te({
636
+ design: o,
637
+ intent: c,
638
+ size: d,
639
+ shape: a,
640
+ disabled: x || f,
641
+ className: t
965
642
  });
966
- componentProps = {
967
- ref: handleRef,
643
+ C = {
644
+ ref: g,
968
645
  "data-spark-component": "file-upload-trigger",
969
- className: spanStyles
646
+ className: R
970
647
  // No onClick, no role, no tabIndex - Dropzone handles interaction
971
648
  // No aria attributes here - they're on the Dropzone
972
649
  };
973
- } else {
974
- const buttonComponent = unstyled ? "button" : Button;
975
- Component = asChild ? Slot : buttonComponent;
976
- componentProps = {
977
- ref: handleRef,
650
+ } else
651
+ U = i ? Oe : e ? "button" : De, C = {
652
+ ref: g,
978
653
  type: "button",
979
- design,
980
- intent,
981
- size,
982
- shape,
654
+ design: o,
655
+ intent: c,
656
+ size: d,
657
+ shape: a,
983
658
  "data-spark-component": "file-upload-trigger",
984
- className: cx7(className),
985
- disabled: disabled || readOnly,
986
- onClick: handleClick,
987
- "aria-describedby": description,
988
- "aria-invalid": isInvalid,
989
- "aria-required": isRequired,
990
- ...props
659
+ className: _(t),
660
+ disabled: x || f,
661
+ onClick: b,
662
+ "aria-describedby": E,
663
+ "aria-invalid": F,
664
+ "aria-required": u,
665
+ ...n
991
666
  };
992
- }
993
- return /* @__PURE__ */ jsx9(Component, { ...componentProps, children });
667
+ return /* @__PURE__ */ s(U, { ...C, children: r });
994
668
  };
995
- Trigger.displayName = "FileUpload.Trigger";
996
-
997
- // src/file-upload/index.ts
998
- var FileUpload2 = Object.assign(FileUpload, {
669
+ ne.displayName = "FileUpload.Trigger";
670
+ const ke = Object.assign(ge, {
999
671
  // Main input components
1000
- Trigger,
1001
- Dropzone,
672
+ Trigger: ne,
673
+ Dropzone: te,
1002
674
  // Context components
1003
- Context,
1004
- AcceptedFile,
1005
- RejectedFile,
675
+ Context: ee,
676
+ AcceptedFile: Z,
677
+ RejectedFile: ie,
1006
678
  // Helpers for custom renders
1007
- PreviewImage,
1008
- ItemDeleteTrigger,
1009
- RejectedFileDeleteTrigger
679
+ PreviewImage: re,
680
+ ItemDeleteTrigger: J,
681
+ RejectedFileDeleteTrigger: Q
1010
682
  });
1011
- FileUpload2.displayName = "FileUpload";
1012
- Trigger.displayName = "FileUpload.Trigger";
1013
- Dropzone.displayName = "FileUpload.Dropzone";
1014
- Context.displayName = "FileUpload.Context";
1015
- ItemDeleteTrigger.displayName = "FileUpload.ItemDeleteTrigger";
1016
- PreviewImage.displayName = "FileUpload.PreviewImage";
1017
- AcceptedFile.displayName = "FileUpload.AcceptedFile";
1018
- RejectedFile.displayName = "FileUpload.RejectedFile";
1019
- RejectedFileDeleteTrigger.displayName = "FileUpload.RejectedFileDeleteTrigger";
683
+ ke.displayName = "FileUpload";
684
+ ne.displayName = "FileUpload.Trigger";
685
+ te.displayName = "FileUpload.Dropzone";
686
+ ee.displayName = "FileUpload.Context";
687
+ J.displayName = "FileUpload.ItemDeleteTrigger";
688
+ re.displayName = "FileUpload.PreviewImage";
689
+ Z.displayName = "FileUpload.AcceptedFile";
690
+ ie.displayName = "FileUpload.RejectedFile";
691
+ Q.displayName = "FileUpload.RejectedFileDeleteTrigger";
1020
692
  export {
1021
- FILE_UPLOAD_ERRORS,
1022
- FileUpload2 as FileUpload
693
+ O as FILE_UPLOAD_ERRORS,
694
+ ke as FileUpload
1023
695
  };
1024
- //# sourceMappingURL=index.mjs.map
696
+ //# sourceMappingURL=index.mjs.map