@customafk/lunas-ui 0.0.80 → 0.0.82

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 (691) hide show
  1. package/dist/{add-new-DfniMrHa.js → add-new-BFJvt2an.js} +2 -2
  2. package/dist/add-new-BFJvt2an.js.map +1 -0
  3. package/dist/add-new-Bt5QaeJs.cjs +2 -0
  4. package/dist/add-new-Bt5QaeJs.cjs.map +1 -0
  5. package/dist/alert-dialog-B-m2RVMu.cjs +2 -0
  6. package/dist/alert-dialog-B-m2RVMu.cjs.map +1 -0
  7. package/dist/{alert-dialog-UwGNuTYk.js → alert-dialog-DcQKEgVC.js} +1 -1
  8. package/dist/alert-dialog-DcQKEgVC.js.map +1 -0
  9. package/dist/avatar-DmMCBvb6.cjs +2 -0
  10. package/dist/avatar-DmMCBvb6.cjs.map +1 -0
  11. package/dist/avatar-iX5Jhj8E.js.map +1 -1
  12. package/dist/badge-AM9m3CFI.cjs +2 -0
  13. package/dist/badge-AM9m3CFI.cjs.map +1 -0
  14. package/dist/badge-tjlLdDGl.js.map +1 -1
  15. package/dist/button-BaLuKPtr.cjs +2 -0
  16. package/dist/button-BaLuKPtr.cjs.map +1 -0
  17. package/dist/{button-DhQJ9Ey8.js → button-CYsnwc1-.js} +2 -2
  18. package/dist/button-CYsnwc1-.js.map +1 -0
  19. package/dist/{button-CGIJb6H5.d.cts → button-D6hzitQh.d.cts} +6 -6
  20. package/dist/{button-BdYhnlA1.d.ts → button-DKcU4dim.d.ts} +6 -6
  21. package/dist/button-variants-DdVxfrSx.cjs +2 -0
  22. package/dist/button-variants-DdVxfrSx.cjs.map +1 -0
  23. package/dist/button-variants-Y1GTBayz.js.map +1 -1
  24. package/dist/calendar-C4zLgISS.cjs +2 -0
  25. package/dist/calendar-C4zLgISS.cjs.map +1 -0
  26. package/dist/{calendar-C2yGJ9AV.js → calendar-Dmq8I1ey.js} +2 -2
  27. package/dist/calendar-Dmq8I1ey.js.map +1 -0
  28. package/dist/card-CkKO-0o0.cjs +2 -0
  29. package/dist/card-CkKO-0o0.cjs.map +1 -0
  30. package/dist/card-DOv2mZU8.js.map +1 -1
  31. package/dist/cards/grid-product-card.cjs +1 -1
  32. package/dist/cards/grid-product-card.cjs.map +1 -1
  33. package/dist/cards/grid-product-card.js +1 -1
  34. package/dist/cards/grid-product-card.js.map +1 -1
  35. package/dist/cards/product-card.cjs +1 -1
  36. package/dist/cards/product-card.cjs.map +1 -1
  37. package/dist/cards/product-card.js +1 -1
  38. package/dist/cards/product-card.js.map +1 -1
  39. package/dist/cards/simple-card.cjs +1 -1
  40. package/dist/cards/simple-card.cjs.map +1 -1
  41. package/dist/cards/simple-card.js.map +1 -1
  42. package/dist/{command-BWvqtwPS.d.cts → command-BCHEIInv.d.cts} +12 -12
  43. package/dist/command-C13pL2M3.cjs +2 -0
  44. package/dist/command-C13pL2M3.cjs.map +1 -0
  45. package/dist/{command-B23xCgK_.d.ts → command-KnD1dAzj.d.ts} +12 -12
  46. package/dist/{command-DhSE6UaR.js → command-UXLmHGja.js} +2 -2
  47. package/dist/command-UXLmHGja.js.map +1 -0
  48. package/dist/data-display/country.cjs +1 -1
  49. package/dist/data-display/country.cjs.map +1 -1
  50. package/dist/data-display/country.d.ts +1 -1
  51. package/dist/data-display/country.js.map +1 -1
  52. package/dist/data-display/data-list.cjs +1 -1
  53. package/dist/data-display/data-list.cjs.map +1 -1
  54. package/dist/data-display/data-list.js.map +1 -1
  55. package/dist/data-display/date-tooltip.cjs +1 -1
  56. package/dist/data-display/date-tooltip.cjs.map +1 -1
  57. package/dist/data-display/date-tooltip.js +1 -1
  58. package/dist/data-display/date-tooltip.js.map +1 -1
  59. package/dist/data-display/date.cjs +1 -1
  60. package/dist/data-display/date.js +1 -1
  61. package/dist/data-display/empty.cjs +1 -1
  62. package/dist/data-display/empty.cjs.map +1 -1
  63. package/dist/data-display/empty.d.cts +2 -2
  64. package/dist/data-display/empty.js.map +1 -1
  65. package/dist/data-display/name.cjs +1 -1
  66. package/dist/data-display/name.cjs.map +1 -1
  67. package/dist/data-display/name.js.map +1 -1
  68. package/dist/data-display/phone-number.cjs +1 -1
  69. package/dist/data-display/phone-number.cjs.map +1 -1
  70. package/dist/data-display/phone-number.js.map +1 -1
  71. package/dist/data-display/role-badge.cjs +1 -1
  72. package/dist/data-display/role-badge.cjs.map +1 -1
  73. package/dist/data-display/role-badge.d.ts +1 -1
  74. package/dist/data-display/role-badge.js.map +1 -1
  75. package/dist/data-display/statistic.cjs +1 -1
  76. package/dist/data-display/statistic.cjs.map +1 -1
  77. package/dist/data-display/statistic.d.ts +2 -2
  78. package/dist/data-display/statistic.js +1 -1
  79. package/dist/data-display/statistic.js.map +1 -1
  80. package/dist/data-display/user.cjs +1 -1
  81. package/dist/data-display/user.cjs.map +1 -1
  82. package/dist/data-display/user.js.map +1 -1
  83. package/dist/date-BEyT-xKi.cjs +2 -0
  84. package/dist/date-BEyT-xKi.cjs.map +1 -0
  85. package/dist/{date-BuPl--Fc.js → date-CgzMwDPN.js} +2 -2
  86. package/dist/date-CgzMwDPN.js.map +1 -0
  87. package/dist/{dialog-B2LS2JLb.js → dialog-BAlJ18xi.js} +1 -1
  88. package/dist/dialog-BAlJ18xi.js.map +1 -0
  89. package/dist/dialog-BBODhbxh.cjs +2 -0
  90. package/dist/dialog-BBODhbxh.cjs.map +1 -0
  91. package/dist/{dialog-Dn2Q-QRw.d.ts → dialog-MCM90IpD.d.cts} +12 -12
  92. package/dist/{dialog-BFtz_6mv.d.cts → dialog-lKVaxcfs.d.ts} +12 -12
  93. package/dist/dialogs/confirm-dialog.cjs +1 -1
  94. package/dist/dialogs/confirm-dialog.cjs.map +1 -1
  95. package/dist/dialogs/confirm-dialog.js +1 -1
  96. package/dist/dialogs/confirm-dialog.js.map +1 -1
  97. package/dist/dialogs/detail-dialog/component/sidebar.cjs +1 -1
  98. package/dist/dialogs/detail-dialog/component/sidebar.d.cts +30 -30
  99. package/dist/dialogs/detail-dialog/component/sidebar.d.ts +30 -30
  100. package/dist/dialogs/detail-dialog/component/sidebar.js +1 -1
  101. package/dist/dialogs/detail-dialog/index.cjs +1 -1
  102. package/dist/dialogs/detail-dialog/index.cjs.map +1 -1
  103. package/dist/dialogs/detail-dialog/index.js +1 -1
  104. package/dist/dialogs/detail-dialog/index.js.map +1 -1
  105. package/dist/dialogs/error-dialog.cjs +1 -1
  106. package/dist/dialogs/error-dialog.js +1 -1
  107. package/dist/dialogs/form-dialog.cjs +1 -1
  108. package/dist/dialogs/form-dialog.cjs.map +1 -1
  109. package/dist/dialogs/form-dialog.d.cts +2 -2
  110. package/dist/dialogs/form-dialog.d.ts +2 -2
  111. package/dist/dialogs/form-dialog.js +1 -1
  112. package/dist/dialogs/form-dialog.js.map +1 -1
  113. package/dist/dialogs/loading-dialog.cjs +1 -1
  114. package/dist/dialogs/loading-dialog.cjs.map +1 -1
  115. package/dist/dialogs/loading-dialog.js +1 -1
  116. package/dist/dialogs/loading-dialog.js.map +1 -1
  117. package/dist/{dist-CkzytVha.js → dist-BgkALM7U.js} +2 -2
  118. package/dist/{dist-CkzytVha.js.map → dist-BgkALM7U.js.map} +1 -1
  119. package/dist/dist-CAevLI5t.cjs +2 -0
  120. package/dist/{dist-D0uO1qIz.cjs.map → dist-CAevLI5t.cjs.map} +1 -1
  121. package/dist/drawer-70cz3SPB.cjs +2 -0
  122. package/dist/drawer-70cz3SPB.cjs.map +1 -0
  123. package/dist/{drawer-COD1n5aA.js → drawer-DRC3X2-U.js} +1 -1
  124. package/dist/drawer-DRC3X2-U.js.map +1 -0
  125. package/dist/dropdown-menu-Bb68Wd6J.cjs +2 -0
  126. package/dist/dropdown-menu-Bb68Wd6J.cjs.map +1 -0
  127. package/dist/{dropdown-menu-Brlye320.js → dropdown-menu-DtEPAmMV.js} +1 -1
  128. package/dist/dropdown-menu-DtEPAmMV.js.map +1 -0
  129. package/dist/{error-dialog-BF1VNZXk.js → error-dialog-BeYJOtSH.js} +2 -2
  130. package/dist/error-dialog-BeYJOtSH.js.map +1 -0
  131. package/dist/error-dialog-bra3vccX.cjs +2 -0
  132. package/dist/error-dialog-bra3vccX.cjs.map +1 -0
  133. package/dist/field-A43YZ5Wj.cjs +2 -0
  134. package/dist/field-A43YZ5Wj.cjs.map +1 -0
  135. package/dist/field-CGacT8J3.js +2 -0
  136. package/dist/field-CGacT8J3.js.map +1 -0
  137. package/dist/flex-B4klVEz9.cjs +2 -0
  138. package/dist/flex-B4klVEz9.cjs.map +1 -0
  139. package/dist/flex-D6XrXRQW.js.map +1 -1
  140. package/dist/form-B_tL9lO4.js +2 -0
  141. package/dist/form-B_tL9lO4.js.map +1 -0
  142. package/dist/form-DV9tQbiO.cjs +2 -0
  143. package/dist/form-DV9tQbiO.cjs.map +1 -0
  144. package/dist/form-wrapper-BKTvSrZY.js +2 -0
  145. package/dist/form-wrapper-BKTvSrZY.js.map +1 -0
  146. package/dist/form-wrapper-vue82rfg.cjs +2 -0
  147. package/dist/form-wrapper-vue82rfg.cjs.map +1 -0
  148. package/dist/forms/combobox-field.cjs +1 -1
  149. package/dist/forms/combobox-field.cjs.map +1 -1
  150. package/dist/forms/combobox-field.d.cts +2 -2
  151. package/dist/forms/combobox-field.d.ts +2 -2
  152. package/dist/forms/combobox-field.js +1 -1
  153. package/dist/forms/combobox-field.js.map +1 -1
  154. package/dist/forms/date-field.cjs +1 -1
  155. package/dist/forms/date-field.cjs.map +1 -1
  156. package/dist/forms/date-field.d.cts +2 -2
  157. package/dist/forms/date-field.d.ts +2 -2
  158. package/dist/forms/date-field.js +1 -1
  159. package/dist/forms/date-field.js.map +1 -1
  160. package/dist/forms/form-wrapper.cjs +1 -1
  161. package/dist/forms/form-wrapper.d.cts +6 -2
  162. package/dist/forms/form-wrapper.d.ts +6 -2
  163. package/dist/forms/form-wrapper.js +1 -1
  164. package/dist/forms/multi-select-field.cjs +1 -1
  165. package/dist/forms/multi-select-field.cjs.map +1 -1
  166. package/dist/forms/multi-select-field.d.cts +4 -2
  167. package/dist/forms/multi-select-field.d.ts +4 -2
  168. package/dist/forms/multi-select-field.js +1 -1
  169. package/dist/forms/multi-select-field.js.map +1 -1
  170. package/dist/forms/number-field.cjs +1 -1
  171. package/dist/forms/number-field.cjs.map +1 -1
  172. package/dist/forms/number-field.d.cts +2 -2
  173. package/dist/forms/number-field.d.ts +2 -2
  174. package/dist/forms/number-field.js +1 -1
  175. package/dist/forms/number-field.js.map +1 -1
  176. package/dist/forms/password-field.cjs +1 -1
  177. package/dist/forms/password-field.cjs.map +1 -1
  178. package/dist/forms/password-field.d.cts +2 -2
  179. package/dist/forms/password-field.d.ts +2 -2
  180. package/dist/forms/password-field.js +1 -1
  181. package/dist/forms/password-field.js.map +1 -1
  182. package/dist/forms/select-field.cjs +1 -1
  183. package/dist/forms/select-field.cjs.map +1 -1
  184. package/dist/forms/select-field.d.cts +2 -2
  185. package/dist/forms/select-field.d.ts +2 -2
  186. package/dist/forms/select-field.js +1 -1
  187. package/dist/forms/select-field.js.map +1 -1
  188. package/dist/forms/switch-field.cjs +1 -1
  189. package/dist/forms/switch-field.cjs.map +1 -1
  190. package/dist/forms/switch-field.d.cts +4 -2
  191. package/dist/forms/switch-field.d.ts +4 -2
  192. package/dist/forms/switch-field.js +1 -1
  193. package/dist/forms/switch-field.js.map +1 -1
  194. package/dist/forms/text-field.cjs +1 -1
  195. package/dist/forms/text-field.cjs.map +1 -1
  196. package/dist/forms/text-field.d.cts +2 -2
  197. package/dist/forms/text-field.d.ts +2 -2
  198. package/dist/forms/text-field.js +1 -1
  199. package/dist/forms/text-field.js.map +1 -1
  200. package/dist/forms/textarea-field.cjs +1 -1
  201. package/dist/forms/textarea-field.cjs.map +1 -1
  202. package/dist/forms/textarea-field.d.cts +2 -2
  203. package/dist/forms/textarea-field.d.ts +2 -2
  204. package/dist/forms/textarea-field.js +1 -1
  205. package/dist/forms/textarea-field.js.map +1 -1
  206. package/dist/image-C0mClPAY.cjs +2 -0
  207. package/dist/image-C0mClPAY.cjs.map +1 -0
  208. package/dist/image-CiQhTTyt.js.map +1 -1
  209. package/dist/{input-BtT8HfYE.js → input-BStypTnq.js} +1 -1
  210. package/dist/input-BStypTnq.js.map +1 -0
  211. package/dist/{input-CwuYXUPY.d.ts → input-BbxBfHG5.d.ts} +3 -3
  212. package/dist/input-D_tClptL.cjs +2 -0
  213. package/dist/input-D_tClptL.cjs.map +1 -0
  214. package/dist/{input-Kq2bOgsM.d.cts → input-EieQSty7.d.cts} +3 -3
  215. package/dist/label-Bfd7VFEe.d.cts +11 -0
  216. package/dist/label-CdrxlBJ8.js.map +1 -1
  217. package/dist/label-D6mAvVmw.cjs +2 -0
  218. package/dist/label-D6mAvVmw.cjs.map +1 -0
  219. package/dist/label-DlBHUp00.d.ts +11 -0
  220. package/dist/layouts/app-layout/index.cjs +1 -1
  221. package/dist/layouts/app-layout/index.cjs.map +1 -1
  222. package/dist/layouts/app-layout/index.d.cts +28 -28
  223. package/dist/layouts/app-layout/index.d.ts +28 -28
  224. package/dist/layouts/app-layout/index.js +1 -1
  225. package/dist/layouts/app-layout/index.js.map +1 -1
  226. package/dist/layouts/flex.cjs +1 -1
  227. package/dist/layouts/flex.d.cts +2 -2
  228. package/dist/layouts/grid.cjs +1 -1
  229. package/dist/layouts/grid.cjs.map +1 -1
  230. package/dist/layouts/grid.js.map +1 -1
  231. package/dist/layouts/service-layout/index.cjs +1 -1
  232. package/dist/layouts/service-layout/index.cjs.map +1 -1
  233. package/dist/layouts/service-layout/index.d.cts +15 -15
  234. package/dist/layouts/service-layout/index.d.ts +15 -15
  235. package/dist/layouts/service-layout/index.js +1 -1
  236. package/dist/layouts/service-layout/index.js.map +1 -1
  237. package/dist/multi-select-C66U77ON.js +2 -0
  238. package/dist/multi-select-C66U77ON.js.map +1 -0
  239. package/dist/multi-select-D38JwSYL.cjs +2 -0
  240. package/dist/multi-select-D38JwSYL.cjs.map +1 -0
  241. package/dist/paragraph-B9fp9JaI.js.map +1 -1
  242. package/dist/paragraph-Q7vk3BSp.cjs +2 -0
  243. package/dist/paragraph-Q7vk3BSp.cjs.map +1 -0
  244. package/dist/{popover-BJWOgxQ5.js → popover-BnzoeyDG.js} +1 -1
  245. package/dist/popover-BnzoeyDG.js.map +1 -0
  246. package/dist/popover-D6vyPDKA.cjs +2 -0
  247. package/dist/popover-D6vyPDKA.cjs.map +1 -0
  248. package/dist/progress-BUlcGaLz.cjs +2 -0
  249. package/dist/progress-BUlcGaLz.cjs.map +1 -0
  250. package/dist/{progress-DzBPViJg.js → progress-DwLEMPaO.js} +1 -1
  251. package/dist/progress-DwLEMPaO.js.map +1 -0
  252. package/dist/{refresh-BiOPtbhd.js → refresh-CMQ49ae4.js} +2 -2
  253. package/dist/refresh-CMQ49ae4.js.map +1 -0
  254. package/dist/refresh-CvvD6Ckf.cjs +2 -0
  255. package/dist/refresh-CvvD6Ckf.cjs.map +1 -0
  256. package/dist/scroll-area-C_MkdpKg.cjs +2 -0
  257. package/dist/scroll-area-C_MkdpKg.cjs.map +1 -0
  258. package/dist/{scroll-area-BJYI14s5.js → scroll-area-DFENklE1.js} +1 -1
  259. package/dist/scroll-area-DFENklE1.js.map +1 -0
  260. package/dist/{search-input--FQFzdW3.js → search-input-BI1RjMuQ.js} +2 -2
  261. package/dist/search-input-BI1RjMuQ.js.map +1 -0
  262. package/dist/search-input-ryU0Mvaa.cjs +2 -0
  263. package/dist/search-input-ryU0Mvaa.cjs.map +1 -0
  264. package/dist/{select-Di8fOKVF.js → select-B8sXsuUI.js} +1 -1
  265. package/dist/select-B8sXsuUI.js.map +1 -0
  266. package/dist/select-BD7dul2u.cjs +2 -0
  267. package/dist/select-BD7dul2u.cjs.map +1 -0
  268. package/dist/{separator-mZ8r56s2.d.cts → separator-BBWO-2XW.d.cts} +3 -3
  269. package/dist/{separator-C7HQ2ThL.js → separator-D17HxS2f.js} +1 -1
  270. package/dist/separator-D17HxS2f.js.map +1 -0
  271. package/dist/separator-DMMoR-d2.cjs +2 -0
  272. package/dist/separator-DMMoR-d2.cjs.map +1 -0
  273. package/dist/{separator-C4wU5Rr6.d.ts → separator-LYCmJYd5.d.ts} +3 -3
  274. package/dist/{sheet-E0gvN9Gp.js → sheet-BhyEuJtA.js} +1 -1
  275. package/dist/sheet-BhyEuJtA.js.map +1 -0
  276. package/dist/sheet-Bua5MlcG.cjs +2 -0
  277. package/dist/sheet-Bua5MlcG.cjs.map +1 -0
  278. package/dist/sidebar-BgMpq73J.cjs +2 -0
  279. package/dist/sidebar-BgMpq73J.cjs.map +1 -0
  280. package/dist/{sidebar-CBEPWmnf.js → sidebar-Bs42CUTZ.js} +2 -2
  281. package/dist/sidebar-Bs42CUTZ.js.map +1 -0
  282. package/dist/skeleton-BC2E_ohw.cjs +2 -0
  283. package/dist/skeleton-BC2E_ohw.cjs.map +1 -0
  284. package/dist/skeleton-ByN-MrQO.js.map +1 -1
  285. package/dist/{switch-C7foFKpS.js → switch-DwBg-iL4.js} +1 -1
  286. package/dist/switch-DwBg-iL4.js.map +1 -0
  287. package/dist/switch-o_YbWKw4.cjs +2 -0
  288. package/dist/switch-o_YbWKw4.cjs.map +1 -0
  289. package/dist/systems/google.cjs +1 -1
  290. package/dist/systems/google.cjs.map +1 -1
  291. package/dist/systems/google.js +1 -1
  292. package/dist/systems/google.js.map +1 -1
  293. package/dist/table/index.cjs +1 -1
  294. package/dist/table/index.cjs.map +1 -1
  295. package/dist/table/index.d.cts +2 -2
  296. package/dist/table/index.d.ts +2 -2
  297. package/dist/table/index.js +1 -1
  298. package/dist/table/index.js.map +1 -1
  299. package/dist/{table-CKNAm27W.js → table-Cd75vfQ4.js} +1 -1
  300. package/dist/table-Cd75vfQ4.js.map +1 -0
  301. package/dist/table-fp-VtGFA.cjs +2 -0
  302. package/dist/table-fp-VtGFA.cjs.map +1 -0
  303. package/dist/{tabs-D4uObFGW.js → tabs-BVCzl3vY.js} +1 -1
  304. package/dist/tabs-BVCzl3vY.js.map +1 -0
  305. package/dist/tabs-D7oadnxg.cjs +2 -0
  306. package/dist/tabs-D7oadnxg.cjs.map +1 -0
  307. package/dist/textarea-BHME8i5L.cjs +2 -0
  308. package/dist/textarea-BHME8i5L.cjs.map +1 -0
  309. package/dist/{textarea-n8OO0QsI.js → textarea-TGDtYde1.js} +1 -1
  310. package/dist/textarea-TGDtYde1.js.map +1 -0
  311. package/dist/title-Wrzpw9RM.cjs +2 -0
  312. package/dist/title-Wrzpw9RM.cjs.map +1 -0
  313. package/dist/{title-itXqz0us.js → title-Zqs6skyV.js} +1 -1
  314. package/dist/title-Zqs6skyV.js.map +1 -0
  315. package/dist/{toggle-DuNq0es1.js → toggle-AOoz4VtN.js} +1 -1
  316. package/dist/toggle-AOoz4VtN.js.map +1 -0
  317. package/dist/{toggle-DYeyKWVE.d.cts → toggle-Bhwgx-y_.d.cts} +5 -5
  318. package/dist/toggle-D252Z_vH.cjs +2 -0
  319. package/dist/toggle-D252Z_vH.cjs.map +1 -0
  320. package/dist/{toggle-DPTA8XO2.d.ts → toggle-DaTd0CKm.d.ts} +5 -5
  321. package/dist/{tooltip-DijjzZk1.d.cts → tooltip-B3mrjes6.d.cts} +6 -6
  322. package/dist/tooltip-BTrjCwd8.js.map +1 -1
  323. package/dist/{tooltip-Dt83PTkc.d.ts → tooltip-IMUjBDRr.d.ts} +6 -6
  324. package/dist/tooltip-uaF-pxx8.cjs +2 -0
  325. package/dist/tooltip-uaF-pxx8.cjs.map +1 -0
  326. package/dist/{types-BHVCAwAo.d.ts → types-BcE2RjTJ.d.ts} +1 -1
  327. package/dist/types-BiiGENwa.js.map +1 -1
  328. package/dist/types-D32qXHff.cjs.map +1 -1
  329. package/dist/typography/paragraph.cjs +1 -1
  330. package/dist/typography/paragraph.d.cts +2 -2
  331. package/dist/typography/paragraph.d.ts +2 -2
  332. package/dist/typography/title.cjs +1 -1
  333. package/dist/typography/title.d.cts +2 -2
  334. package/dist/typography/title.d.ts +2 -2
  335. package/dist/typography/title.js +1 -1
  336. package/dist/ui/alert-dialog.cjs +1 -1
  337. package/dist/ui/alert-dialog.d.cts +12 -12
  338. package/dist/ui/alert-dialog.d.ts +12 -12
  339. package/dist/ui/alert-dialog.js +1 -1
  340. package/dist/ui/alert.cjs +1 -1
  341. package/dist/ui/alert.cjs.map +1 -1
  342. package/dist/ui/alert.d.cts +6 -6
  343. package/dist/ui/alert.d.ts +6 -6
  344. package/dist/ui/alert.js.map +1 -1
  345. package/dist/ui/aspect-ratio.cjs +1 -1
  346. package/dist/ui/aspect-ratio.cjs.map +1 -1
  347. package/dist/ui/aspect-ratio.d.cts +2 -2
  348. package/dist/ui/aspect-ratio.d.ts +2 -2
  349. package/dist/ui/aspect-ratio.js.map +1 -1
  350. package/dist/ui/avatar.cjs +1 -1
  351. package/dist/ui/avatar.d.cts +4 -4
  352. package/dist/ui/avatar.d.ts +4 -4
  353. package/dist/ui/badge.cjs +1 -1
  354. package/dist/ui/badge.d.cts +2 -2
  355. package/dist/ui/badge.d.ts +4 -4
  356. package/dist/ui/breadcrumb.cjs +1 -1
  357. package/dist/ui/breadcrumb.cjs.map +1 -1
  358. package/dist/ui/breadcrumb.d.cts +8 -8
  359. package/dist/ui/breadcrumb.d.ts +8 -8
  360. package/dist/ui/breadcrumb.js +1 -1
  361. package/dist/ui/breadcrumb.js.map +1 -1
  362. package/dist/ui/button-group.cjs +2 -0
  363. package/dist/ui/button-group.cjs.map +1 -0
  364. package/dist/ui/button-group.d.cts +29 -0
  365. package/dist/ui/button-group.d.ts +29 -0
  366. package/dist/ui/button-group.js +2 -0
  367. package/dist/ui/button-group.js.map +1 -0
  368. package/dist/ui/button.cjs +1 -1
  369. package/dist/ui/button.d.cts +1 -1
  370. package/dist/ui/button.d.ts +1 -1
  371. package/dist/ui/button.js +1 -1
  372. package/dist/ui/buttons/add-new.cjs +1 -1
  373. package/dist/ui/buttons/add-new.js +1 -1
  374. package/dist/ui/buttons/edit.cjs +1 -1
  375. package/dist/ui/buttons/edit.cjs.map +1 -1
  376. package/dist/ui/buttons/edit.js +1 -1
  377. package/dist/ui/buttons/edit.js.map +1 -1
  378. package/dist/ui/buttons/refresh.cjs +1 -1
  379. package/dist/ui/buttons/refresh.js +1 -1
  380. package/dist/ui/buttons/trash.cjs +1 -1
  381. package/dist/ui/buttons/trash.cjs.map +1 -1
  382. package/dist/ui/buttons/trash.js +1 -1
  383. package/dist/ui/buttons/trash.js.map +1 -1
  384. package/dist/ui/buttons/upload-image.cjs +1 -1
  385. package/dist/ui/buttons/upload-image.cjs.map +1 -1
  386. package/dist/ui/buttons/upload-image.js +1 -1
  387. package/dist/ui/buttons/upload-image.js.map +1 -1
  388. package/dist/ui/calendar.cjs +1 -1
  389. package/dist/ui/calendar.d.cts +4 -4
  390. package/dist/ui/calendar.d.ts +4 -4
  391. package/dist/ui/calendar.js +1 -1
  392. package/dist/ui/card.cjs +1 -1
  393. package/dist/ui/card.d.cts +8 -8
  394. package/dist/ui/card.d.ts +8 -8
  395. package/dist/ui/carousel.cjs +1 -1
  396. package/dist/ui/carousel.cjs.map +1 -1
  397. package/dist/ui/carousel.d.cts +7 -7
  398. package/dist/ui/carousel.d.ts +7 -7
  399. package/dist/ui/carousel.js +1 -1
  400. package/dist/ui/carousel.js.map +1 -1
  401. package/dist/ui/collapsible.cjs +1 -1
  402. package/dist/ui/collapsible.cjs.map +1 -1
  403. package/dist/ui/collapsible.d.cts +4 -4
  404. package/dist/ui/collapsible.d.ts +4 -4
  405. package/dist/ui/collapsible.js.map +1 -1
  406. package/dist/ui/command.cjs +1 -1
  407. package/dist/ui/command.d.cts +2 -2
  408. package/dist/ui/command.d.ts +2 -2
  409. package/dist/ui/command.js +1 -1
  410. package/dist/ui/context-menu.cjs +1 -1
  411. package/dist/ui/context-menu.cjs.map +1 -1
  412. package/dist/ui/context-menu.d.cts +16 -16
  413. package/dist/ui/context-menu.d.ts +16 -16
  414. package/dist/ui/context-menu.js.map +1 -1
  415. package/dist/ui/dialog.cjs +1 -1
  416. package/dist/ui/dialog.d.cts +1 -1
  417. package/dist/ui/dialog.d.ts +1 -1
  418. package/dist/ui/dialog.js +1 -1
  419. package/dist/ui/dropdown-menu.cjs +1 -1
  420. package/dist/ui/dropdown-menu.d.cts +16 -16
  421. package/dist/ui/dropdown-menu.d.ts +16 -16
  422. package/dist/ui/dropdown-menu.js +1 -1
  423. package/dist/ui/empty.cjs +2 -0
  424. package/dist/ui/empty.cjs.map +1 -0
  425. package/dist/ui/empty.d.cts +36 -0
  426. package/dist/ui/empty.d.ts +36 -0
  427. package/dist/ui/empty.js +2 -0
  428. package/dist/ui/empty.js.map +1 -0
  429. package/dist/ui/field.cjs +1 -0
  430. package/dist/ui/field.d.cts +65 -0
  431. package/dist/ui/field.d.ts +65 -0
  432. package/dist/ui/field.js +1 -0
  433. package/dist/ui/file-uploader.cjs +1 -1
  434. package/dist/ui/file-uploader.cjs.map +1 -1
  435. package/dist/ui/file-uploader.d.cts +2 -2
  436. package/dist/ui/file-uploader.d.ts +2 -2
  437. package/dist/ui/file-uploader.js +1 -1
  438. package/dist/ui/file-uploader.js.map +1 -1
  439. package/dist/ui/form.cjs +1 -1
  440. package/dist/ui/form.d.cts +7 -8
  441. package/dist/ui/form.d.ts +7 -8
  442. package/dist/ui/form.js +1 -1
  443. package/dist/ui/hover-card.cjs +1 -1
  444. package/dist/ui/hover-card.cjs.map +1 -1
  445. package/dist/ui/hover-card.d.cts +4 -4
  446. package/dist/ui/hover-card.d.ts +4 -4
  447. package/dist/ui/hover-card.js.map +1 -1
  448. package/dist/ui/image.cjs +1 -1
  449. package/dist/ui/input-otp.cjs +1 -1
  450. package/dist/ui/input-otp.cjs.map +1 -1
  451. package/dist/ui/input-otp.d.cts +5 -5
  452. package/dist/ui/input-otp.d.ts +5 -5
  453. package/dist/ui/input-otp.js +1 -1
  454. package/dist/ui/input-otp.js.map +1 -1
  455. package/dist/ui/input.cjs +1 -1
  456. package/dist/ui/input.d.cts +1 -1
  457. package/dist/ui/input.d.ts +1 -1
  458. package/dist/ui/input.js +1 -1
  459. package/dist/ui/inputs/search-input.cjs +1 -1
  460. package/dist/ui/inputs/search-input.d.cts +3 -3
  461. package/dist/ui/inputs/search-input.d.ts +3 -3
  462. package/dist/ui/inputs/search-input.js +1 -1
  463. package/dist/ui/item.cjs +2 -0
  464. package/dist/ui/item.cjs.map +1 -0
  465. package/dist/ui/item.d.cts +62 -0
  466. package/dist/ui/item.d.ts +62 -0
  467. package/dist/ui/item.js +2 -0
  468. package/dist/ui/item.js.map +1 -0
  469. package/dist/ui/label.cjs +1 -1
  470. package/dist/ui/label.d.cts +2 -11
  471. package/dist/ui/label.d.ts +2 -11
  472. package/dist/ui/menubar.cjs +1 -1
  473. package/dist/ui/menubar.cjs.map +1 -1
  474. package/dist/ui/menubar.d.cts +17 -17
  475. package/dist/ui/menubar.d.ts +17 -17
  476. package/dist/ui/menubar.js.map +1 -1
  477. package/dist/ui/multi-select.cjs +1 -1
  478. package/dist/ui/multi-select.d.cts +2 -2
  479. package/dist/ui/multi-select.d.ts +2 -2
  480. package/dist/ui/multi-select.js +1 -1
  481. package/dist/ui/navigation-menu.cjs +1 -1
  482. package/dist/ui/navigation-menu.cjs.map +1 -1
  483. package/dist/ui/navigation-menu.d.cts +11 -11
  484. package/dist/ui/navigation-menu.d.ts +11 -11
  485. package/dist/ui/navigation-menu.js.map +1 -1
  486. package/dist/ui/pagination.cjs +1 -1
  487. package/dist/ui/pagination.cjs.map +1 -1
  488. package/dist/ui/pagination.d.cts +9 -9
  489. package/dist/ui/pagination.d.ts +9 -9
  490. package/dist/ui/pagination.js +1 -1
  491. package/dist/ui/pagination.js.map +1 -1
  492. package/dist/ui/popover.cjs +1 -1
  493. package/dist/ui/popover.d.cts +5 -5
  494. package/dist/ui/popover.d.ts +5 -5
  495. package/dist/ui/popover.js +1 -1
  496. package/dist/ui/progress.cjs +1 -1
  497. package/dist/ui/progress.d.cts +2 -2
  498. package/dist/ui/progress.d.ts +2 -2
  499. package/dist/ui/progress.js +1 -1
  500. package/dist/ui/radio-group.cjs +1 -1
  501. package/dist/ui/radio-group.cjs.map +1 -1
  502. package/dist/ui/radio-group.d.cts +3 -3
  503. package/dist/ui/radio-group.d.ts +3 -3
  504. package/dist/ui/radio-group.js.map +1 -1
  505. package/dist/ui/resizable.cjs +1 -1
  506. package/dist/ui/resizable.cjs.map +1 -1
  507. package/dist/ui/resizable.d.cts +4 -4
  508. package/dist/ui/resizable.d.ts +4 -4
  509. package/dist/ui/resizable.js.map +1 -1
  510. package/dist/ui/scroll-area.cjs +1 -1
  511. package/dist/ui/scroll-area.d.cts +3 -3
  512. package/dist/ui/scroll-area.d.ts +3 -3
  513. package/dist/ui/scroll-area.js +1 -1
  514. package/dist/ui/select.cjs +1 -1
  515. package/dist/ui/select.d.cts +11 -11
  516. package/dist/ui/select.d.ts +11 -11
  517. package/dist/ui/select.js +1 -1
  518. package/dist/ui/separator.cjs +1 -1
  519. package/dist/ui/separator.d.cts +1 -1
  520. package/dist/ui/separator.d.ts +1 -1
  521. package/dist/ui/separator.js +1 -1
  522. package/dist/ui/sheet.cjs +1 -1
  523. package/dist/ui/sheet.d.cts +9 -9
  524. package/dist/ui/sheet.d.ts +9 -9
  525. package/dist/ui/sheet.js +1 -1
  526. package/dist/ui/sidebar.cjs +1 -1
  527. package/dist/ui/sidebar.cjs.map +1 -1
  528. package/dist/ui/sidebar.d.cts +30 -30
  529. package/dist/ui/sidebar.d.ts +30 -30
  530. package/dist/ui/sidebar.js +1 -1
  531. package/dist/ui/sidebar.js.map +1 -1
  532. package/dist/ui/skeleton.cjs +1 -1
  533. package/dist/ui/skeleton.d.cts +2 -2
  534. package/dist/ui/skeleton.d.ts +2 -2
  535. package/dist/ui/slider.cjs +1 -1
  536. package/dist/ui/slider.cjs.map +1 -1
  537. package/dist/ui/slider.d.cts +2 -2
  538. package/dist/ui/slider.d.ts +2 -2
  539. package/dist/ui/slider.js.map +1 -1
  540. package/dist/ui/sonner.cjs +1 -1
  541. package/dist/ui/sonner.cjs.map +1 -1
  542. package/dist/ui/sonner.d.cts +2 -2
  543. package/dist/ui/sonner.d.ts +2 -2
  544. package/dist/ui/sonner.js.map +1 -1
  545. package/dist/ui/spinner.cjs +2 -0
  546. package/dist/ui/spinner.cjs.map +1 -0
  547. package/dist/ui/spinner.d.cts +10 -0
  548. package/dist/ui/spinner.d.ts +10 -0
  549. package/dist/ui/spinner.js +2 -0
  550. package/dist/ui/spinner.js.map +1 -0
  551. package/dist/ui/switch.cjs +1 -1
  552. package/dist/ui/switch.d.cts +2 -2
  553. package/dist/ui/switch.d.ts +2 -2
  554. package/dist/ui/switch.js +1 -1
  555. package/dist/ui/table.cjs +1 -1
  556. package/dist/ui/table.d.cts +9 -9
  557. package/dist/ui/table.d.ts +9 -9
  558. package/dist/ui/table.js +1 -1
  559. package/dist/ui/tabs.cjs +1 -1
  560. package/dist/ui/tabs.d.cts +5 -5
  561. package/dist/ui/tabs.d.ts +5 -5
  562. package/dist/ui/tabs.js +1 -1
  563. package/dist/ui/textarea.cjs +1 -1
  564. package/dist/ui/textarea.d.cts +2 -2
  565. package/dist/ui/textarea.d.ts +2 -2
  566. package/dist/ui/textarea.js +1 -1
  567. package/dist/ui/toggle-group.cjs +1 -1
  568. package/dist/ui/toggle-group.cjs.map +1 -1
  569. package/dist/ui/toggle-group.d.cts +4 -4
  570. package/dist/ui/toggle-group.d.ts +4 -4
  571. package/dist/ui/toggle-group.js +1 -1
  572. package/dist/ui/toggle-group.js.map +1 -1
  573. package/dist/ui/toggle.cjs +1 -1
  574. package/dist/ui/toggle.d.cts +1 -1
  575. package/dist/ui/toggle.d.ts +1 -1
  576. package/dist/ui/toggle.js +1 -1
  577. package/dist/ui/tooltip.cjs +1 -1
  578. package/dist/ui/tooltip.d.cts +1 -1
  579. package/dist/ui/tooltip.d.ts +1 -1
  580. package/package.json +26 -14
  581. package/dist/add-new-DfniMrHa.js.map +0 -1
  582. package/dist/add-new-dgznne6n.cjs +0 -2
  583. package/dist/add-new-dgznne6n.cjs.map +0 -1
  584. package/dist/alert-dialog-BgEaBYoh.cjs +0 -2
  585. package/dist/alert-dialog-BgEaBYoh.cjs.map +0 -1
  586. package/dist/alert-dialog-UwGNuTYk.js.map +0 -1
  587. package/dist/avatar-B4pklWJt.cjs +0 -2
  588. package/dist/avatar-B4pklWJt.cjs.map +0 -1
  589. package/dist/badge-CsA-JCDX.cjs +0 -2
  590. package/dist/badge-CsA-JCDX.cjs.map +0 -1
  591. package/dist/button-CuV2l4ge.cjs +0 -2
  592. package/dist/button-CuV2l4ge.cjs.map +0 -1
  593. package/dist/button-DhQJ9Ey8.js.map +0 -1
  594. package/dist/button-variants-CCiseNSC.cjs +0 -2
  595. package/dist/button-variants-CCiseNSC.cjs.map +0 -1
  596. package/dist/calendar-C2yGJ9AV.js.map +0 -1
  597. package/dist/calendar-Fjm1d0mU.cjs +0 -2
  598. package/dist/calendar-Fjm1d0mU.cjs.map +0 -1
  599. package/dist/card-Pnxpehsp.cjs +0 -2
  600. package/dist/card-Pnxpehsp.cjs.map +0 -1
  601. package/dist/command-DHGZlBKd.cjs +0 -2
  602. package/dist/command-DHGZlBKd.cjs.map +0 -1
  603. package/dist/command-DhSE6UaR.js.map +0 -1
  604. package/dist/date-2wue8L-1.cjs +0 -2
  605. package/dist/date-2wue8L-1.cjs.map +0 -1
  606. package/dist/date-BuPl--Fc.js.map +0 -1
  607. package/dist/dialog-B2LS2JLb.js.map +0 -1
  608. package/dist/dialog-BSdn3QaW.cjs +0 -2
  609. package/dist/dialog-BSdn3QaW.cjs.map +0 -1
  610. package/dist/dist-D0uO1qIz.cjs +0 -2
  611. package/dist/drawer-COD1n5aA.js.map +0 -1
  612. package/dist/drawer-CsCzBHvx.cjs +0 -2
  613. package/dist/drawer-CsCzBHvx.cjs.map +0 -1
  614. package/dist/dropdown-menu-Brlye320.js.map +0 -1
  615. package/dist/dropdown-menu-DwI8o0uQ.cjs +0 -2
  616. package/dist/dropdown-menu-DwI8o0uQ.cjs.map +0 -1
  617. package/dist/error-dialog-BF1VNZXk.js.map +0 -1
  618. package/dist/error-dialog-C3b4fqAI.cjs +0 -2
  619. package/dist/error-dialog-C3b4fqAI.cjs.map +0 -1
  620. package/dist/flex-DS4mxjtf.cjs +0 -2
  621. package/dist/flex-DS4mxjtf.cjs.map +0 -1
  622. package/dist/form-BT1TbgK6.js +0 -2
  623. package/dist/form-BT1TbgK6.js.map +0 -1
  624. package/dist/form-DyH5iWq7.cjs +0 -2
  625. package/dist/form-DyH5iWq7.cjs.map +0 -1
  626. package/dist/form-wrapper-CI2iMUNJ.cjs +0 -2
  627. package/dist/form-wrapper-CI2iMUNJ.cjs.map +0 -1
  628. package/dist/form-wrapper-DaguHv9W.js +0 -2
  629. package/dist/form-wrapper-DaguHv9W.js.map +0 -1
  630. package/dist/image-j62jo7bK.cjs +0 -2
  631. package/dist/image-j62jo7bK.cjs.map +0 -1
  632. package/dist/input-BtT8HfYE.js.map +0 -1
  633. package/dist/input-DfGojpRF.cjs +0 -2
  634. package/dist/input-DfGojpRF.cjs.map +0 -1
  635. package/dist/label-CHNSlaoz.cjs +0 -2
  636. package/dist/label-CHNSlaoz.cjs.map +0 -1
  637. package/dist/multi-select-C0dFenI-.cjs +0 -2
  638. package/dist/multi-select-C0dFenI-.cjs.map +0 -1
  639. package/dist/multi-select-l0HITJuv.js +0 -2
  640. package/dist/multi-select-l0HITJuv.js.map +0 -1
  641. package/dist/paragraph-BLvW7xdo.cjs +0 -2
  642. package/dist/paragraph-BLvW7xdo.cjs.map +0 -1
  643. package/dist/popover-BJWOgxQ5.js.map +0 -1
  644. package/dist/popover-BrDe5Jb8.cjs +0 -2
  645. package/dist/popover-BrDe5Jb8.cjs.map +0 -1
  646. package/dist/progress-DzBPViJg.js.map +0 -1
  647. package/dist/progress-RnZp4jUA.cjs +0 -2
  648. package/dist/progress-RnZp4jUA.cjs.map +0 -1
  649. package/dist/refresh-BiOPtbhd.js.map +0 -1
  650. package/dist/refresh-DgFpv8mw.cjs +0 -2
  651. package/dist/refresh-DgFpv8mw.cjs.map +0 -1
  652. package/dist/scroll-area-BJYI14s5.js.map +0 -1
  653. package/dist/scroll-area-slD5Jekm.cjs +0 -2
  654. package/dist/scroll-area-slD5Jekm.cjs.map +0 -1
  655. package/dist/search-input--FQFzdW3.js.map +0 -1
  656. package/dist/search-input-DV8zjsMQ.cjs +0 -2
  657. package/dist/search-input-DV8zjsMQ.cjs.map +0 -1
  658. package/dist/select-Ce-YROpe.cjs +0 -2
  659. package/dist/select-Ce-YROpe.cjs.map +0 -1
  660. package/dist/select-Di8fOKVF.js.map +0 -1
  661. package/dist/separator-C7HQ2ThL.js.map +0 -1
  662. package/dist/separator-WF5zTNGS.cjs +0 -2
  663. package/dist/separator-WF5zTNGS.cjs.map +0 -1
  664. package/dist/sheet-E0gvN9Gp.js.map +0 -1
  665. package/dist/sheet-cjXJAfUE.cjs +0 -2
  666. package/dist/sheet-cjXJAfUE.cjs.map +0 -1
  667. package/dist/sidebar-B6s0ZZHA.cjs +0 -2
  668. package/dist/sidebar-B6s0ZZHA.cjs.map +0 -1
  669. package/dist/sidebar-CBEPWmnf.js.map +0 -1
  670. package/dist/skeleton-BA-3d3bn.cjs +0 -2
  671. package/dist/skeleton-BA-3d3bn.cjs.map +0 -1
  672. package/dist/switch-C7foFKpS.js.map +0 -1
  673. package/dist/switch-DOgkZVAD.cjs +0 -2
  674. package/dist/switch-DOgkZVAD.cjs.map +0 -1
  675. package/dist/table-CKNAm27W.js.map +0 -1
  676. package/dist/table-CzMEpN9D.cjs +0 -2
  677. package/dist/table-CzMEpN9D.cjs.map +0 -1
  678. package/dist/tabs-D4uObFGW.js.map +0 -1
  679. package/dist/tabs-MolLf09Q.cjs +0 -2
  680. package/dist/tabs-MolLf09Q.cjs.map +0 -1
  681. package/dist/textarea-Ewj89Eq3.cjs +0 -2
  682. package/dist/textarea-Ewj89Eq3.cjs.map +0 -1
  683. package/dist/textarea-n8OO0QsI.js.map +0 -1
  684. package/dist/title-DONX1fR6.cjs +0 -2
  685. package/dist/title-DONX1fR6.cjs.map +0 -1
  686. package/dist/title-itXqz0us.js.map +0 -1
  687. package/dist/toggle-D0B4Ba4H.cjs +0 -2
  688. package/dist/toggle-D0B4Ba4H.cjs.map +0 -1
  689. package/dist/toggle-DuNq0es1.js.map +0 -1
  690. package/dist/tooltip-DXvcPsvM.cjs +0 -2
  691. package/dist/tooltip-DXvcPsvM.cjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"dropdown-menu-Brlye320.js","names":["DropdownMenu","DropdownMenuPrimitive"],"sources":["../packages/components/ui/dropdown-menu.tsx"],"sourcesContent":["'use client'\nimport { cn } from '@customafk/react-toolkit/utils'\n\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from 'lucide-react'\n\nimport { DropdownMenu as DropdownMenuPrimitive } from 'radix-ui'\n\nfunction DropdownMenu({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {\n return <DropdownMenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />\n}\n\nfunction DropdownMenuPortal({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\n return <DropdownMenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />\n}\n\nfunction DropdownMenuTrigger({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {\n return <DropdownMenuPrimitive.Trigger data-slot=\"dropdown-menu-trigger\" {...props} />\n}\n\nfunction DropdownMenuContent({ className, sideOffset = 4, align = 'start', ...props }: 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-text-positive',\n 'z-50',\n 'min-w-32',\n 'overflow-x-hidden overflow-y-auto',\n 'shadow-dropdown rounded-md p-1.5',\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({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {\n return <DropdownMenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />\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-muted-muted',\n 'focus:text-text-positive-strong',\n 'data-[inset]:pl-8',\n 'data-[disabled]:pointer-events-none',\n 'data-[disabled]:opacity-50',\n 'data-[variant=destructive]:text-danger',\n 'data-[variant=destructive]:focus:bg-danger-muted',\n 'data-[variant=destructive]:focus:text-danger-strong',\n 'data-[variant=destructive]:*:[svg]:!text-danger',\n '[&_svg]:shrink-0',\n '[&_svg]:pointer-events-none',\n \"[&_svg:not([class*='size-'])]:size-4\",\n \"[&_svg:not([class*='text-'])]:text-text-positive-weak\",\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuCheckboxItem({ className, children, checked, ...props }: 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-muted-muted',\n 'focus:text-text-positive-strong',\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({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\n return <DropdownMenuPrimitive.RadioGroup data-slot=\"dropdown-menu-radio-group\" {...props} />\n}\n\nfunction DropdownMenuRadioItem({ className, children, ...props }: 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-muted',\n 'focus:text-text-positive-strong',\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('px-2 py-1.5 text-sm font-medium data-[inset]:pl-8', className)}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSeparator({ className, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n return <DropdownMenuPrimitive.Separator data-slot=\"dropdown-menu-separator\" className={cn('bg-border-weak -mx-1 my-1 h-px', className)} {...props} />\n}\n\nfunction DropdownMenuShortcut({ className, ...props }: React.ComponentProps<'span'>) {\n return <span data-slot=\"dropdown-menu-shortcut\" className={cn('text-text-positive-muted ml-auto text-xs tracking-widest', className)} {...props} />\n}\n\nfunction DropdownMenuSub({ ...props }: 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-muted',\n 'focus:text-text-positive-strong',\n 'data-[state=open]:bg-muted-muted',\n 'data-[state=open]:text-text-positive-strong',\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({ className, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\n return (\n <DropdownMenuPrimitive.SubContent\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\n 'bg-popover text-text-positive',\n 'shadow-dropdown z-50 min-w-32 origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md p-1',\n 'data-[state=open]:animate-in',\n 'data-[state=open]:fade-in-0',\n 'data-[state=open]:zoom-in-95',\n 'data-[state=closed]:zoom-out-95',\n 'data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0',\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,2 +0,0 @@
1
- const e=require(`./chunk-CUT6urMc.cjs`),t=e.__toESM(require(`lucide-react`)),n=e.__toESM(require(`@customafk/react-toolkit/utils`)),r=e.__toESM(require(`react/jsx-runtime`)),i=e.__toESM(require(`radix-ui`));function a({...e}){return(0,r.jsx)(i.DropdownMenu.Root,{"data-slot":`dropdown-menu`,...e})}function o({...e}){return(0,r.jsx)(i.DropdownMenu.Portal,{"data-slot":`dropdown-menu-portal`,...e})}function s({...e}){return(0,r.jsx)(i.DropdownMenu.Trigger,{"data-slot":`dropdown-menu-trigger`,...e})}function c({className:e,sideOffset:t=4,align:a=`start`,...o}){return(0,r.jsx)(i.DropdownMenu.Portal,{children:(0,r.jsx)(i.DropdownMenu.Content,{"data-slot":`dropdown-menu-content`,sideOffset:t,className:(0,n.cn)(`bg-popover text-text-positive`,`z-50`,`min-w-32`,`overflow-x-hidden overflow-y-auto`,`shadow-dropdown rounded-md p-1.5`,`max-h-(--radix-dropdown-menu-content-available-height)`,`origin-(--radix-dropdown-menu-content-transform-origin)`,`data-[state=open]:animate-in`,`data-[state=open]:fade-in-0`,`data-[state=open]:zoom-in-95`,`data-[state=closed]:animate-out`,`data-[state=closed]:fade-out-0`,`data-[state=closed]:zoom-out-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`,e),...o,align:a})})}function l({...e}){return(0,r.jsx)(i.DropdownMenu.Group,{"data-slot":`dropdown-menu-group`,...e})}function u({className:e,inset:t,variant:a=`default`,...o}){return(0,r.jsx)(i.DropdownMenu.Item,{"data-slot":`dropdown-menu-item`,"data-inset":t,"data-variant":a,className:(0,n.cn)(`relative flex cursor-pointer items-center gap-2 rounded-md px-2 py-2.5 text-sm outline-hidden transition-all select-none`,`focus:bg-muted-muted`,`focus:text-text-positive-strong`,`data-[inset]:pl-8`,`data-[disabled]:pointer-events-none`,`data-[disabled]:opacity-50`,`data-[variant=destructive]:text-danger`,`data-[variant=destructive]:focus:bg-danger-muted`,`data-[variant=destructive]:focus:text-danger-strong`,`data-[variant=destructive]:*:[svg]:!text-danger`,`[&_svg]:shrink-0`,`[&_svg]:pointer-events-none`,`[&_svg:not([class*='size-'])]:size-4`,`[&_svg:not([class*='text-'])]:text-text-positive-weak`,e),...o})}function d({className:e,children:a,checked:o,...s}){return(0,r.jsxs)(i.DropdownMenu.CheckboxItem,{"data-slot":`dropdown-menu-checkbox-item`,className:(0,n.cn)(`relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none`,`focus:bg-muted-muted`,`focus:text-text-positive-strong`,`data-[disabled]:opacity-50`,`data-[disabled]:pointer-events-none`,`[&_svg]:pointer-events-none`,`[&_svg]:shrink-0`,`[&_svg:not([class*='size-'])]:size-4`,e),checked:o,...s,children:[(0,r.jsx)(`span`,{className:`pointer-events-none absolute left-2 flex size-3.5 items-center justify-center`,children:(0,r.jsx)(i.DropdownMenu.ItemIndicator,{children:(0,r.jsx)(t.CheckIcon,{size:16})})}),a]})}function f({...e}){return(0,r.jsx)(i.DropdownMenu.RadioGroup,{"data-slot":`dropdown-menu-radio-group`,...e})}function p({className:e,children:a,...o}){return(0,r.jsxs)(i.DropdownMenu.RadioItem,{"data-slot":`dropdown-menu-radio-item`,className:(0,n.cn)(`relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none`,`focus:bg-accent-muted`,`focus:text-text-positive-strong`,`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,r.jsx)(`span`,{className:`pointer-events-none absolute left-2 flex size-3.5 items-center justify-center`,children:(0,r.jsx)(i.DropdownMenu.ItemIndicator,{children:(0,r.jsx)(t.CircleIcon,{className:`size-2 fill-current`})})}),a]})}function m({className:e,inset:t,...a}){return(0,r.jsx)(i.DropdownMenu.Label,{"data-slot":`dropdown-menu-label`,"data-inset":t,className:(0,n.cn)(`px-2 py-1.5 text-sm font-medium data-[inset]:pl-8`,e),...a})}function h({className:e,...t}){return(0,r.jsx)(i.DropdownMenu.Separator,{"data-slot":`dropdown-menu-separator`,className:(0,n.cn)(`bg-border-weak -mx-1 my-1 h-px`,e),...t})}function g({className:e,...t}){return(0,r.jsx)(`span`,{"data-slot":`dropdown-menu-shortcut`,className:(0,n.cn)(`text-text-positive-muted ml-auto text-xs tracking-widest`,e),...t})}function _({...e}){return(0,r.jsx)(i.DropdownMenu.Sub,{"data-slot":`dropdown-menu-sub`,...e})}function v({className:e,inset:a,children:o,...s}){return(0,r.jsxs)(i.DropdownMenu.SubTrigger,{"data-slot":`dropdown-menu-sub-trigger`,"data-inset":a,className:(0,n.cn)(`flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-hidden select-none`,`focus:bg-accent-muted`,`focus:text-text-positive-strong`,`data-[state=open]:bg-muted-muted`,`data-[state=open]:text-text-positive-strong`,`data-[inset]:pl-8`,e),...s,children:[o,(0,r.jsx)(t.ChevronRightIcon,{className:`ml-auto size-4`})]})}function y({className:e,...t}){return(0,r.jsx)(i.DropdownMenu.SubContent,{"data-slot":`dropdown-menu-sub-content`,className:(0,n.cn)(`bg-popover text-text-positive`,`shadow-dropdown z-50 min-w-32 origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md p-1`,`data-[state=open]:animate-in`,`data-[state=open]:fade-in-0`,`data-[state=open]:zoom-in-95`,`data-[state=closed]:zoom-out-95`,`data-[state=closed]:animate-out`,`data-[state=closed]:fade-out-0`,`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`,e),...t})}Object.defineProperty(exports,`DropdownMenu`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`DropdownMenuCheckboxItem`,{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,`DropdownMenuContent`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`DropdownMenuGroup`,{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,`DropdownMenuItem`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`DropdownMenuLabel`,{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,`DropdownMenuPortal`,{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,`DropdownMenuRadioGroup`,{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,`DropdownMenuRadioItem`,{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,`DropdownMenuSeparator`,{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,`DropdownMenuShortcut`,{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,`DropdownMenuSub`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`DropdownMenuSubContent`,{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,`DropdownMenuSubTrigger`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`DropdownMenuTrigger`,{enumerable:!0,get:function(){return s}});
2
- //# sourceMappingURL=dropdown-menu-DwI8o0uQ.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dropdown-menu-DwI8o0uQ.cjs","names":["DropdownMenuPrimitive","CheckIcon","CircleIcon","ChevronRightIcon"],"sources":["../packages/components/ui/dropdown-menu.tsx"],"sourcesContent":["'use client'\nimport { cn } from '@customafk/react-toolkit/utils'\n\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from 'lucide-react'\n\nimport { DropdownMenu as DropdownMenuPrimitive } from 'radix-ui'\n\nfunction DropdownMenu({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {\n return <DropdownMenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />\n}\n\nfunction DropdownMenuPortal({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\n return <DropdownMenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />\n}\n\nfunction DropdownMenuTrigger({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {\n return <DropdownMenuPrimitive.Trigger data-slot=\"dropdown-menu-trigger\" {...props} />\n}\n\nfunction DropdownMenuContent({ className, sideOffset = 4, align = 'start', ...props }: 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-text-positive',\n 'z-50',\n 'min-w-32',\n 'overflow-x-hidden overflow-y-auto',\n 'shadow-dropdown rounded-md p-1.5',\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({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {\n return <DropdownMenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />\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-muted-muted',\n 'focus:text-text-positive-strong',\n 'data-[inset]:pl-8',\n 'data-[disabled]:pointer-events-none',\n 'data-[disabled]:opacity-50',\n 'data-[variant=destructive]:text-danger',\n 'data-[variant=destructive]:focus:bg-danger-muted',\n 'data-[variant=destructive]:focus:text-danger-strong',\n 'data-[variant=destructive]:*:[svg]:!text-danger',\n '[&_svg]:shrink-0',\n '[&_svg]:pointer-events-none',\n \"[&_svg:not([class*='size-'])]:size-4\",\n \"[&_svg:not([class*='text-'])]:text-text-positive-weak\",\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuCheckboxItem({ className, children, checked, ...props }: 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-muted-muted',\n 'focus:text-text-positive-strong',\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({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\n return <DropdownMenuPrimitive.RadioGroup data-slot=\"dropdown-menu-radio-group\" {...props} />\n}\n\nfunction DropdownMenuRadioItem({ className, children, ...props }: 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-muted',\n 'focus:text-text-positive-strong',\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('px-2 py-1.5 text-sm font-medium data-[inset]:pl-8', className)}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSeparator({ className, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n return <DropdownMenuPrimitive.Separator data-slot=\"dropdown-menu-separator\" className={cn('bg-border-weak -mx-1 my-1 h-px', className)} {...props} />\n}\n\nfunction DropdownMenuShortcut({ className, ...props }: React.ComponentProps<'span'>) {\n return <span data-slot=\"dropdown-menu-shortcut\" className={cn('text-text-positive-muted ml-auto text-xs tracking-widest', className)} {...props} />\n}\n\nfunction DropdownMenuSub({ ...props }: 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-muted',\n 'focus:text-text-positive-strong',\n 'data-[state=open]:bg-muted-muted',\n 'data-[state=open]:text-text-positive-strong',\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({ className, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\n return (\n <DropdownMenuPrimitive.SubContent\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\n 'bg-popover text-text-positive',\n 'shadow-dropdown z-50 min-w-32 origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md p-1',\n 'data-[state=open]:animate-in',\n 'data-[state=open]:fade-in-0',\n 'data-[state=open]:zoom-in-95',\n 'data-[state=closed]:zoom-out-95',\n 'data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0',\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 +0,0 @@
1
- {"version":3,"file":"error-dialog-BF1VNZXk.js","names":["ErrorDialog: React.FC<React.PropsWithChildren<Props>>"],"sources":["../packages/components/dialogs/error-dialog.tsx"],"sourcesContent":["import { useCallback } from 'react'\n\nimport { AlertTriangleIcon } from 'lucide-react'\n\nimport { AlertDialog, AlertDialogAction, AlertDialogContent, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle } from '../ui/alert-dialog'\n\ntype Props = {\n open?: boolean\n title?: string\n description?: string\n onOpenChange?: (open: boolean) => void\n}\nexport const ErrorDialog: React.FC<React.PropsWithChildren<Props>> = ({ open, title, children, onOpenChange }) => {\n const handleClose = useCallback(() => {\n onOpenChange?.(false)\n }, [onOpenChange])\n return (\n <AlertDialog open={open} onOpenChange={onOpenChange}>\n <AlertDialogContent className=\"gap-8 p-4 sm:max-w-md\">\n <AlertDialogHeader>\n <div className=\"text-destructive flex flex-col items-center\">\n <AlertTriangleIcon size={42} />\n <AlertDialogTitle className=\"text-xl font-medium\">{title || 'An error occurred'}</AlertDialogTitle>\n </div>\n </AlertDialogHeader>\n {children}\n <AlertDialogFooter>\n <AlertDialogAction className=\"w-full sm:w-28\" onClick={handleClose}>\n Close\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n )\n}\n"],"mappings":"mTAYA,MAAaA,GAAyD,CAAE,OAAM,QAAO,WAAU,kBAAmB,CAChH,IAAM,EAAc,MAAkB,CACpC,IAAe,KACd,CAAC,IACJ,OACE,EAAC,EAAA,CAAkB,OAAoB,wBACrC,EAAC,EAAA,CAAmB,UAAU,kCAC5B,EAAC,EAAA,CAAA,SACC,EAAC,MAAA,CAAI,UAAU,wDACb,EAAC,EAAA,CAAkB,KAAM,KACzB,EAAC,EAAA,CAAiB,UAAU,+BAAuB,GAAS,2BAG/D,EACD,EAAC,EAAA,CAAA,SACC,EAAC,EAAA,CAAkB,UAAU,iBAAiB,QAAS,WAAa"}
@@ -1,2 +0,0 @@
1
- const e=require(`./chunk-CUT6urMc.cjs`),t=require(`./alert-dialog-BgEaBYoh.cjs`),n=e.__toESM(require(`lucide-react`)),r=e.__toESM(require(`react`)),i=e.__toESM(require(`react/jsx-runtime`)),a=({open:e,title:a,children:o,onOpenChange:s})=>{let c=(0,r.useCallback)(()=>{s?.(!1)},[s]);return(0,i.jsx)(t.AlertDialog,{open:e,onOpenChange:s,children:(0,i.jsxs)(t.AlertDialogContent,{className:`gap-8 p-4 sm:max-w-md`,children:[(0,i.jsx)(t.AlertDialogHeader,{children:(0,i.jsxs)(`div`,{className:`text-destructive flex flex-col items-center`,children:[(0,i.jsx)(n.AlertTriangleIcon,{size:42}),(0,i.jsx)(t.AlertDialogTitle,{className:`text-xl font-medium`,children:a||`An error occurred`})]})}),o,(0,i.jsx)(t.AlertDialogFooter,{children:(0,i.jsx)(t.AlertDialogAction,{className:`w-full sm:w-28`,onClick:c,children:`Close`})})]})})};Object.defineProperty(exports,`ErrorDialog`,{enumerable:!0,get:function(){return a}});
2
- //# sourceMappingURL=error-dialog-C3b4fqAI.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"error-dialog-C3b4fqAI.cjs","names":["ErrorDialog: React.FC<React.PropsWithChildren<Props>>","AlertDialog","AlertDialogContent","AlertDialogHeader","AlertTriangleIcon","AlertDialogTitle","AlertDialogFooter","AlertDialogAction"],"sources":["../packages/components/dialogs/error-dialog.tsx"],"sourcesContent":["import { useCallback } from 'react'\n\nimport { AlertTriangleIcon } from 'lucide-react'\n\nimport { AlertDialog, AlertDialogAction, AlertDialogContent, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle } from '../ui/alert-dialog'\n\ntype Props = {\n open?: boolean\n title?: string\n description?: string\n onOpenChange?: (open: boolean) => void\n}\nexport const ErrorDialog: React.FC<React.PropsWithChildren<Props>> = ({ open, title, children, onOpenChange }) => {\n const handleClose = useCallback(() => {\n onOpenChange?.(false)\n }, [onOpenChange])\n return (\n <AlertDialog open={open} onOpenChange={onOpenChange}>\n <AlertDialogContent className=\"gap-8 p-4 sm:max-w-md\">\n <AlertDialogHeader>\n <div className=\"text-destructive flex flex-col items-center\">\n <AlertTriangleIcon size={42} />\n <AlertDialogTitle className=\"text-xl font-medium\">{title || 'An error occurred'}</AlertDialogTitle>\n </div>\n </AlertDialogHeader>\n {children}\n <AlertDialogFooter>\n <AlertDialogAction className=\"w-full sm:w-28\" onClick={handleClose}>\n Close\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n )\n}\n"],"mappings":"8LAYaA,GAAyD,CAAE,OAAM,QAAO,WAAU,kBAAmB,CAChH,IAAM,GAAA,EAAA,EAAA,iBAAgC,CACpC,IAAe,KACd,CAAC,IACJ,OACE,EAAA,EAAA,KAACC,EAAAA,YAAAA,CAAkB,OAAoB,yBACrC,EAAA,EAAA,MAACC,EAAAA,mBAAAA,CAAmB,UAAU,mCAC5B,EAAA,EAAA,KAACC,EAAAA,kBAAAA,CAAAA,UACC,EAAA,EAAA,MAAC,MAAA,CAAI,UAAU,yDACb,EAAA,EAAA,KAACC,EAAAA,kBAAAA,CAAkB,KAAM,MACzB,EAAA,EAAA,KAACC,EAAAA,iBAAAA,CAAiB,UAAU,+BAAuB,GAAS,2BAG/D,GACD,EAAA,EAAA,KAACC,EAAAA,kBAAAA,CAAAA,UACC,EAAA,EAAA,KAACC,EAAAA,kBAAAA,CAAkB,UAAU,iBAAiB,QAAS,WAAa"}
@@ -1,2 +0,0 @@
1
- const e=require(`./chunk-CUT6urMc.cjs`),t=e.__toESM(require(`@customafk/react-toolkit/utils`)),n=e.__toESM(require(`react/jsx-runtime`)),r=e.__toESM(require(`class-variance-authority`)),i=(0,r.cva)([`relative flex`,`text-sm`],{variants:{vertical:{true:`flex-col`,false:`flex-row`},width:{full:`w-full`,auto:`w-auto`,fit:`w-fit`,screen:`w-screen`,min:`w-min`,max:`w-max`,null:``},wrap:{true:`flex-wrap`,false:`flex-nowrap`},margin:{sm:`m-2`,md:`m-4`,lg:`m-6`,xl:`m-8`,none:`m-0`},padding:{sm:`p-2`,md:`p-4`,lg:`p-6`,xl:`p-8`,none:`p-0`},gap:{xs:`gap-1`,sm:`gap-2`,md:`gap-4`,lg:`gap-6`,xl:`gap-8`,none:`gap-0`},justify:{start:`justify-start`,center:`justify-center`,end:`justify-end`,between:`justify-between`,around:`justify-around`,evenly:`justify-evenly`,stretch:`justify-stretch`},align:{start:`items-start`,center:`items-center`,end:`items-end`,baseline:`items-baseline`,stretch:`items-stretch`}},defaultVariants:{vertical:!1,wrap:!0,width:`fit`,margin:`none`,padding:`sm`,gap:`xs`,justify:`start`,align:`center`}}),a=({vertical:e,wrap:r,width:a,margin:o,padding:s,gap:c,justify:l,align:u,className:d,children:f})=>(0,n.jsx)(`div`,{className:(0,t.cn)(i({vertical:e,width:a,wrap:r,margin:o,padding:s,gap:c,justify:l,align:u,className:d})),children:f});Object.defineProperty(exports,`Flex`,{enumerable:!0,get:function(){return a}});
2
- //# sourceMappingURL=flex-DS4mxjtf.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"flex-DS4mxjtf.cjs","names":[],"sources":["../packages/components/layouts/flex.tsx"],"sourcesContent":["'use client'\nimport { cn } from '@customafk/react-toolkit/utils'\n\nimport { cva, type VariantProps } from 'class-variance-authority'\n\nconst flexVariants = cva(['relative flex', 'text-sm'], {\n variants: {\n vertical: {\n true: 'flex-col',\n false: 'flex-row',\n },\n width: {\n full: 'w-full',\n auto: 'w-auto',\n fit: 'w-fit',\n screen: 'w-screen',\n min: 'w-min',\n max: 'w-max',\n null: '',\n },\n wrap: {\n true: 'flex-wrap',\n false: 'flex-nowrap',\n },\n margin: {\n sm: 'm-2',\n md: 'm-4',\n lg: 'm-6',\n xl: 'm-8',\n none: 'm-0',\n },\n padding: {\n sm: 'p-2',\n md: 'p-4',\n lg: 'p-6',\n xl: 'p-8',\n none: 'p-0',\n },\n gap: {\n xs: 'gap-1',\n sm: 'gap-2',\n md: 'gap-4',\n lg: 'gap-6',\n xl: 'gap-8',\n none: 'gap-0',\n },\n justify: {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n between: 'justify-between',\n around: 'justify-around',\n evenly: 'justify-evenly',\n stretch: 'justify-stretch',\n },\n align: {\n start: 'items-start',\n center: 'items-center',\n end: 'items-end',\n baseline: 'items-baseline',\n stretch: 'items-stretch',\n },\n },\n defaultVariants: {\n vertical: false,\n wrap: true,\n width: 'fit',\n margin: 'none',\n padding: 'sm',\n gap: 'xs',\n justify: 'start',\n align: 'center',\n },\n})\n\ntype Props = {\n className?: string\n} & VariantProps<typeof flexVariants>\nexport const Flex = ({ vertical, wrap, width, margin, padding, gap, justify, align, className, children }: React.PropsWithChildren<Props>) => {\n return (\n <div\n className={cn(\n flexVariants({\n vertical,\n width,\n wrap,\n margin,\n padding,\n gap,\n justify,\n align,\n className,\n }),\n )}\n >\n {children}\n </div>\n )\n}\n"],"mappings":"0LAKM,GAAA,EAAA,EAAA,KAAmB,CAAC,gBAAiB,WAAY,CACrD,SAAU,CACR,SAAU,CACR,KAAM,WACN,MAAO,YAET,MAAO,CACL,KAAM,SACN,KAAM,SACN,IAAK,QACL,OAAQ,WACR,IAAK,QACL,IAAK,QACL,KAAM,IAER,KAAM,CACJ,KAAM,YACN,MAAO,eAET,OAAQ,CACN,GAAI,MACJ,GAAI,MACJ,GAAI,MACJ,GAAI,MACJ,KAAM,OAER,QAAS,CACP,GAAI,MACJ,GAAI,MACJ,GAAI,MACJ,GAAI,MACJ,KAAM,OAER,IAAK,CACH,GAAI,QACJ,GAAI,QACJ,GAAI,QACJ,GAAI,QACJ,GAAI,QACJ,KAAM,SAER,QAAS,CACP,MAAO,gBACP,OAAQ,iBACR,IAAK,cACL,QAAS,kBACT,OAAQ,iBACR,OAAQ,iBACR,QAAS,mBAEX,MAAO,CACL,MAAO,cACP,OAAQ,eACR,IAAK,YACL,SAAU,iBACV,QAAS,kBAGb,gBAAiB,CACf,SAAU,GACV,KAAM,GACN,MAAO,MACP,OAAQ,OACR,QAAS,KACT,IAAK,KACL,QAAS,QACT,MAAO,YAOE,GAAQ,CAAE,WAAU,OAAM,QAAO,SAAQ,UAAS,MAAK,UAAS,QAAO,YAAW,eAE3F,EAAA,EAAA,KAAC,MAAA,CACC,WAAA,EAAA,EAAA,IACE,EAAa,CACX,WACA,QACA,OACA,SACA,UACA,MACA,UACA,QACA,eAIH"}
@@ -1,2 +0,0 @@
1
- import{Label as e}from"./label-CdrxlBJ8.js";import{cn as t}from"@customafk/react-toolkit/utils";import{createContext as n,useContext as r,useId as i}from"react";import{jsx as a}from"react/jsx-runtime";import{Label as o,Slot as s}from"radix-ui";import{Controller as c,FormProvider as l,useFormContext as u,useFormState as d}from"react-hook-form";const f=l,p=n({}),m=({...e})=>a(p.Provider,{value:{name:e.name},children:a(c,{...e})}),h=()=>{let e=r(p),t=r(g),{getFieldState:n,control:i,resetField:a}=u(),o=d({name:e.name}),s=n(e.name,o);if(!e)throw Error(`useFormField should be used within <FormField>`);let{id:c}=t;return{id:c,control:i,resetField:a,name:e.name,formItemId:`${c}-form-item`,formDescriptionId:`${c}-form-item-description`,formMessageId:`${c}-form-item-message`,...s}},g=n({});function _({className:e,...n}){let r=i();return a(g.Provider,{value:{id:r},children:a(`div`,{"data-slot":`form-item`,className:t(`grid gap-1`,e),...n})})}function v({className:n,...r}){let{formItemId:i}=h();return a(e,{"data-slot":`form-label`,className:t(`text-xs`,n),htmlFor:i,...r})}function y({...e}){let{error:t,formItemId:n,formDescriptionId:r,formMessageId:i}=h();return a(s.Slot,{"data-slot":`form-control`,id:n,"aria-describedby":t?`${r} ${i}`:`${r}`,"aria-invalid":!!t,...e})}function b({className:e,...n}){let{formDescriptionId:r}=h();return a(`p`,{"data-slot":`form-description`,id:r,className:t(`text-text-positive-weak text-sm`,e),...n})}function x({className:e,children:n,...r}){let{error:i,formMessageId:o}=h();return a(`span`,{"data-slot":`form-message`,id:o,className:t(`text-danger text-xs`,e),...r,children:i?String(i?.message??``):n})}export{f as Form,y as FormControl,b as FormDescription,m as FormField,_ as FormItem,v as FormLabel,x as FormMessage,h as useFormField};
2
- //# sourceMappingURL=form-BT1TbgK6.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"form-BT1TbgK6.js","names":["Label","SlotPrimitive"],"sources":["../packages/components/ui/form.tsx"],"sourcesContent":["'use client'\nimport { createContext, useContext, useId } from 'react'\nimport { Controller, type ControllerProps, type FieldPath, type FieldValues, FormProvider, useFormContext, useFormState } from 'react-hook-form'\nimport { cn } from '@customafk/react-toolkit/utils'\n\nimport { Label } from '@/components/ui/label'\n\nimport { Label as LabelPrimitive, Slot as SlotPrimitive } from 'radix-ui'\n\nconst Form = FormProvider\n\ntype FormFieldContextValue<TFieldValues extends FieldValues = FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>> = {\n name: TName\n}\n\nconst FormFieldContext = createContext<FormFieldContextValue>({} as FormFieldContextValue)\n\nconst FormField = <TFieldValues extends FieldValues = FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>>({\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 = useContext(FormFieldContext)\n const itemContext = 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 = createContext<FormItemContextValue>({} as FormItemContextValue)\n\nfunction FormItem({ className, ...props }: React.ComponentProps<'div'>) {\n const id = useId()\n\n return (\n <FormItemContext.Provider value={{ id }}>\n <div data-slot=\"form-item\" className={cn('grid gap-1', className)} {...props} />\n </FormItemContext.Provider>\n )\n}\n\nfunction FormLabel({ className, ...props }: React.ComponentProps<typeof LabelPrimitive.Root>) {\n const { formItemId } = useFormField()\n return <Label data-slot=\"form-label\" className={cn('text-xs', className)} htmlFor={formItemId} {...props} />\n}\n\nfunction FormControl({ ...props }: React.ComponentProps<typeof SlotPrimitive.Slot>) {\n const { error, formItemId, formDescriptionId, formMessageId } = useFormField()\n\n return (\n <SlotPrimitive.Slot\n data-slot=\"form-control\"\n id={formItemId}\n aria-describedby={!error ? `${formDescriptionId}` : `${formDescriptionId} ${formMessageId}`}\n aria-invalid={!!error}\n {...props}\n />\n )\n}\n\nfunction FormDescription({ className, ...props }: React.ComponentProps<'p'>) {\n const { formDescriptionId } = useFormField()\n\n return <p data-slot=\"form-description\" id={formDescriptionId} className={cn('text-text-positive-weak text-sm', className)} {...props} />\n}\n\nfunction FormMessage({ className, children, ...props }: React.ComponentProps<'p'>) {\n const { error, formMessageId } = useFormField()\n\n return (\n <span data-slot=\"form-message\" id={formMessageId} className={cn('text-danger text-xs', className)} {...props}>\n {error ? String(error?.message ?? '') : children}\n </span>\n )\n}\n\n// eslint-disable-next-line react-refresh/only-export-components\nexport { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, useFormField }\n"],"mappings":"yVASA,MAAM,EAAO,EAMP,EAAmB,EAAqC,IAExD,GAA8H,CAClI,GAAG,KAGD,EAAC,EAAiB,SAAA,CAAS,MAAO,CAAE,KAAM,EAAM,eAC9C,EAAC,EAAA,CAAW,GAAI,MAKhB,MAAqB,CACzB,IAAM,EAAe,EAAW,GAC1B,EAAc,EAAW,GACzB,CAAE,gBAAe,UAAS,cAAe,IACzC,EAAY,EAAa,CAAE,KAAM,EAAa,OAC9C,EAAa,EAAc,EAAa,KAAM,GAEpD,GAAI,CAAC,EACH,MAAU,MAAM,kDAGlB,GAAM,CAAE,MAAO,EAEf,MAAO,CACL,KACA,UACA,aACA,KAAM,EAAa,KACnB,WAAY,GAAG,EAAG,YAClB,kBAAmB,GAAG,EAAG,wBACzB,cAAe,GAAG,EAAG,oBACrB,GAAG,IAQD,EAAkB,EAAoC,IAE5D,SAAS,EAAS,CAAE,YAAW,GAAG,GAAsC,CACtE,IAAM,EAAK,IAEX,OACE,EAAC,EAAgB,SAAA,CAAS,MAAO,CAAE,eACjC,EAAC,MAAA,CAAI,YAAU,YAAY,UAAW,EAAG,aAAc,GAAY,GAAI,MAK7E,SAAS,EAAU,CAAE,YAAW,GAAG,GAA2D,CAC5F,GAAM,CAAE,cAAe,IACvB,OAAO,EAACA,EAAAA,CAAM,YAAU,aAAa,UAAW,EAAG,UAAW,GAAY,QAAS,EAAY,GAAI,IAGrG,SAAS,EAAY,CAAE,GAAG,GAA0D,CAClF,GAAM,CAAE,QAAO,aAAY,oBAAmB,iBAAkB,IAEhE,OACE,EAACC,EAAc,KAAA,CACb,YAAU,eACV,GAAI,EACJ,mBAAmB,EAAiC,GAAG,EAAkB,GAAG,IAAjD,GAAG,IAC9B,eAAc,CAAC,CAAC,EAChB,GAAI,IAKV,SAAS,EAAgB,CAAE,YAAW,GAAG,GAAoC,CAC3E,GAAM,CAAE,qBAAsB,IAE9B,OAAO,EAAC,IAAA,CAAE,YAAU,mBAAmB,GAAI,EAAmB,UAAW,EAAG,kCAAmC,GAAY,GAAI,IAGjI,SAAS,EAAY,CAAE,YAAW,WAAU,GAAG,GAAoC,CACjF,GAAM,CAAE,QAAO,iBAAkB,IAEjC,OACE,EAAC,OAAA,CAAK,YAAU,eAAe,GAAI,EAAe,UAAW,EAAG,sBAAuB,GAAY,GAAI,WACpG,EAAQ,OAAO,GAAO,SAAW,IAAM"}
@@ -1,2 +0,0 @@
1
- const e=require(`./chunk-CUT6urMc.cjs`),t=require(`./label-CHNSlaoz.cjs`),n=e.__toESM(require(`@customafk/react-toolkit/utils`)),r=e.__toESM(require(`react`)),i=e.__toESM(require(`react/jsx-runtime`)),a=e.__toESM(require(`radix-ui`)),o=e.__toESM(require(`react-hook-form`)),s=o.FormProvider,c=(0,r.createContext)({}),l=({...e})=>(0,i.jsx)(c.Provider,{value:{name:e.name},children:(0,i.jsx)(o.Controller,{...e})}),u=()=>{let e=(0,r.useContext)(c),t=(0,r.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=(0,r.createContext)({});function f({className:e,...t}){let a=(0,r.useId)();return(0,i.jsx)(d.Provider,{value:{id:a},children:(0,i.jsx)(`div`,{"data-slot":`form-item`,className:(0,n.cn)(`grid gap-1`,e),...t})})}function p({className:e,...r}){let{formItemId:a}=u();return(0,i.jsx)(t.Label,{"data-slot":`form-label`,className:(0,n.cn)(`text-xs`,e),htmlFor:a,...r})}function m({...e}){let{error:t,formItemId:n,formDescriptionId:r,formMessageId:o}=u();return(0,i.jsx)(a.Slot.Slot,{"data-slot":`form-control`,id:n,"aria-describedby":t?`${r} ${o}`:`${r}`,"aria-invalid":!!t,...e})}function h({className:e,...t}){let{formDescriptionId:r}=u();return(0,i.jsx)(`p`,{"data-slot":`form-description`,id:r,className:(0,n.cn)(`text-text-positive-weak text-sm`,e),...t})}function g({className:e,children:t,...r}){let{error:a,formMessageId:o}=u();return(0,i.jsx)(`span`,{"data-slot":`form-message`,id:o,className:(0,n.cn)(`text-danger text-xs`,e),...r,children:a?String(a?.message??``):t})}Object.defineProperty(exports,`Form`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`FormControl`,{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,`FormDescription`,{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,`FormField`,{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,`FormItem`,{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,`FormLabel`,{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,`FormMessage`,{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,`useFormField`,{enumerable:!0,get:function(){return u}});
2
- //# sourceMappingURL=form-DyH5iWq7.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"form-DyH5iWq7.cjs","names":["FormProvider","Controller","Label","SlotPrimitive"],"sources":["../packages/components/ui/form.tsx"],"sourcesContent":["'use client'\nimport { createContext, useContext, useId } from 'react'\nimport { Controller, type ControllerProps, type FieldPath, type FieldValues, FormProvider, useFormContext, useFormState } from 'react-hook-form'\nimport { cn } from '@customafk/react-toolkit/utils'\n\nimport { Label } from '@/components/ui/label'\n\nimport { Label as LabelPrimitive, Slot as SlotPrimitive } from 'radix-ui'\n\nconst Form = FormProvider\n\ntype FormFieldContextValue<TFieldValues extends FieldValues = FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>> = {\n name: TName\n}\n\nconst FormFieldContext = createContext<FormFieldContextValue>({} as FormFieldContextValue)\n\nconst FormField = <TFieldValues extends FieldValues = FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>>({\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 = useContext(FormFieldContext)\n const itemContext = 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 = createContext<FormItemContextValue>({} as FormItemContextValue)\n\nfunction FormItem({ className, ...props }: React.ComponentProps<'div'>) {\n const id = useId()\n\n return (\n <FormItemContext.Provider value={{ id }}>\n <div data-slot=\"form-item\" className={cn('grid gap-1', className)} {...props} />\n </FormItemContext.Provider>\n )\n}\n\nfunction FormLabel({ className, ...props }: React.ComponentProps<typeof LabelPrimitive.Root>) {\n const { formItemId } = useFormField()\n return <Label data-slot=\"form-label\" className={cn('text-xs', className)} htmlFor={formItemId} {...props} />\n}\n\nfunction FormControl({ ...props }: React.ComponentProps<typeof SlotPrimitive.Slot>) {\n const { error, formItemId, formDescriptionId, formMessageId } = useFormField()\n\n return (\n <SlotPrimitive.Slot\n data-slot=\"form-control\"\n id={formItemId}\n aria-describedby={!error ? `${formDescriptionId}` : `${formDescriptionId} ${formMessageId}`}\n aria-invalid={!!error}\n {...props}\n />\n )\n}\n\nfunction FormDescription({ className, ...props }: React.ComponentProps<'p'>) {\n const { formDescriptionId } = useFormField()\n\n return <p data-slot=\"form-description\" id={formDescriptionId} className={cn('text-text-positive-weak text-sm', className)} {...props} />\n}\n\nfunction FormMessage({ className, children, ...props }: React.ComponentProps<'p'>) {\n const { error, formMessageId } = useFormField()\n\n return (\n <span data-slot=\"form-message\" id={formMessageId} className={cn('text-danger text-xs', className)} {...props}>\n {error ? String(error?.message ?? '') : children}\n </span>\n )\n}\n\n// eslint-disable-next-line react-refresh/only-export-components\nexport { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, useFormField }\n"],"mappings":"kRASM,EAAOA,EAAAA,aAMP,GAAA,EAAA,EAAA,eAAwD,IAExD,GAA8H,CAClI,GAAG,MAGD,EAAA,EAAA,KAAC,EAAiB,SAAA,CAAS,MAAO,CAAE,KAAM,EAAM,gBAC9C,EAAA,EAAA,KAACC,EAAAA,WAAAA,CAAW,GAAI,MAKhB,MAAqB,CACzB,IAAM,GAAA,EAAA,EAAA,YAA0B,GAC1B,GAAA,EAAA,EAAA,YAAyB,GACzB,CAAE,gBAAe,UAAS,eAAA,EAAA,EAAA,kBAC1B,GAAA,EAAA,EAAA,cAAyB,CAAE,KAAM,EAAa,OAC9C,EAAa,EAAc,EAAa,KAAM,GAEpD,GAAI,CAAC,EACH,MAAU,MAAM,kDAGlB,GAAM,CAAE,MAAO,EAEf,MAAO,CACL,KACA,UACA,aACA,KAAM,EAAa,KACnB,WAAY,GAAG,EAAG,YAClB,kBAAmB,GAAG,EAAG,wBACzB,cAAe,GAAG,EAAG,oBACrB,GAAG,IAQD,GAAA,EAAA,EAAA,eAAsD,IAE5D,SAAS,EAAS,CAAE,YAAW,GAAG,GAAsC,CACtE,IAAM,GAAA,EAAA,EAAA,SAEN,OACE,EAAA,EAAA,KAAC,EAAgB,SAAA,CAAS,MAAO,CAAE,gBACjC,EAAA,EAAA,KAAC,MAAA,CAAI,YAAU,YAAY,WAAA,EAAA,EAAA,IAAc,aAAc,GAAY,GAAI,MAK7E,SAAS,EAAU,CAAE,YAAW,GAAG,GAA2D,CAC5F,GAAM,CAAE,cAAe,IACvB,OAAO,EAAA,EAAA,KAACC,EAAAA,MAAAA,CAAM,YAAU,aAAa,WAAA,EAAA,EAAA,IAAc,UAAW,GAAY,QAAS,EAAY,GAAI,IAGrG,SAAS,EAAY,CAAE,GAAG,GAA0D,CAClF,GAAM,CAAE,QAAO,aAAY,oBAAmB,iBAAkB,IAEhE,OACE,EAAA,EAAA,KAACC,EAAAA,KAAc,KAAA,CACb,YAAU,eACV,GAAI,EACJ,mBAAmB,EAAiC,GAAG,EAAkB,GAAG,IAAjD,GAAG,IAC9B,eAAc,CAAC,CAAC,EAChB,GAAI,IAKV,SAAS,EAAgB,CAAE,YAAW,GAAG,GAAoC,CAC3E,GAAM,CAAE,qBAAsB,IAE9B,OAAO,EAAA,EAAA,KAAC,IAAA,CAAE,YAAU,mBAAmB,GAAI,EAAmB,WAAA,EAAA,EAAA,IAAc,kCAAmC,GAAY,GAAI,IAGjI,SAAS,EAAY,CAAE,YAAW,WAAU,GAAG,GAAoC,CACjF,GAAM,CAAE,QAAO,iBAAkB,IAEjC,OACE,EAAA,EAAA,KAAC,OAAA,CAAK,YAAU,eAAe,GAAI,EAAe,WAAA,EAAA,EAAA,IAAc,sBAAuB,GAAY,GAAI,WACpG,EAAQ,OAAO,GAAO,SAAW,IAAM"}
@@ -1,2 +0,0 @@
1
- const e=require(`./chunk-CUT6urMc.cjs`),t=require(`./form-DyH5iWq7.cjs`),n=require(`./error-dialog-C3b4fqAI.cjs`),r=e.__toESM(require(`lucide-react`)),i=e.__toESM(require(`react`)),a=e.__toESM(require(`react/jsx-runtime`)),o=e.__toESM(require(`react-hook-form`)),s=e.__toESM(require(`@hookform/error-message`)),c=({form:e,isResetAfterSubmit:c=!0,className:l,onSubmit:u,onError:d,onSubcribe:f,children:p})=>{let m=(0,o.useForm)({...e,criteriaMode:`all`}),{formState:h,reset:g,handleSubmit:_,subscribe:v}=m,{dirtyFields:y}=h,[b,x]=(0,i.useState)(!1),S=(0,i.useCallback)(e=>{u(e,h,y),c&&g()},[y,h,c,u,g]),C=(0,i.useCallback)(e=>{let t=Object.keys(e);t.length!==0&&(d?.(e),x(!0))},[d]);return(0,i.useEffect)(()=>{if(!f)return;let e=v({formState:{values:!0},callback:({values:e})=>{f(e)}});return()=>e()},[f,v]),(0,a.jsxs)(t.Form,{...m,children:[(0,a.jsx)(`form`,{className:l,onSubmit:_(S,C),children:p}),(0,a.jsx)(n.ErrorDialog,{open:b,title:`Lỗi nhập dữ liệu`,description:`An unexpected error has occurred. Please check the errors below and try again.`,onOpenChange:x,children:b&&(0,a.jsx)(a.Fragment,{children:Object.keys(h.errors).length>0?(0,a.jsxs)(`div`,{className:`flex max-w-100 flex-col gap-2 px-4`,children:[(0,a.jsx)(`p`,{className:`text-muted-foreground text-sm font-semibold`,children:`Cảnh báo: Vui lòng kiểm tra các lỗi sau:`}),(0,a.jsx)(`div`,{className:`flex flex-col space-y-1`,children:Object.entries(h.errors).map(([e])=>(0,a.jsx)(s.ErrorMessage,{errors:h.errors,name:e,render:({messages:e})=>(0,a.jsx)(a.Fragment,{children:e?Object.entries(e).map(([e,t])=>(0,a.jsxs)(`div`,{className:`text-accent-foreground flex items-start gap-x-1 truncate text-sm font-normal`,children:[(0,a.jsx)(r.AlertCircleIcon,{size:16,className:`text-destructive mt-0.5 min-w-4 flex-0`}),(0,a.jsx)(`p`,{className:`line-clamp-2 flex-1 text-wrap`,children:t})]},e)):null})},e))})]}):(0,a.jsx)(`p`,{className:`text-muted-foreground text-sm`,children:`No errors found.`})})})]})};Object.defineProperty(exports,`FormWrapper`,{enumerable:!0,get:function(){return c}});
2
- //# sourceMappingURL=form-wrapper-CI2iMUNJ.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"form-wrapper-CI2iMUNJ.cjs","names":["Form","ErrorDialog","ErrorMessage","AlertCircleIcon"],"sources":["../packages/components/forms/form-wrapper.tsx"],"sourcesContent":["import { useCallback, useEffect, useState } from 'react'\nimport { type FieldValues, type FormState, type SubmitErrorHandler, type SubmitHandler, useForm, type UseFormProps } from 'react-hook-form'\n\nimport { AlertCircleIcon } from 'lucide-react'\n\nimport type { AnyEntity } from '@/types'\nimport { ErrorMessage } from '@hookform/error-message'\n\nimport { ErrorDialog } from '../dialogs/error-dialog'\nimport { Form } from '../ui/form'\n\ntype Props<TFieldValues extends FieldValues = FieldValues> = {\n form: UseFormProps<TFieldValues>\n isResetAfterSubmit?: boolean\n className?: string\n onSubmit: (data: TFieldValues, formState: FormState<FieldValues>, dirtyFields: FormState<FieldValues>['dirtyFields']) => void | Promise<void>\n onError?: SubmitErrorHandler<TFieldValues>\n onSubcribe?: (values: TFieldValues) => void\n}\n\nexport const FormWrapper = <TFieldValues extends FieldValues = FieldValues>({\n form: FormConfig,\n isResetAfterSubmit = true,\n className,\n onSubmit,\n onError,\n onSubcribe,\n children,\n}: React.PropsWithChildren<Props<TFieldValues>>) => {\n const form = useForm({\n ...FormConfig,\n criteriaMode: 'all',\n })\n\n const { formState, reset, handleSubmit, subscribe } = form\n const { dirtyFields } = formState\n\n const [errorOpen, setErrorOpen] = useState<boolean>(false)\n\n const handleFormSubmit = useCallback<SubmitHandler<TFieldValues>>(\n (data) => {\n onSubmit(data, formState, dirtyFields)\n if (isResetAfterSubmit) {\n reset()\n }\n },\n [dirtyFields, formState, isResetAfterSubmit, onSubmit, reset],\n )\n\n const handleFormError = useCallback<SubmitErrorHandler<TFieldValues>>(\n (errors) => {\n const errorKeys = Object.keys(errors)\n if (errorKeys.length === 0) return\n onError?.(errors)\n setErrorOpen(true)\n },\n [onError],\n )\n\n useEffect(() => {\n if (!onSubcribe) return\n const callback = subscribe({\n formState: { values: true },\n callback: ({ values }) => {\n onSubcribe(values)\n },\n })\n return () => callback()\n }, [onSubcribe, subscribe])\n\n return (\n <Form {...form}>\n <form className={className} onSubmit={handleSubmit(handleFormSubmit, handleFormError)}>\n {children}\n </form>\n <ErrorDialog\n open={errorOpen}\n title=\"Lỗi nhập dữ liệu\"\n description=\"An unexpected error has occurred. Please check the errors below and try again.\"\n onOpenChange={setErrorOpen}\n >\n {errorOpen && (\n <>\n {Object.keys(formState.errors).length > 0 ? (\n <div className=\"flex max-w-100 flex-col gap-2 px-4\">\n <p className=\"text-muted-foreground text-sm font-semibold\">Cảnh báo: Vui lòng kiểm tra các lỗi sau:</p>\n <div className=\"flex flex-col space-y-1\">\n {Object.entries(formState.errors).map(([key]) => (\n <ErrorMessage\n key={key}\n errors={formState.errors}\n name={key as AnyEntity}\n render={({ messages }) => {\n return (\n <>\n {messages\n ? Object.entries(messages).map(([type, message]) => {\n return (\n <div key={type} className=\"text-accent-foreground flex items-start gap-x-1 truncate text-sm font-normal\">\n <AlertCircleIcon size={16} className=\"text-destructive mt-0.5 min-w-4 flex-0\" />\n <p className=\"line-clamp-2 flex-1 text-wrap\">{message}</p>\n </div>\n )\n })\n : null}\n </>\n )\n }}\n />\n ))}\n </div>\n </div>\n ) : (\n <p className=\"text-muted-foreground text-sm\">No errors found.</p>\n )}\n </>\n )}\n </ErrorDialog>\n </Form>\n )\n}\n"],"mappings":"uTAoBa,GAA+D,CAC1E,KAAM,EACN,qBAAqB,GACrB,YACA,WACA,UACA,aACA,cACkD,CAClD,IAAM,GAAA,EAAA,EAAA,SAAe,CACnB,GAAG,EACH,aAAc,QAGV,CAAE,YAAW,QAAO,eAAc,aAAc,EAChD,CAAE,eAAgB,EAElB,CAAC,EAAW,IAAA,EAAA,EAAA,UAAkC,IAE9C,GAAA,EAAA,EAAA,aACH,GAAS,CACR,EAAS,EAAM,EAAW,GACtB,GACF,KAGJ,CAAC,EAAa,EAAW,EAAoB,EAAU,IAGnD,GAAA,EAAA,EAAA,aACH,GAAW,CACV,IAAM,EAAY,OAAO,KAAK,GAC1B,EAAU,SAAW,IACzB,IAAU,GACV,EAAa,MAEf,CAAC,IAcH,OAXA,EAAA,EAAA,eAAgB,CACd,GAAI,CAAC,EAAY,OACjB,IAAM,EAAW,EAAU,CACzB,UAAW,CAAE,OAAQ,IACrB,UAAW,CAAE,YAAa,CACxB,EAAW,MAGf,UAAa,KACZ,CAAC,EAAY,KAGd,EAAA,EAAA,MAACA,EAAAA,KAAAA,CAAK,GAAI,aACR,EAAA,EAAA,KAAC,OAAA,CAAgB,YAAW,SAAU,EAAa,EAAkB,GAClE,cAEH,EAAA,EAAA,KAACC,EAAAA,YAAAA,CACC,KAAM,EACN,MAAM,mBACN,YAAY,iFACZ,aAAc,WAEb,IACC,EAAA,EAAA,KAAA,EAAA,SAAA,CAAA,SACG,OAAO,KAAK,EAAU,QAAQ,OAAS,GACtC,EAAA,EAAA,MAAC,MAAA,CAAI,UAAU,gDACb,EAAA,EAAA,KAAC,IAAA,CAAE,UAAU,uDAA8C,8CAC3D,EAAA,EAAA,KAAC,MAAA,CAAI,UAAU,mCACZ,OAAO,QAAQ,EAAU,QAAQ,KAAK,CAAC,MACtC,EAAA,EAAA,KAACC,EAAAA,aAAAA,CAEC,OAAQ,EAAU,OAClB,KAAM,EACN,QAAS,CAAE,eAEP,EAAA,EAAA,KAAA,EAAA,SAAA,CAAA,SACG,EACG,OAAO,QAAQ,GAAU,KAAK,CAAC,EAAM,MAEjC,EAAA,EAAA,MAAC,MAAA,CAAe,UAAU,0FACxB,EAAA,EAAA,KAACC,EAAAA,gBAAAA,CAAgB,KAAM,GAAI,UAAU,4CACrC,EAAA,EAAA,KAAC,IAAA,CAAE,UAAU,yCAAiC,MAFtC,IAMd,QAfL,UAwBb,EAAA,EAAA,KAAC,IAAA,CAAE,UAAU,yCAAgC"}
@@ -1,2 +0,0 @@
1
- import{Form as e}from"./form-BT1TbgK6.js";import{ErrorDialog as t}from"./error-dialog-BF1VNZXk.js";import{AlertCircleIcon as n}from"lucide-react";import{useCallback as r,useEffect as i,useState as a}from"react";import{Fragment as o,jsx as s,jsxs as c}from"react/jsx-runtime";import{useForm as l}from"react-hook-form";import{ErrorMessage as u}from"@hookform/error-message";const d=({form:d,isResetAfterSubmit:f=!0,className:p,onSubmit:m,onError:h,onSubcribe:g,children:_})=>{let v=l({...d,criteriaMode:`all`}),{formState:y,reset:b,handleSubmit:x,subscribe:S}=v,{dirtyFields:C}=y,[w,T]=a(!1),E=r(e=>{m(e,y,C),f&&b()},[C,y,f,m,b]),D=r(e=>{let t=Object.keys(e);t.length!==0&&(h?.(e),T(!0))},[h]);return i(()=>{if(!g)return;let e=S({formState:{values:!0},callback:({values:e})=>{g(e)}});return()=>e()},[g,S]),c(e,{...v,children:[s(`form`,{className:p,onSubmit:x(E,D),children:_}),s(t,{open:w,title:`Lỗi nhập dữ liệu`,description:`An unexpected error has occurred. Please check the errors below and try again.`,onOpenChange:T,children:w&&s(o,{children:Object.keys(y.errors).length>0?c(`div`,{className:`flex max-w-100 flex-col gap-2 px-4`,children:[s(`p`,{className:`text-muted-foreground text-sm font-semibold`,children:`Cảnh báo: Vui lòng kiểm tra các lỗi sau:`}),s(`div`,{className:`flex flex-col space-y-1`,children:Object.entries(y.errors).map(([e])=>s(u,{errors:y.errors,name:e,render:({messages:e})=>s(o,{children:e?Object.entries(e).map(([e,t])=>c(`div`,{className:`text-accent-foreground flex items-start gap-x-1 truncate text-sm font-normal`,children:[s(n,{size:16,className:`text-destructive mt-0.5 min-w-4 flex-0`}),s(`p`,{className:`line-clamp-2 flex-1 text-wrap`,children:t})]},e)):null})},e))})]}):s(`p`,{className:`text-muted-foreground text-sm`,children:`No errors found.`})})})]})};export{d as FormWrapper};
2
- //# sourceMappingURL=form-wrapper-DaguHv9W.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"form-wrapper-DaguHv9W.js","names":[],"sources":["../packages/components/forms/form-wrapper.tsx"],"sourcesContent":["import { useCallback, useEffect, useState } from 'react'\nimport { type FieldValues, type FormState, type SubmitErrorHandler, type SubmitHandler, useForm, type UseFormProps } from 'react-hook-form'\n\nimport { AlertCircleIcon } from 'lucide-react'\n\nimport type { AnyEntity } from '@/types'\nimport { ErrorMessage } from '@hookform/error-message'\n\nimport { ErrorDialog } from '../dialogs/error-dialog'\nimport { Form } from '../ui/form'\n\ntype Props<TFieldValues extends FieldValues = FieldValues> = {\n form: UseFormProps<TFieldValues>\n isResetAfterSubmit?: boolean\n className?: string\n onSubmit: (data: TFieldValues, formState: FormState<FieldValues>, dirtyFields: FormState<FieldValues>['dirtyFields']) => void | Promise<void>\n onError?: SubmitErrorHandler<TFieldValues>\n onSubcribe?: (values: TFieldValues) => void\n}\n\nexport const FormWrapper = <TFieldValues extends FieldValues = FieldValues>({\n form: FormConfig,\n isResetAfterSubmit = true,\n className,\n onSubmit,\n onError,\n onSubcribe,\n children,\n}: React.PropsWithChildren<Props<TFieldValues>>) => {\n const form = useForm({\n ...FormConfig,\n criteriaMode: 'all',\n })\n\n const { formState, reset, handleSubmit, subscribe } = form\n const { dirtyFields } = formState\n\n const [errorOpen, setErrorOpen] = useState<boolean>(false)\n\n const handleFormSubmit = useCallback<SubmitHandler<TFieldValues>>(\n (data) => {\n onSubmit(data, formState, dirtyFields)\n if (isResetAfterSubmit) {\n reset()\n }\n },\n [dirtyFields, formState, isResetAfterSubmit, onSubmit, reset],\n )\n\n const handleFormError = useCallback<SubmitErrorHandler<TFieldValues>>(\n (errors) => {\n const errorKeys = Object.keys(errors)\n if (errorKeys.length === 0) return\n onError?.(errors)\n setErrorOpen(true)\n },\n [onError],\n )\n\n useEffect(() => {\n if (!onSubcribe) return\n const callback = subscribe({\n formState: { values: true },\n callback: ({ values }) => {\n onSubcribe(values)\n },\n })\n return () => callback()\n }, [onSubcribe, subscribe])\n\n return (\n <Form {...form}>\n <form className={className} onSubmit={handleSubmit(handleFormSubmit, handleFormError)}>\n {children}\n </form>\n <ErrorDialog\n open={errorOpen}\n title=\"Lỗi nhập dữ liệu\"\n description=\"An unexpected error has occurred. Please check the errors below and try again.\"\n onOpenChange={setErrorOpen}\n >\n {errorOpen && (\n <>\n {Object.keys(formState.errors).length > 0 ? (\n <div className=\"flex max-w-100 flex-col gap-2 px-4\">\n <p className=\"text-muted-foreground text-sm font-semibold\">Cảnh báo: Vui lòng kiểm tra các lỗi sau:</p>\n <div className=\"flex flex-col space-y-1\">\n {Object.entries(formState.errors).map(([key]) => (\n <ErrorMessage\n key={key}\n errors={formState.errors}\n name={key as AnyEntity}\n render={({ messages }) => {\n return (\n <>\n {messages\n ? Object.entries(messages).map(([type, message]) => {\n return (\n <div key={type} className=\"text-accent-foreground flex items-start gap-x-1 truncate text-sm font-normal\">\n <AlertCircleIcon size={16} className=\"text-destructive mt-0.5 min-w-4 flex-0\" />\n <p className=\"line-clamp-2 flex-1 text-wrap\">{message}</p>\n </div>\n )\n })\n : null}\n </>\n )\n }}\n />\n ))}\n </div>\n </div>\n ) : (\n <p className=\"text-muted-foreground text-sm\">No errors found.</p>\n )}\n </>\n )}\n </ErrorDialog>\n </Form>\n )\n}\n"],"mappings":"oXAoBA,MAAa,GAA+D,CAC1E,KAAM,EACN,qBAAqB,GACrB,YACA,WACA,UACA,aACA,cACkD,CAClD,IAAM,EAAO,EAAQ,CACnB,GAAG,EACH,aAAc,QAGV,CAAE,YAAW,QAAO,eAAc,aAAc,EAChD,CAAE,eAAgB,EAElB,CAAC,EAAW,GAAgB,EAAkB,IAE9C,EAAmB,EACtB,GAAS,CACR,EAAS,EAAM,EAAW,GACtB,GACF,KAGJ,CAAC,EAAa,EAAW,EAAoB,EAAU,IAGnD,EAAkB,EACrB,GAAW,CACV,IAAM,EAAY,OAAO,KAAK,GAC1B,EAAU,SAAW,IACzB,IAAU,GACV,EAAa,MAEf,CAAC,IAcH,OAXA,MAAgB,CACd,GAAI,CAAC,EAAY,OACjB,IAAM,EAAW,EAAU,CACzB,UAAW,CAAE,OAAQ,IACrB,UAAW,CAAE,YAAa,CACxB,EAAW,MAGf,UAAa,KACZ,CAAC,EAAY,IAGd,EAAC,EAAA,CAAK,GAAI,YACR,EAAC,OAAA,CAAgB,YAAW,SAAU,EAAa,EAAkB,GAClE,aAEH,EAAC,EAAA,CACC,KAAM,EACN,MAAM,mBACN,YAAY,iFACZ,aAAc,WAEb,GACC,EAAA,EAAA,CAAA,SACG,OAAO,KAAK,EAAU,QAAQ,OAAS,EACtC,EAAC,MAAA,CAAI,UAAU,+CACb,EAAC,IAAA,CAAE,UAAU,uDAA8C,6CAC3D,EAAC,MAAA,CAAI,UAAU,mCACZ,OAAO,QAAQ,EAAU,QAAQ,KAAK,CAAC,KACtC,EAAC,EAAA,CAEC,OAAQ,EAAU,OAClB,KAAM,EACN,QAAS,CAAE,cAEP,EAAA,EAAA,CAAA,SACG,EACG,OAAO,QAAQ,GAAU,KAAK,CAAC,EAAM,KAEjC,EAAC,MAAA,CAAe,UAAU,yFACxB,EAAC,EAAA,CAAgB,KAAM,GAAI,UAAU,2CACrC,EAAC,IAAA,CAAE,UAAU,yCAAiC,MAFtC,IAMd,QAfL,SAwBb,EAAC,IAAA,CAAE,UAAU,yCAAgC"}
@@ -1,2 +0,0 @@
1
- const e=require(`./chunk-CUT6urMc.cjs`),t=require(`./skeleton-BA-3d3bn.cjs`),n=e.__toESM(require(`lucide-react`)),r=e.__toESM(require(`@customafk/react-toolkit/utils`)),i=e.__toESM(require(`react`)),a=e.__toESM(require(`react/jsx-runtime`)),o=({src:e,alt:o,width:s,height:c,maxRetries:l=3,retryDelay:u=500,className:d,onClick:f})=>{let p=(0,i.useRef)(null),[m,h]=(0,i.useState)(e),[g,_]=(0,i.useState)(0),[v,y]=(0,i.useState)(!1),[b,x]=(0,i.useState)(!1),S=(0,i.useCallback)(()=>{y(!0)},[]),C=(0,i.useCallback)(()=>{if(g<l){x(!1);let t=g+1;_(t),setTimeout(()=>{let n=`?retry=${Date.now()}&attempt=${t}`;h(e+n)},u*t);return}x(!0),y(!0),h(e)},[l,g,u,e]);return b?(0,a.jsx)(`div`,{style:{width:s,height:c},className:(0,r.cn)(`@container relative inline-block`,d),children:(0,a.jsxs)(`div`,{className:`bg-danger-muted shadow-card flex size-full flex-col items-center justify-center gap-y-2 rounded-md`,children:[(0,a.jsx)(n.AlertCircleIcon,{className:`text-danger size-8 @max-[52px]:size-6`}),(0,a.jsx)(`span`,{className:`text-danger-weak text-center text-xs @max-[96px]:sr-only`,children:`Image failed to load`})]})}):(0,a.jsxs)(`div`,{style:{width:s,height:c},className:(0,r.cn)(`relative flex items-center justify-center overflow-hidden rounded-md`,d),onClick:f,children:[!v&&(0,a.jsx)(t.Skeleton,{className:`absolute inset-0 flex size-full animate-pulse items-center justify-center`}),(0,a.jsx)(`img`,{src:m,className:`absolute inset-0 z-0 size-full scale-110 object-cover blur-xl brightness-60`}),(0,a.jsx)(`img`,{id:m,ref:p,src:m,alt:o,loading:`lazy`,className:(0,r.cn)(`shadow-card relative h-[120%] w-auto object-cover transition-opacity duration-300`,v&&`opacity-100`,!v&&`pointer-events-none opacity-0`),onLoad:S,onError:C})]})};Object.defineProperty(exports,`Image`,{enumerable:!0,get:function(){return o}});
2
- //# sourceMappingURL=image-j62jo7bK.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"image-j62jo7bK.cjs","names":["Image: React.FC<Props>","AlertCircleIcon","Skeleton"],"sources":["../packages/components/ui/image.tsx"],"sourcesContent":["import { useCallback, useRef, useState } from 'react'\nimport { cn } from '@customafk/react-toolkit/utils'\n\nimport { AlertCircleIcon } from 'lucide-react'\n\nimport { Skeleton } from './skeleton'\n\ntype Props = {\n src?: string\n alt?: string\n width?: number | string\n height?: number | string\n maxRetries?: number\n retryDelay?: number\n className?: string\n onClick?: () => void\n}\nexport const Image: React.FC<Props> = ({ src, alt, width, height, maxRetries = 3, retryDelay = 500, className, onClick }) => {\n const imageRef = useRef<HTMLImageElement>(null)\n const [currentSrc, setCurrentSrc] = useState<string | undefined>(src)\n const [retryCount, setRetryCount] = useState<number>(0)\n const [isLoaded, setIsLoaded] = useState<boolean>(false)\n const [hasError, setHasError] = useState<boolean>(false)\n\n const handleLoad = useCallback(() => {\n setIsLoaded(true)\n }, [])\n\n const handleError = useCallback(() => {\n if (retryCount < maxRetries) {\n // imageRef.current?.style.setProperty('display', 'none')\n setHasError(false)\n const newRetryCount = retryCount + 1\n setRetryCount(newRetryCount)\n\n // Retry with exponential backoff and cache busting\n setTimeout(() => {\n const cacheBuster = `?retry=${Date.now()}&attempt=${newRetryCount}`\n setCurrentSrc(src + cacheBuster)\n }, retryDelay * newRetryCount)\n return\n }\n\n setHasError(true)\n setIsLoaded(true)\n setCurrentSrc(src)\n }, [maxRetries, retryCount, retryDelay, src])\n\n if (hasError) {\n return (\n <div style={{ width, height }} className={cn('@container relative inline-block', className)}>\n <div className=\"bg-danger-muted shadow-card flex size-full flex-col items-center justify-center gap-y-2 rounded-md\">\n <AlertCircleIcon className=\"text-danger size-8 @max-[52px]:size-6\" />\n <span className=\"text-danger-weak text-center text-xs @max-[96px]:sr-only\">Image failed to load</span>\n </div>\n </div>\n )\n }\n\n return (\n <div style={{ width, height }} className={cn('relative flex items-center justify-center overflow-hidden rounded-md', className)} onClick={onClick}>\n {!isLoaded && <Skeleton className=\"absolute inset-0 flex size-full animate-pulse items-center justify-center\" />}\n <img src={currentSrc} className=\"absolute inset-0 z-0 size-full scale-110 object-cover blur-xl brightness-60\" />\n <img\n id={currentSrc}\n ref={imageRef}\n src={currentSrc}\n alt={alt}\n loading=\"lazy\"\n className={cn(\n 'shadow-card relative h-[120%] w-auto object-cover transition-opacity duration-300',\n isLoaded && 'opacity-100',\n !isLoaded && 'pointer-events-none opacity-0',\n )}\n onLoad={handleLoad}\n onError={handleError}\n />\n </div>\n )\n}\n"],"mappings":"iPAiBaA,GAA0B,CAAE,MAAK,MAAK,QAAO,SAAQ,aAAa,EAAG,aAAa,IAAK,YAAW,aAAc,CAC3H,IAAM,GAAA,EAAA,EAAA,QAAoC,MACpC,CAAC,EAAY,IAAA,EAAA,EAAA,UAA8C,GAC3D,CAAC,EAAY,IAAA,EAAA,EAAA,UAAkC,GAC/C,CAAC,EAAU,IAAA,EAAA,EAAA,UAAiC,IAC5C,CAAC,EAAU,IAAA,EAAA,EAAA,UAAiC,IAE5C,GAAA,EAAA,EAAA,iBAA+B,CACnC,EAAY,KACX,IAEG,GAAA,EAAA,EAAA,iBAAgC,CACpC,GAAI,EAAa,EAAY,CAE3B,EAAY,IACZ,IAAM,EAAgB,EAAa,EACnC,EAAc,GAGd,eAAiB,CACf,IAAM,EAAc,UAAU,KAAK,MAAM,WAAW,IACpD,EAAc,EAAM,IACnB,EAAa,GAChB,OAGF,EAAY,IACZ,EAAY,IACZ,EAAc,IACb,CAAC,EAAY,EAAY,EAAY,IAaxC,OAXI,GAEA,EAAA,EAAA,KAAC,MAAA,CAAI,MAAO,CAAE,QAAO,UAAU,WAAA,EAAA,EAAA,IAAc,mCAAoC,aAC/E,EAAA,EAAA,MAAC,MAAA,CAAI,UAAU,gHACb,EAAA,EAAA,KAACC,EAAAA,gBAAAA,CAAgB,UAAU,2CAC3B,EAAA,EAAA,KAAC,OAAA,CAAK,UAAU,oEAA2D,+BAOjF,EAAA,EAAA,MAAC,MAAA,CAAI,MAAO,CAAE,QAAO,UAAU,WAAA,EAAA,EAAA,IAAc,uEAAwE,GAAqB,oBACvI,CAAC,IAAY,EAAA,EAAA,KAACC,EAAAA,SAAAA,CAAS,UAAU,+EAClC,EAAA,EAAA,KAAC,MAAA,CAAI,IAAK,EAAY,UAAU,iFAChC,EAAA,EAAA,KAAC,MAAA,CACC,GAAI,EACJ,IAAK,EACL,IAAK,EACA,MACL,QAAQ,OACR,WAAA,EAAA,EAAA,IACE,oFACA,GAAY,cACZ,CAAC,GAAY,iCAEf,OAAQ,EACR,QAAS"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"input-BtT8HfYE.js","names":[],"sources":["../packages/components/ui/input.tsx"],"sourcesContent":["'use client'\nimport { useCallback } from 'react'\nimport { cn } from '@customafk/react-toolkit/utils'\n\nfunction Input({\n className,\n onChange,\n onValueChange,\n ...props\n}: React.ComponentProps<'input'> & {\n onValueChange?: (value: string) => void\n}) {\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(e)\n onValueChange?.(e.target.value)\n },\n [onChange, onValueChange],\n )\n return (\n <input\n data-slot=\"input\"\n className={cn(\n // Base styles\n 'flex h-9 w-full px-3 py-2',\n 'rounded-md border transition-all duration-200',\n 'text-text-positive-strong bg-transparent text-sm',\n\n // Border and shadow styles\n 'border-border-weak shadow-input',\n 'caret-primary outline-none',\n\n // Placeholder styling\n 'placeholder:text-text-positive-muted',\n\n // State styles\n 'hover:border-border hover:shadow-input',\n 'focus:border-primary-strong focus:shadow-none',\n 'focus-visible:ring-primary-muted focus-visible:ring-4',\n\n // Invalid state\n 'aria-invalid:border-danger aria-invalid:ring-danger-muted',\n 'aria-invalid:hover:border-danger-strong',\n\n // Disabled state\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'disabled:pointer-events-none',\n 'disabled:border-border-weak/50 disabled:bg-secondary-muted/10',\n\n // Additional custom styling\n className,\n )}\n {...props}\n onChange={handleChange}\n />\n )\n}\n\nexport { Input }\n"],"mappings":"gIAIA,SAAS,EAAM,CACb,YACA,WACA,gBACA,GAAG,GAGF,CACD,IAAM,EAAe,EAClB,GAA2C,CAC1C,IAAW,GACX,IAAgB,EAAE,OAAO,QAE3B,CAAC,EAAU,IAEb,OACE,EAAC,QAAA,CACC,YAAU,QACV,UAAW,EAET,4BACA,gDACA,mDAGA,kCACA,6BAGA,uCAGA,yCACA,gDACA,wDAGA,4DACA,0CAGA,kDACA,+BACA,gEAGA,GAEF,GAAI,EACJ,SAAU"}
@@ -1,2 +0,0 @@
1
- const e=require(`./chunk-CUT6urMc.cjs`),t=e.__toESM(require(`@customafk/react-toolkit/utils`)),n=e.__toESM(require(`react`)),r=e.__toESM(require(`react/jsx-runtime`));function i({className:e,onChange:i,onValueChange:a,...o}){let s=(0,n.useCallback)(e=>{i?.(e),a?.(e.target.value)},[i,a]);return(0,r.jsx)(`input`,{"data-slot":`input`,className:(0,t.cn)(`flex h-9 w-full px-3 py-2`,`rounded-md border transition-all duration-200`,`text-text-positive-strong bg-transparent text-sm`,`border-border-weak shadow-input`,`caret-primary outline-none`,`placeholder:text-text-positive-muted`,`hover:border-border hover:shadow-input`,`focus:border-primary-strong focus:shadow-none`,`focus-visible:ring-primary-muted focus-visible:ring-4`,`aria-invalid:border-danger aria-invalid:ring-danger-muted`,`aria-invalid:hover:border-danger-strong`,`disabled:cursor-not-allowed disabled:opacity-50`,`disabled:pointer-events-none`,`disabled:border-border-weak/50 disabled:bg-secondary-muted/10`,e),...o,onChange:s})}Object.defineProperty(exports,`Input`,{enumerable:!0,get:function(){return i}});
2
- //# sourceMappingURL=input-DfGojpRF.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"input-DfGojpRF.cjs","names":[],"sources":["../packages/components/ui/input.tsx"],"sourcesContent":["'use client'\nimport { useCallback } from 'react'\nimport { cn } from '@customafk/react-toolkit/utils'\n\nfunction Input({\n className,\n onChange,\n onValueChange,\n ...props\n}: React.ComponentProps<'input'> & {\n onValueChange?: (value: string) => void\n}) {\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(e)\n onValueChange?.(e.target.value)\n },\n [onChange, onValueChange],\n )\n return (\n <input\n data-slot=\"input\"\n className={cn(\n // Base styles\n 'flex h-9 w-full px-3 py-2',\n 'rounded-md border transition-all duration-200',\n 'text-text-positive-strong bg-transparent text-sm',\n\n // Border and shadow styles\n 'border-border-weak shadow-input',\n 'caret-primary outline-none',\n\n // Placeholder styling\n 'placeholder:text-text-positive-muted',\n\n // State styles\n 'hover:border-border hover:shadow-input',\n 'focus:border-primary-strong focus:shadow-none',\n 'focus-visible:ring-primary-muted focus-visible:ring-4',\n\n // Invalid state\n 'aria-invalid:border-danger aria-invalid:ring-danger-muted',\n 'aria-invalid:hover:border-danger-strong',\n\n // Disabled state\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'disabled:pointer-events-none',\n 'disabled:border-border-weak/50 disabled:bg-secondary-muted/10',\n\n // Additional custom styling\n className,\n )}\n {...props}\n onChange={handleChange}\n />\n )\n}\n\nexport { Input }\n"],"mappings":"uKAIA,SAAS,EAAM,CACb,YACA,WACA,gBACA,GAAG,GAGF,CACD,IAAM,GAAA,EAAA,EAAA,aACH,GAA2C,CAC1C,IAAW,GACX,IAAgB,EAAE,OAAO,QAE3B,CAAC,EAAU,IAEb,OACE,EAAA,EAAA,KAAC,QAAA,CACC,YAAU,QACV,WAAA,EAAA,EAAA,IAEE,4BACA,gDACA,mDAGA,kCACA,6BAGA,uCAGA,yCACA,gDACA,wDAGA,4DACA,0CAGA,kDACA,+BACA,gEAGA,GAEF,GAAI,EACJ,SAAU"}
@@ -1,2 +0,0 @@
1
- const e=require(`./chunk-CUT6urMc.cjs`),t=e.__toESM(require(`@customafk/react-toolkit/utils`)),n=e.__toESM(require(`react/jsx-runtime`)),r=e.__toESM(require(`radix-ui`));function i({className:e,...i}){return(0,n.jsx)(r.Label.Root,{"data-slot":`label`,className:(0,t.cn)(`text-text-positive`,`flex items-center gap-2`,`text-sm leading-none font-medium select-none`,`group-data-[disabled=true]:pointer-events-none`,`group-data-[disabled=true]:opacity-50`,`peer-disabled:cursor-not-allowed`,`peer-disabled:opacity-50`,e),...i})}Object.defineProperty(exports,`Label`,{enumerable:!0,get:function(){return i}});
2
- //# sourceMappingURL=label-CHNSlaoz.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"label-CHNSlaoz.cjs","names":["LabelPrimitive"],"sources":["../packages/components/ui/label.tsx"],"sourcesContent":["'use client'\nimport { cn } from '@customafk/react-toolkit/utils'\n\nimport { Label as LabelPrimitive } from 'radix-ui'\n\nfunction Label({ className, ...props }: React.ComponentProps<typeof LabelPrimitive.Root>) {\n return (\n <LabelPrimitive.Root\n data-slot=\"label\"\n className={cn(\n 'text-text-positive',\n 'flex items-center gap-2',\n 'text-sm leading-none font-medium select-none',\n 'group-data-[disabled=true]:pointer-events-none',\n 'group-data-[disabled=true]:opacity-50',\n 'peer-disabled:cursor-not-allowed',\n 'peer-disabled:opacity-50',\n className,\n )}\n {...props}\n />\n )\n}\n\nexport { Label }\n"],"mappings":"0KAKA,SAAS,EAAM,CAAE,YAAW,GAAG,GAA2D,CACxF,OACE,EAAA,EAAA,KAACA,EAAAA,MAAe,KAAA,CACd,YAAU,QACV,WAAA,EAAA,EAAA,IACE,qBACA,0BACA,+CACA,iDACA,wCACA,mCACA,2BACA,GAEF,GAAI"}
@@ -1,2 +0,0 @@
1
- const e=require(`./chunk-CUT6urMc.cjs`),t=require(`./button-CuV2l4ge.cjs`),n=require(`./command-DHGZlBKd.cjs`),r=e.__toESM(require(`lucide-react`)),i=e.__toESM(require(`@customafk/react-toolkit/utils`)),a=e.__toESM(require(`react`)),o=e.__toESM(require(`react/jsx-runtime`)),s=e.__toESM(require(`cmdk`));function c(e,t){let[n,r]=(0,a.useState)(e);return(0,a.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=(0,a.forwardRef)(({className:e,...t},n)=>{let r=(0,s.useCommandState)(e=>e.filtered.count===0);return r?(0,o.jsx)(`div`,{ref:n,className:(0,i.cn)(`px-2 py-4 text-center text-sm`,e),"cmdk-empty":``,role:`presentation`,...t}):null});f.displayName=`CommandEmpty`;const p=(0,a.forwardRef)(({value:e,onChange:p,placeholder:m,defaultOptions:h=[],options:g,delay:_,onSearch:v,onSearchSync:y,loadingIndicator:b,emptyIndicator:x,maxSelected:S=9007199254740991,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=(0,a.useRef)(null),R=(0,a.useRef)(null),[z,B]=(0,a.useState)(!1),[V,H]=(0,a.useState)(!1),[U,W]=(0,a.useState)(!1),[G,K]=(0,a.useState)(e||[]),[q,J]=(0,a.useState)(l(h,E)),[Y,X]=(0,a.useState)(``),Z=c(Y,_||500);(0,a.useImperativeHandle)(I,()=>({selectedValue:[...G],input:L.current,focus:()=>L?.current?.focus(),reset:()=>K([])}),[G]);let Q=(0,a.useCallback)(e=>{R.current&&!R.current.contains(e.target)&&L.current&&!L.current.contains(e.target)&&(B(!1),L.current.blur())},[]),$=(0,a.useCallback)(e=>{let t=G.filter(t=>t.value!==e.value);K(t),p?.(t)},[p,G]),ee=(0,a.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]);(0,a.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]),(0,a.useEffect)(()=>{e&&K(e)},[e]),(0,a.useEffect)(()=>{if(!g||v)return;let e=l(g||[],E);JSON.stringify(e)!==JSON.stringify(q)&&J(e)},[h,g,E,v,q]),(0,a.useEffect)(()=>{let e=()=>{let e=y?.(Z);J(l(e||[],E))},t=async()=>{!y||!z||(j&&e(),Z&&e())};t()},[Z,E,z,j]),(0,a.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,o.jsx)(n.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=(0,a.useCallback)(()=>{if(x)return v&&!A&&Object.keys(q).length===0?(0,o.jsx)(n.CommandItem,{value:`-`,disabled:!0,children:x}):(0,o.jsx)(f,{children:x})},[A,x,v,q]),re=(0,a.useMemo)(()=>u(q,G),[q,G]),ie=(0,a.useCallback)(()=>{if(M?.filter)return M.filter;if(A)return(e,t)=>e.toLowerCase().includes(t.toLowerCase())?1:-1},[A,M?.filter]);return(0,o.jsxs)(n.Command,{ref:R,...M,onKeyDown:e=>{ee(e),M?.onKeyDown?.(e)},className:(0,i.cn)(`h-auto overflow-visible bg-transparent`,M?.className),shouldFilter:M?.shouldFilter===void 0?!v:M.shouldFilter,filter:ie(),children:[(0,o.jsx)(`div`,{className:(0,i.cn)(`border-border-weak relative rounded-md border text-sm transition-shadow`,`focus-within:border-primary`,`focus-within:ring-primary-weak`,`focus-within:ring-4`,`focus-within:outline-hidden`,`has-disabled:bg-muted`,`has-disabled:text-muted-foreground`,G.length!==0&&`p-1`,!T&&G.length!==0&&`cursor-text`,!P&&`pe-9`,D),onClick:()=>{T||L?.current?.focus()},children:(0,o.jsxs)(`div`,{className:`flex flex-wrap gap-1`,children:[G.map(e=>(0,o.jsxs)(`div`,{className:(0,i.cn)(`animate-fadeIn`,`bg-background`,`hover:bg-background`,`border-border-weak border border-solid`,`text-text-positive-weak relative inline-flex h-7 cursor-default items-center rounded-md 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,o.jsx)(`button`,{type:`button`,disabled:T||e.fixed,className:(0,i.cn)(`text-text-positive-muted 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-primary-weak`,`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,o.jsx)(r.X,{size:14,strokeWidth:2,"aria-hidden":`true`})})]},e.value)),(0,o.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:(0,i.cn)(`placeholder:text-text-positive-muted 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,o.jsx)(`button`,{type:`button`,onClick:()=>{K(G.filter(e=>e.fixed)),p?.(G.filter(e=>e.fixed))},className:(0,i.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-text-positive`,`focus-visible:outline-primary-weak`,(P||T||G.length<1||G.filter(({fixed:e})=>e).length===G.length)&&`hidden`),"aria-label":`Clear all`,children:(0,o.jsx)(r.X,{size:16,strokeWidth:2,"aria-hidden":`true`})})]})}),(0,o.jsx)(`div`,{className:`relative`,children:(0,o.jsx)(`div`,{className:(0,i.cn)(`shadow-dropdown absolute top-2 z-10 w-full overflow-hidden rounded-lg`,`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,o.jsxs)(n.CommandList,{className:`shadow-lg outline-hidden`,onMouseLeave:()=>{H(!1)},onMouseEnter:()=>{H(!0)},onMouseUp:()=>{L?.current?.focus()},children:[F&&(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.CommandSeparator,{}),(0,o.jsx)(n.CommandGroup,{children:(0,o.jsxs)(t.Button,{type:`button`,variant:`ghost`,className:`w-full font-normal [&_div]:justify-start`,onClick:F,children:[(0,o.jsx)(r.PlusIcon,{size:14,className:`opacity-60`,"aria-hidden":`true`}),`Thêm mới`]})})]}),U?b:(0,o.jsxs)(o.Fragment,{children:[ne(),te(),!k&&(0,o.jsx)(n.CommandItem,{value:`-`,className:`hidden`}),Object.entries(re).map(([e,t])=>(0,o.jsx)(n.CommandGroup,{heading:e,className:`h-full overflow-auto`,children:t.map(e=>(0,o.jsx)(n.CommandItem,{value:e.value,disabled:e.disable,onMouseDown:e=>{e.preventDefault(),e.stopPropagation()},onSelect:()=>{if(G.length>=S){C?.(G.length);return}let t=[...G,e];X(``),K(t),p?.(t)},className:(0,i.cn)(`cursor-pointer`,e.disable&&`cursor-not-allowed opacity-50`),children:e.label},e.value))},e))]})]})})})]})});p.displayName=`MultipleSelector`,Object.defineProperty(exports,`MultipleSelector`,{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,`useDebounce`,{enumerable:!0,get:function(){return c}});
2
- //# sourceMappingURL=multi-select-C0dFenI-.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"multi-select-C0dFenI-.cjs","names":["groupOption: GroupOption","CommandItem","value","Command","X","CommandPrimitive","CommandList","CommandSeparator","CommandGroup","Button","PlusIcon"],"sources":["../packages/components/ui/multi-select.tsx"],"sourcesContent":["'use client'\nimport { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react'\nimport { cn } from '@customafk/react-toolkit/utils'\n\nimport { PlusIcon, X } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { Command, CommandGroup, CommandItem, CommandList, CommandSeparator } from '@/components/ui/command'\n\nimport { Command as CommandPrimitive, useCommandState } from 'cmdk'\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<React.ComponentPropsWithoutRef<typeof CommandPrimitive.Input>, 'value' | 'placeholder' | 'disabled'>\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] = useState<T>(value)\n\n 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((val) => !picked.find((p) => p.value === val.value))\n }\n return cloneOption\n}\n\nfunction isOptionsExist(groupOption: GroupOption, targetOption: Option[]) {\n for (const [, value] of Object.entries(groupOption)) {\n if (value.some((option) => targetOption.find((p) => p.value === option.value))) {\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 = forwardRef<HTMLDivElement, React.ComponentProps<typeof CommandPrimitive.Empty>>(({ className, ...props }, forwardedRef) => {\n const render = useCommandState((state) => state.filtered.count === 0)\n\n if (!render) return null\n\n return <div ref={forwardedRef} className={cn('px-2 py-4 text-center text-sm', className)} cmdk-empty=\"\" role=\"presentation\" {...props} />\n})\n\nCommandEmpty.displayName = 'CommandEmpty'\n\nexport const MultipleSelector = forwardRef<MultipleSelectorRef, MultipleSelectorProps>(\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 = useRef<HTMLInputElement>(null)\n const dropdownRef = useRef<HTMLDivElement>(null) // Added this\n\n const [open, setOpen] = useState(false)\n const [onScrollbar, setOnScrollbar] = useState(false)\n const [isLoading, setIsLoading] = useState(false)\n\n const [selected, setSelected] = useState<Option[]>(value || [])\n const [options, setOptions] = useState<GroupOption>(transToGroupOption(arrayDefaultOptions, groupBy))\n const [inputValue, setInputValue] = useState('')\n\n const debouncedSearchTerm = useDebounce(inputValue, delay || 500)\n\n 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 = useCallback((event: MouseEvent | TouchEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node) && inputRef.current && !inputRef.current.contains(event.target as Node)) {\n setOpen(false)\n inputRef.current.blur()\n }\n }, [])\n\n const handleUnselect = 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 = 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 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 useEffect(() => {\n if (value) {\n setSelected(value)\n }\n }, [value])\n\n 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 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 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 (isOptionsExist(options, [{ value: inputValue, label: inputValue }]) || selected.find((s) => s.value === inputValue)) {\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 = 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 = useMemo<GroupOption>(() => removePickedOption(options, selected), [options, selected])\n\n /** Avoid Creatable Selector freezing or lagging when paste a long string. */\n const commandFilter = 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('h-auto overflow-visible bg-transparent', commandProps?.className)}\n shouldFilter={commandProps?.shouldFilter !== undefined ? commandProps.shouldFilter : !onSearch} // 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-border-weak relative rounded-md border text-sm transition-shadow',\n 'focus-within:border-primary',\n 'focus-within:ring-primary-weak',\n 'focus-within:ring-4',\n 'focus-within:outline-hidden',\n 'has-disabled:bg-muted',\n 'has-disabled:text-muted-foreground',\n selected.length !== 0 && 'p-1',\n !disabled && selected.length !== 0 && 'cursor-text',\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',\n 'bg-background',\n 'hover:bg-background',\n 'border-border-weak border border-solid',\n 'text-text-positive-weak relative inline-flex h-7 cursor-default items-center rounded-md ps-2 pe-7 pl-2 text-xs font-medium transition-all',\n 'disabled:cursor-not-allowed',\n 'disabled:opacity-50',\n '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-text-positive-muted 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-primary-weak',\n 'disabled:hover:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50',\n )}\n onKeyDown={(e) => {\n if (e.key !== 'Enter') return\n handleUnselect(option)\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={hidePlaceholderWhenSelected && selected.length !== 0 ? '' : placeholder}\n className={cn(\n 'placeholder:text-text-positive-muted 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-text-positive',\n 'focus-visible:outline-primary-weak',\n (hideClearAllButton || disabled || selected.length < 1 || selected.filter(({ fixed }) => fixed).length === selected.length) && '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 'shadow-dropdown absolute top-2 z-10 w-full overflow-hidden rounded-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 !open && 'hidden',\n )}\n data-state={open ? 'open' : 'closed'}\n >\n {open && (\n <CommandList\n className=\"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 type=\"button\" variant=\"ghost\" className=\"w-full font-normal [&_div]:justify-start\" onClick={onAddNewItem}>\n <PlusIcon size={14} className=\"opacity-60\" aria-hidden=\"true\" />\n Thêm mới\n </Button>\n </CommandGroup>\n </>\n )}\n {isLoading ? (\n LoadingIndicator\n ) : (\n <>\n {EmptyItem()}\n {CreatableItem()}\n {!selectFirstItem && <CommandItem value=\"-\" className=\"hidden\" />}\n {Object.entries(selectables).map(([key, dropdowns]) => (\n <CommandGroup key={key} heading={key} className=\"h-full overflow-auto\">\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 const newOptions = [...selected, option]\n setInputValue('')\n setSelected(newOptions)\n onChange?.(newOptions)\n }}\n className={cn('cursor-pointer', option.disable && 'cursor-not-allowed opacity-50')}\n >\n {option.label}\n </CommandItem>\n )\n })}\n </CommandGroup>\n ))}\n </>\n )}\n </CommandList>\n )}\n </div>\n </div>\n </Command>\n )\n },\n)\n\nMultipleSelector.displayName = 'MultipleSelector'\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import{Button as e}from"./button-DhQJ9Ey8.js";import{Command as t,CommandGroup as n,CommandItem as r,CommandList as ee,CommandSeparator as i}from"./command-DhSE6UaR.js";import{PlusIcon as te,X as a}from"lucide-react";import{cn as o}from"@customafk/react-toolkit/utils";import{forwardRef as s,useCallback as c,useEffect as l,useImperativeHandle as ne,useMemo as re,useRef as u,useState as d}from"react";import{Fragment as f,jsx as p,jsxs as m}from"react/jsx-runtime";import{Command as h,useCommandState as g}from"cmdk";function _(e,t){let[n,r]=d(e);return l(()=>{let n=setTimeout(()=>r(e),t||500);return()=>{clearTimeout(n)}},[e,t]),n}function v(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 ie(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 ae(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 y=s(({className:e,...t},n)=>{let r=g(e=>e.filtered.count===0);return r?p(`div`,{ref:n,className:o(`px-2 py-4 text-center text-sm`,e),"cmdk-empty":``,role:`presentation`,...t}):null});y.displayName=`CommandEmpty`;const b=s(({value:s,onChange:g,placeholder:b,defaultOptions:x=[],options:S,delay:oe,onSearch:C,onSearchSync:w,loadingIndicator:se,emptyIndicator:T,maxSelected:E=9007199254740991,onMaxSelected:D,hidePlaceholderWhenSelected:O,disabled:k,groupBy:A,className:ce,badgeClassName:le,selectFirstItem:ue=!0,creatable:j=!1,triggerSearchOnFocus:M=!1,commandProps:N,inputProps:P,hideClearAllButton:F=!1,onAddNewItem:I},de)=>{let L=u(null),R=u(null),[z,B]=d(!1),[V,H]=d(!1),[U,W]=d(!1),[G,K]=d(s||[]),[q,J]=d(v(x,A)),[Y,X]=d(``),Z=_(Y,oe||500);ne(de,()=>({selectedValue:[...G],input:L.current,focus:()=>L?.current?.focus(),reset:()=>K([])}),[G]);let Q=c(e=>{R.current&&!R.current.contains(e.target)&&L.current&&!L.current.contains(e.target)&&(B(!1),L.current.blur())},[]),$=c(e=>{let t=G.filter(t=>t.value!==e.value);K(t),g?.(t)},[g,G]),fe=c(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]);l(()=>(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]),l(()=>{s&&K(s)},[s]),l(()=>{if(!S||C)return;let e=v(S||[],A);JSON.stringify(e)!==JSON.stringify(q)&&J(e)},[x,S,A,C,q]),l(()=>{let e=()=>{let e=w?.(Z);J(v(e||[],A))},t=async()=>{!w||!z||(M&&e(),Z&&e())};t()},[Z,A,z,M]),l(()=>{let e=async()=>{W(!0);let e=await C?.(Z);J(v(e||[],A)),W(!1)},t=async()=>{!C||!z||(M&&await e(),Z&&await e())};t()},[Z,A,z,M]);let pe=()=>{if(!j||ae(q,[{value:Y,label:Y}])||G.find(e=>e.value===Y))return;let e=p(r,{value:Y,className:`cursor-pointer`,onMouseDown:e=>{e.preventDefault(),e.stopPropagation()},onSelect:e=>{if(G.length>=E){D?.(G.length);return}X(``);let t=[...G,{value:e,label:e}];K(t),g?.(t)},children:`Create "${Y}"`});if(!C&&Y.length>0||C&&Z.length>0&&!U)return e},me=c(()=>{if(T)return C&&!j&&Object.keys(q).length===0?p(r,{value:`-`,disabled:!0,children:T}):p(y,{children:T})},[j,T,C,q]),he=re(()=>ie(q,G),[q,G]),ge=c(()=>{if(N?.filter)return N.filter;if(j)return(e,t)=>e.toLowerCase().includes(t.toLowerCase())?1:-1},[j,N?.filter]);return m(t,{ref:R,...N,onKeyDown:e=>{fe(e),N?.onKeyDown?.(e)},className:o(`h-auto overflow-visible bg-transparent`,N?.className),shouldFilter:N?.shouldFilter===void 0?!C:N.shouldFilter,filter:ge(),children:[p(`div`,{className:o(`border-border-weak relative rounded-md border text-sm transition-shadow`,`focus-within:border-primary`,`focus-within:ring-primary-weak`,`focus-within:ring-4`,`focus-within:outline-hidden`,`has-disabled:bg-muted`,`has-disabled:text-muted-foreground`,G.length!==0&&`p-1`,!k&&G.length!==0&&`cursor-text`,!F&&`pe-9`,ce),onClick:()=>{k||L?.current?.focus()},children:m(`div`,{className:`flex flex-wrap gap-1`,children:[G.map(e=>m(`div`,{className:o(`animate-fadeIn`,`bg-background`,`hover:bg-background`,`border-border-weak border border-solid`,`text-text-positive-weak relative inline-flex h-7 cursor-default items-center rounded-md ps-2 pe-7 pl-2 text-xs font-medium transition-all`,`disabled:cursor-not-allowed`,`disabled:opacity-50`,`data-fixed:pe-2`,le),"data-fixed":e.fixed,"data-disabled":k||void 0,children:[e.label,p(`button`,{type:`button`,disabled:k||e.fixed,className:o(`text-text-positive-muted 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-primary-weak`,`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:p(a,{size:14,strokeWidth:2,"aria-hidden":`true`})})]},e.value)),p(h.Input,{...P,ref:L,value:Y,disabled:k,onValueChange:e=>{X(e),P?.onValueChange?.(e)},onBlur:e=>{V||B(!1),P?.onBlur?.(e)},onFocus:e=>{B(!0),M&&C?.(Z),P?.onFocus?.(e)},placeholder:O&&G.length!==0?``:b,className:o(`placeholder:text-text-positive-muted flex-1 bg-transparent outline-hidden`,`disabled:placeholder:text-transparent`,{"w-full":O,"px-3 py-2":G.length===0,"ml-1":G.length!==0},P?.className)}),p(`button`,{type:`button`,onClick:()=>{K(G.filter(e=>e.fixed)),g?.(G.filter(e=>e.fixed))},className:o(`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-text-positive`,`focus-visible:outline-primary-weak`,(F||k||G.length<1||G.filter(({fixed:e})=>e).length===G.length)&&`hidden`),"aria-label":`Clear all`,children:p(a,{size:16,strokeWidth:2,"aria-hidden":`true`})})]})}),p(`div`,{className:`relative`,children:p(`div`,{className:o(`shadow-dropdown absolute top-2 z-10 w-full overflow-hidden rounded-lg`,`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&&m(ee,{className:`shadow-lg outline-hidden`,onMouseLeave:()=>{H(!1)},onMouseEnter:()=>{H(!0)},onMouseUp:()=>{L?.current?.focus()},children:[I&&m(f,{children:[p(i,{}),p(n,{children:m(e,{type:`button`,variant:`ghost`,className:`w-full font-normal [&_div]:justify-start`,onClick:I,children:[p(te,{size:14,className:`opacity-60`,"aria-hidden":`true`}),`Thêm mới`]})})]}),U?se:m(f,{children:[me(),pe(),!ue&&p(r,{value:`-`,className:`hidden`}),Object.entries(he).map(([e,t])=>p(n,{heading:e,className:`h-full overflow-auto`,children:t.map(e=>p(r,{value:e.value,disabled:e.disable,onMouseDown:e=>{e.preventDefault(),e.stopPropagation()},onSelect:()=>{if(G.length>=E){D?.(G.length);return}let t=[...G,e];X(``),K(t),g?.(t)},className:o(`cursor-pointer`,e.disable&&`cursor-not-allowed opacity-50`),children:e.label},e.value))},e))]})]})})})]})});b.displayName=`MultipleSelector`;export{b as MultipleSelector,_ as useDebounce};
2
- //# sourceMappingURL=multi-select-l0HITJuv.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"multi-select-l0HITJuv.js","names":["groupOption: GroupOption","value","Command","CommandPrimitive"],"sources":["../packages/components/ui/multi-select.tsx"],"sourcesContent":["'use client'\nimport { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react'\nimport { cn } from '@customafk/react-toolkit/utils'\n\nimport { PlusIcon, X } from 'lucide-react'\n\nimport { Button } from '@/components/ui/button'\nimport { Command, CommandGroup, CommandItem, CommandList, CommandSeparator } from '@/components/ui/command'\n\nimport { Command as CommandPrimitive, useCommandState } from 'cmdk'\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<React.ComponentPropsWithoutRef<typeof CommandPrimitive.Input>, 'value' | 'placeholder' | 'disabled'>\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] = useState<T>(value)\n\n 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((val) => !picked.find((p) => p.value === val.value))\n }\n return cloneOption\n}\n\nfunction isOptionsExist(groupOption: GroupOption, targetOption: Option[]) {\n for (const [, value] of Object.entries(groupOption)) {\n if (value.some((option) => targetOption.find((p) => p.value === option.value))) {\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 = forwardRef<HTMLDivElement, React.ComponentProps<typeof CommandPrimitive.Empty>>(({ className, ...props }, forwardedRef) => {\n const render = useCommandState((state) => state.filtered.count === 0)\n\n if (!render) return null\n\n return <div ref={forwardedRef} className={cn('px-2 py-4 text-center text-sm', className)} cmdk-empty=\"\" role=\"presentation\" {...props} />\n})\n\nCommandEmpty.displayName = 'CommandEmpty'\n\nexport const MultipleSelector = forwardRef<MultipleSelectorRef, MultipleSelectorProps>(\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 = useRef<HTMLInputElement>(null)\n const dropdownRef = useRef<HTMLDivElement>(null) // Added this\n\n const [open, setOpen] = useState(false)\n const [onScrollbar, setOnScrollbar] = useState(false)\n const [isLoading, setIsLoading] = useState(false)\n\n const [selected, setSelected] = useState<Option[]>(value || [])\n const [options, setOptions] = useState<GroupOption>(transToGroupOption(arrayDefaultOptions, groupBy))\n const [inputValue, setInputValue] = useState('')\n\n const debouncedSearchTerm = useDebounce(inputValue, delay || 500)\n\n 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 = useCallback((event: MouseEvent | TouchEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node) && inputRef.current && !inputRef.current.contains(event.target as Node)) {\n setOpen(false)\n inputRef.current.blur()\n }\n }, [])\n\n const handleUnselect = 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 = 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 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 useEffect(() => {\n if (value) {\n setSelected(value)\n }\n }, [value])\n\n 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 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 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 (isOptionsExist(options, [{ value: inputValue, label: inputValue }]) || selected.find((s) => s.value === inputValue)) {\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 = 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 = useMemo<GroupOption>(() => removePickedOption(options, selected), [options, selected])\n\n /** Avoid Creatable Selector freezing or lagging when paste a long string. */\n const commandFilter = 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('h-auto overflow-visible bg-transparent', commandProps?.className)}\n shouldFilter={commandProps?.shouldFilter !== undefined ? commandProps.shouldFilter : !onSearch} // 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-border-weak relative rounded-md border text-sm transition-shadow',\n 'focus-within:border-primary',\n 'focus-within:ring-primary-weak',\n 'focus-within:ring-4',\n 'focus-within:outline-hidden',\n 'has-disabled:bg-muted',\n 'has-disabled:text-muted-foreground',\n selected.length !== 0 && 'p-1',\n !disabled && selected.length !== 0 && 'cursor-text',\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',\n 'bg-background',\n 'hover:bg-background',\n 'border-border-weak border border-solid',\n 'text-text-positive-weak relative inline-flex h-7 cursor-default items-center rounded-md ps-2 pe-7 pl-2 text-xs font-medium transition-all',\n 'disabled:cursor-not-allowed',\n 'disabled:opacity-50',\n '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-text-positive-muted 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-primary-weak',\n 'disabled:hover:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50',\n )}\n onKeyDown={(e) => {\n if (e.key !== 'Enter') return\n handleUnselect(option)\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={hidePlaceholderWhenSelected && selected.length !== 0 ? '' : placeholder}\n className={cn(\n 'placeholder:text-text-positive-muted 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-text-positive',\n 'focus-visible:outline-primary-weak',\n (hideClearAllButton || disabled || selected.length < 1 || selected.filter(({ fixed }) => fixed).length === selected.length) && '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 'shadow-dropdown absolute top-2 z-10 w-full overflow-hidden rounded-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 !open && 'hidden',\n )}\n data-state={open ? 'open' : 'closed'}\n >\n {open && (\n <CommandList\n className=\"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 type=\"button\" variant=\"ghost\" className=\"w-full font-normal [&_div]:justify-start\" onClick={onAddNewItem}>\n <PlusIcon size={14} className=\"opacity-60\" aria-hidden=\"true\" />\n Thêm mới\n </Button>\n </CommandGroup>\n </>\n )}\n {isLoading ? (\n LoadingIndicator\n ) : (\n <>\n {EmptyItem()}\n {CreatableItem()}\n {!selectFirstItem && <CommandItem value=\"-\" className=\"hidden\" />}\n {Object.entries(selectables).map(([key, dropdowns]) => (\n <CommandGroup key={key} heading={key} className=\"h-full overflow-auto\">\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 const newOptions = [...selected, option]\n setInputValue('')\n setSelected(newOptions)\n onChange?.(newOptions)\n }}\n className={cn('cursor-pointer', option.disable && 'cursor-not-allowed opacity-50')}\n >\n {option.label}\n </CommandItem>\n )\n })}\n </CommandGroup>\n ))}\n </>\n )}\n </CommandList>\n )}\n </div>\n </div>\n </Command>\n )\n },\n)\n\nMultipleSelector.displayName = 'MultipleSelector'\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- const e=require(`./chunk-CUT6urMc.cjs`),t=e.__toESM(require(`@customafk/react-toolkit/utils`)),n=e.__toESM(require(`react/jsx-runtime`)),r=e.__toESM(require(`class-variance-authority`)),i=(0,r.cva)(``,{variants:{variant:{p:`leading-7 [&:not(:first-child)]:mt-6`,sm:`text-sm leading-none font-normal`,lg:`text-lg font-semibold`,lead:`text-text-positive-strong text-xl`,muted:`text-text-positive-muted text-sm`},default:{variant:`sm`}}}),a=({variant:e=`p`,className:r,children:a})=>(0,n.jsx)(`p`,{className:(0,t.cn)(`text-text-positive`,i({variant:e}),r),children:a});Object.defineProperty(exports,`Paragraph`,{enumerable:!0,get:function(){return a}});
2
- //# sourceMappingURL=paragraph-BLvW7xdo.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"paragraph-BLvW7xdo.cjs","names":[],"sources":["../packages/components/typography/paragraph.tsx"],"sourcesContent":["'use client'\nimport { cn } from '@customafk/react-toolkit/utils'\n\nimport { cva } from 'class-variance-authority'\n\ntype Props = {\n variant?: 'p' | 'muted' | 'lead' | 'sm' | 'lg'\n className?: string\n children?: React.ReactNode\n}\n\nconst paragraphVariants = cva('', {\n variants: {\n variant: {\n p: 'leading-7 [&:not(:first-child)]:mt-6',\n sm: 'text-sm leading-none font-normal',\n lg: 'text-lg font-semibold',\n lead: 'text-text-positive-strong text-xl',\n muted: 'text-text-positive-muted text-sm',\n },\n default: {\n variant: 'sm',\n },\n },\n})\n\nexport const Paragraph = ({ variant = 'p', className, children }: Props) => {\n return <p className={cn('text-text-positive', paragraphVariants({ variant }), className)}>{children}</p>\n}\n"],"mappings":"0LAWM,GAAA,EAAA,EAAA,KAAwB,GAAI,CAChC,SAAU,CACR,QAAS,CACP,EAAG,uCACH,GAAI,mCACJ,GAAI,wBACJ,KAAM,oCACN,MAAO,oCAET,QAAS,CACP,QAAS,SAKF,GAAa,CAAE,UAAU,IAAK,YAAW,eAC7C,EAAA,EAAA,KAAC,IAAA,CAAE,WAAA,EAAA,EAAA,IAAc,qBAAsB,EAAkB,CAAE,YAAY,GAAa"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"popover-BJWOgxQ5.js","names":["Popover","PopoverPrimitive"],"sources":["../packages/components/ui/popover.tsx"],"sourcesContent":["'use client'\nimport { cn } from '@customafk/react-toolkit/utils'\n\nimport { Popover as PopoverPrimitive } from 'radix-ui'\n\nfunction Popover({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Root>) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />\n}\n\nfunction PopoverTrigger({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />\n}\n\nfunction PopoverContent({ className, align = 'start', sideOffset = 4, ...props }: React.ComponentProps<typeof PopoverPrimitive.Content>) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n 'bg-popover',\n 'text-text-positive',\n 'z-50 w-72',\n 'origin-(--radix-popover-content-transform-origin)',\n 'shadow-dropdown rounded-md p-4 outline-none',\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 />\n </PopoverPrimitive.Portal>\n )\n}\n\nfunction PopoverAnchor({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />\n}\n\nexport { Popover, PopoverAnchor, PopoverContent, PopoverTrigger }\n"],"mappings":"+HAKA,SAASA,EAAQ,CAAE,GAAG,GAA6D,CACjF,OAAO,EAACC,EAAiB,KAAA,CAAK,YAAU,UAAU,GAAI,IAGxD,SAAS,EAAe,CAAE,GAAG,GAAgE,CAC3F,OAAO,EAACA,EAAiB,QAAA,CAAQ,YAAU,kBAAkB,GAAI,IAGnE,SAAS,EAAe,CAAE,YAAW,QAAQ,QAAS,aAAa,EAAG,GAAG,GAAgE,CACvI,OACE,EAACA,EAAiB,OAAA,CAAA,SAChB,EAACA,EAAiB,QAAA,CAChB,YAAU,kBACH,QACK,aACZ,UAAW,EACT,aACA,qBACA,YACA,oDACA,8CACA,+BACA,8BACA,+BACA,kCACA,iCACA,kCACA,yCACA,yCACA,yCACA,yCACA,GAEF,GAAI,MAMZ,SAAS,EAAc,CAAE,GAAG,GAA+D,CACzF,OAAO,EAACA,EAAiB,OAAA,CAAO,YAAU,iBAAiB,GAAI"}
@@ -1,2 +0,0 @@
1
- const e=require(`./chunk-CUT6urMc.cjs`),t=e.__toESM(require(`@customafk/react-toolkit/utils`)),n=e.__toESM(require(`react/jsx-runtime`)),r=e.__toESM(require(`radix-ui`));function i({...e}){return(0,n.jsx)(r.Popover.Root,{"data-slot":`popover`,...e})}function a({...e}){return(0,n.jsx)(r.Popover.Trigger,{"data-slot":`popover-trigger`,...e})}function o({className:e,align:i=`start`,sideOffset:a=4,...o}){return(0,n.jsx)(r.Popover.Portal,{children:(0,n.jsx)(r.Popover.Content,{"data-slot":`popover-content`,align:i,sideOffset:a,className:(0,t.cn)(`bg-popover`,`text-text-positive`,`z-50 w-72`,`origin-(--radix-popover-content-transform-origin)`,`shadow-dropdown rounded-md p-4 outline-none`,`data-[state=open]:animate-in`,`data-[state=open]:fade-in-0`,`data-[state=open]:zoom-in-95`,`data-[state=closed]:animate-out`,`data-[state=closed]:fade-out-0`,`data-[state=closed]:zoom-out-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`,e),...o})})}function s({...e}){return(0,n.jsx)(r.Popover.Anchor,{"data-slot":`popover-anchor`,...e})}Object.defineProperty(exports,`Popover`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`PopoverAnchor`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`PopoverContent`,{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,`PopoverTrigger`,{enumerable:!0,get:function(){return a}});
2
- //# sourceMappingURL=popover-BrDe5Jb8.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"popover-BrDe5Jb8.cjs","names":["PopoverPrimitive"],"sources":["../packages/components/ui/popover.tsx"],"sourcesContent":["'use client'\nimport { cn } from '@customafk/react-toolkit/utils'\n\nimport { Popover as PopoverPrimitive } from 'radix-ui'\n\nfunction Popover({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Root>) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />\n}\n\nfunction PopoverTrigger({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />\n}\n\nfunction PopoverContent({ className, align = 'start', sideOffset = 4, ...props }: React.ComponentProps<typeof PopoverPrimitive.Content>) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n 'bg-popover',\n 'text-text-positive',\n 'z-50 w-72',\n 'origin-(--radix-popover-content-transform-origin)',\n 'shadow-dropdown rounded-md p-4 outline-none',\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 />\n </PopoverPrimitive.Portal>\n )\n}\n\nfunction PopoverAnchor({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />\n}\n\nexport { Popover, PopoverAnchor, PopoverContent, PopoverTrigger }\n"],"mappings":"0KAKA,SAAS,EAAQ,CAAE,GAAG,GAA6D,CACjF,OAAO,EAAA,EAAA,KAACA,EAAAA,QAAiB,KAAA,CAAK,YAAU,UAAU,GAAI,IAGxD,SAAS,EAAe,CAAE,GAAG,GAAgE,CAC3F,OAAO,EAAA,EAAA,KAACA,EAAAA,QAAiB,QAAA,CAAQ,YAAU,kBAAkB,GAAI,IAGnE,SAAS,EAAe,CAAE,YAAW,QAAQ,QAAS,aAAa,EAAG,GAAG,GAAgE,CACvI,OACE,EAAA,EAAA,KAACA,EAAAA,QAAiB,OAAA,CAAA,UAChB,EAAA,EAAA,KAACA,EAAAA,QAAiB,QAAA,CAChB,YAAU,kBACH,QACK,aACZ,WAAA,EAAA,EAAA,IACE,aACA,qBACA,YACA,oDACA,8CACA,+BACA,8BACA,+BACA,kCACA,iCACA,kCACA,yCACA,yCACA,yCACA,yCACA,GAEF,GAAI,MAMZ,SAAS,EAAc,CAAE,GAAG,GAA+D,CACzF,OAAO,EAAA,EAAA,KAACA,EAAAA,QAAiB,OAAA,CAAO,YAAU,iBAAiB,GAAI"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"progress-DzBPViJg.js","names":["Progress","ProgressPrimitive"],"sources":["../packages/components/ui/progress.tsx"],"sourcesContent":["'use client'\nimport { cn } from '@customafk/react-toolkit/utils'\n\nimport { Progress as ProgressPrimitive } from 'radix-ui'\n\nfunction Progress({ className, value, ...props }: React.ComponentProps<typeof ProgressPrimitive.Root>) {\n return (\n <ProgressPrimitive.Root data-slot=\"progress\" className={cn('bg-primary-weak relative h-2 w-full overflow-hidden rounded-full', className)} {...props}>\n <ProgressPrimitive.Indicator\n data-slot=\"progress-indicator\"\n className=\"bg-primary size-full flex-1 transition-all\"\n style={{ transform: `translateX(-${100 - (value || 0)}%)` }}\n />\n </ProgressPrimitive.Root>\n )\n}\n\nexport { Progress }\n"],"mappings":"gIAKA,SAASA,EAAS,CAAE,YAAW,QAAO,GAAG,GAA8D,CACrG,OACE,EAACC,EAAkB,KAAA,CAAK,YAAU,WAAW,UAAW,EAAG,mEAAoE,GAAY,GAAI,WAC7I,EAACA,EAAkB,UAAA,CACjB,YAAU,qBACV,UAAU,6CACV,MAAO,CAAE,UAAW,eAAe,KAAO,GAAS,GAAG"}
@@ -1,2 +0,0 @@
1
- const e=require(`./chunk-CUT6urMc.cjs`),t=e.__toESM(require(`@customafk/react-toolkit/utils`)),n=e.__toESM(require(`react/jsx-runtime`)),r=e.__toESM(require(`radix-ui`));function i({className:e,value:i,...a}){return(0,n.jsx)(r.Progress.Root,{"data-slot":`progress`,className:(0,t.cn)(`bg-primary-weak relative h-2 w-full overflow-hidden rounded-full`,e),...a,children:(0,n.jsx)(r.Progress.Indicator,{"data-slot":`progress-indicator`,className:`bg-primary size-full flex-1 transition-all`,style:{transform:`translateX(-${100-(i||0)}%)`}})})}Object.defineProperty(exports,`Progress`,{enumerable:!0,get:function(){return i}});
2
- //# sourceMappingURL=progress-RnZp4jUA.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"progress-RnZp4jUA.cjs","names":["ProgressPrimitive"],"sources":["../packages/components/ui/progress.tsx"],"sourcesContent":["'use client'\nimport { cn } from '@customafk/react-toolkit/utils'\n\nimport { Progress as ProgressPrimitive } from 'radix-ui'\n\nfunction Progress({ className, value, ...props }: React.ComponentProps<typeof ProgressPrimitive.Root>) {\n return (\n <ProgressPrimitive.Root data-slot=\"progress\" className={cn('bg-primary-weak relative h-2 w-full overflow-hidden rounded-full', className)} {...props}>\n <ProgressPrimitive.Indicator\n data-slot=\"progress-indicator\"\n className=\"bg-primary size-full flex-1 transition-all\"\n style={{ transform: `translateX(-${100 - (value || 0)}%)` }}\n />\n </ProgressPrimitive.Root>\n )\n}\n\nexport { Progress }\n"],"mappings":"0KAKA,SAAS,EAAS,CAAE,YAAW,QAAO,GAAG,GAA8D,CACrG,OACE,EAAA,EAAA,KAACA,EAAAA,SAAkB,KAAA,CAAK,YAAU,WAAW,WAAA,EAAA,EAAA,IAAc,mEAAoE,GAAY,GAAI,YAC7I,EAAA,EAAA,KAACA,EAAAA,SAAkB,UAAA,CACjB,YAAU,qBACV,UAAU,6CACV,MAAO,CAAE,UAAW,eAAe,KAAO,GAAS,GAAG"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"refresh-BiOPtbhd.js","names":["RefreshBtn: React.FC<React.PropsWithChildren<Props>>"],"sources":["../packages/components/ui/buttons/refresh.tsx"],"sourcesContent":["import { RefreshCwIcon } from 'lucide-react'\n\nimport { Paragraph } from '@/components/typography/paragraph'\n\nimport { Button } from '../button'\n\ntype Props = {\n onClick?: () => void\n}\nexport const RefreshBtn: React.FC<React.PropsWithChildren<Props>> = ({ onClick = () => {} }) => {\n return (\n <Button\n aria-label=\"Tạo mới\"\n variant=\"outline\"\n color=\"muted\"\n className=\"outline-border-weak max-sm:aspect-square max-sm:size-9 max-sm:p-0\"\n onClick={onClick}\n >\n <RefreshCwIcon className=\"opacity-60 sm:-ms-1\" size={16} aria-hidden=\"true\" />\n <Paragraph variant=\"sm\" className=\"max-sm:sr-only\">\n Reset\n </Paragraph>\n </Button>\n )\n}\n"],"mappings":"iMASA,MAAaA,GAAwD,CAAE,cAAgB,MAEnF,EAAC,EAAA,CACC,aAAW,UACX,QAAQ,UACR,MAAM,QACN,UAAU,oEACD,oBAET,EAAC,EAAA,CAAc,UAAU,sBAAsB,KAAM,GAAI,cAAY,SACrE,EAAC,EAAA,CAAU,QAAQ,KAAK,UAAU,0BAAiB"}
@@ -1,2 +0,0 @@
1
- const e=require(`./chunk-CUT6urMc.cjs`),t=require(`./button-CuV2l4ge.cjs`),n=require(`./paragraph-BLvW7xdo.cjs`),r=e.__toESM(require(`lucide-react`)),i=e.__toESM(require(`react/jsx-runtime`)),a=({onClick:e=()=>{}})=>(0,i.jsxs)(t.Button,{"aria-label":`Tạo mới`,variant:`outline`,color:`muted`,className:`outline-border-weak max-sm:aspect-square max-sm:size-9 max-sm:p-0`,onClick:e,children:[(0,i.jsx)(r.RefreshCwIcon,{className:`opacity-60 sm:-ms-1`,size:16,"aria-hidden":`true`}),(0,i.jsx)(n.Paragraph,{variant:`sm`,className:`max-sm:sr-only`,children:`Reset`})]});Object.defineProperty(exports,`RefreshBtn`,{enumerable:!0,get:function(){return a}});
2
- //# sourceMappingURL=refresh-DgFpv8mw.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"refresh-DgFpv8mw.cjs","names":["RefreshBtn: React.FC<React.PropsWithChildren<Props>>","Button","RefreshCwIcon","Paragraph"],"sources":["../packages/components/ui/buttons/refresh.tsx"],"sourcesContent":["import { RefreshCwIcon } from 'lucide-react'\n\nimport { Paragraph } from '@/components/typography/paragraph'\n\nimport { Button } from '../button'\n\ntype Props = {\n onClick?: () => void\n}\nexport const RefreshBtn: React.FC<React.PropsWithChildren<Props>> = ({ onClick = () => {} }) => {\n return (\n <Button\n aria-label=\"Tạo mới\"\n variant=\"outline\"\n color=\"muted\"\n className=\"outline-border-weak max-sm:aspect-square max-sm:size-9 max-sm:p-0\"\n onClick={onClick}\n >\n <RefreshCwIcon className=\"opacity-60 sm:-ms-1\" size={16} aria-hidden=\"true\" />\n <Paragraph variant=\"sm\" className=\"max-sm:sr-only\">\n Reset\n </Paragraph>\n </Button>\n )\n}\n"],"mappings":"gMASaA,GAAwD,CAAE,cAAgB,OAEnF,EAAA,EAAA,MAACC,EAAAA,OAAAA,CACC,aAAW,UACX,QAAQ,UACR,MAAM,QACN,UAAU,oEACD,qBAET,EAAA,EAAA,KAACC,EAAAA,cAAAA,CAAc,UAAU,sBAAsB,KAAM,GAAI,cAAY,UACrE,EAAA,EAAA,KAACC,EAAAA,UAAAA,CAAU,QAAQ,KAAK,UAAU,0BAAiB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"scroll-area-BJYI14s5.js","names":["ScrollArea","ScrollAreaPrimitive"],"sources":["../packages/components/ui/scroll-area.tsx"],"sourcesContent":["'use client'\nimport { cn } from '@customafk/react-toolkit/utils'\n\nimport { ScrollArea as ScrollAreaPrimitive } from 'radix-ui'\n\nfunction ScrollArea({ className, children, ref, onScroll, ...props }: React.ComponentProps<typeof ScrollAreaPrimitive.Root>) {\n return (\n <ScrollAreaPrimitive.Root data-slot=\"scroll-area\" className={cn('relative overflow-hidden', className)} {...props}>\n <ScrollAreaPrimitive.Viewport ref={ref} className=\"size-full rounded-[inherit]\" onScroll={onScroll}>\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n )\n}\n\nfunction ScrollBar({ className, orientation = 'vertical', ...props }: React.ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>) {\n return (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n data-slot=\"scroll-area-scrollbar\"\n orientation={orientation}\n className={cn(\n 'border-border-weak flex touch-none p-px transition-colors select-none',\n orientation === 'vertical' && 'h-full w-2.5 border-l border-l-transparent',\n orientation === 'horizontal' && 'h-2.5 flex-col border-t border-t-transparent',\n className,\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb className=\"bg-border-weak relative flex-1 rounded-full\" />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n )\n}\n\nexport { ScrollArea, ScrollBar }\n"],"mappings":"4IAKA,SAASA,EAAW,CAAE,YAAW,WAAU,MAAK,WAAU,GAAG,GAAgE,CAC3H,OACE,EAACC,EAAoB,KAAA,CAAK,YAAU,cAAc,UAAW,EAAG,2BAA4B,GAAY,GAAI,YAC1G,EAACA,EAAoB,SAAA,CAAc,MAAK,UAAU,8BAAwC,WACvF,aAEH,EAAC,EAAA,IACD,EAACA,EAAoB,OAAA,OAK3B,SAAS,EAAU,CAAE,YAAW,cAAc,WAAY,GAAG,GAA+E,CAC1I,OACE,EAACA,EAAoB,oBAAA,CACnB,YAAU,wBACG,cACb,UAAW,EACT,wEACA,IAAgB,YAAc,6CAC9B,IAAgB,cAAgB,+CAChC,GAEF,GAAI,WAEJ,EAACA,EAAoB,gBAAA,CAAgB,UAAU"}
@@ -1,2 +0,0 @@
1
- const e=require(`./chunk-CUT6urMc.cjs`),t=e.__toESM(require(`@customafk/react-toolkit/utils`)),n=e.__toESM(require(`react/jsx-runtime`)),r=e.__toESM(require(`radix-ui`));function i({className:e,children:i,ref:o,onScroll:s,...c}){return(0,n.jsxs)(r.ScrollArea.Root,{"data-slot":`scroll-area`,className:(0,t.cn)(`relative overflow-hidden`,e),...c,children:[(0,n.jsx)(r.ScrollArea.Viewport,{ref:o,className:`size-full rounded-[inherit]`,onScroll:s,children:i}),(0,n.jsx)(a,{}),(0,n.jsx)(r.ScrollArea.Corner,{})]})}function a({className:e,orientation:i=`vertical`,...a}){return(0,n.jsx)(r.ScrollArea.ScrollAreaScrollbar,{"data-slot":`scroll-area-scrollbar`,orientation:i,className:(0,t.cn)(`border-border-weak flex touch-none p-px transition-colors select-none`,i===`vertical`&&`h-full w-2.5 border-l border-l-transparent`,i===`horizontal`&&`h-2.5 flex-col border-t border-t-transparent`,e),...a,children:(0,n.jsx)(r.ScrollArea.ScrollAreaThumb,{className:`bg-border-weak relative flex-1 rounded-full`})})}Object.defineProperty(exports,`ScrollArea`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`ScrollBar`,{enumerable:!0,get:function(){return a}});
2
- //# sourceMappingURL=scroll-area-slD5Jekm.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scroll-area-slD5Jekm.cjs","names":["ScrollAreaPrimitive"],"sources":["../packages/components/ui/scroll-area.tsx"],"sourcesContent":["'use client'\nimport { cn } from '@customafk/react-toolkit/utils'\n\nimport { ScrollArea as ScrollAreaPrimitive } from 'radix-ui'\n\nfunction ScrollArea({ className, children, ref, onScroll, ...props }: React.ComponentProps<typeof ScrollAreaPrimitive.Root>) {\n return (\n <ScrollAreaPrimitive.Root data-slot=\"scroll-area\" className={cn('relative overflow-hidden', className)} {...props}>\n <ScrollAreaPrimitive.Viewport ref={ref} className=\"size-full rounded-[inherit]\" onScroll={onScroll}>\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n )\n}\n\nfunction ScrollBar({ className, orientation = 'vertical', ...props }: React.ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>) {\n return (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n data-slot=\"scroll-area-scrollbar\"\n orientation={orientation}\n className={cn(\n 'border-border-weak flex touch-none p-px transition-colors select-none',\n orientation === 'vertical' && 'h-full w-2.5 border-l border-l-transparent',\n orientation === 'horizontal' && 'h-2.5 flex-col border-t border-t-transparent',\n className,\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb className=\"bg-border-weak relative flex-1 rounded-full\" />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n )\n}\n\nexport { ScrollArea, ScrollBar }\n"],"mappings":"0KAKA,SAAS,EAAW,CAAE,YAAW,WAAU,MAAK,WAAU,GAAG,GAAgE,CAC3H,OACE,EAAA,EAAA,MAACA,EAAAA,WAAoB,KAAA,CAAK,YAAU,cAAc,WAAA,EAAA,EAAA,IAAc,2BAA4B,GAAY,GAAI,aAC1G,EAAA,EAAA,KAACA,EAAAA,WAAoB,SAAA,CAAc,MAAK,UAAU,8BAAwC,WACvF,cAEH,EAAA,EAAA,KAAC,EAAA,KACD,EAAA,EAAA,KAACA,EAAAA,WAAoB,OAAA,OAK3B,SAAS,EAAU,CAAE,YAAW,cAAc,WAAY,GAAG,GAA+E,CAC1I,OACE,EAAA,EAAA,KAACA,EAAAA,WAAoB,oBAAA,CACnB,YAAU,wBACG,cACb,WAAA,EAAA,EAAA,IACE,wEACA,IAAgB,YAAc,6CAC9B,IAAgB,cAAgB,+CAChC,GAEF,GAAI,YAEJ,EAAA,EAAA,KAACA,EAAAA,WAAoB,gBAAA,CAAgB,UAAU"}