@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,2255 +1,2 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
-
20
- // src/file-upload/index.ts
21
- var file_upload_exports = {};
22
- __export(file_upload_exports, {
23
- FILE_UPLOAD_ERRORS: () => FILE_UPLOAD_ERRORS,
24
- FileUpload: () => FileUpload2
25
- });
26
- module.exports = __toCommonJS(file_upload_exports);
27
-
28
- // src/file-upload/FileUpload.tsx
29
- var import_form_field = require("@spark-ui/components/form-field");
30
- var import_react3 = require("react");
31
-
32
- // src/file-upload/useFileUploadState.tsx
33
- var import_use_combined_state = require("@spark-ui/hooks/use-combined-state");
34
- var import_react2 = require("react");
35
-
36
- // src/file-upload/constants.ts
37
- var FILE_UPLOAD_ERRORS = {
38
- /**
39
- * Exceeds the maxFiles limit
40
- */
41
- TOO_MANY_FILES: "TOO_MANY_FILES",
42
- /**
43
- * File type not in the accept list
44
- */
45
- FILE_INVALID_TYPE: "FILE_INVALID_TYPE",
46
- /**
47
- * File size exceeds maxFileSize
48
- */
49
- FILE_TOO_LARGE: "FILE_TOO_LARGE",
50
- /**
51
- * File size below minFileSize
52
- */
53
- FILE_TOO_SMALL: "FILE_TOO_SMALL",
54
- /**
55
- * Generic validation failure
56
- */
57
- FILE_INVALID: "FILE_INVALID",
58
- /**
59
- * Duplicate file detected
60
- */
61
- FILE_EXISTS: "FILE_EXISTS"
62
- };
63
-
64
- // src/file-upload/utils.ts
65
- var import_CvOutline = require("@spark-ui/icons/CvOutline");
66
- var import_FilePdfOutline = require("@spark-ui/icons/FilePdfOutline");
67
- var import_ImageOutline = require("@spark-ui/icons/ImageOutline");
68
- var import_PlayOutline = require("@spark-ui/icons/PlayOutline");
69
- var import_react = require("react");
70
- function validateFileAccept(file, accept) {
71
- if (!accept) {
72
- return true;
73
- }
74
- const patterns = accept.split(",").map((pattern) => pattern.trim());
75
- return patterns.some((pattern) => {
76
- if (pattern.includes("/")) {
77
- if (pattern.endsWith("/*")) {
78
- const baseType = pattern.slice(0, -2);
79
- return file.type.startsWith(baseType + "/");
80
- }
81
- return file.type === pattern;
82
- }
83
- if (pattern.startsWith(".")) {
84
- const extension2 = pattern.toLowerCase();
85
- const fileName2 = file.name.toLowerCase();
86
- return fileName2.endsWith(extension2);
87
- }
88
- const extension = "." + pattern.toLowerCase();
89
- const fileName = file.name.toLowerCase();
90
- return fileName.endsWith(extension);
91
- });
92
- }
93
- function validateFileSize(file, minFileSize, maxFileSize, locale) {
94
- const defaultLocale = locale || getDefaultLocale();
95
- if (minFileSize !== void 0 && file.size < minFileSize) {
96
- const errorMessage = `File "${file.name}" is too small. Minimum size is ${formatFileSize(minFileSize, defaultLocale)}.`;
97
- return {
98
- valid: false,
99
- error: errorMessage
100
- };
101
- }
102
- if (maxFileSize !== void 0 && file.size > maxFileSize) {
103
- const errorMessage = `File "${file.name}" is too large. Maximum size is ${formatFileSize(maxFileSize, defaultLocale)}.`;
104
- return {
105
- valid: false,
106
- error: errorMessage
107
- };
108
- }
109
- return { valid: true };
110
- }
111
- function getDefaultLocale() {
112
- if (typeof navigator !== "undefined" && navigator.language) {
113
- return navigator.language;
114
- }
115
- return "en";
116
- }
117
- function formatFileSize(bytes, locale) {
118
- const defaultLocale = locale || getDefaultLocale();
119
- let normalizedLocale = defaultLocale;
120
- if (defaultLocale.length === 2) {
121
- normalizedLocale = defaultLocale === "fr" ? "fr-FR" : "en-US";
122
- }
123
- if (bytes === 0) {
124
- const formatter2 = new Intl.NumberFormat(normalizedLocale, {
125
- style: "unit",
126
- unit: "byte",
127
- unitDisplay: "long",
128
- minimumFractionDigits: 0,
129
- maximumFractionDigits: 0
130
- });
131
- return formatter2.format(0);
132
- }
133
- const k = 1024;
134
- const i = Math.floor(Math.log(bytes) / Math.log(k));
135
- const units = ["byte", "kilobyte", "megabyte", "gigabyte"];
136
- const unit = units[i] || "byte";
137
- const size = bytes / Math.pow(k, i);
138
- const unitDisplay = i === 0 ? "long" : "short";
139
- const formatter = new Intl.NumberFormat(normalizedLocale, {
140
- style: "unit",
141
- unit,
142
- unitDisplay,
143
- minimumFractionDigits: 0,
144
- maximumFractionDigits: 2
145
- });
146
- return formatter.format(size);
147
- }
148
- function getFileIcon(file) {
149
- const fileType = file.type.toLowerCase();
150
- const fileName = file.name.toLowerCase();
151
- if (fileType.startsWith("image/") || /\.(jpg|jpeg|png|gif|bmp|webp|svg|ico)$/i.test(fileName)) {
152
- return (0, import_react.createElement)(import_ImageOutline.ImageOutline);
153
- }
154
- if (fileType === "application/pdf" || fileName.endsWith(".pdf")) {
155
- return (0, import_react.createElement)(import_FilePdfOutline.FilePdfOutline);
156
- }
157
- if (fileType.startsWith("video/") || /\.(mp4|avi|mov|wmv|flv|webm|mkv)$/i.test(fileName)) {
158
- return (0, import_react.createElement)(import_PlayOutline.PlayOutline);
159
- }
160
- return (0, import_react.createElement)(import_CvOutline.CvOutline);
161
- }
162
- function isFocusable(element) {
163
- if (!element) {
164
- return false;
165
- }
166
- const tabIndex = element.tabIndex;
167
- if (tabIndex >= 0) {
168
- return true;
169
- }
170
- const isContentEditable = String(element.contentEditable) === "true";
171
- const naturallyFocusable = element instanceof HTMLInputElement || element instanceof HTMLButtonElement || element instanceof HTMLSelectElement || element instanceof HTMLTextAreaElement || element instanceof HTMLAnchorElement && Boolean(element.href) || isContentEditable;
172
- return naturallyFocusable;
173
- }
174
- function findFocusableElement(candidates, inputRef) {
175
- for (const candidate of candidates) {
176
- if (isFocusable(candidate)) {
177
- return candidate;
178
- }
179
- }
180
- if (inputRef.current) {
181
- return inputRef.current;
182
- }
183
- return null;
184
- }
185
-
186
- // src/file-upload/useFileUploadState.tsx
187
- function useFileUploadState({
188
- defaultValue = [],
189
- value: controlledValue,
190
- onFileAccept,
191
- onFileReject,
192
- onFileChange,
193
- multiple = true,
194
- accept,
195
- maxFiles,
196
- maxFileSize,
197
- minFileSize,
198
- disabled = false,
199
- readOnly = false,
200
- locale
201
- }) {
202
- const defaultLocale = locale || (typeof navigator !== "undefined" && navigator.language ? navigator.language : "en");
203
- const [filesState, setFilesState] = (0, import_use_combined_state.useCombinedState)(controlledValue, defaultValue);
204
- const files = filesState ?? [];
205
- const setFiles = setFilesState;
206
- const [rejectedFiles, setRejectedFiles] = (0, import_react2.useState)([]);
207
- const addFiles = (newFiles) => {
208
- if (disabled || readOnly) {
209
- return;
210
- }
211
- setRejectedFiles([]);
212
- const newRejectedFiles = [];
213
- const fileExists = (file, existingFiles) => {
214
- return existingFiles.some(
215
- (existingFile) => existingFile.name === file.name && existingFile.size === file.size
216
- );
217
- };
218
- const addRejectedFile = (file, error) => {
219
- const existingRejection = newRejectedFiles.find(
220
- (rejected) => rejected.file.name === file.name && rejected.file.size === file.size
221
- );
222
- if (existingRejection) {
223
- if (!existingRejection.errors.includes(error)) {
224
- existingRejection.errors.push(error);
225
- }
226
- } else {
227
- newRejectedFiles.push({
228
- file,
229
- errors: [error]
230
- });
231
- }
232
- };
233
- setFiles((prev) => {
234
- const currentFiles = prev ?? [];
235
- const remainingSlots = maxFiles !== void 0 ? maxFiles - currentFiles.length : void 0;
236
- if (remainingSlots !== void 0 && remainingSlots <= 0) {
237
- newFiles.forEach((file) => {
238
- addRejectedFile(file, FILE_UPLOAD_ERRORS.TOO_MANY_FILES);
239
- });
240
- }
241
- let filteredFiles = newFiles;
242
- if (accept) {
243
- const rejectedByAccept = newFiles.filter((file) => !validateFileAccept(file, accept));
244
- rejectedByAccept.forEach((file) => {
245
- addRejectedFile(file, FILE_UPLOAD_ERRORS.FILE_INVALID_TYPE);
246
- });
247
- filteredFiles = newFiles.filter((file) => validateFileAccept(file, accept));
248
- }
249
- let validSizeFiles = filteredFiles;
250
- if (minFileSize !== void 0 || maxFileSize !== void 0) {
251
- validSizeFiles = filteredFiles.filter((file) => {
252
- const validation = validateFileSize(file, minFileSize, maxFileSize, defaultLocale);
253
- if (!validation.valid) {
254
- if (maxFileSize !== void 0 && file.size > maxFileSize) {
255
- addRejectedFile(file, FILE_UPLOAD_ERRORS.FILE_TOO_LARGE);
256
- } else if (minFileSize !== void 0 && file.size < minFileSize) {
257
- addRejectedFile(file, FILE_UPLOAD_ERRORS.FILE_TOO_SMALL);
258
- } else {
259
- addRejectedFile(file, FILE_UPLOAD_ERRORS.FILE_INVALID);
260
- }
261
- return false;
262
- }
263
- return true;
264
- });
265
- }
266
- const seenFiles = /* @__PURE__ */ new Map();
267
- const uniqueFiles = validSizeFiles.filter((file) => {
268
- const fileKey = `${file.name}-${file.size}`;
269
- const existsInPrev = fileExists(file, currentFiles);
270
- if (existsInPrev) {
271
- addRejectedFile(file, FILE_UPLOAD_ERRORS.FILE_EXISTS);
272
- return false;
273
- }
274
- if (seenFiles.has(fileKey)) {
275
- addRejectedFile(file, FILE_UPLOAD_ERRORS.FILE_EXISTS);
276
- return false;
277
- }
278
- seenFiles.set(fileKey, file);
279
- return true;
280
- });
281
- let filesToAdd = multiple ? uniqueFiles : uniqueFiles.slice(0, 1);
282
- if (remainingSlots !== void 0) {
283
- if (remainingSlots <= 0) {
284
- filesToAdd = [];
285
- } else if (filesToAdd.length > remainingSlots) {
286
- filesToAdd.forEach((file) => {
287
- addRejectedFile(file, FILE_UPLOAD_ERRORS.TOO_MANY_FILES);
288
- });
289
- filesToAdd = [];
290
- }
291
- }
292
- const updated = multiple ? [...currentFiles, ...filesToAdd] : filesToAdd;
293
- const rejectedFilesToAdd = [...newRejectedFiles];
294
- setRejectedFiles(rejectedFilesToAdd);
295
- if (filesToAdd.length > 0 && onFileAccept) {
296
- onFileAccept({ files: filesToAdd });
297
- }
298
- if (rejectedFilesToAdd.length > 0 && onFileReject) {
299
- onFileReject({ files: rejectedFilesToAdd });
300
- }
301
- if (onFileChange) {
302
- onFileChange({
303
- acceptedFiles: updated,
304
- rejectedFiles: rejectedFilesToAdd
305
- });
306
- }
307
- return updated;
308
- });
309
- };
310
- const removeFile = (index) => {
311
- if (disabled || readOnly) {
312
- return;
313
- }
314
- setFiles((prev) => {
315
- const currentFiles = prev ?? [];
316
- const updated = currentFiles.filter((_, i) => i !== index);
317
- let updatedRejectedFiles = rejectedFiles;
318
- if (maxFiles !== void 0 && updated.length < maxFiles) {
319
- updatedRejectedFiles = rejectedFiles.filter(
320
- (rejected) => !rejected.errors.includes(FILE_UPLOAD_ERRORS.TOO_MANY_FILES)
321
- );
322
- setRejectedFiles(updatedRejectedFiles);
323
- }
324
- if (onFileChange) {
325
- onFileChange({
326
- acceptedFiles: updated,
327
- rejectedFiles: updatedRejectedFiles
328
- });
329
- }
330
- return updated;
331
- });
332
- };
333
- const clearFiles = () => {
334
- if (disabled || readOnly) {
335
- return;
336
- }
337
- setFiles([]);
338
- setRejectedFiles([]);
339
- if (onFileChange) {
340
- onFileChange({
341
- acceptedFiles: [],
342
- rejectedFiles: []
343
- });
344
- }
345
- };
346
- const removeRejectedFile = (index) => {
347
- if (disabled || readOnly) {
348
- return;
349
- }
350
- setRejectedFiles((prev) => prev.filter((_, i) => i !== index));
351
- };
352
- const clearRejectedFiles = () => {
353
- setRejectedFiles([]);
354
- };
355
- const maxFilesReached = maxFiles !== void 0 && files.length >= maxFiles;
356
- return {
357
- files,
358
- rejectedFiles,
359
- addFiles,
360
- removeFile,
361
- removeRejectedFile,
362
- clearFiles,
363
- clearRejectedFiles,
364
- maxFilesReached
365
- };
366
- }
367
-
368
- // src/file-upload/FileUpload.tsx
369
- var import_jsx_runtime = require("react/jsx-runtime");
370
- var FileUploadContext = (0, import_react3.createContext)(null);
371
- var ID_PREFIX = ":file-upload";
372
- var FileUpload = ({
373
- asChild: _asChild = false,
374
- children,
375
- defaultValue = [],
376
- value: controlledValue,
377
- onFileAccept,
378
- onFileReject,
379
- onFileChange,
380
- multiple = true,
381
- accept,
382
- maxFiles,
383
- maxFileSize,
384
- minFileSize,
385
- disabled: disabledProp = false,
386
- readOnly: readOnlyProp = false,
387
- locale
388
- }) => {
389
- const field = (0, import_form_field.useFormFieldControl)();
390
- const internalId = (0, import_react3.useId)();
391
- const inputId = field.id || `${ID_PREFIX}-${internalId}`;
392
- const inputName = field.name;
393
- const inputRef = (0, import_react3.useRef)(null);
394
- const triggerRef = (0, import_react3.useRef)(null);
395
- const dropzoneRef = (0, import_react3.useRef)(null);
396
- const deleteButtonRefs = (0, import_react3.useRef)([]);
397
- const rejectedFileDeleteButtonRefs = (0, import_react3.useRef)([]);
398
- const disabled = field.disabled ?? disabledProp;
399
- const readOnly = field.readOnly ?? readOnlyProp;
400
- const {
401
- files,
402
- rejectedFiles,
403
- addFiles,
404
- removeFile,
405
- removeRejectedFile,
406
- clearFiles: clearFilesFromHook,
407
- clearRejectedFiles,
408
- maxFilesReached
409
- } = useFileUploadState({
410
- defaultValue,
411
- value: controlledValue,
412
- onFileAccept,
413
- onFileReject,
414
- onFileChange,
415
- multiple,
416
- accept,
417
- maxFiles,
418
- maxFileSize,
419
- minFileSize,
420
- disabled,
421
- readOnly,
422
- locale
423
- });
424
- const clearFiles = () => {
425
- clearFilesFromHook();
426
- deleteButtonRefs.current = [];
427
- };
428
- const clearRejectedFilesWithRefs = () => {
429
- clearRejectedFiles();
430
- rejectedFileDeleteButtonRefs.current = [];
431
- };
432
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
433
- FileUploadContext.Provider,
434
- {
435
- value: {
436
- inputRef,
437
- files,
438
- rejectedFiles,
439
- addFiles,
440
- removeFile,
441
- removeRejectedFile,
442
- clearFiles,
443
- clearRejectedFiles: clearRejectedFilesWithRefs,
444
- triggerRef,
445
- dropzoneRef,
446
- deleteButtonRefs,
447
- rejectedFileDeleteButtonRefs,
448
- multiple,
449
- maxFiles,
450
- maxFilesReached,
451
- disabled,
452
- readOnly,
453
- locale: locale || (typeof navigator !== "undefined" && navigator.language ? navigator.language : "en"),
454
- description: field.description,
455
- isInvalid: field.isInvalid,
456
- isRequired: field.isRequired
457
- },
458
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "relative", children: [
459
- children,
460
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
461
- "input",
462
- {
463
- ref: inputRef,
464
- type: "file",
465
- tabIndex: -1,
466
- id: inputId,
467
- multiple,
468
- name: inputName,
469
- accept,
470
- disabled,
471
- readOnly: readOnly && !disabled,
472
- required: field.isRequired,
473
- "aria-invalid": field.isInvalid,
474
- "aria-describedby": field.description,
475
- "aria-label": !field.labelId ? "Upload files" : void 0,
476
- className: "sr-only",
477
- onChange: (e) => {
478
- if (e.target.files && !disabled && !readOnly) {
479
- addFiles(Array.from(e.target.files));
480
- try {
481
- e.target.value = "";
482
- } catch {
483
- }
484
- }
485
- }
486
- }
487
- )
488
- ] })
489
- }
490
- );
491
- };
492
- FileUpload.displayName = "FileUpload";
493
- var useFileUploadContext = () => {
494
- const context = (0, import_react3.useContext)(FileUploadContext);
495
- if (!context) {
496
- throw Error("useFileUploadContext must be used within a FileUpload provider");
497
- }
498
- return context;
499
- };
500
-
501
- // src/file-upload/FileUploadAcceptedFile.tsx
502
- var import_class_variance_authority10 = require("class-variance-authority");
503
- var import_react11 = require("react");
504
-
505
- // src/icon/Icon.tsx
506
- var import_react5 = require("react");
507
-
508
- // src/slot/Slot.tsx
509
- var import_radix_ui = require("radix-ui");
510
- var import_react4 = require("react");
511
- var import_jsx_runtime2 = require("react/jsx-runtime");
512
- var Slottable = import_radix_ui.Slot.Slottable;
513
- var Slot = ({ ref, ...props }) => {
514
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_radix_ui.Slot.Root, { ref, ...props });
515
- };
516
- var wrapPolymorphicSlot = (asChild, children, callback) => {
517
- if (!asChild) return callback(children);
518
- return (0, import_react4.isValidElement)(children) ? (0, import_react4.cloneElement)(
519
- children,
520
- void 0,
521
- callback(children.props.children)
522
- ) : null;
523
- };
524
-
525
- // src/visually-hidden/VisuallyHidden.tsx
526
- var import_jsx_runtime3 = require("react/jsx-runtime");
527
- var VisuallyHidden = ({ asChild = false, ref, ...props }) => {
528
- const Component = asChild ? Slot : "span";
529
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
530
- Component,
531
- {
532
- ...props,
533
- ref,
534
- style: {
535
- // See: https://github.com/twbs/bootstrap/blob/main/scss/mixins/_visually-hidden.scss
536
- position: "absolute",
537
- border: 0,
538
- width: 1,
539
- height: 1,
540
- padding: 0,
541
- margin: -1,
542
- overflow: "hidden",
543
- clip: "rect(0, 0, 0, 0)",
544
- whiteSpace: "nowrap",
545
- wordWrap: "normal",
546
- ...props.style
547
- }
548
- }
549
- );
550
- };
551
- VisuallyHidden.displayName = "VisuallyHidden";
552
-
553
- // src/icon/Icon.styles.tsx
554
- var import_internal_utils = require("@spark-ui/internal-utils");
555
- var import_class_variance_authority = require("class-variance-authority");
556
- var iconStyles = (0, import_class_variance_authority.cva)(["fill-current shrink-0"], {
557
- variants: {
558
- /**
559
- * Color scheme of the icon.
560
- */
561
- intent: (0, import_internal_utils.makeVariants)({
562
- current: ["text-current"],
563
- main: ["text-main"],
564
- support: ["text-support"],
565
- accent: ["text-accent"],
566
- basic: ["text-basic"],
567
- success: ["text-success"],
568
- alert: ["text-alert"],
569
- error: ["text-error"],
570
- info: ["text-info"],
571
- neutral: ["text-neutral"]
572
- }),
573
- /**
574
- * Sets the size of the icon.
575
- */
576
- size: (0, import_internal_utils.makeVariants)({
577
- current: ["u-current-font-size"],
578
- sm: ["w-sz-16", "h-sz-16"],
579
- md: ["w-sz-24", "h-sz-24"],
580
- lg: ["w-sz-32", "h-sz-32"],
581
- xl: ["w-sz-40", "h-sz-40"]
582
- })
583
- }
584
- });
585
-
586
- // src/icon/Icon.tsx
587
- var import_jsx_runtime4 = require("react/jsx-runtime");
588
- var Icon = ({
589
- label,
590
- className,
591
- size = "current",
592
- intent = "current",
593
- children,
594
- ...others
595
- }) => {
596
- const child = import_react5.Children.only(children);
597
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_jsx_runtime4.Fragment, { children: [
598
- (0, import_react5.cloneElement)(child, {
599
- className: iconStyles({ className, size, intent }),
600
- "data-spark-component": "icon",
601
- "aria-hidden": "true",
602
- focusable: "false",
603
- ...others
604
- }),
605
- label && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(VisuallyHidden, { children: label })
606
- ] });
607
- };
608
- Icon.displayName = "Icon";
609
-
610
- // src/progress/Progress.tsx
611
- var import_class_variance_authority4 = require("class-variance-authority");
612
- var import_radix_ui3 = require("radix-ui");
613
- var import_react7 = require("react");
614
-
615
- // src/progress/ProgressBar.styles.ts
616
- var import_class_variance_authority2 = require("class-variance-authority");
617
- var progressBarStyles = (0, import_class_variance_authority2.cva)(
618
- ["relative", "h-sz-4 w-full", "transform-gpu overflow-hidden", "bg-on-background/dim-4"],
619
- {
620
- variants: {
621
- shape: {
622
- square: [],
623
- rounded: ["rounded-sm"]
624
- }
625
- }
626
- }
627
- );
628
-
629
- // src/progress/ProgressContext.tsx
630
- var import_react6 = require("react");
631
- var ProgressContext = (0, import_react6.createContext)(null);
632
- var ID_PREFIX2 = ":progress";
633
- var useProgress = () => {
634
- const context = (0, import_react6.useContext)(ProgressContext);
635
- if (!context) {
636
- throw new Error("useProgress must be used within a Progress provider");
637
- }
638
- return context;
639
- };
640
-
641
- // src/progress/ProgressIndicator.tsx
642
- var import_radix_ui2 = require("radix-ui");
643
-
644
- // src/progress/ProgressIndicator.styles.ts
645
- var import_class_variance_authority3 = require("class-variance-authority");
646
- var progressIndicatorStyles = (0, import_class_variance_authority3.cva)(["h-full w-full", "transition-transform duration-400"], {
647
- variants: {
648
- /**
649
- * Color scheme of the progress component.
650
- */
651
- intent: {
652
- basic: ["bg-basic"],
653
- main: ["bg-main"],
654
- support: ["bg-support"],
655
- accent: ["bg-accent"],
656
- success: ["bg-success"],
657
- alert: ["bg-alert"],
658
- danger: ["bg-error"],
659
- info: ["bg-info"],
660
- neutral: ["bg-neutral"]
661
- },
662
- /**
663
- * Shape of the progress component.
664
- */
665
- shape: {
666
- square: [],
667
- rounded: ["rounded-sm"]
668
- },
669
- /**
670
- * Sets if the progress value is not determinated.
671
- */
672
- isIndeterminate: {
673
- true: ["absolute", "-translate-x-1/2", "animate-standalone-indeterminate-bar"],
674
- false: []
675
- }
676
- }
677
- });
678
-
679
- // src/progress/ProgressIndicator.tsx
680
- var import_jsx_runtime5 = require("react/jsx-runtime");
681
- var ProgressIndicator = ({
682
- className,
683
- style,
684
- ref,
685
- onTransitionEnd,
686
- ...others
687
- }) => {
688
- const { value, max, intent, shape, isIndeterminate, onComplete } = useProgress();
689
- const x = (max - value) / max * 100;
690
- const handleTransitionEnd = (event) => {
691
- onTransitionEnd?.(event);
692
- if (value >= max && onComplete && !isIndeterminate) {
693
- onComplete();
694
- }
695
- };
696
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
697
- import_radix_ui2.Progress.ProgressIndicator,
698
- {
699
- "data-spark-component": "progress-indicator",
700
- className: progressIndicatorStyles({ className, intent, shape, isIndeterminate }),
701
- style: { ...style, ...!isIndeterminate && { transform: `translateX(-${x}%)` } },
702
- ref,
703
- onTransitionEnd: handleTransitionEnd,
704
- ...others
705
- }
706
- );
707
- };
708
- ProgressIndicator.displayName = "Progress.Indicator";
709
-
710
- // src/progress/ProgressBar.tsx
711
- var import_jsx_runtime6 = require("react/jsx-runtime");
712
- var ProgressBar = ({
713
- className,
714
- children = /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(ProgressIndicator, {}),
715
- ref,
716
- ...others
717
- }) => {
718
- const { shape } = useProgress();
719
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
720
- "div",
721
- {
722
- "data-spark-component": "progress-bar",
723
- className: progressBarStyles({ className, shape }),
724
- ref,
725
- ...others,
726
- children
727
- }
728
- );
729
- };
730
- ProgressBar.displayName = "Progress.Bar";
731
-
732
- // src/progress/Progress.tsx
733
- var import_jsx_runtime7 = require("react/jsx-runtime");
734
- var Progress = ({
735
- className,
736
- value: valueProp,
737
- max = 100,
738
- shape = "square",
739
- intent = "basic",
740
- isIndeterminate = false,
741
- onComplete,
742
- children = /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(ProgressBar, {}),
743
- ref,
744
- ...others
745
- }) => {
746
- const [labelId, setLabelId] = (0, import_react7.useState)();
747
- const value = (0, import_react7.useMemo)(() => {
748
- return {
749
- value: valueProp ?? 0,
750
- max,
751
- intent,
752
- shape,
753
- isIndeterminate,
754
- onLabelId: setLabelId,
755
- onComplete
756
- };
757
- }, [max, valueProp, intent, shape, isIndeterminate, setLabelId, onComplete]);
758
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(ProgressContext.Provider, { "data-spark-component": "progress", value, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
759
- import_radix_ui3.Progress.Progress,
760
- {
761
- "data-spark-component": "progress",
762
- ref,
763
- className: (0, import_class_variance_authority4.cx)("gap-sm focus-visible:u-outline flex flex-col", className),
764
- value: valueProp,
765
- "aria-labelledby": labelId,
766
- max,
767
- tabIndex: -1,
768
- ...others,
769
- children
770
- }
771
- ) });
772
- };
773
- Progress.displayName = "Progress";
774
-
775
- // src/progress/ProgressLabel.tsx
776
- var import_use_merge_refs = require("@spark-ui/hooks/use-merge-refs");
777
- var import_react8 = require("react");
778
- var import_jsx_runtime8 = require("react/jsx-runtime");
779
- var ProgressLabel = ({
780
- id: idProp,
781
- children,
782
- ref: forwardedRef,
783
- ...others
784
- }) => {
785
- const internalID = `${ID_PREFIX2}-label-${(0, import_react8.useId)()}`;
786
- const id = idProp || internalID;
787
- const { onLabelId } = useProgress();
788
- const rootRef = (0, import_react8.useCallback)(
789
- (el) => {
790
- onLabelId(el ? id : void 0);
791
- },
792
- [id, onLabelId]
793
- );
794
- const ref = (0, import_use_merge_refs.useMergeRefs)(forwardedRef, rootRef);
795
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
796
- "span",
797
- {
798
- "data-spark-component": "progress-label",
799
- id,
800
- className: "text-body-2 text-on-surface",
801
- ref,
802
- ...others,
803
- children
804
- }
805
- );
806
- };
807
- ProgressLabel.displayName = "Progress.Label";
808
-
809
- // src/progress/index.ts
810
- var Progress2 = Object.assign(Progress, {
811
- Label: ProgressLabel,
812
- Bar: ProgressBar,
813
- Indicator: ProgressIndicator
814
- });
815
- Progress2.displayName = "Progress";
816
- ProgressBar.displayName = "Progress.Bar";
817
- ProgressIndicator.displayName = "Progress.Indicator";
818
- ProgressLabel.displayName = "Progress.Label";
819
-
820
- // src/file-upload/FileUploadItemDeleteTrigger.tsx
821
- var import_Close = require("@spark-ui/icons/Close");
822
- var import_class_variance_authority9 = require("class-variance-authority");
823
- var import_react10 = require("react");
824
-
825
- // src/button/Button.tsx
826
- var import_class_variance_authority7 = require("class-variance-authority");
827
- var import_react9 = require("react");
828
-
829
- // src/spinner/Spinner.styles.tsx
830
- var import_internal_utils2 = require("@spark-ui/internal-utils");
831
- var import_class_variance_authority5 = require("class-variance-authority");
832
- var defaultVariants = {
833
- intent: "current",
834
- size: "current",
835
- isBackgroundVisible: false
836
- };
837
- var spinnerStyles = (0, import_class_variance_authority5.cva)(
838
- ["inline-block", "border-solid", "rounded-full", "border-md", "animate-spin"],
839
- {
840
- variants: {
841
- /**
842
- * Use `size` prop to set the size of the spinner. If you want to set the full size for the spinner, don't forget to add a wrapping container with its own size.
843
- */
844
- size: {
845
- current: ["u-current-font-size"],
846
- sm: ["w-sz-20", "h-sz-20"],
847
- md: ["w-sz-28", "h-sz-28"],
848
- full: ["w-full", "h-full"]
849
- },
850
- /**
851
- * Color scheme of the spinner.
852
- */
853
- intent: (0, import_internal_utils2.makeVariants)({
854
- current: ["border-current"],
855
- main: ["border-main"],
856
- support: ["border-support"],
857
- accent: ["border-accent"],
858
- basic: ["border-basic"],
859
- success: ["border-success"],
860
- alert: ["border-alert"],
861
- error: ["border-error"],
862
- info: ["border-info"],
863
- neutral: ["border-neutral"]
864
- }),
865
- /**
866
- * Size of the button.
867
- */
868
- isBackgroundVisible: {
869
- true: ["border-b-neutral-container", "border-l-neutral-container"],
870
- false: ["border-b-transparent", "border-l-transparent"]
871
- }
872
- },
873
- defaultVariants
874
- }
875
- );
876
-
877
- // src/spinner/Spinner.tsx
878
- var import_jsx_runtime9 = require("react/jsx-runtime");
879
- var Spinner = ({
880
- className,
881
- size = "current",
882
- intent = "current",
883
- label,
884
- isBackgroundVisible,
885
- ref,
886
- ...others
887
- }) => {
888
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
889
- "span",
890
- {
891
- role: "status",
892
- "data-spark-component": "spinner",
893
- ref,
894
- className: spinnerStyles({ className, size, intent, isBackgroundVisible }),
895
- ...others,
896
- children: label && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(VisuallyHidden, { children: label })
897
- }
898
- );
899
- };
900
-
901
- // src/button/Button.styles.tsx
902
- var import_internal_utils8 = require("@spark-ui/internal-utils");
903
- var import_class_variance_authority6 = require("class-variance-authority");
904
-
905
- // src/button/variants/filled.ts
906
- var import_internal_utils3 = require("@spark-ui/internal-utils");
907
- var filledVariants = [
908
- // Main
909
- {
910
- intent: "main",
911
- design: "filled",
912
- class: (0, import_internal_utils3.tw)([
913
- "bg-main",
914
- "text-on-main",
915
- "hover:bg-main-hovered",
916
- "enabled:active:bg-main-hovered",
917
- "focus-visible:bg-main-hovered"
918
- ])
919
- },
920
- // Support
921
- {
922
- intent: "support",
923
- design: "filled",
924
- class: (0, import_internal_utils3.tw)([
925
- "bg-support",
926
- "text-on-support",
927
- "hover:bg-support-hovered",
928
- "enabled:active:bg-support-hovered",
929
- "focus-visible:bg-support-hovered"
930
- ])
931
- },
932
- // Accent
933
- {
934
- intent: "accent",
935
- design: "filled",
936
- class: (0, import_internal_utils3.tw)([
937
- "bg-accent",
938
- "text-on-accent",
939
- "hover:bg-accent-hovered",
940
- "enabled:active:bg-accent-hovered",
941
- "focus-visible:bg-accent-hovered"
942
- ])
943
- },
944
- // Basic
945
- {
946
- intent: "basic",
947
- design: "filled",
948
- class: (0, import_internal_utils3.tw)([
949
- "bg-basic",
950
- "text-on-basic",
951
- "hover:bg-basic-hovered",
952
- "enabled:active:bg-basic-hovered",
953
- "focus-visible:bg-basic-hovered"
954
- ])
955
- },
956
- // Success
957
- {
958
- intent: "success",
959
- design: "filled",
960
- class: (0, import_internal_utils3.tw)([
961
- "bg-success",
962
- "text-on-success",
963
- "hover:bg-success-hovered",
964
- "enabled:active:bg-success-hovered",
965
- "focus-visible:bg-success-hovered"
966
- ])
967
- },
968
- // Alert
969
- {
970
- intent: "alert",
971
- design: "filled",
972
- class: (0, import_internal_utils3.tw)([
973
- "bg-alert",
974
- "text-on-alert",
975
- "hover:bg-alert-hovered",
976
- "enabled:active:bg-alert-hovered",
977
- "focus-visible:bg-alert-hovered"
978
- ])
979
- },
980
- // Danger
981
- {
982
- intent: "danger",
983
- design: "filled",
984
- class: (0, import_internal_utils3.tw)([
985
- "text-on-error bg-error",
986
- "hover:bg-error-hovered enabled:active:bg-error-hovered",
987
- "focus-visible:bg-error-hovered"
988
- ])
989
- },
990
- // Info
991
- {
992
- intent: "info",
993
- design: "filled",
994
- class: (0, import_internal_utils3.tw)([
995
- "text-on-error bg-info",
996
- "hover:bg-info-hovered enabled:active:bg-info-hovered",
997
- "focus-visible:bg-info-hovered"
998
- ])
999
- },
1000
- // Neutral
1001
- {
1002
- intent: "neutral",
1003
- design: "filled",
1004
- class: (0, import_internal_utils3.tw)([
1005
- "bg-neutral",
1006
- "text-on-neutral",
1007
- "hover:bg-neutral-hovered",
1008
- "enabled:active:bg-neutral-hovered",
1009
- "focus-visible:bg-neutral-hovered"
1010
- ])
1011
- },
1012
- // Surface
1013
- {
1014
- intent: "surface",
1015
- design: "filled",
1016
- class: (0, import_internal_utils3.tw)([
1017
- "bg-surface",
1018
- "text-on-surface",
1019
- "hover:bg-surface-hovered",
1020
- "enabled:active:bg-surface-hovered",
1021
- "focus-visible:bg-surface-hovered"
1022
- ])
1023
- },
1024
- {
1025
- intent: "surfaceInverse",
1026
- design: "filled",
1027
- class: (0, import_internal_utils3.tw)([
1028
- "bg-surface-inverse",
1029
- "text-on-surface-inverse",
1030
- "hover:bg-surface-inverse-hovered",
1031
- "enabled:active:bg-surface-inverse-hovered",
1032
- "focus-visible:bg-surface-inverse-hovered"
1033
- ])
1034
- }
1035
- ];
1036
-
1037
- // src/button/variants/ghost.ts
1038
- var import_internal_utils4 = require("@spark-ui/internal-utils");
1039
- var ghostVariants = [
1040
- {
1041
- intent: "main",
1042
- design: "ghost",
1043
- class: (0, import_internal_utils4.tw)([
1044
- "text-on-main-container",
1045
- "hover:bg-main/dim-5",
1046
- "enabled:active:bg-main/dim-5",
1047
- "focus-visible:bg-main/dim-5"
1048
- ])
1049
- },
1050
- {
1051
- intent: "support",
1052
- design: "ghost",
1053
- class: (0, import_internal_utils4.tw)([
1054
- "text-on-support-container",
1055
- "hover:bg-support/dim-5",
1056
- "enabled:active:bg-support/dim-5",
1057
- "focus-visible:bg-support/dim-5"
1058
- ])
1059
- },
1060
- {
1061
- intent: "accent",
1062
- design: "ghost",
1063
- class: (0, import_internal_utils4.tw)([
1064
- "text-on-accent-container",
1065
- "hover:bg-accent/dim-5",
1066
- "enabled:active:bg-accent/dim-5",
1067
- "focus-visible:bg-accent/dim-5"
1068
- ])
1069
- },
1070
- {
1071
- intent: "basic",
1072
- design: "ghost",
1073
- class: (0, import_internal_utils4.tw)([
1074
- "text-on-basic-container",
1075
- "hover:bg-basic/dim-5",
1076
- "enabled:active:bg-basic/dim-5",
1077
- "focus-visible:bg-basic/dim-5"
1078
- ])
1079
- },
1080
- {
1081
- intent: "success",
1082
- design: "ghost",
1083
- class: (0, import_internal_utils4.tw)([
1084
- "text-on-success-container",
1085
- "hover:bg-success/dim-5",
1086
- "enabled:active:bg-success/dim-5",
1087
- "focus-visible:bg-success/dim-5"
1088
- ])
1089
- },
1090
- {
1091
- intent: "alert",
1092
- design: "ghost",
1093
- class: (0, import_internal_utils4.tw)([
1094
- "text-on-alert-container",
1095
- "hover:bg-alert/dim-5",
1096
- "enabled:active:bg-alert/dim-5",
1097
- "focus-visible:bg-alert/dim-5"
1098
- ])
1099
- },
1100
- {
1101
- intent: "danger",
1102
- design: "ghost",
1103
- class: (0, import_internal_utils4.tw)([
1104
- "text-on-error-container",
1105
- "hover:bg-error/dim-5",
1106
- "enabled:active:bg-error/dim-5",
1107
- "focus-visible:bg-error/dim-5"
1108
- ])
1109
- },
1110
- {
1111
- intent: "info",
1112
- design: "ghost",
1113
- class: (0, import_internal_utils4.tw)([
1114
- "text-on-info-container",
1115
- "hover:bg-info/dim-5",
1116
- "enabled:active:bg-info/dim-5",
1117
- "focus-visible:bg-info/dim-5"
1118
- ])
1119
- },
1120
- {
1121
- intent: "neutral",
1122
- design: "ghost",
1123
- class: (0, import_internal_utils4.tw)([
1124
- "text-on-neutral-container",
1125
- "hover:bg-neutral/dim-5",
1126
- "enabled:active:bg-neutral/dim-5",
1127
- "focus-visible:bg-neutral/dim-5"
1128
- ])
1129
- },
1130
- {
1131
- intent: "surface",
1132
- design: "ghost",
1133
- class: (0, import_internal_utils4.tw)([
1134
- "text-surface",
1135
- "hover:bg-surface/dim-5",
1136
- "enabled:active:bg-surface/dim-5",
1137
- "focus-visible:bg-surface/dim-5"
1138
- ])
1139
- },
1140
- {
1141
- intent: "surfaceInverse",
1142
- design: "ghost",
1143
- class: (0, import_internal_utils4.tw)([
1144
- "text-surface-inverse",
1145
- "hover:bg-surface-inverse/dim-5",
1146
- "enabled:active:bg-surface-inverse/dim-5",
1147
- "focus-visible:bg-surface-inverse/dim-5"
1148
- ])
1149
- }
1150
- ];
1151
-
1152
- // src/button/variants/outlined.ts
1153
- var import_internal_utils5 = require("@spark-ui/internal-utils");
1154
- var outlinedVariants = [
1155
- {
1156
- intent: "main",
1157
- design: "outlined",
1158
- class: (0, import_internal_utils5.tw)([
1159
- "hover:bg-main/dim-5",
1160
- "enabled:active:bg-main/dim-5",
1161
- "focus-visible:bg-main/dim-5",
1162
- "text-main"
1163
- ])
1164
- },
1165
- {
1166
- intent: "support",
1167
- design: "outlined",
1168
- class: (0, import_internal_utils5.tw)([
1169
- "hover:bg-support/dim-5",
1170
- "enabled:active:bg-support/dim-5",
1171
- "focus-visible:bg-support/dim-5",
1172
- "text-support"
1173
- ])
1174
- },
1175
- {
1176
- intent: "accent",
1177
- design: "outlined",
1178
- class: (0, import_internal_utils5.tw)([
1179
- "hover:bg-accent/dim-5",
1180
- "enabled:active:bg-accent/dim-5",
1181
- "focus-visible:bg-accent/dim-5",
1182
- "text-accent"
1183
- ])
1184
- },
1185
- {
1186
- intent: "basic",
1187
- design: "outlined",
1188
- class: (0, import_internal_utils5.tw)([
1189
- "hover:bg-basic/dim-5",
1190
- "enabled:active:bg-basic/dim-5",
1191
- "focus-visible:bg-basic/dim-5",
1192
- "text-basic"
1193
- ])
1194
- },
1195
- {
1196
- intent: "success",
1197
- design: "outlined",
1198
- class: (0, import_internal_utils5.tw)([
1199
- "hover:bg-success/dim-5",
1200
- "enabled:active:bg-success/dim-5",
1201
- "focus-visible:bg-success/dim-5",
1202
- "text-success"
1203
- ])
1204
- },
1205
- {
1206
- intent: "alert",
1207
- design: "outlined",
1208
- class: (0, import_internal_utils5.tw)([
1209
- "hover:bg-alert/dim-5",
1210
- "enabled:active:bg-alert/dim-5",
1211
- "focus-visible:bg-alert/dim-5",
1212
- "text-alert"
1213
- ])
1214
- },
1215
- {
1216
- intent: "danger",
1217
- design: "outlined",
1218
- class: (0, import_internal_utils5.tw)([
1219
- "hover:bg-error/dim-5",
1220
- "enabled:active:bg-error/dim-5",
1221
- "focus-visible:bg-error/dim-5",
1222
- "text-error"
1223
- ])
1224
- },
1225
- {
1226
- intent: "info",
1227
- design: "outlined",
1228
- class: (0, import_internal_utils5.tw)([
1229
- "hover:bg-info/dim-5",
1230
- "enabled:active:bg-info/dim-5",
1231
- "focus-visible:bg-info/dim-5",
1232
- "text-info"
1233
- ])
1234
- },
1235
- {
1236
- intent: "neutral",
1237
- design: "outlined",
1238
- class: (0, import_internal_utils5.tw)([
1239
- "hover:bg-neutral/dim-5",
1240
- "enabled:active:bg-neutral/dim-5",
1241
- "focus-visible:bg-neutral/dim-5",
1242
- "text-neutral"
1243
- ])
1244
- },
1245
- {
1246
- intent: "surface",
1247
- design: "outlined",
1248
- class: (0, import_internal_utils5.tw)([
1249
- "hover:bg-surface/dim-5",
1250
- "enabled:active:bg-surface/dim-5",
1251
- "focus-visible:bg-surface/dim-5",
1252
- "text-surface"
1253
- ])
1254
- },
1255
- {
1256
- intent: "surfaceInverse",
1257
- design: "outlined",
1258
- class: (0, import_internal_utils5.tw)([
1259
- "hover:bg-surface-inverse/dim-5",
1260
- "enabled:active:bg-surface-inverse/dim-5",
1261
- "focus-visible:bg-surface-inverse/dim-5",
1262
- "text-surface-inverse"
1263
- ])
1264
- }
1265
- ];
1266
-
1267
- // src/button/variants/tinted.ts
1268
- var import_internal_utils6 = require("@spark-ui/internal-utils");
1269
- var tintedVariants = [
1270
- {
1271
- intent: "main",
1272
- design: "tinted",
1273
- class: (0, import_internal_utils6.tw)([
1274
- "bg-main-container",
1275
- "text-on-main-container",
1276
- "hover:bg-main-container-hovered",
1277
- "enabled:active:bg-main-container-hovered",
1278
- "focus-visible:bg-main-container-hovered"
1279
- ])
1280
- },
1281
- {
1282
- intent: "support",
1283
- design: "tinted",
1284
- class: (0, import_internal_utils6.tw)([
1285
- "bg-support-container",
1286
- "text-on-support-container",
1287
- "hover:bg-support-container-hovered",
1288
- "enabled:active:bg-support-container-hovered",
1289
- "focus-visible:bg-support-container-hovered"
1290
- ])
1291
- },
1292
- {
1293
- intent: "accent",
1294
- design: "tinted",
1295
- class: (0, import_internal_utils6.tw)([
1296
- "bg-accent-container",
1297
- "text-on-accent-container",
1298
- "hover:bg-accent-container-hovered",
1299
- "enabled:active:bg-accent-container-hovered",
1300
- "focus-visible:bg-accent-container-hovered"
1301
- ])
1302
- },
1303
- {
1304
- intent: "basic",
1305
- design: "tinted",
1306
- class: (0, import_internal_utils6.tw)([
1307
- "bg-basic-container",
1308
- "text-on-basic-container",
1309
- "hover:bg-basic-container-hovered",
1310
- "enabled:active:bg-basic-container-hovered",
1311
- "focus-visible:bg-basic-container-hovered"
1312
- ])
1313
- },
1314
- {
1315
- intent: "success",
1316
- design: "tinted",
1317
- class: (0, import_internal_utils6.tw)([
1318
- "bg-success-container",
1319
- "text-on-success-container",
1320
- "hover:bg-success-container-hovered",
1321
- "enabled:active:bg-success-container-hovered",
1322
- "focus-visible:bg-success-container-hovered"
1323
- ])
1324
- },
1325
- {
1326
- intent: "alert",
1327
- design: "tinted",
1328
- class: (0, import_internal_utils6.tw)([
1329
- "bg-alert-container",
1330
- "text-on-alert-container",
1331
- "hover:bg-alert-container-hovered",
1332
- "enabled:active:bg-alert-container-hovered",
1333
- "focus-visible:bg-alert-container-hovered"
1334
- ])
1335
- },
1336
- {
1337
- intent: "danger",
1338
- design: "tinted",
1339
- class: (0, import_internal_utils6.tw)([
1340
- "bg-error-container",
1341
- "text-on-error-container",
1342
- "hover:bg-error-container-hovered",
1343
- "enabled:active:bg-error-container-hovered",
1344
- "focus-visible:bg-error-container-hovered"
1345
- ])
1346
- },
1347
- {
1348
- intent: "info",
1349
- design: "tinted",
1350
- class: (0, import_internal_utils6.tw)([
1351
- "bg-info-container",
1352
- "text-on-info-container",
1353
- "hover:bg-info-container-hovered",
1354
- "enabled:active:bg-info-container-hovered",
1355
- "focus-visible:bg-info-container-hovered"
1356
- ])
1357
- },
1358
- {
1359
- intent: "neutral",
1360
- design: "tinted",
1361
- class: (0, import_internal_utils6.tw)([
1362
- "bg-neutral-container",
1363
- "text-on-neutral-container",
1364
- "hover:bg-neutral-container-hovered",
1365
- "enabled:active:bg-neutral-container-hovered",
1366
- "focus-visible:bg-neutral-container-hovered"
1367
- ])
1368
- },
1369
- {
1370
- intent: "surface",
1371
- design: "tinted",
1372
- class: (0, import_internal_utils6.tw)([
1373
- "bg-surface",
1374
- "text-on-surface",
1375
- "hover:bg-surface-hovered",
1376
- "enabled:active:bg-surface-hovered",
1377
- "focus-visible:bg-surface-hovered"
1378
- ])
1379
- },
1380
- {
1381
- intent: "surfaceInverse",
1382
- design: "tinted",
1383
- class: (0, import_internal_utils6.tw)([
1384
- "bg-surface-inverse",
1385
- "text-on-surface-inverse",
1386
- "hover:bg-surface-inverse-hovered",
1387
- "enabled:active:bg-surface-inverse-hovered",
1388
- "focus-visible:bg-surface-inverse-hovered"
1389
- ])
1390
- }
1391
- ];
1392
-
1393
- // src/button/variants/contrast.ts
1394
- var import_internal_utils7 = require("@spark-ui/internal-utils");
1395
- var contrastVariants = [
1396
- {
1397
- intent: "main",
1398
- design: "contrast",
1399
- class: (0, import_internal_utils7.tw)([
1400
- "text-on-main-contaier bg-surface",
1401
- "hover:bg-main-container-hovered",
1402
- "enabled:active:bg-main-container-hovered",
1403
- "focus-visible:bg-main-container-hovered"
1404
- ])
1405
- },
1406
- {
1407
- intent: "support",
1408
- design: "contrast",
1409
- class: (0, import_internal_utils7.tw)([
1410
- "text-on-support-container bg-surface",
1411
- "hover:bg-support-container-hovered",
1412
- "enabled:active:bg-support-container-hovered",
1413
- "focus-visible:bg-support-container-hovered"
1414
- ])
1415
- },
1416
- {
1417
- intent: "accent",
1418
- design: "contrast",
1419
- class: (0, import_internal_utils7.tw)([
1420
- "text-on-accent-container bg-surface",
1421
- "hover:bg-accent-container-hovered",
1422
- "enabled:active:bg-accent-container-hovered",
1423
- "focus-visible:bg-accent-container-hovered"
1424
- ])
1425
- },
1426
- {
1427
- intent: "basic",
1428
- design: "contrast",
1429
- class: (0, import_internal_utils7.tw)([
1430
- "text-on-basic-container bg-surface",
1431
- "hover:bg-basic-container-hovered",
1432
- "enabled:active:bg-basic-container-hovered",
1433
- "focus-visible:bg-basic-container-hovered"
1434
- ])
1435
- },
1436
- {
1437
- intent: "success",
1438
- design: "contrast",
1439
- class: (0, import_internal_utils7.tw)([
1440
- "text-on-success-container bg-surface",
1441
- "hover:bg-success-container-hovered",
1442
- "enabled:active:bg-success-container-hovered",
1443
- "focus-visible:bg-success-container-hovered"
1444
- ])
1445
- },
1446
- {
1447
- intent: "alert",
1448
- design: "contrast",
1449
- class: (0, import_internal_utils7.tw)([
1450
- "text-on-alert-container bg-surface",
1451
- "hover:bg-alert-container-hovered",
1452
- "enabled:active:bg-alert-container-hovered",
1453
- "focus-visible:bg-alert-container-hovered"
1454
- ])
1455
- },
1456
- {
1457
- intent: "danger",
1458
- design: "contrast",
1459
- class: (0, import_internal_utils7.tw)([
1460
- "text-on-error-container bg-surface",
1461
- "hover:bg-error-container-hovered",
1462
- "enabled:active:bg-error-container-hovered",
1463
- "focus-visible:bg-error-container-hovered"
1464
- ])
1465
- },
1466
- {
1467
- intent: "info",
1468
- design: "contrast",
1469
- class: (0, import_internal_utils7.tw)([
1470
- "text-on-info-container bg-surface",
1471
- "hover:bg-info-container-hovered",
1472
- "enabled:active:bg-info-container-hovered",
1473
- "focus-visible:bg-info-container-hovered"
1474
- ])
1475
- },
1476
- {
1477
- intent: "neutral",
1478
- design: "contrast",
1479
- class: (0, import_internal_utils7.tw)([
1480
- "text-on-neutral-container bg-surface",
1481
- "hover:bg-neutral-container-hovered",
1482
- "enabled:active:bg-neutral-container-hovered",
1483
- "focus-visible:bg-neutral-container-hovered"
1484
- ])
1485
- },
1486
- {
1487
- intent: "surface",
1488
- design: "contrast",
1489
- class: (0, import_internal_utils7.tw)([
1490
- "text-on-surface bg-surface",
1491
- "hover:bg-surface-hovered",
1492
- "enabled:active:bg-surface-hovered",
1493
- "focus-visible:bg-surface-hovered"
1494
- ])
1495
- },
1496
- {
1497
- intent: "surfaceInverse",
1498
- design: "contrast",
1499
- class: (0, import_internal_utils7.tw)([
1500
- "text-on-surface-inverse bg-surface-inverse",
1501
- "hover:bg-surface-inverse-hovered",
1502
- "enabled:active:bg-surface-inverse-hovered",
1503
- "focus-visible:bg-surface-inverse-hovered"
1504
- ])
1505
- }
1506
- ];
1507
-
1508
- // src/button/Button.styles.tsx
1509
- var buttonStyles = (0, import_class_variance_authority6.cva)(
1510
- [
1511
- "u-shadow-border-transition",
1512
- "box-border inline-flex items-center justify-center gap-md whitespace-nowrap",
1513
- "default:px-lg",
1514
- "text-body-1 font-bold",
1515
- "focus-visible:u-outline"
1516
- ],
1517
- {
1518
- variants: {
1519
- /**
1520
- * Main style of the button.
1521
- *
1522
- * - `filled`: Button will be plain.
1523
- *
1524
- * - `outlined`: Button will be transparent with an outline.
1525
- *
1526
- * - `tinted`: Button will be filled but using a lighter color scheme.
1527
- *
1528
- * - `ghost`: Button will look like a link. No borders, plain text.
1529
- *
1530
- * - `contrast`: Button will be surface filled. No borders, plain text.
1531
- *
1532
- */
1533
- design: (0, import_internal_utils8.makeVariants)({
1534
- filled: [],
1535
- outlined: ["bg-transparent", "border-sm", "border-current"],
1536
- tinted: [],
1537
- ghost: ["default:-mx-md px-md hover:bg-main/dim-5"],
1538
- contrast: []
1539
- }),
1540
- underline: {
1541
- true: ["underline"]
1542
- },
1543
- /**
1544
- * Color scheme of the button.
1545
- */
1546
- intent: (0, import_internal_utils8.makeVariants)({
1547
- main: [],
1548
- support: [],
1549
- accent: [],
1550
- basic: [],
1551
- success: [],
1552
- alert: [],
1553
- danger: [],
1554
- info: [],
1555
- neutral: [],
1556
- surface: [],
1557
- surfaceInverse: []
1558
- }),
1559
- /**
1560
- * Size of the button.
1561
- */
1562
- size: (0, import_internal_utils8.makeVariants)({
1563
- sm: ["min-w-sz-32", "h-sz-32"],
1564
- md: ["min-w-sz-44", "h-sz-44"],
1565
- lg: ["min-w-sz-56", "h-sz-56"]
1566
- }),
1567
- /**
1568
- * Shape of the button.
1569
- */
1570
- shape: (0, import_internal_utils8.makeVariants)({
1571
- rounded: ["rounded-lg"],
1572
- square: ["rounded-0"],
1573
- pill: ["rounded-full"]
1574
- }),
1575
- /**
1576
- * Disable the button, preventing user interaction and adding opacity.
1577
- */
1578
- disabled: {
1579
- true: ["cursor-not-allowed", "opacity-dim-3"],
1580
- false: ["cursor-pointer"]
1581
- }
1582
- },
1583
- compoundVariants: [
1584
- ...filledVariants,
1585
- ...outlinedVariants,
1586
- ...tintedVariants,
1587
- ...ghostVariants,
1588
- ...contrastVariants
1589
- ],
1590
- defaultVariants: {
1591
- design: "filled",
1592
- intent: "main",
1593
- size: "md",
1594
- shape: "rounded"
1595
- }
1596
- }
1597
- );
1598
-
1599
- // src/button/Button.tsx
1600
- var import_jsx_runtime10 = require("react/jsx-runtime");
1601
- var blockedEventHandlers = [
1602
- "onClick",
1603
- "onMouseDown",
1604
- "onMouseUp",
1605
- "onMouseEnter",
1606
- "onMouseLeave",
1607
- "onMouseOver",
1608
- "onMouseOut",
1609
- "onKeyDown",
1610
- "onKeyPress",
1611
- "onKeyUp",
1612
- "onSubmit"
1613
- ];
1614
- var Button = ({
1615
- children,
1616
- design = "filled",
1617
- disabled = false,
1618
- intent = "main",
1619
- isLoading = false,
1620
- loadingLabel,
1621
- loadingText,
1622
- shape = "rounded",
1623
- size = "md",
1624
- asChild,
1625
- className,
1626
- underline = false,
1627
- ref,
1628
- ...others
1629
- }) => {
1630
- const Component = asChild ? Slot : "button";
1631
- const shouldNotInteract = !!disabled || isLoading;
1632
- const disabledEventHandlers = (0, import_react9.useMemo)(() => {
1633
- const result = {};
1634
- if (shouldNotInteract) {
1635
- blockedEventHandlers.forEach((eventHandler) => result[eventHandler] = void 0);
1636
- }
1637
- return result;
1638
- }, [shouldNotInteract]);
1639
- const spinnerProps = {
1640
- size: "current",
1641
- className: loadingText ? "inline-block" : "absolute",
1642
- ...loadingLabel && { "aria-label": loadingLabel }
1643
- };
1644
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1645
- Component,
1646
- {
1647
- "data-spark-component": "button",
1648
- ...Component === "button" && { type: "button" },
1649
- ref,
1650
- className: buttonStyles({
1651
- className,
1652
- design,
1653
- disabled: shouldNotInteract,
1654
- intent,
1655
- shape,
1656
- size,
1657
- underline
1658
- }),
1659
- disabled: !!disabled,
1660
- "aria-busy": isLoading,
1661
- "aria-live": isLoading ? "assertive" : "off",
1662
- ...others,
1663
- ...disabledEventHandlers,
1664
- children: wrapPolymorphicSlot(
1665
- asChild,
1666
- children,
1667
- (slotted) => isLoading ? /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
1668
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Spinner, { ...spinnerProps }),
1669
- loadingText && loadingText,
1670
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1671
- "div",
1672
- {
1673
- "aria-hidden": true,
1674
- className: (0, import_class_variance_authority7.cx)("gap-md", loadingText ? "hidden" : "inline-flex opacity-0"),
1675
- children: slotted
1676
- }
1677
- )
1678
- ] }) : slotted
1679
- )
1680
- }
1681
- );
1682
- };
1683
- Button.displayName = "Button";
1684
-
1685
- // src/icon-button/IconButton.styles.tsx
1686
- var import_internal_utils9 = require("@spark-ui/internal-utils");
1687
- var import_class_variance_authority8 = require("class-variance-authority");
1688
- var iconButtonStyles = (0, import_class_variance_authority8.cva)(["pl-0 pr-0"], {
1689
- variants: {
1690
- /**
1691
- * Sets the size of the icon.
1692
- */
1693
- size: (0, import_internal_utils9.makeVariants)({
1694
- sm: ["text-body-1"],
1695
- md: ["text-body-1"],
1696
- lg: ["text-display-3"]
1697
- })
1698
- }
1699
- });
1700
-
1701
- // src/icon-button/IconButton.tsx
1702
- var import_jsx_runtime11 = require("react/jsx-runtime");
1703
- var IconButton = ({
1704
- design = "filled",
1705
- disabled = false,
1706
- intent = "main",
1707
- shape = "rounded",
1708
- size = "md",
1709
- className,
1710
- ref,
1711
- ...others
1712
- }) => {
1713
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1714
- Button,
1715
- {
1716
- "data-spark-component": "icon-button",
1717
- ref,
1718
- className: iconButtonStyles({ size, className }),
1719
- design,
1720
- disabled,
1721
- intent,
1722
- shape,
1723
- size,
1724
- ...others
1725
- }
1726
- );
1727
- };
1728
- IconButton.displayName = "IconButton";
1729
-
1730
- // src/file-upload/FileUploadItemDeleteTrigger.tsx
1731
- var import_jsx_runtime12 = require("react/jsx-runtime");
1732
- var ItemDeleteTrigger = ({
1733
- className,
1734
- file,
1735
- onClick,
1736
- ...props
1737
- }) => {
1738
- const {
1739
- removeFile,
1740
- triggerRef,
1741
- dropzoneRef,
1742
- deleteButtonRefs,
1743
- inputRef,
1744
- disabled,
1745
- readOnly,
1746
- files
1747
- } = useFileUploadContext();
1748
- const buttonRef = (0, import_react10.useRef)(null);
1749
- const fileIndex = files.findIndex((f) => f.name === file.name && f.size === file.size);
1750
- const handleClick = (e) => {
1751
- if (disabled || readOnly) {
1752
- return;
1753
- }
1754
- removeFile(fileIndex);
1755
- requestAnimationFrame(() => {
1756
- const remainingButtons = deleteButtonRefs.current.filter(Boolean);
1757
- if (remainingButtons.length > 0) {
1758
- const targetIndex = Math.min(fileIndex, remainingButtons.length - 1);
1759
- const nextButton = remainingButtons[targetIndex];
1760
- if (nextButton) {
1761
- nextButton.focus();
1762
- }
1763
- } else {
1764
- const focusTarget = findFocusableElement(
1765
- [triggerRef.current, dropzoneRef.current],
1766
- inputRef
1767
- );
1768
- if (focusTarget) {
1769
- focusTarget.focus();
1770
- }
1771
- }
1772
- });
1773
- onClick?.(e);
1774
- };
1775
- const setRef = (node) => {
1776
- buttonRef.current = node;
1777
- if (node) {
1778
- while (deleteButtonRefs.current.length <= fileIndex) {
1779
- deleteButtonRefs.current.push(null);
1780
- }
1781
- deleteButtonRefs.current[fileIndex] = node;
1782
- } else {
1783
- if (deleteButtonRefs.current[fileIndex]) {
1784
- deleteButtonRefs.current[fileIndex] = null;
1785
- }
1786
- }
1787
- };
1788
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1789
- IconButton,
1790
- {
1791
- ref: setRef,
1792
- "data-spark-component": "file-upload-item-delete-trigger",
1793
- className: (0, import_class_variance_authority9.cx)(className),
1794
- onClick: handleClick,
1795
- disabled: disabled || readOnly,
1796
- size: "sm",
1797
- design: "contrast",
1798
- intent: "surface",
1799
- ...props,
1800
- children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Icon, { size: "sm", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_Close.Close, {}) })
1801
- }
1802
- );
1803
- };
1804
- ItemDeleteTrigger.displayName = "FileUpload.ItemDeleteTrigger";
1805
-
1806
- // src/file-upload/FileUploadAcceptedFile.tsx
1807
- var import_jsx_runtime13 = require("react/jsx-runtime");
1808
- var AcceptedFile = ({
1809
- className,
1810
- file,
1811
- uploadProgress,
1812
- deleteButtonAriaLabel,
1813
- progressAriaLabel,
1814
- ...props
1815
- }) => {
1816
- const { locale } = useFileUploadContext();
1817
- const [showProgress, setShowProgress] = (0, import_react11.useState)(uploadProgress !== void 0);
1818
- (0, import_react11.useEffect)(() => {
1819
- if (uploadProgress !== void 0) {
1820
- setShowProgress(true);
1821
- } else {
1822
- setShowProgress(false);
1823
- }
1824
- }, [uploadProgress]);
1825
- const handleProgressComplete = (0, import_react11.useCallback)(() => {
1826
- setShowProgress(false);
1827
- }, []);
1828
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
1829
- "li",
1830
- {
1831
- "data-spark-component": "file-upload-accepted-file",
1832
- className: (0, import_class_variance_authority10.cx)(
1833
- "relative",
1834
- "default:bg-surface default:border-sm default:border-outline default:p-md default:rounded-md",
1835
- "gap-md flex items-center justify-between default:w-full",
1836
- className
1837
- ),
1838
- ...props,
1839
- children: [
1840
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "size-sz-36 bg-support-container flex items-center justify-center rounded-md", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Icon, { size: "md", children: getFileIcon(file) }) }),
1841
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "gap-md relative flex min-w-0 flex-1 flex-row items-center justify-between self-stretch", children: [
1842
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { className: "text-body-2 truncate font-medium", children: file.name }),
1843
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { className: "text-caption opacity-dim-1", children: formatFileSize(file.size, locale) }),
1844
- showProgress && uploadProgress !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "absolute bottom-0 left-0 w-full", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1845
- Progress2,
1846
- {
1847
- value: uploadProgress,
1848
- max: 100,
1849
- "aria-label": progressAriaLabel,
1850
- onComplete: handleProgressComplete
1851
- }
1852
- ) })
1853
- ] }),
1854
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(ItemDeleteTrigger, { "aria-label": deleteButtonAriaLabel, file })
1855
- ]
1856
- }
1857
- );
1858
- };
1859
- AcceptedFile.displayName = "FileUpload.AcceptedFile";
1860
-
1861
- // src/file-upload/FileUploadContext.tsx
1862
- var import_jsx_runtime14 = require("react/jsx-runtime");
1863
- var Context = ({ children }) => {
1864
- const { files = [], rejectedFiles = [], locale } = useFileUploadContext();
1865
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_jsx_runtime14.Fragment, { children: children({
1866
- acceptedFiles: files,
1867
- rejectedFiles,
1868
- formatFileSize,
1869
- locale
1870
- }) });
1871
- };
1872
- Context.displayName = "FileUpload.Context";
1873
-
1874
- // src/file-upload/FileUploadDropzone.tsx
1875
- var import_class_variance_authority11 = require("class-variance-authority");
1876
- var import_react12 = require("react");
1877
- var import_jsx_runtime15 = require("react/jsx-runtime");
1878
- var DropzoneContext = (0, import_react12.createContext)(false);
1879
- var useDropzoneContext = () => (0, import_react12.useContext)(DropzoneContext);
1880
- function Dropzone({
1881
- children,
1882
- className,
1883
- unstyled = false
1884
- }) {
1885
- const ctx = useFileUploadContext();
1886
- const dropzoneRef = (0, import_react12.useRef)(null);
1887
- if (!ctx) throw new Error("FileUploadDropzone must be used inside <FileUpload>");
1888
- const handleDrop = (e) => {
1889
- e.preventDefault();
1890
- e.stopPropagation();
1891
- e.currentTarget.setAttribute("data-drag-over", "false");
1892
- if (ctx.disabled || ctx.readOnly) {
1893
- return;
1894
- }
1895
- const files = e.dataTransfer.files;
1896
- let filesArray = [];
1897
- if (files) {
1898
- filesArray = Array.isArray(files) ? [...files] : Array.from(files);
1899
- }
1900
- if (filesArray.length > 0) {
1901
- ctx.addFiles(filesArray);
1902
- }
1903
- };
1904
- const handleClick = () => {
1905
- if (!ctx.disabled && !ctx.readOnly) {
1906
- ctx.inputRef.current?.click();
1907
- }
1908
- };
1909
- const handleKeyDown = (e) => {
1910
- if (e.key === "Enter" || e.key === " ") {
1911
- e.preventDefault();
1912
- if (!ctx.disabled && !ctx.readOnly) {
1913
- ctx.inputRef.current?.click();
1914
- }
1915
- }
1916
- };
1917
- const isDisabled = ctx.disabled || ctx.readOnly;
1918
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(DropzoneContext.Provider, { value: true, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1919
- "div",
1920
- {
1921
- ref: (node) => {
1922
- dropzoneRef.current = node;
1923
- if (ctx.dropzoneRef) {
1924
- ctx.dropzoneRef.current = node;
1925
- }
1926
- },
1927
- role: "button",
1928
- tabIndex: isDisabled ? -1 : 0,
1929
- "aria-disabled": ctx.disabled ? true : void 0,
1930
- "aria-describedby": ctx.description,
1931
- "aria-invalid": ctx.isInvalid,
1932
- "aria-required": ctx.isRequired,
1933
- onClick: handleClick,
1934
- onKeyDown: handleKeyDown,
1935
- onDrop: handleDrop,
1936
- onDragOver: (e) => {
1937
- e.preventDefault();
1938
- },
1939
- className: unstyled ? className : (0, import_class_variance_authority11.cx)(
1940
- "default:bg-surface default:border-sm default:border-outline default:relative default:rounded-lg default:border-dashed",
1941
- "gap-lg flex flex-col items-center justify-center text-center",
1942
- "default:p-xl",
1943
- "transition-colors duration-200",
1944
- !isDisabled && "default:hover:bg-surface-hovered",
1945
- "data-[drag-over=true]:border-outline-high data-[drag-over=true]:bg-surface-hovered data-[drag-over=true]:border-solid",
1946
- // Disabled: more visually disabled (opacity + cursor)
1947
- ctx.disabled && "cursor-not-allowed opacity-50",
1948
- // ReadOnly: less visually disabled (just cursor, no opacity)
1949
- ctx.readOnly && !ctx.disabled && "cursor-default",
1950
- className
1951
- ),
1952
- onDragEnter: (e) => {
1953
- if (!isDisabled) {
1954
- e.currentTarget.setAttribute("data-drag-over", "true");
1955
- }
1956
- },
1957
- onDragLeave: (e) => {
1958
- e.currentTarget.setAttribute("data-drag-over", "false");
1959
- },
1960
- children
1961
- }
1962
- ) });
1963
- }
1964
- Dropzone.displayName = "FileUploadDropzone";
1965
-
1966
- // src/file-upload/FileUploadPreviewImage.tsx
1967
- var import_class_variance_authority12 = require("class-variance-authority");
1968
- var import_react13 = require("react");
1969
- var import_jsx_runtime16 = require("react/jsx-runtime");
1970
- var PreviewImage = ({
1971
- className,
1972
- file,
1973
- fallback = "\u{1F4C4}",
1974
- ...props
1975
- }) => {
1976
- const [imageError, setImageError] = (0, import_react13.useState)(false);
1977
- const [imageLoaded, setImageLoaded] = (0, import_react13.useState)(false);
1978
- const isImage = file.type.startsWith("image/");
1979
- const imageUrl = isImage ? URL.createObjectURL(file) : null;
1980
- (0, import_react13.useEffect)(() => {
1981
- return () => {
1982
- if (imageUrl) {
1983
- URL.revokeObjectURL(imageUrl);
1984
- }
1985
- };
1986
- }, [imageUrl]);
1987
- if (!isImage || imageError) {
1988
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1989
- "div",
1990
- {
1991
- "data-spark-component": "file-upload-preview-image",
1992
- className: (0, import_class_variance_authority12.cx)(
1993
- "bg-neutral-container flex items-center justify-center rounded-md",
1994
- className
1995
- ),
1996
- ...props,
1997
- children: fallback
1998
- }
1999
- );
2000
- }
2001
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
2002
- "div",
2003
- {
2004
- "data-spark-component": "file-upload-preview-image",
2005
- className: (0, import_class_variance_authority12.cx)("bg-neutral-container overflow-hidden", className),
2006
- ...props,
2007
- children: [
2008
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
2009
- "img",
2010
- {
2011
- src: imageUrl,
2012
- alt: file.name,
2013
- className: (0, import_class_variance_authority12.cx)("size-full object-cover", !imageLoaded && "opacity-0"),
2014
- onLoad: () => setImageLoaded(true),
2015
- onError: () => setImageError(true)
2016
- }
2017
- ),
2018
- !imageLoaded && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "absolute inset-0 flex items-center justify-center", children: fallback })
2019
- ]
2020
- }
2021
- );
2022
- };
2023
- PreviewImage.displayName = "FileUpload.PreviewImage";
2024
-
2025
- // src/file-upload/FileUploadRejectedFile.tsx
2026
- var import_WarningOutline = require("@spark-ui/icons/WarningOutline");
2027
- var import_class_variance_authority14 = require("class-variance-authority");
2028
-
2029
- // src/file-upload/FileUploadRejectedFileDeleteTrigger.tsx
2030
- var import_Close2 = require("@spark-ui/icons/Close");
2031
- var import_class_variance_authority13 = require("class-variance-authority");
2032
- var import_react14 = require("react");
2033
- var import_jsx_runtime17 = require("react/jsx-runtime");
2034
- var RejectedFileDeleteTrigger = ({
2035
- className,
2036
- rejectedFile,
2037
- onClick,
2038
- ...props
2039
- }) => {
2040
- const {
2041
- removeRejectedFile,
2042
- triggerRef,
2043
- dropzoneRef,
2044
- rejectedFileDeleteButtonRefs,
2045
- inputRef,
2046
- disabled,
2047
- readOnly,
2048
- rejectedFiles
2049
- } = useFileUploadContext();
2050
- const buttonRef = (0, import_react14.useRef)(null);
2051
- const rejectedFileIndex = rejectedFiles.findIndex(
2052
- (rf) => rf.file.name === rejectedFile.file.name && rf.file.size === rejectedFile.file.size
2053
- );
2054
- const handleClick = (e) => {
2055
- if (disabled || readOnly) {
2056
- return;
2057
- }
2058
- removeRejectedFile(rejectedFileIndex);
2059
- requestAnimationFrame(() => {
2060
- const remainingButtons = rejectedFileDeleteButtonRefs.current.filter(Boolean);
2061
- if (remainingButtons.length > 0) {
2062
- const targetIndex = Math.min(rejectedFileIndex, remainingButtons.length - 1);
2063
- const nextButton = remainingButtons[targetIndex];
2064
- if (nextButton) {
2065
- nextButton.focus();
2066
- }
2067
- } else {
2068
- const focusTarget = findFocusableElement(
2069
- [triggerRef.current, dropzoneRef.current],
2070
- inputRef
2071
- );
2072
- if (focusTarget) {
2073
- focusTarget.focus();
2074
- }
2075
- }
2076
- });
2077
- onClick?.(e);
2078
- };
2079
- const setRef = (node) => {
2080
- buttonRef.current = node;
2081
- if (node) {
2082
- while (rejectedFileDeleteButtonRefs.current.length <= rejectedFileIndex) {
2083
- rejectedFileDeleteButtonRefs.current.push(null);
2084
- }
2085
- rejectedFileDeleteButtonRefs.current[rejectedFileIndex] = node;
2086
- } else {
2087
- if (rejectedFileDeleteButtonRefs.current[rejectedFileIndex]) {
2088
- rejectedFileDeleteButtonRefs.current[rejectedFileIndex] = null;
2089
- }
2090
- }
2091
- };
2092
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
2093
- IconButton,
2094
- {
2095
- ref: setRef,
2096
- "data-spark-component": "file-upload-rejected-file-delete-trigger",
2097
- className: (0, import_class_variance_authority13.cx)(className),
2098
- onClick: handleClick,
2099
- disabled: disabled || readOnly,
2100
- size: "sm",
2101
- design: "contrast",
2102
- intent: "surface",
2103
- ...props,
2104
- children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Icon, { size: "sm", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_Close2.Close, {}) })
2105
- }
2106
- );
2107
- };
2108
- RejectedFileDeleteTrigger.displayName = "FileUpload.RejectedFileDeleteTrigger";
2109
-
2110
- // src/file-upload/FileUploadRejectedFile.tsx
2111
- var import_jsx_runtime18 = require("react/jsx-runtime");
2112
- var RejectedFile = ({
2113
- className,
2114
- rejectedFile,
2115
- renderError,
2116
- deleteButtonAriaLabel,
2117
- ...props
2118
- }) => {
2119
- const { locale } = useFileUploadContext();
2120
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
2121
- "li",
2122
- {
2123
- "data-spark-component": "file-upload-rejected-file",
2124
- className: (0, import_class_variance_authority14.cx)(
2125
- "relative",
2126
- "default:bg-surface default:border-sm default:border-outline default:p-md default:rounded-md",
2127
- "gap-md flex items-center justify-between default:w-full",
2128
- "border-error border-md",
2129
- className
2130
- ),
2131
- ...props,
2132
- children: [
2133
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "size-sz-36 bg-error-container flex items-center justify-center rounded-md", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Icon, { size: "md", className: "text-error", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_WarningOutline.WarningOutline, {}) }) }),
2134
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "min-w-0 flex-1", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "gap-md flex flex-col", children: [
2135
- /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "gap-md flex flex-row items-center justify-between", children: [
2136
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("p", { className: "text-body-2 truncate font-medium", children: rejectedFile.file.name }),
2137
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("p", { className: "text-caption opacity-dim-1", children: formatFileSize(rejectedFile.file.size, locale) })
2138
- ] }),
2139
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "gap-xs flex flex-col", children: rejectedFile.errors.map((error, errorIndex) => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "text-caption text-error", "data-error-code": error, children: renderError(error) }, errorIndex)) })
2140
- ] }) }),
2141
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(RejectedFileDeleteTrigger, { "aria-label": deleteButtonAriaLabel, rejectedFile })
2142
- ]
2143
- }
2144
- );
2145
- };
2146
- RejectedFile.displayName = "FileUpload.RejectedFile";
2147
-
2148
- // src/file-upload/FileUploadTrigger.tsx
2149
- var import_class_variance_authority15 = require("class-variance-authority");
2150
- var import_jsx_runtime19 = require("react/jsx-runtime");
2151
- var Trigger = ({
2152
- className,
2153
- children,
2154
- asChild = false,
2155
- unstyled = false,
2156
- design = "filled",
2157
- intent = "basic",
2158
- size = "md",
2159
- shape = "rounded",
2160
- ref,
2161
- ...props
2162
- }) => {
2163
- const { inputRef, triggerRef, disabled, readOnly, description, isInvalid, isRequired } = useFileUploadContext();
2164
- const isInsideDropzone = useDropzoneContext();
2165
- const handleClick = (e) => {
2166
- e.stopPropagation();
2167
- e.preventDefault();
2168
- if (!disabled && !readOnly) {
2169
- inputRef.current?.click();
2170
- }
2171
- };
2172
- const handleRef = (node) => {
2173
- if (triggerRef) {
2174
- triggerRef.current = node;
2175
- }
2176
- if (ref) {
2177
- if (typeof ref === "function") {
2178
- ref(node);
2179
- } else {
2180
- ref.current = node;
2181
- }
2182
- }
2183
- };
2184
- let Component;
2185
- let componentProps;
2186
- if (isInsideDropzone) {
2187
- Component = "span";
2188
- const spanStyles = unstyled ? className : buttonStyles({
2189
- design,
2190
- intent,
2191
- size,
2192
- shape,
2193
- disabled: disabled || readOnly,
2194
- className
2195
- });
2196
- componentProps = {
2197
- ref: handleRef,
2198
- "data-spark-component": "file-upload-trigger",
2199
- className: spanStyles
2200
- // No onClick, no role, no tabIndex - Dropzone handles interaction
2201
- // No aria attributes here - they're on the Dropzone
2202
- };
2203
- } else {
2204
- const buttonComponent = unstyled ? "button" : Button;
2205
- Component = asChild ? Slot : buttonComponent;
2206
- componentProps = {
2207
- ref: handleRef,
2208
- type: "button",
2209
- design,
2210
- intent,
2211
- size,
2212
- shape,
2213
- "data-spark-component": "file-upload-trigger",
2214
- className: (0, import_class_variance_authority15.cx)(className),
2215
- disabled: disabled || readOnly,
2216
- onClick: handleClick,
2217
- "aria-describedby": description,
2218
- "aria-invalid": isInvalid,
2219
- "aria-required": isRequired,
2220
- ...props
2221
- };
2222
- }
2223
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Component, { ...componentProps, children });
2224
- };
2225
- Trigger.displayName = "FileUpload.Trigger";
2226
-
2227
- // src/file-upload/index.ts
2228
- var FileUpload2 = Object.assign(FileUpload, {
2229
- // Main input components
2230
- Trigger,
2231
- Dropzone,
2232
- // Context components
2233
- Context,
2234
- AcceptedFile,
2235
- RejectedFile,
2236
- // Helpers for custom renders
2237
- PreviewImage,
2238
- ItemDeleteTrigger,
2239
- RejectedFileDeleteTrigger
2240
- });
2241
- FileUpload2.displayName = "FileUpload";
2242
- Trigger.displayName = "FileUpload.Trigger";
2243
- Dropzone.displayName = "FileUpload.Dropzone";
2244
- Context.displayName = "FileUpload.Context";
2245
- ItemDeleteTrigger.displayName = "FileUpload.ItemDeleteTrigger";
2246
- PreviewImage.displayName = "FileUpload.PreviewImage";
2247
- AcceptedFile.displayName = "FileUpload.AcceptedFile";
2248
- RejectedFile.displayName = "FileUpload.RejectedFile";
2249
- RejectedFileDeleteTrigger.displayName = "FileUpload.RejectedFileDeleteTrigger";
2250
- // Annotate the CommonJS export names for ESM import in node:
2251
- 0 && (module.exports = {
2252
- FILE_UPLOAD_ERRORS,
2253
- FileUpload
2254
- });
2255
- //# sourceMappingURL=index.js.map
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react/jsx-runtime"),me=require("@spark-ui/components/form-field"),f=require("react"),pe=require("@spark-ui/hooks/use-combined-state"),ge=require("@spark-ui/icons/CvOutline"),ve=require("@spark-ui/icons/FilePdfOutline"),xe=require("@spark-ui/icons/ImageOutline"),Fe=require("@spark-ui/icons/PlayOutline"),w=require("class-variance-authority"),H=require("../Icon-CF0W0LKr.js"),be=require("../progress/index.js"),se=require("@spark-ui/icons/Close"),ae=require("../IconButton-D3g86WpZ.js"),he=require("@spark-ui/icons/WarningOutline"),ne=require("../Button-B6rA3-e5.js"),ye=require("../Slot-DQ8z2zsy.js"),T={TOO_MANY_FILES:"TOO_MANY_FILES",FILE_INVALID_TYPE:"FILE_INVALID_TYPE",FILE_TOO_LARGE:"FILE_TOO_LARGE",FILE_TOO_SMALL:"FILE_TOO_SMALL",FILE_INVALID:"FILE_INVALID",FILE_EXISTS:"FILE_EXISTS"};function ie(t,r){return r?r.split(",").map(e=>e.trim()).some(e=>{if(e.includes("/")){if(e.endsWith("/*")){const c=e.slice(0,-2);return t.type.startsWith(c+"/")}return t.type===e}if(e.startsWith(".")){const c=e.toLowerCase();return t.name.toLowerCase().endsWith(c)}const l="."+e.toLowerCase();return t.name.toLowerCase().endsWith(l)}):!0}function Ie(t,r,n,e){const l=e||le();return r!==void 0&&t.size<r?{valid:!1,error:`File "${t.name}" is too small. Minimum size is ${B(r,l)}.`}:n!==void 0&&t.size>n?{valid:!1,error:`File "${t.name}" is too large. Maximum size is ${B(n,l)}.`}:{valid:!0}}function le(){return typeof navigator<"u"&&navigator.language?navigator.language:"en"}function B(t,r){const n=r||le();let e=n;if(n.length===2&&(e=n==="fr"?"fr-FR":"en-US"),t===0)return new Intl.NumberFormat(e,{style:"unit",unit:"byte",unitDisplay:"long",minimumFractionDigits:0,maximumFractionDigits:0}).format(0);const l=1024,d=Math.floor(Math.log(t)/Math.log(l)),a=["byte","kilobyte","megabyte","gigabyte"][d]||"byte",o=t/Math.pow(l,d),i=d===0?"long":"short";return new Intl.NumberFormat(e,{style:"unit",unit:a,unitDisplay:i,minimumFractionDigits:0,maximumFractionDigits:2}).format(o)}function je(t){const r=t.type.toLowerCase(),n=t.name.toLowerCase();return r.startsWith("image/")||/\.(jpg|jpeg|png|gif|bmp|webp|svg|ico)$/i.test(n)?f.createElement(xe.ImageOutline):r==="application/pdf"||n.endsWith(".pdf")?f.createElement(ve.FilePdfOutline):r.startsWith("video/")||/\.(mp4|avi|mov|wmv|flv|webm|mkv)$/i.test(n)?f.createElement(Fe.PlayOutline):f.createElement(ge.CvOutline)}function Re(t){if(!t)return!1;if(t.tabIndex>=0)return!0;const n=String(t.contentEditable)==="true";return t instanceof HTMLInputElement||t instanceof HTMLButtonElement||t instanceof HTMLSelectElement||t instanceof HTMLTextAreaElement||t instanceof HTMLAnchorElement&&!!t.href||n}function oe(t,r){for(const n of t)if(Re(n))return n;return r.current?r.current:null}function Le({defaultValue:t=[],value:r,onFileAccept:n,onFileReject:e,onFileChange:l,multiple:d=!0,accept:c,maxFiles:a,maxFileSize:o,minFileSize:i,disabled:p=!1,readOnly:v=!1,locale:E}){const m=E||(typeof navigator<"u"&&navigator.language?navigator.language:"en"),[N,g]=pe.useCombinedState(r,t),u=N??[],I=g,[b,x]=f.useState([]),U=O=>{if(p||v)return;x([]);const D=[],k=(R,L)=>L.some(y=>y.name===R.name&&y.size===R.size),h=(R,L)=>{const y=D.find(A=>A.file.name===R.name&&A.file.size===R.size);y?y.errors.includes(L)||y.errors.push(L):D.push({file:R,errors:[L]})};I(R=>{const L=R??[],y=a!==void 0?a-L.length:void 0;y!==void 0&&y<=0&&O.forEach(F=>{h(F,T.TOO_MANY_FILES)});let A=O;c&&(O.filter(_=>!ie(_,c)).forEach(_=>{h(_,T.FILE_INVALID_TYPE)}),A=O.filter(_=>ie(_,c)));let $=A;(i!==void 0||o!==void 0)&&($=A.filter(F=>Ie(F,i,o,m).valid?!0:(o!==void 0&&F.size>o?h(F,T.FILE_TOO_LARGE):i!==void 0&&F.size<i?h(F,T.FILE_TOO_SMALL):h(F,T.FILE_INVALID),!1)));const Y=new Map,P=$.filter(F=>{const _=`${F.name}-${F.size}`;return k(F,L)||Y.has(_)?(h(F,T.FILE_EXISTS),!1):(Y.set(_,F),!0)});let C=d?P:P.slice(0,1);y!==void 0&&(y<=0?C=[]:C.length>y&&(C.forEach(F=>{h(F,T.TOO_MANY_FILES)}),C=[]));const re=d?[...L,...C]:C,V=[...D];return x(V),C.length>0&&n&&n({files:C}),V.length>0&&e&&e({files:V}),l&&l({acceptedFiles:re,rejectedFiles:V}),re})},z=O=>{p||v||I(D=>{const h=(D??[]).filter((L,y)=>y!==O);let R=b;return a!==void 0&&h.length<a&&(R=b.filter(L=>!L.errors.includes(T.TOO_MANY_FILES)),x(R)),l&&l({acceptedFiles:h,rejectedFiles:R}),h})},j=()=>{p||v||(I([]),x([]),l&&l({acceptedFiles:[],rejectedFiles:[]}))},W=O=>{p||v||x(D=>D.filter((k,h)=>h!==O))},S=()=>{x([])},M=a!==void 0&&u.length>=a;return{files:u,rejectedFiles:b,addFiles:U,removeFile:z,removeRejectedFile:W,clearFiles:j,clearRejectedFiles:S,maxFilesReached:M}}const ce=f.createContext(null),Ee=":file-upload",de=({asChild:t=!1,children:r,defaultValue:n=[],value:e,onFileAccept:l,onFileReject:d,onFileChange:c,multiple:a=!0,accept:o,maxFiles:i,maxFileSize:p,minFileSize:v,disabled:E=!1,readOnly:m=!1,locale:N})=>{const g=me.useFormFieldControl(),u=f.useId(),I=g.id||`${Ee}-${u}`,b=g.name,x=f.useRef(null),U=f.useRef(null),z=f.useRef(null),j=f.useRef([]),W=f.useRef([]),S=g.disabled??E,M=g.readOnly??m,{files:O,rejectedFiles:D,addFiles:k,removeFile:h,removeRejectedFile:R,clearFiles:L,clearRejectedFiles:y,maxFilesReached:A}=Le({defaultValue:n,value:e,onFileAccept:l,onFileReject:d,onFileChange:c,multiple:a,accept:o,maxFiles:i,maxFileSize:p,minFileSize:v,disabled:S,readOnly:M,locale:N}),$=()=>{L(),j.current=[]},Y=()=>{y(),W.current=[]};return s.jsx(ce.Provider,{value:{inputRef:x,files:O,rejectedFiles:D,addFiles:k,removeFile:h,removeRejectedFile:R,clearFiles:$,clearRejectedFiles:Y,triggerRef:U,dropzoneRef:z,deleteButtonRefs:j,rejectedFileDeleteButtonRefs:W,multiple:a,maxFiles:i,maxFilesReached:A,disabled:S,readOnly:M,locale:N||(typeof navigator<"u"&&navigator.language?navigator.language:"en"),description:g.description,isInvalid:g.isInvalid,isRequired:g.isRequired},children:s.jsxs("div",{className:"relative",children:[r,s.jsx("input",{ref:x,type:"file",tabIndex:-1,id:I,multiple:a,name:b,accept:o,disabled:S,readOnly:M&&!S,required:g.isRequired,"aria-invalid":g.isInvalid,"aria-describedby":g.description,"aria-label":g.labelId?void 0:"Upload files",className:"sr-only",onChange:P=>{if(P.target.files&&!S&&!M){k(Array.from(P.target.files));try{P.target.value=""}catch{}}}})]})})};de.displayName="FileUpload";const q=()=>{const t=f.useContext(ce);if(!t)throw Error("useFileUploadContext must be used within a FileUpload provider");return t},X=({className:t,file:r,onClick:n,...e})=>{const{removeFile:l,triggerRef:d,dropzoneRef:c,deleteButtonRefs:a,inputRef:o,disabled:i,readOnly:p,files:v}=q(),E=f.useRef(null),m=v.findIndex(u=>u.name===r.name&&u.size===r.size),N=u=>{i||p||(l(m),requestAnimationFrame(()=>{const I=a.current.filter(Boolean);if(I.length>0){const b=Math.min(m,I.length-1),x=I[b];x&&x.focus()}else{const b=oe([d.current,c.current],o);b&&b.focus()}}),n?.(u))},g=u=>{if(E.current=u,u){for(;a.current.length<=m;)a.current.push(null);a.current[m]=u}else a.current[m]&&(a.current[m]=null)};return s.jsx(ae.IconButton,{ref:g,"data-spark-component":"file-upload-item-delete-trigger",className:w.cx(t),onClick:N,disabled:i||p,size:"sm",design:"contrast",intent:"surface",...e,children:s.jsx(H.Icon,{size:"sm",children:s.jsx(se.Close,{})})})};X.displayName="FileUpload.ItemDeleteTrigger";const K=({className:t,file:r,uploadProgress:n,deleteButtonAriaLabel:e,progressAriaLabel:l,...d})=>{const{locale:c}=q(),[a,o]=f.useState(n!==void 0);f.useEffect(()=>{o(n!==void 0)},[n]);const i=f.useCallback(()=>{o(!1)},[]);return s.jsxs("li",{"data-spark-component":"file-upload-accepted-file",className:w.cx("relative","default:bg-surface default:border-sm default:border-outline default:p-md default:rounded-md","gap-md flex items-center justify-between default:w-full",t),...d,children:[s.jsx("div",{className:"size-sz-36 bg-support-container flex items-center justify-center rounded-md",children:s.jsx(H.Icon,{size:"md",children:je(r)})}),s.jsxs("div",{className:"gap-md relative flex min-w-0 flex-1 flex-row items-center justify-between self-stretch",children:[s.jsx("p",{className:"text-body-2 truncate font-medium",children:r.name}),s.jsx("p",{className:"text-caption opacity-dim-1",children:B(r.size,c)}),a&&n!==void 0&&s.jsx("div",{className:"absolute bottom-0 left-0 w-full",children:s.jsx(be.Progress,{value:n,max:100,"aria-label":l,onComplete:i})})]}),s.jsx(X,{"aria-label":e,file:r})]})};K.displayName="FileUpload.AcceptedFile";const J=({children:t})=>{const{files:r=[],rejectedFiles:n=[],locale:e}=q();return s.jsx(s.Fragment,{children:t({acceptedFiles:r,rejectedFiles:n,formatFileSize:B,locale:e})})};J.displayName="FileUpload.Context";const ue=f.createContext(!1),Ne=()=>f.useContext(ue);function Q({children:t,className:r,unstyled:n=!1}){const e=q(),l=f.useRef(null);if(!e)throw new Error("FileUploadDropzone must be used inside <FileUpload>");const d=i=>{if(i.preventDefault(),i.stopPropagation(),i.currentTarget.setAttribute("data-drag-over","false"),e.disabled||e.readOnly)return;const p=i.dataTransfer.files;let v=[];p&&(v=Array.isArray(p)?[...p]:Array.from(p)),v.length>0&&e.addFiles(v)},c=()=>{!e.disabled&&!e.readOnly&&e.inputRef.current?.click()},a=i=>{(i.key==="Enter"||i.key===" ")&&(i.preventDefault(),!e.disabled&&!e.readOnly&&e.inputRef.current?.click())},o=e.disabled||e.readOnly;return s.jsx(ue.Provider,{value:!0,children:s.jsx("div",{ref:i=>{l.current=i,e.dropzoneRef&&(e.dropzoneRef.current=i)},role:"button",tabIndex:o?-1:0,"aria-disabled":e.disabled?!0:void 0,"aria-describedby":e.description,"aria-invalid":e.isInvalid,"aria-required":e.isRequired,onClick:c,onKeyDown:a,onDrop:d,onDragOver:i=>{i.preventDefault()},className:n?r:w.cx("default:bg-surface default:border-sm default:border-outline default:relative default:rounded-lg default:border-dashed","gap-lg flex flex-col items-center justify-center text-center","default:p-xl","transition-colors duration-200",!o&&"default:hover:bg-surface-hovered","data-[drag-over=true]:border-outline-high data-[drag-over=true]:bg-surface-hovered data-[drag-over=true]:border-solid",e.disabled&&"cursor-not-allowed opacity-50",e.readOnly&&!e.disabled&&"cursor-default",r),onDragEnter:i=>{o||i.currentTarget.setAttribute("data-drag-over","true")},onDragLeave:i=>{i.currentTarget.setAttribute("data-drag-over","false")},children:t})})}Q.displayName="FileUploadDropzone";const Z=({className:t,file:r,fallback:n="📄",...e})=>{const[l,d]=f.useState(!1),[c,a]=f.useState(!1),o=r.type.startsWith("image/"),i=o?URL.createObjectURL(r):null;return f.useEffect(()=>()=>{i&&URL.revokeObjectURL(i)},[i]),!o||l?s.jsx("div",{"data-spark-component":"file-upload-preview-image",className:w.cx("bg-neutral-container flex items-center justify-center rounded-md",t),...e,children:n}):s.jsxs("div",{"data-spark-component":"file-upload-preview-image",className:w.cx("bg-neutral-container overflow-hidden",t),...e,children:[s.jsx("img",{src:i,alt:r.name,className:w.cx("size-full object-cover",!c&&"opacity-0"),onLoad:()=>a(!0),onError:()=>d(!0)}),!c&&s.jsx("div",{className:"absolute inset-0 flex items-center justify-center",children:n})]})};Z.displayName="FileUpload.PreviewImage";const G=({className:t,rejectedFile:r,onClick:n,...e})=>{const{removeRejectedFile:l,triggerRef:d,dropzoneRef:c,rejectedFileDeleteButtonRefs:a,inputRef:o,disabled:i,readOnly:p,rejectedFiles:v}=q(),E=f.useRef(null),m=v.findIndex(u=>u.file.name===r.file.name&&u.file.size===r.file.size),N=u=>{i||p||(l(m),requestAnimationFrame(()=>{const I=a.current.filter(Boolean);if(I.length>0){const b=Math.min(m,I.length-1),x=I[b];x&&x.focus()}else{const b=oe([d.current,c.current],o);b&&b.focus()}}),n?.(u))},g=u=>{if(E.current=u,u){for(;a.current.length<=m;)a.current.push(null);a.current[m]=u}else a.current[m]&&(a.current[m]=null)};return s.jsx(ae.IconButton,{ref:g,"data-spark-component":"file-upload-rejected-file-delete-trigger",className:w.cx(t),onClick:N,disabled:i||p,size:"sm",design:"contrast",intent:"surface",...e,children:s.jsx(H.Icon,{size:"sm",children:s.jsx(se.Close,{})})})};G.displayName="FileUpload.RejectedFileDeleteTrigger";const ee=({className:t,rejectedFile:r,renderError:n,deleteButtonAriaLabel:e,...l})=>{const{locale:d}=q();return s.jsxs("li",{"data-spark-component":"file-upload-rejected-file",className:w.cx("relative","default:bg-surface default:border-sm default:border-outline default:p-md default:rounded-md","gap-md flex items-center justify-between default:w-full","border-error border-md",t),...l,children:[s.jsx("div",{className:"size-sz-36 bg-error-container flex items-center justify-center rounded-md",children:s.jsx(H.Icon,{size:"md",className:"text-error",children:s.jsx(he.WarningOutline,{})})}),s.jsx("div",{className:"min-w-0 flex-1",children:s.jsxs("div",{className:"gap-md flex flex-col",children:[s.jsxs("div",{className:"gap-md flex flex-row items-center justify-between",children:[s.jsx("p",{className:"text-body-2 truncate font-medium",children:r.file.name}),s.jsx("p",{className:"text-caption opacity-dim-1",children:B(r.file.size,d)})]}),s.jsx("div",{className:"gap-xs flex flex-col",children:r.errors.map((c,a)=>s.jsx("div",{className:"text-caption text-error","data-error-code":c,children:n(c)},a))})]})}),s.jsx(G,{"aria-label":e,rejectedFile:r})]})};ee.displayName="FileUpload.RejectedFile";const te=({className:t,children:r,asChild:n=!1,unstyled:e=!1,design:l="filled",intent:d="basic",size:c="md",shape:a="rounded",ref:o,...i})=>{const{inputRef:p,triggerRef:v,disabled:E,readOnly:m,description:N,isInvalid:g,isRequired:u}=q(),I=Ne(),b=j=>{j.stopPropagation(),j.preventDefault(),!E&&!m&&p.current?.click()},x=j=>{v&&(v.current=j),o&&(typeof o=="function"?o(j):o.current=j)};let U,z;if(I){U="span";const j=e?t:ne.buttonStyles({design:l,intent:d,size:c,shape:a,disabled:E||m,className:t});z={ref:x,"data-spark-component":"file-upload-trigger",className:j}}else{const j=e?"button":ne.Button;U=n?ye.Slot:j,z={ref:x,type:"button",design:l,intent:d,size:c,shape:a,"data-spark-component":"file-upload-trigger",className:w.cx(t),disabled:E||m,onClick:b,"aria-describedby":N,"aria-invalid":g,"aria-required":u,...i}}return s.jsx(U,{...z,children:r})};te.displayName="FileUpload.Trigger";const fe=Object.assign(de,{Trigger:te,Dropzone:Q,Context:J,AcceptedFile:K,RejectedFile:ee,PreviewImage:Z,ItemDeleteTrigger:X,RejectedFileDeleteTrigger:G});fe.displayName="FileUpload";te.displayName="FileUpload.Trigger";Q.displayName="FileUpload.Dropzone";J.displayName="FileUpload.Context";X.displayName="FileUpload.ItemDeleteTrigger";Z.displayName="FileUpload.PreviewImage";K.displayName="FileUpload.AcceptedFile";ee.displayName="FileUpload.RejectedFile";G.displayName="FileUpload.RejectedFileDeleteTrigger";exports.FILE_UPLOAD_ERRORS=T;exports.FileUpload=fe;
2
+ //# sourceMappingURL=index.js.map