@customafk/lunas-ui 0.0.5 → 0.0.6

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 (658) hide show
  1. package/dist/add-new-BaABbnol.js +2 -0
  2. package/dist/add-new-BaABbnol.js.map +1 -0
  3. package/dist/add-new-DUoS_-n2.cjs +2 -0
  4. package/dist/add-new-DUoS_-n2.cjs.map +1 -0
  5. package/dist/alert-dialog-0KwdjY-6.js +2 -0
  6. package/dist/{alert-dialog.cjs.map → alert-dialog-0KwdjY-6.js.map} +1 -1
  7. package/dist/alert-dialog-D5ZqgIiC.cjs +2 -0
  8. package/dist/alert-dialog-D5ZqgIiC.cjs.map +1 -0
  9. package/dist/badge-CRXT2dH_.cjs +2 -0
  10. package/dist/badge-CRXT2dH_.cjs.map +1 -0
  11. package/dist/badge-D_qEoSL8.js +2 -0
  12. package/dist/badge-D_qEoSL8.js.map +1 -0
  13. package/dist/button-Bku3bKv9.js +2 -0
  14. package/dist/button-Bku3bKv9.js.map +1 -0
  15. package/dist/{button-DrAGGMHl.d.ts → button-D-ldkdUf.d.cts} +8 -6
  16. package/dist/{button-B7eGk6JD.d.cts → button-DN7a1ENd.d.ts} +8 -6
  17. package/dist/button-Dzv_nos1.cjs +2 -0
  18. package/dist/button-Dzv_nos1.cjs.map +1 -0
  19. package/dist/{card.js → card-D8cxRC5y.js} +1 -1
  20. package/dist/card-D8cxRC5y.js.map +1 -0
  21. package/dist/{card.cjs → card-Dta5eW8u.cjs} +2 -2
  22. package/dist/card-Dta5eW8u.cjs.map +1 -0
  23. package/dist/cards/simple-card.cjs +2 -0
  24. package/dist/cards/simple-card.cjs.map +1 -0
  25. package/dist/cards/simple-card.d.cts +20 -0
  26. package/dist/cards/simple-card.d.ts +20 -0
  27. package/dist/cards/simple-card.js +2 -0
  28. package/dist/cards/simple-card.js.map +1 -0
  29. package/dist/{command-Bh1toPH-.cjs → command-CsntVmEz.cjs} +2 -2
  30. package/dist/{command-Bh1toPH-.cjs.map → command-CsntVmEz.cjs.map} +1 -1
  31. package/dist/{command-BgkG6sKW.d.ts → command-DPWCoUcB.d.cts} +12 -11
  32. package/dist/{command-C3VVCkM3.d.cts → command-DswMfHba.d.ts} +12 -11
  33. package/dist/{command-DEl_iWXo.js → command-_L9bD9a-.js} +2 -2
  34. package/dist/{command-DEl_iWXo.js.map → command-_L9bD9a-.js.map} +1 -1
  35. package/dist/data-display/country.cjs +2 -0
  36. package/dist/data-display/country.cjs.map +1 -0
  37. package/dist/data-display/country.d.cts +11 -0
  38. package/dist/data-display/country.d.ts +11 -0
  39. package/dist/data-display/country.js +2 -0
  40. package/dist/data-display/country.js.map +1 -0
  41. package/dist/data-display/data-list.cjs +2 -0
  42. package/dist/data-display/data-list.cjs.map +1 -0
  43. package/dist/data-display/data-list.d.cts +16 -0
  44. package/dist/data-display/data-list.d.ts +16 -0
  45. package/dist/data-display/data-list.js +2 -0
  46. package/dist/data-display/data-list.js.map +1 -0
  47. package/dist/data-display/date.cjs +1 -0
  48. package/dist/data-display/date.d.cts +15 -0
  49. package/dist/data-display/date.d.ts +15 -0
  50. package/dist/data-display/date.js +1 -0
  51. package/dist/data-display/empty.cjs +2 -0
  52. package/dist/data-display/empty.cjs.map +1 -0
  53. package/dist/data-display/empty.d.cts +7 -0
  54. package/dist/data-display/empty.d.ts +7 -0
  55. package/dist/data-display/empty.js +2 -0
  56. package/dist/data-display/empty.js.map +1 -0
  57. package/dist/data-display/name.cjs +2 -0
  58. package/dist/data-display/name.cjs.map +1 -0
  59. package/dist/data-display/name.d.cts +10 -0
  60. package/dist/data-display/name.d.ts +10 -0
  61. package/dist/data-display/name.js +2 -0
  62. package/dist/data-display/name.js.map +1 -0
  63. package/dist/data-display/phone-number.cjs +2 -0
  64. package/dist/data-display/phone-number.cjs.map +1 -0
  65. package/dist/data-display/phone-number.d.cts +7 -0
  66. package/dist/data-display/phone-number.d.ts +7 -0
  67. package/dist/data-display/phone-number.js +2 -0
  68. package/dist/data-display/phone-number.js.map +1 -0
  69. package/dist/data-display/role-badge.cjs +2 -0
  70. package/dist/data-display/role-badge.cjs.map +1 -0
  71. package/dist/data-display/role-badge.d.cts +11 -0
  72. package/dist/data-display/role-badge.d.ts +11 -0
  73. package/dist/data-display/role-badge.js +2 -0
  74. package/dist/data-display/role-badge.js.map +1 -0
  75. package/dist/data-display/statistic.cjs +2 -0
  76. package/dist/data-display/statistic.cjs.map +1 -0
  77. package/dist/data-display/statistic.d.cts +29 -0
  78. package/dist/data-display/statistic.d.ts +29 -0
  79. package/dist/data-display/statistic.js +2 -0
  80. package/dist/data-display/statistic.js.map +1 -0
  81. package/dist/date-BMq_DNsv.js +2 -0
  82. package/dist/date-BMq_DNsv.js.map +1 -0
  83. package/dist/date-nd8WkPlx.cjs +2 -0
  84. package/dist/date-nd8WkPlx.cjs.map +1 -0
  85. package/dist/{dialog-CgosQe5q.js → dialog-C4hf-Puw.js} +2 -2
  86. package/dist/{dialog-CgosQe5q.js.map → dialog-C4hf-Puw.js.map} +1 -1
  87. package/dist/{dialog-Biy5wRCC.d.cts → dialog-CQI6CMkF.d.cts} +12 -11
  88. package/dist/{dialog-BylavpqI.d.ts → dialog-I7tlD4sO.d.ts} +12 -11
  89. package/dist/{dialog-BRV1Ro1D.cjs → dialog-W-DmDMEE.cjs} +2 -2
  90. package/dist/{dialog-BRV1Ro1D.cjs.map → dialog-W-DmDMEE.cjs.map} +1 -1
  91. package/dist/dialogs/confirm-dialog.cjs +2 -0
  92. package/dist/dialogs/confirm-dialog.cjs.map +1 -0
  93. package/dist/dialogs/confirm-dialog.d.cts +13 -0
  94. package/dist/dialogs/confirm-dialog.d.ts +13 -0
  95. package/dist/dialogs/confirm-dialog.js +2 -0
  96. package/dist/dialogs/confirm-dialog.js.map +1 -0
  97. package/dist/dialogs/detail-dialog/index.cjs +2 -0
  98. package/dist/dialogs/detail-dialog/index.cjs.map +1 -0
  99. package/dist/dialogs/detail-dialog/index.d.cts +15 -0
  100. package/dist/dialogs/detail-dialog/index.d.ts +15 -0
  101. package/dist/dialogs/detail-dialog/index.js +2 -0
  102. package/dist/dialogs/detail-dialog/index.js.map +1 -0
  103. package/dist/dialogs/error-dialog.cjs +1 -0
  104. package/dist/dialogs/error-dialog.d.cts +13 -0
  105. package/dist/dialogs/error-dialog.d.ts +13 -0
  106. package/dist/dialogs/error-dialog.js +1 -0
  107. package/dist/dialogs/form-dialog.cjs +2 -0
  108. package/dist/dialogs/form-dialog.cjs.map +1 -0
  109. package/dist/dialogs/form-dialog.d.cts +36 -0
  110. package/dist/dialogs/form-dialog.d.ts +36 -0
  111. package/dist/dialogs/form-dialog.js +2 -0
  112. package/dist/dialogs/form-dialog.js.map +1 -0
  113. package/dist/dialogs/loading-dialog.cjs +2 -0
  114. package/dist/dialogs/loading-dialog.cjs.map +1 -0
  115. package/dist/dialogs/loading-dialog.d.cts +11 -0
  116. package/dist/dialogs/loading-dialog.d.ts +11 -0
  117. package/dist/dialogs/loading-dialog.js +2 -0
  118. package/dist/dialogs/loading-dialog.js.map +1 -0
  119. package/dist/dropdown-menu-Bv18S56o.cjs +2 -0
  120. package/dist/dropdown-menu-Bv18S56o.cjs.map +1 -0
  121. package/dist/dropdown-menu-jCQwh2rG.js +2 -0
  122. package/dist/dropdown-menu-jCQwh2rG.js.map +1 -0
  123. package/dist/error-dialog-D_4WL-Hj.js +2 -0
  124. package/dist/error-dialog-D_4WL-Hj.js.map +1 -0
  125. package/dist/error-dialog-DpQgL5Hy.cjs +2 -0
  126. package/dist/error-dialog-DpQgL5Hy.cjs.map +1 -0
  127. package/dist/flex-CNA_SId-.cjs +2 -0
  128. package/dist/flex-CNA_SId-.cjs.map +1 -0
  129. package/dist/flex-ILvQrYMJ.js +2 -0
  130. package/dist/flex-ILvQrYMJ.js.map +1 -0
  131. package/dist/form-CA4hhSV5.js +2 -0
  132. package/dist/form-CA4hhSV5.js.map +1 -0
  133. package/dist/form-CYZkgobJ.cjs +2 -0
  134. package/dist/form-CYZkgobJ.cjs.map +1 -0
  135. package/dist/form-wrapper-BYbwt1zC.cjs +2 -0
  136. package/dist/form-wrapper-BYbwt1zC.cjs.map +1 -0
  137. package/dist/form-wrapper-D-2Uz518.js +2 -0
  138. package/dist/form-wrapper-D-2Uz518.js.map +1 -0
  139. package/dist/forms/form-wrapper.cjs +1 -0
  140. package/dist/forms/form-wrapper.d.cts +25 -0
  141. package/dist/forms/form-wrapper.d.ts +25 -0
  142. package/dist/forms/form-wrapper.js +1 -0
  143. package/dist/{input-DsHkxcpM.d.cts → input-BZ9_HhgL.d.cts} +3 -2
  144. package/dist/{input-BROCl7ef.cjs → input-DXEBB91E.cjs} +1 -1
  145. package/dist/{input-BROCl7ef.cjs.map → input-DXEBB91E.cjs.map} +1 -1
  146. package/dist/{input-3pmkK3b5.js → input-FzKbxUq2.js} +1 -1
  147. package/dist/{input-3pmkK3b5.js.map → input-FzKbxUq2.js.map} +1 -1
  148. package/dist/{input-8iac_flR.d.ts → input-k2bQHeqx.d.ts} +3 -2
  149. package/dist/{label-BWUQswhZ.cjs → label-CunjD1rx.cjs} +2 -2
  150. package/dist/{label-BWUQswhZ.cjs.map → label-CunjD1rx.cjs.map} +1 -1
  151. package/dist/{label-Bunoo8Hy.js → label-Cxbctr6x.js} +2 -2
  152. package/dist/{label-Bunoo8Hy.js.map → label-Cxbctr6x.js.map} +1 -1
  153. package/dist/layouts/flex.cjs +1 -0
  154. package/dist/layouts/flex.d.cts +34 -0
  155. package/dist/layouts/flex.d.ts +34 -0
  156. package/dist/layouts/flex.js +1 -0
  157. package/dist/layouts/main/index.cjs +2 -0
  158. package/dist/layouts/main/index.cjs.map +1 -0
  159. package/dist/layouts/main/index.d.cts +9 -0
  160. package/dist/layouts/main/index.d.ts +9 -0
  161. package/dist/layouts/main/index.js +2 -0
  162. package/dist/layouts/main/index.js.map +1 -0
  163. package/dist/paragraph-Bey03JkA.js +2 -0
  164. package/dist/paragraph-Bey03JkA.js.map +1 -0
  165. package/dist/paragraph-ZxI8zxuf.cjs +2 -0
  166. package/dist/paragraph-ZxI8zxuf.cjs.map +1 -0
  167. package/dist/{progress-CBXP2lsp.cjs → progress-BnnOfAZN.cjs} +2 -2
  168. package/dist/{progress-CBXP2lsp.cjs.map → progress-BnnOfAZN.cjs.map} +1 -1
  169. package/dist/{progress-Djnu-m1x.js → progress-CBccqUUJ.js} +2 -2
  170. package/dist/{progress-Djnu-m1x.js.map → progress-CBccqUUJ.js.map} +1 -1
  171. package/dist/refresh-BHt_h3N_.js +2 -0
  172. package/dist/refresh-BHt_h3N_.js.map +1 -0
  173. package/dist/refresh-DrolZxuC.cjs +2 -0
  174. package/dist/refresh-DrolZxuC.cjs.map +1 -0
  175. package/dist/scroll-area-Bdb_LSFF.js +2 -0
  176. package/dist/scroll-area-Bdb_LSFF.js.map +1 -0
  177. package/dist/scroll-area-DWWpaz5j.cjs +2 -0
  178. package/dist/scroll-area-DWWpaz5j.cjs.map +1 -0
  179. package/dist/search-input-Bf4-FeWu.cjs +2 -0
  180. package/dist/search-input-Bf4-FeWu.cjs.map +1 -0
  181. package/dist/search-input-L2sq0eB0.js +2 -0
  182. package/dist/search-input-L2sq0eB0.js.map +1 -0
  183. package/dist/select-CWUsisI0.js +2 -0
  184. package/dist/select-CWUsisI0.js.map +1 -0
  185. package/dist/select-ZSyt5zCe.cjs +2 -0
  186. package/dist/select-ZSyt5zCe.cjs.map +1 -0
  187. package/dist/{separator-BaoBlWkX.js → separator-BpsL0PlX.js} +2 -2
  188. package/dist/{separator-BaoBlWkX.js.map → separator-BpsL0PlX.js.map} +1 -1
  189. package/dist/{separator-BPDcnSwd.d.ts → separator-DQ9iJjVc.d.ts} +3 -2
  190. package/dist/{separator-BQnQELxf.d.cts → separator-DSY4OI_p.d.cts} +3 -2
  191. package/dist/{separator-9OOo_7TH.cjs → separator-DTB3sDNG.cjs} +2 -2
  192. package/dist/{separator-9OOo_7TH.cjs.map → separator-DTB3sDNG.cjs.map} +1 -1
  193. package/dist/{sheet-DOuBq08n.js → sheet-C8r2QGpq.js} +2 -2
  194. package/dist/{sheet-DOuBq08n.js.map → sheet-C8r2QGpq.js.map} +1 -1
  195. package/dist/{sheet-CiEiXosI.cjs → sheet-CCwbAaA6.cjs} +2 -2
  196. package/dist/{sheet-CiEiXosI.cjs.map → sheet-CCwbAaA6.cjs.map} +1 -1
  197. package/dist/sidebar-BLPMNltJ.cjs +2 -0
  198. package/dist/sidebar-BLPMNltJ.cjs.map +1 -0
  199. package/dist/sidebar-C166f_9B.js +2 -0
  200. package/dist/sidebar-C166f_9B.js.map +1 -0
  201. package/dist/{skeleton-Dk94cI3u.js → skeleton-DYmX0k94.js} +1 -1
  202. package/dist/{skeleton-Dk94cI3u.js.map → skeleton-DYmX0k94.js.map} +1 -1
  203. package/dist/{skeleton-6plHDAxf.cjs → skeleton-m3giaF4T.cjs} +1 -1
  204. package/dist/{skeleton-6plHDAxf.cjs.map → skeleton-m3giaF4T.cjs.map} +1 -1
  205. package/dist/table/index.cjs +2 -0
  206. package/dist/table/index.cjs.map +1 -0
  207. package/dist/table/index.d.cts +30 -0
  208. package/dist/table/index.d.ts +30 -0
  209. package/dist/table/index.js +2 -0
  210. package/dist/table/index.js.map +1 -0
  211. package/dist/table-BSeev7T0.cjs +2 -0
  212. package/dist/table-BSeev7T0.cjs.map +1 -0
  213. package/dist/table-BvA64mE8.js +2 -0
  214. package/dist/table-BvA64mE8.js.map +1 -0
  215. package/dist/title-DTkABsIG.js +2 -0
  216. package/dist/title-DTkABsIG.js.map +1 -0
  217. package/dist/title-xsPZpQpb.cjs +2 -0
  218. package/dist/title-xsPZpQpb.cjs.map +1 -0
  219. package/dist/{toggle-D7fc-kHq.d.cts → toggle-B3RSxTKL.d.cts} +7 -6
  220. package/dist/{toggle-Dp4zRN_S.cjs → toggle-CfL3GVe2.cjs} +2 -2
  221. package/dist/{toggle-Dp4zRN_S.cjs.map → toggle-CfL3GVe2.cjs.map} +1 -1
  222. package/dist/{toggle-BiWsAYlU.js → toggle-D_MDMruK.js} +2 -2
  223. package/dist/{toggle-BiWsAYlU.js.map → toggle-D_MDMruK.js.map} +1 -1
  224. package/dist/{toggle-BI0k1RKv.d.ts → toggle-DygwYpUS.d.ts} +5 -4
  225. package/dist/{tooltip-DD0V2FX5.cjs → tooltip-Beb-_EPp.cjs} +2 -2
  226. package/dist/{tooltip-DD0V2FX5.cjs.map → tooltip-Beb-_EPp.cjs.map} +1 -1
  227. package/dist/tooltip-Ct7VJoYo.d.ts +24 -0
  228. package/dist/tooltip-DNtfXZW2.d.cts +24 -0
  229. package/dist/{tooltip-CrBGwym3.js → tooltip-Dzyf5smh.js} +2 -2
  230. package/dist/{tooltip-CrBGwym3.js.map → tooltip-Dzyf5smh.js.map} +1 -1
  231. package/dist/types-B0V1F4Ml.d.cts +23 -0
  232. package/dist/types-CrbWxjnp.cjs +2 -0
  233. package/dist/types-CrbWxjnp.cjs.map +1 -0
  234. package/dist/types-DLrIc2fL.d.ts +23 -0
  235. package/dist/types-DaIHddx7.js +2 -0
  236. package/dist/types-DaIHddx7.js.map +1 -0
  237. package/dist/typography/paragraph.cjs +1 -0
  238. package/dist/typography/paragraph.d.cts +17 -0
  239. package/dist/typography/paragraph.d.ts +17 -0
  240. package/dist/typography/paragraph.js +1 -0
  241. package/dist/typography/title.cjs +1 -0
  242. package/dist/typography/title.d.cts +16 -0
  243. package/dist/typography/title.d.ts +16 -0
  244. package/dist/typography/title.js +1 -0
  245. package/dist/ui/alert-dialog.cjs +1 -0
  246. package/dist/ui/alert-dialog.d.cts +49 -0
  247. package/dist/ui/alert-dialog.d.ts +49 -0
  248. package/dist/ui/alert-dialog.js +1 -0
  249. package/dist/ui/alert.cjs +2 -0
  250. package/dist/ui/alert.cjs.map +1 -0
  251. package/dist/{alert.d.cts → ui/alert.d.cts} +6 -5
  252. package/dist/{alert.d.ts → ui/alert.d.ts} +4 -3
  253. package/dist/ui/alert.js +2 -0
  254. package/dist/ui/alert.js.map +1 -0
  255. package/dist/ui/aspect-ratio.cjs +2 -0
  256. package/dist/ui/aspect-ratio.cjs.map +1 -0
  257. package/dist/{aspect-ratio.d.cts → ui/aspect-ratio.d.cts} +2 -1
  258. package/dist/{aspect-ratio.d.ts → ui/aspect-ratio.d.ts} +2 -1
  259. package/dist/ui/aspect-ratio.js +2 -0
  260. package/dist/ui/aspect-ratio.js.map +1 -0
  261. package/dist/ui/avatar.cjs +2 -0
  262. package/dist/ui/avatar.cjs.map +1 -0
  263. package/dist/{avatar.d.cts → ui/avatar.d.cts} +4 -3
  264. package/dist/{avatar.d.ts → ui/avatar.d.ts} +4 -3
  265. package/dist/ui/avatar.js +2 -0
  266. package/dist/ui/avatar.js.map +1 -0
  267. package/dist/ui/badge.cjs +1 -0
  268. package/dist/{badge.d.cts → ui/badge.d.cts} +5 -4
  269. package/dist/{badge.d.ts → ui/badge.d.ts} +3 -2
  270. package/dist/ui/badge.js +1 -0
  271. package/dist/ui/breadcrumb.cjs +2 -0
  272. package/dist/ui/breadcrumb.cjs.map +1 -0
  273. package/dist/{breadcrumb.d.cts → ui/breadcrumb.d.cts} +8 -7
  274. package/dist/{breadcrumb.d.ts → ui/breadcrumb.d.ts} +8 -7
  275. package/dist/ui/breadcrumb.js +2 -0
  276. package/dist/ui/breadcrumb.js.map +1 -0
  277. package/dist/ui/button.cjs +1 -0
  278. package/dist/ui/button.d.cts +2 -0
  279. package/dist/ui/button.d.ts +2 -0
  280. package/dist/ui/button.js +1 -0
  281. package/dist/ui/buttons/add-new.cjs +1 -0
  282. package/dist/ui/buttons/add-new.d.cts +8 -0
  283. package/dist/ui/buttons/add-new.d.ts +8 -0
  284. package/dist/ui/buttons/add-new.js +1 -0
  285. package/dist/ui/buttons/refresh.cjs +1 -0
  286. package/dist/ui/buttons/refresh.d.cts +8 -0
  287. package/dist/ui/buttons/refresh.d.ts +8 -0
  288. package/dist/ui/buttons/refresh.js +1 -0
  289. package/dist/ui/calendar.cjs +2 -0
  290. package/dist/ui/calendar.cjs.map +1 -0
  291. package/dist/{calendar.d.cts → ui/calendar.d.cts} +4 -3
  292. package/dist/{calendar.d.ts → ui/calendar.d.ts} +4 -3
  293. package/dist/ui/calendar.js +2 -0
  294. package/dist/ui/calendar.js.map +1 -0
  295. package/dist/ui/card.cjs +1 -0
  296. package/dist/ui/card.d.cts +35 -0
  297. package/dist/{card.d.ts → ui/card.d.ts} +8 -7
  298. package/dist/ui/card.js +1 -0
  299. package/dist/ui/carousel.cjs +2 -0
  300. package/dist/ui/carousel.cjs.map +1 -0
  301. package/dist/{carousel.d.cts → ui/carousel.d.cts} +7 -6
  302. package/dist/{carousel.d.ts → ui/carousel.d.ts} +7 -6
  303. package/dist/ui/carousel.js +2 -0
  304. package/dist/ui/carousel.js.map +1 -0
  305. package/dist/ui/collapsible.cjs +2 -0
  306. package/dist/ui/collapsible.cjs.map +1 -0
  307. package/dist/{collapsible.d.cts → ui/collapsible.d.cts} +4 -3
  308. package/dist/{collapsible.d.ts → ui/collapsible.d.ts} +4 -3
  309. package/dist/ui/collapsible.js +2 -0
  310. package/dist/ui/collapsible.js.map +1 -0
  311. package/dist/ui/command.cjs +1 -0
  312. package/dist/{command.d.cts → ui/command.d.cts} +2 -2
  313. package/dist/{command.d.ts → ui/command.d.ts} +2 -2
  314. package/dist/ui/command.js +1 -0
  315. package/dist/ui/context-menu.cjs +2 -0
  316. package/dist/ui/context-menu.cjs.map +1 -0
  317. package/dist/{context-menu.d.cts → ui/context-menu.d.cts} +16 -15
  318. package/dist/{context-menu.d.ts → ui/context-menu.d.ts} +16 -15
  319. package/dist/ui/context-menu.js +2 -0
  320. package/dist/ui/context-menu.js.map +1 -0
  321. package/dist/ui/dialog.cjs +1 -0
  322. package/dist/{dialog.d.cts → ui/dialog.d.cts} +1 -1
  323. package/dist/{dialog.d.ts → ui/dialog.d.ts} +1 -1
  324. package/dist/ui/dialog.js +1 -0
  325. package/dist/ui/dropdown-menu.cjs +1 -0
  326. package/dist/{dropdown-menu.d.cts → ui/dropdown-menu.d.cts} +16 -15
  327. package/dist/{dropdown-menu.d.ts → ui/dropdown-menu.d.ts} +16 -15
  328. package/dist/ui/dropdown-menu.js +1 -0
  329. package/dist/ui/file-uploader.cjs +3 -0
  330. package/dist/ui/file-uploader.cjs.map +1 -0
  331. package/dist/{file-uploader.d.cts → ui/file-uploader.d.cts} +2 -1
  332. package/dist/{file-uploader.d.ts → ui/file-uploader.d.ts} +2 -1
  333. package/dist/ui/file-uploader.js +3 -0
  334. package/dist/ui/file-uploader.js.map +1 -0
  335. package/dist/ui/form.cjs +1 -0
  336. package/dist/{form.d.cts → ui/form.d.cts} +8 -7
  337. package/dist/{form.d.ts → ui/form.d.ts} +7 -6
  338. package/dist/ui/form.js +1 -0
  339. package/dist/ui/hover-card.cjs +2 -0
  340. package/dist/ui/hover-card.cjs.map +1 -0
  341. package/dist/{hover-card.d.cts → ui/hover-card.d.cts} +4 -3
  342. package/dist/{hover-card.d.ts → ui/hover-card.d.ts} +4 -3
  343. package/dist/ui/hover-card.js +2 -0
  344. package/dist/ui/hover-card.js.map +1 -0
  345. package/dist/ui/input-otp.cjs +2 -0
  346. package/dist/ui/input-otp.cjs.map +1 -0
  347. package/dist/{input-otp.d.cts → ui/input-otp.d.cts} +5 -4
  348. package/dist/{input-otp.d.ts → ui/input-otp.d.ts} +5 -4
  349. package/dist/ui/input-otp.js +2 -0
  350. package/dist/ui/input-otp.js.map +1 -0
  351. package/dist/ui/input.cjs +1 -0
  352. package/dist/ui/input.d.cts +2 -0
  353. package/dist/ui/input.d.ts +2 -0
  354. package/dist/ui/input.js +1 -0
  355. package/dist/ui/inputs/search-input.cjs +1 -0
  356. package/dist/ui/inputs/search-input.d.cts +12 -0
  357. package/dist/ui/inputs/search-input.d.ts +12 -0
  358. package/dist/ui/inputs/search-input.js +1 -0
  359. package/dist/ui/label.cjs +1 -0
  360. package/dist/{label.d.cts → ui/label.d.cts} +2 -1
  361. package/dist/{label.d.ts → ui/label.d.ts} +2 -1
  362. package/dist/ui/label.js +1 -0
  363. package/dist/ui/menubar.cjs +2 -0
  364. package/dist/ui/menubar.cjs.map +1 -0
  365. package/dist/{menubar.d.cts → ui/menubar.d.cts} +17 -16
  366. package/dist/{menubar.d.ts → ui/menubar.d.ts} +17 -16
  367. package/dist/ui/menubar.js +2 -0
  368. package/dist/ui/menubar.js.map +1 -0
  369. package/dist/ui/multi-select.cjs +2 -0
  370. package/dist/ui/multi-select.cjs.map +1 -0
  371. package/dist/{multi-select.d.cts → ui/multi-select.d.cts} +2 -2
  372. package/dist/{multi-select.d.ts → ui/multi-select.d.ts} +2 -2
  373. package/dist/ui/multi-select.js +2 -0
  374. package/dist/ui/multi-select.js.map +1 -0
  375. package/dist/ui/navigation-menu.cjs +2 -0
  376. package/dist/ui/navigation-menu.cjs.map +1 -0
  377. package/dist/{navigation-menu.d.cts → ui/navigation-menu.d.cts} +11 -10
  378. package/dist/{navigation-menu.d.ts → ui/navigation-menu.d.ts} +11 -10
  379. package/dist/ui/navigation-menu.js +2 -0
  380. package/dist/ui/navigation-menu.js.map +1 -0
  381. package/dist/ui/pagination.cjs +2 -0
  382. package/dist/ui/pagination.cjs.map +1 -0
  383. package/dist/{pagination.d.cts → ui/pagination.d.cts} +9 -8
  384. package/dist/{pagination.d.ts → ui/pagination.d.ts} +9 -8
  385. package/dist/ui/pagination.js +2 -0
  386. package/dist/ui/pagination.js.map +1 -0
  387. package/dist/ui/popover.cjs +2 -0
  388. package/dist/ui/popover.cjs.map +1 -0
  389. package/dist/ui/popover.d.cts +24 -0
  390. package/dist/ui/popover.d.ts +24 -0
  391. package/dist/ui/popover.js +2 -0
  392. package/dist/ui/popover.js.map +1 -0
  393. package/dist/ui/progress.cjs +1 -0
  394. package/dist/{progress.d.cts → ui/progress.d.cts} +2 -1
  395. package/dist/{progress.d.ts → ui/progress.d.ts} +2 -1
  396. package/dist/ui/progress.js +1 -0
  397. package/dist/ui/radio-group.cjs +2 -0
  398. package/dist/ui/radio-group.cjs.map +1 -0
  399. package/dist/{radio-group.d.cts → ui/radio-group.d.cts} +3 -2
  400. package/dist/{radio-group.d.ts → ui/radio-group.d.ts} +3 -2
  401. package/dist/ui/radio-group.js +2 -0
  402. package/dist/ui/radio-group.js.map +1 -0
  403. package/dist/ui/resizable.cjs +2 -0
  404. package/dist/ui/resizable.cjs.map +1 -0
  405. package/dist/{resizable.d.cts → ui/resizable.d.cts} +4 -3
  406. package/dist/{resizable.d.ts → ui/resizable.d.ts} +4 -3
  407. package/dist/ui/resizable.js +2 -0
  408. package/dist/ui/resizable.js.map +1 -0
  409. package/dist/ui/scroll-area.cjs +1 -0
  410. package/dist/{scroll-area.d.cts → ui/scroll-area.d.cts} +3 -2
  411. package/dist/{scroll-area.d.ts → ui/scroll-area.d.ts} +3 -2
  412. package/dist/ui/scroll-area.js +1 -0
  413. package/dist/ui/select.cjs +1 -0
  414. package/dist/{select.d.cts → ui/select.d.cts} +11 -10
  415. package/dist/{select.d.ts → ui/select.d.ts} +11 -10
  416. package/dist/ui/select.js +1 -0
  417. package/dist/ui/separator.cjs +1 -0
  418. package/dist/ui/separator.d.cts +2 -0
  419. package/dist/ui/separator.d.ts +2 -0
  420. package/dist/ui/separator.js +1 -0
  421. package/dist/ui/sheet.cjs +1 -0
  422. package/dist/{sheet.d.cts → ui/sheet.d.cts} +9 -8
  423. package/dist/{sheet.d.ts → ui/sheet.d.ts} +9 -8
  424. package/dist/ui/sheet.js +1 -0
  425. package/dist/ui/sidebar.cjs +1 -0
  426. package/dist/{sidebar.d.cts → ui/sidebar.d.cts} +29 -28
  427. package/dist/{sidebar.d.ts → ui/sidebar.d.ts} +31 -30
  428. package/dist/ui/sidebar.js +1 -0
  429. package/dist/ui/skeleton.cjs +1 -0
  430. package/dist/ui/skeleton.d.cts +11 -0
  431. package/dist/ui/skeleton.d.ts +11 -0
  432. package/dist/ui/skeleton.js +1 -0
  433. package/dist/ui/slider.cjs +2 -0
  434. package/dist/ui/slider.cjs.map +1 -0
  435. package/dist/{slider.d.cts → ui/slider.d.cts} +2 -1
  436. package/dist/{slider.d.ts → ui/slider.d.ts} +2 -1
  437. package/dist/ui/slider.js +2 -0
  438. package/dist/ui/slider.js.map +1 -0
  439. package/dist/ui/sonner.cjs +2 -0
  440. package/dist/ui/sonner.cjs.map +1 -0
  441. package/dist/ui/sonner.d.cts +7 -0
  442. package/dist/ui/sonner.d.ts +7 -0
  443. package/dist/ui/sonner.js.map +1 -0
  444. package/dist/ui/switch.cjs +2 -0
  445. package/dist/ui/switch.cjs.map +1 -0
  446. package/dist/{switch.d.cts → ui/switch.d.cts} +2 -1
  447. package/dist/{switch.d.ts → ui/switch.d.ts} +2 -1
  448. package/dist/ui/switch.js +2 -0
  449. package/dist/ui/switch.js.map +1 -0
  450. package/dist/ui/table.cjs +1 -0
  451. package/dist/ui/table.d.cts +39 -0
  452. package/dist/ui/table.d.ts +39 -0
  453. package/dist/ui/table.js +1 -0
  454. package/dist/ui/tabs.cjs +2 -0
  455. package/dist/ui/tabs.cjs.map +1 -0
  456. package/dist/ui/tabs.d.cts +24 -0
  457. package/dist/ui/tabs.d.ts +24 -0
  458. package/dist/ui/tabs.js +2 -0
  459. package/dist/ui/tabs.js.map +1 -0
  460. package/dist/ui/textarea.cjs +2 -0
  461. package/dist/ui/textarea.cjs.map +1 -0
  462. package/dist/{textarea.d.cts → ui/textarea.d.cts} +2 -1
  463. package/dist/{textarea.d.ts → ui/textarea.d.ts} +2 -1
  464. package/dist/ui/textarea.js +2 -0
  465. package/dist/ui/textarea.js.map +1 -0
  466. package/dist/ui/toggle-group.cjs +2 -0
  467. package/dist/ui/toggle-group.cjs.map +1 -0
  468. package/dist/{toggle-group.d.cts → ui/toggle-group.d.cts} +5 -4
  469. package/dist/{toggle-group.d.ts → ui/toggle-group.d.ts} +5 -4
  470. package/dist/ui/toggle-group.js +2 -0
  471. package/dist/ui/toggle-group.js.map +1 -0
  472. package/dist/ui/toggle.cjs +1 -0
  473. package/dist/ui/toggle.d.cts +2 -0
  474. package/dist/ui/toggle.d.ts +2 -0
  475. package/dist/ui/toggle.js +1 -0
  476. package/dist/ui/tooltip.cjs +1 -0
  477. package/dist/{tooltip.d.cts → ui/tooltip.d.cts} +1 -1
  478. package/dist/{tooltip.d.ts → ui/tooltip.d.ts} +1 -1
  479. package/dist/ui/tooltip.js +1 -0
  480. package/package.json +230 -133
  481. package/dist/alert-dialog.cjs +0 -2
  482. package/dist/alert-dialog.d.cts +0 -48
  483. package/dist/alert-dialog.d.ts +0 -48
  484. package/dist/alert-dialog.js +0 -2
  485. package/dist/alert-dialog.js.map +0 -1
  486. package/dist/alert.cjs +0 -2
  487. package/dist/alert.cjs.map +0 -1
  488. package/dist/alert.js +0 -2
  489. package/dist/alert.js.map +0 -1
  490. package/dist/aspect-ratio.cjs +0 -2
  491. package/dist/aspect-ratio.cjs.map +0 -1
  492. package/dist/aspect-ratio.js +0 -2
  493. package/dist/aspect-ratio.js.map +0 -1
  494. package/dist/avatar.cjs +0 -2
  495. package/dist/avatar.cjs.map +0 -1
  496. package/dist/avatar.js +0 -2
  497. package/dist/avatar.js.map +0 -1
  498. package/dist/badge.cjs +0 -2
  499. package/dist/badge.cjs.map +0 -1
  500. package/dist/badge.js +0 -2
  501. package/dist/badge.js.map +0 -1
  502. package/dist/breadcrumb.cjs +0 -2
  503. package/dist/breadcrumb.cjs.map +0 -1
  504. package/dist/breadcrumb.js +0 -2
  505. package/dist/breadcrumb.js.map +0 -1
  506. package/dist/button-C1iCV8GH.js +0 -2
  507. package/dist/button-C1iCV8GH.js.map +0 -1
  508. package/dist/button-CXoxOggw.cjs +0 -2
  509. package/dist/button-CXoxOggw.cjs.map +0 -1
  510. package/dist/button.cjs +0 -1
  511. package/dist/button.d.cts +0 -2
  512. package/dist/button.d.ts +0 -2
  513. package/dist/button.js +0 -1
  514. package/dist/calendar.cjs +0 -2
  515. package/dist/calendar.cjs.map +0 -1
  516. package/dist/calendar.js +0 -2
  517. package/dist/calendar.js.map +0 -1
  518. package/dist/card.cjs.map +0 -1
  519. package/dist/card.d.cts +0 -34
  520. package/dist/card.js.map +0 -1
  521. package/dist/carousel.cjs +0 -2
  522. package/dist/carousel.cjs.map +0 -1
  523. package/dist/carousel.js +0 -2
  524. package/dist/carousel.js.map +0 -1
  525. package/dist/collapsible.cjs +0 -2
  526. package/dist/collapsible.cjs.map +0 -1
  527. package/dist/collapsible.js +0 -2
  528. package/dist/collapsible.js.map +0 -1
  529. package/dist/command.cjs +0 -1
  530. package/dist/command.js +0 -1
  531. package/dist/context-menu.cjs +0 -2
  532. package/dist/context-menu.cjs.map +0 -1
  533. package/dist/context-menu.js +0 -2
  534. package/dist/context-menu.js.map +0 -1
  535. package/dist/dialog.cjs +0 -1
  536. package/dist/dialog.js +0 -1
  537. package/dist/dropdown-menu.cjs +0 -2
  538. package/dist/dropdown-menu.cjs.map +0 -1
  539. package/dist/dropdown-menu.js +0 -2
  540. package/dist/dropdown-menu.js.map +0 -1
  541. package/dist/file-uploader.cjs +0 -3
  542. package/dist/file-uploader.cjs.map +0 -1
  543. package/dist/file-uploader.js +0 -3
  544. package/dist/file-uploader.js.map +0 -1
  545. package/dist/form.cjs +0 -2
  546. package/dist/form.cjs.map +0 -1
  547. package/dist/form.js +0 -2
  548. package/dist/form.js.map +0 -1
  549. package/dist/hover-card.cjs +0 -2
  550. package/dist/hover-card.cjs.map +0 -1
  551. package/dist/hover-card.js +0 -2
  552. package/dist/hover-card.js.map +0 -1
  553. package/dist/input-otp.cjs +0 -2
  554. package/dist/input-otp.cjs.map +0 -1
  555. package/dist/input-otp.js +0 -2
  556. package/dist/input-otp.js.map +0 -1
  557. package/dist/input.cjs +0 -1
  558. package/dist/input.d.cts +0 -2
  559. package/dist/input.d.ts +0 -2
  560. package/dist/input.js +0 -1
  561. package/dist/label.cjs +0 -1
  562. package/dist/label.js +0 -1
  563. package/dist/menubar.cjs +0 -2
  564. package/dist/menubar.cjs.map +0 -1
  565. package/dist/menubar.js +0 -2
  566. package/dist/menubar.js.map +0 -1
  567. package/dist/multi-select.cjs +0 -2
  568. package/dist/multi-select.cjs.map +0 -1
  569. package/dist/multi-select.js +0 -2
  570. package/dist/multi-select.js.map +0 -1
  571. package/dist/navigation-menu.cjs +0 -2
  572. package/dist/navigation-menu.cjs.map +0 -1
  573. package/dist/navigation-menu.js +0 -2
  574. package/dist/navigation-menu.js.map +0 -1
  575. package/dist/pagination.cjs +0 -2
  576. package/dist/pagination.cjs.map +0 -1
  577. package/dist/pagination.js +0 -2
  578. package/dist/pagination.js.map +0 -1
  579. package/dist/popover.cjs +0 -2
  580. package/dist/popover.cjs.map +0 -1
  581. package/dist/popover.d.cts +0 -23
  582. package/dist/popover.d.ts +0 -23
  583. package/dist/popover.js +0 -2
  584. package/dist/popover.js.map +0 -1
  585. package/dist/progress.cjs +0 -1
  586. package/dist/progress.js +0 -1
  587. package/dist/radio-group.cjs +0 -2
  588. package/dist/radio-group.cjs.map +0 -1
  589. package/dist/radio-group.js +0 -2
  590. package/dist/radio-group.js.map +0 -1
  591. package/dist/resizable.cjs +0 -2
  592. package/dist/resizable.cjs.map +0 -1
  593. package/dist/resizable.js +0 -2
  594. package/dist/resizable.js.map +0 -1
  595. package/dist/scroll-area.cjs +0 -2
  596. package/dist/scroll-area.cjs.map +0 -1
  597. package/dist/scroll-area.js +0 -2
  598. package/dist/scroll-area.js.map +0 -1
  599. package/dist/select.cjs +0 -2
  600. package/dist/select.cjs.map +0 -1
  601. package/dist/select.js +0 -2
  602. package/dist/select.js.map +0 -1
  603. package/dist/separator.cjs +0 -1
  604. package/dist/separator.d.cts +0 -2
  605. package/dist/separator.d.ts +0 -2
  606. package/dist/separator.js +0 -1
  607. package/dist/sheet.cjs +0 -1
  608. package/dist/sheet.js +0 -1
  609. package/dist/sidebar.cjs +0 -2
  610. package/dist/sidebar.cjs.map +0 -1
  611. package/dist/sidebar.js +0 -2
  612. package/dist/sidebar.js.map +0 -1
  613. package/dist/skeleton.cjs +0 -1
  614. package/dist/skeleton.d.cts +0 -10
  615. package/dist/skeleton.d.ts +0 -10
  616. package/dist/skeleton.js +0 -1
  617. package/dist/slider.cjs +0 -2
  618. package/dist/slider.cjs.map +0 -1
  619. package/dist/slider.js +0 -2
  620. package/dist/slider.js.map +0 -1
  621. package/dist/sonner.cjs +0 -2
  622. package/dist/sonner.cjs.map +0 -1
  623. package/dist/sonner.d.cts +0 -7
  624. package/dist/sonner.d.ts +0 -7
  625. package/dist/sonner.js.map +0 -1
  626. package/dist/switch.cjs +0 -2
  627. package/dist/switch.cjs.map +0 -1
  628. package/dist/switch.js +0 -2
  629. package/dist/switch.js.map +0 -1
  630. package/dist/table.cjs +0 -2
  631. package/dist/table.cjs.map +0 -1
  632. package/dist/table.d.cts +0 -38
  633. package/dist/table.d.ts +0 -38
  634. package/dist/table.js +0 -2
  635. package/dist/table.js.map +0 -1
  636. package/dist/tabs.cjs +0 -2
  637. package/dist/tabs.cjs.map +0 -1
  638. package/dist/tabs.d.cts +0 -23
  639. package/dist/tabs.d.ts +0 -23
  640. package/dist/tabs.js +0 -2
  641. package/dist/tabs.js.map +0 -1
  642. package/dist/textarea.cjs +0 -2
  643. package/dist/textarea.cjs.map +0 -1
  644. package/dist/textarea.js +0 -2
  645. package/dist/textarea.js.map +0 -1
  646. package/dist/toggle-group.cjs +0 -2
  647. package/dist/toggle-group.cjs.map +0 -1
  648. package/dist/toggle-group.js +0 -2
  649. package/dist/toggle-group.js.map +0 -1
  650. package/dist/toggle.cjs +0 -1
  651. package/dist/toggle.d.cts +0 -2
  652. package/dist/toggle.d.ts +0 -2
  653. package/dist/toggle.js +0 -1
  654. package/dist/tooltip-C1-JwUE1.d.ts +0 -23
  655. package/dist/tooltip-CRUIRMCA.d.cts +0 -23
  656. package/dist/tooltip.cjs +0 -1
  657. package/dist/tooltip.js +0 -1
  658. /package/dist/{sonner.js → ui/sonner.js} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"dropdown-menu.js","names":["DropdownMenuPrimitive"],"sources":["../packages/components/ui/dropdown-menu.tsx"],"sourcesContent":["\"use client\";\nimport React from \"react\";\nimport { DropdownMenu as DropdownMenuPrimitive } from \"radix-ui\";\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\";\n\nimport { cn } from \"@/lib/utils\";\n\nfunction DropdownMenu({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {\n return <DropdownMenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />;\n}\n\nfunction DropdownMenuPortal({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\n return (\n <DropdownMenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />\n );\n}\n\nfunction DropdownMenuTrigger({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {\n return (\n <DropdownMenuPrimitive.Trigger\n data-slot=\"dropdown-menu-trigger\"\n {...props}\n />\n );\n}\n\nfunction DropdownMenuContent({\n className,\n sideOffset = 4,\n align = \"start\",\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n data-slot=\"dropdown-menu-content\"\n sideOffset={sideOffset}\n className={cn(\n \"bg-popover text-popover-foreground\",\n \"z-50\",\n \"min-w-32\",\n \"overflow-x-hidden overflow-y-auto\",\n \"rounded-md border p-1.5 shadow-md\",\n \"max-h-(--radix-dropdown-menu-content-available-height)\",\n \"origin-(--radix-dropdown-menu-content-transform-origin)\",\n \"data-[state=open]:animate-in\",\n \"data-[state=open]:fade-in-0\",\n \"data-[state=open]:zoom-in-95\",\n \"data-[state=closed]:animate-out\",\n \"data-[state=closed]:fade-out-0\",\n \"data-[state=closed]:zoom-out-95\",\n \"data-[side=bottom]:slide-in-from-top-2\",\n \"data-[side=left]:slide-in-from-right-2\",\n \"data-[side=right]:slide-in-from-left-2\",\n \"data-[side=top]:slide-in-from-bottom-2\",\n className,\n )}\n {...props}\n align={align}\n />\n </DropdownMenuPrimitive.Portal>\n );\n}\n\nfunction DropdownMenuGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {\n return (\n <DropdownMenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />\n );\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean;\n variant?: \"default\" | \"destructive\";\n}) {\n return (\n <DropdownMenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"relative flex cursor-pointer items-center gap-2 rounded-md px-2 py-2.5 text-sm outline-hidden transition-all select-none\",\n \"focus:bg-accent/70\",\n \"focus:text-accent-foreground\",\n \"dark:data-[variant=destructive]:focus:bg-destructive/20\",\n \"data-[inset]:pl-8\",\n \"data-[disabled]:pointer-events-none\",\n \"data-[disabled]:opacity-50\",\n \"data-[variant=destructive]:text-destructive\",\n \"data-[variant=destructive]:focus:bg-destructive/10\",\n \"data-[variant=destructive]:focus:text-destructive\",\n \"data-[variant=destructive]:*:[svg]:!text-destructive\",\n \"[&_svg]:shrink-0\",\n \"[&_svg]:pointer-events-none\",\n \"[&_svg:not([class*='size-'])]:size-4\",\n \"[&_svg:not([class*='text-'])]:text-muted-foreground\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) {\n return (\n <DropdownMenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n className={cn(\n \"relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none\",\n \"focus:bg-accent\",\n \"focus:text-accent-foreground\",\n \"data-[disabled]:opacity-50\",\n \"data-[disabled]:pointer-events-none\",\n \"[&_svg]:pointer-events-none\",\n \"[&_svg]:shrink-0\",\n \"[&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n checked={checked}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon size={16} />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n );\n}\n\nfunction DropdownMenuRadioGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\n return (\n <DropdownMenuPrimitive.RadioGroup\n data-slot=\"dropdown-menu-radio-group\"\n {...props}\n />\n );\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>) {\n return (\n <DropdownMenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n className={cn(\n \"relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none\",\n \"focus:bg-accent\",\n \"focus:text-accent-foreground\",\n \"data-[disabled]:pointer-events-none\",\n \"data-[disabled]:opacity-50\",\n \"[&_svg]:pointer-events-none\",\n \"[&_svg]:shrink-0\",\n \"[&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n );\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean;\n}) {\n return (\n <DropdownMenuPrimitive.Label\n data-slot=\"dropdown-menu-label\"\n data-inset={inset}\n className={cn(\n \"px-2 py-1.5 text-sm font-medium data-[inset]:pl-8\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n return (\n <DropdownMenuPrimitive.Separator\n data-slot=\"dropdown-menu-separator\"\n className={cn(\"bg-border -mx-1 my-1 h-px\", 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 \"text-muted-foreground ml-auto text-xs tracking-widest\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuSub({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {\n return <DropdownMenuPrimitive.Sub data-slot=\"dropdown-menu-sub\" {...props} />;\n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean;\n}) {\n return (\n <DropdownMenuPrimitive.SubTrigger\n data-slot=\"dropdown-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-hidden select-none\",\n \"focus:bg-accent\",\n \"focus:text-accent-foreground\",\n \"data-[state=open]:bg-accent\",\n \"data-[state=open]:text-accent-foreground\",\n \"data-[inset]:pl-8\",\n className,\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto size-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n );\n}\n\nfunction DropdownMenuSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\n return (\n <DropdownMenuPrimitive.SubContent\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\n \"bg-popover text-popover-foreground\",\n \"z-50 min-w-32 origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg\",\n \"data-[state=open]:animate-in\",\n \"data-[state=closed]:animate-out\",\n \"data-[state=closed]:fade-out-0\",\n \"data-[state=open]:fade-in-0\",\n \"data-[state=closed]:zoom-out-95\",\n \"data-[state=open]:zoom-in-95\",\n \"data-[side=bottom]:slide-in-from-top-2\",\n \"data-[side=left]:slide-in-from-right-2\",\n \"data-[side=right]:slide-in-from-left-2\",\n \"data-[side=top]:slide-in-from-bottom-2\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n};\n"],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- "use client";const e=require(`./chunk-CUT6urMc.cjs`),t=require(`./utils-BsjVK5EW.cjs`),n=require(`./button-CXoxOggw.cjs`),r=require(`./progress-CBXP2lsp.cjs`),i=e.__toESM(require(`react`)),a=e.__toESM(require(`react/jsx-runtime`)),o=e.__toESM(require(`lucide-react`)),s=e.__toESM(require(`react-dropzone`)),c=e.__toESM(require(`sonner`));function l(e){let t=i.default.useRef(e);return i.default.useEffect(()=>{t.current=e}),i.default.useMemo(()=>((...e)=>t.current?.(...e)),[])}function u({prop:e,defaultProp:t,onChange:n=()=>{}}){let[r,a]=d({defaultProp:t,onChange:n}),o=e!==void 0,s=o?e:r,c=l(n),u=i.default.useCallback(t=>{if(o){let n=t,r=typeof t==`function`?n(e):t;r!==e&&c(r)}else a(t)},[o,e,a,c]);return[s,u]}function d({defaultProp:e,onChange:t}){let n=i.default.useState(e),[r]=n,a=i.default.useRef(r),o=l(t);return i.default.useEffect(()=>{a.current!==r&&(o(r),a.current=r)},[r,a,o]),n}function f(e){let{value:n,onValueChange:r,onUpload:l,progresses:d,accept:f={"image/*":[]},maxSize:h=1024*1024*2,maxFileCount:g=1,multiple:_=!1,disabled:v=!1,showText:y=!0,iconSize:b,className:x,...S}=e,[C,w]=u({prop:n,onChange:r}),T=i.default.useCallback((e,t)=>{if(!_&&g===1&&e.length>1){c.toast.error(`Cannot upload more than 1 file at a time`);return}if((C?.length??0)+e.length>g){c.toast.error(`Cannot upload more than ${g} files`);return}let n=e.map(e=>Object.assign(e,{preview:URL.createObjectURL(e)})),r=C?[...C,...n]:n;if(w(r),t.length>0&&t.forEach(({file:e})=>{c.toast.error(`File ${e.name} was rejected`)}),l&&r.length>0&&r.length<=g){let e=r.length>0?`${r.length} files`:`file`;l(r).then(()=>{w([]),(0,c.toast)(`${e} uploaded`)})}},[C,g,_,l,w]);function E(e){if(!C)return;m(C[e])&&URL.revokeObjectURL(C[e].preview);let t=C.filter((t,n)=>n!==e);w(t),r?.(t)}i.default.useEffect(()=>()=>{C&&C.forEach(e=>{m(e)&&URL.revokeObjectURL(e.preview)})},[]);let D=v||(C?.length??0)>=g;return(0,a.jsxs)(`div`,{className:`relative flex w-full flex-col gap-6`,children:[(0,a.jsx)(s.default,{onDrop:T,accept:f,maxSize:h,maxFiles:g,multiple:g>1||_,disabled:D,children:({getRootProps:e,getInputProps:n,isDragActive:r})=>(0,a.jsxs)(`div`,{...e(),className:t.cn(`group`,`border-muted-foreground/25`,`hover:bg-muted/25`,`relative grid h-52 w-full cursor-pointer place-items-center rounded-lg border-2 border-dashed px-5 py-2.5 text-center transition`,`ring-offset-background`,`focus-visible:ring-ring`,`focus-visible:ring-2`,`focus-visible:ring-offset-2`,`focus-visible:outline-hidden`,r&&`border-muted-foreground/50`,D&&`pointer-events-none opacity-60`,x),...S,children:[(0,a.jsx)(`input`,{...n()}),r?(0,a.jsxs)(`div`,{className:`flex flex-col items-center justify-center gap-4 sm:px-5`,children:[(0,a.jsx)(`div`,{className:`rounded-full border border-dashed p-3`,children:(0,a.jsx)(o.Upload,{className:`text-muted-foreground size-7`,"aria-hidden":`true`})}),(0,a.jsx)(`p`,{className:`text-muted-foreground font-medium`,children:`Drop the files here`})]}):(0,a.jsxs)(`div`,{className:`flex flex-col items-center justify-center gap-4 sm:px-5`,children:[(0,a.jsx)(`div`,{className:`rounded-full border border-dashed p-3`,children:(0,a.jsx)(o.Upload,{size:b||24,className:`text-muted-foreground`,"aria-hidden":`true`})}),y&&(0,a.jsxs)(`div`,{className:`flex flex-col gap-px`,children:[(0,a.jsxs)(`p`,{className:`text-muted-foreground text-xs font-medium`,children:[`Drag `,`'n'`,` drop files here, or click to select files`]}),(0,a.jsxs)(`p`,{className:`text-muted-foreground/70 text-xs`,children:[`You can upload`,g>1?` ${g===1/0?`multiple`:g}
2
- files (up to ${t.formatBytes(h)} each)`:` a file with ${t.formatBytes(h)}`]})]})]})]})}),C?.length?(0,a.jsxs)(`div`,{className:`h-fit w-full overflow-y-auto`,children:[(0,a.jsxs)(`div`,{className:`flex items-center justify-between px-3 py-2.5`,children:[(0,a.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,a.jsx)(o.Image,{className:`text-muted-foreground size-4`,"aria-hidden":`true`}),(0,a.jsxs)(`p`,{className:`text-sm`,children:[`Ảnh đã tải lên (`,C.length,`)`]})]}),(0,a.jsxs)(`button`,{className:`hover:text-muted-foreground text-muted-foreground/60 flex cursor-pointer items-center gap-1 transition-colors duration-200`,onClick:()=>{C&&(C.forEach(e=>{m(e)&&URL.revokeObjectURL(e.preview)}),w([]),r?.([]))},children:[(0,a.jsx)(o.Trash2,{size:16,"aria-hidden":`true`}),(0,a.jsx)(`p`,{className:`text-sm`,children:`Xóa tất cả`})]})]}),(0,a.jsx)(`div`,{className:`flex flex-col gap-2.5`,children:C?.map((e,t)=>(0,a.jsx)(p,{file:e,onRemove:()=>E(t),progress:d?.[e.name]},t))})]}):null]})}function p({file:e,progress:i,onRemove:s}){return(0,a.jsxs)(`div`,{className:`border-border/40 hover:border-border relative flex items-center gap-4 rounded-md border py-2 pr-3 pl-2 shadow-xs`,children:[(0,a.jsxs)(`div`,{className:`flex flex-1 gap-2.5`,children:[m(e)?(0,a.jsx)(h,{file:e}):null,(0,a.jsxs)(`div`,{className:`flex w-full flex-col gap-2`,children:[(0,a.jsxs)(`div`,{className:`flex flex-col gap-y-0.5`,children:[(0,a.jsx)(`p`,{className:`text-accent-foreground line-clamp-1 text-sm`,children:e.name}),(0,a.jsx)(`p`,{className:`text-muted-foreground text-xs`,children:t.formatBytes(e.size)})]}),i?(0,a.jsx)(r.Progress,{value:i}):null]})]}),(0,a.jsx)(`div`,{className:`flex items-center gap-2`,children:(0,a.jsxs)(n.Button,{type:`button`,variant:`ghost`,size:`icon`,className:`size-7`,onClick:s,children:[(0,a.jsx)(o.Trash2,{size:16,className:`text-muted-foreground/60`,"aria-hidden":`true`}),(0,a.jsx)(`span`,{className:`sr-only`,children:`Remove file`})]})})]})}function m(e){return`preview`in e&&typeof e.preview==`string`}function h({file:e}){return e.type.startsWith(`image/`)?(0,a.jsx)(`img`,{src:e.preview,className:`border-border aspect-square size-10 shrink-0 rounded border object-cover object-top shadow-sm`}):(0,a.jsx)(o.FileText,{className:`text-muted-foreground size-10 border`,"aria-hidden":`true`})}exports.FileUploader=f;
3
- //# sourceMappingURL=file-uploader.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"file-uploader.cjs","names":["React","setValue: React.Dispatch<React.SetStateAction<T | undefined>>","React","value","React","Dropzone","cn","Upload","formatBytes","Image","Trash2","Progress","Button","FileText"],"sources":["../packages/hooks/use-callback-ref.ts","../packages/hooks/use-controllable-state.ts","../packages/components/ui/file-uploader.tsx"],"sourcesContent":["import React from \"react\";\n\n/**\n * @see https://github.com/radix-ui/primitives/blob/main/packages/react/use-callback-ref/src/useCallbackRef.tsx\n */\n\n/**\n * A custom hook that converts a callback to a ref to avoid triggering re-renders when passed as a\n * prop or avoid re-executing effects when passed as a dependency\n */\nfunction useCallbackRef<T extends (...args: never[]) => unknown>(\n callback: T | undefined,\n): T {\n const callbackRef = React.useRef(callback);\n\n React.useEffect(() => {\n callbackRef.current = callback;\n });\n\n // https://github.com/facebook/react/issues/19240\n return React.useMemo(\n () => ((...args) => callbackRef.current?.(...args)) as T,\n [],\n );\n}\n\nexport { useCallbackRef };\n","import React from \"react\";\n\nimport { useCallbackRef } from \"./use-callback-ref\";\n\n/**\n * @see https://github.com/radix-ui/primitives/blob/main/packages/react/use-controllable-state/src/useControllableState.tsx\n */\n\ntype UseControllableStateParams<T> = {\n prop?: T | undefined;\n defaultProp?: T | undefined;\n onChange?: (state: T) => void;\n};\n\ntype SetStateFn<T> = (prevState?: T) => T;\n\nfunction useControllableState<T>({\n prop,\n defaultProp,\n onChange = () => {},\n}: UseControllableStateParams<T>) {\n const [uncontrolledProp, setUncontrolledProp] = useUncontrolledState({\n defaultProp,\n onChange,\n });\n const isControlled = prop !== undefined;\n const value = isControlled ? prop : uncontrolledProp;\n const handleChange = useCallbackRef(onChange);\n\n const setValue: React.Dispatch<React.SetStateAction<T | undefined>> =\n React.useCallback(\n (nextValue) => {\n if (isControlled) {\n const setter = nextValue as SetStateFn<T>;\n const value =\n typeof nextValue === \"function\" ? setter(prop) : nextValue;\n if (value !== prop) handleChange(value as T);\n } else {\n setUncontrolledProp(nextValue);\n }\n },\n [isControlled, prop, setUncontrolledProp, handleChange],\n );\n\n return [value, setValue] as const;\n}\n\nfunction useUncontrolledState<T>({\n defaultProp,\n onChange,\n}: Omit<UseControllableStateParams<T>, \"prop\">) {\n const uncontrolledState = React.useState<T | undefined>(defaultProp);\n const [value] = uncontrolledState;\n const prevValueRef = React.useRef(value);\n const handleChange = useCallbackRef(onChange);\n\n React.useEffect(() => {\n if (prevValueRef.current !== value) {\n handleChange(value as T);\n prevValueRef.current = value;\n }\n }, [value, prevValueRef, handleChange]);\n\n return uncontrolledState;\n}\n\nexport { useControllableState };\n","\"use client\";\nimport React from \"react\";\nimport { FileText, Image, Trash2, Upload } from \"lucide-react\";\nimport Dropzone, {\n type DropzoneProps,\n type FileRejection,\n} from \"react-dropzone\";\nimport { toast } from \"sonner\";\n\nimport { Button } from \"@/components/ui/button\";\nimport { Progress } from \"@/components/ui/progress\";\nimport { useControllableState } from \"@/hooks/use-controllable-state\";\nimport { cn, formatBytes } from \"@/lib/utils\";\n\ninterface FileUploaderProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Value of the uploader.\n * @type File[]\n * @default undefined\n * @example value={files}\n */\n value?: File[];\n\n /**\n * Function to be called when the value changes.\n * @type (files: File[]) => void\n * @default undefined\n * @example onValueChange={(files) => setFiles(files)}\n */\n onValueChange?: (files: File[]) => void;\n\n /**\n * Function to be called when files are uploaded.\n * @type (files: File[]) => Promise<void>\n * @default undefined\n * @example onUpload={(files) => uploadFiles(files)}\n */\n onUpload?: (files: File[]) => Promise<void>;\n\n /**\n * Progress of the uploaded files.\n * @type Record<string, number> | undefined\n * @default undefined\n * @example progresses={{ \"file1.png\": 50 }}\n */\n progresses?: Record<string, number>;\n\n /**\n * Accepted file types for the uploader.\n * @type { [key: string]: string[]}\n * @default\n * ```ts\n * { \"image/*\": [] }\n * ```\n * @example accept={[\"image/png\", \"image/jpeg\"]}\n */\n accept?: DropzoneProps[\"accept\"];\n\n /**\n * Maximum file size for the uploader.\n * @type number | undefined\n * @default 1024 * 1024 * 2 // 2MB\n * @example maxSize={1024 * 1024 * 2} // 2MB\n */\n maxSize?: DropzoneProps[\"maxSize\"];\n\n /**\n * Maximum number of files for the uploader.\n * @type number | undefined\n * @default 1\n * @example maxFileCount={4}\n */\n maxFileCount?: DropzoneProps[\"maxFiles\"];\n\n /**\n * Whether the uploader should accept multiple files.\n * @type boolean\n * @default false\n * @example multiple\n */\n multiple?: boolean;\n\n /**\n * Whether the uploader is disabled.\n * @type boolean\n * @default false\n * @example disabled\n */\n disabled?: boolean;\n\n showText?: boolean;\n iconSize?: number;\n}\n\nexport function FileUploader(props: FileUploaderProps) {\n const {\n value: valueProp,\n onValueChange,\n onUpload,\n progresses,\n accept = {\n \"image/*\": [],\n },\n maxSize = 1024 * 1024 * 2,\n maxFileCount = 1,\n multiple = false,\n disabled = false,\n showText = true,\n iconSize,\n className,\n ...dropzoneProps\n } = props;\n\n const [files, setFiles] = useControllableState({\n prop: valueProp,\n onChange: onValueChange,\n });\n\n const onDrop = React.useCallback(\n (acceptedFiles: File[], rejectedFiles: FileRejection[]) => {\n if (!multiple && maxFileCount === 1 && acceptedFiles.length > 1) {\n toast.error(\"Cannot upload more than 1 file at a time\");\n\n return;\n }\n\n if ((files?.length ?? 0) + acceptedFiles.length > maxFileCount) {\n toast.error(`Cannot upload more than ${maxFileCount} files`);\n return;\n }\n\n const newFiles = acceptedFiles.map((file) =>\n Object.assign(file, {\n preview: URL.createObjectURL(file),\n }),\n );\n\n const updatedFiles = files ? [...files, ...newFiles] : newFiles;\n\n setFiles(updatedFiles);\n\n if (rejectedFiles.length > 0) {\n rejectedFiles.forEach(({ file }) => {\n toast.error(`File ${file.name} was rejected`);\n });\n }\n\n if (\n onUpload &&\n updatedFiles.length > 0 &&\n updatedFiles.length <= maxFileCount\n ) {\n const target =\n updatedFiles.length > 0 ? `${updatedFiles.length} files` : `file`;\n\n onUpload(updatedFiles).then(() => {\n setFiles([]);\n toast(`${target} uploaded`);\n });\n }\n },\n\n [files, maxFileCount, multiple, onUpload, setFiles],\n );\n\n function onRemove(index: number) {\n if (!files) return;\n\n if (isFileWithPreview(files[index])) {\n URL.revokeObjectURL(files[index].preview);\n }\n\n const newFiles = files.filter((_, i) => i !== index);\n setFiles(newFiles);\n onValueChange?.(newFiles);\n }\n\n // Revoke preview url when component unmounts\n React.useEffect(() => {\n return () => {\n if (!files) return;\n files.forEach((file) => {\n if (isFileWithPreview(file)) {\n URL.revokeObjectURL(file.preview);\n }\n });\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const isDisabled = disabled || (files?.length ?? 0) >= maxFileCount;\n\n return (\n <div className=\"relative flex w-full flex-col gap-6\">\n <Dropzone\n onDrop={onDrop}\n accept={accept}\n maxSize={maxSize}\n maxFiles={maxFileCount}\n multiple={maxFileCount > 1 || multiple}\n disabled={isDisabled}\n >\n {({ getRootProps, getInputProps, isDragActive }) => (\n <div\n {...getRootProps()}\n className={cn(\n \"group\",\n \"border-muted-foreground/25\",\n \"hover:bg-muted/25\",\n \"relative grid h-52 w-full cursor-pointer place-items-center rounded-lg border-2 border-dashed px-5 py-2.5 text-center transition\",\n \"ring-offset-background\",\n \"focus-visible:ring-ring\",\n \"focus-visible:ring-2\",\n \"focus-visible:ring-offset-2\",\n \"focus-visible:outline-hidden\",\n isDragActive && \"border-muted-foreground/50\",\n isDisabled && \"pointer-events-none opacity-60\",\n className,\n )}\n {...dropzoneProps}\n >\n <input {...getInputProps()} />\n {isDragActive ? (\n <div className=\"flex flex-col items-center justify-center gap-4 sm:px-5\">\n <div className=\"rounded-full border border-dashed p-3\">\n <Upload\n className=\"text-muted-foreground size-7\"\n aria-hidden=\"true\"\n />\n </div>\n <p className=\"text-muted-foreground font-medium\">\n Drop the files here\n </p>\n </div>\n ) : (\n <div className=\"flex flex-col items-center justify-center gap-4 sm:px-5\">\n <div className=\"rounded-full border border-dashed p-3\">\n <Upload\n size={iconSize || 24}\n className=\"text-muted-foreground\"\n aria-hidden=\"true\"\n />\n </div>\n {showText && (\n <div className=\"flex flex-col gap-px\">\n <p className=\"text-muted-foreground text-xs font-medium\">\n Drag {`'n'`} drop files here, or click to select files\n </p>\n <p className=\"text-muted-foreground/70 text-xs\">\n You can upload\n {maxFileCount > 1\n ? ` ${maxFileCount === Infinity ? \"multiple\" : maxFileCount}\n files (up to ${formatBytes(maxSize)} each)`\n : ` a file with ${formatBytes(maxSize)}`}\n </p>\n </div>\n )}\n </div>\n )}\n </div>\n )}\n </Dropzone>\n {files?.length ? (\n <div className=\"h-fit w-full overflow-y-auto\">\n <div className=\"flex items-center justify-between px-3 py-2.5\">\n <div className=\"flex items-center gap-1\">\n <Image\n className=\"text-muted-foreground size-4\"\n aria-hidden=\"true\"\n />\n <p className=\"text-sm\">Ảnh đã tải lên ({files.length})</p>\n </div>\n <button\n className=\"hover:text-muted-foreground text-muted-foreground/60 flex cursor-pointer items-center gap-1 transition-colors duration-200\"\n onClick={() => {\n if (!files) return;\n files.forEach((file) => {\n if (!isFileWithPreview(file)) return;\n URL.revokeObjectURL(file.preview);\n });\n setFiles([]);\n onValueChange?.([]);\n }}\n >\n <Trash2 size={16} aria-hidden=\"true\" />\n <p className=\"text-sm\">Xóa tất cả</p>\n </button>\n </div>\n <div className=\"flex flex-col gap-2.5\">\n {files?.map((file, index) => (\n <FileCard\n key={index}\n file={file}\n onRemove={() => onRemove(index)}\n progress={progresses?.[file.name]}\n />\n ))}\n </div>\n </div>\n ) : null}\n </div>\n );\n}\n\ninterface FileCardProps {\n file: File;\n onRemove: () => void;\n progress?: number;\n}\n\nfunction FileCard({ file, progress, onRemove }: FileCardProps) {\n return (\n <div className=\"border-border/40 hover:border-border relative flex items-center gap-4 rounded-md border py-2 pr-3 pl-2 shadow-xs\">\n <div className=\"flex flex-1 gap-2.5\">\n {isFileWithPreview(file) ? <FilePreview file={file} /> : null}\n <div className=\"flex w-full flex-col gap-2\">\n <div className=\"flex flex-col gap-y-0.5\">\n <p className=\"text-accent-foreground line-clamp-1 text-sm\">\n {file.name}\n </p>\n <p className=\"text-muted-foreground text-xs\">\n {formatBytes(file.size)}\n </p>\n </div>\n {progress ? <Progress value={progress} /> : null}\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7\"\n onClick={onRemove}\n >\n <Trash2\n size={16}\n className=\"text-muted-foreground/60\"\n aria-hidden=\"true\"\n />\n <span className=\"sr-only\">Remove file</span>\n </Button>\n </div>\n </div>\n );\n}\n\nfunction isFileWithPreview(file: File): file is File & { preview: string } {\n return \"preview\" in file && typeof file.preview === \"string\";\n}\n\ninterface FilePreviewProps {\n file: File & { preview: string };\n}\n\nfunction FilePreview({ file }: FilePreviewProps) {\n if (file.type.startsWith(\"image/\")) {\n return (\n <img\n src={file.preview}\n className=\"border-border aspect-square size-10 shrink-0 rounded border object-cover object-top shadow-sm\"\n />\n );\n }\n\n return (\n <FileText\n className=\"text-muted-foreground size-10 border\"\n aria-hidden=\"true\"\n />\n );\n}\n"],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- "use client";import{cn as e,formatBytes as t}from"./utils-D9AH0PUV.js";import{Button as n}from"./button-C1iCV8GH.js";import{Progress as r}from"./progress-Djnu-m1x.js";import i from"react";import{jsx as a,jsxs as o}from"react/jsx-runtime";import{FileText as s,Image as c,Trash2 as l,Upload as u}from"lucide-react";import d from"react-dropzone";import{toast as f}from"sonner";function p(e){let t=i.useRef(e);return i.useEffect(()=>{t.current=e}),i.useMemo(()=>((...e)=>t.current?.(...e)),[])}function m({prop:e,defaultProp:t,onChange:n=()=>{}}){let[r,a]=h({defaultProp:t,onChange:n}),o=e!==void 0,s=o?e:r,c=p(n),l=i.useCallback(t=>{if(o){let n=t,r=typeof t==`function`?n(e):t;r!==e&&c(r)}else a(t)},[o,e,a,c]);return[s,l]}function h({defaultProp:e,onChange:t}){let n=i.useState(e),[r]=n,a=i.useRef(r),o=p(t);return i.useEffect(()=>{a.current!==r&&(o(r),a.current=r)},[r,a,o]),n}function g(n){let{value:r,onValueChange:s,onUpload:p,progresses:h,accept:g={"image/*":[]},maxSize:y=1024*1024*2,maxFileCount:b=1,multiple:x=!1,disabled:S=!1,showText:C=!0,iconSize:w,className:T,...E}=n,[D,O]=m({prop:r,onChange:s}),k=i.useCallback((e,t)=>{if(!x&&b===1&&e.length>1){f.error(`Cannot upload more than 1 file at a time`);return}if((D?.length??0)+e.length>b){f.error(`Cannot upload more than ${b} files`);return}let n=e.map(e=>Object.assign(e,{preview:URL.createObjectURL(e)})),r=D?[...D,...n]:n;if(O(r),t.length>0&&t.forEach(({file:e})=>{f.error(`File ${e.name} was rejected`)}),p&&r.length>0&&r.length<=b){let e=r.length>0?`${r.length} files`:`file`;p(r).then(()=>{O([]),f(`${e} uploaded`)})}},[D,b,x,p,O]);function A(e){if(!D)return;v(D[e])&&URL.revokeObjectURL(D[e].preview);let t=D.filter((t,n)=>n!==e);O(t),s?.(t)}i.useEffect(()=>()=>{D&&D.forEach(e=>{v(e)&&URL.revokeObjectURL(e.preview)})},[]);let j=S||(D?.length??0)>=b;return o(`div`,{className:`relative flex w-full flex-col gap-6`,children:[a(d,{onDrop:k,accept:g,maxSize:y,maxFiles:b,multiple:b>1||x,disabled:j,children:({getRootProps:n,getInputProps:r,isDragActive:i})=>o(`div`,{...n(),className:e(`group`,`border-muted-foreground/25`,`hover:bg-muted/25`,`relative grid h-52 w-full cursor-pointer place-items-center rounded-lg border-2 border-dashed px-5 py-2.5 text-center transition`,`ring-offset-background`,`focus-visible:ring-ring`,`focus-visible:ring-2`,`focus-visible:ring-offset-2`,`focus-visible:outline-hidden`,i&&`border-muted-foreground/50`,j&&`pointer-events-none opacity-60`,T),...E,children:[a(`input`,{...r()}),i?o(`div`,{className:`flex flex-col items-center justify-center gap-4 sm:px-5`,children:[a(`div`,{className:`rounded-full border border-dashed p-3`,children:a(u,{className:`text-muted-foreground size-7`,"aria-hidden":`true`})}),a(`p`,{className:`text-muted-foreground font-medium`,children:`Drop the files here`})]}):o(`div`,{className:`flex flex-col items-center justify-center gap-4 sm:px-5`,children:[a(`div`,{className:`rounded-full border border-dashed p-3`,children:a(u,{size:w||24,className:`text-muted-foreground`,"aria-hidden":`true`})}),C&&o(`div`,{className:`flex flex-col gap-px`,children:[o(`p`,{className:`text-muted-foreground text-xs font-medium`,children:[`Drag `,`'n'`,` drop files here, or click to select files`]}),o(`p`,{className:`text-muted-foreground/70 text-xs`,children:[`You can upload`,b>1?` ${b===1/0?`multiple`:b}
2
- files (up to ${t(y)} each)`:` a file with ${t(y)}`]})]})]})]})}),D?.length?o(`div`,{className:`h-fit w-full overflow-y-auto`,children:[o(`div`,{className:`flex items-center justify-between px-3 py-2.5`,children:[o(`div`,{className:`flex items-center gap-1`,children:[a(c,{className:`text-muted-foreground size-4`,"aria-hidden":`true`}),o(`p`,{className:`text-sm`,children:[`Ảnh đã tải lên (`,D.length,`)`]})]}),o(`button`,{className:`hover:text-muted-foreground text-muted-foreground/60 flex cursor-pointer items-center gap-1 transition-colors duration-200`,onClick:()=>{D&&(D.forEach(e=>{v(e)&&URL.revokeObjectURL(e.preview)}),O([]),s?.([]))},children:[a(l,{size:16,"aria-hidden":`true`}),a(`p`,{className:`text-sm`,children:`Xóa tất cả`})]})]}),a(`div`,{className:`flex flex-col gap-2.5`,children:D?.map((e,t)=>a(_,{file:e,onRemove:()=>A(t),progress:h?.[e.name]},t))})]}):null]})}function _({file:e,progress:i,onRemove:s}){return o(`div`,{className:`border-border/40 hover:border-border relative flex items-center gap-4 rounded-md border py-2 pr-3 pl-2 shadow-xs`,children:[o(`div`,{className:`flex flex-1 gap-2.5`,children:[v(e)?a(y,{file:e}):null,o(`div`,{className:`flex w-full flex-col gap-2`,children:[o(`div`,{className:`flex flex-col gap-y-0.5`,children:[a(`p`,{className:`text-accent-foreground line-clamp-1 text-sm`,children:e.name}),a(`p`,{className:`text-muted-foreground text-xs`,children:t(e.size)})]}),i?a(r,{value:i}):null]})]}),a(`div`,{className:`flex items-center gap-2`,children:o(n,{type:`button`,variant:`ghost`,size:`icon`,className:`size-7`,onClick:s,children:[a(l,{size:16,className:`text-muted-foreground/60`,"aria-hidden":`true`}),a(`span`,{className:`sr-only`,children:`Remove file`})]})})]})}function v(e){return`preview`in e&&typeof e.preview==`string`}function y({file:e}){return e.type.startsWith(`image/`)?a(`img`,{src:e.preview,className:`border-border aspect-square size-10 shrink-0 rounded border object-cover object-top shadow-sm`}):a(s,{className:`text-muted-foreground size-10 border`,"aria-hidden":`true`})}export{g as FileUploader};
3
- //# sourceMappingURL=file-uploader.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"file-uploader.js","names":["setValue: React.Dispatch<React.SetStateAction<T | undefined>>","value"],"sources":["../packages/hooks/use-callback-ref.ts","../packages/hooks/use-controllable-state.ts","../packages/components/ui/file-uploader.tsx"],"sourcesContent":["import React from \"react\";\n\n/**\n * @see https://github.com/radix-ui/primitives/blob/main/packages/react/use-callback-ref/src/useCallbackRef.tsx\n */\n\n/**\n * A custom hook that converts a callback to a ref to avoid triggering re-renders when passed as a\n * prop or avoid re-executing effects when passed as a dependency\n */\nfunction useCallbackRef<T extends (...args: never[]) => unknown>(\n callback: T | undefined,\n): T {\n const callbackRef = React.useRef(callback);\n\n React.useEffect(() => {\n callbackRef.current = callback;\n });\n\n // https://github.com/facebook/react/issues/19240\n return React.useMemo(\n () => ((...args) => callbackRef.current?.(...args)) as T,\n [],\n );\n}\n\nexport { useCallbackRef };\n","import React from \"react\";\n\nimport { useCallbackRef } from \"./use-callback-ref\";\n\n/**\n * @see https://github.com/radix-ui/primitives/blob/main/packages/react/use-controllable-state/src/useControllableState.tsx\n */\n\ntype UseControllableStateParams<T> = {\n prop?: T | undefined;\n defaultProp?: T | undefined;\n onChange?: (state: T) => void;\n};\n\ntype SetStateFn<T> = (prevState?: T) => T;\n\nfunction useControllableState<T>({\n prop,\n defaultProp,\n onChange = () => {},\n}: UseControllableStateParams<T>) {\n const [uncontrolledProp, setUncontrolledProp] = useUncontrolledState({\n defaultProp,\n onChange,\n });\n const isControlled = prop !== undefined;\n const value = isControlled ? prop : uncontrolledProp;\n const handleChange = useCallbackRef(onChange);\n\n const setValue: React.Dispatch<React.SetStateAction<T | undefined>> =\n React.useCallback(\n (nextValue) => {\n if (isControlled) {\n const setter = nextValue as SetStateFn<T>;\n const value =\n typeof nextValue === \"function\" ? setter(prop) : nextValue;\n if (value !== prop) handleChange(value as T);\n } else {\n setUncontrolledProp(nextValue);\n }\n },\n [isControlled, prop, setUncontrolledProp, handleChange],\n );\n\n return [value, setValue] as const;\n}\n\nfunction useUncontrolledState<T>({\n defaultProp,\n onChange,\n}: Omit<UseControllableStateParams<T>, \"prop\">) {\n const uncontrolledState = React.useState<T | undefined>(defaultProp);\n const [value] = uncontrolledState;\n const prevValueRef = React.useRef(value);\n const handleChange = useCallbackRef(onChange);\n\n React.useEffect(() => {\n if (prevValueRef.current !== value) {\n handleChange(value as T);\n prevValueRef.current = value;\n }\n }, [value, prevValueRef, handleChange]);\n\n return uncontrolledState;\n}\n\nexport { useControllableState };\n","\"use client\";\nimport React from \"react\";\nimport { FileText, Image, Trash2, Upload } from \"lucide-react\";\nimport Dropzone, {\n type DropzoneProps,\n type FileRejection,\n} from \"react-dropzone\";\nimport { toast } from \"sonner\";\n\nimport { Button } from \"@/components/ui/button\";\nimport { Progress } from \"@/components/ui/progress\";\nimport { useControllableState } from \"@/hooks/use-controllable-state\";\nimport { cn, formatBytes } from \"@/lib/utils\";\n\ninterface FileUploaderProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Value of the uploader.\n * @type File[]\n * @default undefined\n * @example value={files}\n */\n value?: File[];\n\n /**\n * Function to be called when the value changes.\n * @type (files: File[]) => void\n * @default undefined\n * @example onValueChange={(files) => setFiles(files)}\n */\n onValueChange?: (files: File[]) => void;\n\n /**\n * Function to be called when files are uploaded.\n * @type (files: File[]) => Promise<void>\n * @default undefined\n * @example onUpload={(files) => uploadFiles(files)}\n */\n onUpload?: (files: File[]) => Promise<void>;\n\n /**\n * Progress of the uploaded files.\n * @type Record<string, number> | undefined\n * @default undefined\n * @example progresses={{ \"file1.png\": 50 }}\n */\n progresses?: Record<string, number>;\n\n /**\n * Accepted file types for the uploader.\n * @type { [key: string]: string[]}\n * @default\n * ```ts\n * { \"image/*\": [] }\n * ```\n * @example accept={[\"image/png\", \"image/jpeg\"]}\n */\n accept?: DropzoneProps[\"accept\"];\n\n /**\n * Maximum file size for the uploader.\n * @type number | undefined\n * @default 1024 * 1024 * 2 // 2MB\n * @example maxSize={1024 * 1024 * 2} // 2MB\n */\n maxSize?: DropzoneProps[\"maxSize\"];\n\n /**\n * Maximum number of files for the uploader.\n * @type number | undefined\n * @default 1\n * @example maxFileCount={4}\n */\n maxFileCount?: DropzoneProps[\"maxFiles\"];\n\n /**\n * Whether the uploader should accept multiple files.\n * @type boolean\n * @default false\n * @example multiple\n */\n multiple?: boolean;\n\n /**\n * Whether the uploader is disabled.\n * @type boolean\n * @default false\n * @example disabled\n */\n disabled?: boolean;\n\n showText?: boolean;\n iconSize?: number;\n}\n\nexport function FileUploader(props: FileUploaderProps) {\n const {\n value: valueProp,\n onValueChange,\n onUpload,\n progresses,\n accept = {\n \"image/*\": [],\n },\n maxSize = 1024 * 1024 * 2,\n maxFileCount = 1,\n multiple = false,\n disabled = false,\n showText = true,\n iconSize,\n className,\n ...dropzoneProps\n } = props;\n\n const [files, setFiles] = useControllableState({\n prop: valueProp,\n onChange: onValueChange,\n });\n\n const onDrop = React.useCallback(\n (acceptedFiles: File[], rejectedFiles: FileRejection[]) => {\n if (!multiple && maxFileCount === 1 && acceptedFiles.length > 1) {\n toast.error(\"Cannot upload more than 1 file at a time\");\n\n return;\n }\n\n if ((files?.length ?? 0) + acceptedFiles.length > maxFileCount) {\n toast.error(`Cannot upload more than ${maxFileCount} files`);\n return;\n }\n\n const newFiles = acceptedFiles.map((file) =>\n Object.assign(file, {\n preview: URL.createObjectURL(file),\n }),\n );\n\n const updatedFiles = files ? [...files, ...newFiles] : newFiles;\n\n setFiles(updatedFiles);\n\n if (rejectedFiles.length > 0) {\n rejectedFiles.forEach(({ file }) => {\n toast.error(`File ${file.name} was rejected`);\n });\n }\n\n if (\n onUpload &&\n updatedFiles.length > 0 &&\n updatedFiles.length <= maxFileCount\n ) {\n const target =\n updatedFiles.length > 0 ? `${updatedFiles.length} files` : `file`;\n\n onUpload(updatedFiles).then(() => {\n setFiles([]);\n toast(`${target} uploaded`);\n });\n }\n },\n\n [files, maxFileCount, multiple, onUpload, setFiles],\n );\n\n function onRemove(index: number) {\n if (!files) return;\n\n if (isFileWithPreview(files[index])) {\n URL.revokeObjectURL(files[index].preview);\n }\n\n const newFiles = files.filter((_, i) => i !== index);\n setFiles(newFiles);\n onValueChange?.(newFiles);\n }\n\n // Revoke preview url when component unmounts\n React.useEffect(() => {\n return () => {\n if (!files) return;\n files.forEach((file) => {\n if (isFileWithPreview(file)) {\n URL.revokeObjectURL(file.preview);\n }\n });\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const isDisabled = disabled || (files?.length ?? 0) >= maxFileCount;\n\n return (\n <div className=\"relative flex w-full flex-col gap-6\">\n <Dropzone\n onDrop={onDrop}\n accept={accept}\n maxSize={maxSize}\n maxFiles={maxFileCount}\n multiple={maxFileCount > 1 || multiple}\n disabled={isDisabled}\n >\n {({ getRootProps, getInputProps, isDragActive }) => (\n <div\n {...getRootProps()}\n className={cn(\n \"group\",\n \"border-muted-foreground/25\",\n \"hover:bg-muted/25\",\n \"relative grid h-52 w-full cursor-pointer place-items-center rounded-lg border-2 border-dashed px-5 py-2.5 text-center transition\",\n \"ring-offset-background\",\n \"focus-visible:ring-ring\",\n \"focus-visible:ring-2\",\n \"focus-visible:ring-offset-2\",\n \"focus-visible:outline-hidden\",\n isDragActive && \"border-muted-foreground/50\",\n isDisabled && \"pointer-events-none opacity-60\",\n className,\n )}\n {...dropzoneProps}\n >\n <input {...getInputProps()} />\n {isDragActive ? (\n <div className=\"flex flex-col items-center justify-center gap-4 sm:px-5\">\n <div className=\"rounded-full border border-dashed p-3\">\n <Upload\n className=\"text-muted-foreground size-7\"\n aria-hidden=\"true\"\n />\n </div>\n <p className=\"text-muted-foreground font-medium\">\n Drop the files here\n </p>\n </div>\n ) : (\n <div className=\"flex flex-col items-center justify-center gap-4 sm:px-5\">\n <div className=\"rounded-full border border-dashed p-3\">\n <Upload\n size={iconSize || 24}\n className=\"text-muted-foreground\"\n aria-hidden=\"true\"\n />\n </div>\n {showText && (\n <div className=\"flex flex-col gap-px\">\n <p className=\"text-muted-foreground text-xs font-medium\">\n Drag {`'n'`} drop files here, or click to select files\n </p>\n <p className=\"text-muted-foreground/70 text-xs\">\n You can upload\n {maxFileCount > 1\n ? ` ${maxFileCount === Infinity ? \"multiple\" : maxFileCount}\n files (up to ${formatBytes(maxSize)} each)`\n : ` a file with ${formatBytes(maxSize)}`}\n </p>\n </div>\n )}\n </div>\n )}\n </div>\n )}\n </Dropzone>\n {files?.length ? (\n <div className=\"h-fit w-full overflow-y-auto\">\n <div className=\"flex items-center justify-between px-3 py-2.5\">\n <div className=\"flex items-center gap-1\">\n <Image\n className=\"text-muted-foreground size-4\"\n aria-hidden=\"true\"\n />\n <p className=\"text-sm\">Ảnh đã tải lên ({files.length})</p>\n </div>\n <button\n className=\"hover:text-muted-foreground text-muted-foreground/60 flex cursor-pointer items-center gap-1 transition-colors duration-200\"\n onClick={() => {\n if (!files) return;\n files.forEach((file) => {\n if (!isFileWithPreview(file)) return;\n URL.revokeObjectURL(file.preview);\n });\n setFiles([]);\n onValueChange?.([]);\n }}\n >\n <Trash2 size={16} aria-hidden=\"true\" />\n <p className=\"text-sm\">Xóa tất cả</p>\n </button>\n </div>\n <div className=\"flex flex-col gap-2.5\">\n {files?.map((file, index) => (\n <FileCard\n key={index}\n file={file}\n onRemove={() => onRemove(index)}\n progress={progresses?.[file.name]}\n />\n ))}\n </div>\n </div>\n ) : null}\n </div>\n );\n}\n\ninterface FileCardProps {\n file: File;\n onRemove: () => void;\n progress?: number;\n}\n\nfunction FileCard({ file, progress, onRemove }: FileCardProps) {\n return (\n <div className=\"border-border/40 hover:border-border relative flex items-center gap-4 rounded-md border py-2 pr-3 pl-2 shadow-xs\">\n <div className=\"flex flex-1 gap-2.5\">\n {isFileWithPreview(file) ? <FilePreview file={file} /> : null}\n <div className=\"flex w-full flex-col gap-2\">\n <div className=\"flex flex-col gap-y-0.5\">\n <p className=\"text-accent-foreground line-clamp-1 text-sm\">\n {file.name}\n </p>\n <p className=\"text-muted-foreground text-xs\">\n {formatBytes(file.size)}\n </p>\n </div>\n {progress ? <Progress value={progress} /> : null}\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7\"\n onClick={onRemove}\n >\n <Trash2\n size={16}\n className=\"text-muted-foreground/60\"\n aria-hidden=\"true\"\n />\n <span className=\"sr-only\">Remove file</span>\n </Button>\n </div>\n </div>\n );\n}\n\nfunction isFileWithPreview(file: File): file is File & { preview: string } {\n return \"preview\" in file && typeof file.preview === \"string\";\n}\n\ninterface FilePreviewProps {\n file: File & { preview: string };\n}\n\nfunction FilePreview({ file }: FilePreviewProps) {\n if (file.type.startsWith(\"image/\")) {\n return (\n <img\n src={file.preview}\n className=\"border-border aspect-square size-10 shrink-0 rounded border object-cover object-top shadow-sm\"\n />\n );\n }\n\n return (\n <FileText\n className=\"text-muted-foreground size-10 border\"\n aria-hidden=\"true\"\n />\n );\n}\n"],"mappings":"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"}
package/dist/form.cjs DELETED
@@ -1,2 +0,0 @@
1
- "use client";const e=require(`./chunk-CUT6urMc.cjs`),t=require(`./utils-BsjVK5EW.cjs`),n=require(`./label-BWUQswhZ.cjs`),r=e.__toESM(require(`react`)),i=e.__toESM(require(`radix-ui`)),a=e.__toESM(require(`react/jsx-runtime`)),o=e.__toESM(require(`react-hook-form`)),s=o.FormProvider,c=r.default.createContext({}),l=({...e})=>(0,a.jsx)(c.Provider,{value:{name:e.name},children:(0,a.jsx)(o.Controller,{...e})}),u=()=>{let e=r.default.useContext(c),t=r.default.useContext(d),{getFieldState:n,control:i,resetField:a}=(0,o.useFormContext)(),s=(0,o.useFormState)({name:e.name}),l=n(e.name,s);if(!e)throw Error(`useFormField should be used within <FormField>`);let{id:u}=t;return{id:u,control:i,resetField:a,name:e.name,formItemId:`${u}-form-item`,formDescriptionId:`${u}-form-item-description`,formMessageId:`${u}-form-item-message`,...l}},d=r.default.createContext({});function f({className:e,...n}){let i=r.default.useId();return(0,a.jsx)(d.Provider,{value:{id:i},children:(0,a.jsx)(`div`,{"data-slot":`form-item`,className:t.cn(`grid gap-1`,e),...n})})}function p({className:e,...r}){let{formItemId:i}=u();return(0,a.jsx)(n.Label,{"data-slot":`form-label`,className:t.cn(`text-xs`,e),htmlFor:i,...r})}function m({...e}){let{error:t,formItemId:n,formDescriptionId:r,formMessageId:o}=u();return(0,a.jsx)(i.Slot.Slot,{"data-slot":`form-control`,id:n,"aria-describedby":t?`${r} ${o}`:`${r}`,"aria-invalid":!!t,...e})}function h({className:e,...n}){let{formDescriptionId:r}=u();return(0,a.jsx)(`p`,{"data-slot":`form-description`,id:r,className:t.cn(`text-muted-foreground text-sm`,e),...n})}function g({className:e,children:n,...r}){let{error:i,formMessageId:o}=u();return(0,a.jsx)(`span`,{"data-slot":`form-message`,id:o,className:t.cn(`text-destructive text-xs`,e),...r,children:i?String(i?.message??``):n})}exports.Form=s,exports.FormControl=m,exports.FormDescription=h,exports.FormField=l,exports.FormItem=f,exports.FormLabel=p,exports.FormMessage=g,exports.useFormField=u;
2
- //# sourceMappingURL=form.cjs.map
package/dist/form.cjs.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"form.cjs","names":["FormProvider","React","Controller","cn","Label","SlotPrimitive"],"sources":["../packages/components/ui/form.tsx"],"sourcesContent":["\"use client\";\nimport React from \"react\";\nimport {\n Controller,\n type ControllerProps,\n type FieldPath,\n type FieldValues,\n FormProvider,\n useFormContext,\n useFormState,\n} from \"react-hook-form\";\nimport { Label as LabelPrimitive, Slot as SlotPrimitive } from \"radix-ui\";\n\nimport { Label } from \"@/components/ui/label\";\nimport { cn } from \"@/lib/utils\";\n\nconst Form = FormProvider;\n\ntype FormFieldContextValue<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> = {\n name: TName;\n};\n\nconst FormFieldContext = React.createContext<FormFieldContextValue>(\n {} as FormFieldContextValue,\n);\n\nconst FormField = <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n ...props\n}: ControllerProps<TFieldValues, TName>) => {\n return (\n <FormFieldContext.Provider value={{ name: props.name }}>\n <Controller {...props} />\n </FormFieldContext.Provider>\n );\n};\n\nconst useFormField = () => {\n const fieldContext = React.useContext(FormFieldContext);\n const itemContext = React.useContext(FormItemContext);\n const { getFieldState, control, resetField } = useFormContext();\n const formState = useFormState({ name: fieldContext.name });\n const fieldState = getFieldState(fieldContext.name, formState);\n\n if (!fieldContext) {\n throw new Error(\"useFormField should be used within <FormField>\");\n }\n\n const { id } = itemContext;\n\n return {\n id,\n control,\n resetField,\n name: fieldContext.name,\n formItemId: `${id}-form-item`,\n formDescriptionId: `${id}-form-item-description`,\n formMessageId: `${id}-form-item-message`,\n ...fieldState,\n };\n};\n\ntype FormItemContextValue = {\n id: string;\n};\n\nconst FormItemContext = React.createContext<FormItemContextValue>(\n {} as FormItemContextValue,\n);\n\nfunction FormItem({ className, ...props }: React.ComponentProps<\"div\">) {\n const id = React.useId();\n\n return (\n <FormItemContext.Provider value={{ id }}>\n <div\n data-slot=\"form-item\"\n className={cn(\"grid gap-1\", className)}\n {...props}\n />\n </FormItemContext.Provider>\n );\n}\n\nfunction FormLabel({\n className,\n ...props\n}: React.ComponentProps<typeof LabelPrimitive.Root>) {\n const { formItemId } = useFormField();\n return (\n <Label\n data-slot=\"form-label\"\n className={cn(\"text-xs\", className)}\n htmlFor={formItemId}\n {...props}\n />\n );\n}\n\nfunction FormControl({\n ...props\n}: React.ComponentProps<typeof SlotPrimitive.Slot>) {\n const { error, formItemId, formDescriptionId, formMessageId } =\n useFormField();\n\n return (\n <SlotPrimitive.Slot\n data-slot=\"form-control\"\n id={formItemId}\n aria-describedby={\n !error\n ? `${formDescriptionId}`\n : `${formDescriptionId} ${formMessageId}`\n }\n aria-invalid={!!error}\n {...props}\n />\n );\n}\n\nfunction FormDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n const { formDescriptionId } = useFormField();\n\n return (\n <p\n data-slot=\"form-description\"\n id={formDescriptionId}\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n );\n}\n\nfunction FormMessage({\n className,\n children,\n ...props\n}: React.ComponentProps<\"p\">) {\n const { error, formMessageId } = useFormField();\n\n return (\n <span\n data-slot=\"form-message\"\n id={formMessageId}\n className={cn(\"text-destructive text-xs\", className)}\n {...props}\n >\n {error ? String(error?.message ?? \"\") : children}\n </span>\n );\n}\n\n// eslint-disable-next-line react-refresh/only-export-components\nexport {\n Form,\n FormControl,\n FormDescription,\n FormField,\n FormItem,\n FormLabel,\n FormMessage,\n useFormField,\n};\n"],"mappings":"0QAgBM,EAAOA,EAAAA,aASP,EAAmBC,EAAAA,QAAM,cAC7B,EAAE,EAGE,GAGJ,CACA,GAAG,EACkC,IAEnC,EAAA,EAAA,KAAC,EAAiB,SAAA,CAAS,MAAO,CAAE,KAAM,EAAM,KAAM,WACpD,EAAA,EAAA,KAACC,EAAAA,WAAAA,CAAW,GAAI,EAAA,IAKhB,MAAqB,CACzB,IAAM,EAAeD,EAAAA,QAAM,WAAW,GAChC,EAAcA,EAAAA,QAAM,WAAW,GAC/B,CAAE,gBAAe,UAAS,aAAY,EAAA,EAAA,EAAA,kBACtC,GAAA,EAAA,EAAA,cAAyB,CAAE,KAAM,EAAa,KAAM,EACpD,EAAa,EAAc,EAAa,KAAM,GAEpD,GAAI,CAAC,EACH,MAAU,MAAM,kDAGlB,GAAM,CAAE,KAAI,CAAG,EAEf,MAAO,CACL,KACA,UACA,aACA,KAAM,EAAa,KACnB,WAAY,GAAG,EAAG,YAClB,kBAAmB,GAAG,EAAG,wBACzB,cAAe,GAAG,EAAG,oBACrB,GAAG,EACJ,AACF,EAMK,EAAkBA,EAAAA,QAAM,cAC5B,EAAE,EAGJ,SAAS,EAAS,CAAE,YAAW,GAAG,EAAoC,CAAE,CACtE,IAAM,EAAKA,EAAAA,QAAM,QAEjB,OACE,EAAA,EAAA,KAAC,EAAgB,SAAA,CAAS,MAAO,CAAE,KAAI,WACrC,EAAA,EAAA,KAAC,MAAA,CACC,YAAU,YACV,UAAWE,EAAAA,GAAG,aAAc,GAC5B,GAAI,KAIX,CAED,SAAS,EAAU,CACjB,YACA,GAAG,EAC8C,CAAE,CACnD,GAAM,CAAE,aAAY,CAAG,IACvB,OACE,EAAA,EAAA,KAACC,EAAAA,MAAAA,CACC,YAAU,aACV,UAAWD,EAAAA,GAAG,UAAW,GACzB,QAAS,EACT,GAAI,GAGT,CAED,SAAS,EAAY,CACnB,GAAG,EAC6C,CAAE,CAClD,GAAM,CAAE,QAAO,aAAY,oBAAmB,gBAAe,CAC3D,IAEF,OACE,EAAA,EAAA,KAACE,EAAAA,KAAc,KAAA,CACb,YAAU,eACV,GAAI,EACJ,mBACG,EAEG,GAAG,EAAkB,GAAG,IADxB,GAAG,IAGT,eAAc,CAAC,CAAC,EAChB,GAAI,GAGT,CAED,SAAS,EAAgB,CAAE,YAAW,GAAG,EAAkC,CAAE,CAC3E,GAAM,CAAE,oBAAmB,CAAG,IAE9B,OACE,EAAA,EAAA,KAAC,IAAA,CACC,YAAU,mBACV,GAAI,EACJ,UAAWF,EAAAA,GAAG,gCAAiC,GAC/C,GAAI,GAGT,CAED,SAAS,EAAY,CACnB,YACA,WACA,GAAG,EACuB,CAAE,CAC5B,GAAM,CAAE,QAAO,gBAAe,CAAG,IAEjC,OACE,EAAA,EAAA,KAAC,OAAA,CACC,YAAU,eACV,GAAI,EACJ,UAAWA,EAAAA,GAAG,2BAA4B,GAC1C,GAAI,WAEH,EAAQ,OAAO,GAAO,SAAW,IAAM,GAG7C"}
package/dist/form.js DELETED
@@ -1,2 +0,0 @@
1
- "use client";import{cn as e}from"./utils-D9AH0PUV.js";import{Label as t}from"./label-Bunoo8Hy.js";import n from"react";import{Label as r,Slot as i}from"radix-ui";import{jsx as a}from"react/jsx-runtime";import{Controller as o,FormProvider as s,useFormContext as c,useFormState as l}from"react-hook-form";const u=s,d=n.createContext({}),f=({...e})=>a(d.Provider,{value:{name:e.name},children:a(o,{...e})}),p=()=>{let e=n.useContext(d),t=n.useContext(m),{getFieldState:r,control:i,resetField:a}=c(),o=l({name:e.name}),s=r(e.name,o);if(!e)throw Error(`useFormField should be used within <FormField>`);let{id:u}=t;return{id:u,control:i,resetField:a,name:e.name,formItemId:`${u}-form-item`,formDescriptionId:`${u}-form-item-description`,formMessageId:`${u}-form-item-message`,...s}},m=n.createContext({});function h({className:t,...r}){let i=n.useId();return a(m.Provider,{value:{id:i},children:a(`div`,{"data-slot":`form-item`,className:e(`grid gap-1`,t),...r})})}function g({className:n,...r}){let{formItemId:i}=p();return a(t,{"data-slot":`form-label`,className:e(`text-xs`,n),htmlFor:i,...r})}function _({...e}){let{error:t,formItemId:n,formDescriptionId:r,formMessageId:o}=p();return a(i.Slot,{"data-slot":`form-control`,id:n,"aria-describedby":t?`${r} ${o}`:`${r}`,"aria-invalid":!!t,...e})}function v({className:t,...n}){let{formDescriptionId:r}=p();return a(`p`,{"data-slot":`form-description`,id:r,className:e(`text-muted-foreground text-sm`,t),...n})}function y({className:t,children:n,...r}){let{error:i,formMessageId:o}=p();return a(`span`,{"data-slot":`form-message`,id:o,className:e(`text-destructive text-xs`,t),...r,children:i?String(i?.message??``):n})}export{u as Form,_ as FormControl,v as FormDescription,f as FormField,h as FormItem,g as FormLabel,y as FormMessage,p as useFormField};
2
- //# sourceMappingURL=form.js.map
package/dist/form.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"form.js","names":["Label","SlotPrimitive"],"sources":["../packages/components/ui/form.tsx"],"sourcesContent":["\"use client\";\nimport React from \"react\";\nimport {\n Controller,\n type ControllerProps,\n type FieldPath,\n type FieldValues,\n FormProvider,\n useFormContext,\n useFormState,\n} from \"react-hook-form\";\nimport { Label as LabelPrimitive, Slot as SlotPrimitive } from \"radix-ui\";\n\nimport { Label } from \"@/components/ui/label\";\nimport { cn } from \"@/lib/utils\";\n\nconst Form = FormProvider;\n\ntype FormFieldContextValue<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> = {\n name: TName;\n};\n\nconst FormFieldContext = React.createContext<FormFieldContextValue>(\n {} as FormFieldContextValue,\n);\n\nconst FormField = <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n ...props\n}: ControllerProps<TFieldValues, TName>) => {\n return (\n <FormFieldContext.Provider value={{ name: props.name }}>\n <Controller {...props} />\n </FormFieldContext.Provider>\n );\n};\n\nconst useFormField = () => {\n const fieldContext = React.useContext(FormFieldContext);\n const itemContext = React.useContext(FormItemContext);\n const { getFieldState, control, resetField } = useFormContext();\n const formState = useFormState({ name: fieldContext.name });\n const fieldState = getFieldState(fieldContext.name, formState);\n\n if (!fieldContext) {\n throw new Error(\"useFormField should be used within <FormField>\");\n }\n\n const { id } = itemContext;\n\n return {\n id,\n control,\n resetField,\n name: fieldContext.name,\n formItemId: `${id}-form-item`,\n formDescriptionId: `${id}-form-item-description`,\n formMessageId: `${id}-form-item-message`,\n ...fieldState,\n };\n};\n\ntype FormItemContextValue = {\n id: string;\n};\n\nconst FormItemContext = React.createContext<FormItemContextValue>(\n {} as FormItemContextValue,\n);\n\nfunction FormItem({ className, ...props }: React.ComponentProps<\"div\">) {\n const id = React.useId();\n\n return (\n <FormItemContext.Provider value={{ id }}>\n <div\n data-slot=\"form-item\"\n className={cn(\"grid gap-1\", className)}\n {...props}\n />\n </FormItemContext.Provider>\n );\n}\n\nfunction FormLabel({\n className,\n ...props\n}: React.ComponentProps<typeof LabelPrimitive.Root>) {\n const { formItemId } = useFormField();\n return (\n <Label\n data-slot=\"form-label\"\n className={cn(\"text-xs\", className)}\n htmlFor={formItemId}\n {...props}\n />\n );\n}\n\nfunction FormControl({\n ...props\n}: React.ComponentProps<typeof SlotPrimitive.Slot>) {\n const { error, formItemId, formDescriptionId, formMessageId } =\n useFormField();\n\n return (\n <SlotPrimitive.Slot\n data-slot=\"form-control\"\n id={formItemId}\n aria-describedby={\n !error\n ? `${formDescriptionId}`\n : `${formDescriptionId} ${formMessageId}`\n }\n aria-invalid={!!error}\n {...props}\n />\n );\n}\n\nfunction FormDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n const { formDescriptionId } = useFormField();\n\n return (\n <p\n data-slot=\"form-description\"\n id={formDescriptionId}\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n );\n}\n\nfunction FormMessage({\n className,\n children,\n ...props\n}: React.ComponentProps<\"p\">) {\n const { error, formMessageId } = useFormField();\n\n return (\n <span\n data-slot=\"form-message\"\n id={formMessageId}\n className={cn(\"text-destructive text-xs\", className)}\n {...props}\n >\n {error ? String(error?.message ?? \"\") : children}\n </span>\n );\n}\n\n// eslint-disable-next-line react-refresh/only-export-components\nexport {\n Form,\n FormControl,\n FormDescription,\n FormField,\n FormItem,\n FormLabel,\n FormMessage,\n useFormField,\n};\n"],"mappings":"+SAgBA,MAAM,EAAO,EASP,EAAmB,EAAM,cAC7B,EAAE,EAGE,GAGJ,CACA,GAAG,EACkC,GAEnC,EAAC,EAAiB,SAAA,CAAS,MAAO,CAAE,KAAM,EAAM,KAAM,UACpD,EAAC,EAAA,CAAW,GAAI,EAAA,IAKhB,MAAqB,CACzB,IAAM,EAAe,EAAM,WAAW,GAChC,EAAc,EAAM,WAAW,GAC/B,CAAE,gBAAe,UAAS,aAAY,CAAG,IACzC,EAAY,EAAa,CAAE,KAAM,EAAa,KAAM,EACpD,EAAa,EAAc,EAAa,KAAM,GAEpD,GAAI,CAAC,EACH,MAAU,MAAM,kDAGlB,GAAM,CAAE,KAAI,CAAG,EAEf,MAAO,CACL,KACA,UACA,aACA,KAAM,EAAa,KACnB,WAAY,GAAG,EAAG,YAClB,kBAAmB,GAAG,EAAG,wBACzB,cAAe,GAAG,EAAG,oBACrB,GAAG,EACJ,AACF,EAMK,EAAkB,EAAM,cAC5B,EAAE,EAGJ,SAAS,EAAS,CAAE,YAAW,GAAG,EAAoC,CAAE,CACtE,IAAM,EAAK,EAAM,QAEjB,OACE,EAAC,EAAgB,SAAA,CAAS,MAAO,CAAE,KAAI,UACrC,EAAC,MAAA,CACC,YAAU,YACV,UAAW,EAAG,aAAc,GAC5B,GAAI,KAIX,CAED,SAAS,EAAU,CACjB,YACA,GAAG,EAC8C,CAAE,CACnD,GAAM,CAAE,aAAY,CAAG,IACvB,OACE,EAACA,EAAAA,CACC,YAAU,aACV,UAAW,EAAG,UAAW,GACzB,QAAS,EACT,GAAI,GAGT,CAED,SAAS,EAAY,CACnB,GAAG,EAC6C,CAAE,CAClD,GAAM,CAAE,QAAO,aAAY,oBAAmB,gBAAe,CAC3D,IAEF,OACE,EAACC,EAAc,KAAA,CACb,YAAU,eACV,GAAI,EACJ,mBACG,EAEG,GAAG,EAAkB,GAAG,IADxB,GAAG,IAGT,eAAc,CAAC,CAAC,EAChB,GAAI,GAGT,CAED,SAAS,EAAgB,CAAE,YAAW,GAAG,EAAkC,CAAE,CAC3E,GAAM,CAAE,oBAAmB,CAAG,IAE9B,OACE,EAAC,IAAA,CACC,YAAU,mBACV,GAAI,EACJ,UAAW,EAAG,gCAAiC,GAC/C,GAAI,GAGT,CAED,SAAS,EAAY,CACnB,YACA,WACA,GAAG,EACuB,CAAE,CAC5B,GAAM,CAAE,QAAO,gBAAe,CAAG,IAEjC,OACE,EAAC,OAAA,CACC,YAAU,eACV,GAAI,EACJ,UAAW,EAAG,2BAA4B,GAC1C,GAAI,WAEH,EAAQ,OAAO,GAAO,SAAW,IAAM,GAG7C"}
@@ -1,2 +0,0 @@
1
- "use client";const e=require(`./chunk-CUT6urMc.cjs`),t=require(`./utils-BsjVK5EW.cjs`),n=e.__toESM(require(`react`)),r=e.__toESM(require(`radix-ui`)),i=e.__toESM(require(`react/jsx-runtime`));function a({...e}){return(0,i.jsx)(r.HoverCard.Root,{"data-slot":`hover-card`,...e})}function o({...e}){return(0,i.jsx)(r.HoverCard.Trigger,{"data-slot":`hover-card-trigger`,...e})}function s({className:e,align:n=`center`,sideOffset:a=4,...o}){return(0,i.jsx)(r.HoverCard.Portal,{"data-slot":`hover-card-portal`,children:(0,i.jsx)(r.HoverCard.Content,{"data-slot":`hover-card-content`,align:n,sideOffset:a,className:t.cn(`bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 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 z-50 w-64 origin-(--radix-hover-card-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden`,e),...o})})}exports.HoverCard=a,exports.HoverCardContent=s,exports.HoverCardTrigger=o;
2
- //# sourceMappingURL=hover-card.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hover-card.cjs","names":["HoverCardPrimitive","cn"],"sources":["../packages/components/ui/hover-card.tsx"],"sourcesContent":["\"use client\";\nimport React from \"react\";\nimport { HoverCard as HoverCardPrimitive } from \"radix-ui\";\n\nimport { cn } from \"@/lib/utils\";\n\nfunction HoverCard({\n ...props\n}: React.ComponentProps<typeof HoverCardPrimitive.Root>) {\n return <HoverCardPrimitive.Root data-slot=\"hover-card\" {...props} />;\n}\n\nfunction HoverCardTrigger({\n ...props\n}: React.ComponentProps<typeof HoverCardPrimitive.Trigger>) {\n return (\n <HoverCardPrimitive.Trigger data-slot=\"hover-card-trigger\" {...props} />\n );\n}\n\nfunction HoverCardContent({\n className,\n align = \"center\",\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof HoverCardPrimitive.Content>) {\n return (\n <HoverCardPrimitive.Portal data-slot=\"hover-card-portal\">\n <HoverCardPrimitive.Content\n data-slot=\"hover-card-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 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 z-50 w-64 origin-(--radix-hover-card-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden\",\n className,\n )}\n {...props}\n />\n </HoverCardPrimitive.Portal>\n );\n}\n\nexport { HoverCard, HoverCardContent, HoverCardTrigger };\n"],"mappings":"gMAMA,SAAS,EAAU,CACjB,GAAG,EACkD,CAAE,CACvD,OAAO,EAAA,EAAA,KAACA,EAAAA,UAAmB,KAAA,CAAK,YAAU,aAAa,GAAI,GAC5D,CAED,SAAS,EAAiB,CACxB,GAAG,EACqD,CAAE,CAC1D,OACE,EAAA,EAAA,KAACA,EAAAA,UAAmB,QAAA,CAAQ,YAAU,qBAAqB,GAAI,GAElE,CAED,SAAS,EAAiB,CACxB,YACA,QAAQ,SACR,aAAa,EACb,GAAG,EACqD,CAAE,CAC1D,OACE,EAAA,EAAA,KAACA,EAAAA,UAAmB,OAAA,CAAO,YAAU,8BACnC,EAAA,EAAA,KAACA,EAAAA,UAAmB,QAAA,CAClB,YAAU,qBACH,QACK,aACZ,UAAWC,EAAAA,GACT,oeACA,GAEF,GAAI,KAIX"}
@@ -1,2 +0,0 @@
1
- "use client";import{cn as e}from"./utils-D9AH0PUV.js";import t from"react";import{HoverCard as n}from"radix-ui";import{jsx as r}from"react/jsx-runtime";function i({...e}){return r(n.Root,{"data-slot":`hover-card`,...e})}function a({...e}){return r(n.Trigger,{"data-slot":`hover-card-trigger`,...e})}function o({className:t,align:i=`center`,sideOffset:a=4,...o}){return r(n.Portal,{"data-slot":`hover-card-portal`,children:r(n.Content,{"data-slot":`hover-card-content`,align:i,sideOffset:a,className:e(`bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 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 z-50 w-64 origin-(--radix-hover-card-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden`,t),...o})})}export{i as HoverCard,o as HoverCardContent,a as HoverCardTrigger};
2
- //# sourceMappingURL=hover-card.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hover-card.js","names":["HoverCardPrimitive"],"sources":["../packages/components/ui/hover-card.tsx"],"sourcesContent":["\"use client\";\nimport React from \"react\";\nimport { HoverCard as HoverCardPrimitive } from \"radix-ui\";\n\nimport { cn } from \"@/lib/utils\";\n\nfunction HoverCard({\n ...props\n}: React.ComponentProps<typeof HoverCardPrimitive.Root>) {\n return <HoverCardPrimitive.Root data-slot=\"hover-card\" {...props} />;\n}\n\nfunction HoverCardTrigger({\n ...props\n}: React.ComponentProps<typeof HoverCardPrimitive.Trigger>) {\n return (\n <HoverCardPrimitive.Trigger data-slot=\"hover-card-trigger\" {...props} />\n );\n}\n\nfunction HoverCardContent({\n className,\n align = \"center\",\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof HoverCardPrimitive.Content>) {\n return (\n <HoverCardPrimitive.Portal data-slot=\"hover-card-portal\">\n <HoverCardPrimitive.Content\n data-slot=\"hover-card-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 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 z-50 w-64 origin-(--radix-hover-card-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden\",\n className,\n )}\n {...props}\n />\n </HoverCardPrimitive.Portal>\n );\n}\n\nexport { HoverCard, HoverCardContent, HoverCardTrigger };\n"],"mappings":"wJAMA,SAAS,EAAU,CACjB,GAAG,EACkD,CAAE,CACvD,OAAO,EAACA,EAAmB,KAAA,CAAK,YAAU,aAAa,GAAI,GAC5D,CAED,SAAS,EAAiB,CACxB,GAAG,EACqD,CAAE,CAC1D,OACE,EAACA,EAAmB,QAAA,CAAQ,YAAU,qBAAqB,GAAI,GAElE,CAED,SAAS,EAAiB,CACxB,YACA,QAAQ,SACR,aAAa,EACb,GAAG,EACqD,CAAE,CAC1D,OACE,EAACA,EAAmB,OAAA,CAAO,YAAU,6BACnC,EAACA,EAAmB,QAAA,CAClB,YAAU,qBACH,QACK,aACZ,UAAW,EACT,oeACA,GAEF,GAAI,KAIX"}
@@ -1,2 +0,0 @@
1
- "use client";const e=require(`./chunk-CUT6urMc.cjs`),t=require(`./utils-BsjVK5EW.cjs`),n=e.__toESM(require(`react`)),r=e.__toESM(require(`react/jsx-runtime`)),i=e.__toESM(require(`lucide-react`)),a=e.__toESM(require(`input-otp`));function o({className:e,containerClassName:n,...i}){return(0,r.jsx)(a.OTPInput,{"data-slot":`input-otp`,containerClassName:t.cn(`flex items-center gap-2 has-disabled:opacity-50`,n),className:t.cn(`disabled:cursor-not-allowed`,e),...i})}function s({className:e,...n}){return(0,r.jsx)(`div`,{"data-slot":`input-otp-group`,className:t.cn(`flex items-center`,e),...n})}function c({index:e,className:i,...o}){let s=n.default.useContext(a.OTPInputContext),{char:c,hasFakeCaret:l,isActive:u}=s?.slots[e]??{};return(0,r.jsxs)(`div`,{"data-slot":`input-otp-slot`,"data-active":u,className:t.cn(`data-[active=true]:border-ring data-[active=true]:ring-ring/50 data-[active=true]:aria-invalid:ring-destructive/20 dark:data-[active=true]:aria-invalid:ring-destructive/40 aria-invalid:border-destructive data-[active=true]:aria-invalid:border-destructive dark:bg-input/30 border-input relative flex h-9 w-9 items-center justify-center border-y border-r text-sm shadow-xs transition-all outline-none first:rounded-l-md first:border-l last:rounded-r-md data-[active=true]:z-10 data-[active=true]:ring-[3px]`,i),...o,children:[c,l&&(0,r.jsx)(`div`,{className:`pointer-events-none absolute inset-0 flex items-center justify-center`,children:(0,r.jsx)(`div`,{className:`animate-caret-blink bg-foreground h-4 w-px duration-1000`})})]})}function l({...e}){return(0,r.jsx)(`div`,{"data-slot":`input-otp-separator`,role:`separator`,...e,children:(0,r.jsx)(i.MinusIcon,{})})}exports.InputOTP=o,exports.InputOTPGroup=s,exports.InputOTPSeparator=l,exports.InputOTPSlot=c;
2
- //# sourceMappingURL=input-otp.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"input-otp.cjs","names":["OTPInput","cn","React","OTPInputContext","MinusIcon"],"sources":["../packages/components/ui/input-otp.tsx"],"sourcesContent":["\"use client\";\nimport React from \"react\";\nimport { OTPInput, OTPInputContext } from \"input-otp\";\nimport { MinusIcon } from \"lucide-react\";\n\nimport { cn } from \"@/lib/utils\";\n\nfunction InputOTP({\n className,\n containerClassName,\n ...props\n}: React.ComponentProps<typeof OTPInput> & {\n containerClassName?: string;\n}) {\n return (\n <OTPInput\n data-slot=\"input-otp\"\n containerClassName={cn(\n \"flex items-center gap-2 has-disabled:opacity-50\",\n containerClassName,\n )}\n className={cn(\"disabled:cursor-not-allowed\", className)}\n {...props}\n />\n );\n}\n\nfunction InputOTPGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"input-otp-group\"\n className={cn(\"flex items-center\", className)}\n {...props}\n />\n );\n}\n\nfunction InputOTPSlot({\n index,\n className,\n ...props\n}: React.ComponentProps<\"div\"> & {\n index: number;\n}) {\n const inputOTPContext = React.useContext(OTPInputContext);\n const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {};\n\n return (\n <div\n data-slot=\"input-otp-slot\"\n data-active={isActive}\n className={cn(\n \"data-[active=true]:border-ring data-[active=true]:ring-ring/50 data-[active=true]:aria-invalid:ring-destructive/20 dark:data-[active=true]:aria-invalid:ring-destructive/40 aria-invalid:border-destructive data-[active=true]:aria-invalid:border-destructive dark:bg-input/30 border-input relative flex h-9 w-9 items-center justify-center border-y border-r text-sm shadow-xs transition-all outline-none first:rounded-l-md first:border-l last:rounded-r-md data-[active=true]:z-10 data-[active=true]:ring-[3px]\",\n className,\n )}\n {...props}\n >\n {char}\n {hasFakeCaret && (\n <div className=\"pointer-events-none absolute inset-0 flex items-center justify-center\">\n <div className=\"animate-caret-blink bg-foreground h-4 w-px duration-1000\" />\n </div>\n )}\n </div>\n );\n}\n\nfunction InputOTPSeparator({ ...props }: React.ComponentProps<\"div\">) {\n return (\n <div data-slot=\"input-otp-separator\" role=\"separator\" {...props}>\n <MinusIcon />\n </div>\n );\n}\n\nexport { InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot };\n"],"mappings":"sOAOA,SAAS,EAAS,CAChB,YACA,qBACA,GAAG,EAGJ,CAAE,CACD,OACE,EAAA,EAAA,KAACA,EAAAA,SAAAA,CACC,YAAU,YACV,mBAAoBC,EAAAA,GAClB,kDACA,GAEF,UAAWA,EAAAA,GAAG,8BAA+B,GAC7C,GAAI,GAGT,CAED,SAAS,EAAc,CAAE,YAAW,GAAG,EAAoC,CAAE,CAC3E,OACE,EAAA,EAAA,KAAC,MAAA,CACC,YAAU,kBACV,UAAWA,EAAAA,GAAG,oBAAqB,GACnC,GAAI,GAGT,CAED,SAAS,EAAa,CACpB,QACA,YACA,GAAG,EAGJ,CAAE,CACD,IAAM,EAAkBC,EAAAA,QAAM,WAAWC,EAAAA,iBACnC,CAAE,OAAM,eAAc,WAAU,CAAG,GAAiB,MAAM,IAAU,EAAE,CAE5E,OACE,EAAA,EAAA,MAAC,MAAA,CACC,YAAU,iBACV,cAAa,EACb,UAAWF,EAAAA,GACT,2fACA,GAEF,GAAI,YAEH,EACA,IACC,EAAA,EAAA,KAAC,MAAA,CAAI,UAAU,kFACb,EAAA,EAAA,KAAC,MAAA,CAAI,UAAU,2DAAA,MAKxB,CAED,SAAS,EAAkB,CAAE,GAAG,EAAoC,CAAE,CACpE,OACE,EAAA,EAAA,KAAC,MAAA,CAAI,YAAU,sBAAsB,KAAK,YAAY,GAAI,YACxD,EAAA,EAAA,KAACG,EAAAA,UAAAA,EAAAA,GAGN"}
package/dist/input-otp.js DELETED
@@ -1,2 +0,0 @@
1
- "use client";import{cn as e}from"./utils-D9AH0PUV.js";import t from"react";import{jsx as n,jsxs as r}from"react/jsx-runtime";import{MinusIcon as i}from"lucide-react";import{OTPInput as a,OTPInputContext as o}from"input-otp";function s({className:t,containerClassName:r,...i}){return n(a,{"data-slot":`input-otp`,containerClassName:e(`flex items-center gap-2 has-disabled:opacity-50`,r),className:e(`disabled:cursor-not-allowed`,t),...i})}function c({className:t,...r}){return n(`div`,{"data-slot":`input-otp-group`,className:e(`flex items-center`,t),...r})}function l({index:i,className:a,...s}){let c=t.useContext(o),{char:l,hasFakeCaret:u,isActive:d}=c?.slots[i]??{};return r(`div`,{"data-slot":`input-otp-slot`,"data-active":d,className:e(`data-[active=true]:border-ring data-[active=true]:ring-ring/50 data-[active=true]:aria-invalid:ring-destructive/20 dark:data-[active=true]:aria-invalid:ring-destructive/40 aria-invalid:border-destructive data-[active=true]:aria-invalid:border-destructive dark:bg-input/30 border-input relative flex h-9 w-9 items-center justify-center border-y border-r text-sm shadow-xs transition-all outline-none first:rounded-l-md first:border-l last:rounded-r-md data-[active=true]:z-10 data-[active=true]:ring-[3px]`,a),...s,children:[l,u&&n(`div`,{className:`pointer-events-none absolute inset-0 flex items-center justify-center`,children:n(`div`,{className:`animate-caret-blink bg-foreground h-4 w-px duration-1000`})})]})}function u({...e}){return n(`div`,{"data-slot":`input-otp-separator`,role:`separator`,...e,children:n(i,{})})}export{s as InputOTP,c as InputOTPGroup,u as InputOTPSeparator,l as InputOTPSlot};
2
- //# sourceMappingURL=input-otp.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"input-otp.js","names":[],"sources":["../packages/components/ui/input-otp.tsx"],"sourcesContent":["\"use client\";\nimport React from \"react\";\nimport { OTPInput, OTPInputContext } from \"input-otp\";\nimport { MinusIcon } from \"lucide-react\";\n\nimport { cn } from \"@/lib/utils\";\n\nfunction InputOTP({\n className,\n containerClassName,\n ...props\n}: React.ComponentProps<typeof OTPInput> & {\n containerClassName?: string;\n}) {\n return (\n <OTPInput\n data-slot=\"input-otp\"\n containerClassName={cn(\n \"flex items-center gap-2 has-disabled:opacity-50\",\n containerClassName,\n )}\n className={cn(\"disabled:cursor-not-allowed\", className)}\n {...props}\n />\n );\n}\n\nfunction InputOTPGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"input-otp-group\"\n className={cn(\"flex items-center\", className)}\n {...props}\n />\n );\n}\n\nfunction InputOTPSlot({\n index,\n className,\n ...props\n}: React.ComponentProps<\"div\"> & {\n index: number;\n}) {\n const inputOTPContext = React.useContext(OTPInputContext);\n const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {};\n\n return (\n <div\n data-slot=\"input-otp-slot\"\n data-active={isActive}\n className={cn(\n \"data-[active=true]:border-ring data-[active=true]:ring-ring/50 data-[active=true]:aria-invalid:ring-destructive/20 dark:data-[active=true]:aria-invalid:ring-destructive/40 aria-invalid:border-destructive data-[active=true]:aria-invalid:border-destructive dark:bg-input/30 border-input relative flex h-9 w-9 items-center justify-center border-y border-r text-sm shadow-xs transition-all outline-none first:rounded-l-md first:border-l last:rounded-r-md data-[active=true]:z-10 data-[active=true]:ring-[3px]\",\n className,\n )}\n {...props}\n >\n {char}\n {hasFakeCaret && (\n <div className=\"pointer-events-none absolute inset-0 flex items-center justify-center\">\n <div className=\"animate-caret-blink bg-foreground h-4 w-px duration-1000\" />\n </div>\n )}\n </div>\n );\n}\n\nfunction InputOTPSeparator({ ...props }: React.ComponentProps<\"div\">) {\n return (\n <div data-slot=\"input-otp-separator\" role=\"separator\" {...props}>\n <MinusIcon />\n </div>\n );\n}\n\nexport { InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot };\n"],"mappings":"gOAOA,SAAS,EAAS,CAChB,YACA,qBACA,GAAG,EAGJ,CAAE,CACD,OACE,EAAC,EAAA,CACC,YAAU,YACV,mBAAoB,EAClB,kDACA,GAEF,UAAW,EAAG,8BAA+B,GAC7C,GAAI,GAGT,CAED,SAAS,EAAc,CAAE,YAAW,GAAG,EAAoC,CAAE,CAC3E,OACE,EAAC,MAAA,CACC,YAAU,kBACV,UAAW,EAAG,oBAAqB,GACnC,GAAI,GAGT,CAED,SAAS,EAAa,CACpB,QACA,YACA,GAAG,EAGJ,CAAE,CACD,IAAM,EAAkB,EAAM,WAAW,GACnC,CAAE,OAAM,eAAc,WAAU,CAAG,GAAiB,MAAM,IAAU,EAAE,CAE5E,OACE,EAAC,MAAA,CACC,YAAU,iBACV,cAAa,EACb,UAAW,EACT,2fACA,GAEF,GAAI,YAEH,EACA,GACC,EAAC,MAAA,CAAI,UAAU,iFACb,EAAC,MAAA,CAAI,UAAU,2DAAA,MAKxB,CAED,SAAS,EAAkB,CAAE,GAAG,EAAoC,CAAE,CACpE,OACE,EAAC,MAAA,CAAI,YAAU,sBAAsB,KAAK,YAAY,GAAI,WACxD,EAAC,EAAA,EAAA,GAGN"}
package/dist/input.cjs DELETED
@@ -1 +0,0 @@
1
- "use client";require(`./utils-BsjVK5EW.cjs`);const e=require(`./input-BROCl7ef.cjs`);exports.Input=e.Input;
package/dist/input.d.cts DELETED
@@ -1,2 +0,0 @@
1
- import { Input } from "./input-DsHkxcpM.cjs";
2
- export { Input };
package/dist/input.d.ts DELETED
@@ -1,2 +0,0 @@
1
- import { Input } from "./input-8iac_flR.js";
2
- export { Input };
package/dist/input.js DELETED
@@ -1 +0,0 @@
1
- "use client";import"./utils-D9AH0PUV.js";import{Input as e}from"./input-3pmkK3b5.js";export{e as Input};
package/dist/label.cjs DELETED
@@ -1 +0,0 @@
1
- "use client";require(`./utils-BsjVK5EW.cjs`);const e=require(`./label-BWUQswhZ.cjs`);exports.Label=e.Label;
package/dist/label.js DELETED
@@ -1 +0,0 @@
1
- "use client";import"./utils-D9AH0PUV.js";import{Label as e}from"./label-Bunoo8Hy.js";export{e as Label};
package/dist/menubar.cjs DELETED
@@ -1,2 +0,0 @@
1
- "use client";const e=require(`./chunk-CUT6urMc.cjs`),t=require(`./utils-BsjVK5EW.cjs`),n=e.__toESM(require(`react`)),r=e.__toESM(require(`radix-ui`)),i=e.__toESM(require(`react/jsx-runtime`)),a=e.__toESM(require(`lucide-react`));function o({className:e,...n}){return(0,i.jsx)(r.Menubar.Root,{"data-slot":`menubar`,className:t.cn(`bg-background flex h-9 items-center gap-1 rounded-md border p-1 shadow-xs`,e),...n})}function s({...e}){return(0,i.jsx)(r.Menubar.Menu,{"data-slot":`menubar-menu`,...e})}function c({...e}){return(0,i.jsx)(r.Menubar.Group,{"data-slot":`menubar-group`,...e})}function l({...e}){return(0,i.jsx)(r.Menubar.Portal,{"data-slot":`menubar-portal`,...e})}function u({...e}){return(0,i.jsx)(r.Menubar.RadioGroup,{"data-slot":`menubar-radio-group`,...e})}function d({className:e,...n}){return(0,i.jsx)(r.Menubar.Trigger,{"data-slot":`menubar-trigger`,className:t.cn(`focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex items-center rounded-sm px-2 py-1 text-sm font-medium outline-hidden select-none`,e),...n})}function f({className:e,align:n=`start`,alignOffset:a=-4,sideOffset:o=8,...s}){return(0,i.jsx)(l,{children:(0,i.jsx)(r.Menubar.Content,{"data-slot":`menubar-content`,align:n,alignOffset:a,sideOffset:o,className:t.cn(`bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 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 z-50 min-w-[12rem] origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-md`,e),...s})})}function p({className:e,inset:n,variant:a=`default`,...o}){return(0,i.jsx)(r.Menubar.Item,{"data-slot":`menubar-item`,"data-inset":n,"data-variant":a,className:t.cn(`focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,e),...o})}function m({className:e,children:n,checked:o,...s}){return(0,i.jsxs)(r.Menubar.CheckboxItem,{"data-slot":`menubar-checkbox-item`,className:t.cn(`focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-xs py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,e),checked:o,...s,children:[(0,i.jsx)(`span`,{className:`pointer-events-none absolute left-2 flex size-3.5 items-center justify-center`,children:(0,i.jsx)(r.Menubar.ItemIndicator,{children:(0,i.jsx)(a.CheckIcon,{className:`size-4`})})}),n]})}function h({className:e,children:n,...o}){return(0,i.jsxs)(r.Menubar.RadioItem,{"data-slot":`menubar-radio-item`,className:t.cn(`focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-xs py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,e),...o,children:[(0,i.jsx)(`span`,{className:`pointer-events-none absolute left-2 flex size-3.5 items-center justify-center`,children:(0,i.jsx)(r.Menubar.ItemIndicator,{children:(0,i.jsx)(a.CircleIcon,{className:`size-2 fill-current`})})}),n]})}function g({className:e,inset:n,...a}){return(0,i.jsx)(r.Menubar.Label,{"data-slot":`menubar-label`,"data-inset":n,className:t.cn(`px-2 py-1.5 text-sm font-medium data-[inset]:pl-8`,e),...a})}function _({className:e,...n}){return(0,i.jsx)(r.Menubar.Separator,{"data-slot":`menubar-separator`,className:t.cn(`bg-border -mx-1 my-1 h-px`,e),...n})}function v({className:e,...n}){return(0,i.jsx)(`span`,{"data-slot":`menubar-shortcut`,className:t.cn(`text-muted-foreground ml-auto text-xs tracking-widest`,e),...n})}function y({...e}){return(0,i.jsx)(r.Menubar.Sub,{"data-slot":`menubar-sub`,...e})}function b({className:e,inset:n,children:o,...s}){return(0,i.jsxs)(r.Menubar.SubTrigger,{"data-slot":`menubar-sub-trigger`,"data-inset":n,className:t.cn(`focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-none select-none data-[inset]:pl-8`,e),...s,children:[o,(0,i.jsx)(a.ChevronRightIcon,{className:`ml-auto h-4 w-4`})]})}function x({className:e,...n}){return(0,i.jsx)(r.Menubar.SubContent,{"data-slot":`menubar-sub-content`,className:t.cn(`bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 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 z-50 min-w-[8rem] origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg`,e),...n})}exports.Menubar=o,exports.MenubarCheckboxItem=m,exports.MenubarContent=f,exports.MenubarGroup=c,exports.MenubarItem=p,exports.MenubarLabel=g,exports.MenubarMenu=s,exports.MenubarPortal=l,exports.MenubarRadioGroup=u,exports.MenubarRadioItem=h,exports.MenubarSeparator=_,exports.MenubarShortcut=v,exports.MenubarSub=y,exports.MenubarSubContent=x,exports.MenubarSubTrigger=b,exports.MenubarTrigger=d;
2
- //# sourceMappingURL=menubar.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"menubar.cjs","names":["MenubarPrimitive","cn","CheckIcon","CircleIcon","ChevronRightIcon"],"sources":["../packages/components/ui/menubar.tsx"],"sourcesContent":["\"use client\";\nimport React from \"react\";\nimport { Menubar as MenubarPrimitive } from \"radix-ui\";\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\";\n\nimport { cn } from \"@/lib/utils\";\n\nfunction Menubar({\n className,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Root>) {\n return (\n <MenubarPrimitive.Root\n data-slot=\"menubar\"\n className={cn(\n \"bg-background flex h-9 items-center gap-1 rounded-md border p-1 shadow-xs\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction MenubarMenu({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Menu>) {\n return <MenubarPrimitive.Menu data-slot=\"menubar-menu\" {...props} />;\n}\n\nfunction MenubarGroup({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Group>) {\n return <MenubarPrimitive.Group data-slot=\"menubar-group\" {...props} />;\n}\n\nfunction MenubarPortal({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Portal>) {\n return <MenubarPrimitive.Portal data-slot=\"menubar-portal\" {...props} />;\n}\n\nfunction MenubarRadioGroup({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.RadioGroup>) {\n return (\n <MenubarPrimitive.RadioGroup data-slot=\"menubar-radio-group\" {...props} />\n );\n}\n\nfunction MenubarTrigger({\n className,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Trigger>) {\n return (\n <MenubarPrimitive.Trigger\n data-slot=\"menubar-trigger\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex items-center rounded-sm px-2 py-1 text-sm font-medium outline-hidden select-none\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction MenubarContent({\n className,\n align = \"start\",\n alignOffset = -4,\n sideOffset = 8,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Content>) {\n return (\n <MenubarPortal>\n <MenubarPrimitive.Content\n data-slot=\"menubar-content\"\n align={align}\n alignOffset={alignOffset}\n sideOffset={sideOffset}\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 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 z-50 min-w-[12rem] origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-md\",\n className,\n )}\n {...props}\n />\n </MenubarPortal>\n );\n}\n\nfunction MenubarItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Item> & {\n inset?: boolean;\n variant?: \"default\" | \"destructive\";\n}) {\n return (\n <MenubarPrimitive.Item\n data-slot=\"menubar-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction MenubarCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.CheckboxItem>) {\n return (\n <MenubarPrimitive.CheckboxItem\n data-slot=\"menubar-checkbox-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-xs py-1.5 pr-2 pl-8 text-sm outline-hidden select-none 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 className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <MenubarPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </MenubarPrimitive.ItemIndicator>\n </span>\n {children}\n </MenubarPrimitive.CheckboxItem>\n );\n}\n\nfunction MenubarRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.RadioItem>) {\n return (\n <MenubarPrimitive.RadioItem\n data-slot=\"menubar-radio-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-xs py-1.5 pr-2 pl-8 text-sm outline-hidden select-none 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 className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <MenubarPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </MenubarPrimitive.ItemIndicator>\n </span>\n {children}\n </MenubarPrimitive.RadioItem>\n );\n}\n\nfunction MenubarLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Label> & {\n inset?: boolean;\n}) {\n return (\n <MenubarPrimitive.Label\n data-slot=\"menubar-label\"\n data-inset={inset}\n className={cn(\n \"px-2 py-1.5 text-sm font-medium data-[inset]:pl-8\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction MenubarSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Separator>) {\n return (\n <MenubarPrimitive.Separator\n data-slot=\"menubar-separator\"\n className={cn(\"bg-border -mx-1 my-1 h-px\", className)}\n {...props}\n />\n );\n}\n\nfunction MenubarShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"menubar-shortcut\"\n className={cn(\n \"text-muted-foreground ml-auto text-xs tracking-widest\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction MenubarSub({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Sub>) {\n return <MenubarPrimitive.Sub data-slot=\"menubar-sub\" {...props} />;\n}\n\nfunction MenubarSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.SubTrigger> & {\n inset?: boolean;\n}) {\n return (\n <MenubarPrimitive.SubTrigger\n data-slot=\"menubar-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-none select-none data-[inset]:pl-8\",\n className,\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto h-4 w-4\" />\n </MenubarPrimitive.SubTrigger>\n );\n}\n\nfunction MenubarSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.SubContent>) {\n return (\n <MenubarPrimitive.SubContent\n data-slot=\"menubar-sub-content\"\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 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 z-50 min-w-[8rem] origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport {\n Menubar,\n MenubarCheckboxItem,\n MenubarContent,\n MenubarGroup,\n MenubarItem,\n MenubarLabel,\n MenubarMenu,\n MenubarPortal,\n MenubarRadioGroup,\n MenubarRadioItem,\n MenubarSeparator,\n MenubarShortcut,\n MenubarSub,\n MenubarSubContent,\n MenubarSubTrigger,\n MenubarTrigger,\n};\n"],"mappings":"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"}
package/dist/menubar.js DELETED
@@ -1,2 +0,0 @@
1
- "use client";import{cn as e}from"./utils-D9AH0PUV.js";import t from"react";import{Menubar as n}from"radix-ui";import{jsx as r,jsxs as i}from"react/jsx-runtime";import{CheckIcon as a,ChevronRightIcon as o,CircleIcon as s}from"lucide-react";function c({className:t,...i}){return r(n.Root,{"data-slot":`menubar`,className:e(`bg-background flex h-9 items-center gap-1 rounded-md border p-1 shadow-xs`,t),...i})}function l({...e}){return r(n.Menu,{"data-slot":`menubar-menu`,...e})}function u({...e}){return r(n.Group,{"data-slot":`menubar-group`,...e})}function d({...e}){return r(n.Portal,{"data-slot":`menubar-portal`,...e})}function f({...e}){return r(n.RadioGroup,{"data-slot":`menubar-radio-group`,...e})}function p({className:t,...i}){return r(n.Trigger,{"data-slot":`menubar-trigger`,className:e(`focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex items-center rounded-sm px-2 py-1 text-sm font-medium outline-hidden select-none`,t),...i})}function m({className:t,align:i=`start`,alignOffset:a=-4,sideOffset:o=8,...s}){return r(d,{children:r(n.Content,{"data-slot":`menubar-content`,align:i,alignOffset:a,sideOffset:o,className:e(`bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 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 z-50 min-w-[12rem] origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-md`,t),...s})})}function h({className:t,inset:i,variant:a=`default`,...o}){return r(n.Item,{"data-slot":`menubar-item`,"data-inset":i,"data-variant":a,className:e(`focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,t),...o})}function g({className:t,children:o,checked:s,...c}){return i(n.CheckboxItem,{"data-slot":`menubar-checkbox-item`,className:e(`focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-xs py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,t),checked:s,...c,children:[r(`span`,{className:`pointer-events-none absolute left-2 flex size-3.5 items-center justify-center`,children:r(n.ItemIndicator,{children:r(a,{className:`size-4`})})}),o]})}function _({className:t,children:a,...o}){return i(n.RadioItem,{"data-slot":`menubar-radio-item`,className:e(`focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-xs py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,t),...o,children:[r(`span`,{className:`pointer-events-none absolute left-2 flex size-3.5 items-center justify-center`,children:r(n.ItemIndicator,{children:r(s,{className:`size-2 fill-current`})})}),a]})}function v({className:t,inset:i,...a}){return r(n.Label,{"data-slot":`menubar-label`,"data-inset":i,className:e(`px-2 py-1.5 text-sm font-medium data-[inset]:pl-8`,t),...a})}function y({className:t,...i}){return r(n.Separator,{"data-slot":`menubar-separator`,className:e(`bg-border -mx-1 my-1 h-px`,t),...i})}function b({className:t,...n}){return r(`span`,{"data-slot":`menubar-shortcut`,className:e(`text-muted-foreground ml-auto text-xs tracking-widest`,t),...n})}function x({...e}){return r(n.Sub,{"data-slot":`menubar-sub`,...e})}function S({className:t,inset:a,children:s,...c}){return i(n.SubTrigger,{"data-slot":`menubar-sub-trigger`,"data-inset":a,className:e(`focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-none select-none data-[inset]:pl-8`,t),...c,children:[s,r(o,{className:`ml-auto h-4 w-4`})]})}function C({className:t,...i}){return r(n.SubContent,{"data-slot":`menubar-sub-content`,className:e(`bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 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 z-50 min-w-[8rem] origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg`,t),...i})}export{c as Menubar,g as MenubarCheckboxItem,m as MenubarContent,u as MenubarGroup,h as MenubarItem,v as MenubarLabel,l as MenubarMenu,d as MenubarPortal,f as MenubarRadioGroup,_ as MenubarRadioItem,y as MenubarSeparator,b as MenubarShortcut,x as MenubarSub,C as MenubarSubContent,S as MenubarSubTrigger,p as MenubarTrigger};
2
- //# sourceMappingURL=menubar.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"menubar.js","names":["MenubarPrimitive"],"sources":["../packages/components/ui/menubar.tsx"],"sourcesContent":["\"use client\";\nimport React from \"react\";\nimport { Menubar as MenubarPrimitive } from \"radix-ui\";\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\";\n\nimport { cn } from \"@/lib/utils\";\n\nfunction Menubar({\n className,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Root>) {\n return (\n <MenubarPrimitive.Root\n data-slot=\"menubar\"\n className={cn(\n \"bg-background flex h-9 items-center gap-1 rounded-md border p-1 shadow-xs\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction MenubarMenu({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Menu>) {\n return <MenubarPrimitive.Menu data-slot=\"menubar-menu\" {...props} />;\n}\n\nfunction MenubarGroup({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Group>) {\n return <MenubarPrimitive.Group data-slot=\"menubar-group\" {...props} />;\n}\n\nfunction MenubarPortal({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Portal>) {\n return <MenubarPrimitive.Portal data-slot=\"menubar-portal\" {...props} />;\n}\n\nfunction MenubarRadioGroup({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.RadioGroup>) {\n return (\n <MenubarPrimitive.RadioGroup data-slot=\"menubar-radio-group\" {...props} />\n );\n}\n\nfunction MenubarTrigger({\n className,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Trigger>) {\n return (\n <MenubarPrimitive.Trigger\n data-slot=\"menubar-trigger\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex items-center rounded-sm px-2 py-1 text-sm font-medium outline-hidden select-none\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction MenubarContent({\n className,\n align = \"start\",\n alignOffset = -4,\n sideOffset = 8,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Content>) {\n return (\n <MenubarPortal>\n <MenubarPrimitive.Content\n data-slot=\"menubar-content\"\n align={align}\n alignOffset={alignOffset}\n sideOffset={sideOffset}\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 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 z-50 min-w-[12rem] origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-md\",\n className,\n )}\n {...props}\n />\n </MenubarPortal>\n );\n}\n\nfunction MenubarItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Item> & {\n inset?: boolean;\n variant?: \"default\" | \"destructive\";\n}) {\n return (\n <MenubarPrimitive.Item\n data-slot=\"menubar-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction MenubarCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.CheckboxItem>) {\n return (\n <MenubarPrimitive.CheckboxItem\n data-slot=\"menubar-checkbox-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-xs py-1.5 pr-2 pl-8 text-sm outline-hidden select-none 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 className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <MenubarPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </MenubarPrimitive.ItemIndicator>\n </span>\n {children}\n </MenubarPrimitive.CheckboxItem>\n );\n}\n\nfunction MenubarRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.RadioItem>) {\n return (\n <MenubarPrimitive.RadioItem\n data-slot=\"menubar-radio-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-xs py-1.5 pr-2 pl-8 text-sm outline-hidden select-none 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 className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <MenubarPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </MenubarPrimitive.ItemIndicator>\n </span>\n {children}\n </MenubarPrimitive.RadioItem>\n );\n}\n\nfunction MenubarLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Label> & {\n inset?: boolean;\n}) {\n return (\n <MenubarPrimitive.Label\n data-slot=\"menubar-label\"\n data-inset={inset}\n className={cn(\n \"px-2 py-1.5 text-sm font-medium data-[inset]:pl-8\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction MenubarSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Separator>) {\n return (\n <MenubarPrimitive.Separator\n data-slot=\"menubar-separator\"\n className={cn(\"bg-border -mx-1 my-1 h-px\", className)}\n {...props}\n />\n );\n}\n\nfunction MenubarShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"menubar-shortcut\"\n className={cn(\n \"text-muted-foreground ml-auto text-xs tracking-widest\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction MenubarSub({\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.Sub>) {\n return <MenubarPrimitive.Sub data-slot=\"menubar-sub\" {...props} />;\n}\n\nfunction MenubarSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.SubTrigger> & {\n inset?: boolean;\n}) {\n return (\n <MenubarPrimitive.SubTrigger\n data-slot=\"menubar-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-none select-none data-[inset]:pl-8\",\n className,\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto h-4 w-4\" />\n </MenubarPrimitive.SubTrigger>\n );\n}\n\nfunction MenubarSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof MenubarPrimitive.SubContent>) {\n return (\n <MenubarPrimitive.SubContent\n data-slot=\"menubar-sub-content\"\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 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 z-50 min-w-[8rem] origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport {\n Menubar,\n MenubarCheckboxItem,\n MenubarContent,\n MenubarGroup,\n MenubarItem,\n MenubarLabel,\n MenubarMenu,\n MenubarPortal,\n MenubarRadioGroup,\n MenubarRadioItem,\n MenubarSeparator,\n MenubarShortcut,\n MenubarSub,\n MenubarSubContent,\n MenubarSubTrigger,\n MenubarTrigger,\n};\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- "use client";Object.defineProperty(exports,`__esModule`,{value:!0});const e=require(`./chunk-CUT6urMc.cjs`),t=require(`./utils-BsjVK5EW.cjs`),n=require(`./button-CXoxOggw.cjs`);require(`./dialog-BRV1Ro1D.cjs`);const r=require(`./command-Bh1toPH-.cjs`),i=e.__toESM(require(`react`)),a=e.__toESM(require(`react/jsx-runtime`)),o=e.__toESM(require(`lucide-react`)),s=e.__toESM(require(`cmdk`));function c(e,t){let[n,r]=i.default.useState(e);return i.default.useEffect(()=>{let n=setTimeout(()=>r(e),t||500);return()=>{clearTimeout(n)}},[e,t]),n}function l(e,t){if(e.length===0)return{};if(!t)return{"":e};let n={};return e.forEach(e=>{let r=e[t]||``;n[r]||(n[r]=[]),n[r].push(e)}),n}function u(e,t){let n=JSON.parse(JSON.stringify(e));for(let[e,r]of Object.entries(n))n[e]=r.filter(e=>!t.find(t=>t.value===e.value));return n}function d(e,t){for(let[,n]of Object.entries(e))if(n.some(e=>t.find(t=>t.value===e.value)))return!0;return!1}const f=i.default.forwardRef(({className:e,...n},r)=>{let i=(0,s.useCommandState)(e=>e.filtered.count===0);return i?(0,a.jsx)(`div`,{ref:r,className:t.cn(`px-2 py-4 text-center text-sm`,e),"cmdk-empty":``,role:`presentation`,...n}):null});f.displayName=`CommandEmpty`;const p=i.default.forwardRef(({value:e,onChange:p,placeholder:m,defaultOptions:h=[],options:g,delay:_,onSearch:v,onSearchSync:y,loadingIndicator:b,emptyIndicator:x,maxSelected:S=2**53-1,onMaxSelected:C,hidePlaceholderWhenSelected:w,disabled:T,groupBy:E,className:D,badgeClassName:O,selectFirstItem:k=!0,creatable:A=!1,triggerSearchOnFocus:j=!1,commandProps:M,inputProps:N,hideClearAllButton:P=!1,onAddNewItem:F},I)=>{let L=i.default.useRef(null),R=i.default.useRef(null),[z,B]=i.default.useState(!1),[V,H]=i.default.useState(!1),[U,W]=i.default.useState(!1),[G,K]=i.default.useState(e||[]),[q,J]=i.default.useState(l(h,E)),[Y,X]=i.default.useState(``),Z=c(Y,_||500);i.default.useImperativeHandle(I,()=>({selectedValue:[...G],input:L.current,focus:()=>L?.current?.focus(),reset:()=>K([])}),[G]);let Q=i.default.useCallback(e=>{R.current&&!R.current.contains(e.target)&&L.current&&!L.current.contains(e.target)&&(B(!1),L.current.blur())},[]),$=i.default.useCallback(e=>{let t=G.filter(t=>t.value!==e.value);K(t),p?.(t)},[p,G]),ee=i.default.useCallback(e=>{let t=L.current;if(t){if((e.key===`Delete`||e.key===`Backspace`)&&t.value===``&&G.length>0){let e=G[G.length-1];e.fixed||$(G[G.length-1])}e.key===`Escape`&&t.blur()}},[$,G]);i.default.useEffect(()=>(z?(document.addEventListener(`mousedown`,Q),document.addEventListener(`touchend`,Q)):(document.removeEventListener(`mousedown`,Q),document.removeEventListener(`touchend`,Q)),()=>{document.removeEventListener(`mousedown`,Q),document.removeEventListener(`touchend`,Q)}),[z]),i.default.useEffect(()=>{e&&K(e)},[e]),i.default.useEffect(()=>{if(!g||v)return;let e=l(g||[],E);JSON.stringify(e)!==JSON.stringify(q)&&J(e)},[h,g,E,v,q]),i.default.useEffect(()=>{let e=()=>{let e=y?.(Z);J(l(e||[],E))},t=async()=>{!y||!z||(j&&e(),Z&&e())};t()},[Z,E,z,j]),i.default.useEffect(()=>{let e=async()=>{W(!0);let e=await v?.(Z);J(l(e||[],E)),W(!1)},t=async()=>{!v||!z||(j&&await e(),Z&&await e())};t()},[Z,E,z,j]);let te=()=>{if(!A||d(q,[{value:Y,label:Y}])||G.find(e=>e.value===Y))return;let e=(0,a.jsx)(r.CommandItem,{value:Y,className:`cursor-pointer`,onMouseDown:e=>{e.preventDefault(),e.stopPropagation()},onSelect:e=>{if(G.length>=S){C?.(G.length);return}X(``);let t=[...G,{value:e,label:e}];K(t),p?.(t)},children:`Create "${Y}"`});if(!v&&Y.length>0||v&&Z.length>0&&!U)return e},ne=i.default.useCallback(()=>{if(x)return v&&!A&&Object.keys(q).length===0?(0,a.jsx)(r.CommandItem,{value:`-`,disabled:!0,children:x}):(0,a.jsx)(f,{children:x})},[A,x,v,q]),re=i.default.useMemo(()=>u(q,G),[q,G]),ie=i.default.useCallback(()=>{if(M?.filter)return M.filter;if(A)return(e,t)=>e.toLowerCase().includes(t.toLowerCase())?1:-1},[A,M?.filter]);return(0,a.jsxs)(r.Command,{ref:R,...M,onKeyDown:e=>{ee(e),M?.onKeyDown?.(e)},className:t.cn(`h-auto overflow-visible bg-transparent`,M?.className),shouldFilter:M?.shouldFilter===void 0?!v:M.shouldFilter,filter:ie(),children:[(0,a.jsx)(`div`,{className:t.cn(`border-input focus-within:border-primary focus-within:ring-ring relative rounded-md border text-sm transition-shadow focus-within:ring-4 focus-within:outline-hidden`,`has-disabled:bg-muted`,`has-disabled:text-muted-foreground`,{"p-1":G.length!==0,"cursor-text":!T&&G.length!==0},!P&&`pe-9`,D),onClick:()=>{T||L?.current?.focus()},children:(0,a.jsxs)(`div`,{className:`flex flex-wrap gap-1`,children:[G.map(e=>(0,a.jsxs)(`div`,{className:t.cn(`animate-fadeIn bg-background text-secondary-foreground hover:bg-background relative inline-flex h-7 cursor-default items-center rounded-md border border-solid ps-2 pe-7 pl-2 text-xs font-medium transition-all disabled:cursor-not-allowed disabled:opacity-50 data-fixed:pe-2`,O),"data-fixed":e.fixed,"data-disabled":T||void 0,children:[e.label,(0,a.jsx)(`button`,{type:`button`,disabled:T||e.fixed,className:t.cn(`text-muted-foreground/80 absolute -inset-y-px -end-px flex size-7 items-center justify-center rounded-e-lg border border-transparent p-0 outline-0 transition-colors`,`hover:text-foreground`,`focus-visible:outline`,`focus-visible:outline-2`,`focus-visible:outline-ring/70`,`disabled:hover:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50`),onKeyDown:t=>{t.key===`Enter`&&$(e)},onMouseDown:e=>{e.preventDefault(),e.stopPropagation()},onClick:()=>$(e),"aria-label":`Remove`,children:(0,a.jsx)(o.X,{size:14,strokeWidth:2,"aria-hidden":`true`})})]},e.value)),(0,a.jsx)(s.Command.Input,{...N,ref:L,value:Y,disabled:T,onValueChange:e=>{X(e),N?.onValueChange?.(e)},onBlur:e=>{V||B(!1),N?.onBlur?.(e)},onFocus:e=>{B(!0),j&&v?.(Z),N?.onFocus?.(e)},placeholder:w&&G.length!==0?``:m,className:t.cn(`placeholder:text-muted-foreground flex-1 bg-transparent outline-hidden`,`disabled:placeholder:text-transparent`,{"w-full":w,"px-3 py-2":G.length===0,"ml-1":G.length!==0},N?.className)}),(0,a.jsx)(`button`,{type:`button`,onClick:()=>{K(G.filter(e=>e.fixed)),p?.(G.filter(e=>e.fixed))},className:t.cn(`text-muted-foreground/80`,`absolute end-0 top-0 flex size-9 items-center justify-center rounded-lg border border-transparent transition-colors`,`focus-visible:outline-2`,`hover:text-foreground`,`focus-visible:outline-ring/70`,(P||T||G.length<1||G.filter(({fixed:e})=>e).length===G.length)&&`hidden`),"aria-label":`Clear all`,children:(0,a.jsx)(o.X,{size:16,strokeWidth:2,"aria-hidden":`true`})})]})}),(0,a.jsx)(`div`,{className:`relative`,children:(0,a.jsx)(`div`,{className:t.cn(`border-input absolute top-2 z-10 w-full overflow-hidden rounded-lg border shadow-sm`,`data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95`,!z&&`hidden`),"data-state":z?`open`:`closed`,children:z&&(0,a.jsxs)(r.CommandList,{className:`bg-popover text-popover-foreground shadow-lg outline-hidden`,onMouseLeave:()=>{H(!1)},onMouseEnter:()=>{H(!0)},onMouseUp:()=>{L?.current?.focus()},children:[F&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(r.CommandSeparator,{}),(0,a.jsx)(r.CommandGroup,{children:(0,a.jsxs)(n.Button,{type:`button`,variant:`ghost`,className:`w-full font-normal [&_div]:justify-start`,onClick:F,children:[(0,a.jsx)(o.PlusIcon,{size:14,className:`-ms-2 opacity-60`,"aria-hidden":`true`}),`Thêm mới`]})})]}),U?b:(0,a.jsxs)(i.default.Fragment,{children:[ne(),te(),!k&&(0,a.jsx)(r.CommandItem,{value:`-`,className:`hidden`}),Object.entries(re).map(([e,n])=>(0,a.jsx)(r.CommandGroup,{heading:e,className:`h-full overflow-auto`,children:n.map(e=>(0,a.jsx)(r.CommandItem,{value:e.value,disabled:e.disable,onMouseDown:e=>{e.preventDefault(),e.stopPropagation()},onSelect:()=>{if(G.length>=S){C?.(G.length);return}X(``);let t=[...G,e];K(t),p?.(t)},className:t.cn(`cursor-pointer`,e.disable&&`cursor-not-allowed opacity-50`),children:e.label},e.value))},e))]})]})})})]})});p.displayName=`MultipleSelector`,exports.default=p,exports.useDebounce=c;
2
- //# sourceMappingURL=multi-select.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"multi-select.cjs","names":["React","groupOption: GroupOption","cn","CommandItem","value","Command","X","CommandPrimitive","CommandList","CommandSeparator","CommandGroup","Button","PlusIcon"],"sources":["../packages/components/ui/multi-select.tsx"],"sourcesContent":["\"use client\";\nimport React from \"react\";\nimport { Command as CommandPrimitive, useCommandState } from \"cmdk\";\nimport { PlusIcon, X } from \"lucide-react\";\n\nimport {\n Command,\n CommandGroup,\n CommandItem,\n CommandList,\n CommandSeparator,\n} from \"@/components/ui/command\";\nimport { cn } from \"@/lib/utils\";\n\nimport { Button } from \"./button\";\n\nexport interface Option {\n value: string;\n label: string;\n disable?: boolean;\n /** fixed option that can&lsquo;t be removed. */\n fixed?: boolean;\n /** Group the options by providing key. */\n [key: string]: string | boolean | undefined;\n}\ninterface GroupOption {\n [key: string]: Option[];\n}\n\ninterface MultipleSelectorProps {\n value?: Option[];\n defaultOptions?: Option[];\n /** manually controlled options */\n options?: Option[];\n placeholder?: string;\n /** Loading component. */\n loadingIndicator?: React.ReactNode;\n /** Empty component. */\n emptyIndicator?: React.ReactNode;\n /** Debounce time for async search. Only work with `onSearch`. */\n delay?: number;\n /**\n * Only work with `onSearch` prop. Trigger search when `onFocus`.\n * For example, when user click on the input, it will trigger the search to get initial options.\n **/\n triggerSearchOnFocus?: boolean;\n /** async search */\n onSearch?: (value: string) => Promise<Option[]>;\n /**\n * sync search. This search will not showing loadingIndicator.\n * The rest props are the same as async search.\n * i.e.: creatable, groupBy, delay.\n **/\n onSearchSync?: (value: string) => Option[];\n onChange?: (options: Option[]) => void;\n /** Limit the maximum number of selected options. */\n maxSelected?: number;\n /** When the number of selected options exceeds the limit, the onMaxSelected will be called. */\n onMaxSelected?: (maxLimit: number) => void;\n /** Hide the placeholder when there are options selected. */\n hidePlaceholderWhenSelected?: boolean;\n disabled?: boolean;\n /** Group the options base on provided key. */\n groupBy?: string;\n className?: string;\n badgeClassName?: string;\n /**\n * First item selected is a default behavior by cmdk. That is why the default is true.\n * This is a workaround solution by add a dummy item.\n *\n * @reference: https://github.com/pacocoursey/cmdk/issues/171\n */\n selectFirstItem?: boolean;\n /** Allow user to create option when there is no option matched. */\n creatable?: boolean;\n /** Props of `Command` */\n commandProps?: React.ComponentPropsWithoutRef<typeof Command>;\n /** Props of `CommandInput` */\n inputProps?: Omit<\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Input>,\n \"value\" | \"placeholder\" | \"disabled\"\n >;\n /** hide the clear all button. */\n hideClearAllButton?: boolean;\n\n /** Add new item event for select with search */\n onAddNewItem?: () => void;\n}\n\nexport interface MultipleSelectorRef {\n selectedValue: Option[];\n input: HTMLInputElement;\n focus: () => void;\n reset: () => void;\n}\n\n// eslint-disable-next-line react-refresh/only-export-components\nexport function useDebounce<T>(value: T, delay?: number): T {\n const [debouncedValue, setDebouncedValue] = React.useState<T>(value);\n\n React.useEffect(() => {\n const timer = setTimeout(() => setDebouncedValue(value), delay || 500);\n\n return () => {\n clearTimeout(timer);\n };\n }, [value, delay]);\n\n return debouncedValue;\n}\n\nfunction transToGroupOption(options: Option[], groupBy?: string) {\n if (options.length === 0) {\n return {};\n }\n if (!groupBy) {\n return {\n \"\": options,\n };\n }\n\n const groupOption: GroupOption = {};\n options.forEach((option) => {\n const key = (option[groupBy] as string) || \"\";\n if (!groupOption[key]) {\n groupOption[key] = [];\n }\n groupOption[key].push(option);\n });\n return groupOption;\n}\n\nfunction removePickedOption(groupOption: GroupOption, picked: Option[]) {\n const cloneOption = JSON.parse(JSON.stringify(groupOption)) as GroupOption;\n\n for (const [key, value] of Object.entries(cloneOption)) {\n cloneOption[key] = value.filter(\n (val) => !picked.find((p) => p.value === val.value),\n );\n }\n return cloneOption;\n}\n\nfunction isOptionsExist(groupOption: GroupOption, targetOption: Option[]) {\n for (const [, value] of Object.entries(groupOption)) {\n if (\n value.some((option) => targetOption.find((p) => p.value === option.value))\n ) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * The `CommandEmpty` of shadcn/ui will cause the cmdk empty not rendering correctly.\n * So we create one and copy the `Empty` implementation from `cmdk`.\n *\n * @reference: https://github.com/hsuanyi-chou/shadcn-ui-expansions/issues/34#issuecomment-1949561607\n **/\nconst CommandEmpty = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<typeof CommandPrimitive.Empty>\n>(({ className, ...props }, forwardedRef) => {\n const render = useCommandState((state) => state.filtered.count === 0);\n\n if (!render) return null;\n\n return (\n <div\n ref={forwardedRef}\n className={cn(\"px-2 py-4 text-center text-sm\", className)}\n cmdk-empty=\"\"\n role=\"presentation\"\n {...props}\n />\n );\n});\n\nCommandEmpty.displayName = \"CommandEmpty\";\n\nconst MultipleSelector = React.forwardRef<\n MultipleSelectorRef,\n MultipleSelectorProps\n>(\n (\n {\n value,\n onChange,\n placeholder,\n defaultOptions: arrayDefaultOptions = [],\n options: arrayOptions,\n delay,\n onSearch,\n onSearchSync,\n loadingIndicator: LoadingIndicator,\n emptyIndicator,\n maxSelected = Number.MAX_SAFE_INTEGER,\n onMaxSelected,\n hidePlaceholderWhenSelected,\n disabled,\n groupBy,\n className,\n badgeClassName,\n selectFirstItem = true,\n creatable = false,\n triggerSearchOnFocus = false,\n commandProps,\n inputProps,\n hideClearAllButton = false,\n onAddNewItem,\n }: MultipleSelectorProps,\n ref: React.Ref<MultipleSelectorRef>,\n ) => {\n const inputRef = React.useRef<HTMLInputElement>(null);\n const dropdownRef = React.useRef<HTMLDivElement>(null); // Added this\n\n const [open, setOpen] = React.useState(false);\n const [onScrollbar, setOnScrollbar] = React.useState(false);\n const [isLoading, setIsLoading] = React.useState(false);\n\n const [selected, setSelected] = React.useState<Option[]>(value || []);\n const [options, setOptions] = React.useState<GroupOption>(\n transToGroupOption(arrayDefaultOptions, groupBy),\n );\n const [inputValue, setInputValue] = React.useState(\"\");\n\n const debouncedSearchTerm = useDebounce(inputValue, delay || 500);\n\n React.useImperativeHandle(\n ref,\n () => ({\n selectedValue: [...selected],\n input: inputRef.current as HTMLInputElement,\n focus: () => inputRef?.current?.focus(),\n reset: () => setSelected([]),\n }),\n [selected],\n );\n\n const handleClickOutside = React.useCallback(\n (event: MouseEvent | TouchEvent) => {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node) &&\n inputRef.current &&\n !inputRef.current.contains(event.target as Node)\n ) {\n setOpen(false);\n inputRef.current.blur();\n }\n },\n [],\n );\n\n const handleUnselect = React.useCallback(\n (option: Option) => {\n const newOptions = selected.filter((s) => s.value !== option.value);\n setSelected(newOptions);\n onChange?.(newOptions);\n },\n [onChange, selected],\n );\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLDivElement>) => {\n const input = inputRef.current;\n if (!input) return;\n\n if (e.key === \"Delete\" || e.key === \"Backspace\") {\n if (input.value === \"\" && selected.length > 0) {\n const lastSelectOption = selected[selected.length - 1];\n // If last item is fixed, we should not remove it.\n if (!lastSelectOption.fixed) {\n handleUnselect(selected[selected.length - 1]);\n }\n }\n }\n\n // This is not a default behavior of the <input /> field\n if (e.key === \"Escape\") {\n input.blur();\n }\n },\n [handleUnselect, selected],\n );\n\n React.useEffect(() => {\n if (open) {\n document.addEventListener(\"mousedown\", handleClickOutside);\n document.addEventListener(\"touchend\", handleClickOutside);\n } else {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n document.removeEventListener(\"touchend\", handleClickOutside);\n }\n\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n document.removeEventListener(\"touchend\", handleClickOutside);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open]);\n\n React.useEffect(() => {\n if (value) {\n setSelected(value);\n }\n }, [value]);\n\n React.useEffect(() => {\n /** If `onSearch` is provided, do not trigger options updated. */\n if (!arrayOptions || onSearch) {\n return;\n }\n const newOption = transToGroupOption(arrayOptions || [], groupBy);\n if (JSON.stringify(newOption) !== JSON.stringify(options)) {\n setOptions(newOption);\n }\n }, [arrayDefaultOptions, arrayOptions, groupBy, onSearch, options]);\n\n React.useEffect(() => {\n /** sync search */\n\n const doSearchSync = () => {\n const res = onSearchSync?.(debouncedSearchTerm);\n setOptions(transToGroupOption(res || [], groupBy));\n };\n\n const exec = async () => {\n if (!onSearchSync || !open) return;\n\n if (triggerSearchOnFocus) {\n doSearchSync();\n }\n\n if (debouncedSearchTerm) {\n doSearchSync();\n }\n };\n\n void exec();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [debouncedSearchTerm, groupBy, open, triggerSearchOnFocus]);\n\n React.useEffect(() => {\n /** async search */\n\n const doSearch = async () => {\n setIsLoading(true);\n const res = await onSearch?.(debouncedSearchTerm);\n setOptions(transToGroupOption(res || [], groupBy));\n setIsLoading(false);\n };\n\n const exec = async () => {\n if (!onSearch || !open) return;\n\n if (triggerSearchOnFocus) {\n await doSearch();\n }\n\n if (debouncedSearchTerm) {\n await doSearch();\n }\n };\n\n void exec();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [debouncedSearchTerm, groupBy, open, triggerSearchOnFocus]);\n\n const CreatableItem = () => {\n if (!creatable) return undefined;\n if (\n isOptionsExist(options, [{ value: inputValue, label: inputValue }]) ||\n selected.find((s) => s.value === inputValue)\n ) {\n return undefined;\n }\n\n const Item = (\n <CommandItem\n value={inputValue}\n className=\"cursor-pointer\"\n onMouseDown={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n onSelect={(value: string) => {\n if (selected.length >= maxSelected) {\n onMaxSelected?.(selected.length);\n return;\n }\n setInputValue(\"\");\n const newOptions = [...selected, { value, label: value }];\n setSelected(newOptions);\n onChange?.(newOptions);\n }}\n >\n {`Create \"${inputValue}\"`}\n </CommandItem>\n );\n\n // For normal creatable\n if (!onSearch && inputValue.length > 0) {\n return Item;\n }\n\n // For async search creatable. avoid showing creatable item before loading at first.\n if (onSearch && debouncedSearchTerm.length > 0 && !isLoading) {\n return Item;\n }\n\n return undefined;\n };\n\n const EmptyItem = React.useCallback(() => {\n if (!emptyIndicator) return undefined;\n\n // For async search that showing emptyIndicator\n if (onSearch && !creatable && Object.keys(options).length === 0) {\n return (\n <CommandItem value=\"-\" disabled>\n {emptyIndicator}\n </CommandItem>\n );\n }\n\n return <CommandEmpty>{emptyIndicator}</CommandEmpty>;\n }, [creatable, emptyIndicator, onSearch, options]);\n\n const selectables = React.useMemo<GroupOption>(\n () => removePickedOption(options, selected),\n [options, selected],\n );\n\n /** Avoid Creatable Selector freezing or lagging when paste a long string. */\n const commandFilter = React.useCallback(() => {\n if (commandProps?.filter) {\n return commandProps.filter;\n }\n\n if (creatable) {\n return (value: string, search: string) => {\n return value.toLowerCase().includes(search.toLowerCase()) ? 1 : -1;\n };\n }\n // Using default filter in `cmdk`. We don&lsquo;t have to provide it.\n return undefined;\n }, [creatable, commandProps?.filter]);\n\n return (\n <Command\n ref={dropdownRef}\n {...commandProps}\n onKeyDown={(e) => {\n handleKeyDown(e);\n commandProps?.onKeyDown?.(e);\n }}\n className={cn(\n \"h-auto overflow-visible bg-transparent\",\n commandProps?.className,\n )}\n shouldFilter={\n commandProps?.shouldFilter !== undefined\n ? commandProps.shouldFilter\n : !onSearch\n } // When onSearch is provided, we don&lsquo;t want to filter the options. You can still override it.\n filter={commandFilter()}\n >\n <div\n className={cn(\n \"border-input focus-within:border-primary focus-within:ring-ring relative rounded-md border text-sm transition-shadow focus-within:ring-4 focus-within:outline-hidden\",\n \"has-disabled:bg-muted\",\n \"has-disabled:text-muted-foreground\",\n {\n \"p-1\": selected.length !== 0,\n \"cursor-text\": !disabled && selected.length !== 0,\n },\n !hideClearAllButton && \"pe-9\",\n className,\n )}\n onClick={() => {\n if (disabled) return;\n inputRef?.current?.focus();\n }}\n >\n <div className=\"flex flex-wrap gap-1\">\n {selected.map((option) => {\n return (\n <div\n key={option.value}\n className={cn(\n \"animate-fadeIn bg-background text-secondary-foreground hover:bg-background relative inline-flex h-7 cursor-default items-center rounded-md border border-solid ps-2 pe-7 pl-2 text-xs font-medium transition-all disabled:cursor-not-allowed disabled:opacity-50 data-fixed:pe-2\",\n badgeClassName,\n )}\n data-fixed={option.fixed}\n data-disabled={disabled || undefined}\n >\n {option.label}\n <button\n type=\"button\"\n disabled={disabled || option.fixed}\n className={cn(\n \"text-muted-foreground/80 absolute -inset-y-px -end-px flex size-7 items-center justify-center rounded-e-lg border border-transparent p-0 outline-0 transition-colors\",\n \"hover:text-foreground\",\n \"focus-visible:outline\",\n \"focus-visible:outline-2\",\n \"focus-visible:outline-ring/70\",\n \"disabled:hover:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50\",\n )}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n handleUnselect(option);\n }\n }}\n onMouseDown={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n onClick={() => handleUnselect(option)}\n aria-label=\"Remove\"\n >\n <X size={14} strokeWidth={2} aria-hidden=\"true\" />\n </button>\n </div>\n );\n })}\n {/* Avoid having the \"Search\" Icon */}\n <CommandPrimitive.Input\n {...inputProps}\n ref={inputRef}\n value={inputValue}\n disabled={disabled}\n onValueChange={(value) => {\n setInputValue(value);\n inputProps?.onValueChange?.(value);\n }}\n onBlur={(event) => {\n if (!onScrollbar) {\n setOpen(false);\n }\n inputProps?.onBlur?.(event);\n }}\n onFocus={(event) => {\n setOpen(true);\n if (triggerSearchOnFocus) {\n onSearch?.(debouncedSearchTerm);\n }\n inputProps?.onFocus?.(event);\n }}\n placeholder={\n hidePlaceholderWhenSelected && selected.length !== 0\n ? \"\"\n : placeholder\n }\n className={cn(\n \"placeholder:text-muted-foreground flex-1 bg-transparent outline-hidden\",\n \"disabled:placeholder:text-transparent\",\n {\n \"w-full\": hidePlaceholderWhenSelected,\n \"px-3 py-2\": selected.length === 0,\n \"ml-1\": selected.length !== 0,\n },\n inputProps?.className,\n )}\n />\n <button\n type=\"button\"\n onClick={() => {\n setSelected(selected.filter((s) => s.fixed));\n onChange?.(selected.filter((s) => s.fixed));\n }}\n className={cn(\n \"text-muted-foreground/80\",\n \"absolute end-0 top-0 flex size-9 items-center justify-center rounded-lg border border-transparent transition-colors\",\n \"focus-visible:outline-2\",\n \"hover:text-foreground\",\n \"focus-visible:outline-ring/70\",\n (hideClearAllButton ||\n disabled ||\n selected.length < 1 ||\n selected.filter(({ fixed }) => fixed).length ===\n selected.length) &&\n \"hidden\",\n )}\n aria-label=\"Clear all\"\n >\n <X size={16} strokeWidth={2} aria-hidden=\"true\" />\n </button>\n </div>\n </div>\n <div className=\"relative\">\n <div\n className={cn(\n \"border-input absolute top-2 z-10 w-full overflow-hidden rounded-lg border shadow-sm\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95\",\n !open && \"hidden\",\n )}\n data-state={open ? \"open\" : \"closed\"}\n >\n {open && (\n <CommandList\n className=\"bg-popover text-popover-foreground shadow-lg outline-hidden\"\n onMouseLeave={() => {\n setOnScrollbar(false);\n }}\n onMouseEnter={() => {\n setOnScrollbar(true);\n }}\n onMouseUp={() => {\n inputRef?.current?.focus();\n }}\n >\n {onAddNewItem && (\n <>\n <CommandSeparator />\n <CommandGroup>\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"w-full font-normal [&_div]:justify-start\"\n onClick={onAddNewItem}\n >\n <PlusIcon\n size={14}\n className=\"-ms-2 opacity-60\"\n aria-hidden=\"true\"\n />\n Thêm mới\n </Button>\n </CommandGroup>\n </>\n )}\n {isLoading ? (\n LoadingIndicator\n ) : (\n <React.Fragment>\n {EmptyItem()}\n {CreatableItem()}\n {!selectFirstItem && (\n <CommandItem value=\"-\" className=\"hidden\" />\n )}\n {Object.entries(selectables).map(([key, dropdowns]) => (\n <CommandGroup\n key={key}\n heading={key}\n className=\"h-full overflow-auto\"\n >\n {dropdowns.map((option) => {\n return (\n <CommandItem\n key={option.value}\n value={option.value}\n disabled={option.disable}\n onMouseDown={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n onSelect={() => {\n if (selected.length >= maxSelected) {\n onMaxSelected?.(selected.length);\n return;\n }\n setInputValue(\"\");\n const newOptions = [...selected, option];\n setSelected(newOptions);\n onChange?.(newOptions);\n }}\n className={cn(\n \"cursor-pointer\",\n option.disable &&\n \"cursor-not-allowed opacity-50\",\n )}\n >\n {option.label}\n </CommandItem>\n );\n })}\n </CommandGroup>\n ))}\n </React.Fragment>\n )}\n </CommandList>\n )}\n </div>\n </div>\n </Command>\n );\n },\n);\n\nMultipleSelector.displayName = \"MultipleSelector\";\nexport default MultipleSelector;\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- "use client";import{cn as e}from"./utils-D9AH0PUV.js";import{Button as t}from"./button-C1iCV8GH.js";import"./dialog-CgosQe5q.js";import{Command as n,CommandGroup as r,CommandItem as i,CommandList as ee,CommandSeparator as te}from"./command-DEl_iWXo.js";import a from"react";import{Fragment as o,jsx as s,jsxs as c}from"react/jsx-runtime";import{PlusIcon as l,X as u}from"lucide-react";import{Command as ne,useCommandState as d}from"cmdk";function f(e,t){let[n,r]=a.useState(e);return a.useEffect(()=>{let n=setTimeout(()=>r(e),t||500);return()=>{clearTimeout(n)}},[e,t]),n}function p(e,t){if(e.length===0)return{};if(!t)return{"":e};let n={};return e.forEach(e=>{let r=e[t]||``;n[r]||(n[r]=[]),n[r].push(e)}),n}function re(e,t){let n=JSON.parse(JSON.stringify(e));for(let[e,r]of Object.entries(n))n[e]=r.filter(e=>!t.find(t=>t.value===e.value));return n}function m(e,t){for(let[,n]of Object.entries(e))if(n.some(e=>t.find(t=>t.value===e.value)))return!0;return!1}const h=a.forwardRef(({className:t,...n},r)=>{let i=d(e=>e.filtered.count===0);return i?s(`div`,{ref:r,className:e(`px-2 py-4 text-center text-sm`,t),"cmdk-empty":``,role:`presentation`,...n}):null});h.displayName=`CommandEmpty`;const g=a.forwardRef(({value:d,onChange:g,placeholder:_,defaultOptions:v=[],options:y,delay:b,onSearch:x,onSearchSync:S,loadingIndicator:ie,emptyIndicator:C,maxSelected:w=2**53-1,onMaxSelected:T,hidePlaceholderWhenSelected:E,disabled:D,groupBy:O,className:ae,badgeClassName:k,selectFirstItem:A=!0,creatable:j=!1,triggerSearchOnFocus:M=!1,commandProps:N,inputProps:P,hideClearAllButton:F=!1,onAddNewItem:I},L)=>{let R=a.useRef(null),z=a.useRef(null),[B,V]=a.useState(!1),[oe,H]=a.useState(!1),[U,W]=a.useState(!1),[G,K]=a.useState(d||[]),[q,J]=a.useState(p(v,O)),[Y,X]=a.useState(``),Z=f(Y,b||500);a.useImperativeHandle(L,()=>({selectedValue:[...G],input:R.current,focus:()=>R?.current?.focus(),reset:()=>K([])}),[G]);let Q=a.useCallback(e=>{z.current&&!z.current.contains(e.target)&&R.current&&!R.current.contains(e.target)&&(V(!1),R.current.blur())},[]),$=a.useCallback(e=>{let t=G.filter(t=>t.value!==e.value);K(t),g?.(t)},[g,G]),se=a.useCallback(e=>{let t=R.current;if(t){if((e.key===`Delete`||e.key===`Backspace`)&&t.value===``&&G.length>0){let e=G[G.length-1];e.fixed||$(G[G.length-1])}e.key===`Escape`&&t.blur()}},[$,G]);a.useEffect(()=>(B?(document.addEventListener(`mousedown`,Q),document.addEventListener(`touchend`,Q)):(document.removeEventListener(`mousedown`,Q),document.removeEventListener(`touchend`,Q)),()=>{document.removeEventListener(`mousedown`,Q),document.removeEventListener(`touchend`,Q)}),[B]),a.useEffect(()=>{d&&K(d)},[d]),a.useEffect(()=>{if(!y||x)return;let e=p(y||[],O);JSON.stringify(e)!==JSON.stringify(q)&&J(e)},[v,y,O,x,q]),a.useEffect(()=>{let e=()=>{let e=S?.(Z);J(p(e||[],O))},t=async()=>{!S||!B||(M&&e(),Z&&e())};t()},[Z,O,B,M]),a.useEffect(()=>{let e=async()=>{W(!0);let e=await x?.(Z);J(p(e||[],O)),W(!1)},t=async()=>{!x||!B||(M&&await e(),Z&&await e())};t()},[Z,O,B,M]);let ce=()=>{if(!j||m(q,[{value:Y,label:Y}])||G.find(e=>e.value===Y))return;let e=s(i,{value:Y,className:`cursor-pointer`,onMouseDown:e=>{e.preventDefault(),e.stopPropagation()},onSelect:e=>{if(G.length>=w){T?.(G.length);return}X(``);let t=[...G,{value:e,label:e}];K(t),g?.(t)},children:`Create "${Y}"`});if(!x&&Y.length>0||x&&Z.length>0&&!U)return e},le=a.useCallback(()=>{if(C)return x&&!j&&Object.keys(q).length===0?s(i,{value:`-`,disabled:!0,children:C}):s(h,{children:C})},[j,C,x,q]),ue=a.useMemo(()=>re(q,G),[q,G]),de=a.useCallback(()=>{if(N?.filter)return N.filter;if(j)return(e,t)=>e.toLowerCase().includes(t.toLowerCase())?1:-1},[j,N?.filter]);return c(n,{ref:z,...N,onKeyDown:e=>{se(e),N?.onKeyDown?.(e)},className:e(`h-auto overflow-visible bg-transparent`,N?.className),shouldFilter:N?.shouldFilter===void 0?!x:N.shouldFilter,filter:de(),children:[s(`div`,{className:e(`border-input focus-within:border-primary focus-within:ring-ring relative rounded-md border text-sm transition-shadow focus-within:ring-4 focus-within:outline-hidden`,`has-disabled:bg-muted`,`has-disabled:text-muted-foreground`,{"p-1":G.length!==0,"cursor-text":!D&&G.length!==0},!F&&`pe-9`,ae),onClick:()=>{D||R?.current?.focus()},children:c(`div`,{className:`flex flex-wrap gap-1`,children:[G.map(t=>c(`div`,{className:e(`animate-fadeIn bg-background text-secondary-foreground hover:bg-background relative inline-flex h-7 cursor-default items-center rounded-md border border-solid ps-2 pe-7 pl-2 text-xs font-medium transition-all disabled:cursor-not-allowed disabled:opacity-50 data-fixed:pe-2`,k),"data-fixed":t.fixed,"data-disabled":D||void 0,children:[t.label,s(`button`,{type:`button`,disabled:D||t.fixed,className:e(`text-muted-foreground/80 absolute -inset-y-px -end-px flex size-7 items-center justify-center rounded-e-lg border border-transparent p-0 outline-0 transition-colors`,`hover:text-foreground`,`focus-visible:outline`,`focus-visible:outline-2`,`focus-visible:outline-ring/70`,`disabled:hover:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50`),onKeyDown:e=>{e.key===`Enter`&&$(t)},onMouseDown:e=>{e.preventDefault(),e.stopPropagation()},onClick:()=>$(t),"aria-label":`Remove`,children:s(u,{size:14,strokeWidth:2,"aria-hidden":`true`})})]},t.value)),s(ne.Input,{...P,ref:R,value:Y,disabled:D,onValueChange:e=>{X(e),P?.onValueChange?.(e)},onBlur:e=>{oe||V(!1),P?.onBlur?.(e)},onFocus:e=>{V(!0),M&&x?.(Z),P?.onFocus?.(e)},placeholder:E&&G.length!==0?``:_,className:e(`placeholder:text-muted-foreground flex-1 bg-transparent outline-hidden`,`disabled:placeholder:text-transparent`,{"w-full":E,"px-3 py-2":G.length===0,"ml-1":G.length!==0},P?.className)}),s(`button`,{type:`button`,onClick:()=>{K(G.filter(e=>e.fixed)),g?.(G.filter(e=>e.fixed))},className:e(`text-muted-foreground/80`,`absolute end-0 top-0 flex size-9 items-center justify-center rounded-lg border border-transparent transition-colors`,`focus-visible:outline-2`,`hover:text-foreground`,`focus-visible:outline-ring/70`,(F||D||G.length<1||G.filter(({fixed:e})=>e).length===G.length)&&`hidden`),"aria-label":`Clear all`,children:s(u,{size:16,strokeWidth:2,"aria-hidden":`true`})})]})}),s(`div`,{className:`relative`,children:s(`div`,{className:e(`border-input absolute top-2 z-10 w-full overflow-hidden rounded-lg border shadow-sm`,`data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95`,!B&&`hidden`),"data-state":B?`open`:`closed`,children:B&&c(ee,{className:`bg-popover text-popover-foreground shadow-lg outline-hidden`,onMouseLeave:()=>{H(!1)},onMouseEnter:()=>{H(!0)},onMouseUp:()=>{R?.current?.focus()},children:[I&&c(o,{children:[s(te,{}),s(r,{children:c(t,{type:`button`,variant:`ghost`,className:`w-full font-normal [&_div]:justify-start`,onClick:I,children:[s(l,{size:14,className:`-ms-2 opacity-60`,"aria-hidden":`true`}),`Thêm mới`]})})]}),U?ie:c(a.Fragment,{children:[le(),ce(),!A&&s(i,{value:`-`,className:`hidden`}),Object.entries(ue).map(([t,n])=>s(r,{heading:t,className:`h-full overflow-auto`,children:n.map(t=>s(i,{value:t.value,disabled:t.disable,onMouseDown:e=>{e.preventDefault(),e.stopPropagation()},onSelect:()=>{if(G.length>=w){T?.(G.length);return}X(``);let e=[...G,t];K(e),g?.(e)},className:e(`cursor-pointer`,t.disable&&`cursor-not-allowed opacity-50`),children:t.label},t.value))},t))]})]})})})]})});g.displayName=`MultipleSelector`;export{g as default,f as useDebounce};
2
- //# sourceMappingURL=multi-select.js.map