@docyrus/shadcn 1.1.0 → 1.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 (766) hide show
  1. package/dist/base-lyra/accordion.js.map +1 -1
  2. package/dist/base-lyra/alert-dialog.js.map +1 -1
  3. package/dist/base-lyra/alert.js.map +1 -1
  4. package/dist/base-lyra/aspect-ratio.js.map +1 -1
  5. package/dist/base-lyra/avatar.js.map +1 -1
  6. package/dist/base-lyra/badge.js.map +1 -1
  7. package/dist/base-lyra/breadcrumb.js.map +1 -1
  8. package/dist/base-lyra/button-group.js.map +1 -1
  9. package/dist/base-lyra/button.js.map +1 -1
  10. package/dist/base-lyra/calendar.js.map +1 -1
  11. package/dist/base-lyra/card.js.map +1 -1
  12. package/dist/base-lyra/carousel.js.map +1 -1
  13. package/dist/base-lyra/chart.js.map +1 -1
  14. package/dist/base-lyra/checkbox.js.map +1 -1
  15. package/dist/base-lyra/combobox.js.map +1 -1
  16. package/dist/base-lyra/command.js.map +1 -1
  17. package/dist/base-lyra/context-menu.js.map +1 -1
  18. package/dist/base-lyra/dialog.js.map +1 -1
  19. package/dist/base-lyra/drawer.js.map +1 -1
  20. package/dist/base-lyra/dropdown-menu.js.map +1 -1
  21. package/dist/base-lyra/empty.js.map +1 -1
  22. package/dist/base-lyra/field.js.map +1 -1
  23. package/dist/base-lyra/hover-card.js.map +1 -1
  24. package/dist/base-lyra/index.js +8 -6
  25. package/dist/base-lyra/index.js.map +1 -1
  26. package/dist/base-lyra/input-group.js.map +1 -1
  27. package/dist/base-lyra/input-otp.js.map +1 -1
  28. package/dist/base-lyra/input.js.map +1 -1
  29. package/dist/base-lyra/item.js.map +1 -1
  30. package/dist/base-lyra/kbd.js.map +1 -1
  31. package/dist/base-lyra/label.js.map +1 -1
  32. package/dist/base-lyra/menubar.js.map +1 -1
  33. package/dist/base-lyra/native-select.js.map +1 -1
  34. package/dist/base-lyra/navigation-menu.js.map +1 -1
  35. package/dist/base-lyra/pagination.js.map +1 -1
  36. package/dist/base-lyra/popover.js.map +1 -1
  37. package/dist/base-lyra/progress.js.map +1 -1
  38. package/dist/base-lyra/radio-group.js.map +1 -1
  39. package/dist/base-lyra/resizable.js.map +1 -1
  40. package/dist/base-lyra/scroll-area.js.map +1 -1
  41. package/dist/base-lyra/select.js.map +1 -1
  42. package/dist/base-lyra/separator.js.map +1 -1
  43. package/dist/base-lyra/sheet.js.map +1 -1
  44. package/dist/base-lyra/sidebar.js +8 -6
  45. package/dist/base-lyra/sidebar.js.map +1 -1
  46. package/dist/base-lyra/skeleton.js.map +1 -1
  47. package/dist/base-lyra/slider.js.map +1 -1
  48. package/dist/base-lyra/spinner.js.map +1 -1
  49. package/dist/base-lyra/switch.js.map +1 -1
  50. package/dist/base-lyra/table.js.map +1 -1
  51. package/dist/base-lyra/tabs.js.map +1 -1
  52. package/dist/base-lyra/textarea.js.map +1 -1
  53. package/dist/base-lyra/toggle-group.js.map +1 -1
  54. package/dist/base-lyra/toggle.js.map +1 -1
  55. package/dist/base-lyra/tooltip.js.map +1 -1
  56. package/dist/base-maia/accordion.js.map +1 -1
  57. package/dist/base-maia/alert-dialog.js.map +1 -1
  58. package/dist/base-maia/alert.js.map +1 -1
  59. package/dist/base-maia/aspect-ratio.js.map +1 -1
  60. package/dist/base-maia/avatar.js.map +1 -1
  61. package/dist/base-maia/badge.js.map +1 -1
  62. package/dist/base-maia/breadcrumb.js.map +1 -1
  63. package/dist/base-maia/button-group.js.map +1 -1
  64. package/dist/base-maia/button.js.map +1 -1
  65. package/dist/base-maia/calendar.js.map +1 -1
  66. package/dist/base-maia/card.js.map +1 -1
  67. package/dist/base-maia/carousel.js.map +1 -1
  68. package/dist/base-maia/chart.js.map +1 -1
  69. package/dist/base-maia/checkbox.js.map +1 -1
  70. package/dist/base-maia/combobox.js.map +1 -1
  71. package/dist/base-maia/command.js.map +1 -1
  72. package/dist/base-maia/context-menu.js.map +1 -1
  73. package/dist/base-maia/dialog.js.map +1 -1
  74. package/dist/base-maia/drawer.js.map +1 -1
  75. package/dist/base-maia/dropdown-menu.js.map +1 -1
  76. package/dist/base-maia/empty.js.map +1 -1
  77. package/dist/base-maia/field.js.map +1 -1
  78. package/dist/base-maia/hover-card.js.map +1 -1
  79. package/dist/base-maia/index.js +8 -6
  80. package/dist/base-maia/index.js.map +1 -1
  81. package/dist/base-maia/input-group.js.map +1 -1
  82. package/dist/base-maia/input-otp.js.map +1 -1
  83. package/dist/base-maia/input.js.map +1 -1
  84. package/dist/base-maia/item.js.map +1 -1
  85. package/dist/base-maia/kbd.js.map +1 -1
  86. package/dist/base-maia/label.js.map +1 -1
  87. package/dist/base-maia/menubar.js.map +1 -1
  88. package/dist/base-maia/native-select.js.map +1 -1
  89. package/dist/base-maia/navigation-menu.js.map +1 -1
  90. package/dist/base-maia/pagination.js.map +1 -1
  91. package/dist/base-maia/popover.js.map +1 -1
  92. package/dist/base-maia/progress.js.map +1 -1
  93. package/dist/base-maia/radio-group.js.map +1 -1
  94. package/dist/base-maia/resizable.js.map +1 -1
  95. package/dist/base-maia/scroll-area.js.map +1 -1
  96. package/dist/base-maia/select.js.map +1 -1
  97. package/dist/base-maia/separator.js.map +1 -1
  98. package/dist/base-maia/sheet.js.map +1 -1
  99. package/dist/base-maia/sidebar.js +8 -6
  100. package/dist/base-maia/sidebar.js.map +1 -1
  101. package/dist/base-maia/skeleton.js.map +1 -1
  102. package/dist/base-maia/slider.js.map +1 -1
  103. package/dist/base-maia/spinner.js.map +1 -1
  104. package/dist/base-maia/switch.js.map +1 -1
  105. package/dist/base-maia/table.js.map +1 -1
  106. package/dist/base-maia/tabs.js.map +1 -1
  107. package/dist/base-maia/textarea.js.map +1 -1
  108. package/dist/base-maia/toggle-group.js.map +1 -1
  109. package/dist/base-maia/toggle.js.map +1 -1
  110. package/dist/base-maia/tooltip.js.map +1 -1
  111. package/dist/base-mira/accordion.js.map +1 -1
  112. package/dist/base-mira/alert-dialog.js.map +1 -1
  113. package/dist/base-mira/alert.js.map +1 -1
  114. package/dist/base-mira/aspect-ratio.js.map +1 -1
  115. package/dist/base-mira/avatar.js.map +1 -1
  116. package/dist/base-mira/badge.js.map +1 -1
  117. package/dist/base-mira/breadcrumb.js.map +1 -1
  118. package/dist/base-mira/button-group.js.map +1 -1
  119. package/dist/base-mira/button.js.map +1 -1
  120. package/dist/base-mira/calendar.js.map +1 -1
  121. package/dist/base-mira/card.js.map +1 -1
  122. package/dist/base-mira/carousel.js.map +1 -1
  123. package/dist/base-mira/chart.js.map +1 -1
  124. package/dist/base-mira/checkbox.js.map +1 -1
  125. package/dist/base-mira/combobox.js.map +1 -1
  126. package/dist/base-mira/command.js.map +1 -1
  127. package/dist/base-mira/context-menu.js.map +1 -1
  128. package/dist/base-mira/dialog.js.map +1 -1
  129. package/dist/base-mira/drawer.js.map +1 -1
  130. package/dist/base-mira/dropdown-menu.js.map +1 -1
  131. package/dist/base-mira/empty.js.map +1 -1
  132. package/dist/base-mira/field.js.map +1 -1
  133. package/dist/base-mira/hover-card.js.map +1 -1
  134. package/dist/base-mira/index.js +8 -6
  135. package/dist/base-mira/index.js.map +1 -1
  136. package/dist/base-mira/input-group.js.map +1 -1
  137. package/dist/base-mira/input-otp.js.map +1 -1
  138. package/dist/base-mira/input.js.map +1 -1
  139. package/dist/base-mira/item.js.map +1 -1
  140. package/dist/base-mira/kbd.js.map +1 -1
  141. package/dist/base-mira/label.js.map +1 -1
  142. package/dist/base-mira/menubar.js.map +1 -1
  143. package/dist/base-mira/native-select.js.map +1 -1
  144. package/dist/base-mira/navigation-menu.js.map +1 -1
  145. package/dist/base-mira/pagination.js.map +1 -1
  146. package/dist/base-mira/popover.js.map +1 -1
  147. package/dist/base-mira/progress.js.map +1 -1
  148. package/dist/base-mira/radio-group.js.map +1 -1
  149. package/dist/base-mira/resizable.js.map +1 -1
  150. package/dist/base-mira/scroll-area.js.map +1 -1
  151. package/dist/base-mira/select.js.map +1 -1
  152. package/dist/base-mira/separator.js.map +1 -1
  153. package/dist/base-mira/sheet.js.map +1 -1
  154. package/dist/base-mira/sidebar.js +8 -6
  155. package/dist/base-mira/sidebar.js.map +1 -1
  156. package/dist/base-mira/skeleton.js.map +1 -1
  157. package/dist/base-mira/slider.js.map +1 -1
  158. package/dist/base-mira/spinner.js.map +1 -1
  159. package/dist/base-mira/switch.js.map +1 -1
  160. package/dist/base-mira/table.js.map +1 -1
  161. package/dist/base-mira/tabs.js.map +1 -1
  162. package/dist/base-mira/textarea.js.map +1 -1
  163. package/dist/base-mira/toggle-group.js.map +1 -1
  164. package/dist/base-mira/toggle.js.map +1 -1
  165. package/dist/base-mira/tooltip.js.map +1 -1
  166. package/dist/base-nova/accordion.js.map +1 -1
  167. package/dist/base-nova/alert-dialog.js.map +1 -1
  168. package/dist/base-nova/alert.js.map +1 -1
  169. package/dist/base-nova/aspect-ratio.js.map +1 -1
  170. package/dist/base-nova/avatar.js.map +1 -1
  171. package/dist/base-nova/badge.js.map +1 -1
  172. package/dist/base-nova/breadcrumb.js.map +1 -1
  173. package/dist/base-nova/button-group.js.map +1 -1
  174. package/dist/base-nova/button.js.map +1 -1
  175. package/dist/base-nova/calendar.js.map +1 -1
  176. package/dist/base-nova/card.js.map +1 -1
  177. package/dist/base-nova/carousel.js.map +1 -1
  178. package/dist/base-nova/chart.js.map +1 -1
  179. package/dist/base-nova/checkbox.js.map +1 -1
  180. package/dist/base-nova/combobox.js.map +1 -1
  181. package/dist/base-nova/command.js.map +1 -1
  182. package/dist/base-nova/context-menu.js.map +1 -1
  183. package/dist/base-nova/dialog.js.map +1 -1
  184. package/dist/base-nova/drawer.js.map +1 -1
  185. package/dist/base-nova/dropdown-menu.js.map +1 -1
  186. package/dist/base-nova/empty.js.map +1 -1
  187. package/dist/base-nova/field.js.map +1 -1
  188. package/dist/base-nova/hover-card.js.map +1 -1
  189. package/dist/base-nova/index.js +8 -6
  190. package/dist/base-nova/index.js.map +1 -1
  191. package/dist/base-nova/input-group.js.map +1 -1
  192. package/dist/base-nova/input-otp.js.map +1 -1
  193. package/dist/base-nova/input.js.map +1 -1
  194. package/dist/base-nova/item.js.map +1 -1
  195. package/dist/base-nova/kbd.js.map +1 -1
  196. package/dist/base-nova/label.js.map +1 -1
  197. package/dist/base-nova/menubar.js.map +1 -1
  198. package/dist/base-nova/native-select.js.map +1 -1
  199. package/dist/base-nova/navigation-menu.js.map +1 -1
  200. package/dist/base-nova/pagination.js.map +1 -1
  201. package/dist/base-nova/popover.js.map +1 -1
  202. package/dist/base-nova/progress.js.map +1 -1
  203. package/dist/base-nova/radio-group.js.map +1 -1
  204. package/dist/base-nova/resizable.js.map +1 -1
  205. package/dist/base-nova/scroll-area.js.map +1 -1
  206. package/dist/base-nova/select.js.map +1 -1
  207. package/dist/base-nova/separator.js.map +1 -1
  208. package/dist/base-nova/sheet.js.map +1 -1
  209. package/dist/base-nova/sidebar.js +8 -6
  210. package/dist/base-nova/sidebar.js.map +1 -1
  211. package/dist/base-nova/skeleton.js.map +1 -1
  212. package/dist/base-nova/slider.js.map +1 -1
  213. package/dist/base-nova/spinner.js.map +1 -1
  214. package/dist/base-nova/switch.js.map +1 -1
  215. package/dist/base-nova/table.js.map +1 -1
  216. package/dist/base-nova/tabs.js.map +1 -1
  217. package/dist/base-nova/textarea.js.map +1 -1
  218. package/dist/base-nova/toggle-group.js.map +1 -1
  219. package/dist/base-nova/toggle.js.map +1 -1
  220. package/dist/base-nova/tooltip.js.map +1 -1
  221. package/dist/base-vega/accordion.js.map +1 -1
  222. package/dist/base-vega/alert-dialog.js.map +1 -1
  223. package/dist/base-vega/alert.js.map +1 -1
  224. package/dist/base-vega/aspect-ratio.js.map +1 -1
  225. package/dist/base-vega/avatar.js.map +1 -1
  226. package/dist/base-vega/badge.js.map +1 -1
  227. package/dist/base-vega/breadcrumb.js.map +1 -1
  228. package/dist/base-vega/button-group.js.map +1 -1
  229. package/dist/base-vega/button.js.map +1 -1
  230. package/dist/base-vega/calendar.js.map +1 -1
  231. package/dist/base-vega/card.js.map +1 -1
  232. package/dist/base-vega/carousel.js.map +1 -1
  233. package/dist/base-vega/chart.js.map +1 -1
  234. package/dist/base-vega/checkbox.js.map +1 -1
  235. package/dist/base-vega/combobox.js.map +1 -1
  236. package/dist/base-vega/command.js.map +1 -1
  237. package/dist/base-vega/context-menu.js.map +1 -1
  238. package/dist/base-vega/dialog.js.map +1 -1
  239. package/dist/base-vega/drawer.js.map +1 -1
  240. package/dist/base-vega/dropdown-menu.js.map +1 -1
  241. package/dist/base-vega/empty.js.map +1 -1
  242. package/dist/base-vega/field.js.map +1 -1
  243. package/dist/base-vega/hover-card.js.map +1 -1
  244. package/dist/base-vega/index.js +8 -6
  245. package/dist/base-vega/index.js.map +1 -1
  246. package/dist/base-vega/input-group.js.map +1 -1
  247. package/dist/base-vega/input-otp.js.map +1 -1
  248. package/dist/base-vega/input.js.map +1 -1
  249. package/dist/base-vega/item.js.map +1 -1
  250. package/dist/base-vega/kbd.js.map +1 -1
  251. package/dist/base-vega/label.js.map +1 -1
  252. package/dist/base-vega/menubar.js.map +1 -1
  253. package/dist/base-vega/native-select.js.map +1 -1
  254. package/dist/base-vega/navigation-menu.js.map +1 -1
  255. package/dist/base-vega/pagination.js.map +1 -1
  256. package/dist/base-vega/popover.js.map +1 -1
  257. package/dist/base-vega/progress.js.map +1 -1
  258. package/dist/base-vega/radio-group.js.map +1 -1
  259. package/dist/base-vega/resizable.js.map +1 -1
  260. package/dist/base-vega/scroll-area.js.map +1 -1
  261. package/dist/base-vega/select.js.map +1 -1
  262. package/dist/base-vega/separator.js.map +1 -1
  263. package/dist/base-vega/sheet.js.map +1 -1
  264. package/dist/base-vega/sidebar.js +8 -6
  265. package/dist/base-vega/sidebar.js.map +1 -1
  266. package/dist/base-vega/skeleton.js.map +1 -1
  267. package/dist/base-vega/slider.js.map +1 -1
  268. package/dist/base-vega/spinner.js.map +1 -1
  269. package/dist/base-vega/switch.js.map +1 -1
  270. package/dist/base-vega/table.js.map +1 -1
  271. package/dist/base-vega/tabs.js.map +1 -1
  272. package/dist/base-vega/textarea.js.map +1 -1
  273. package/dist/base-vega/toggle-group.js.map +1 -1
  274. package/dist/base-vega/toggle.js.map +1 -1
  275. package/dist/base-vega/tooltip.js.map +1 -1
  276. package/dist/hooks/index.d.ts +7 -0
  277. package/dist/hooks/index.js +181 -10
  278. package/dist/hooks/index.js.map +1 -1
  279. package/dist/hooks/use-as-ref.d.ts +5 -0
  280. package/dist/hooks/use-as-ref.js +17 -0
  281. package/dist/hooks/use-as-ref.js.map +1 -0
  282. package/dist/hooks/use-badge-overflow.d.ts +24 -0
  283. package/dist/hooks/use-badge-overflow.js +130 -0
  284. package/dist/hooks/use-badge-overflow.js.map +1 -0
  285. package/dist/hooks/use-callback-ref.d.ts +10 -0
  286. package/dist/hooks/use-callback-ref.js +17 -0
  287. package/dist/hooks/use-callback-ref.js.map +1 -0
  288. package/dist/hooks/use-debounced-callback.d.ts +3 -0
  289. package/dist/hooks/use-debounced-callback.js +38 -0
  290. package/dist/hooks/use-debounced-callback.js.map +1 -0
  291. package/dist/hooks/use-file-upload.d.ts +48 -0
  292. package/dist/hooks/use-file-upload.js +279 -0
  293. package/dist/hooks/use-file-upload.js.map +1 -0
  294. package/dist/hooks/use-isomorphic-layout-effect.d.ts +5 -0
  295. package/dist/hooks/use-isomorphic-layout-effect.js +8 -0
  296. package/dist/hooks/use-isomorphic-layout-effect.js.map +1 -0
  297. package/dist/hooks/use-lazy-ref.d.ts +5 -0
  298. package/dist/hooks/use-lazy-ref.js +14 -0
  299. package/dist/hooks/use-lazy-ref.js.map +1 -0
  300. package/dist/hooks/use-mobile.d.ts +1 -1
  301. package/dist/hooks/use-mobile.js +8 -6
  302. package/dist/hooks/use-mobile.js.map +1 -1
  303. package/dist/index.d.ts +1561 -57
  304. package/dist/index.js +23035 -2534
  305. package/dist/index.js.map +1 -1
  306. package/dist/lib/compose-refs.d.ts +15 -0
  307. package/dist/lib/compose-refs.js +42 -0
  308. package/dist/lib/compose-refs.js.map +1 -0
  309. package/dist/lib/format.d.ts +3 -0
  310. package/dist/lib/format.js +18 -0
  311. package/dist/lib/format.js.map +1 -0
  312. package/dist/lib/index.d.ts +3 -0
  313. package/dist/lib/index.js +53 -2
  314. package/dist/lib/index.js.map +1 -1
  315. package/dist/lib/utils.d.ts +6 -0
  316. package/dist/lib/utils.js.map +1 -1
  317. package/dist/new-york/accordion.js.map +1 -1
  318. package/dist/new-york/alert-dialog.js.map +1 -1
  319. package/dist/new-york/alert.js.map +1 -1
  320. package/dist/new-york/avatar.js.map +1 -1
  321. package/dist/new-york/badge.js.map +1 -1
  322. package/dist/new-york/breadcrumb.js.map +1 -1
  323. package/dist/new-york/button-group.js.map +1 -1
  324. package/dist/new-york/button.js.map +1 -1
  325. package/dist/new-york/calendar.js.map +1 -1
  326. package/dist/new-york/card.js.map +1 -1
  327. package/dist/new-york/carousel.js.map +1 -1
  328. package/dist/new-york/chart.js.map +1 -1
  329. package/dist/new-york/checkbox.js.map +1 -1
  330. package/dist/new-york/combobox.js.map +1 -1
  331. package/dist/new-york/command.js.map +1 -1
  332. package/dist/new-york/context-menu.js.map +1 -1
  333. package/dist/new-york/dialog.js.map +1 -1
  334. package/dist/new-york/drawer.js.map +1 -1
  335. package/dist/new-york/dropdown-menu.js.map +1 -1
  336. package/dist/new-york/empty.js.map +1 -1
  337. package/dist/new-york/field.js.map +1 -1
  338. package/dist/new-york/form.js.map +1 -1
  339. package/dist/new-york/hover-card.js.map +1 -1
  340. package/dist/new-york/index.js +8 -6
  341. package/dist/new-york/index.js.map +1 -1
  342. package/dist/new-york/input-group.js.map +1 -1
  343. package/dist/new-york/input-otp.js.map +1 -1
  344. package/dist/new-york/input.js.map +1 -1
  345. package/dist/new-york/item.js.map +1 -1
  346. package/dist/new-york/kbd.js.map +1 -1
  347. package/dist/new-york/label.js.map +1 -1
  348. package/dist/new-york/menubar.js.map +1 -1
  349. package/dist/new-york/native-select.js.map +1 -1
  350. package/dist/new-york/navigation-menu.js.map +1 -1
  351. package/dist/new-york/pagination.js.map +1 -1
  352. package/dist/new-york/popover.js.map +1 -1
  353. package/dist/new-york/progress.js.map +1 -1
  354. package/dist/new-york/radio-group.js.map +1 -1
  355. package/dist/new-york/resizable.js.map +1 -1
  356. package/dist/new-york/scroll-area.js.map +1 -1
  357. package/dist/new-york/select.js.map +1 -1
  358. package/dist/new-york/separator.js.map +1 -1
  359. package/dist/new-york/sheet.js.map +1 -1
  360. package/dist/new-york/sidebar.js +8 -6
  361. package/dist/new-york/sidebar.js.map +1 -1
  362. package/dist/new-york/skeleton.js.map +1 -1
  363. package/dist/new-york/slider.js.map +1 -1
  364. package/dist/new-york/spinner.js.map +1 -1
  365. package/dist/new-york/switch.js.map +1 -1
  366. package/dist/new-york/table.js.map +1 -1
  367. package/dist/new-york/tabs.js.map +1 -1
  368. package/dist/new-york/textarea.js.map +1 -1
  369. package/dist/new-york/toggle-group.js.map +1 -1
  370. package/dist/new-york/toggle.js.map +1 -1
  371. package/dist/new-york/tooltip.js.map +1 -1
  372. package/dist/radix-lyra/accordion.js.map +1 -1
  373. package/dist/radix-lyra/alert-dialog.js.map +1 -1
  374. package/dist/radix-lyra/alert.js.map +1 -1
  375. package/dist/radix-lyra/avatar.js.map +1 -1
  376. package/dist/radix-lyra/badge.js.map +1 -1
  377. package/dist/radix-lyra/breadcrumb.js.map +1 -1
  378. package/dist/radix-lyra/button-group.js.map +1 -1
  379. package/dist/radix-lyra/button.js.map +1 -1
  380. package/dist/radix-lyra/calendar.js.map +1 -1
  381. package/dist/radix-lyra/card.js.map +1 -1
  382. package/dist/radix-lyra/carousel.js.map +1 -1
  383. package/dist/radix-lyra/chart.js.map +1 -1
  384. package/dist/radix-lyra/checkbox.js.map +1 -1
  385. package/dist/radix-lyra/combobox.js.map +1 -1
  386. package/dist/radix-lyra/command.js.map +1 -1
  387. package/dist/radix-lyra/context-menu.js.map +1 -1
  388. package/dist/radix-lyra/dialog.js.map +1 -1
  389. package/dist/radix-lyra/drawer.js.map +1 -1
  390. package/dist/radix-lyra/dropdown-menu.js.map +1 -1
  391. package/dist/radix-lyra/empty.js.map +1 -1
  392. package/dist/radix-lyra/field.js.map +1 -1
  393. package/dist/radix-lyra/hover-card.js.map +1 -1
  394. package/dist/radix-lyra/index.js +8 -6
  395. package/dist/radix-lyra/index.js.map +1 -1
  396. package/dist/radix-lyra/input-group.js.map +1 -1
  397. package/dist/radix-lyra/input-otp.js.map +1 -1
  398. package/dist/radix-lyra/input.js.map +1 -1
  399. package/dist/radix-lyra/item.js.map +1 -1
  400. package/dist/radix-lyra/kbd.js.map +1 -1
  401. package/dist/radix-lyra/label.js.map +1 -1
  402. package/dist/radix-lyra/menubar.js.map +1 -1
  403. package/dist/radix-lyra/native-select.js.map +1 -1
  404. package/dist/radix-lyra/navigation-menu.js.map +1 -1
  405. package/dist/radix-lyra/pagination.js.map +1 -1
  406. package/dist/radix-lyra/popover.js.map +1 -1
  407. package/dist/radix-lyra/progress.js.map +1 -1
  408. package/dist/radix-lyra/radio-group.js.map +1 -1
  409. package/dist/radix-lyra/resizable.js.map +1 -1
  410. package/dist/radix-lyra/scroll-area.js.map +1 -1
  411. package/dist/radix-lyra/select.js.map +1 -1
  412. package/dist/radix-lyra/separator.js.map +1 -1
  413. package/dist/radix-lyra/sheet.js.map +1 -1
  414. package/dist/radix-lyra/sidebar.js +8 -6
  415. package/dist/radix-lyra/sidebar.js.map +1 -1
  416. package/dist/radix-lyra/skeleton.js.map +1 -1
  417. package/dist/radix-lyra/slider.js.map +1 -1
  418. package/dist/radix-lyra/spinner.js.map +1 -1
  419. package/dist/radix-lyra/switch.js.map +1 -1
  420. package/dist/radix-lyra/table.js.map +1 -1
  421. package/dist/radix-lyra/tabs.js.map +1 -1
  422. package/dist/radix-lyra/textarea.js.map +1 -1
  423. package/dist/radix-lyra/toggle-group.js.map +1 -1
  424. package/dist/radix-lyra/toggle.js.map +1 -1
  425. package/dist/radix-lyra/tooltip.js.map +1 -1
  426. package/dist/radix-maia/accordion.js.map +1 -1
  427. package/dist/radix-maia/alert-dialog.js.map +1 -1
  428. package/dist/radix-maia/alert.js.map +1 -1
  429. package/dist/radix-maia/avatar.js.map +1 -1
  430. package/dist/radix-maia/badge.js.map +1 -1
  431. package/dist/radix-maia/breadcrumb.js.map +1 -1
  432. package/dist/radix-maia/button-group.js.map +1 -1
  433. package/dist/radix-maia/button.js.map +1 -1
  434. package/dist/radix-maia/calendar.js.map +1 -1
  435. package/dist/radix-maia/card.js.map +1 -1
  436. package/dist/radix-maia/carousel.js.map +1 -1
  437. package/dist/radix-maia/chart.js.map +1 -1
  438. package/dist/radix-maia/checkbox.js.map +1 -1
  439. package/dist/radix-maia/combobox.js.map +1 -1
  440. package/dist/radix-maia/command.js.map +1 -1
  441. package/dist/radix-maia/context-menu.js.map +1 -1
  442. package/dist/radix-maia/dialog.js.map +1 -1
  443. package/dist/radix-maia/drawer.js.map +1 -1
  444. package/dist/radix-maia/dropdown-menu.js.map +1 -1
  445. package/dist/radix-maia/empty.js.map +1 -1
  446. package/dist/radix-maia/field.js.map +1 -1
  447. package/dist/radix-maia/hover-card.js.map +1 -1
  448. package/dist/radix-maia/index.js +8 -6
  449. package/dist/radix-maia/index.js.map +1 -1
  450. package/dist/radix-maia/input-group.js.map +1 -1
  451. package/dist/radix-maia/input-otp.js.map +1 -1
  452. package/dist/radix-maia/input.js.map +1 -1
  453. package/dist/radix-maia/item.js.map +1 -1
  454. package/dist/radix-maia/kbd.js.map +1 -1
  455. package/dist/radix-maia/label.js.map +1 -1
  456. package/dist/radix-maia/menubar.js.map +1 -1
  457. package/dist/radix-maia/native-select.js.map +1 -1
  458. package/dist/radix-maia/navigation-menu.js.map +1 -1
  459. package/dist/radix-maia/pagination.js.map +1 -1
  460. package/dist/radix-maia/popover.js.map +1 -1
  461. package/dist/radix-maia/progress.js.map +1 -1
  462. package/dist/radix-maia/radio-group.js.map +1 -1
  463. package/dist/radix-maia/resizable.js.map +1 -1
  464. package/dist/radix-maia/scroll-area.js.map +1 -1
  465. package/dist/radix-maia/select.js.map +1 -1
  466. package/dist/radix-maia/separator.js.map +1 -1
  467. package/dist/radix-maia/sheet.js.map +1 -1
  468. package/dist/radix-maia/sidebar.js +8 -6
  469. package/dist/radix-maia/sidebar.js.map +1 -1
  470. package/dist/radix-maia/skeleton.js.map +1 -1
  471. package/dist/radix-maia/slider.js.map +1 -1
  472. package/dist/radix-maia/spinner.js.map +1 -1
  473. package/dist/radix-maia/switch.js.map +1 -1
  474. package/dist/radix-maia/table.js.map +1 -1
  475. package/dist/radix-maia/tabs.js.map +1 -1
  476. package/dist/radix-maia/textarea.js.map +1 -1
  477. package/dist/radix-maia/toggle-group.js.map +1 -1
  478. package/dist/radix-maia/toggle.js.map +1 -1
  479. package/dist/radix-maia/tooltip.js.map +1 -1
  480. package/dist/radix-mira/accordion.js.map +1 -1
  481. package/dist/radix-mira/alert-dialog.js.map +1 -1
  482. package/dist/radix-mira/alert.js.map +1 -1
  483. package/dist/radix-mira/avatar.js.map +1 -1
  484. package/dist/radix-mira/badge.js.map +1 -1
  485. package/dist/radix-mira/breadcrumb.js.map +1 -1
  486. package/dist/radix-mira/button-group.js.map +1 -1
  487. package/dist/radix-mira/button.js.map +1 -1
  488. package/dist/radix-mira/calendar.js.map +1 -1
  489. package/dist/radix-mira/card.js.map +1 -1
  490. package/dist/radix-mira/carousel.js.map +1 -1
  491. package/dist/radix-mira/chart.js.map +1 -1
  492. package/dist/radix-mira/checkbox.js.map +1 -1
  493. package/dist/radix-mira/combobox.js.map +1 -1
  494. package/dist/radix-mira/command.js.map +1 -1
  495. package/dist/radix-mira/context-menu.js.map +1 -1
  496. package/dist/radix-mira/dialog.js.map +1 -1
  497. package/dist/radix-mira/drawer.js.map +1 -1
  498. package/dist/radix-mira/dropdown-menu.js.map +1 -1
  499. package/dist/radix-mira/empty.js.map +1 -1
  500. package/dist/radix-mira/field.js.map +1 -1
  501. package/dist/radix-mira/hover-card.js.map +1 -1
  502. package/dist/radix-mira/index.js +8 -6
  503. package/dist/radix-mira/index.js.map +1 -1
  504. package/dist/radix-mira/input-group.js.map +1 -1
  505. package/dist/radix-mira/input-otp.js.map +1 -1
  506. package/dist/radix-mira/input.js.map +1 -1
  507. package/dist/radix-mira/item.js.map +1 -1
  508. package/dist/radix-mira/kbd.js.map +1 -1
  509. package/dist/radix-mira/label.js.map +1 -1
  510. package/dist/radix-mira/menubar.js.map +1 -1
  511. package/dist/radix-mira/native-select.js.map +1 -1
  512. package/dist/radix-mira/navigation-menu.js.map +1 -1
  513. package/dist/radix-mira/pagination.js.map +1 -1
  514. package/dist/radix-mira/popover.js.map +1 -1
  515. package/dist/radix-mira/progress.js.map +1 -1
  516. package/dist/radix-mira/radio-group.js.map +1 -1
  517. package/dist/radix-mira/resizable.js.map +1 -1
  518. package/dist/radix-mira/scroll-area.js.map +1 -1
  519. package/dist/radix-mira/select.js.map +1 -1
  520. package/dist/radix-mira/separator.js.map +1 -1
  521. package/dist/radix-mira/sheet.js.map +1 -1
  522. package/dist/radix-mira/sidebar.js +8 -6
  523. package/dist/radix-mira/sidebar.js.map +1 -1
  524. package/dist/radix-mira/skeleton.js.map +1 -1
  525. package/dist/radix-mira/slider.js.map +1 -1
  526. package/dist/radix-mira/spinner.js.map +1 -1
  527. package/dist/radix-mira/switch.js.map +1 -1
  528. package/dist/radix-mira/table.js.map +1 -1
  529. package/dist/radix-mira/tabs.js.map +1 -1
  530. package/dist/radix-mira/textarea.js.map +1 -1
  531. package/dist/radix-mira/toggle-group.js.map +1 -1
  532. package/dist/radix-mira/toggle.js.map +1 -1
  533. package/dist/radix-mira/tooltip.js.map +1 -1
  534. package/dist/radix-nova/accordion.js.map +1 -1
  535. package/dist/radix-nova/alert-dialog.js.map +1 -1
  536. package/dist/radix-nova/alert.js.map +1 -1
  537. package/dist/radix-nova/avatar.js.map +1 -1
  538. package/dist/radix-nova/badge.js.map +1 -1
  539. package/dist/radix-nova/breadcrumb.js.map +1 -1
  540. package/dist/radix-nova/button-group.js.map +1 -1
  541. package/dist/radix-nova/button.js.map +1 -1
  542. package/dist/radix-nova/calendar.js.map +1 -1
  543. package/dist/radix-nova/card.js.map +1 -1
  544. package/dist/radix-nova/carousel.js.map +1 -1
  545. package/dist/radix-nova/chart.js.map +1 -1
  546. package/dist/radix-nova/checkbox.js.map +1 -1
  547. package/dist/radix-nova/combobox.js.map +1 -1
  548. package/dist/radix-nova/command.js.map +1 -1
  549. package/dist/radix-nova/context-menu.js.map +1 -1
  550. package/dist/radix-nova/dialog.js.map +1 -1
  551. package/dist/radix-nova/drawer.js.map +1 -1
  552. package/dist/radix-nova/dropdown-menu.js.map +1 -1
  553. package/dist/radix-nova/empty.js.map +1 -1
  554. package/dist/radix-nova/field.js.map +1 -1
  555. package/dist/radix-nova/hover-card.js.map +1 -1
  556. package/dist/radix-nova/index.js +8 -6
  557. package/dist/radix-nova/index.js.map +1 -1
  558. package/dist/radix-nova/input-group.js.map +1 -1
  559. package/dist/radix-nova/input-otp.js.map +1 -1
  560. package/dist/radix-nova/input.js.map +1 -1
  561. package/dist/radix-nova/item.js.map +1 -1
  562. package/dist/radix-nova/kbd.js.map +1 -1
  563. package/dist/radix-nova/label.js.map +1 -1
  564. package/dist/radix-nova/menubar.js.map +1 -1
  565. package/dist/radix-nova/native-select.js.map +1 -1
  566. package/dist/radix-nova/navigation-menu.js.map +1 -1
  567. package/dist/radix-nova/pagination.js.map +1 -1
  568. package/dist/radix-nova/popover.js.map +1 -1
  569. package/dist/radix-nova/progress.js.map +1 -1
  570. package/dist/radix-nova/radio-group.js.map +1 -1
  571. package/dist/radix-nova/resizable.js.map +1 -1
  572. package/dist/radix-nova/scroll-area.js.map +1 -1
  573. package/dist/radix-nova/select.js.map +1 -1
  574. package/dist/radix-nova/separator.js.map +1 -1
  575. package/dist/radix-nova/sheet.js.map +1 -1
  576. package/dist/radix-nova/sidebar.js +8 -6
  577. package/dist/radix-nova/sidebar.js.map +1 -1
  578. package/dist/radix-nova/skeleton.js.map +1 -1
  579. package/dist/radix-nova/slider.js.map +1 -1
  580. package/dist/radix-nova/spinner.js.map +1 -1
  581. package/dist/radix-nova/switch.js.map +1 -1
  582. package/dist/radix-nova/table.js.map +1 -1
  583. package/dist/radix-nova/tabs.js.map +1 -1
  584. package/dist/radix-nova/textarea.js.map +1 -1
  585. package/dist/radix-nova/toggle-group.js.map +1 -1
  586. package/dist/radix-nova/toggle.js.map +1 -1
  587. package/dist/radix-nova/tooltip.js.map +1 -1
  588. package/dist/radix-vega/accordion.js.map +1 -1
  589. package/dist/radix-vega/action-bar.d.ts +41 -0
  590. package/dist/radix-vega/action-bar.js +589 -0
  591. package/dist/radix-vega/action-bar.js.map +1 -0
  592. package/dist/radix-vega/alert-dialog.js.map +1 -1
  593. package/dist/radix-vega/alert.js.map +1 -1
  594. package/dist/radix-vega/avatar-group.d.ts +19 -0
  595. package/dist/radix-vega/avatar-group.js +193 -0
  596. package/dist/radix-vega/avatar-group.js.map +1 -0
  597. package/dist/radix-vega/avatar.d.ts +1 -3
  598. package/dist/radix-vega/avatar.js +1 -27
  599. package/dist/radix-vega/avatar.js.map +1 -1
  600. package/dist/radix-vega/badge-overflow.d.ts +21 -0
  601. package/dist/radix-vega/badge-overflow.js +223 -0
  602. package/dist/radix-vega/badge-overflow.js.map +1 -0
  603. package/dist/radix-vega/badge.d.ts +1 -1
  604. package/dist/radix-vega/badge.js.map +1 -1
  605. package/dist/radix-vega/breadcrumb.js.map +1 -1
  606. package/dist/radix-vega/button-group.js.map +1 -1
  607. package/dist/radix-vega/button.d.ts +2 -2
  608. package/dist/radix-vega/button.js.map +1 -1
  609. package/dist/radix-vega/calendar.js.map +1 -1
  610. package/dist/radix-vega/card.js.map +1 -1
  611. package/dist/radix-vega/carousel.js.map +1 -1
  612. package/dist/radix-vega/chart.js.map +1 -1
  613. package/dist/radix-vega/checkbox-group.d.ts +12 -0
  614. package/dist/radix-vega/checkbox-group.js +119 -0
  615. package/dist/radix-vega/checkbox-group.js.map +1 -0
  616. package/dist/radix-vega/checkbox.js.map +1 -1
  617. package/dist/radix-vega/circular-progress.d.ts +27 -0
  618. package/dist/radix-vega/circular-progress.js +252 -0
  619. package/dist/radix-vega/circular-progress.js.map +1 -0
  620. package/dist/radix-vega/color-picker.d.ts +85 -0
  621. package/dist/radix-vega/color-picker.js +1683 -0
  622. package/dist/radix-vega/color-picker.js.map +1 -0
  623. package/dist/radix-vega/color-swatch.d.ts +17 -0
  624. package/dist/radix-vega/color-swatch.js +95 -0
  625. package/dist/radix-vega/color-swatch.js.map +1 -0
  626. package/dist/radix-vega/combobox.d.ts +18 -22
  627. package/dist/radix-vega/combobox.js +118 -276
  628. package/dist/radix-vega/combobox.js.map +1 -1
  629. package/dist/radix-vega/command.js.map +1 -1
  630. package/dist/radix-vega/compare-slider.d.ts +32 -0
  631. package/dist/radix-vega/compare-slider.js +393 -0
  632. package/dist/radix-vega/compare-slider.js.map +1 -0
  633. package/dist/radix-vega/context-menu.js.map +1 -1
  634. package/dist/radix-vega/cropper.d.ts +89 -0
  635. package/dist/radix-vega/cropper.js +1396 -0
  636. package/dist/radix-vega/cropper.js.map +1 -0
  637. package/dist/radix-vega/dialog.js.map +1 -1
  638. package/dist/radix-vega/drawer.js.map +1 -1
  639. package/dist/radix-vega/dropdown-menu.js.map +1 -1
  640. package/dist/radix-vega/editable.d.ts +100 -0
  641. package/dist/radix-vega/editable.js +684 -0
  642. package/dist/radix-vega/editable.js.map +1 -0
  643. package/dist/radix-vega/empty.js.map +1 -1
  644. package/dist/radix-vega/field.js.map +1 -1
  645. package/dist/radix-vega/file-upload.d.ts +89 -0
  646. package/dist/radix-vega/file-upload.js +1089 -0
  647. package/dist/radix-vega/file-upload.js.map +1 -0
  648. package/dist/radix-vega/gauge.d.ts +27 -0
  649. package/dist/radix-vega/gauge.js +359 -0
  650. package/dist/radix-vega/gauge.js.map +1 -0
  651. package/dist/radix-vega/hover-card.js.map +1 -1
  652. package/dist/radix-vega/index.d.ts +50 -3
  653. package/dist/radix-vega/index.js +23001 -2667
  654. package/dist/radix-vega/index.js.map +1 -1
  655. package/dist/radix-vega/input-group.d.ts +1 -1
  656. package/dist/radix-vega/input-group.js.map +1 -1
  657. package/dist/radix-vega/input-otp.js.map +1 -1
  658. package/dist/radix-vega/input.js.map +1 -1
  659. package/dist/radix-vega/item.d.ts +2 -2
  660. package/dist/radix-vega/item.js.map +1 -1
  661. package/dist/radix-vega/kanban.d.ts +62 -0
  662. package/dist/radix-vega/kanban.js +831 -0
  663. package/dist/radix-vega/kanban.js.map +1 -0
  664. package/dist/radix-vega/kbd.js.map +1 -1
  665. package/dist/radix-vega/key-value.d.ts +82 -0
  666. package/dist/radix-vega/key-value.js +765 -0
  667. package/dist/radix-vega/key-value.js.map +1 -0
  668. package/dist/radix-vega/label.js.map +1 -1
  669. package/dist/radix-vega/listbox.d.ts +11 -0
  670. package/dist/radix-vega/listbox.js +90 -0
  671. package/dist/radix-vega/listbox.js.map +1 -0
  672. package/dist/radix-vega/mask-input.d.ts +64 -0
  673. package/dist/radix-vega/mask-input.js +1186 -0
  674. package/dist/radix-vega/mask-input.js.map +1 -0
  675. package/dist/radix-vega/media-player.d.ts +127 -0
  676. package/dist/radix-vega/media-player.js +2696 -0
  677. package/dist/radix-vega/media-player.js.map +1 -0
  678. package/dist/radix-vega/mention.d.ts +11 -0
  679. package/dist/radix-vega/mention.js +94 -0
  680. package/dist/radix-vega/mention.js.map +1 -0
  681. package/dist/radix-vega/menubar.js.map +1 -1
  682. package/dist/radix-vega/native-select.js.map +1 -1
  683. package/dist/radix-vega/navigation-menu.js.map +1 -1
  684. package/dist/radix-vega/pagination.js.map +1 -1
  685. package/dist/radix-vega/phone-input.d.ts +48 -0
  686. package/dist/radix-vega/phone-input.js +957 -0
  687. package/dist/radix-vega/phone-input.js.map +1 -0
  688. package/dist/radix-vega/popover.js.map +1 -1
  689. package/dist/radix-vega/progress.js.map +1 -1
  690. package/dist/radix-vega/qr-code.d.ts +53 -0
  691. package/dist/radix-vega/qr-code.js +396 -0
  692. package/dist/radix-vega/qr-code.js.map +1 -0
  693. package/dist/radix-vega/radio-group.js.map +1 -1
  694. package/dist/radix-vega/rating.d.ts +47 -0
  695. package/dist/radix-vega/rating.js +749 -0
  696. package/dist/radix-vega/rating.js.map +1 -0
  697. package/dist/radix-vega/relative-time-card.d.ts +22 -0
  698. package/dist/radix-vega/relative-time-card.js +236 -0
  699. package/dist/radix-vega/relative-time-card.js.map +1 -0
  700. package/dist/radix-vega/resizable.js.map +1 -1
  701. package/dist/radix-vega/responsive-dialog.d.ts +20 -0
  702. package/dist/radix-vega/responsive-dialog.js +483 -0
  703. package/dist/radix-vega/responsive-dialog.js.map +1 -0
  704. package/dist/radix-vega/scroll-area.js.map +1 -1
  705. package/dist/radix-vega/scroll-spy.d.ts +39 -0
  706. package/dist/radix-vega/scroll-spy.js +372 -0
  707. package/dist/radix-vega/scroll-spy.js.map +1 -0
  708. package/dist/radix-vega/scroller.d.ts +20 -0
  709. package/dist/radix-vega/scroller.js +352 -0
  710. package/dist/radix-vega/scroller.js.map +1 -0
  711. package/dist/radix-vega/segmented-input.d.ts +29 -0
  712. package/dist/radix-vega/segmented-input.js +178 -0
  713. package/dist/radix-vega/segmented-input.js.map +1 -0
  714. package/dist/radix-vega/select.js.map +1 -1
  715. package/dist/radix-vega/separator.js.map +1 -1
  716. package/dist/radix-vega/sheet.js.map +1 -1
  717. package/dist/radix-vega/sidebar.js +8 -6
  718. package/dist/radix-vega/sidebar.js.map +1 -1
  719. package/dist/radix-vega/skeleton.js.map +1 -1
  720. package/dist/radix-vega/slider.js.map +1 -1
  721. package/dist/radix-vega/sortable.d.ts +51 -0
  722. package/dist/radix-vega/sortable.js +444 -0
  723. package/dist/radix-vega/sortable.js.map +1 -0
  724. package/dist/radix-vega/speed-dial.d.ts +46 -0
  725. package/dist/radix-vega/speed-dial.js +898 -0
  726. package/dist/radix-vega/speed-dial.js.map +1 -0
  727. package/dist/radix-vega/spinner.js.map +1 -1
  728. package/dist/radix-vega/stack.d.ts +21 -0
  729. package/dist/radix-vega/stack.js +268 -0
  730. package/dist/radix-vega/stack.js.map +1 -0
  731. package/dist/radix-vega/stat.d.ts +24 -0
  732. package/dist/radix-vega/stat.js +147 -0
  733. package/dist/radix-vega/stat.js.map +1 -0
  734. package/dist/radix-vega/status.d.ts +18 -0
  735. package/dist/radix-vega/status.js +71 -0
  736. package/dist/radix-vega/status.js.map +1 -0
  737. package/dist/radix-vega/stepper.d.ts +73 -0
  738. package/dist/radix-vega/stepper.js +973 -0
  739. package/dist/radix-vega/stepper.js.map +1 -0
  740. package/dist/radix-vega/swap.d.ts +29 -0
  741. package/dist/radix-vega/swap.js +214 -0
  742. package/dist/radix-vega/swap.js.map +1 -0
  743. package/dist/radix-vega/switch.js.map +1 -1
  744. package/dist/radix-vega/table.js.map +1 -1
  745. package/dist/radix-vega/tabs.d.ts +1 -1
  746. package/dist/radix-vega/tabs.js.map +1 -1
  747. package/dist/radix-vega/tags-input.d.ts +12 -0
  748. package/dist/radix-vega/tags-input.js +98 -0
  749. package/dist/radix-vega/tags-input.js.map +1 -0
  750. package/dist/radix-vega/textarea.js.map +1 -1
  751. package/dist/radix-vega/time-picker.d.ts +88 -0
  752. package/dist/radix-vega/time-picker.js +1750 -0
  753. package/dist/radix-vega/time-picker.js.map +1 -0
  754. package/dist/radix-vega/timeline.d.ts +32 -0
  755. package/dist/radix-vega/timeline.js +611 -0
  756. package/dist/radix-vega/timeline.js.map +1 -0
  757. package/dist/radix-vega/toggle-group.js.map +1 -1
  758. package/dist/radix-vega/toggle.js.map +1 -1
  759. package/dist/radix-vega/tooltip.js.map +1 -1
  760. package/dist/radix-vega/tour.d.ts +109 -0
  761. package/dist/radix-vega/tour.js +1314 -0
  762. package/dist/radix-vega/tour.js.map +1 -0
  763. package/dist/radix-vega/visually-hidden-input.d.ts +8 -0
  764. package/dist/radix-vega/visually-hidden-input.js +33 -0
  765. package/dist/radix-vega/visually-hidden-input.js.map +1 -0
  766. package/package.json +29 -1
@@ -0,0 +1,1089 @@
1
+ import { useDirection } from '@radix-ui/react-direction';
2
+ import { Slot } from '@radix-ui/react-slot';
3
+ import { FileVideoIcon, FileAudioIcon, FileTextIcon, FileCodeIcon, FileArchiveIcon, FileCogIcon, FileIcon } from 'lucide-react';
4
+ import * as React4 from 'react';
5
+ import { clsx } from 'clsx';
6
+ import { twMerge } from 'tailwind-merge';
7
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
8
+
9
+ function cn(...inputs) {
10
+ return twMerge(clsx(inputs));
11
+ }
12
+ var useIsomorphicLayoutEffect = typeof window !== "undefined" ? React4.useLayoutEffect : React4.useEffect;
13
+
14
+ // src/hooks/use-as-ref.ts
15
+ function useAsRef(props) {
16
+ const ref = React4.useRef(props);
17
+ useIsomorphicLayoutEffect(() => {
18
+ ref.current = props;
19
+ });
20
+ return ref;
21
+ }
22
+ function useLazyRef(fn) {
23
+ const ref = React4.useRef(null);
24
+ if (ref.current === null) {
25
+ ref.current = fn();
26
+ }
27
+ return ref;
28
+ }
29
+ var ROOT_NAME = "FileUpload";
30
+ var DROPZONE_NAME = "FileUploadDropzone";
31
+ var TRIGGER_NAME = "FileUploadTrigger";
32
+ var LIST_NAME = "FileUploadList";
33
+ var ITEM_NAME = "FileUploadItem";
34
+ var ITEM_PREVIEW_NAME = "FileUploadItemPreview";
35
+ var ITEM_METADATA_NAME = "FileUploadItemMetadata";
36
+ var ITEM_PROGRESS_NAME = "FileUploadItemProgress";
37
+ var ITEM_DELETE_NAME = "FileUploadItemDelete";
38
+ var CLEAR_NAME = "FileUploadClear";
39
+ function formatBytes(bytes) {
40
+ if (bytes === 0) return "0 B";
41
+ const sizes = ["B", "KB", "MB", "GB", "TB"];
42
+ const i = Math.floor(Math.log(bytes) / Math.log(1024));
43
+ return `${(bytes / 1024 ** i).toFixed(i ? 1 : 0)} ${sizes[i]}`;
44
+ }
45
+ function getFileIcon(file) {
46
+ const type = file.type;
47
+ const extension = file.name.split(".").pop()?.toLowerCase() ?? "";
48
+ if (type.startsWith("video/")) {
49
+ return /* @__PURE__ */ jsx(FileVideoIcon, {});
50
+ }
51
+ if (type.startsWith("audio/")) {
52
+ return /* @__PURE__ */ jsx(FileAudioIcon, {});
53
+ }
54
+ if (type.startsWith("text/") || ["txt", "md", "rtf", "pdf"].includes(extension)) {
55
+ return /* @__PURE__ */ jsx(FileTextIcon, {});
56
+ }
57
+ if ([
58
+ "html",
59
+ "css",
60
+ "js",
61
+ "jsx",
62
+ "ts",
63
+ "tsx",
64
+ "json",
65
+ "xml",
66
+ "php",
67
+ "py",
68
+ "rb",
69
+ "java",
70
+ "c",
71
+ "cpp",
72
+ "cs"
73
+ ].includes(extension)) {
74
+ return /* @__PURE__ */ jsx(FileCodeIcon, {});
75
+ }
76
+ if (["zip", "rar", "7z", "tar", "gz", "bz2"].includes(extension)) {
77
+ return /* @__PURE__ */ jsx(FileArchiveIcon, {});
78
+ }
79
+ if (["exe", "msi", "app", "apk", "deb", "rpm"].includes(extension) || type.startsWith("application/")) {
80
+ return /* @__PURE__ */ jsx(FileCogIcon, {});
81
+ }
82
+ return /* @__PURE__ */ jsx(FileIcon, {});
83
+ }
84
+ var StoreContext = React4.createContext(null);
85
+ function useStoreContext(consumerName) {
86
+ const context = React4.useContext(StoreContext);
87
+ if (!context) {
88
+ throw new Error(`\`${consumerName}\` must be used within \`${ROOT_NAME}\``);
89
+ }
90
+ return context;
91
+ }
92
+ function useStore(selector) {
93
+ const store = useStoreContext("useStore");
94
+ const lastValueRef = useLazyRef(
95
+ () => null
96
+ );
97
+ const getSnapshot = React4.useCallback(() => {
98
+ const state = store.getState();
99
+ const prevValue = lastValueRef.current;
100
+ if (prevValue && prevValue.state === state) {
101
+ return prevValue.value;
102
+ }
103
+ const nextValue = selector(state);
104
+ lastValueRef.current = { value: nextValue, state };
105
+ return nextValue;
106
+ }, [store, selector, lastValueRef]);
107
+ return React4.useSyncExternalStore(store.subscribe, getSnapshot, getSnapshot);
108
+ }
109
+ var FileUploadContext = React4.createContext(
110
+ null
111
+ );
112
+ function useFileUploadContext(consumerName) {
113
+ const context = React4.useContext(FileUploadContext);
114
+ if (!context) {
115
+ throw new Error(`\`${consumerName}\` must be used within \`${ROOT_NAME}\``);
116
+ }
117
+ return context;
118
+ }
119
+ function FileUpload(props) {
120
+ const {
121
+ value,
122
+ defaultValue,
123
+ onValueChange,
124
+ onAccept,
125
+ onFileAccept,
126
+ onFileReject,
127
+ onFileValidate,
128
+ onUpload,
129
+ accept,
130
+ maxFiles,
131
+ maxSize,
132
+ dir: dirProp,
133
+ label,
134
+ name,
135
+ asChild,
136
+ disabled = false,
137
+ invalid = false,
138
+ multiple = false,
139
+ required = false,
140
+ children,
141
+ className,
142
+ ...rootProps
143
+ } = props;
144
+ const inputId = React4.useId();
145
+ const dropzoneId = React4.useId();
146
+ const listId = React4.useId();
147
+ const labelId = React4.useId();
148
+ const dir = useDirection(dirProp);
149
+ const listeners = useLazyRef(() => /* @__PURE__ */ new Set()).current;
150
+ const files = useLazyRef(() => /* @__PURE__ */ new Map()).current;
151
+ const urlCache = useLazyRef(() => /* @__PURE__ */ new WeakMap()).current;
152
+ const inputRef = React4.useRef(null);
153
+ const isControlled = value !== void 0;
154
+ const propsRef = useAsRef({
155
+ onValueChange,
156
+ onAccept,
157
+ onFileAccept,
158
+ onFileReject,
159
+ onFileValidate,
160
+ onUpload
161
+ });
162
+ const store = React4.useMemo(() => {
163
+ let state = {
164
+ files,
165
+ dragOver: false,
166
+ invalid
167
+ };
168
+ function reducer(state2, action) {
169
+ switch (action.type) {
170
+ case "ADD_FILES": {
171
+ for (const file of action.files) {
172
+ files.set(file, {
173
+ file,
174
+ progress: 0,
175
+ status: "idle"
176
+ });
177
+ }
178
+ if (propsRef.current.onValueChange) {
179
+ const fileList = Array.from(files.values()).map(
180
+ (fileState) => fileState.file
181
+ );
182
+ propsRef.current.onValueChange(fileList);
183
+ }
184
+ return { ...state2, files };
185
+ }
186
+ case "SET_FILES": {
187
+ const newFileSet = new Set(action.files);
188
+ for (const existingFile of files.keys()) {
189
+ if (!newFileSet.has(existingFile)) {
190
+ files.delete(existingFile);
191
+ }
192
+ }
193
+ for (const file of action.files) {
194
+ const existingState = files.get(file);
195
+ if (!existingState) {
196
+ files.set(file, {
197
+ file,
198
+ progress: 0,
199
+ status: "idle"
200
+ });
201
+ }
202
+ }
203
+ return { ...state2, files };
204
+ }
205
+ case "SET_PROGRESS": {
206
+ const fileState = files.get(action.file);
207
+ if (fileState) {
208
+ files.set(action.file, {
209
+ ...fileState,
210
+ progress: action.progress,
211
+ status: "uploading"
212
+ });
213
+ }
214
+ return { ...state2, files };
215
+ }
216
+ case "SET_SUCCESS": {
217
+ const fileState = files.get(action.file);
218
+ if (fileState) {
219
+ files.set(action.file, {
220
+ ...fileState,
221
+ progress: 100,
222
+ status: "success"
223
+ });
224
+ }
225
+ return { ...state2, files };
226
+ }
227
+ case "SET_ERROR": {
228
+ const fileState = files.get(action.file);
229
+ if (fileState) {
230
+ files.set(action.file, {
231
+ ...fileState,
232
+ error: action.error,
233
+ status: "error"
234
+ });
235
+ }
236
+ return { ...state2, files };
237
+ }
238
+ case "REMOVE_FILE": {
239
+ const cachedUrl = urlCache.get(action.file);
240
+ if (cachedUrl) {
241
+ URL.revokeObjectURL(cachedUrl);
242
+ urlCache.delete(action.file);
243
+ }
244
+ files.delete(action.file);
245
+ if (propsRef.current.onValueChange) {
246
+ const fileList = Array.from(files.values()).map(
247
+ (fileState) => fileState.file
248
+ );
249
+ propsRef.current.onValueChange(fileList);
250
+ }
251
+ return { ...state2, files };
252
+ }
253
+ case "SET_DRAG_OVER": {
254
+ return { ...state2, dragOver: action.dragOver };
255
+ }
256
+ case "SET_INVALID": {
257
+ return { ...state2, invalid: action.invalid };
258
+ }
259
+ case "CLEAR": {
260
+ for (const file of files.keys()) {
261
+ const cachedUrl = urlCache.get(file);
262
+ if (cachedUrl) {
263
+ URL.revokeObjectURL(cachedUrl);
264
+ urlCache.delete(file);
265
+ }
266
+ }
267
+ files.clear();
268
+ if (propsRef.current.onValueChange) {
269
+ propsRef.current.onValueChange([]);
270
+ }
271
+ return { ...state2, files, invalid: false };
272
+ }
273
+ default:
274
+ return state2;
275
+ }
276
+ }
277
+ return {
278
+ getState: () => state,
279
+ dispatch: (action) => {
280
+ state = reducer(state, action);
281
+ for (const listener of listeners) {
282
+ listener();
283
+ }
284
+ },
285
+ subscribe: (listener) => {
286
+ listeners.add(listener);
287
+ return () => listeners.delete(listener);
288
+ }
289
+ };
290
+ }, [listeners, files, invalid, propsRef, urlCache]);
291
+ const acceptTypes = React4.useMemo(
292
+ () => accept?.split(",").map((t) => t.trim()) ?? null,
293
+ [accept]
294
+ );
295
+ const onProgress = useLazyRef(() => {
296
+ let frame = 0;
297
+ return (file, progress) => {
298
+ if (frame) return;
299
+ frame = requestAnimationFrame(() => {
300
+ frame = 0;
301
+ store.dispatch({
302
+ type: "SET_PROGRESS",
303
+ file,
304
+ progress: Math.min(Math.max(0, progress), 100)
305
+ });
306
+ });
307
+ };
308
+ }).current;
309
+ React4.useEffect(() => {
310
+ if (isControlled) {
311
+ store.dispatch({ type: "SET_FILES", files: value });
312
+ } else if (defaultValue && defaultValue.length > 0 && !store.getState().files.size) {
313
+ store.dispatch({ type: "SET_FILES", files: defaultValue });
314
+ }
315
+ }, [value, defaultValue, isControlled, store]);
316
+ React4.useEffect(() => {
317
+ return () => {
318
+ for (const file of files.keys()) {
319
+ const cachedUrl = urlCache.get(file);
320
+ if (cachedUrl) {
321
+ URL.revokeObjectURL(cachedUrl);
322
+ }
323
+ }
324
+ };
325
+ }, [files, urlCache]);
326
+ const onFilesUpload = React4.useCallback(
327
+ async (files2) => {
328
+ try {
329
+ for (const file of files2) {
330
+ store.dispatch({ type: "SET_PROGRESS", file, progress: 0 });
331
+ }
332
+ if (propsRef.current.onUpload) {
333
+ await propsRef.current.onUpload(files2, {
334
+ onProgress,
335
+ onSuccess: (file) => {
336
+ store.dispatch({ type: "SET_SUCCESS", file });
337
+ },
338
+ onError: (file, error) => {
339
+ store.dispatch({
340
+ type: "SET_ERROR",
341
+ file,
342
+ error: error.message ?? "Upload failed"
343
+ });
344
+ }
345
+ });
346
+ } else {
347
+ for (const file of files2) {
348
+ store.dispatch({ type: "SET_SUCCESS", file });
349
+ }
350
+ }
351
+ } catch (error) {
352
+ const errorMessage = error instanceof Error ? error.message : "Upload failed";
353
+ for (const file of files2) {
354
+ store.dispatch({
355
+ type: "SET_ERROR",
356
+ file,
357
+ error: errorMessage
358
+ });
359
+ }
360
+ }
361
+ },
362
+ [store, propsRef, onProgress]
363
+ );
364
+ const onFilesChange = React4.useCallback(
365
+ (originalFiles) => {
366
+ if (disabled) return;
367
+ let filesToProcess = [...originalFiles];
368
+ let invalid2 = false;
369
+ if (maxFiles) {
370
+ const currentCount = store.getState().files.size;
371
+ const remainingSlotCount = Math.max(0, maxFiles - currentCount);
372
+ if (remainingSlotCount < filesToProcess.length) {
373
+ const rejectedFiles2 = filesToProcess.slice(remainingSlotCount);
374
+ invalid2 = true;
375
+ filesToProcess = filesToProcess.slice(0, remainingSlotCount);
376
+ for (const file of rejectedFiles2) {
377
+ let rejectionMessage = `Maximum ${maxFiles} files allowed`;
378
+ if (propsRef.current.onFileValidate) {
379
+ const validationMessage = propsRef.current.onFileValidate(file);
380
+ if (validationMessage) {
381
+ rejectionMessage = validationMessage;
382
+ }
383
+ }
384
+ propsRef.current.onFileReject?.(file, rejectionMessage);
385
+ }
386
+ }
387
+ }
388
+ const acceptedFiles = [];
389
+ for (const file of filesToProcess) {
390
+ let rejected = false;
391
+ let rejectionMessage = "";
392
+ if (propsRef.current.onFileValidate) {
393
+ const validationMessage = propsRef.current.onFileValidate(file);
394
+ if (validationMessage) {
395
+ rejectionMessage = validationMessage;
396
+ propsRef.current.onFileReject?.(file, rejectionMessage);
397
+ rejected = true;
398
+ invalid2 = true;
399
+ continue;
400
+ }
401
+ }
402
+ if (acceptTypes) {
403
+ const fileType = file.type;
404
+ const fileExtension = `.${file.name.split(".").pop()}`;
405
+ if (!acceptTypes.some(
406
+ (type) => type === fileType || type === fileExtension || type.includes("/*") && fileType.startsWith(type.replace("/*", "/"))
407
+ )) {
408
+ rejectionMessage = "File type not accepted";
409
+ propsRef.current.onFileReject?.(file, rejectionMessage);
410
+ rejected = true;
411
+ invalid2 = true;
412
+ }
413
+ }
414
+ if (maxSize && file.size > maxSize) {
415
+ rejectionMessage = "File too large";
416
+ propsRef.current.onFileReject?.(file, rejectionMessage);
417
+ rejected = true;
418
+ invalid2 = true;
419
+ }
420
+ if (!rejected) {
421
+ acceptedFiles.push(file);
422
+ }
423
+ }
424
+ if (invalid2) {
425
+ store.dispatch({ type: "SET_INVALID", invalid: invalid2 });
426
+ setTimeout(() => {
427
+ store.dispatch({ type: "SET_INVALID", invalid: false });
428
+ }, 2e3);
429
+ }
430
+ if (acceptedFiles.length > 0) {
431
+ store.dispatch({ type: "ADD_FILES", files: acceptedFiles });
432
+ if (isControlled && propsRef.current.onValueChange) {
433
+ const currentFiles = Array.from(store.getState().files.values()).map(
434
+ (f) => f.file
435
+ );
436
+ propsRef.current.onValueChange([...currentFiles]);
437
+ }
438
+ if (propsRef.current.onAccept) {
439
+ propsRef.current.onAccept(acceptedFiles);
440
+ }
441
+ for (const file of acceptedFiles) {
442
+ propsRef.current.onFileAccept?.(file);
443
+ }
444
+ if (propsRef.current.onUpload) {
445
+ requestAnimationFrame(() => {
446
+ onFilesUpload(acceptedFiles);
447
+ });
448
+ }
449
+ }
450
+ },
451
+ [
452
+ store,
453
+ isControlled,
454
+ propsRef,
455
+ onFilesUpload,
456
+ maxFiles,
457
+ acceptTypes,
458
+ maxSize,
459
+ disabled
460
+ ]
461
+ );
462
+ const onInputChange = React4.useCallback(
463
+ (event) => {
464
+ const files2 = Array.from(event.target.files ?? []);
465
+ onFilesChange(files2);
466
+ event.target.value = "";
467
+ },
468
+ [onFilesChange]
469
+ );
470
+ const contextValue = React4.useMemo(
471
+ () => ({
472
+ dropzoneId,
473
+ inputId,
474
+ listId,
475
+ labelId,
476
+ dir,
477
+ disabled,
478
+ inputRef,
479
+ urlCache
480
+ }),
481
+ [dropzoneId, inputId, listId, labelId, dir, disabled, urlCache]
482
+ );
483
+ const RootPrimitive = asChild ? Slot : "div";
484
+ return /* @__PURE__ */ jsx(StoreContext.Provider, { value: store, children: /* @__PURE__ */ jsx(FileUploadContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsxs(
485
+ RootPrimitive,
486
+ {
487
+ "data-disabled": disabled ? "" : void 0,
488
+ "data-slot": "file-upload",
489
+ dir,
490
+ ...rootProps,
491
+ className: cn("relative flex flex-col gap-2", className),
492
+ children: [
493
+ children,
494
+ /* @__PURE__ */ jsx(
495
+ "input",
496
+ {
497
+ type: "file",
498
+ id: inputId,
499
+ "aria-labelledby": labelId,
500
+ "aria-describedby": dropzoneId,
501
+ ref: inputRef,
502
+ tabIndex: -1,
503
+ accept,
504
+ name,
505
+ className: "sr-only",
506
+ disabled,
507
+ multiple,
508
+ required,
509
+ onChange: onInputChange
510
+ }
511
+ ),
512
+ /* @__PURE__ */ jsx("div", { id: labelId, className: "sr-only", children: label ?? "File upload" })
513
+ ]
514
+ }
515
+ ) }) });
516
+ }
517
+ function FileUploadDropzone(props) {
518
+ const {
519
+ asChild,
520
+ className,
521
+ onClick: onClickProp,
522
+ onDragOver: onDragOverProp,
523
+ onDragEnter: onDragEnterProp,
524
+ onDragLeave: onDragLeaveProp,
525
+ onDrop: onDropProp,
526
+ onPaste: onPasteProp,
527
+ onKeyDown: onKeyDownProp,
528
+ ...dropzoneProps
529
+ } = props;
530
+ const context = useFileUploadContext(DROPZONE_NAME);
531
+ const store = useStoreContext(DROPZONE_NAME);
532
+ const dragOver = useStore((state) => state.dragOver);
533
+ const invalid = useStore((state) => state.invalid);
534
+ const propsRef = useAsRef({
535
+ onClick: onClickProp,
536
+ onDragOver: onDragOverProp,
537
+ onDragEnter: onDragEnterProp,
538
+ onDragLeave: onDragLeaveProp,
539
+ onDrop: onDropProp,
540
+ onPaste: onPasteProp,
541
+ onKeyDown: onKeyDownProp
542
+ });
543
+ const onClick = React4.useCallback(
544
+ (event) => {
545
+ propsRef.current.onClick?.(event);
546
+ if (event.defaultPrevented) return;
547
+ const target = event.target;
548
+ const isFromTrigger = target instanceof HTMLElement && target.closest('[data-slot="file-upload-trigger"]');
549
+ if (!isFromTrigger) {
550
+ context.inputRef.current?.click();
551
+ }
552
+ },
553
+ [context.inputRef, propsRef]
554
+ );
555
+ const onDragOver = React4.useCallback(
556
+ (event) => {
557
+ propsRef.current.onDragOver?.(event);
558
+ if (event.defaultPrevented) return;
559
+ event.preventDefault();
560
+ store.dispatch({ type: "SET_DRAG_OVER", dragOver: true });
561
+ },
562
+ [store, propsRef]
563
+ );
564
+ const onDragEnter = React4.useCallback(
565
+ (event) => {
566
+ propsRef.current.onDragEnter?.(event);
567
+ if (event.defaultPrevented) return;
568
+ event.preventDefault();
569
+ store.dispatch({ type: "SET_DRAG_OVER", dragOver: true });
570
+ },
571
+ [store, propsRef]
572
+ );
573
+ const onDragLeave = React4.useCallback(
574
+ (event) => {
575
+ propsRef.current.onDragLeave?.(event);
576
+ if (event.defaultPrevented) return;
577
+ const relatedTarget = event.relatedTarget;
578
+ if (relatedTarget && relatedTarget instanceof Node && event.currentTarget.contains(relatedTarget)) {
579
+ return;
580
+ }
581
+ event.preventDefault();
582
+ store.dispatch({ type: "SET_DRAG_OVER", dragOver: false });
583
+ },
584
+ [store, propsRef]
585
+ );
586
+ const onDrop = React4.useCallback(
587
+ (event) => {
588
+ propsRef.current.onDrop?.(event);
589
+ if (event.defaultPrevented) return;
590
+ event.preventDefault();
591
+ store.dispatch({ type: "SET_DRAG_OVER", dragOver: false });
592
+ const files = Array.from(event.dataTransfer.files);
593
+ const inputElement = context.inputRef.current;
594
+ if (!inputElement) return;
595
+ const dataTransfer = new DataTransfer();
596
+ for (const file of files) {
597
+ dataTransfer.items.add(file);
598
+ }
599
+ inputElement.files = dataTransfer.files;
600
+ inputElement.dispatchEvent(new Event("change", { bubbles: true }));
601
+ },
602
+ [store, context.inputRef, propsRef]
603
+ );
604
+ const onPaste = React4.useCallback(
605
+ (event) => {
606
+ propsRef.current.onPaste?.(event);
607
+ if (event.defaultPrevented) return;
608
+ event.preventDefault();
609
+ store.dispatch({ type: "SET_DRAG_OVER", dragOver: false });
610
+ const items = event.clipboardData?.items;
611
+ if (!items) return;
612
+ const files = [];
613
+ for (let i = 0; i < items.length; i++) {
614
+ const item = items[i];
615
+ if (item?.kind === "file") {
616
+ const file = item.getAsFile();
617
+ if (file) {
618
+ files.push(file);
619
+ }
620
+ }
621
+ }
622
+ if (files.length === 0) return;
623
+ const inputElement = context.inputRef.current;
624
+ if (!inputElement) return;
625
+ const dataTransfer = new DataTransfer();
626
+ for (const file of files) {
627
+ dataTransfer.items.add(file);
628
+ }
629
+ inputElement.files = dataTransfer.files;
630
+ inputElement.dispatchEvent(new Event("change", { bubbles: true }));
631
+ },
632
+ [store, context.inputRef, propsRef]
633
+ );
634
+ const onKeyDown = React4.useCallback(
635
+ (event) => {
636
+ propsRef.current.onKeyDown?.(event);
637
+ if (!event.defaultPrevented && (event.key === "Enter" || event.key === " ")) {
638
+ event.preventDefault();
639
+ context.inputRef.current?.click();
640
+ }
641
+ },
642
+ [context.inputRef, propsRef]
643
+ );
644
+ const DropzonePrimitive = asChild ? Slot : "div";
645
+ return /* @__PURE__ */ jsx(
646
+ DropzonePrimitive,
647
+ {
648
+ role: "region",
649
+ id: context.dropzoneId,
650
+ "aria-controls": `${context.inputId} ${context.listId}`,
651
+ "aria-disabled": context.disabled,
652
+ "aria-invalid": invalid,
653
+ "data-disabled": context.disabled ? "" : void 0,
654
+ "data-dragging": dragOver ? "" : void 0,
655
+ "data-invalid": invalid ? "" : void 0,
656
+ "data-slot": "file-upload-dropzone",
657
+ dir: context.dir,
658
+ tabIndex: context.disabled ? void 0 : 0,
659
+ ...dropzoneProps,
660
+ className: cn(
661
+ "relative flex select-none flex-col items-center justify-center gap-2 rounded-lg border-2 border-dashed p-6 outline-none transition-colors hover:bg-accent/30 focus-visible:border-ring/50 data-disabled:pointer-events-none data-dragging:border-primary/30 data-invalid:border-destructive data-dragging:bg-accent/30 data-invalid:ring-destructive/20",
662
+ className
663
+ ),
664
+ onClick,
665
+ onDragEnter,
666
+ onDragLeave,
667
+ onDragOver,
668
+ onDrop,
669
+ onKeyDown,
670
+ onPaste
671
+ }
672
+ );
673
+ }
674
+ function FileUploadTrigger(props) {
675
+ const { asChild, onClick: onClickProp, ...triggerProps } = props;
676
+ const context = useFileUploadContext(TRIGGER_NAME);
677
+ const propsRef = useAsRef({
678
+ onClick: onClickProp
679
+ });
680
+ const onClick = React4.useCallback(
681
+ (event) => {
682
+ propsRef.current.onClick?.(event);
683
+ if (event.defaultPrevented) return;
684
+ context.inputRef.current?.click();
685
+ },
686
+ [context.inputRef, propsRef]
687
+ );
688
+ const TriggerPrimitive = asChild ? Slot : "button";
689
+ return /* @__PURE__ */ jsx(
690
+ TriggerPrimitive,
691
+ {
692
+ type: "button",
693
+ "aria-controls": context.inputId,
694
+ "data-disabled": context.disabled ? "" : void 0,
695
+ "data-slot": "file-upload-trigger",
696
+ ...triggerProps,
697
+ disabled: context.disabled,
698
+ onClick
699
+ }
700
+ );
701
+ }
702
+ function FileUploadList(props) {
703
+ const {
704
+ className,
705
+ orientation = "vertical",
706
+ asChild,
707
+ forceMount,
708
+ ...listProps
709
+ } = props;
710
+ const context = useFileUploadContext(LIST_NAME);
711
+ const fileCount = useStore((state) => state.files.size);
712
+ const shouldRender = forceMount || fileCount > 0;
713
+ if (!shouldRender) return null;
714
+ const ListPrimitive = asChild ? Slot : "div";
715
+ return /* @__PURE__ */ jsx(
716
+ ListPrimitive,
717
+ {
718
+ role: "list",
719
+ id: context.listId,
720
+ "aria-orientation": orientation,
721
+ "data-orientation": orientation,
722
+ "data-slot": "file-upload-list",
723
+ "data-state": shouldRender ? "active" : "inactive",
724
+ dir: context.dir,
725
+ ...listProps,
726
+ className: cn(
727
+ "data-[state=inactive]:fade-out-0 data-[state=active]:fade-in-0 data-[state=inactive]:slide-out-to-top-2 data-[state=active]:slide-in-from-top-2 flex flex-col gap-2 data-[state=active]:animate-in data-[state=inactive]:animate-out",
728
+ orientation === "horizontal" && "flex-row overflow-x-auto p-1.5",
729
+ className
730
+ )
731
+ }
732
+ );
733
+ }
734
+ var FileUploadItemContext = React4.createContext(null);
735
+ function useFileUploadItemContext(consumerName) {
736
+ const context = React4.useContext(FileUploadItemContext);
737
+ if (!context) {
738
+ throw new Error(`\`${consumerName}\` must be used within \`${ITEM_NAME}\``);
739
+ }
740
+ return context;
741
+ }
742
+ function FileUploadItem(props) {
743
+ const { value, asChild, className, ...itemProps } = props;
744
+ const id = React4.useId();
745
+ const statusId = `${id}-status`;
746
+ const nameId = `${id}-name`;
747
+ const sizeId = `${id}-size`;
748
+ const messageId = `${id}-message`;
749
+ const context = useFileUploadContext(ITEM_NAME);
750
+ const fileState = useStore((state) => state.files.get(value));
751
+ const fileCount = useStore((state) => state.files.size);
752
+ const fileIndex = useStore((state) => {
753
+ const files = Array.from(state.files.keys());
754
+ return files.indexOf(value) + 1;
755
+ });
756
+ const itemContext = React4.useMemo(
757
+ () => ({
758
+ id,
759
+ fileState,
760
+ nameId,
761
+ sizeId,
762
+ statusId,
763
+ messageId
764
+ }),
765
+ [id, fileState, statusId, nameId, sizeId, messageId]
766
+ );
767
+ if (!fileState) return null;
768
+ const statusText = fileState.error ? `Error: ${fileState.error}` : fileState.status === "uploading" ? `Uploading: ${fileState.progress}% complete` : fileState.status === "success" ? "Upload complete" : "Ready to upload";
769
+ const ItemPrimitive = asChild ? Slot : "div";
770
+ return /* @__PURE__ */ jsx(FileUploadItemContext.Provider, { value: itemContext, children: /* @__PURE__ */ jsxs(
771
+ ItemPrimitive,
772
+ {
773
+ role: "listitem",
774
+ id,
775
+ "aria-setsize": fileCount,
776
+ "aria-posinset": fileIndex,
777
+ "aria-describedby": `${nameId} ${sizeId} ${statusId} ${fileState.error ? messageId : ""}`,
778
+ "aria-labelledby": nameId,
779
+ "data-slot": "file-upload-item",
780
+ dir: context.dir,
781
+ ...itemProps,
782
+ className: cn(
783
+ "relative flex items-center gap-2.5 rounded-md border p-3",
784
+ className
785
+ ),
786
+ children: [
787
+ props.children,
788
+ /* @__PURE__ */ jsx("span", { id: statusId, className: "sr-only", children: statusText })
789
+ ]
790
+ }
791
+ ) });
792
+ }
793
+ function FileUploadItemPreview(props) {
794
+ const { render, asChild, children, className, ...previewProps } = props;
795
+ const itemContext = useFileUploadItemContext(ITEM_PREVIEW_NAME);
796
+ const context = useFileUploadContext(ITEM_PREVIEW_NAME);
797
+ const getDefaultRender = React4.useCallback(
798
+ (file) => {
799
+ if (itemContext.fileState?.file.type.startsWith("image/")) {
800
+ let url = context.urlCache.get(file);
801
+ if (!url) {
802
+ url = URL.createObjectURL(file);
803
+ context.urlCache.set(file, url);
804
+ }
805
+ return (
806
+ // biome-ignore lint/performance/noImgElement: dynamic file URLs from user uploads don't work well with Next.js Image optimization
807
+ /* @__PURE__ */ jsx("img", { src: url, alt: file.name, className: "size-full object-cover" })
808
+ );
809
+ }
810
+ return getFileIcon(file);
811
+ },
812
+ [itemContext.fileState?.file.type, context.urlCache]
813
+ );
814
+ const onPreviewRender = React4.useCallback(
815
+ (file) => {
816
+ if (render) {
817
+ return render(file, () => getDefaultRender(file));
818
+ }
819
+ return getDefaultRender(file);
820
+ },
821
+ [render, getDefaultRender]
822
+ );
823
+ if (!itemContext.fileState) return null;
824
+ const ItemPreviewPrimitive = asChild ? Slot : "div";
825
+ return /* @__PURE__ */ jsxs(
826
+ ItemPreviewPrimitive,
827
+ {
828
+ "aria-labelledby": itemContext.nameId,
829
+ "data-slot": "file-upload-preview",
830
+ ...previewProps,
831
+ className: cn(
832
+ "relative flex size-10 shrink-0 items-center justify-center overflow-hidden rounded border bg-accent/50 [&>svg]:size-10",
833
+ className
834
+ ),
835
+ children: [
836
+ onPreviewRender(itemContext.fileState.file),
837
+ children
838
+ ]
839
+ }
840
+ );
841
+ }
842
+ function FileUploadItemMetadata(props) {
843
+ const {
844
+ asChild,
845
+ size = "default",
846
+ children,
847
+ className,
848
+ ...metadataProps
849
+ } = props;
850
+ const context = useFileUploadContext(ITEM_METADATA_NAME);
851
+ const itemContext = useFileUploadItemContext(ITEM_METADATA_NAME);
852
+ if (!itemContext.fileState) return null;
853
+ const ItemMetadataPrimitive = asChild ? Slot : "div";
854
+ return /* @__PURE__ */ jsx(
855
+ ItemMetadataPrimitive,
856
+ {
857
+ "data-slot": "file-upload-metadata",
858
+ dir: context.dir,
859
+ ...metadataProps,
860
+ className: cn("flex min-w-0 flex-1 flex-col", className),
861
+ children: children ?? /* @__PURE__ */ jsxs(Fragment, { children: [
862
+ /* @__PURE__ */ jsx(
863
+ "span",
864
+ {
865
+ id: itemContext.nameId,
866
+ className: cn(
867
+ "truncate font-medium text-sm",
868
+ size === "sm" && "font-normal text-[13px] leading-snug"
869
+ ),
870
+ children: itemContext.fileState.file.name
871
+ }
872
+ ),
873
+ /* @__PURE__ */ jsx(
874
+ "span",
875
+ {
876
+ id: itemContext.sizeId,
877
+ className: cn(
878
+ "truncate text-muted-foreground text-xs",
879
+ size === "sm" && "text-[11px] leading-snug"
880
+ ),
881
+ children: formatBytes(itemContext.fileState.file.size)
882
+ }
883
+ ),
884
+ itemContext.fileState.error && /* @__PURE__ */ jsx(
885
+ "span",
886
+ {
887
+ id: itemContext.messageId,
888
+ className: "text-destructive text-xs",
889
+ children: itemContext.fileState.error
890
+ }
891
+ )
892
+ ] })
893
+ }
894
+ );
895
+ }
896
+ function FileUploadItemProgress(props) {
897
+ const {
898
+ variant = "linear",
899
+ size = 40,
900
+ asChild,
901
+ forceMount,
902
+ className,
903
+ ...progressProps
904
+ } = props;
905
+ const itemContext = useFileUploadItemContext(ITEM_PROGRESS_NAME);
906
+ if (!itemContext.fileState) return null;
907
+ const shouldRender = forceMount || itemContext.fileState.progress !== 100;
908
+ if (!shouldRender) return null;
909
+ const ItemProgressPrimitive = asChild ? Slot : "div";
910
+ switch (variant) {
911
+ case "circular": {
912
+ const circumference = 2 * Math.PI * ((size - 4) / 2);
913
+ const strokeDashoffset = circumference - itemContext.fileState.progress / 100 * circumference;
914
+ return /* @__PURE__ */ jsx(
915
+ ItemProgressPrimitive,
916
+ {
917
+ role: "progressbar",
918
+ "aria-valuemin": 0,
919
+ "aria-valuemax": 100,
920
+ "aria-valuenow": itemContext.fileState.progress,
921
+ "aria-valuetext": `${itemContext.fileState.progress}%`,
922
+ "aria-labelledby": itemContext.nameId,
923
+ "data-slot": "file-upload-progress",
924
+ ...progressProps,
925
+ className: cn(
926
+ "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2",
927
+ className
928
+ ),
929
+ children: /* @__PURE__ */ jsxs(
930
+ "svg",
931
+ {
932
+ className: "-rotate-90 transform",
933
+ width: size,
934
+ height: size,
935
+ viewBox: `0 0 ${size} ${size}`,
936
+ fill: "none",
937
+ stroke: "currentColor",
938
+ children: [
939
+ /* @__PURE__ */ jsx(
940
+ "circle",
941
+ {
942
+ className: "text-primary/20",
943
+ strokeWidth: "2",
944
+ cx: size / 2,
945
+ cy: size / 2,
946
+ r: (size - 4) / 2
947
+ }
948
+ ),
949
+ /* @__PURE__ */ jsx(
950
+ "circle",
951
+ {
952
+ className: "text-primary transition-[stroke-dashoffset] duration-300 ease-linear",
953
+ strokeWidth: "2",
954
+ strokeLinecap: "round",
955
+ strokeDasharray: circumference,
956
+ strokeDashoffset,
957
+ cx: size / 2,
958
+ cy: size / 2,
959
+ r: (size - 4) / 2
960
+ }
961
+ )
962
+ ]
963
+ }
964
+ )
965
+ }
966
+ );
967
+ }
968
+ case "fill": {
969
+ const progressPercentage = itemContext.fileState.progress;
970
+ const topInset = 100 - progressPercentage;
971
+ return /* @__PURE__ */ jsx(
972
+ ItemProgressPrimitive,
973
+ {
974
+ role: "progressbar",
975
+ "aria-valuemin": 0,
976
+ "aria-valuemax": 100,
977
+ "aria-valuenow": progressPercentage,
978
+ "aria-valuetext": `${progressPercentage}%`,
979
+ "aria-labelledby": itemContext.nameId,
980
+ "data-slot": "file-upload-progress",
981
+ ...progressProps,
982
+ className: cn(
983
+ "absolute inset-0 bg-primary/50 transition-[clip-path] duration-300 ease-linear",
984
+ className
985
+ ),
986
+ style: {
987
+ clipPath: `inset(${topInset}% 0% 0% 0%)`
988
+ }
989
+ }
990
+ );
991
+ }
992
+ default:
993
+ return /* @__PURE__ */ jsx(
994
+ ItemProgressPrimitive,
995
+ {
996
+ role: "progressbar",
997
+ "aria-valuemin": 0,
998
+ "aria-valuemax": 100,
999
+ "aria-valuenow": itemContext.fileState.progress,
1000
+ "aria-valuetext": `${itemContext.fileState.progress}%`,
1001
+ "aria-labelledby": itemContext.nameId,
1002
+ "data-slot": "file-upload-progress",
1003
+ ...progressProps,
1004
+ className: cn(
1005
+ "relative h-1.5 w-full overflow-hidden rounded-full bg-primary/20",
1006
+ className
1007
+ ),
1008
+ children: /* @__PURE__ */ jsx(
1009
+ "div",
1010
+ {
1011
+ className: "h-full w-full flex-1 bg-primary transition-transform duration-300 ease-linear",
1012
+ style: {
1013
+ transform: `translateX(-${100 - itemContext.fileState.progress}%)`
1014
+ }
1015
+ }
1016
+ )
1017
+ }
1018
+ );
1019
+ }
1020
+ }
1021
+ function FileUploadItemDelete(props) {
1022
+ const { asChild, onClick: onClickProp, ...deleteProps } = props;
1023
+ const store = useStoreContext(ITEM_DELETE_NAME);
1024
+ const itemContext = useFileUploadItemContext(ITEM_DELETE_NAME);
1025
+ const onClick = React4.useCallback(
1026
+ (event) => {
1027
+ onClickProp?.(event);
1028
+ if (!itemContext.fileState || event.defaultPrevented) return;
1029
+ store.dispatch({
1030
+ type: "REMOVE_FILE",
1031
+ file: itemContext.fileState.file
1032
+ });
1033
+ },
1034
+ [store, itemContext.fileState, onClickProp]
1035
+ );
1036
+ if (!itemContext.fileState) return null;
1037
+ const ItemDeletePrimitive = asChild ? Slot : "button";
1038
+ return /* @__PURE__ */ jsx(
1039
+ ItemDeletePrimitive,
1040
+ {
1041
+ type: "button",
1042
+ "aria-controls": itemContext.id,
1043
+ "aria-describedby": itemContext.nameId,
1044
+ "data-slot": "file-upload-item-delete",
1045
+ ...deleteProps,
1046
+ onClick
1047
+ }
1048
+ );
1049
+ }
1050
+ function FileUploadClear(props) {
1051
+ const {
1052
+ asChild,
1053
+ forceMount,
1054
+ disabled,
1055
+ onClick: onClickProp,
1056
+ ...clearProps
1057
+ } = props;
1058
+ const context = useFileUploadContext(CLEAR_NAME);
1059
+ const store = useStoreContext(CLEAR_NAME);
1060
+ const fileCount = useStore((state) => state.files.size);
1061
+ const isDisabled = disabled || context.disabled;
1062
+ const onClick = React4.useCallback(
1063
+ (event) => {
1064
+ onClickProp?.(event);
1065
+ if (event.defaultPrevented) return;
1066
+ store.dispatch({ type: "CLEAR" });
1067
+ },
1068
+ [store, onClickProp]
1069
+ );
1070
+ const shouldRender = forceMount || fileCount > 0;
1071
+ if (!shouldRender) return null;
1072
+ const ClearPrimitive = asChild ? Slot : "button";
1073
+ return /* @__PURE__ */ jsx(
1074
+ ClearPrimitive,
1075
+ {
1076
+ type: "button",
1077
+ "aria-controls": context.listId,
1078
+ "data-slot": "file-upload-clear",
1079
+ "data-disabled": isDisabled ? "" : void 0,
1080
+ ...clearProps,
1081
+ disabled: isDisabled,
1082
+ onClick
1083
+ }
1084
+ );
1085
+ }
1086
+
1087
+ export { FileUpload, FileUploadClear, FileUploadDropzone, FileUploadItem, FileUploadItemDelete, FileUploadItemMetadata, FileUploadItemPreview, FileUploadItemProgress, FileUploadList, FileUploadTrigger, useStore as useFileUpload };
1088
+ //# sourceMappingURL=file-upload.js.map
1089
+ //# sourceMappingURL=file-upload.js.map