@px-ui/ui 1.0.10 → 1.1.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 (286) hide show
  1. package/dist/{avatar-CbuG-kqF.d.ts → avatar-DTxH_yTY.d.ts} +6 -6
  2. package/dist/{avatar-CbuG-kqF.d.ts.map → avatar-DTxH_yTY.d.ts.map} +1 -1
  3. package/dist/{avatar-Bb0tx0Hn.js → avatar-DnDnGmSj.js} +3 -3
  4. package/dist/{avatar-Bb0tx0Hn.js.map → avatar-DnDnGmSj.js.map} +1 -1
  5. package/dist/{button-BkzvdmIX.d.ts → button-Cfd9X6pX.d.ts} +7 -7
  6. package/dist/{button-BkzvdmIX.d.ts.map → button-Cfd9X6pX.d.ts.map} +1 -1
  7. package/dist/{button-hBUFMmsZ.js → button-DnHwqwy0.js} +2 -2
  8. package/dist/{button-hBUFMmsZ.js.map → button-DnHwqwy0.js.map} +1 -1
  9. package/dist/checkbox-CwkX29tL.js +22 -0
  10. package/dist/checkbox-CwkX29tL.js.map +1 -0
  11. package/dist/collapsible-DsrYXIW5.js +28 -0
  12. package/dist/collapsible-DsrYXIW5.js.map +1 -0
  13. package/dist/{combobox-CHkmVNZ2.js → combobox-5IAivvXw.js} +8 -8
  14. package/dist/{combobox-CHkmVNZ2.js.map → combobox-5IAivvXw.js.map} +1 -1
  15. package/dist/{combobox-C5txQ2La.d.ts → combobox-BBMYGrI2.d.ts} +19 -19
  16. package/dist/{combobox-C5txQ2La.d.ts.map → combobox-BBMYGrI2.d.ts.map} +1 -1
  17. package/dist/components/accordion.d.ts +5 -5
  18. package/dist/components/accordion.d.ts.map +1 -1
  19. package/dist/components/accordion.js +1 -1
  20. package/dist/components/alert-dialog.d.ts +14 -14
  21. package/dist/components/alert-dialog.js +2 -2
  22. package/dist/components/alert.d.ts +7 -7
  23. package/dist/components/alert.js +1 -1
  24. package/dist/components/aspect-ratio.d.ts +2 -2
  25. package/dist/components/aspect-ratio.d.ts.map +1 -1
  26. package/dist/components/aspect-ratio.js +1 -1
  27. package/dist/components/attachment.d.ts +64 -0
  28. package/dist/components/attachment.d.ts.map +1 -0
  29. package/dist/components/attachment.js +107 -0
  30. package/dist/components/attachment.js.map +1 -0
  31. package/dist/components/avatar-group.d.ts +4 -4
  32. package/dist/components/avatar-group.d.ts.map +1 -1
  33. package/dist/components/avatar-group.js +4 -4
  34. package/dist/components/avatar.d.ts +1 -1
  35. package/dist/components/avatar.js +3 -3
  36. package/dist/components/badge.d.ts +1 -1
  37. package/dist/components/badge.js +1 -1
  38. package/dist/components/breadcrumb.d.ts +7 -7
  39. package/dist/components/breadcrumb.js +1 -1
  40. package/dist/components/bubble.d.ts +39 -0
  41. package/dist/components/bubble.d.ts.map +1 -0
  42. package/dist/components/bubble.js +76 -0
  43. package/dist/components/bubble.js.map +1 -0
  44. package/dist/components/button-group.d.ts +6 -6
  45. package/dist/components/button-group.js +2 -2
  46. package/dist/components/button.d.ts +1 -1
  47. package/dist/components/button.js +2 -2
  48. package/dist/components/calendar.d.ts +4 -4
  49. package/dist/components/calendar.js +2 -2
  50. package/dist/components/card.d.ts +8 -8
  51. package/dist/components/card.js +1 -1
  52. package/dist/components/carousel.d.ts +7 -7
  53. package/dist/components/carousel.js +2 -2
  54. package/dist/components/chart.d.ts +5 -5
  55. package/dist/components/chart.js +1 -1
  56. package/dist/components/checkbox.d.ts +2 -2
  57. package/dist/components/checkbox.d.ts.map +1 -1
  58. package/dist/components/checkbox.js +3 -21
  59. package/dist/components/collapsible.d.ts +4 -4
  60. package/dist/components/collapsible.js +3 -27
  61. package/dist/components/combobox.d.ts +2 -2
  62. package/dist/components/combobox.js +11 -11
  63. package/dist/components/command.d.ts +11 -11
  64. package/dist/components/command.js +6 -6
  65. package/dist/components/context-menu.d.ts +16 -16
  66. package/dist/components/context-menu.d.ts.map +1 -1
  67. package/dist/components/context-menu.js +1 -1
  68. package/dist/components/currency-select-field.d.ts +4 -4
  69. package/dist/components/currency-select-field.js +11 -11
  70. package/dist/components/dialog.d.ts +11 -11
  71. package/dist/components/dialog.js +3 -3
  72. package/dist/components/direction.js +1 -1
  73. package/dist/components/drawer.d.ts +11 -11
  74. package/dist/components/drawer.js +1 -1
  75. package/dist/components/dropdown-menu.d.ts +1 -1
  76. package/dist/components/dropdown-menu.js +2 -2
  77. package/dist/components/editor-output.d.ts +87 -0
  78. package/dist/components/editor-output.d.ts.map +1 -0
  79. package/dist/components/editor-output.js +158 -0
  80. package/dist/components/editor-output.js.map +1 -0
  81. package/dist/components/empty.d.ts +9 -9
  82. package/dist/components/empty.js +3 -61
  83. package/dist/components/field.d.ts +15 -15
  84. package/dist/components/field.js +3 -3
  85. package/dist/components/file-upload-field.d.ts +3 -3
  86. package/dist/components/file-upload-field.js +5 -5
  87. package/dist/components/file-upload.d.ts +3 -3
  88. package/dist/components/file-upload.js +4 -4
  89. package/dist/components/hover-card.d.ts +4 -4
  90. package/dist/components/hover-card.js +1 -1
  91. package/dist/components/icon.d.ts +83 -0
  92. package/dist/components/icon.d.ts.map +1 -0
  93. package/dist/components/icon.js +188 -0
  94. package/dist/components/icon.js.map +1 -0
  95. package/dist/components/input-group.d.ts +9 -9
  96. package/dist/components/input-group.js +5 -5
  97. package/dist/components/input-otp.d.ts +5 -5
  98. package/dist/components/input-otp.js +1 -1
  99. package/dist/components/input.d.ts +1 -1
  100. package/dist/components/input.js +2 -2
  101. package/dist/components/item.d.ts +14 -14
  102. package/dist/components/item.d.ts.map +1 -1
  103. package/dist/components/item.js +2 -2
  104. package/dist/components/kbd.d.ts +3 -3
  105. package/dist/components/kbd.js +1 -1
  106. package/dist/components/label.d.ts +1 -1
  107. package/dist/components/label.js +2 -2
  108. package/dist/components/marker.d.ts +27 -0
  109. package/dist/components/marker.d.ts.map +1 -0
  110. package/dist/components/marker.js +46 -0
  111. package/dist/components/marker.js.map +1 -0
  112. package/dist/components/menubar.d.ts +18 -18
  113. package/dist/components/menubar.d.ts.map +1 -1
  114. package/dist/components/menubar.js +7 -7
  115. package/dist/components/menubar.js.map +1 -1
  116. package/dist/components/message-scroller.d.ts +36 -0
  117. package/dist/components/message-scroller.d.ts.map +1 -0
  118. package/dist/components/message-scroller.js +63 -0
  119. package/dist/components/message-scroller.js.map +1 -0
  120. package/dist/components/message.d.ts +34 -0
  121. package/dist/components/message.d.ts.map +1 -0
  122. package/dist/components/message.js +52 -0
  123. package/dist/components/message.js.map +1 -0
  124. package/dist/components/native-select.d.ts +4 -4
  125. package/dist/components/native-select.js +1 -1
  126. package/dist/components/navigation-menu.d.ts +11 -11
  127. package/dist/components/navigation-menu.js +1 -1
  128. package/dist/components/pagination.d.ts +9 -9
  129. package/dist/components/pagination.d.ts.map +1 -1
  130. package/dist/components/pagination.js +2 -2
  131. package/dist/components/phone-input.d.ts +2 -2
  132. package/dist/components/phone-input.js +1 -1
  133. package/dist/components/popover.d.ts +7 -7
  134. package/dist/components/popover.d.ts.map +1 -1
  135. package/dist/components/popover.js +2 -2
  136. package/dist/components/progress.d.ts +6 -6
  137. package/dist/components/progress.js +1 -1
  138. package/dist/components/radio-group.d.ts +3 -3
  139. package/dist/components/radio-group.js +1 -1
  140. package/dist/components/resizable.d.ts +4 -4
  141. package/dist/components/resizable.js +1 -1
  142. package/dist/components/rich-text-editor.d.ts +204 -0
  143. package/dist/components/rich-text-editor.d.ts.map +1 -0
  144. package/dist/components/rich-text-editor.js +359 -0
  145. package/dist/components/rich-text-editor.js.map +1 -0
  146. package/dist/components/scroll-area.d.ts +13 -3
  147. package/dist/components/scroll-area.d.ts.map +1 -1
  148. package/dist/components/scroll-area.js +3 -38
  149. package/dist/components/select.d.ts +10 -10
  150. package/dist/components/select.js +1 -1
  151. package/dist/components/separator.d.ts +1 -1
  152. package/dist/components/separator.js +2 -2
  153. package/dist/components/sheet.d.ts +9 -9
  154. package/dist/components/sheet.js +3 -3
  155. package/dist/components/sidebar.d.ts +26 -26
  156. package/dist/components/sidebar.d.ts.map +1 -1
  157. package/dist/components/sidebar.js +8 -8
  158. package/dist/components/skeleton.d.ts +2 -2
  159. package/dist/components/skeleton.js +2 -2
  160. package/dist/components/slider.d.ts +2 -2
  161. package/dist/components/slider.js +1 -1
  162. package/dist/components/sortable-list.d.ts +153 -0
  163. package/dist/components/sortable-list.d.ts.map +1 -0
  164. package/dist/components/sortable-list.js +191 -0
  165. package/dist/components/sortable-list.js.map +1 -0
  166. package/dist/components/spinner.d.ts +2 -2
  167. package/dist/components/spinner.js +2 -2
  168. package/dist/components/stepper.d.ts +171 -0
  169. package/dist/components/stepper.d.ts.map +1 -0
  170. package/dist/components/stepper.js +281 -0
  171. package/dist/components/stepper.js.map +1 -0
  172. package/dist/components/switch.d.ts +2 -2
  173. package/dist/components/switch.js +1 -1
  174. package/dist/components/table.d.ts +9 -9
  175. package/dist/components/table.js +1 -1
  176. package/dist/components/tabs.d.ts +8 -8
  177. package/dist/components/tabs.d.ts.map +1 -1
  178. package/dist/components/tabs.js +1 -1
  179. package/dist/components/textarea.d.ts +2 -2
  180. package/dist/components/textarea.js +2 -2
  181. package/dist/components/toast.d.ts +1 -1
  182. package/dist/components/toast.js +2 -2
  183. package/dist/components/toggle-group.d.ts +4 -4
  184. package/dist/components/toggle-group.js +2 -2
  185. package/dist/components/toggle.d.ts +1 -1
  186. package/dist/components/toggle.js +2 -2
  187. package/dist/components/tooltip.d.ts +1 -1
  188. package/dist/components/tooltip.js +2 -2
  189. package/dist/components/tree-select.d.ts +192 -0
  190. package/dist/components/tree-select.d.ts.map +1 -0
  191. package/dist/components/tree-select.js +421 -0
  192. package/dist/components/tree-select.js.map +1 -0
  193. package/dist/{dialog-DrdXva1a.js → dialog-DuGJUPQl.js} +3 -3
  194. package/dist/{dialog-DrdXva1a.js.map → dialog-DuGJUPQl.js.map} +1 -1
  195. package/dist/{dropdown-menu-CcumvwhM.js → dropdown-menu-BWEfcvmP.js} +19 -19
  196. package/dist/{dropdown-menu-CcumvwhM.js.map → dropdown-menu-BWEfcvmP.js.map} +1 -1
  197. package/dist/{dropdown-menu-BC7zFA2L.d.ts → dropdown-menu-DGgfWYrK.d.ts} +17 -17
  198. package/dist/{dropdown-menu-BC7zFA2L.d.ts.map → dropdown-menu-DGgfWYrK.d.ts.map} +1 -1
  199. package/dist/empty-U4zrLmFU.js +62 -0
  200. package/dist/empty-U4zrLmFU.js.map +1 -0
  201. package/dist/{file-upload-DoGu67Bu.d.ts → file-upload-BvAtAxLc.d.ts} +10 -10
  202. package/dist/{file-upload-DoGu67Bu.d.ts.map → file-upload-BvAtAxLc.d.ts.map} +1 -1
  203. package/dist/{file-upload-DeCIv13t.js → file-upload-DU5FAkHm.js} +4 -4
  204. package/dist/{file-upload-DeCIv13t.js.map → file-upload-DU5FAkHm.js.map} +1 -1
  205. package/dist/hooks/use-async-options.d.ts +1 -1
  206. package/dist/hooks/use-async-options.js +1 -1
  207. package/dist/hooks/use-debounce.js +1 -1
  208. package/dist/hooks/use-file-upload.d.ts +1 -1
  209. package/dist/hooks/use-file-upload.js +1 -1
  210. package/dist/hooks/use-infinite-scroll.d.ts +1 -1
  211. package/dist/hooks/use-infinite-scroll.js +2 -2
  212. package/dist/hooks/use-intersection-observer.d.ts +1 -1
  213. package/dist/hooks/use-intersection-observer.js +1 -1
  214. package/dist/hooks/use-mobile.js +1 -1
  215. package/dist/{input-CoP6CeA5.d.ts → input-BExbcSu4.d.ts} +3 -3
  216. package/dist/input-BExbcSu4.d.ts.map +1 -0
  217. package/dist/{input-group-DqEkmpXW.js → input-group-B5PMRYld.js} +5 -5
  218. package/dist/{input-group-DqEkmpXW.js.map → input-group-B5PMRYld.js.map} +1 -1
  219. package/dist/{input-8jqdnUZl.js → input-jIoNIdLQ.js} +2 -2
  220. package/dist/{input-8jqdnUZl.js.map → input-jIoNIdLQ.js.map} +1 -1
  221. package/dist/label-BFg2hxuL.d.ts +11 -0
  222. package/dist/label-BFg2hxuL.d.ts.map +1 -0
  223. package/dist/{label-AaH9ZYCZ.js → label-DsRhOKY_.js} +2 -2
  224. package/dist/{label-AaH9ZYCZ.js.map → label-DsRhOKY_.js.map} +1 -1
  225. package/dist/lib/utils.js +1 -1
  226. package/dist/{popover-C9D43EuT.js → popover-BGkU46G7.js} +2 -2
  227. package/dist/{popover-C9D43EuT.js.map → popover-BGkU46G7.js.map} +1 -1
  228. package/dist/providers/px-ui-provider.d.ts +4 -4
  229. package/dist/providers/px-ui-provider.d.ts.map +1 -1
  230. package/dist/providers/px-ui-provider.js +4 -4
  231. package/dist/scroll-area-mNVMQ0Of.js +40 -0
  232. package/dist/scroll-area-mNVMQ0Of.js.map +1 -0
  233. package/dist/{separator-BS3ilczC.js → separator-D0bew2D_.js} +2 -2
  234. package/dist/{separator-BS3ilczC.js.map → separator-D0bew2D_.js.map} +1 -1
  235. package/dist/{separator-D0hWdzUT.d.ts → separator-Df76guaT.d.ts} +3 -3
  236. package/dist/{separator-D0hWdzUT.d.ts.map → separator-Df76guaT.d.ts.map} +1 -1
  237. package/dist/{sheet-CLjNDrfL.js → sheet-BB23q6wd.js} +3 -3
  238. package/dist/{sheet-CLjNDrfL.js.map → sheet-BB23q6wd.js.map} +1 -1
  239. package/dist/{skeleton-BcIxI5Wq.js → skeleton-knxLhbA5.js} +2 -2
  240. package/dist/{skeleton-BcIxI5Wq.js.map → skeleton-knxLhbA5.js.map} +1 -1
  241. package/dist/{spinner-Bo0sUZEg.js → spinner-9MdgLDTZ.js} +2 -2
  242. package/dist/{spinner-Bo0sUZEg.js.map → spinner-9MdgLDTZ.js.map} +1 -1
  243. package/dist/styles.css +665 -1
  244. package/dist/{textarea-Cq0o323P.js → textarea-hZg0gA8u.js} +2 -2
  245. package/dist/{textarea-Cq0o323P.js.map → textarea-hZg0gA8u.js.map} +1 -1
  246. package/dist/{toast-COWAQbIk.js → toast-BdxoP8vz.js} +2 -2
  247. package/dist/{toast-COWAQbIk.js.map → toast-BdxoP8vz.js.map} +1 -1
  248. package/dist/{toast-DkzzdXGU.d.ts → toast-C5FRpq1P.d.ts} +4 -4
  249. package/dist/{toast-DkzzdXGU.d.ts.map → toast-C5FRpq1P.d.ts.map} +1 -1
  250. package/dist/{toggle-lqIyJptS.js → toggle-BZXrLBLK.js} +2 -2
  251. package/dist/{toggle-lqIyJptS.js.map → toggle-BZXrLBLK.js.map} +1 -1
  252. package/dist/{toggle-Dq3ftPFj.d.ts → toggle-CyTngkhT.d.ts} +6 -6
  253. package/dist/{toggle-Dq3ftPFj.d.ts.map → toggle-CyTngkhT.d.ts.map} +1 -1
  254. package/dist/{tooltip-DBoqfN9z.d.ts → tooltip-CkX3CD71.d.ts} +6 -6
  255. package/dist/{tooltip-DBoqfN9z.d.ts.map → tooltip-CkX3CD71.d.ts.map} +1 -1
  256. package/dist/{tooltip-DkPxCJIL.js → tooltip-Dsfn_zZD.js} +2 -2
  257. package/dist/{tooltip-DkPxCJIL.js.map → tooltip-Dsfn_zZD.js.map} +1 -1
  258. package/dist/{use-async-options-Cu5T43vj.d.ts → use-async-options-DdyHJxHh.d.ts} +1 -1
  259. package/dist/{use-async-options-Cu5T43vj.d.ts.map → use-async-options-DdyHJxHh.d.ts.map} +1 -1
  260. package/dist/{use-async-options-CcsImGX4.js → use-async-options-tueAuVs_.js} +1 -1
  261. package/dist/{use-async-options-CcsImGX4.js.map → use-async-options-tueAuVs_.js.map} +1 -1
  262. package/dist/{use-debounce-_qaEZqtt.js → use-debounce-7gIeOwla.js} +1 -1
  263. package/dist/{use-debounce-_qaEZqtt.js.map → use-debounce-7gIeOwla.js.map} +1 -1
  264. package/dist/{use-file-upload-yy-xLBtn.d.ts → use-file-upload-Bc7CyQ7O.d.ts} +1 -1
  265. package/dist/{use-file-upload-yy-xLBtn.d.ts.map → use-file-upload-Bc7CyQ7O.d.ts.map} +1 -1
  266. package/dist/{use-file-upload-Dxrej28u.js → use-file-upload-DQD1vY_Z.js} +1 -1
  267. package/dist/{use-file-upload-Dxrej28u.js.map → use-file-upload-DQD1vY_Z.js.map} +1 -1
  268. package/dist/{use-infinite-scroll-CpbhGGT5.js → use-infinite-scroll-HpeMA2MK.js} +2 -2
  269. package/dist/{use-infinite-scroll-CpbhGGT5.js.map → use-infinite-scroll-HpeMA2MK.js.map} +1 -1
  270. package/dist/{use-intersection-observer-C2xDq2SW.d.ts → use-intersection-observer-DNPextJs.d.ts} +1 -1
  271. package/dist/{use-intersection-observer-C2xDq2SW.d.ts.map → use-intersection-observer-DNPextJs.d.ts.map} +1 -1
  272. package/dist/{use-intersection-observer-CZfnep4z.js → use-intersection-observer-rlKEjyL1.js} +1 -1
  273. package/dist/{use-intersection-observer-CZfnep4z.js.map → use-intersection-observer-rlKEjyL1.js.map} +1 -1
  274. package/dist/{use-mobile-l5ebOdQl.js → use-mobile-DUqQzj2D.js} +1 -1
  275. package/dist/{use-mobile-l5ebOdQl.js.map → use-mobile-DUqQzj2D.js.map} +1 -1
  276. package/dist/{utils-mWJR2N24.js → utils-DUlptRpf.js} +1 -1
  277. package/dist/{utils-mWJR2N24.js.map → utils-DUlptRpf.js.map} +1 -1
  278. package/package.json +81 -1
  279. package/dist/components/checkbox.js.map +0 -1
  280. package/dist/components/collapsible.js.map +0 -1
  281. package/dist/components/empty.js.map +0 -1
  282. package/dist/components/scroll-area.js.map +0 -1
  283. package/dist/input-CoP6CeA5.d.ts.map +0 -1
  284. package/dist/label-Dw4Hcz5k.d.ts +0 -11
  285. package/dist/label-Dw4Hcz5k.d.ts.map +0 -1
  286. /package/dist/{direction-BKSh6e6q.js → direction-DFPbwDSF.js} +0 -0
@@ -1,36 +1,36 @@
1
- import { t as cn } from "./utils-mWJR2N24.js";
1
+ import { t as cn } from "./utils-DUlptRpf.js";
2
2
  import { CheckIcon, ChevronRightIcon } from "lucide-react";
3
3
  import { jsx, jsxs } from "react/jsx-runtime";
4
4
  import "react";
5
- import { Menu } from "@base-ui/react/menu";
5
+ import { Menu as Menu$1 } from "@base-ui/react/menu";
6
6
 
7
7
  //#region src/components/dropdown-menu.tsx
8
8
  function DropdownMenu({ ...props }) {
9
- return /* @__PURE__ */ jsx(Menu.Root, {
9
+ return /* @__PURE__ */ jsx(Menu$1.Root, {
10
10
  "data-slot": "dropdown-menu",
11
11
  ...props
12
12
  });
13
13
  }
14
14
  function DropdownMenuPortal({ ...props }) {
15
- return /* @__PURE__ */ jsx(Menu.Portal, {
15
+ return /* @__PURE__ */ jsx(Menu$1.Portal, {
16
16
  "data-slot": "dropdown-menu-portal",
17
17
  ...props
18
18
  });
19
19
  }
20
20
  function DropdownMenuTrigger({ ...props }) {
21
- return /* @__PURE__ */ jsx(Menu.Trigger, {
21
+ return /* @__PURE__ */ jsx(Menu$1.Trigger, {
22
22
  "data-slot": "dropdown-menu-trigger",
23
23
  ...props
24
24
  });
25
25
  }
26
26
  function DropdownMenuContent({ align = "start", alignOffset = 0, side = "bottom", sideOffset = 4, className, ...props }) {
27
- return /* @__PURE__ */ jsx(Menu.Portal, { children: /* @__PURE__ */ jsx(Menu.Positioner, {
27
+ return /* @__PURE__ */ jsx(Menu$1.Portal, { children: /* @__PURE__ */ jsx(Menu$1.Positioner, {
28
28
  className: "isolate z-50 outline-none",
29
29
  align,
30
30
  alignOffset,
31
31
  side,
32
32
  sideOffset,
33
- children: /* @__PURE__ */ jsx(Menu.Popup, {
33
+ children: /* @__PURE__ */ jsx(Menu$1.Popup, {
34
34
  "data-slot": "dropdown-menu-content",
35
35
  className: cn("z-50 max-h-(--available-height) w-(--anchor-width) min-w-32 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-md bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 outline-none data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-start-2 data-[side=inline-start]:slide-in-from-end-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:overflow-hidden data-closed:fade-out-0 data-closed:zoom-out-95", className),
36
36
  ...props
@@ -38,13 +38,13 @@ function DropdownMenuContent({ align = "start", alignOffset = 0, side = "bottom"
38
38
  }) });
39
39
  }
40
40
  function DropdownMenuGroup({ ...props }) {
41
- return /* @__PURE__ */ jsx(Menu.Group, {
41
+ return /* @__PURE__ */ jsx(Menu$1.Group, {
42
42
  "data-slot": "dropdown-menu-group",
43
43
  ...props
44
44
  });
45
45
  }
46
46
  function DropdownMenuLabel({ className, inset, ...props }) {
47
- return /* @__PURE__ */ jsx(Menu.GroupLabel, {
47
+ return /* @__PURE__ */ jsx(Menu$1.GroupLabel, {
48
48
  "data-slot": "dropdown-menu-label",
49
49
  "data-inset": inset,
50
50
  className: cn("px-2 py-1.5 text-xs font-medium text-muted-foreground data-inset:ps-8", className),
@@ -52,7 +52,7 @@ function DropdownMenuLabel({ className, inset, ...props }) {
52
52
  });
53
53
  }
54
54
  function DropdownMenuItem({ className, inset, variant = "default", ...props }) {
55
- return /* @__PURE__ */ jsx(Menu.Item, {
55
+ return /* @__PURE__ */ jsx(Menu$1.Item, {
56
56
  "data-slot": "dropdown-menu-item",
57
57
  "data-inset": inset,
58
58
  "data-variant": variant,
@@ -61,13 +61,13 @@ function DropdownMenuItem({ className, inset, variant = "default", ...props }) {
61
61
  });
62
62
  }
63
63
  function DropdownMenuSub({ ...props }) {
64
- return /* @__PURE__ */ jsx(Menu.SubmenuRoot, {
64
+ return /* @__PURE__ */ jsx(Menu$1.SubmenuRoot, {
65
65
  "data-slot": "dropdown-menu-sub",
66
66
  ...props
67
67
  });
68
68
  }
69
69
  function DropdownMenuSubTrigger({ className, inset, children, ...props }) {
70
- return /* @__PURE__ */ jsxs(Menu.SubmenuTrigger, {
70
+ return /* @__PURE__ */ jsxs(Menu$1.SubmenuTrigger, {
71
71
  "data-slot": "dropdown-menu-sub-trigger",
72
72
  "data-inset": inset,
73
73
  className: cn("flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:ps-8 data-popup-open:bg-accent data-popup-open:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
@@ -87,7 +87,7 @@ function DropdownMenuSubContent({ align = "start", alignOffset = -3, side = "inl
87
87
  });
88
88
  }
89
89
  function DropdownMenuCheckboxItem({ className, children, checked, inset, ...props }) {
90
- return /* @__PURE__ */ jsxs(Menu.CheckboxItem, {
90
+ return /* @__PURE__ */ jsxs(Menu$1.CheckboxItem, {
91
91
  "data-slot": "dropdown-menu-checkbox-item",
92
92
  "data-inset": inset,
93
93
  className: cn("relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pe-8 ps-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:ps-8 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
@@ -96,18 +96,18 @@ function DropdownMenuCheckboxItem({ className, children, checked, inset, ...prop
96
96
  children: [/* @__PURE__ */ jsx("span", {
97
97
  className: "pointer-events-none absolute end-2 flex items-center justify-center",
98
98
  "data-slot": "dropdown-menu-checkbox-item-indicator",
99
- children: /* @__PURE__ */ jsx(Menu.CheckboxItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, {}) })
99
+ children: /* @__PURE__ */ jsx(Menu$1.CheckboxItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, {}) })
100
100
  }), children]
101
101
  });
102
102
  }
103
103
  function DropdownMenuRadioGroup({ ...props }) {
104
- return /* @__PURE__ */ jsx(Menu.RadioGroup, {
104
+ return /* @__PURE__ */ jsx(Menu$1.RadioGroup, {
105
105
  "data-slot": "dropdown-menu-radio-group",
106
106
  ...props
107
107
  });
108
108
  }
109
109
  function DropdownMenuRadioItem({ className, children, inset, ...props }) {
110
- return /* @__PURE__ */ jsxs(Menu.RadioItem, {
110
+ return /* @__PURE__ */ jsxs(Menu$1.RadioItem, {
111
111
  "data-slot": "dropdown-menu-radio-item",
112
112
  "data-inset": inset,
113
113
  className: cn("relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pe-8 ps-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:ps-8 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
@@ -115,12 +115,12 @@ function DropdownMenuRadioItem({ className, children, inset, ...props }) {
115
115
  children: [/* @__PURE__ */ jsx("span", {
116
116
  className: "pointer-events-none absolute end-2 flex items-center justify-center",
117
117
  "data-slot": "dropdown-menu-radio-item-indicator",
118
- children: /* @__PURE__ */ jsx(Menu.RadioItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, {}) })
118
+ children: /* @__PURE__ */ jsx(Menu$1.RadioItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, {}) })
119
119
  }), children]
120
120
  });
121
121
  }
122
122
  function DropdownMenuSeparator({ className, ...props }) {
123
- return /* @__PURE__ */ jsx(Menu.Separator, {
123
+ return /* @__PURE__ */ jsx(Menu$1.Separator, {
124
124
  "data-slot": "dropdown-menu-separator",
125
125
  className: cn("-mx-1 my-1 h-px bg-border", className),
126
126
  ...props
@@ -136,4 +136,4 @@ function DropdownMenuShortcut({ className, ...props }) {
136
136
 
137
137
  //#endregion
138
138
  export { DropdownMenuItem as a, DropdownMenuRadioGroup as c, DropdownMenuShortcut as d, DropdownMenuSub as f, DropdownMenuTrigger as h, DropdownMenuGroup as i, DropdownMenuRadioItem as l, DropdownMenuSubTrigger as m, DropdownMenuCheckboxItem as n, DropdownMenuLabel as o, DropdownMenuSubContent as p, DropdownMenuContent as r, DropdownMenuPortal as s, DropdownMenu as t, DropdownMenuSeparator as u };
139
- //# sourceMappingURL=dropdown-menu-CcumvwhM.js.map
139
+ //# sourceMappingURL=dropdown-menu-BWEfcvmP.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dropdown-menu-CcumvwhM.js","names":["MenuPrimitive"],"sources":["../src/components/dropdown-menu.tsx"],"sourcesContent":["import * as React from \"react\"\nimport { Menu as MenuPrimitive } from \"@base-ui/react/menu\"\n\nimport { cn } from \"@px-ui/ui/lib/utils\"\nimport { ChevronRightIcon, CheckIcon } from \"lucide-react\"\n\nfunction DropdownMenu({ ...props }: MenuPrimitive.Root.Props) {\n return <MenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />\n}\n\nfunction DropdownMenuPortal({ ...props }: MenuPrimitive.Portal.Props) {\n return <MenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />\n}\n\nfunction DropdownMenuTrigger({ ...props }: MenuPrimitive.Trigger.Props) {\n return <MenuPrimitive.Trigger data-slot=\"dropdown-menu-trigger\" {...props} />\n}\n\nfunction DropdownMenuContent({\n align = \"start\",\n alignOffset = 0,\n side = \"bottom\",\n sideOffset = 4,\n className,\n ...props\n}: MenuPrimitive.Popup.Props &\n Pick<\n MenuPrimitive.Positioner.Props,\n \"align\" | \"alignOffset\" | \"side\" | \"sideOffset\"\n >) {\n return (\n <MenuPrimitive.Portal>\n <MenuPrimitive.Positioner\n className=\"isolate z-50 outline-none\"\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n >\n <MenuPrimitive.Popup\n data-slot=\"dropdown-menu-content\"\n className={cn(\"z-50 max-h-(--available-height) w-(--anchor-width) min-w-32 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-md bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 outline-none data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-start-2 data-[side=inline-start]:slide-in-from-end-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:overflow-hidden data-closed:fade-out-0 data-closed:zoom-out-95\", className )}\n {...props}\n />\n </MenuPrimitive.Positioner>\n </MenuPrimitive.Portal>\n )\n}\n\nfunction DropdownMenuGroup({ ...props }: MenuPrimitive.Group.Props) {\n return <MenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: MenuPrimitive.GroupLabel.Props & {\n inset?: boolean\n}) {\n return (\n <MenuPrimitive.GroupLabel\n data-slot=\"dropdown-menu-label\"\n data-inset={inset}\n className={cn(\n \"px-2 py-1.5 text-xs font-medium text-muted-foreground data-inset:ps-8\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: MenuPrimitive.Item.Props & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n <MenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"group/dropdown-menu-item relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:ps-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-[variant=destructive]:*:[svg]:text-destructive\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSub({ ...props }: MenuPrimitive.SubmenuRoot.Props) {\n return <MenuPrimitive.SubmenuRoot data-slot=\"dropdown-menu-sub\" {...props} />\n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: MenuPrimitive.SubmenuTrigger.Props & {\n inset?: boolean\n}) {\n return (\n <MenuPrimitive.SubmenuTrigger\n data-slot=\"dropdown-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:ps-8 data-popup-open:bg-accent data-popup-open:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"rtl:rotate-180 ms-auto\" />\n </MenuPrimitive.SubmenuTrigger>\n )\n}\n\nfunction DropdownMenuSubContent({\n align = \"start\",\n alignOffset = -3,\n side = \"inline-end\",\n sideOffset = 0,\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuContent>) {\n return (\n <DropdownMenuContent\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\"w-auto min-w-[96px] rounded-md bg-popover p-1 text-popover-foreground shadow-lg ring-1 ring-foreground/10 duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95\", className )}\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n inset,\n ...props\n}: MenuPrimitive.CheckboxItem.Props & {\n inset?: boolean\n}) {\n return (\n <MenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n data-inset={inset}\n className={cn(\n \"relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pe-8 ps-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:ps-8 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span\n className=\"pointer-events-none absolute end-2 flex items-center justify-center\"\n data-slot=\"dropdown-menu-checkbox-item-indicator\"\n >\n <MenuPrimitive.CheckboxItemIndicator>\n <CheckIcon\n />\n </MenuPrimitive.CheckboxItemIndicator>\n </span>\n {children}\n </MenuPrimitive.CheckboxItem>\n )\n}\n\nfunction DropdownMenuRadioGroup({ ...props }: MenuPrimitive.RadioGroup.Props) {\n return (\n <MenuPrimitive.RadioGroup\n data-slot=\"dropdown-menu-radio-group\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n inset,\n ...props\n}: MenuPrimitive.RadioItem.Props & {\n inset?: boolean\n}) {\n return (\n <MenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n data-inset={inset}\n className={cn(\n \"relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pe-8 ps-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:ps-8 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n <span\n className=\"pointer-events-none absolute end-2 flex items-center justify-center\"\n data-slot=\"dropdown-menu-radio-item-indicator\"\n >\n <MenuPrimitive.RadioItemIndicator>\n <CheckIcon\n />\n </MenuPrimitive.RadioItemIndicator>\n </span>\n {children}\n </MenuPrimitive.RadioItem>\n )\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: MenuPrimitive.Separator.Props) {\n return (\n <MenuPrimitive.Separator\n data-slot=\"dropdown-menu-separator\"\n className={cn(\"-mx-1 my-1 h-px bg-border\", className)}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn(\n \"ms-auto text-xs tracking-ppx-widest text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n DropdownMenu,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"dropdown-menu-BWEfcvmP.js","names":["MenuPrimitive"],"sources":["../src/components/dropdown-menu.tsx"],"sourcesContent":["import * as React from \"react\"\nimport { Menu as MenuPrimitive } from \"@base-ui/react/menu\"\n\nimport { cn } from \"@px-ui/ui/lib/utils\"\nimport { ChevronRightIcon, CheckIcon } from \"lucide-react\"\n\nfunction DropdownMenu({ ...props }: MenuPrimitive.Root.Props) {\n return <MenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />\n}\n\nfunction DropdownMenuPortal({ ...props }: MenuPrimitive.Portal.Props) {\n return <MenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />\n}\n\nfunction DropdownMenuTrigger({ ...props }: MenuPrimitive.Trigger.Props) {\n return <MenuPrimitive.Trigger data-slot=\"dropdown-menu-trigger\" {...props} />\n}\n\nfunction DropdownMenuContent({\n align = \"start\",\n alignOffset = 0,\n side = \"bottom\",\n sideOffset = 4,\n className,\n ...props\n}: MenuPrimitive.Popup.Props &\n Pick<\n MenuPrimitive.Positioner.Props,\n \"align\" | \"alignOffset\" | \"side\" | \"sideOffset\"\n >) {\n return (\n <MenuPrimitive.Portal>\n <MenuPrimitive.Positioner\n className=\"isolate z-50 outline-none\"\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n >\n <MenuPrimitive.Popup\n data-slot=\"dropdown-menu-content\"\n className={cn(\"z-50 max-h-(--available-height) w-(--anchor-width) min-w-32 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-md bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 outline-none data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-start-2 data-[side=inline-start]:slide-in-from-end-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:overflow-hidden data-closed:fade-out-0 data-closed:zoom-out-95\", className )}\n {...props}\n />\n </MenuPrimitive.Positioner>\n </MenuPrimitive.Portal>\n )\n}\n\nfunction DropdownMenuGroup({ ...props }: MenuPrimitive.Group.Props) {\n return <MenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: MenuPrimitive.GroupLabel.Props & {\n inset?: boolean\n}) {\n return (\n <MenuPrimitive.GroupLabel\n data-slot=\"dropdown-menu-label\"\n data-inset={inset}\n className={cn(\n \"px-2 py-1.5 text-xs font-medium text-muted-foreground data-inset:ps-8\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: MenuPrimitive.Item.Props & {\n inset?: boolean\n variant?: \"default\" | \"destructive\"\n}) {\n return (\n <MenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"group/dropdown-menu-item relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:ps-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-[variant=destructive]:*:[svg]:text-destructive\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSub({ ...props }: MenuPrimitive.SubmenuRoot.Props) {\n return <MenuPrimitive.SubmenuRoot data-slot=\"dropdown-menu-sub\" {...props} />\n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: MenuPrimitive.SubmenuTrigger.Props & {\n inset?: boolean\n}) {\n return (\n <MenuPrimitive.SubmenuTrigger\n data-slot=\"dropdown-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:ps-8 data-popup-open:bg-accent data-popup-open:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"rtl:rotate-180 ms-auto\" />\n </MenuPrimitive.SubmenuTrigger>\n )\n}\n\nfunction DropdownMenuSubContent({\n align = \"start\",\n alignOffset = -3,\n side = \"inline-end\",\n sideOffset = 0,\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuContent>) {\n return (\n <DropdownMenuContent\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\"w-auto min-w-[96px] rounded-md bg-popover p-1 text-popover-foreground shadow-lg ring-1 ring-foreground/10 duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95\", className )}\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n inset,\n ...props\n}: MenuPrimitive.CheckboxItem.Props & {\n inset?: boolean\n}) {\n return (\n <MenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n data-inset={inset}\n className={cn(\n \"relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pe-8 ps-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:ps-8 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span\n className=\"pointer-events-none absolute end-2 flex items-center justify-center\"\n data-slot=\"dropdown-menu-checkbox-item-indicator\"\n >\n <MenuPrimitive.CheckboxItemIndicator>\n <CheckIcon\n />\n </MenuPrimitive.CheckboxItemIndicator>\n </span>\n {children}\n </MenuPrimitive.CheckboxItem>\n )\n}\n\nfunction DropdownMenuRadioGroup({ ...props }: MenuPrimitive.RadioGroup.Props) {\n return (\n <MenuPrimitive.RadioGroup\n data-slot=\"dropdown-menu-radio-group\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n inset,\n ...props\n}: MenuPrimitive.RadioItem.Props & {\n inset?: boolean\n}) {\n return (\n <MenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n data-inset={inset}\n className={cn(\n \"relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pe-8 ps-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:ps-8 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n <span\n className=\"pointer-events-none absolute end-2 flex items-center justify-center\"\n data-slot=\"dropdown-menu-radio-item-indicator\"\n >\n <MenuPrimitive.RadioItemIndicator>\n <CheckIcon\n />\n </MenuPrimitive.RadioItemIndicator>\n </span>\n {children}\n </MenuPrimitive.RadioItem>\n )\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: MenuPrimitive.Separator.Props) {\n return (\n <MenuPrimitive.Separator\n data-slot=\"dropdown-menu-separator\"\n className={cn(\"-mx-1 my-1 h-px bg-border\", className)}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn(\n \"ms-auto text-xs tracking-ppx-widest text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n DropdownMenu,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n}\n"],"mappings":"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"}
@@ -1,17 +1,17 @@
1
- import * as react_jsx_runtime130 from "react/jsx-runtime";
1
+ import * as react_jsx_runtime157 from "react/jsx-runtime";
2
2
  import * as React$1 from "react";
3
3
  import { Menu } from "@base-ui/react/menu";
4
4
 
5
5
  //#region src/components/dropdown-menu.d.ts
6
6
  declare function DropdownMenu({
7
7
  ...props
8
- }: Menu.Root.Props): react_jsx_runtime130.JSX.Element;
8
+ }: Menu.Root.Props): react_jsx_runtime157.JSX.Element;
9
9
  declare function DropdownMenuPortal({
10
10
  ...props
11
- }: Menu.Portal.Props): react_jsx_runtime130.JSX.Element;
11
+ }: Menu.Portal.Props): react_jsx_runtime157.JSX.Element;
12
12
  declare function DropdownMenuTrigger({
13
13
  ...props
14
- }: Menu.Trigger.Props): react_jsx_runtime130.JSX.Element;
14
+ }: Menu.Trigger.Props): react_jsx_runtime157.JSX.Element;
15
15
  declare function DropdownMenuContent({
16
16
  align,
17
17
  alignOffset,
@@ -19,17 +19,17 @@ declare function DropdownMenuContent({
19
19
  sideOffset,
20
20
  className,
21
21
  ...props
22
- }: Menu.Popup.Props & Pick<Menu.Positioner.Props, "align" | "alignOffset" | "side" | "sideOffset">): react_jsx_runtime130.JSX.Element;
22
+ }: Menu.Popup.Props & Pick<Menu.Positioner.Props, "align" | "alignOffset" | "side" | "sideOffset">): react_jsx_runtime157.JSX.Element;
23
23
  declare function DropdownMenuGroup({
24
24
  ...props
25
- }: Menu.Group.Props): react_jsx_runtime130.JSX.Element;
25
+ }: Menu.Group.Props): react_jsx_runtime157.JSX.Element;
26
26
  declare function DropdownMenuLabel({
27
27
  className,
28
28
  inset,
29
29
  ...props
30
30
  }: Menu.GroupLabel.Props & {
31
31
  inset?: boolean;
32
- }): react_jsx_runtime130.JSX.Element;
32
+ }): react_jsx_runtime157.JSX.Element;
33
33
  declare function DropdownMenuItem({
34
34
  className,
35
35
  inset,
@@ -38,10 +38,10 @@ declare function DropdownMenuItem({
38
38
  }: Menu.Item.Props & {
39
39
  inset?: boolean;
40
40
  variant?: "default" | "destructive";
41
- }): react_jsx_runtime130.JSX.Element;
41
+ }): react_jsx_runtime157.JSX.Element;
42
42
  declare function DropdownMenuSub({
43
43
  ...props
44
- }: Menu.SubmenuRoot.Props): react_jsx_runtime130.JSX.Element;
44
+ }: Menu.SubmenuRoot.Props): react_jsx_runtime157.JSX.Element;
45
45
  declare function DropdownMenuSubTrigger({
46
46
  className,
47
47
  inset,
@@ -49,7 +49,7 @@ declare function DropdownMenuSubTrigger({
49
49
  ...props
50
50
  }: Menu.SubmenuTrigger.Props & {
51
51
  inset?: boolean;
52
- }): react_jsx_runtime130.JSX.Element;
52
+ }): react_jsx_runtime157.JSX.Element;
53
53
  declare function DropdownMenuSubContent({
54
54
  align,
55
55
  alignOffset,
@@ -57,7 +57,7 @@ declare function DropdownMenuSubContent({
57
57
  sideOffset,
58
58
  className,
59
59
  ...props
60
- }: React$1.ComponentProps<typeof DropdownMenuContent>): react_jsx_runtime130.JSX.Element;
60
+ }: React$1.ComponentProps<typeof DropdownMenuContent>): react_jsx_runtime157.JSX.Element;
61
61
  declare function DropdownMenuCheckboxItem({
62
62
  className,
63
63
  children,
@@ -66,10 +66,10 @@ declare function DropdownMenuCheckboxItem({
66
66
  ...props
67
67
  }: Menu.CheckboxItem.Props & {
68
68
  inset?: boolean;
69
- }): react_jsx_runtime130.JSX.Element;
69
+ }): react_jsx_runtime157.JSX.Element;
70
70
  declare function DropdownMenuRadioGroup({
71
71
  ...props
72
- }: Menu.RadioGroup.Props): react_jsx_runtime130.JSX.Element;
72
+ }: Menu.RadioGroup.Props): react_jsx_runtime157.JSX.Element;
73
73
  declare function DropdownMenuRadioItem({
74
74
  className,
75
75
  children,
@@ -77,15 +77,15 @@ declare function DropdownMenuRadioItem({
77
77
  ...props
78
78
  }: Menu.RadioItem.Props & {
79
79
  inset?: boolean;
80
- }): react_jsx_runtime130.JSX.Element;
80
+ }): react_jsx_runtime157.JSX.Element;
81
81
  declare function DropdownMenuSeparator({
82
82
  className,
83
83
  ...props
84
- }: Menu.Separator.Props): react_jsx_runtime130.JSX.Element;
84
+ }: Menu.Separator.Props): react_jsx_runtime157.JSX.Element;
85
85
  declare function DropdownMenuShortcut({
86
86
  className,
87
87
  ...props
88
- }: React$1.ComponentProps<"span">): react_jsx_runtime130.JSX.Element;
88
+ }: React$1.ComponentProps<"span">): react_jsx_runtime157.JSX.Element;
89
89
  //#endregion
90
90
  export { DropdownMenuItem as a, DropdownMenuRadioGroup as c, DropdownMenuShortcut as d, DropdownMenuSub as f, DropdownMenuTrigger as h, DropdownMenuGroup as i, DropdownMenuRadioItem as l, DropdownMenuSubTrigger as m, DropdownMenuCheckboxItem as n, DropdownMenuLabel as o, DropdownMenuSubContent as p, DropdownMenuContent as r, DropdownMenuPortal as s, DropdownMenu as t, DropdownMenuSeparator as u };
91
- //# sourceMappingURL=dropdown-menu-BC7zFA2L.d.ts.map
91
+ //# sourceMappingURL=dropdown-menu-DGgfWYrK.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dropdown-menu-BC7zFA2L.d.ts","names":[],"sources":["../src/components/dropdown-menu.tsx"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"dropdown-menu-DGgfWYrK.d.ts","names":[],"sources":["../src/components/dropdown-menu.tsx"],"sourcesContent":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ import { t as cn } from "./utils-DUlptRpf.js";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { cva } from "class-variance-authority";
4
+
5
+ //#region src/components/empty.tsx
6
+ function Empty({ className, ...props }) {
7
+ return /* @__PURE__ */ jsx("div", {
8
+ "data-slot": "empty",
9
+ className: cn("flex w-full min-w-0 flex-1 flex-col items-center justify-center gap-4 rounded-lg border-dashed p-12 text-center text-balance", className),
10
+ ...props
11
+ });
12
+ }
13
+ function EmptyHeader({ className, ...props }) {
14
+ return /* @__PURE__ */ jsx("div", {
15
+ "data-slot": "empty-header",
16
+ className: cn("flex max-w-sm flex-col items-center gap-2", className),
17
+ ...props
18
+ });
19
+ }
20
+ const emptyMediaVariants = cva("mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0", {
21
+ variants: { variant: {
22
+ default: "bg-transparent",
23
+ icon: "flex size-10 shrink-0 items-center justify-center rounded-lg bg-muted text-foreground [&_svg:not([class*='size-'])]:size-6"
24
+ } },
25
+ defaultVariants: { variant: "default" }
26
+ });
27
+ function EmptyMedia({ className, variant = "default", ...props }) {
28
+ return /* @__PURE__ */ jsx("div", {
29
+ "data-slot": "empty-icon",
30
+ "data-variant": variant,
31
+ className: cn(emptyMediaVariants({
32
+ variant,
33
+ className
34
+ })),
35
+ ...props
36
+ });
37
+ }
38
+ function EmptyTitle({ className, ...props }) {
39
+ return /* @__PURE__ */ jsx("div", {
40
+ "data-slot": "empty-title",
41
+ className: cn("font-heading text-lg font-medium tracking-ppx-tight", className),
42
+ ...props
43
+ });
44
+ }
45
+ function EmptyDescription({ className, ...props }) {
46
+ return /* @__PURE__ */ jsx("div", {
47
+ "data-slot": "empty-description",
48
+ className: cn("text-sm/relaxed text-muted-foreground [&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary", className),
49
+ ...props
50
+ });
51
+ }
52
+ function EmptyContent({ className, ...props }) {
53
+ return /* @__PURE__ */ jsx("div", {
54
+ "data-slot": "empty-content",
55
+ className: cn("flex w-full max-w-sm min-w-0 flex-col items-center gap-4 text-sm text-balance", className),
56
+ ...props
57
+ });
58
+ }
59
+
60
+ //#endregion
61
+ export { EmptyMedia as a, EmptyHeader as i, EmptyContent as n, EmptyTitle as o, EmptyDescription as r, Empty as t };
62
+ //# sourceMappingURL=empty-U4zrLmFU.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"empty-U4zrLmFU.js","names":[],"sources":["../src/components/empty.tsx"],"sourcesContent":["import { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@px-ui/ui/lib/utils\"\n\nfunction Empty({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"empty\"\n className={cn(\n \"flex w-full min-w-0 flex-1 flex-col items-center justify-center gap-4 rounded-lg border-dashed p-12 text-center text-balance\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction EmptyHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"empty-header\"\n className={cn(\"flex max-w-sm flex-col items-center gap-2\", className)}\n {...props}\n />\n )\n}\n\nconst emptyMediaVariants = cva(\n \"mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"bg-transparent\",\n icon: \"flex size-10 shrink-0 items-center justify-center rounded-lg bg-muted text-foreground [&_svg:not([class*='size-'])]:size-6\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction EmptyMedia({\n className,\n variant = \"default\",\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof emptyMediaVariants>) {\n return (\n <div\n data-slot=\"empty-icon\"\n data-variant={variant}\n className={cn(emptyMediaVariants({ variant, className }))}\n {...props}\n />\n )\n}\n\nfunction EmptyTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"empty-title\"\n className={cn(\n \"font-heading text-lg font-medium tracking-ppx-tight\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction EmptyDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return (\n <div\n data-slot=\"empty-description\"\n className={cn(\n \"text-sm/relaxed text-muted-foreground [&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction EmptyContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"empty-content\"\n className={cn(\n \"flex w-full max-w-sm min-w-0 flex-col items-center gap-4 text-sm text-balance\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Empty,\n EmptyHeader,\n EmptyTitle,\n EmptyDescription,\n EmptyContent,\n EmptyMedia,\n}\n"],"mappings":";;;;;AAIA,SAAS,MAAM,EAAE,WAAW,GAAG,SAAsC;AACnE,QACE,oBAAC;EACC,aAAU;EACV,WAAW,GACT,gIACA,UACD;EACD,GAAI;GACJ;;AAIN,SAAS,YAAY,EAAE,WAAW,GAAG,SAAsC;AACzE,QACE,oBAAC;EACC,aAAU;EACV,WAAW,GAAG,6CAA6C,UAAU;EACrE,GAAI;GACJ;;AAIN,MAAM,qBAAqB,IACzB,+FACA;CACE,UAAU,EACR,SAAS;EACP,SAAS;EACT,MAAM;EACP,EACF;CACD,iBAAiB,EACf,SAAS,WACV;CACF,CACF;AAED,SAAS,WAAW,EAClB,WACA,UAAU,WACV,GAAG,SACqE;AACxE,QACE,oBAAC;EACC,aAAU;EACV,gBAAc;EACd,WAAW,GAAG,mBAAmB;GAAE;GAAS;GAAW,CAAC,CAAC;EACzD,GAAI;GACJ;;AAIN,SAAS,WAAW,EAAE,WAAW,GAAG,SAAsC;AACxE,QACE,oBAAC;EACC,aAAU;EACV,WAAW,GACT,uDACA,UACD;EACD,GAAI;GACJ;;AAIN,SAAS,iBAAiB,EAAE,WAAW,GAAG,SAAoC;AAC5E,QACE,oBAAC;EACC,aAAU;EACV,WAAW,GACT,2GACA,UACD;EACD,GAAI;GACJ;;AAIN,SAAS,aAAa,EAAE,WAAW,GAAG,SAAsC;AAC1E,QACE,oBAAC;EACC,aAAU;EACV,WAAW,GACT,iFACA,UACD;EACD,GAAI;GACJ"}
@@ -1,7 +1,7 @@
1
- import { t as Button } from "./button-BkzvdmIX.js";
2
- import { d as UseFileUploadReturn, n as FileUploadItem } from "./use-file-upload-yy-xLBtn.js";
1
+ import { t as Button } from "./button-Cfd9X6pX.js";
2
+ import { d as UseFileUploadReturn, n as FileUploadItem } from "./use-file-upload-Bc7CyQ7O.js";
3
3
  import { LucideIcon } from "lucide-react";
4
- import * as react_jsx_runtime233 from "react/jsx-runtime";
4
+ import * as react_jsx_runtime179 from "react/jsx-runtime";
5
5
  import * as React$1 from "react";
6
6
  import { VariantProps } from "class-variance-authority";
7
7
  import * as class_variance_authority_types8 from "class-variance-authority/types";
@@ -35,7 +35,7 @@ declare function Root({
35
35
  multiple,
36
36
  disabled,
37
37
  className
38
- }: RootProps): react_jsx_runtime233.JSX.Element;
38
+ }: RootProps): react_jsx_runtime179.JSX.Element;
39
39
  declare const dropzoneVariants: (props?: ({
40
40
  size?: "default" | "sm" | "lg" | null | undefined;
41
41
  isDragActive?: boolean | null | undefined;
@@ -84,12 +84,12 @@ declare function Dropzone({
84
84
  browseText,
85
85
  render,
86
86
  ...props
87
- }: DropzoneProps): react_jsx_runtime233.JSX.Element;
87
+ }: DropzoneProps): react_jsx_runtime179.JSX.Element;
88
88
  interface HiddenInputProps extends Omit<React$1.ComponentProps<"input">, "type"> {}
89
89
  declare function HiddenInput({
90
90
  className,
91
91
  ...props
92
- }: HiddenInputProps): react_jsx_runtime233.JSX.Element;
92
+ }: HiddenInputProps): react_jsx_runtime179.JSX.Element;
93
93
  interface ListProps extends Omit<React$1.ComponentProps<"div">, "children"> {
94
94
  children?: React$1.ReactNode | ((files: FileUploadItem[]) => React$1.ReactNode);
95
95
  }
@@ -97,7 +97,7 @@ declare function List({
97
97
  className,
98
98
  children,
99
99
  ...props
100
- }: ListProps): react_jsx_runtime233.JSX.Element | null;
100
+ }: ListProps): react_jsx_runtime179.JSX.Element | null;
101
101
  interface ListItemProps extends React$1.ComponentProps<"div"> {
102
102
  file: FileUploadItem;
103
103
  /** Show file type icon (default: true) */
@@ -126,12 +126,12 @@ declare function ListItem({
126
126
  icon,
127
127
  onItemClick,
128
128
  ...props
129
- }: ListItemProps): react_jsx_runtime233.JSX.Element;
129
+ }: ListItemProps): react_jsx_runtime179.JSX.Element;
130
130
  interface ClearAllProps extends React$1.ComponentProps<typeof Button> {}
131
131
  declare function ClearAll({
132
132
  children,
133
133
  ...props
134
- }: ClearAllProps): react_jsx_runtime233.JSX.Element | null;
134
+ }: ClearAllProps): react_jsx_runtime179.JSX.Element | null;
135
135
  declare const FileUpload: {
136
136
  Root: typeof Root;
137
137
  Dropzone: typeof Dropzone;
@@ -142,4 +142,4 @@ declare const FileUpload: {
142
142
  };
143
143
  //#endregion
144
144
  export { FileUpload as a, ListProps as c, DropzoneState as i, RootProps as l, DropzoneProps as n, HiddenInputProps as o, DropzoneRenderProps as r, ListItemProps as s, ClearAllProps as t, getFileTypeIcon as u };
145
- //# sourceMappingURL=file-upload-DoGu67Bu.d.ts.map
145
+ //# sourceMappingURL=file-upload-BvAtAxLc.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"file-upload-DoGu67Bu.d.ts","names":[],"sources":["../src/components/file-upload.tsx"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"file-upload-BvAtAxLc.d.ts","names":[],"sources":["../src/components/file-upload.tsx"],"sourcesContent":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import { t as cn } from "./utils-mWJR2N24.js";
2
- import { t as Button } from "./button-hBUFMmsZ.js";
3
- import { t as Spinner } from "./spinner-Bo0sUZEg.js";
1
+ import { t as cn } from "./utils-DUlptRpf.js";
2
+ import { t as Button } from "./button-DnHwqwy0.js";
3
+ import { t as Spinner } from "./spinner-9MdgLDTZ.js";
4
4
  import { CloudUploadIcon, FileArchiveIcon, FileAudioIcon, FileCodeIcon, FileIcon, FileSpreadsheetIcon, FileTextIcon, FileVideoIcon, ImageIcon, RotateCwIcon, XIcon } from "lucide-react";
5
5
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
6
6
  import * as React$1 from "react";
@@ -431,4 +431,4 @@ const FileUpload = {
431
431
 
432
432
  //#endregion
433
433
  export { getFileTypeIcon as n, FileUpload as t };
434
- //# sourceMappingURL=file-upload-DeCIv13t.js.map
434
+ //# sourceMappingURL=file-upload-DU5FAkHm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"file-upload-DeCIv13t.js","names":["extensionMap: Record<string, LucideIcon>","mimeTypeMap: Record<string, LucideIcon>","React","contextValue: FileUploadContextValue","state: DropzoneState","renderProps: DropzoneRenderProps"],"sources":["../src/components/file-upload.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport {\n CloudUploadIcon,\n XIcon,\n RotateCwIcon,\n FileIcon,\n FileTextIcon,\n FileSpreadsheetIcon,\n ImageIcon,\n FileVideoIcon,\n FileAudioIcon,\n FileArchiveIcon,\n FileCodeIcon,\n type LucideIcon,\n} from \"lucide-react\";\nimport { cn } from \"@px-ui/ui/lib/utils\";\nimport { Button } from \"@px-ui/ui/components/button\";\nimport { Spinner } from \"@px-ui/ui/components/spinner\";\nimport type {\n FileUploadItem,\n UseFileUploadReturn,\n} from \"@px-ui/ui/hooks/use-file-upload\";\n\n// ============================================================================\n// File type icon\n// ============================================================================\n\ntype FileInfo = { name: string; type?: string };\n\nconst extensionMap: Record<string, LucideIcon> = {\n pdf: FileTextIcon,\n\n // Word documents\n doc: FileTextIcon,\n docx: FileTextIcon,\n rtf: FileTextIcon,\n odt: FileTextIcon,\n\n // Excel / spreadsheets\n xls: FileSpreadsheetIcon,\n xlsx: FileSpreadsheetIcon,\n csv: FileSpreadsheetIcon,\n ods: FileSpreadsheetIcon,\n\n // Images\n png: ImageIcon,\n jpg: ImageIcon,\n jpeg: ImageIcon,\n gif: ImageIcon,\n webp: ImageIcon,\n svg: ImageIcon,\n bmp: ImageIcon,\n ico: ImageIcon,\n tiff: ImageIcon,\n tif: ImageIcon,\n\n // Video\n mp4: FileVideoIcon,\n webm: FileVideoIcon,\n mov: FileVideoIcon,\n avi: FileVideoIcon,\n mkv: FileVideoIcon,\n wmv: FileVideoIcon,\n flv: FileVideoIcon,\n\n // Audio\n mp3: FileAudioIcon,\n wav: FileAudioIcon,\n ogg: FileAudioIcon,\n flac: FileAudioIcon,\n aac: FileAudioIcon,\n m4a: FileAudioIcon,\n wma: FileAudioIcon,\n\n // Archives\n zip: FileArchiveIcon,\n rar: FileArchiveIcon,\n \"7z\": FileArchiveIcon,\n tar: FileArchiveIcon,\n gz: FileArchiveIcon,\n bz2: FileArchiveIcon,\n\n // Code\n js: FileCodeIcon,\n jsx: FileCodeIcon,\n ts: FileCodeIcon,\n tsx: FileCodeIcon,\n json: FileCodeIcon,\n html: FileCodeIcon,\n css: FileCodeIcon,\n scss: FileCodeIcon,\n less: FileCodeIcon,\n py: FileCodeIcon,\n rb: FileCodeIcon,\n java: FileCodeIcon,\n c: FileCodeIcon,\n cpp: FileCodeIcon,\n h: FileCodeIcon,\n go: FileCodeIcon,\n rs: FileCodeIcon,\n php: FileCodeIcon,\n sql: FileCodeIcon,\n sh: FileCodeIcon,\n bash: FileCodeIcon,\n yml: FileCodeIcon,\n yaml: FileCodeIcon,\n xml: FileCodeIcon,\n\n // Text\n txt: FileTextIcon,\n md: FileTextIcon,\n markdown: FileTextIcon,\n log: FileTextIcon,\n};\n\nconst mimeTypeMap: Record<string, LucideIcon> = {\n \"application/pdf\": FileTextIcon,\n\n // Word\n \"application/msword\": FileTextIcon,\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\":\n FileTextIcon,\n \"application/rtf\": FileTextIcon,\n \"application/vnd.oasis.opendocument.text\": FileTextIcon,\n\n // Excel\n \"application/vnd.ms-excel\": FileSpreadsheetIcon,\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\":\n FileSpreadsheetIcon,\n \"text/csv\": FileSpreadsheetIcon,\n \"application/vnd.oasis.opendocument.spreadsheet\": FileSpreadsheetIcon,\n\n // Archives\n \"application/zip\": FileArchiveIcon,\n \"application/x-rar-compressed\": FileArchiveIcon,\n \"application/x-7z-compressed\": FileArchiveIcon,\n \"application/x-tar\": FileArchiveIcon,\n \"application/gzip\": FileArchiveIcon,\n\n // Code\n \"application/javascript\": FileCodeIcon,\n \"application/typescript\": FileCodeIcon,\n \"application/json\": FileCodeIcon,\n \"text/html\": FileCodeIcon,\n \"text/css\": FileCodeIcon,\n \"application/xml\": FileCodeIcon,\n \"text/xml\": FileCodeIcon,\n\n // Text\n \"text/plain\": FileTextIcon,\n \"text/markdown\": FileTextIcon,\n};\n\n/**\n * Get the appropriate file type icon component for a file.\n * Uses MIME type first, then falls back to file extension.\n */\nfunction getFileTypeIcon(file: FileInfo): LucideIcon {\n if (file.type) {\n if (file.type.startsWith(\"image/\")) return ImageIcon;\n if (file.type.startsWith(\"video/\")) return FileVideoIcon;\n if (file.type.startsWith(\"audio/\")) return FileAudioIcon;\n\n const mimeIcon = mimeTypeMap[file.type];\n if (mimeIcon) return mimeIcon;\n }\n\n const extension = file.name.split(\".\").pop()?.toLowerCase();\n if (extension) {\n const extIcon = extensionMap[extension];\n if (extIcon) return extIcon;\n }\n\n return FileIcon;\n}\n\n// ============================================================================\n// Context\n// ============================================================================\n\ninterface FileUploadContextValue {\n upload: UseFileUploadReturn;\n accept?: string;\n multiple: boolean;\n disabled: boolean;\n}\n\nconst FileUploadContext = React.createContext<FileUploadContextValue | null>(\n null,\n);\n\nfunction useFileUploadContext() {\n const context = React.useContext(FileUploadContext);\n if (!context) {\n throw new Error(\n \"FileUpload components must be used within FileUpload.Root\",\n );\n }\n return context;\n}\n\n// ============================================================================\n// Root Component\n// ============================================================================\n\nexport interface RootProps {\n children: React.ReactNode;\n /** The upload hook return value */\n upload: UseFileUploadReturn;\n /** Accepted file types (e.g., \"image/*,.pdf\") */\n accept?: string;\n /** Allow multiple file selection */\n multiple?: boolean;\n /** Whether the upload is disabled */\n disabled?: boolean;\n className?: string;\n}\n\nfunction Root({\n children,\n upload,\n accept,\n multiple = false,\n disabled = false,\n className,\n}: RootProps) {\n const contextValue: FileUploadContextValue = {\n upload,\n accept,\n multiple,\n disabled,\n };\n\n return (\n <FileUploadContext.Provider value={contextValue}>\n <div\n data-slot=\"file-upload\"\n className={cn(\"flex flex-col gap-4\", className)}\n >\n {children}\n </div>\n </FileUploadContext.Provider>\n );\n}\n\n// ============================================================================\n// Dropzone Component\n// ============================================================================\n\nconst dropzoneVariants = cva(\n \"flex flex-col items-center justify-center gap-4 rounded-md bg-muted transition-colors outline-none focus-visible:ring-3 focus-visible:ring-ring/50\",\n {\n variants: {\n size: {\n default: \"p-8 min-h-[200px]\",\n sm: \"p-6 min-h-[160px]\",\n lg: \"p-10 min-h-[260px]\",\n },\n isDragActive: {\n true: \"border-2 border-dashed border-primary bg-primary/5\",\n false: \"\",\n },\n },\n defaultVariants: {\n size: \"default\",\n isDragActive: false,\n },\n },\n);\n\n/** State passed to the render prop */\nexport interface DropzoneState {\n /** Whether files are being dragged over the dropzone */\n isDragging: boolean;\n /** Whether files are currently uploading */\n isUploading: boolean;\n /** Whether the dropzone is disabled */\n disabled: boolean;\n /** Current files in the upload */\n files: FileUploadItem[];\n}\n\n/** Props passed to the render prop element */\nexport interface DropzoneRenderProps {\n onDragEnter: React.DragEventHandler;\n onDragLeave: React.DragEventHandler;\n onDragOver: React.DragEventHandler;\n onDrop: React.DragEventHandler;\n onPaste: React.ClipboardEventHandler;\n onKeyDown: React.KeyboardEventHandler;\n onClick: React.MouseEventHandler;\n tabIndex: number;\n role: string;\n \"aria-disabled\": boolean;\n \"data-dragging\": boolean;\n}\n\nexport interface DropzoneProps\n extends Omit<React.ComponentProps<\"div\">, \"children\">,\n Omit<VariantProps<typeof dropzoneVariants>, \"isDragActive\"> {\n /** Custom text for the dropzone */\n dropzoneText?: string;\n /** Custom text for the browse button */\n browseText?: string;\n /**\n * Render prop for complete customization.\n * When provided, replaces the default dropzone element.\n * Receives props to spread and state for conditional styling.\n */\n render?: (\n props: DropzoneRenderProps,\n state: DropzoneState,\n ) => React.ReactElement;\n}\n\nfunction Dropzone({\n className,\n size,\n dropzoneText = \"Paste Or Drag & Drop Files Here\",\n browseText = \"Browse for files\",\n render,\n ...props\n}: DropzoneProps) {\n const { upload, accept, multiple, disabled } = useFileUploadContext();\n const {\n isDragging,\n isUploading,\n files,\n openFileDialog,\n getInputProps,\n handleDragEnter,\n handleDragLeave,\n handleDragOver,\n handleDrop,\n addFiles,\n } = upload;\n\n const descriptionId = React.useId();\n const instructionsId = React.useId();\n const [announcement, setAnnouncement] = React.useState(\"\");\n\n const inputProps = getInputProps();\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n openFileDialog();\n }\n },\n [openFileDialog],\n );\n\n const handlePaste = React.useCallback(\n (e: React.ClipboardEvent) => {\n if (disabled) return;\n const pastedFiles = e.clipboardData.files;\n if (pastedFiles.length > 0) {\n e.preventDefault();\n const filesArray = Array.from(pastedFiles);\n addFiles(filesArray);\n setAnnouncement(\n `${filesArray.length} file${filesArray.length > 1 ? \"s\" : \"\"} pasted`,\n );\n }\n },\n [disabled, addFiles],\n );\n\n const handleClick = React.useCallback(() => {\n if (disabled || isUploading) return;\n openFileDialog();\n }, [disabled, isUploading, openFileDialog]);\n\n // State passed to render prop\n const state: DropzoneState = {\n isDragging,\n isUploading,\n disabled,\n files,\n };\n\n // Props passed to render prop (to be spread on custom element)\n const renderProps: DropzoneRenderProps = {\n onDragEnter: handleDragEnter,\n onDragLeave: handleDragLeave,\n onDragOver: handleDragOver,\n onDrop: handleDrop,\n onPaste: handlePaste,\n onKeyDown: handleKeyDown,\n onClick: handleClick,\n tabIndex: disabled ? -1 : 0,\n role: \"button\",\n \"aria-disabled\": disabled,\n \"data-dragging\": isDragging,\n };\n\n // Hidden input element (always rendered)\n const hiddenInput = (\n <input\n {...inputProps}\n className=\"sr-only\"\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n tabIndex={-1}\n aria-hidden=\"true\"\n />\n );\n\n // Screen reader elements\n const srElements = (\n <>\n <div\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n className=\"sr-only\"\n >\n {announcement}\n </div>\n <div id={descriptionId} className=\"sr-only\">\n {dropzoneText}\n </div>\n <div id={instructionsId} className=\"sr-only\">\n Press Enter or Space to browse files, or drag and drop files here.\n </div>\n </>\n );\n\n // If render prop is provided, use it for full customization\n if (render) {\n return (\n <div data-slot=\"file-upload-dropzone\">\n {hiddenInput}\n {srElements}\n {render(renderProps, state)}\n </div>\n );\n }\n\n // Default rendering\n return (\n <div\n data-slot=\"file-upload-dropzone\"\n className={cn(\n dropzoneVariants({ size, isDragActive: isDragging }),\n disabled && \"cursor-not-allowed opacity-60\",\n className,\n )}\n {...renderProps}\n aria-describedby={`${descriptionId} ${instructionsId}`}\n aria-label=\"File upload dropzone\"\n {...props}\n >\n {srElements}\n {hiddenInput}\n\n <div className=\"text-muted-foreground flex items-center gap-3\">\n <CloudUploadIcon size={40} aria-hidden=\"true\" />\n <span className=\"text-base text-foreground font-medium\">\n {dropzoneText}\n </span>\n </div>\n\n <div className=\"flex w-full items-center gap-3\" aria-hidden=\"true\">\n <div className=\"bg-border h-px flex-1\" />\n <span className=\"text-sm text-muted-foreground font-medium\">OR</span>\n <div className=\"bg-border h-px flex-1\" />\n </div>\n\n <Button\n type=\"button\"\n variant=\"default\"\n disabled={disabled || isUploading}\n >\n {isUploading ? (\n <>\n <Spinner className=\"size-4\" />\n Uploading...\n </>\n ) : (\n browseText\n )}\n </Button>\n </div>\n );\n}\n\n// ============================================================================\n// HiddenInput Component\n// ============================================================================\n\nexport interface HiddenInputProps\n extends Omit<React.ComponentProps<\"input\">, \"type\"> {}\n\nfunction HiddenInput({ className, ...props }: HiddenInputProps) {\n const { upload, accept, multiple, disabled } = useFileUploadContext();\n const inputProps = upload.getInputProps();\n\n return (\n <input\n {...inputProps}\n {...props}\n className={cn(\"sr-only\", className)}\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n tabIndex={-1}\n aria-hidden=\"true\"\n />\n );\n}\n\n// ============================================================================\n// List Component\n// ============================================================================\n\nexport interface ListProps\n extends Omit<React.ComponentProps<\"div\">, \"children\"> {\n children?: React.ReactNode | ((files: FileUploadItem[]) => React.ReactNode);\n}\n\nfunction List({ className, children, ...props }: ListProps) {\n const { upload } = useFileUploadContext();\n const { files } = upload;\n\n if (files.length === 0) return null;\n\n return (\n <div\n data-slot=\"file-upload-list\"\n className={cn(\"flex flex-col gap-2\", className)}\n {...props}\n >\n {typeof children === \"function\" ? children(files) : children}\n </div>\n );\n}\n\n// ============================================================================\n// ListItem Component (Consolidated)\n// ============================================================================\n\nexport interface ListItemProps extends React.ComponentProps<\"div\"> {\n file: FileUploadItem;\n /** Show file type icon (default: true) */\n showIcon?: boolean;\n /** Show progress bar when uploading (default: true) */\n showProgress?: boolean;\n /** Show error message when error (default: true) */\n showError?: boolean;\n /** Show remove button (default: true) */\n showRemove?: boolean;\n /** Show retry button when error (default: true) */\n showRetry?: boolean;\n /** Custom icon component */\n icon?: React.ReactNode;\n /** Click handler for the list item */\n onItemClick?: (file: FileUploadItem) => void;\n}\n\nfunction ListItem({\n file,\n className,\n showIcon = true,\n showProgress = true,\n showError = true,\n showRemove = true,\n showRetry = true,\n icon,\n onItemClick,\n ...props\n}: ListItemProps) {\n const { upload, disabled } = useFileUploadContext();\n const { removeFile, retryUpload } = upload;\n\n const isUploading = file.status === \"uploading\";\n const isError = file.status === \"error\";\n\n // Get the appropriate icon\n const FileTypeIcon = getFileTypeIcon({\n name: file.file.name,\n type: file.file.type,\n });\n\n // Check if file is an image type (should show preview)\n const isImageType = file.file.type?.startsWith(\"image/\");\n const shouldShowImagePreview = file.preview && isImageType;\n\n const handleClick = (e: React.MouseEvent<HTMLDivElement>) => {\n if ((e.target as HTMLElement).closest(\"button\")) return;\n onItemClick?.(file);\n props.onClick?.(e);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (onItemClick && (e.key === \"Enter\" || e.key === \" \")) {\n e.preventDefault();\n onItemClick(file);\n }\n props.onKeyDown?.(e);\n };\n\n const interactiveProps = onItemClick\n ? {\n role: \"button\" as const,\n tabIndex: 0,\n }\n : {};\n\n return (\n <div\n data-slot=\"file-upload-list-item\"\n data-status={file.status}\n className={cn(\n \"flex items-center gap-3 rounded-md border bg-card p-3\",\n isError && \"border-destructive bg-destructive/10\",\n onItemClick &&\n \"cursor-pointer hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n className,\n )}\n {...props}\n {...interactiveProps}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n >\n {/* Icon/Preview */}\n {showIcon && (\n <div className=\"flex size-10 shrink-0 items-center justify-center overflow-hidden rounded-sm bg-muted\">\n {shouldShowImagePreview ? (\n <img\n src={file.preview}\n alt={file.file.name}\n className=\"size-full object-cover\"\n />\n ) : icon ? (\n icon\n ) : (\n <FileTypeIcon className=\"size-5\" />\n )}\n </div>\n )}\n\n {/* File info */}\n <div className=\"flex min-w-0 flex-1 flex-col gap-1\">\n <span className=\"text-sm text-foreground truncate font-medium\">\n {file.file.name}\n </span>\n\n <div className=\"flex items-center gap-2\">\n {/* Progress bar */}\n {showProgress && isUploading && (\n <div className=\"bg-muted h-1.5 flex-1 overflow-hidden rounded-full\">\n <div\n className=\"bg-primary h-full transition-all duration-300\"\n style={{ width: `${file.progress}%` }}\n />\n </div>\n )}\n\n {/* Progress percentage */}\n {isUploading && (\n <span className=\"text-xs text-muted-foreground shrink-0\">\n {file.progress}%\n </span>\n )}\n </div>\n\n {/* Error message */}\n {showError && isError && file.error && (\n <span className=\"text-xs text-destructive\">{file.error}</span>\n )}\n </div>\n\n {/* Actions */}\n <div className=\"flex shrink-0 items-center gap-1\">\n {/* Retry button */}\n {showRetry && isError && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={() => retryUpload(file.id)}\n disabled={disabled}\n aria-label={`Retry uploading ${file.file.name}`}\n >\n <RotateCwIcon className=\"size-4\" />\n </Button>\n )}\n\n {/* Remove button */}\n {showRemove && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={() => removeFile(file.id)}\n disabled={disabled}\n aria-label={`Remove ${file.file.name}`}\n >\n <XIcon className=\"size-4\" />\n </Button>\n )}\n </div>\n </div>\n );\n}\n\n// ============================================================================\n// ClearAll Component\n// ============================================================================\n\nexport interface ClearAllProps extends React.ComponentProps<typeof Button> {}\n\nfunction ClearAll({ children, ...props }: ClearAllProps) {\n const { upload, disabled } = useFileUploadContext();\n const { clearFiles, files } = upload;\n\n if (files.length === 0) return null;\n\n return (\n <Button\n type=\"button\"\n variant=\"ghost\"\n onClick={clearFiles}\n disabled={disabled}\n data-slot=\"file-upload-clear-all\"\n {...props}\n >\n {children ?? \"Remove all files\"}\n </Button>\n );\n}\n\n// ============================================================================\n// Exports\n// ============================================================================\n\nexport { getFileTypeIcon };\n\nexport const FileUpload = {\n Root,\n Dropzone,\n HiddenInput,\n List,\n ListItem,\n ClearAll,\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"file-upload-DU5FAkHm.js","names":["extensionMap: Record<string, LucideIcon>","mimeTypeMap: Record<string, LucideIcon>","React","contextValue: FileUploadContextValue","state: DropzoneState","renderProps: DropzoneRenderProps"],"sources":["../src/components/file-upload.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport {\n CloudUploadIcon,\n XIcon,\n RotateCwIcon,\n FileIcon,\n FileTextIcon,\n FileSpreadsheetIcon,\n ImageIcon,\n FileVideoIcon,\n FileAudioIcon,\n FileArchiveIcon,\n FileCodeIcon,\n type LucideIcon,\n} from \"lucide-react\";\nimport { cn } from \"@px-ui/ui/lib/utils\";\nimport { Button } from \"@px-ui/ui/components/button\";\nimport { Spinner } from \"@px-ui/ui/components/spinner\";\nimport type {\n FileUploadItem,\n UseFileUploadReturn,\n} from \"@px-ui/ui/hooks/use-file-upload\";\n\n// ============================================================================\n// File type icon\n// ============================================================================\n\ntype FileInfo = { name: string; type?: string };\n\nconst extensionMap: Record<string, LucideIcon> = {\n pdf: FileTextIcon,\n\n // Word documents\n doc: FileTextIcon,\n docx: FileTextIcon,\n rtf: FileTextIcon,\n odt: FileTextIcon,\n\n // Excel / spreadsheets\n xls: FileSpreadsheetIcon,\n xlsx: FileSpreadsheetIcon,\n csv: FileSpreadsheetIcon,\n ods: FileSpreadsheetIcon,\n\n // Images\n png: ImageIcon,\n jpg: ImageIcon,\n jpeg: ImageIcon,\n gif: ImageIcon,\n webp: ImageIcon,\n svg: ImageIcon,\n bmp: ImageIcon,\n ico: ImageIcon,\n tiff: ImageIcon,\n tif: ImageIcon,\n\n // Video\n mp4: FileVideoIcon,\n webm: FileVideoIcon,\n mov: FileVideoIcon,\n avi: FileVideoIcon,\n mkv: FileVideoIcon,\n wmv: FileVideoIcon,\n flv: FileVideoIcon,\n\n // Audio\n mp3: FileAudioIcon,\n wav: FileAudioIcon,\n ogg: FileAudioIcon,\n flac: FileAudioIcon,\n aac: FileAudioIcon,\n m4a: FileAudioIcon,\n wma: FileAudioIcon,\n\n // Archives\n zip: FileArchiveIcon,\n rar: FileArchiveIcon,\n \"7z\": FileArchiveIcon,\n tar: FileArchiveIcon,\n gz: FileArchiveIcon,\n bz2: FileArchiveIcon,\n\n // Code\n js: FileCodeIcon,\n jsx: FileCodeIcon,\n ts: FileCodeIcon,\n tsx: FileCodeIcon,\n json: FileCodeIcon,\n html: FileCodeIcon,\n css: FileCodeIcon,\n scss: FileCodeIcon,\n less: FileCodeIcon,\n py: FileCodeIcon,\n rb: FileCodeIcon,\n java: FileCodeIcon,\n c: FileCodeIcon,\n cpp: FileCodeIcon,\n h: FileCodeIcon,\n go: FileCodeIcon,\n rs: FileCodeIcon,\n php: FileCodeIcon,\n sql: FileCodeIcon,\n sh: FileCodeIcon,\n bash: FileCodeIcon,\n yml: FileCodeIcon,\n yaml: FileCodeIcon,\n xml: FileCodeIcon,\n\n // Text\n txt: FileTextIcon,\n md: FileTextIcon,\n markdown: FileTextIcon,\n log: FileTextIcon,\n};\n\nconst mimeTypeMap: Record<string, LucideIcon> = {\n \"application/pdf\": FileTextIcon,\n\n // Word\n \"application/msword\": FileTextIcon,\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\":\n FileTextIcon,\n \"application/rtf\": FileTextIcon,\n \"application/vnd.oasis.opendocument.text\": FileTextIcon,\n\n // Excel\n \"application/vnd.ms-excel\": FileSpreadsheetIcon,\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\":\n FileSpreadsheetIcon,\n \"text/csv\": FileSpreadsheetIcon,\n \"application/vnd.oasis.opendocument.spreadsheet\": FileSpreadsheetIcon,\n\n // Archives\n \"application/zip\": FileArchiveIcon,\n \"application/x-rar-compressed\": FileArchiveIcon,\n \"application/x-7z-compressed\": FileArchiveIcon,\n \"application/x-tar\": FileArchiveIcon,\n \"application/gzip\": FileArchiveIcon,\n\n // Code\n \"application/javascript\": FileCodeIcon,\n \"application/typescript\": FileCodeIcon,\n \"application/json\": FileCodeIcon,\n \"text/html\": FileCodeIcon,\n \"text/css\": FileCodeIcon,\n \"application/xml\": FileCodeIcon,\n \"text/xml\": FileCodeIcon,\n\n // Text\n \"text/plain\": FileTextIcon,\n \"text/markdown\": FileTextIcon,\n};\n\n/**\n * Get the appropriate file type icon component for a file.\n * Uses MIME type first, then falls back to file extension.\n */\nfunction getFileTypeIcon(file: FileInfo): LucideIcon {\n if (file.type) {\n if (file.type.startsWith(\"image/\")) return ImageIcon;\n if (file.type.startsWith(\"video/\")) return FileVideoIcon;\n if (file.type.startsWith(\"audio/\")) return FileAudioIcon;\n\n const mimeIcon = mimeTypeMap[file.type];\n if (mimeIcon) return mimeIcon;\n }\n\n const extension = file.name.split(\".\").pop()?.toLowerCase();\n if (extension) {\n const extIcon = extensionMap[extension];\n if (extIcon) return extIcon;\n }\n\n return FileIcon;\n}\n\n// ============================================================================\n// Context\n// ============================================================================\n\ninterface FileUploadContextValue {\n upload: UseFileUploadReturn;\n accept?: string;\n multiple: boolean;\n disabled: boolean;\n}\n\nconst FileUploadContext = React.createContext<FileUploadContextValue | null>(\n null,\n);\n\nfunction useFileUploadContext() {\n const context = React.useContext(FileUploadContext);\n if (!context) {\n throw new Error(\n \"FileUpload components must be used within FileUpload.Root\",\n );\n }\n return context;\n}\n\n// ============================================================================\n// Root Component\n// ============================================================================\n\nexport interface RootProps {\n children: React.ReactNode;\n /** The upload hook return value */\n upload: UseFileUploadReturn;\n /** Accepted file types (e.g., \"image/*,.pdf\") */\n accept?: string;\n /** Allow multiple file selection */\n multiple?: boolean;\n /** Whether the upload is disabled */\n disabled?: boolean;\n className?: string;\n}\n\nfunction Root({\n children,\n upload,\n accept,\n multiple = false,\n disabled = false,\n className,\n}: RootProps) {\n const contextValue: FileUploadContextValue = {\n upload,\n accept,\n multiple,\n disabled,\n };\n\n return (\n <FileUploadContext.Provider value={contextValue}>\n <div\n data-slot=\"file-upload\"\n className={cn(\"flex flex-col gap-4\", className)}\n >\n {children}\n </div>\n </FileUploadContext.Provider>\n );\n}\n\n// ============================================================================\n// Dropzone Component\n// ============================================================================\n\nconst dropzoneVariants = cva(\n \"flex flex-col items-center justify-center gap-4 rounded-md bg-muted transition-colors outline-none focus-visible:ring-3 focus-visible:ring-ring/50\",\n {\n variants: {\n size: {\n default: \"p-8 min-h-[200px]\",\n sm: \"p-6 min-h-[160px]\",\n lg: \"p-10 min-h-[260px]\",\n },\n isDragActive: {\n true: \"border-2 border-dashed border-primary bg-primary/5\",\n false: \"\",\n },\n },\n defaultVariants: {\n size: \"default\",\n isDragActive: false,\n },\n },\n);\n\n/** State passed to the render prop */\nexport interface DropzoneState {\n /** Whether files are being dragged over the dropzone */\n isDragging: boolean;\n /** Whether files are currently uploading */\n isUploading: boolean;\n /** Whether the dropzone is disabled */\n disabled: boolean;\n /** Current files in the upload */\n files: FileUploadItem[];\n}\n\n/** Props passed to the render prop element */\nexport interface DropzoneRenderProps {\n onDragEnter: React.DragEventHandler;\n onDragLeave: React.DragEventHandler;\n onDragOver: React.DragEventHandler;\n onDrop: React.DragEventHandler;\n onPaste: React.ClipboardEventHandler;\n onKeyDown: React.KeyboardEventHandler;\n onClick: React.MouseEventHandler;\n tabIndex: number;\n role: string;\n \"aria-disabled\": boolean;\n \"data-dragging\": boolean;\n}\n\nexport interface DropzoneProps\n extends Omit<React.ComponentProps<\"div\">, \"children\">,\n Omit<VariantProps<typeof dropzoneVariants>, \"isDragActive\"> {\n /** Custom text for the dropzone */\n dropzoneText?: string;\n /** Custom text for the browse button */\n browseText?: string;\n /**\n * Render prop for complete customization.\n * When provided, replaces the default dropzone element.\n * Receives props to spread and state for conditional styling.\n */\n render?: (\n props: DropzoneRenderProps,\n state: DropzoneState,\n ) => React.ReactElement;\n}\n\nfunction Dropzone({\n className,\n size,\n dropzoneText = \"Paste Or Drag & Drop Files Here\",\n browseText = \"Browse for files\",\n render,\n ...props\n}: DropzoneProps) {\n const { upload, accept, multiple, disabled } = useFileUploadContext();\n const {\n isDragging,\n isUploading,\n files,\n openFileDialog,\n getInputProps,\n handleDragEnter,\n handleDragLeave,\n handleDragOver,\n handleDrop,\n addFiles,\n } = upload;\n\n const descriptionId = React.useId();\n const instructionsId = React.useId();\n const [announcement, setAnnouncement] = React.useState(\"\");\n\n const inputProps = getInputProps();\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n openFileDialog();\n }\n },\n [openFileDialog],\n );\n\n const handlePaste = React.useCallback(\n (e: React.ClipboardEvent) => {\n if (disabled) return;\n const pastedFiles = e.clipboardData.files;\n if (pastedFiles.length > 0) {\n e.preventDefault();\n const filesArray = Array.from(pastedFiles);\n addFiles(filesArray);\n setAnnouncement(\n `${filesArray.length} file${filesArray.length > 1 ? \"s\" : \"\"} pasted`,\n );\n }\n },\n [disabled, addFiles],\n );\n\n const handleClick = React.useCallback(() => {\n if (disabled || isUploading) return;\n openFileDialog();\n }, [disabled, isUploading, openFileDialog]);\n\n // State passed to render prop\n const state: DropzoneState = {\n isDragging,\n isUploading,\n disabled,\n files,\n };\n\n // Props passed to render prop (to be spread on custom element)\n const renderProps: DropzoneRenderProps = {\n onDragEnter: handleDragEnter,\n onDragLeave: handleDragLeave,\n onDragOver: handleDragOver,\n onDrop: handleDrop,\n onPaste: handlePaste,\n onKeyDown: handleKeyDown,\n onClick: handleClick,\n tabIndex: disabled ? -1 : 0,\n role: \"button\",\n \"aria-disabled\": disabled,\n \"data-dragging\": isDragging,\n };\n\n // Hidden input element (always rendered)\n const hiddenInput = (\n <input\n {...inputProps}\n className=\"sr-only\"\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n tabIndex={-1}\n aria-hidden=\"true\"\n />\n );\n\n // Screen reader elements\n const srElements = (\n <>\n <div\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n className=\"sr-only\"\n >\n {announcement}\n </div>\n <div id={descriptionId} className=\"sr-only\">\n {dropzoneText}\n </div>\n <div id={instructionsId} className=\"sr-only\">\n Press Enter or Space to browse files, or drag and drop files here.\n </div>\n </>\n );\n\n // If render prop is provided, use it for full customization\n if (render) {\n return (\n <div data-slot=\"file-upload-dropzone\">\n {hiddenInput}\n {srElements}\n {render(renderProps, state)}\n </div>\n );\n }\n\n // Default rendering\n return (\n <div\n data-slot=\"file-upload-dropzone\"\n className={cn(\n dropzoneVariants({ size, isDragActive: isDragging }),\n disabled && \"cursor-not-allowed opacity-60\",\n className,\n )}\n {...renderProps}\n aria-describedby={`${descriptionId} ${instructionsId}`}\n aria-label=\"File upload dropzone\"\n {...props}\n >\n {srElements}\n {hiddenInput}\n\n <div className=\"text-muted-foreground flex items-center gap-3\">\n <CloudUploadIcon size={40} aria-hidden=\"true\" />\n <span className=\"text-base text-foreground font-medium\">\n {dropzoneText}\n </span>\n </div>\n\n <div className=\"flex w-full items-center gap-3\" aria-hidden=\"true\">\n <div className=\"bg-border h-px flex-1\" />\n <span className=\"text-sm text-muted-foreground font-medium\">OR</span>\n <div className=\"bg-border h-px flex-1\" />\n </div>\n\n <Button\n type=\"button\"\n variant=\"default\"\n disabled={disabled || isUploading}\n >\n {isUploading ? (\n <>\n <Spinner className=\"size-4\" />\n Uploading...\n </>\n ) : (\n browseText\n )}\n </Button>\n </div>\n );\n}\n\n// ============================================================================\n// HiddenInput Component\n// ============================================================================\n\nexport interface HiddenInputProps\n extends Omit<React.ComponentProps<\"input\">, \"type\"> {}\n\nfunction HiddenInput({ className, ...props }: HiddenInputProps) {\n const { upload, accept, multiple, disabled } = useFileUploadContext();\n const inputProps = upload.getInputProps();\n\n return (\n <input\n {...inputProps}\n {...props}\n className={cn(\"sr-only\", className)}\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n tabIndex={-1}\n aria-hidden=\"true\"\n />\n );\n}\n\n// ============================================================================\n// List Component\n// ============================================================================\n\nexport interface ListProps\n extends Omit<React.ComponentProps<\"div\">, \"children\"> {\n children?: React.ReactNode | ((files: FileUploadItem[]) => React.ReactNode);\n}\n\nfunction List({ className, children, ...props }: ListProps) {\n const { upload } = useFileUploadContext();\n const { files } = upload;\n\n if (files.length === 0) return null;\n\n return (\n <div\n data-slot=\"file-upload-list\"\n className={cn(\"flex flex-col gap-2\", className)}\n {...props}\n >\n {typeof children === \"function\" ? children(files) : children}\n </div>\n );\n}\n\n// ============================================================================\n// ListItem Component (Consolidated)\n// ============================================================================\n\nexport interface ListItemProps extends React.ComponentProps<\"div\"> {\n file: FileUploadItem;\n /** Show file type icon (default: true) */\n showIcon?: boolean;\n /** Show progress bar when uploading (default: true) */\n showProgress?: boolean;\n /** Show error message when error (default: true) */\n showError?: boolean;\n /** Show remove button (default: true) */\n showRemove?: boolean;\n /** Show retry button when error (default: true) */\n showRetry?: boolean;\n /** Custom icon component */\n icon?: React.ReactNode;\n /** Click handler for the list item */\n onItemClick?: (file: FileUploadItem) => void;\n}\n\nfunction ListItem({\n file,\n className,\n showIcon = true,\n showProgress = true,\n showError = true,\n showRemove = true,\n showRetry = true,\n icon,\n onItemClick,\n ...props\n}: ListItemProps) {\n const { upload, disabled } = useFileUploadContext();\n const { removeFile, retryUpload } = upload;\n\n const isUploading = file.status === \"uploading\";\n const isError = file.status === \"error\";\n\n // Get the appropriate icon\n const FileTypeIcon = getFileTypeIcon({\n name: file.file.name,\n type: file.file.type,\n });\n\n // Check if file is an image type (should show preview)\n const isImageType = file.file.type?.startsWith(\"image/\");\n const shouldShowImagePreview = file.preview && isImageType;\n\n const handleClick = (e: React.MouseEvent<HTMLDivElement>) => {\n if ((e.target as HTMLElement).closest(\"button\")) return;\n onItemClick?.(file);\n props.onClick?.(e);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (onItemClick && (e.key === \"Enter\" || e.key === \" \")) {\n e.preventDefault();\n onItemClick(file);\n }\n props.onKeyDown?.(e);\n };\n\n const interactiveProps = onItemClick\n ? {\n role: \"button\" as const,\n tabIndex: 0,\n }\n : {};\n\n return (\n <div\n data-slot=\"file-upload-list-item\"\n data-status={file.status}\n className={cn(\n \"flex items-center gap-3 rounded-md border bg-card p-3\",\n isError && \"border-destructive bg-destructive/10\",\n onItemClick &&\n \"cursor-pointer hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n className,\n )}\n {...props}\n {...interactiveProps}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n >\n {/* Icon/Preview */}\n {showIcon && (\n <div className=\"flex size-10 shrink-0 items-center justify-center overflow-hidden rounded-sm bg-muted\">\n {shouldShowImagePreview ? (\n <img\n src={file.preview}\n alt={file.file.name}\n className=\"size-full object-cover\"\n />\n ) : icon ? (\n icon\n ) : (\n <FileTypeIcon className=\"size-5\" />\n )}\n </div>\n )}\n\n {/* File info */}\n <div className=\"flex min-w-0 flex-1 flex-col gap-1\">\n <span className=\"text-sm text-foreground truncate font-medium\">\n {file.file.name}\n </span>\n\n <div className=\"flex items-center gap-2\">\n {/* Progress bar */}\n {showProgress && isUploading && (\n <div className=\"bg-muted h-1.5 flex-1 overflow-hidden rounded-full\">\n <div\n className=\"bg-primary h-full transition-all duration-300\"\n style={{ width: `${file.progress}%` }}\n />\n </div>\n )}\n\n {/* Progress percentage */}\n {isUploading && (\n <span className=\"text-xs text-muted-foreground shrink-0\">\n {file.progress}%\n </span>\n )}\n </div>\n\n {/* Error message */}\n {showError && isError && file.error && (\n <span className=\"text-xs text-destructive\">{file.error}</span>\n )}\n </div>\n\n {/* Actions */}\n <div className=\"flex shrink-0 items-center gap-1\">\n {/* Retry button */}\n {showRetry && isError && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={() => retryUpload(file.id)}\n disabled={disabled}\n aria-label={`Retry uploading ${file.file.name}`}\n >\n <RotateCwIcon className=\"size-4\" />\n </Button>\n )}\n\n {/* Remove button */}\n {showRemove && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={() => removeFile(file.id)}\n disabled={disabled}\n aria-label={`Remove ${file.file.name}`}\n >\n <XIcon className=\"size-4\" />\n </Button>\n )}\n </div>\n </div>\n );\n}\n\n// ============================================================================\n// ClearAll Component\n// ============================================================================\n\nexport interface ClearAllProps extends React.ComponentProps<typeof Button> {}\n\nfunction ClearAll({ children, ...props }: ClearAllProps) {\n const { upload, disabled } = useFileUploadContext();\n const { clearFiles, files } = upload;\n\n if (files.length === 0) return null;\n\n return (\n <Button\n type=\"button\"\n variant=\"ghost\"\n onClick={clearFiles}\n disabled={disabled}\n data-slot=\"file-upload-clear-all\"\n {...props}\n >\n {children ?? \"Remove all files\"}\n </Button>\n );\n}\n\n// ============================================================================\n// Exports\n// ============================================================================\n\nexport { getFileTypeIcon };\n\nexport const FileUpload = {\n Root,\n Dropzone,\n HiddenInput,\n List,\n ListItem,\n ClearAll,\n};\n"],"mappings":"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"}