@customafk/lunas-ui 0.0.84 → 0.0.86

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 (445) hide show
  1. package/dist/{add-new-HTqsYpR5.js → add-new-CDApqBax.js} +2 -2
  2. package/dist/{add-new-HTqsYpR5.js.map → add-new-CDApqBax.js.map} +1 -1
  3. package/dist/{add-new-CD6uW0cp.cjs → add-new-D-WSaAM3.cjs} +2 -2
  4. package/dist/{add-new-CD6uW0cp.cjs.map → add-new-D-WSaAM3.cjs.map} +1 -1
  5. package/dist/{alert-dialog-BfKVH-9l.js → alert-dialog-Di6rTULI.js} +1 -1
  6. package/dist/{alert-dialog-BfKVH-9l.js.map → alert-dialog-Di6rTULI.js.map} +1 -1
  7. package/dist/{alert-dialog-mR3avgRt.cjs → alert-dialog-DmsZNeeJ.cjs} +1 -1
  8. package/dist/{alert-dialog-mR3avgRt.cjs.map → alert-dialog-DmsZNeeJ.cjs.map} +1 -1
  9. package/dist/{avatar-DmMCBvb6.cjs → avatar-96dXWrWU.cjs} +1 -1
  10. package/dist/{avatar-DmMCBvb6.cjs.map → avatar-96dXWrWU.cjs.map} +1 -1
  11. package/dist/{avatar-iX5Jhj8E.js → avatar-CcbiQ1mq.js} +1 -1
  12. package/dist/{avatar-iX5Jhj8E.js.map → avatar-CcbiQ1mq.js.map} +1 -1
  13. package/dist/{badge-AM9m3CFI.cjs → badge-B1y6KFfh.cjs} +1 -1
  14. package/dist/{badge-AM9m3CFI.cjs.map → badge-B1y6KFfh.cjs.map} +1 -1
  15. package/dist/{badge-tjlLdDGl.js → badge-DWc4Idn2.js} +1 -1
  16. package/dist/{badge-tjlLdDGl.js.map → badge-DWc4Idn2.js.map} +1 -1
  17. package/dist/{button-DW8t4_Xa.d.cts → button-BR2WmoAo.d.cts} +4 -4
  18. package/dist/{button-B6RxJ31O.d.ts → button-CIP-EkY5.d.ts} +6 -6
  19. package/dist/{calendar-Brdd41FH.cjs → calendar-D_C_Qeu7.cjs} +1 -1
  20. package/dist/{calendar-Brdd41FH.cjs.map → calendar-D_C_Qeu7.cjs.map} +1 -1
  21. package/dist/{calendar-Diid0R3S.js → calendar-et-igmiY.js} +1 -1
  22. package/dist/{calendar-Diid0R3S.js.map → calendar-et-igmiY.js.map} +1 -1
  23. package/dist/cards/simple-card.d.cts +2 -2
  24. package/dist/cards/simple-card.d.ts +2 -2
  25. package/dist/{command-UXLmHGja.js → command-BvHe__3s.js} +2 -2
  26. package/dist/{command-UXLmHGja.js.map → command-BvHe__3s.js.map} +1 -1
  27. package/dist/{command-C13pL2M3.cjs → command-CevqI1YQ.cjs} +2 -2
  28. package/dist/{command-C13pL2M3.cjs.map → command-CevqI1YQ.cjs.map} +1 -1
  29. package/dist/{command-dOuGzMZQ.d.ts → command-DKXFheVV.d.ts} +12 -12
  30. package/dist/{command-DBkTh6gn.d.cts → command-GmjW1L4_.d.cts} +12 -12
  31. package/dist/data-display/country.cjs +1 -1
  32. package/dist/data-display/country.js +1 -1
  33. package/dist/data-display/data-list.cjs +1 -1
  34. package/dist/data-display/data-list.js +1 -1
  35. package/dist/data-display/date-tooltip.cjs +1 -1
  36. package/dist/data-display/date-tooltip.js +1 -1
  37. package/dist/data-display/date.cjs +1 -1
  38. package/dist/data-display/date.js +1 -1
  39. package/dist/data-display/empty.cjs +1 -1
  40. package/dist/data-display/empty.d.cts +2 -2
  41. package/dist/data-display/empty.d.ts +2 -2
  42. package/dist/data-display/empty.js +1 -1
  43. package/dist/data-display/name.cjs +1 -1
  44. package/dist/data-display/name.js +1 -1
  45. package/dist/data-display/phone-number.cjs +1 -1
  46. package/dist/data-display/phone-number.js +1 -1
  47. package/dist/data-display/role-badge.cjs +1 -1
  48. package/dist/data-display/role-badge.js +1 -1
  49. package/dist/data-display/statistic.cjs +1 -1
  50. package/dist/data-display/statistic.d.cts +2 -2
  51. package/dist/data-display/statistic.d.ts +2 -2
  52. package/dist/data-display/statistic.js +1 -1
  53. package/dist/data-display/user.cjs +1 -1
  54. package/dist/data-display/user.js +1 -1
  55. package/dist/{date-CgzMwDPN.js → date-4JlD-xYj.js} +1 -1
  56. package/dist/{date-CgzMwDPN.js.map → date-4JlD-xYj.js.map} +1 -1
  57. package/dist/{date-BEyT-xKi.cjs → date-vWvu4M91.cjs} +1 -1
  58. package/dist/{date-BEyT-xKi.cjs.map → date-vWvu4M91.cjs.map} +1 -1
  59. package/dist/{dialog-kBWafGWT.d.cts → dialog-BHDL777e.d.ts} +12 -12
  60. package/dist/{dialog-BBODhbxh.cjs → dialog-Bd723gV6.cjs} +1 -1
  61. package/dist/dialog-Bd723gV6.cjs.map +1 -0
  62. package/dist/{dialog-JtlljVFY.d.ts → dialog-Dbdaspqo.d.cts} +12 -12
  63. package/dist/{dialog-BAlJ18xi.js → dialog-OTHc6G5i.js} +1 -1
  64. package/dist/dialog-OTHc6G5i.js.map +1 -0
  65. package/dist/dialogs/confirm-dialog.cjs +1 -1
  66. package/dist/dialogs/confirm-dialog.js +1 -1
  67. package/dist/dialogs/detail-dialog/component/sidebar.cjs +1 -1
  68. package/dist/dialogs/detail-dialog/component/sidebar.d.cts +4 -4
  69. package/dist/dialogs/detail-dialog/component/sidebar.d.ts +3 -3
  70. package/dist/dialogs/detail-dialog/component/sidebar.js +1 -1
  71. package/dist/dialogs/detail-dialog/index.cjs +1 -1
  72. package/dist/dialogs/detail-dialog/index.js +1 -1
  73. package/dist/dialogs/error-dialog.cjs +1 -1
  74. package/dist/dialogs/error-dialog.js +1 -1
  75. package/dist/dialogs/form-dialog.cjs +1 -1
  76. package/dist/dialogs/form-dialog.d.cts +2 -2
  77. package/dist/dialogs/form-dialog.d.ts +2 -2
  78. package/dist/dialogs/form-dialog.js +1 -1
  79. package/dist/dialogs/loading-dialog.cjs +1 -1
  80. package/dist/dialogs/loading-dialog.js +1 -1
  81. package/dist/{drawer-BT0osH1O.js → drawer-C6IT7ONM.js} +1 -1
  82. package/dist/{drawer-BT0osH1O.js.map → drawer-C6IT7ONM.js.map} +1 -1
  83. package/dist/{drawer-C3vvvU_D.cjs → drawer-Dc432Nt9.cjs} +1 -1
  84. package/dist/{drawer-C3vvvU_D.cjs.map → drawer-Dc432Nt9.cjs.map} +1 -1
  85. package/dist/{dropdown-menu-DtEPAmMV.js → dropdown-menu-0CtZazkY.js} +1 -1
  86. package/dist/{dropdown-menu-DtEPAmMV.js.map → dropdown-menu-0CtZazkY.js.map} +1 -1
  87. package/dist/{dropdown-menu-Bb68Wd6J.cjs → dropdown-menu-C3SGlEd2.cjs} +1 -1
  88. package/dist/{dropdown-menu-Bb68Wd6J.cjs.map → dropdown-menu-C3SGlEd2.cjs.map} +1 -1
  89. package/dist/{error-dialog-DMGVy3dG.js → error-dialog-_FqKuIY6.js} +2 -2
  90. package/dist/{error-dialog-DMGVy3dG.js.map → error-dialog-_FqKuIY6.js.map} +1 -1
  91. package/dist/{error-dialog-BVTB1EEF.cjs → error-dialog-pTwyWIE5.cjs} +2 -2
  92. package/dist/{error-dialog-BVTB1EEF.cjs.map → error-dialog-pTwyWIE5.cjs.map} +1 -1
  93. package/dist/{field-A43YZ5Wj.cjs → field-B_qC62YD.cjs} +2 -2
  94. package/dist/{field-A43YZ5Wj.cjs.map → field-B_qC62YD.cjs.map} +1 -1
  95. package/dist/{field-CGacT8J3.js → field-DSScKMdZ.js} +2 -2
  96. package/dist/{field-CGacT8J3.js.map → field-DSScKMdZ.js.map} +1 -1
  97. package/dist/{flex-D6XrXRQW.js → flex-BJgsQWLI.js} +1 -1
  98. package/dist/{flex-D6XrXRQW.js.map → flex-BJgsQWLI.js.map} +1 -1
  99. package/dist/{flex-B4klVEz9.cjs → flex-DgmCJ9Bz.cjs} +1 -1
  100. package/dist/{flex-B4klVEz9.cjs.map → flex-DgmCJ9Bz.cjs.map} +1 -1
  101. package/dist/{form-B_tL9lO4.js → form-DbknMHac.js} +2 -2
  102. package/dist/{form-B_tL9lO4.js.map → form-DbknMHac.js.map} +1 -1
  103. package/dist/{form-DV9tQbiO.cjs → form-t4WaMbFV.cjs} +2 -2
  104. package/dist/{form-DV9tQbiO.cjs.map → form-t4WaMbFV.cjs.map} +1 -1
  105. package/dist/{form-wrapper-BYwaFsJd.js → form-wrapper-BbZebVv0.js} +2 -2
  106. package/dist/{form-wrapper-BYwaFsJd.js.map → form-wrapper-BbZebVv0.js.map} +1 -1
  107. package/dist/{form-wrapper-CODuD3w6.cjs → form-wrapper-DImTyC_E.cjs} +2 -2
  108. package/dist/{form-wrapper-CODuD3w6.cjs.map → form-wrapper-DImTyC_E.cjs.map} +1 -1
  109. package/dist/forms/combobox-field.cjs +1 -1
  110. package/dist/forms/combobox-field.d.ts +2 -2
  111. package/dist/forms/combobox-field.js +1 -1
  112. package/dist/forms/date-field.cjs +1 -1
  113. package/dist/forms/date-field.d.cts +2 -2
  114. package/dist/forms/date-field.d.ts +2 -2
  115. package/dist/forms/date-field.js +1 -1
  116. package/dist/forms/form-wrapper.cjs +1 -1
  117. package/dist/forms/form-wrapper.d.cts +2 -2
  118. package/dist/forms/form-wrapper.d.ts +2 -2
  119. package/dist/forms/form-wrapper.js +1 -1
  120. package/dist/forms/multi-select-field.cjs +1 -1
  121. package/dist/forms/multi-select-field.cjs.map +1 -1
  122. package/dist/forms/multi-select-field.d.cts +2 -2
  123. package/dist/forms/multi-select-field.d.ts +2 -2
  124. package/dist/forms/multi-select-field.js +1 -1
  125. package/dist/forms/number-field.cjs +1 -1
  126. package/dist/forms/number-field.d.cts +2 -2
  127. package/dist/forms/number-field.d.ts +2 -2
  128. package/dist/forms/number-field.js +1 -1
  129. package/dist/forms/password-field.cjs +1 -1
  130. package/dist/forms/password-field.d.cts +2 -2
  131. package/dist/forms/password-field.d.ts +2 -2
  132. package/dist/forms/password-field.js +1 -1
  133. package/dist/forms/select-field.cjs +1 -1
  134. package/dist/forms/select-field.d.cts +2 -2
  135. package/dist/forms/select-field.d.ts +2 -2
  136. package/dist/forms/select-field.js +1 -1
  137. package/dist/forms/switch-field.cjs +1 -1
  138. package/dist/forms/switch-field.d.cts +2 -2
  139. package/dist/forms/switch-field.d.ts +2 -2
  140. package/dist/forms/switch-field.js +1 -1
  141. package/dist/forms/text-field.cjs +1 -1
  142. package/dist/forms/text-field.d.cts +2 -2
  143. package/dist/forms/text-field.d.ts +2 -2
  144. package/dist/forms/text-field.js +1 -1
  145. package/dist/forms/textarea-field.cjs +1 -1
  146. package/dist/forms/textarea-field.d.cts +2 -2
  147. package/dist/forms/textarea-field.d.ts +2 -2
  148. package/dist/forms/textarea-field.js +1 -1
  149. package/dist/{input-BStypTnq.js → input-B-l6tT_9.js} +1 -1
  150. package/dist/{input-BStypTnq.js.map → input-B-l6tT_9.js.map} +1 -1
  151. package/dist/{input-Dmh4Wn9f.d.ts → input-C-dBPJHZ.d.ts} +3 -3
  152. package/dist/{input-Bxd1DBt6.d.cts → input-C29DSPln.d.cts} +3 -3
  153. package/dist/{input-D_tClptL.cjs → input-D7aXVX7j.cjs} +1 -1
  154. package/dist/{input-D_tClptL.cjs.map → input-D7aXVX7j.cjs.map} +1 -1
  155. package/dist/{label-D6mAvVmw.cjs → label-BMBHBFRY.cjs} +1 -1
  156. package/dist/{label-D6mAvVmw.cjs.map → label-BMBHBFRY.cjs.map} +1 -1
  157. package/dist/{label-CdrxlBJ8.js → label-CRhvNQY4.js} +1 -1
  158. package/dist/{label-CdrxlBJ8.js.map → label-CRhvNQY4.js.map} +1 -1
  159. package/dist/label-y7zRrP2w.d.cts +11 -0
  160. package/dist/layouts/app-layout/index.cjs +1 -1
  161. package/dist/layouts/app-layout/index.d.cts +28 -28
  162. package/dist/layouts/app-layout/index.d.ts +27 -27
  163. package/dist/layouts/app-layout/index.js +1 -1
  164. package/dist/layouts/flex.cjs +1 -1
  165. package/dist/layouts/flex.d.cts +2 -2
  166. package/dist/layouts/flex.d.ts +2 -2
  167. package/dist/layouts/flex.js +1 -1
  168. package/dist/layouts/service-layout/index.cjs +1 -1
  169. package/dist/layouts/service-layout/index.d.cts +13 -13
  170. package/dist/layouts/service-layout/index.d.ts +14 -14
  171. package/dist/layouts/service-layout/index.js +1 -1
  172. package/dist/layouts/service-layout/index.js.map +1 -1
  173. package/dist/{multi-select-Bqqk4Tiu.js → multi-select-CQdR0wzH.js} +2 -2
  174. package/dist/{multi-select-Bqqk4Tiu.js.map → multi-select-CQdR0wzH.js.map} +1 -1
  175. package/dist/{multi-select-DFaIxSYQ.cjs → multi-select-Dl54UfMM.cjs} +2 -2
  176. package/dist/{multi-select-DFaIxSYQ.cjs.map → multi-select-Dl54UfMM.cjs.map} +1 -1
  177. package/dist/{paragraph-B9fp9JaI.js → paragraph-BuE9WF5p.js} +1 -1
  178. package/dist/{paragraph-B9fp9JaI.js.map → paragraph-BuE9WF5p.js.map} +1 -1
  179. package/dist/{paragraph-Q7vk3BSp.cjs → paragraph-GYX6NlXZ.cjs} +1 -1
  180. package/dist/{paragraph-Q7vk3BSp.cjs.map → paragraph-GYX6NlXZ.cjs.map} +1 -1
  181. package/dist/{popover-D6vyPDKA.cjs → popover-DODAZTiX.cjs} +1 -1
  182. package/dist/{popover-D6vyPDKA.cjs.map → popover-DODAZTiX.cjs.map} +1 -1
  183. package/dist/{popover-BnzoeyDG.js → popover-l3a5exlI.js} +1 -1
  184. package/dist/{popover-BnzoeyDG.js.map → popover-l3a5exlI.js.map} +1 -1
  185. package/dist/products/add-cart-button.cjs +2 -0
  186. package/dist/products/add-cart-button.cjs.map +1 -0
  187. package/dist/products/add-cart-button.d.cts +48 -0
  188. package/dist/products/add-cart-button.d.ts +48 -0
  189. package/dist/products/add-cart-button.js +2 -0
  190. package/dist/products/add-cart-button.js.map +1 -0
  191. package/dist/products/product-loading-page.cjs +2 -0
  192. package/dist/products/product-loading-page.cjs.map +1 -0
  193. package/dist/products/product-loading-page.d.cts +9 -0
  194. package/dist/products/product-loading-page.d.ts +9 -0
  195. package/dist/products/product-loading-page.js +2 -0
  196. package/dist/products/product-loading-page.js.map +1 -0
  197. package/dist/products/product-quantity-control.cjs +1 -1
  198. package/dist/products/product-quantity-control.cjs.map +1 -1
  199. package/dist/products/product-quantity-control.d.cts +2 -2
  200. package/dist/products/product-quantity-control.d.ts +2 -2
  201. package/dist/products/product-quantity-control.js +1 -1
  202. package/dist/products/product-quantity-control.js.map +1 -1
  203. package/dist/{progress-BUlcGaLz.cjs → progress-D57hgs0G.cjs} +1 -1
  204. package/dist/{progress-BUlcGaLz.cjs.map → progress-D57hgs0G.cjs.map} +1 -1
  205. package/dist/{progress-DwLEMPaO.js → progress-DDifyTI1.js} +1 -1
  206. package/dist/{progress-DwLEMPaO.js.map → progress-DDifyTI1.js.map} +1 -1
  207. package/dist/{refresh-xkWxJ-m0.js → refresh-CNiYCRLZ.js} +2 -2
  208. package/dist/{refresh-xkWxJ-m0.js.map → refresh-CNiYCRLZ.js.map} +1 -1
  209. package/dist/{refresh-Be---CBQ.cjs → refresh-CfPFo89K.cjs} +2 -2
  210. package/dist/{refresh-Be---CBQ.cjs.map → refresh-CfPFo89K.cjs.map} +1 -1
  211. package/dist/{scroll-area-DFENklE1.js → scroll-area-CEVoMs6W.js} +1 -1
  212. package/dist/{scroll-area-DFENklE1.js.map → scroll-area-CEVoMs6W.js.map} +1 -1
  213. package/dist/{scroll-area-C_MkdpKg.cjs → scroll-area-CcLtG_m0.cjs} +1 -1
  214. package/dist/{scroll-area-C_MkdpKg.cjs.map → scroll-area-CcLtG_m0.cjs.map} +1 -1
  215. package/dist/{search-input-BI1RjMuQ.js → search-input-CMNLrUk0.js} +2 -2
  216. package/dist/{search-input-BI1RjMuQ.js.map → search-input-CMNLrUk0.js.map} +1 -1
  217. package/dist/{search-input-ryU0Mvaa.cjs → search-input-p1W5kb6R.cjs} +2 -2
  218. package/dist/{search-input-ryU0Mvaa.cjs.map → search-input-p1W5kb6R.cjs.map} +1 -1
  219. package/dist/{select-BD7dul2u.cjs → select-DfJYL2rL.cjs} +1 -1
  220. package/dist/{select-BD7dul2u.cjs.map → select-DfJYL2rL.cjs.map} +1 -1
  221. package/dist/{select-B8sXsuUI.js → select-czrPwYWJ.js} +1 -1
  222. package/dist/{select-B8sXsuUI.js.map → select-czrPwYWJ.js.map} +1 -1
  223. package/dist/{separator-DMMoR-d2.cjs → separator-BAyL2IIW.cjs} +1 -1
  224. package/dist/{separator-DMMoR-d2.cjs.map → separator-BAyL2IIW.cjs.map} +1 -1
  225. package/dist/{separator-C6Moqffa.d.cts → separator-BC_ytI76.d.ts} +3 -3
  226. package/dist/{separator-D2SRPIPb.d.ts → separator-BvLD0phP.d.cts} +1 -1
  227. package/dist/{separator-D17HxS2f.js → separator-C5dPRhYx.js} +1 -1
  228. package/dist/{separator-D17HxS2f.js.map → separator-C5dPRhYx.js.map} +1 -1
  229. package/dist/{sheet-Bua5MlcG.cjs → sheet-DueP7VvE.cjs} +1 -1
  230. package/dist/{sheet-Bua5MlcG.cjs.map → sheet-DueP7VvE.cjs.map} +1 -1
  231. package/dist/{sheet-BhyEuJtA.js → sheet-QlP3aQXc.js} +1 -1
  232. package/dist/{sheet-BhyEuJtA.js.map → sheet-QlP3aQXc.js.map} +1 -1
  233. package/dist/{sidebar-64G8kwkB.js → sidebar-9ODHuW8Q.js} +2 -2
  234. package/dist/{sidebar-64G8kwkB.js.map → sidebar-9ODHuW8Q.js.map} +1 -1
  235. package/dist/{sidebar-CyRoNNDp.cjs → sidebar-ChCtr6kn.cjs} +2 -2
  236. package/dist/{sidebar-CyRoNNDp.cjs.map → sidebar-ChCtr6kn.cjs.map} +1 -1
  237. package/dist/{switch-DwBg-iL4.js → switch-B5eIeKX7.js} +1 -1
  238. package/dist/{switch-DwBg-iL4.js.map → switch-B5eIeKX7.js.map} +1 -1
  239. package/dist/{switch-o_YbWKw4.cjs → switch-C6peIJVm.cjs} +1 -1
  240. package/dist/{switch-o_YbWKw4.cjs.map → switch-C6peIJVm.cjs.map} +1 -1
  241. package/dist/table/index.cjs +1 -1
  242. package/dist/table/index.cjs.map +1 -1
  243. package/dist/table/index.d.cts +2 -2
  244. package/dist/table/index.d.ts +2 -2
  245. package/dist/table/index.js +1 -1
  246. package/dist/{table-Cd75vfQ4.js → table-Co0GM3Ej.js} +1 -1
  247. package/dist/{table-Cd75vfQ4.js.map → table-Co0GM3Ej.js.map} +1 -1
  248. package/dist/{table-fp-VtGFA.cjs → table-DrocTqs4.cjs} +1 -1
  249. package/dist/{table-fp-VtGFA.cjs.map → table-DrocTqs4.cjs.map} +1 -1
  250. package/dist/{tabs-D7oadnxg.cjs → tabs-CtTEY1sg.cjs} +1 -1
  251. package/dist/{tabs-D7oadnxg.cjs.map → tabs-CtTEY1sg.cjs.map} +1 -1
  252. package/dist/{tabs-BVCzl3vY.js → tabs-DVHFEz9m.js} +1 -1
  253. package/dist/{tabs-BVCzl3vY.js.map → tabs-DVHFEz9m.js.map} +1 -1
  254. package/dist/{textarea-TGDtYde1.js → textarea-BVj6PCYB.js} +1 -1
  255. package/dist/{textarea-TGDtYde1.js.map → textarea-BVj6PCYB.js.map} +1 -1
  256. package/dist/{textarea-BHME8i5L.cjs → textarea-C3ZQALlB.cjs} +1 -1
  257. package/dist/{textarea-BHME8i5L.cjs.map → textarea-C3ZQALlB.cjs.map} +1 -1
  258. package/dist/{title-Zqs6skyV.js → title-B5WswPuk.js} +1 -1
  259. package/dist/{title-Zqs6skyV.js.map → title-B5WswPuk.js.map} +1 -1
  260. package/dist/{title-Wrzpw9RM.cjs → title-D6FYxJj1.cjs} +1 -1
  261. package/dist/{title-Wrzpw9RM.cjs.map → title-D6FYxJj1.cjs.map} +1 -1
  262. package/dist/{toggle-BPiYX50f.d.ts → toggle-CMYTXtd1.d.cts} +4 -4
  263. package/dist/{toggle-Dr5qQygc.d.cts → toggle-Mb-P3MuO.d.ts} +5 -5
  264. package/dist/{tooltip-BNynBa87.d.cts → tooltip-CX0O7o4v.d.cts} +6 -6
  265. package/dist/{tooltip-BTrjCwd8.js → tooltip-DHD6S-vH.js} +1 -1
  266. package/dist/{tooltip-BTrjCwd8.js.map → tooltip-DHD6S-vH.js.map} +1 -1
  267. package/dist/{tooltip-uaF-pxx8.cjs → tooltip-v0ikl3om.cjs} +1 -1
  268. package/dist/{tooltip-uaF-pxx8.cjs.map → tooltip-v0ikl3om.cjs.map} +1 -1
  269. package/dist/{types-BiiGENwa.js → types-BfVUsI26.js} +1 -1
  270. package/dist/{types-BiiGENwa.js.map → types-BfVUsI26.js.map} +1 -1
  271. package/dist/{types-D32qXHff.cjs → types-_t74BXO1.cjs} +1 -1
  272. package/dist/{types-D32qXHff.cjs.map → types-_t74BXO1.cjs.map} +1 -1
  273. package/dist/typography/paragraph.cjs +1 -1
  274. package/dist/typography/paragraph.d.cts +2 -2
  275. package/dist/typography/paragraph.d.ts +2 -2
  276. package/dist/typography/paragraph.js +1 -1
  277. package/dist/typography/title.cjs +1 -1
  278. package/dist/typography/title.d.cts +2 -2
  279. package/dist/typography/title.d.ts +2 -2
  280. package/dist/typography/title.js +1 -1
  281. package/dist/ui/alert-dialog.cjs +1 -1
  282. package/dist/ui/alert-dialog.d.cts +12 -12
  283. package/dist/ui/alert-dialog.d.ts +12 -12
  284. package/dist/ui/alert-dialog.js +1 -1
  285. package/dist/ui/alert.d.cts +7 -7
  286. package/dist/ui/alert.d.ts +7 -7
  287. package/dist/ui/aspect-ratio.d.cts +2 -2
  288. package/dist/ui/aspect-ratio.d.ts +2 -2
  289. package/dist/ui/avatar.cjs +1 -1
  290. package/dist/ui/avatar.d.cts +4 -4
  291. package/dist/ui/avatar.d.ts +4 -4
  292. package/dist/ui/avatar.js +1 -1
  293. package/dist/ui/badge.cjs +1 -1
  294. package/dist/ui/badge.d.cts +2 -2
  295. package/dist/ui/badge.d.ts +2 -2
  296. package/dist/ui/badge.js +1 -1
  297. package/dist/ui/breadcrumb.d.cts +8 -8
  298. package/dist/ui/breadcrumb.d.ts +8 -8
  299. package/dist/ui/button-group.cjs +1 -1
  300. package/dist/ui/button-group.d.cts +7 -7
  301. package/dist/ui/button-group.d.ts +5 -5
  302. package/dist/ui/button-group.js +1 -1
  303. package/dist/ui/button.d.cts +1 -1
  304. package/dist/ui/button.d.ts +1 -1
  305. package/dist/ui/buttons/add-new.cjs +1 -1
  306. package/dist/ui/buttons/add-new.js +1 -1
  307. package/dist/ui/buttons/refresh.cjs +1 -1
  308. package/dist/ui/buttons/refresh.js +1 -1
  309. package/dist/ui/calendar.cjs +1 -1
  310. package/dist/ui/calendar.d.cts +4 -4
  311. package/dist/ui/calendar.d.ts +4 -4
  312. package/dist/ui/calendar.js +1 -1
  313. package/dist/ui/card.d.cts +8 -8
  314. package/dist/ui/card.d.ts +8 -8
  315. package/dist/ui/carousel.d.cts +7 -7
  316. package/dist/ui/carousel.d.ts +7 -7
  317. package/dist/ui/collapsible.d.cts +4 -4
  318. package/dist/ui/collapsible.d.ts +4 -4
  319. package/dist/ui/command.cjs +1 -1
  320. package/dist/ui/command.d.cts +2 -2
  321. package/dist/ui/command.d.ts +2 -2
  322. package/dist/ui/command.js +1 -1
  323. package/dist/ui/context-menu.d.cts +16 -16
  324. package/dist/ui/context-menu.d.ts +16 -16
  325. package/dist/ui/dialog.cjs +1 -1
  326. package/dist/ui/dialog.d.cts +1 -1
  327. package/dist/ui/dialog.d.ts +1 -1
  328. package/dist/ui/dialog.js +1 -1
  329. package/dist/ui/drawer.cjs +1 -1
  330. package/dist/ui/drawer.d.cts +11 -11
  331. package/dist/ui/drawer.d.ts +11 -11
  332. package/dist/ui/drawer.js +1 -1
  333. package/dist/ui/dropdown-menu.cjs +1 -1
  334. package/dist/ui/dropdown-menu.d.cts +16 -16
  335. package/dist/ui/dropdown-menu.d.ts +16 -16
  336. package/dist/ui/dropdown-menu.js +1 -1
  337. package/dist/ui/empty.d.cts +7 -7
  338. package/dist/ui/empty.d.ts +9 -9
  339. package/dist/ui/field.cjs +1 -1
  340. package/dist/ui/field.d.cts +14 -14
  341. package/dist/ui/field.d.ts +13 -13
  342. package/dist/ui/field.js +1 -1
  343. package/dist/ui/file-uploader.cjs +1 -1
  344. package/dist/ui/file-uploader.d.cts +2 -2
  345. package/dist/ui/file-uploader.d.ts +2 -2
  346. package/dist/ui/file-uploader.js +1 -1
  347. package/dist/ui/form.cjs +1 -1
  348. package/dist/ui/form.d.cts +7 -7
  349. package/dist/ui/form.d.ts +7 -7
  350. package/dist/ui/form.js +1 -1
  351. package/dist/ui/hover-card.d.cts +4 -4
  352. package/dist/ui/hover-card.d.ts +4 -4
  353. package/dist/ui/input-otp.d.cts +5 -5
  354. package/dist/ui/input.cjs +1 -1
  355. package/dist/ui/input.d.cts +1 -1
  356. package/dist/ui/input.d.ts +1 -1
  357. package/dist/ui/input.js +1 -1
  358. package/dist/ui/inputs/search-input.cjs +1 -1
  359. package/dist/ui/inputs/search-input.d.cts +1 -1
  360. package/dist/ui/inputs/search-input.d.ts +1 -1
  361. package/dist/ui/inputs/search-input.js +1 -1
  362. package/dist/ui/item.cjs +1 -1
  363. package/dist/ui/item.d.cts +12 -12
  364. package/dist/ui/item.d.ts +1 -1
  365. package/dist/ui/item.js +1 -1
  366. package/dist/ui/label.cjs +1 -1
  367. package/dist/ui/label.d.cts +1 -1
  368. package/dist/ui/label.js +1 -1
  369. package/dist/ui/menubar.d.cts +17 -17
  370. package/dist/ui/menubar.d.ts +17 -17
  371. package/dist/ui/multi-select.cjs +1 -1
  372. package/dist/ui/multi-select.d.cts +2 -2
  373. package/dist/ui/multi-select.d.ts +2 -2
  374. package/dist/ui/multi-select.js +1 -1
  375. package/dist/ui/navigation-menu.d.cts +9 -9
  376. package/dist/ui/navigation-menu.d.ts +9 -9
  377. package/dist/ui/pagination.d.cts +9 -9
  378. package/dist/ui/pagination.d.ts +9 -9
  379. package/dist/ui/popover.cjs +1 -1
  380. package/dist/ui/popover.d.cts +5 -5
  381. package/dist/ui/popover.d.ts +5 -5
  382. package/dist/ui/popover.js +1 -1
  383. package/dist/ui/progress.cjs +1 -1
  384. package/dist/ui/progress.d.cts +2 -2
  385. package/dist/ui/progress.d.ts +2 -2
  386. package/dist/ui/progress.js +1 -1
  387. package/dist/ui/radio-group.d.cts +3 -3
  388. package/dist/ui/radio-group.d.ts +3 -3
  389. package/dist/ui/resizable.d.cts +4 -4
  390. package/dist/ui/resizable.d.ts +4 -4
  391. package/dist/ui/scroll-area.cjs +1 -1
  392. package/dist/ui/scroll-area.d.cts +3 -3
  393. package/dist/ui/scroll-area.d.ts +3 -3
  394. package/dist/ui/scroll-area.js +1 -1
  395. package/dist/ui/select.cjs +1 -1
  396. package/dist/ui/select.d.cts +11 -11
  397. package/dist/ui/select.d.ts +11 -11
  398. package/dist/ui/select.js +1 -1
  399. package/dist/ui/separator.cjs +1 -1
  400. package/dist/ui/separator.d.cts +1 -1
  401. package/dist/ui/separator.d.ts +1 -1
  402. package/dist/ui/separator.js +1 -1
  403. package/dist/ui/sheet.cjs +1 -1
  404. package/dist/ui/sheet.d.cts +9 -9
  405. package/dist/ui/sheet.d.ts +9 -9
  406. package/dist/ui/sheet.js +1 -1
  407. package/dist/ui/sidebar.cjs +1 -1
  408. package/dist/ui/sidebar.d.cts +28 -28
  409. package/dist/ui/sidebar.d.ts +29 -29
  410. package/dist/ui/sidebar.js +1 -1
  411. package/dist/ui/skeleton.d.cts +2 -2
  412. package/dist/ui/skeleton.d.ts +2 -2
  413. package/dist/ui/slider.d.cts +2 -2
  414. package/dist/ui/slider.d.ts +2 -2
  415. package/dist/ui/sonner.d.cts +2 -2
  416. package/dist/ui/sonner.d.ts +2 -2
  417. package/dist/ui/spinner.d.cts +2 -2
  418. package/dist/ui/spinner.d.ts +2 -2
  419. package/dist/ui/switch.cjs +1 -1
  420. package/dist/ui/switch.d.cts +2 -2
  421. package/dist/ui/switch.d.ts +2 -2
  422. package/dist/ui/switch.js +1 -1
  423. package/dist/ui/table.cjs +1 -1
  424. package/dist/ui/table.d.cts +9 -9
  425. package/dist/ui/table.d.ts +9 -9
  426. package/dist/ui/table.js +1 -1
  427. package/dist/ui/tabs.cjs +1 -1
  428. package/dist/ui/tabs.d.cts +5 -5
  429. package/dist/ui/tabs.d.ts +5 -5
  430. package/dist/ui/tabs.js +1 -1
  431. package/dist/ui/textarea.cjs +1 -1
  432. package/dist/ui/textarea.d.cts +2 -2
  433. package/dist/ui/textarea.d.ts +2 -2
  434. package/dist/ui/textarea.js +1 -1
  435. package/dist/ui/toggle-group.d.cts +4 -4
  436. package/dist/ui/toggle-group.d.ts +4 -4
  437. package/dist/ui/toggle.d.cts +1 -1
  438. package/dist/ui/toggle.d.ts +1 -1
  439. package/dist/ui/tooltip.cjs +1 -1
  440. package/dist/ui/tooltip.d.cts +1 -1
  441. package/dist/ui/tooltip.js +1 -1
  442. package/package.json +9 -1
  443. package/dist/dialog-BAlJ18xi.js.map +0 -1
  444. package/dist/dialog-BBODhbxh.cjs.map +0 -1
  445. package/dist/label-DTWNKTQu.d.cts +0 -11
@@ -1 +1 @@
1
- {"version":3,"file":"multi-select-DFaIxSYQ.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
+ {"version":3,"file":"multi-select-Dl54UfMM.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 +1,2 @@
1
1
  import{cn as e}from"@customafk/react-toolkit/utils";import{jsx as t}from"react/jsx-runtime";import{cva as n}from"class-variance-authority";const r=n(``,{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`}}}),i=({variant:n=`p`,className:i,children:a})=>t(`p`,{className:e(`text-text-positive`,r({variant:n}),i),children:a});export{i as Paragraph};
2
- //# sourceMappingURL=paragraph-B9fp9JaI.js.map
2
+ //# sourceMappingURL=paragraph-BuE9WF5p.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"paragraph-B9fp9JaI.js","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":"2IAWA,MAAM,EAAoB,EAAI,GAAI,CAChC,SAAU,CACR,QAAS,CACP,EAAG,uCACH,GAAI,mCACJ,GAAI,wBACJ,KAAM,oCACN,MAAO,mCACR,CACD,QAAS,CACP,QAAS,KACV,CACF,CACF,CAAC,CAEW,GAAa,CAAE,UAAU,IAAK,YAAW,cAC7C,EAAC,IAAA,CAAE,UAAW,EAAG,qBAAsB,EAAkB,CAAE,UAAS,CAAC,CAAE,EAAU,CAAG,YAAa"}
1
+ {"version":3,"file":"paragraph-BuE9WF5p.js","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":"2IAWA,MAAM,EAAoB,EAAI,GAAI,CAChC,SAAU,CACR,QAAS,CACP,EAAG,uCACH,GAAI,mCACJ,GAAI,wBACJ,KAAM,oCACN,MAAO,mCACR,CACD,QAAS,CACP,QAAS,KACV,CACF,CACF,CAAC,CAEW,GAAa,CAAE,UAAU,IAAK,YAAW,cAC7C,EAAC,IAAA,CAAE,UAAW,EAAG,qBAAsB,EAAkB,CAAE,UAAS,CAAC,CAAE,EAAU,CAAG,YAAa"}
@@ -1,2 +1,2 @@
1
1
  const e=require(`./chunk-CUT6urMc.cjs`);let t=require(`@customafk/react-toolkit/utils`);t=e.__toESM(t);let n=require(`react/jsx-runtime`);n=e.__toESM(n);let r=require(`class-variance-authority`);r=e.__toESM(r);const 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-Q7vk3BSp.cjs.map
2
+ //# sourceMappingURL=paragraph-GYX6NlXZ.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"paragraph-Q7vk3BSp.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":"kNAWA,MAAM,GAAA,EAAA,EAAA,KAAwB,GAAI,CAChC,SAAU,CACR,QAAS,CACP,EAAG,uCACH,GAAI,mCACJ,GAAI,wBACJ,KAAM,oCACN,MAAO,mCACR,CACD,QAAS,CACP,QAAS,KACV,CACF,CACF,CAAC,CAEW,GAAa,CAAE,UAAU,IAAK,YAAW,eAC7C,EAAA,EAAA,KAAC,IAAA,CAAE,WAAA,EAAA,EAAA,IAAc,qBAAsB,EAAkB,CAAE,UAAS,CAAC,CAAE,EAAU,CAAG,YAAa"}
1
+ {"version":3,"file":"paragraph-GYX6NlXZ.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":"kNAWA,MAAM,GAAA,EAAA,EAAA,KAAwB,GAAI,CAChC,SAAU,CACR,QAAS,CACP,EAAG,uCACH,GAAI,mCACJ,GAAI,wBACJ,KAAM,oCACN,MAAO,mCACR,CACD,QAAS,CACP,QAAS,KACV,CACF,CACF,CAAC,CAEW,GAAa,CAAE,UAAU,IAAK,YAAW,eAC7C,EAAA,EAAA,KAAC,IAAA,CAAE,WAAA,EAAA,EAAA,IAAc,qBAAsB,EAAkB,CAAE,UAAS,CAAC,CAAE,EAAU,CAAG,YAAa"}
@@ -1,2 +1,2 @@
1
1
  const e=require(`./chunk-CUT6urMc.cjs`);let t=require(`@customafk/react-toolkit/utils`);t=e.__toESM(t);let n=require(`react/jsx-runtime`);n=e.__toESM(n);let r=require(`radix-ui`);r=e.__toESM(r);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-D6vyPDKA.cjs.map
2
+ //# sourceMappingURL=popover-DODAZTiX.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"popover-D6vyPDKA.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":"kMAKA,SAAS,EAAQ,CAAE,GAAG,GAA6D,CACjF,OAAO,EAAA,EAAA,KAACA,EAAAA,QAAiB,KAAA,CAAK,YAAU,UAAU,GAAI,GAAS,CAGjE,SAAS,EAAe,CAAE,GAAG,GAAgE,CAC3F,OAAO,EAAA,EAAA,KAACA,EAAAA,QAAiB,QAAA,CAAQ,YAAU,kBAAkB,GAAI,GAAS,CAG5E,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,EACD,CACD,GAAI,GACJ,CAAA,CACsB,CAI9B,SAAS,EAAc,CAAE,GAAG,GAA+D,CACzF,OAAO,EAAA,EAAA,KAACA,EAAAA,QAAiB,OAAA,CAAO,YAAU,iBAAiB,GAAI,GAAS"}
1
+ {"version":3,"file":"popover-DODAZTiX.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":"kMAKA,SAAS,EAAQ,CAAE,GAAG,GAA6D,CACjF,OAAO,EAAA,EAAA,KAACA,EAAAA,QAAiB,KAAA,CAAK,YAAU,UAAU,GAAI,GAAS,CAGjE,SAAS,EAAe,CAAE,GAAG,GAAgE,CAC3F,OAAO,EAAA,EAAA,KAACA,EAAAA,QAAiB,QAAA,CAAQ,YAAU,kBAAkB,GAAI,GAAS,CAG5E,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,EACD,CACD,GAAI,GACJ,CAAA,CACsB,CAI9B,SAAS,EAAc,CAAE,GAAG,GAA+D,CACzF,OAAO,EAAA,EAAA,KAACA,EAAAA,QAAiB,OAAA,CAAO,YAAU,iBAAiB,GAAI,GAAS"}
@@ -1,2 +1,2 @@
1
1
  import{cn as e}from"@customafk/react-toolkit/utils";import{jsx as t}from"react/jsx-runtime";import{Popover as n}from"radix-ui";function r({...e}){return t(n.Root,{"data-slot":`popover`,...e})}function i({...e}){return t(n.Trigger,{"data-slot":`popover-trigger`,...e})}function a({className:r,align:i=`start`,sideOffset:a=4,...o}){return t(n.Portal,{children:t(n.Content,{"data-slot":`popover-content`,align:i,sideOffset:a,className:e(`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`,r),...o})})}function o({...e}){return t(n.Anchor,{"data-slot":`popover-anchor`,...e})}export{r as Popover,o as PopoverAnchor,a as PopoverContent,i as PopoverTrigger};
2
- //# sourceMappingURL=popover-BnzoeyDG.js.map
2
+ //# sourceMappingURL=popover-l3a5exlI.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"popover-BnzoeyDG.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,GAAS,CAGjE,SAAS,EAAe,CAAE,GAAG,GAAgE,CAC3F,OAAO,EAACA,EAAiB,QAAA,CAAQ,YAAU,kBAAkB,GAAI,GAAS,CAG5E,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,EACD,CACD,GAAI,GACJ,CAAA,CACsB,CAI9B,SAAS,EAAc,CAAE,GAAG,GAA+D,CACzF,OAAO,EAACA,EAAiB,OAAA,CAAO,YAAU,iBAAiB,GAAI,GAAS"}
1
+ {"version":3,"file":"popover-l3a5exlI.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,GAAS,CAGjE,SAAS,EAAe,CAAE,GAAG,GAAgE,CAC3F,OAAO,EAACA,EAAiB,QAAA,CAAQ,YAAU,kBAAkB,GAAI,GAAS,CAG5E,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,EACD,CACD,GAAI,GACJ,CAAA,CACsB,CAI9B,SAAS,EAAc,CAAE,GAAG,GAA+D,CACzF,OAAO,EAACA,EAAiB,OAAA,CAAO,YAAU,iBAAiB,GAAI,GAAS"}
@@ -0,0 +1,2 @@
1
+ const e=require(`../chunk-CUT6urMc.cjs`);let t=require(`lucide-react`);t=e.__toESM(t);let n=require(`@customafk/react-toolkit/utils`);n=e.__toESM(n);let r=require(`react`);r=e.__toESM(r);let i=require(`react/jsx-runtime`);i=e.__toESM(i);const a=({productId:e,variantId:a,className:o,showText:s=!0,size:c=`default`,isInCart:l=!1,onAddToCart:u})=>{let[d,f]=(0,r.useState)(!1),p=(0,r.useCallback)(async()=>{if(!d)try{f(!0),u&&await u(e,a)}catch(e){console.error(`Error adding to cart:`,e)}finally{f(!1)}},[e,a,u,d]);return(0,i.jsx)(`button`,{className:(0,n.cn)(`transition-all cursor-pointer`,`bg-linear-to-b from-primary to-primary-strong`,`py-2 px-2.5 rounded-md -outline-offset-1 outline-3 outline-primary-weak`,`shadow-lg`,`flex space-x-1.5 items-center`,`text-sm text-text-negative-intense font-medium`,`focus:ring-4 focus:ring-primary-weak`,l?`bg-success hover:bg-success/90`:``,o),disabled:d,onClick:p,children:l?(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.CheckIcon,{size:16}),s&&(0,i.jsx)(`span`,{children:c===`icon`?``:`Đã thêm vào giỏ`})]}):(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.ShoppingBagIcon,{size:16,strokeWidth:3}),s&&(0,i.jsx)(`span`,{children:c===`icon`?``:`Thêm vào giỏ`})]})})};exports.AddCartButton=a;
2
+ //# sourceMappingURL=add-cart-button.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-cart-button.cjs","names":["AddCartButton: React.FC<AddCartButtonProps>","CheckIcon","ShoppingBagIcon"],"sources":["../../packages/components/products/add-cart-button.tsx"],"sourcesContent":["import { useCallback, useState } from 'react';\n\nimport { CheckIcon, ShoppingBagIcon } from 'lucide-react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\ntype AddCartButtonProps = {\n /**\n * Product ID to check against cart and add to cart\n */\n productId: string;\n /**\n * Variant ID to check against cart and add to cart\n */\n variantId?: string;\n /**\n * Optional className for styling\n */\n className?: string;\n /**\n * Whether to show text alongside icon\n * @default true\n */\n showText?: boolean;\n /**\n * Size of the button\n * @default 'default'\n */\n size?: 'sm' | 'default' | 'lg' | 'icon';\n /**\n * Variant of the button\n * @default 'default'\n */\n variant?: 'default' | 'outline' | 'ghost';\n /**\n * Initial quantity to add to cart\n * @default 1\n */\n quantity?: number;\n /**\n * Flag to indicate if the product is already in the cart\n * @default false\n */\n isInCart?: boolean;\n /**\n * Callback function when adding to cart\n */\n onAddToCart?: (productId: string, variantId?: string) => void | Promise<void>;\n};\n\nexport const AddCartButton: React.FC<AddCartButtonProps> = ({\n productId,\n variantId,\n className,\n showText = true,\n size = 'default',\n isInCart = false,\n onAddToCart,\n}) => {\n const [isAdding, setIsAdding] = useState(false);\n\n const handleAddToCart = useCallback(async () => {\n if (isAdding) return;\n\n try {\n setIsAdding(true);\n\n // Use onAddToCart callback with the productId and variantId\n if (onAddToCart) {\n await onAddToCart(productId, variantId);\n }\n } catch (error) {\n console.error('Error adding to cart:', error);\n } finally {\n setIsAdding(false);\n }\n }, [productId, variantId, onAddToCart, isAdding]);\n\n return (\n <button\n className={cn(\n 'transition-all cursor-pointer',\n 'bg-linear-to-b from-primary to-primary-strong',\n 'py-2 px-2.5 rounded-md -outline-offset-1 outline-3 outline-primary-weak',\n 'shadow-lg',\n 'flex space-x-1.5 items-center',\n 'text-sm text-text-negative-intense font-medium',\n 'focus:ring-4 focus:ring-primary-weak',\n isInCart ? 'bg-success hover:bg-success/90' : '',\n className\n )}\n disabled={isAdding}\n onClick={handleAddToCart}\n >\n {isInCart ? (\n <>\n <CheckIcon size={16} />\n {showText && <span>{size === 'icon' ? '' : 'Đã thêm vào giỏ'}</span>}\n </>\n ) : (\n <>\n <ShoppingBagIcon size={16} strokeWidth={3} />\n {showText && <span>{size === 'icon' ? '' : 'Thêm vào giỏ'}</span>}\n </>\n )}\n </button>\n );\n};\n"],"mappings":"6OAkDA,MAAaA,GAA+C,CAC1D,YACA,YACA,YACA,WAAW,GACX,OAAO,UACP,WAAW,GACX,iBACI,CACJ,GAAM,CAAC,EAAU,IAAA,EAAA,EAAA,UAAwB,GAAM,CAEzC,GAAA,EAAA,EAAA,aAA8B,SAAY,CAC1C,MAEJ,GAAI,CACF,EAAY,GAAK,CAGb,GACF,MAAM,EAAY,EAAW,EAAU,OAElC,EAAO,CACd,QAAQ,MAAM,wBAAyB,EAAM,QACrC,CACR,EAAY,GAAM,GAEnB,CAAC,EAAW,EAAW,EAAa,EAAS,CAAC,CAEjD,OACE,EAAA,EAAA,KAAC,SAAA,CACC,WAAA,EAAA,EAAA,IACE,gCACA,gDACA,0EACA,YACA,gCACA,iDACA,uCACA,EAAW,iCAAmC,GAC9C,EACD,CACD,SAAU,EACV,QAAS,WAER,GACC,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,KAACC,EAAAA,UAAAA,CAAU,KAAM,GAAA,CAAM,CACtB,IAAY,EAAA,EAAA,KAAC,OAAA,CAAA,SAAM,IAAS,OAAS,GAAK,kBAAA,CAAyB,CAAA,CAAA,CACnE,EAEH,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,KAACC,EAAAA,gBAAAA,CAAgB,KAAM,GAAI,YAAa,GAAK,CAC5C,IAAY,EAAA,EAAA,KAAC,OAAA,CAAA,SAAM,IAAS,OAAS,GAAK,eAAA,CAAsB,CAAA,CAAA,CAChE,EAEE"}
@@ -0,0 +1,48 @@
1
+ //#region packages/components/products/add-cart-button.d.ts
2
+ type AddCartButtonProps = {
3
+ /**
4
+ * Product ID to check against cart and add to cart
5
+ */
6
+ productId: string;
7
+ /**
8
+ * Variant ID to check against cart and add to cart
9
+ */
10
+ variantId?: string;
11
+ /**
12
+ * Optional className for styling
13
+ */
14
+ className?: string;
15
+ /**
16
+ * Whether to show text alongside icon
17
+ * @default true
18
+ */
19
+ showText?: boolean;
20
+ /**
21
+ * Size of the button
22
+ * @default 'default'
23
+ */
24
+ size?: 'sm' | 'default' | 'lg' | 'icon';
25
+ /**
26
+ * Variant of the button
27
+ * @default 'default'
28
+ */
29
+ variant?: 'default' | 'outline' | 'ghost';
30
+ /**
31
+ * Initial quantity to add to cart
32
+ * @default 1
33
+ */
34
+ quantity?: number;
35
+ /**
36
+ * Flag to indicate if the product is already in the cart
37
+ * @default false
38
+ */
39
+ isInCart?: boolean;
40
+ /**
41
+ * Callback function when adding to cart
42
+ */
43
+ onAddToCart?: (productId: string, variantId?: string) => void | Promise<void>;
44
+ };
45
+ declare const AddCartButton: React.FC<AddCartButtonProps>;
46
+ //#endregion
47
+ export { AddCartButton };
48
+ //# sourceMappingURL=add-cart-button.d.cts.map
@@ -0,0 +1,48 @@
1
+ //#region packages/components/products/add-cart-button.d.ts
2
+ type AddCartButtonProps = {
3
+ /**
4
+ * Product ID to check against cart and add to cart
5
+ */
6
+ productId: string;
7
+ /**
8
+ * Variant ID to check against cart and add to cart
9
+ */
10
+ variantId?: string;
11
+ /**
12
+ * Optional className for styling
13
+ */
14
+ className?: string;
15
+ /**
16
+ * Whether to show text alongside icon
17
+ * @default true
18
+ */
19
+ showText?: boolean;
20
+ /**
21
+ * Size of the button
22
+ * @default 'default'
23
+ */
24
+ size?: 'sm' | 'default' | 'lg' | 'icon';
25
+ /**
26
+ * Variant of the button
27
+ * @default 'default'
28
+ */
29
+ variant?: 'default' | 'outline' | 'ghost';
30
+ /**
31
+ * Initial quantity to add to cart
32
+ * @default 1
33
+ */
34
+ quantity?: number;
35
+ /**
36
+ * Flag to indicate if the product is already in the cart
37
+ * @default false
38
+ */
39
+ isInCart?: boolean;
40
+ /**
41
+ * Callback function when adding to cart
42
+ */
43
+ onAddToCart?: (productId: string, variantId?: string) => void | Promise<void>;
44
+ };
45
+ declare const AddCartButton: React.FC<AddCartButtonProps>;
46
+ //#endregion
47
+ export { AddCartButton };
48
+ //# sourceMappingURL=add-cart-button.d.ts.map
@@ -0,0 +1,2 @@
1
+ import{CheckIcon as e,ShoppingBagIcon as t}from"lucide-react";import{cn as n}from"@customafk/react-toolkit/utils";import{useCallback as r,useState as i}from"react";import{Fragment as a,jsx as o,jsxs as s}from"react/jsx-runtime";const c=({productId:c,variantId:l,className:u,showText:d=!0,size:f=`default`,isInCart:p=!1,onAddToCart:m})=>{let[h,g]=i(!1),_=r(async()=>{if(!h)try{g(!0),m&&await m(c,l)}catch(e){console.error(`Error adding to cart:`,e)}finally{g(!1)}},[c,l,m,h]);return o(`button`,{className:n(`transition-all cursor-pointer`,`bg-linear-to-b from-primary to-primary-strong`,`py-2 px-2.5 rounded-md -outline-offset-1 outline-3 outline-primary-weak`,`shadow-lg`,`flex space-x-1.5 items-center`,`text-sm text-text-negative-intense font-medium`,`focus:ring-4 focus:ring-primary-weak`,p?`bg-success hover:bg-success/90`:``,u),disabled:h,onClick:_,children:p?s(a,{children:[o(e,{size:16}),d&&o(`span`,{children:f===`icon`?``:`Đã thêm vào giỏ`})]}):s(a,{children:[o(t,{size:16,strokeWidth:3}),d&&o(`span`,{children:f===`icon`?``:`Thêm vào giỏ`})]})})};export{c as AddCartButton};
2
+ //# sourceMappingURL=add-cart-button.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-cart-button.js","names":["AddCartButton: React.FC<AddCartButtonProps>"],"sources":["../../packages/components/products/add-cart-button.tsx"],"sourcesContent":["import { useCallback, useState } from 'react';\n\nimport { CheckIcon, ShoppingBagIcon } from 'lucide-react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\ntype AddCartButtonProps = {\n /**\n * Product ID to check against cart and add to cart\n */\n productId: string;\n /**\n * Variant ID to check against cart and add to cart\n */\n variantId?: string;\n /**\n * Optional className for styling\n */\n className?: string;\n /**\n * Whether to show text alongside icon\n * @default true\n */\n showText?: boolean;\n /**\n * Size of the button\n * @default 'default'\n */\n size?: 'sm' | 'default' | 'lg' | 'icon';\n /**\n * Variant of the button\n * @default 'default'\n */\n variant?: 'default' | 'outline' | 'ghost';\n /**\n * Initial quantity to add to cart\n * @default 1\n */\n quantity?: number;\n /**\n * Flag to indicate if the product is already in the cart\n * @default false\n */\n isInCart?: boolean;\n /**\n * Callback function when adding to cart\n */\n onAddToCart?: (productId: string, variantId?: string) => void | Promise<void>;\n};\n\nexport const AddCartButton: React.FC<AddCartButtonProps> = ({\n productId,\n variantId,\n className,\n showText = true,\n size = 'default',\n isInCart = false,\n onAddToCart,\n}) => {\n const [isAdding, setIsAdding] = useState(false);\n\n const handleAddToCart = useCallback(async () => {\n if (isAdding) return;\n\n try {\n setIsAdding(true);\n\n // Use onAddToCart callback with the productId and variantId\n if (onAddToCart) {\n await onAddToCart(productId, variantId);\n }\n } catch (error) {\n console.error('Error adding to cart:', error);\n } finally {\n setIsAdding(false);\n }\n }, [productId, variantId, onAddToCart, isAdding]);\n\n return (\n <button\n className={cn(\n 'transition-all cursor-pointer',\n 'bg-linear-to-b from-primary to-primary-strong',\n 'py-2 px-2.5 rounded-md -outline-offset-1 outline-3 outline-primary-weak',\n 'shadow-lg',\n 'flex space-x-1.5 items-center',\n 'text-sm text-text-negative-intense font-medium',\n 'focus:ring-4 focus:ring-primary-weak',\n isInCart ? 'bg-success hover:bg-success/90' : '',\n className\n )}\n disabled={isAdding}\n onClick={handleAddToCart}\n >\n {isInCart ? (\n <>\n <CheckIcon size={16} />\n {showText && <span>{size === 'icon' ? '' : 'Đã thêm vào giỏ'}</span>}\n </>\n ) : (\n <>\n <ShoppingBagIcon size={16} strokeWidth={3} />\n {showText && <span>{size === 'icon' ? '' : 'Thêm vào giỏ'}</span>}\n </>\n )}\n </button>\n );\n};\n"],"mappings":"oOAkDA,MAAaA,GAA+C,CAC1D,YACA,YACA,YACA,WAAW,GACX,OAAO,UACP,WAAW,GACX,iBACI,CACJ,GAAM,CAAC,EAAU,GAAe,EAAS,GAAM,CAEzC,EAAkB,EAAY,SAAY,CAC1C,MAEJ,GAAI,CACF,EAAY,GAAK,CAGb,GACF,MAAM,EAAY,EAAW,EAAU,OAElC,EAAO,CACd,QAAQ,MAAM,wBAAyB,EAAM,QACrC,CACR,EAAY,GAAM,GAEnB,CAAC,EAAW,EAAW,EAAa,EAAS,CAAC,CAEjD,OACE,EAAC,SAAA,CACC,UAAW,EACT,gCACA,gDACA,0EACA,YACA,gCACA,iDACA,uCACA,EAAW,iCAAmC,GAC9C,EACD,CACD,SAAU,EACV,QAAS,WAER,EACC,EAAA,EAAA,CAAA,SAAA,CACE,EAAC,EAAA,CAAU,KAAM,GAAA,CAAM,CACtB,GAAY,EAAC,OAAA,CAAA,SAAM,IAAS,OAAS,GAAK,kBAAA,CAAyB,CAAA,CAAA,CACnE,CAEH,EAAA,EAAA,CAAA,SAAA,CACE,EAAC,EAAA,CAAgB,KAAM,GAAI,YAAa,GAAK,CAC5C,GAAY,EAAC,OAAA,CAAA,SAAM,IAAS,OAAS,GAAK,eAAA,CAAsB,CAAA,CAAA,CAChE,EAEE"}
@@ -0,0 +1,2 @@
1
+ "use client";const e=require(`../chunk-CUT6urMc.cjs`),t=require(`../skeleton-BC2E_ohw.cjs`),n=require(`../flex-DgmCJ9Bz.cjs`),r=require(`../tabs-CtTEY1sg.cjs`);let i=require(`@customafk/react-toolkit/utils`);i=e.__toESM(i);let a=require(`react/jsx-runtime`);a=e.__toESM(a);const o=({className:e,hideGallery:o=!1})=>(0,a.jsxs)(`div`,{className:(0,i.cn)(`flex w-full flex-col lg:flex-row gap-8 animate-in fade-in duration-300`,e),children:[!o&&(0,a.jsxs)(`div`,{className:`w-full lg:w-1/2 flex flex-col gap-4`,children:[(0,a.jsx)(t.Skeleton,{className:`aspect-square w-full rounded-lg`}),(0,a.jsx)(`div`,{className:`flex gap-2 overflow-x-auto pb-1`,children:[...[,,,,]].map((e,n)=>(0,a.jsx)(t.Skeleton,{className:`aspect-square w-20 h-20 flex-shrink-0 rounded-md`},n))})]}),(0,a.jsxs)(`div`,{className:(0,i.cn)(`flex-1 flex flex-col gap-6`,o?`w-full`:`w-full lg:w-1/2`),children:[(0,a.jsxs)(`div`,{className:`space-y-4`,children:[(0,a.jsx)(t.Skeleton,{className:`h-8 w-3/4`}),(0,a.jsx)(t.Skeleton,{className:`h-6 w-1/4`}),(0,a.jsx)(t.Skeleton,{className:`h-5 w-full`}),(0,a.jsx)(t.Skeleton,{className:`h-5 w-full`}),(0,a.jsx)(t.Skeleton,{className:`h-5 w-3/4`})]}),(0,a.jsxs)(`div`,{className:`flex flex-col gap-2 mt-2`,children:[(0,a.jsx)(t.Skeleton,{className:`h-8 w-1/3`}),(0,a.jsxs)(`div`,{className:`flex gap-2 items-center`,children:[(0,a.jsx)(t.Skeleton,{className:`h-6 w-24`}),(0,a.jsx)(t.Skeleton,{className:`h-6 w-32`})]})]}),(0,a.jsxs)(n.Flex,{gap:`md`,className:`mt-2`,children:[(0,a.jsx)(t.Skeleton,{className:`h-10 w-32 rounded-full`}),(0,a.jsx)(t.Skeleton,{className:`h-10 w-32 rounded-full`})]}),(0,a.jsx)(`div`,{className:`mt-6`,children:(0,a.jsxs)(r.Tabs,{defaultValue:`details`,children:[(0,a.jsxs)(r.TabsList,{className:`mb-4`,children:[(0,a.jsx)(r.TabsTrigger,{value:`details`,disabled:!0,children:(0,a.jsx)(t.Skeleton,{className:`h-4 w-20`})}),(0,a.jsx)(r.TabsTrigger,{value:`specs`,disabled:!0,children:(0,a.jsx)(t.Skeleton,{className:`h-4 w-24`})}),(0,a.jsx)(r.TabsTrigger,{value:`reviews`,disabled:!0,children:(0,a.jsx)(t.Skeleton,{className:`h-4 w-20`})})]}),(0,a.jsx)(r.TabsContent,{value:`details`,children:(0,a.jsxs)(`div`,{className:`space-y-4`,children:[(0,a.jsx)(t.Skeleton,{className:`h-5 w-full`}),(0,a.jsx)(t.Skeleton,{className:`h-5 w-full`}),(0,a.jsx)(t.Skeleton,{className:`h-5 w-4/5`}),(0,a.jsx)(t.Skeleton,{className:`h-5 w-11/12`})]})})]})})]})]});exports.ProductLoadingPage=o;
2
+ //# sourceMappingURL=product-loading-page.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"product-loading-page.cjs","names":["ProductLoadingPage: React.FC<ProductLoadingPageProps>","Skeleton","Flex","Tabs","TabsList","TabsTrigger","TabsContent"],"sources":["../../packages/components/products/product-loading-page.tsx"],"sourcesContent":["'use client';\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Flex } from '@/components/layouts/flex';\nimport { Skeleton } from '@/components/ui/skeleton';\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';\n\nexport interface ProductLoadingPageProps {\n className?: string;\n hideGallery?: boolean;\n}\n\nexport const ProductLoadingPage: React.FC<ProductLoadingPageProps> = ({ className, hideGallery = false }) => {\n return (\n <div className={cn('flex w-full flex-col lg:flex-row gap-8 animate-in fade-in duration-300', className)}>\n {/* Gallery Skeleton */}\n {!hideGallery && (\n <div className=\"w-full lg:w-1/2 flex flex-col gap-4\">\n <Skeleton className=\"aspect-square w-full rounded-lg\" />\n <div className=\"flex gap-2 overflow-x-auto pb-1\">\n {[...Array(4)].map((_, i) => (\n <Skeleton key={i} className=\"aspect-square w-20 h-20 flex-shrink-0 rounded-md\" />\n ))}\n </div>\n </div>\n )}\n\n {/* Product Info Skeleton */}\n <div className={cn('flex-1 flex flex-col gap-6', hideGallery ? 'w-full' : 'w-full lg:w-1/2')}>\n {/* Basic Info */}\n <div className=\"space-y-4\">\n <Skeleton className=\"h-8 w-3/4\" />\n <Skeleton className=\"h-6 w-1/4\" />\n <Skeleton className=\"h-5 w-full\" />\n <Skeleton className=\"h-5 w-full\" />\n <Skeleton className=\"h-5 w-3/4\" />\n </div>\n\n {/* Price and Stock */}\n <div className=\"flex flex-col gap-2 mt-2\">\n <Skeleton className=\"h-8 w-1/3\" />\n <div className=\"flex gap-2 items-center\">\n <Skeleton className=\"h-6 w-24\" />\n <Skeleton className=\"h-6 w-32\" />\n </div>\n </div>\n\n {/* Actions */}\n <Flex gap=\"md\" className=\"mt-2\">\n <Skeleton className=\"h-10 w-32 rounded-full\" />\n <Skeleton className=\"h-10 w-32 rounded-full\" />\n </Flex>\n\n {/* Tabs */}\n <div className=\"mt-6\">\n <Tabs defaultValue=\"details\">\n <TabsList className=\"mb-4\">\n <TabsTrigger value=\"details\" disabled>\n <Skeleton className=\"h-4 w-20\" />\n </TabsTrigger>\n <TabsTrigger value=\"specs\" disabled>\n <Skeleton className=\"h-4 w-24\" />\n </TabsTrigger>\n <TabsTrigger value=\"reviews\" disabled>\n <Skeleton className=\"h-4 w-20\" />\n </TabsTrigger>\n </TabsList>\n <TabsContent value=\"details\">\n <div className=\"space-y-4\">\n <Skeleton className=\"h-5 w-full\" />\n <Skeleton className=\"h-5 w-full\" />\n <Skeleton className=\"h-5 w-4/5\" />\n <Skeleton className=\"h-5 w-11/12\" />\n </div>\n </TabsContent>\n </Tabs>\n </div>\n </div>\n </div>\n );\n};\n"],"mappings":"iRAYA,MAAaA,GAAyD,CAAE,YAAW,cAAc,OAE7F,EAAA,EAAA,MAAC,MAAA,CAAI,WAAA,EAAA,EAAA,IAAc,yEAA0E,EAAU,WAEpG,CAAC,IACA,EAAA,EAAA,MAAC,MAAA,CAAI,UAAU,iDACb,EAAA,EAAA,KAACC,EAAAA,SAAAA,CAAS,UAAU,kCAAA,CAAoC,EACxD,EAAA,EAAA,KAAC,MAAA,CAAI,UAAU,2CACZ,CAAC,GAAG,MAAQ,CAAC,CAAC,KAAK,EAAG,KACrB,EAAA,EAAA,KAACA,EAAAA,SAAAA,CAAiB,UAAU,mDAAA,CAAb,EAAkE,CACjF,EACE,CAAA,EACF,EAIR,EAAA,EAAA,MAAC,MAAA,CAAI,WAAA,EAAA,EAAA,IAAc,6BAA8B,EAAc,SAAW,kBAAkB,YAE1F,EAAA,EAAA,MAAC,MAAA,CAAI,UAAU,uBACb,EAAA,EAAA,KAACA,EAAAA,SAAAA,CAAS,UAAU,YAAA,CAAc,EAClC,EAAA,EAAA,KAACA,EAAAA,SAAAA,CAAS,UAAU,YAAA,CAAc,EAClC,EAAA,EAAA,KAACA,EAAAA,SAAAA,CAAS,UAAU,aAAA,CAAe,EACnC,EAAA,EAAA,KAACA,EAAAA,SAAAA,CAAS,UAAU,aAAA,CAAe,EACnC,EAAA,EAAA,KAACA,EAAAA,SAAAA,CAAS,UAAU,YAAA,CAAc,GAC9B,EAGN,EAAA,EAAA,MAAC,MAAA,CAAI,UAAU,sCACb,EAAA,EAAA,KAACA,EAAAA,SAAAA,CAAS,UAAU,YAAA,CAAc,EAClC,EAAA,EAAA,MAAC,MAAA,CAAI,UAAU,qCACb,EAAA,EAAA,KAACA,EAAAA,SAAAA,CAAS,UAAU,WAAA,CAAa,EACjC,EAAA,EAAA,KAACA,EAAAA,SAAAA,CAAS,UAAU,WAAA,CAAa,CAAA,EAC7B,CAAA,EACF,EAGN,EAAA,EAAA,MAACC,EAAAA,KAAAA,CAAK,IAAI,KAAK,UAAU,kBACvB,EAAA,EAAA,KAACD,EAAAA,SAAAA,CAAS,UAAU,yBAAA,CAA2B,EAC/C,EAAA,EAAA,KAACA,EAAAA,SAAAA,CAAS,UAAU,yBAAA,CAA2B,CAAA,EAC1C,EAGP,EAAA,EAAA,KAAC,MAAA,CAAI,UAAU,iBACb,EAAA,EAAA,MAACE,EAAAA,KAAAA,CAAK,aAAa,qBACjB,EAAA,EAAA,MAACC,EAAAA,SAAAA,CAAS,UAAU,kBAClB,EAAA,EAAA,KAACC,EAAAA,YAAAA,CAAY,MAAM,UAAU,SAAA,aAC3B,EAAA,EAAA,KAACJ,EAAAA,SAAAA,CAAS,UAAU,WAAA,CAAa,EACrB,EACd,EAAA,EAAA,KAACI,EAAAA,YAAAA,CAAY,MAAM,QAAQ,SAAA,aACzB,EAAA,EAAA,KAACJ,EAAAA,SAAAA,CAAS,UAAU,WAAA,CAAa,EACrB,EACd,EAAA,EAAA,KAACI,EAAAA,YAAAA,CAAY,MAAM,UAAU,SAAA,aAC3B,EAAA,EAAA,KAACJ,EAAAA,SAAAA,CAAS,UAAU,WAAA,CAAa,EACrB,GACL,EACX,EAAA,EAAA,KAACK,EAAAA,YAAAA,CAAY,MAAM,oBACjB,EAAA,EAAA,MAAC,MAAA,CAAI,UAAU,uBACb,EAAA,EAAA,KAACL,EAAAA,SAAAA,CAAS,UAAU,aAAA,CAAe,EACnC,EAAA,EAAA,KAACA,EAAAA,SAAAA,CAAS,UAAU,aAAA,CAAe,EACnC,EAAA,EAAA,KAACA,EAAAA,SAAAA,CAAS,UAAU,YAAA,CAAc,EAClC,EAAA,EAAA,KAACA,EAAAA,SAAAA,CAAS,UAAU,cAAA,CAAgB,GAChC,EACM,CAAA,EACT,EACH,GACF,CAAA,EACF"}
@@ -0,0 +1,9 @@
1
+ //#region packages/components/products/product-loading-page.d.ts
2
+ interface ProductLoadingPageProps {
3
+ className?: string;
4
+ hideGallery?: boolean;
5
+ }
6
+ declare const ProductLoadingPage: React.FC<ProductLoadingPageProps>;
7
+ //#endregion
8
+ export { ProductLoadingPage, ProductLoadingPageProps };
9
+ //# sourceMappingURL=product-loading-page.d.cts.map
@@ -0,0 +1,9 @@
1
+ //#region packages/components/products/product-loading-page.d.ts
2
+ interface ProductLoadingPageProps {
3
+ className?: string;
4
+ hideGallery?: boolean;
5
+ }
6
+ declare const ProductLoadingPage: React.FC<ProductLoadingPageProps>;
7
+ //#endregion
8
+ export { ProductLoadingPage, ProductLoadingPageProps };
9
+ //# sourceMappingURL=product-loading-page.d.ts.map
@@ -0,0 +1,2 @@
1
+ "use client";import{Skeleton as e}from"../skeleton-ByN-MrQO.js";import{Flex as t}from"../flex-BJgsQWLI.js";import{Tabs as n,TabsContent as r,TabsList as i,TabsTrigger as a}from"../tabs-DVHFEz9m.js";import{cn as o}from"@customafk/react-toolkit/utils";import{jsx as s,jsxs as c}from"react/jsx-runtime";const l=({className:l,hideGallery:u=!1})=>c(`div`,{className:o(`flex w-full flex-col lg:flex-row gap-8 animate-in fade-in duration-300`,l),children:[!u&&c(`div`,{className:`w-full lg:w-1/2 flex flex-col gap-4`,children:[s(e,{className:`aspect-square w-full rounded-lg`}),s(`div`,{className:`flex gap-2 overflow-x-auto pb-1`,children:[...[,,,,]].map((t,n)=>s(e,{className:`aspect-square w-20 h-20 flex-shrink-0 rounded-md`},n))})]}),c(`div`,{className:o(`flex-1 flex flex-col gap-6`,u?`w-full`:`w-full lg:w-1/2`),children:[c(`div`,{className:`space-y-4`,children:[s(e,{className:`h-8 w-3/4`}),s(e,{className:`h-6 w-1/4`}),s(e,{className:`h-5 w-full`}),s(e,{className:`h-5 w-full`}),s(e,{className:`h-5 w-3/4`})]}),c(`div`,{className:`flex flex-col gap-2 mt-2`,children:[s(e,{className:`h-8 w-1/3`}),c(`div`,{className:`flex gap-2 items-center`,children:[s(e,{className:`h-6 w-24`}),s(e,{className:`h-6 w-32`})]})]}),c(t,{gap:`md`,className:`mt-2`,children:[s(e,{className:`h-10 w-32 rounded-full`}),s(e,{className:`h-10 w-32 rounded-full`})]}),s(`div`,{className:`mt-6`,children:c(n,{defaultValue:`details`,children:[c(i,{className:`mb-4`,children:[s(a,{value:`details`,disabled:!0,children:s(e,{className:`h-4 w-20`})}),s(a,{value:`specs`,disabled:!0,children:s(e,{className:`h-4 w-24`})}),s(a,{value:`reviews`,disabled:!0,children:s(e,{className:`h-4 w-20`})})]}),s(r,{value:`details`,children:c(`div`,{className:`space-y-4`,children:[s(e,{className:`h-5 w-full`}),s(e,{className:`h-5 w-full`}),s(e,{className:`h-5 w-4/5`}),s(e,{className:`h-5 w-11/12`})]})})]})})]})]});export{l as ProductLoadingPage};
2
+ //# sourceMappingURL=product-loading-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"product-loading-page.js","names":["ProductLoadingPage: React.FC<ProductLoadingPageProps>"],"sources":["../../packages/components/products/product-loading-page.tsx"],"sourcesContent":["'use client';\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Flex } from '@/components/layouts/flex';\nimport { Skeleton } from '@/components/ui/skeleton';\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';\n\nexport interface ProductLoadingPageProps {\n className?: string;\n hideGallery?: boolean;\n}\n\nexport const ProductLoadingPage: React.FC<ProductLoadingPageProps> = ({ className, hideGallery = false }) => {\n return (\n <div className={cn('flex w-full flex-col lg:flex-row gap-8 animate-in fade-in duration-300', className)}>\n {/* Gallery Skeleton */}\n {!hideGallery && (\n <div className=\"w-full lg:w-1/2 flex flex-col gap-4\">\n <Skeleton className=\"aspect-square w-full rounded-lg\" />\n <div className=\"flex gap-2 overflow-x-auto pb-1\">\n {[...Array(4)].map((_, i) => (\n <Skeleton key={i} className=\"aspect-square w-20 h-20 flex-shrink-0 rounded-md\" />\n ))}\n </div>\n </div>\n )}\n\n {/* Product Info Skeleton */}\n <div className={cn('flex-1 flex flex-col gap-6', hideGallery ? 'w-full' : 'w-full lg:w-1/2')}>\n {/* Basic Info */}\n <div className=\"space-y-4\">\n <Skeleton className=\"h-8 w-3/4\" />\n <Skeleton className=\"h-6 w-1/4\" />\n <Skeleton className=\"h-5 w-full\" />\n <Skeleton className=\"h-5 w-full\" />\n <Skeleton className=\"h-5 w-3/4\" />\n </div>\n\n {/* Price and Stock */}\n <div className=\"flex flex-col gap-2 mt-2\">\n <Skeleton className=\"h-8 w-1/3\" />\n <div className=\"flex gap-2 items-center\">\n <Skeleton className=\"h-6 w-24\" />\n <Skeleton className=\"h-6 w-32\" />\n </div>\n </div>\n\n {/* Actions */}\n <Flex gap=\"md\" className=\"mt-2\">\n <Skeleton className=\"h-10 w-32 rounded-full\" />\n <Skeleton className=\"h-10 w-32 rounded-full\" />\n </Flex>\n\n {/* Tabs */}\n <div className=\"mt-6\">\n <Tabs defaultValue=\"details\">\n <TabsList className=\"mb-4\">\n <TabsTrigger value=\"details\" disabled>\n <Skeleton className=\"h-4 w-20\" />\n </TabsTrigger>\n <TabsTrigger value=\"specs\" disabled>\n <Skeleton className=\"h-4 w-24\" />\n </TabsTrigger>\n <TabsTrigger value=\"reviews\" disabled>\n <Skeleton className=\"h-4 w-20\" />\n </TabsTrigger>\n </TabsList>\n <TabsContent value=\"details\">\n <div className=\"space-y-4\">\n <Skeleton className=\"h-5 w-full\" />\n <Skeleton className=\"h-5 w-full\" />\n <Skeleton className=\"h-5 w-4/5\" />\n <Skeleton className=\"h-5 w-11/12\" />\n </div>\n </TabsContent>\n </Tabs>\n </div>\n </div>\n </div>\n );\n};\n"],"mappings":"4SAYA,MAAaA,GAAyD,CAAE,YAAW,cAAc,MAE7F,EAAC,MAAA,CAAI,UAAW,EAAG,yEAA0E,EAAU,WAEpG,CAAC,GACA,EAAC,MAAA,CAAI,UAAU,gDACb,EAAC,EAAA,CAAS,UAAU,kCAAA,CAAoC,CACxD,EAAC,MAAA,CAAI,UAAU,2CACZ,CAAC,GAAG,MAAQ,CAAC,CAAC,KAAK,EAAG,IACrB,EAAC,EAAA,CAAiB,UAAU,mDAAA,CAAb,EAAkE,CACjF,EACE,CAAA,EACF,CAIR,EAAC,MAAA,CAAI,UAAW,EAAG,6BAA8B,EAAc,SAAW,kBAAkB,WAE1F,EAAC,MAAA,CAAI,UAAU,sBACb,EAAC,EAAA,CAAS,UAAU,YAAA,CAAc,CAClC,EAAC,EAAA,CAAS,UAAU,YAAA,CAAc,CAClC,EAAC,EAAA,CAAS,UAAU,aAAA,CAAe,CACnC,EAAC,EAAA,CAAS,UAAU,aAAA,CAAe,CACnC,EAAC,EAAA,CAAS,UAAU,YAAA,CAAc,GAC9B,CAGN,EAAC,MAAA,CAAI,UAAU,qCACb,EAAC,EAAA,CAAS,UAAU,YAAA,CAAc,CAClC,EAAC,MAAA,CAAI,UAAU,oCACb,EAAC,EAAA,CAAS,UAAU,WAAA,CAAa,CACjC,EAAC,EAAA,CAAS,UAAU,WAAA,CAAa,CAAA,EAC7B,CAAA,EACF,CAGN,EAAC,EAAA,CAAK,IAAI,KAAK,UAAU,iBACvB,EAAC,EAAA,CAAS,UAAU,yBAAA,CAA2B,CAC/C,EAAC,EAAA,CAAS,UAAU,yBAAA,CAA2B,CAAA,EAC1C,CAGP,EAAC,MAAA,CAAI,UAAU,gBACb,EAAC,EAAA,CAAK,aAAa,oBACjB,EAAC,EAAA,CAAS,UAAU,iBAClB,EAAC,EAAA,CAAY,MAAM,UAAU,SAAA,YAC3B,EAAC,EAAA,CAAS,UAAU,WAAA,CAAa,EACrB,CACd,EAAC,EAAA,CAAY,MAAM,QAAQ,SAAA,YACzB,EAAC,EAAA,CAAS,UAAU,WAAA,CAAa,EACrB,CACd,EAAC,EAAA,CAAY,MAAM,UAAU,SAAA,YAC3B,EAAC,EAAA,CAAS,UAAU,WAAA,CAAa,EACrB,GACL,CACX,EAAC,EAAA,CAAY,MAAM,mBACjB,EAAC,MAAA,CAAI,UAAU,sBACb,EAAC,EAAA,CAAS,UAAU,aAAA,CAAe,CACnC,EAAC,EAAA,CAAS,UAAU,aAAA,CAAe,CACnC,EAAC,EAAA,CAAS,UAAU,YAAA,CAAc,CAClC,EAAC,EAAA,CAAS,UAAU,cAAA,CAAgB,GAChC,EACM,CAAA,EACT,EACH,GACF,CAAA,EACF"}
@@ -1,2 +1,2 @@
1
- "use client";const e=require(`../chunk-CUT6urMc.cjs`);require(`../dist-CAevLI5t.cjs`),require(`../button-variants-BHDyMRNh.cjs`);const t=require(`../button-BCahPWI8.cjs`),n=require(`../input-D_tClptL.cjs`);let r=require(`lucide-react`);r=e.__toESM(r);let i=require(`@customafk/react-toolkit/utils`);i=e.__toESM(i);let a=require(`react`);a=e.__toESM(a);let o=require(`react/jsx-runtime`);o=e.__toESM(o);let s=require(`@customafk/react-toolkit/hooks/useDebounceCallback`);s=e.__toESM(s);function c({initialValue:e=1,min:c=1,max:l=100,onQuantityChange:u,onButtonClick:d,debounceDelay:f=300,className:p,disabled:m=!1}){let[h,g]=(0,a.useState)(Math.min(Math.max(e,c),l)),_=(0,s.useDebounceCallback)(e=>{u?.(e)},f);(0,a.useEffect)(()=>{g(Math.min(Math.max(e,c),l))},[e,c,l]),(0,a.useEffect)(()=>(f<=0?u?.(h):_(h),()=>{_.cancel()}),[h,_,u,f]);let v=(0,a.useCallback)(()=>{if(h>=l)return;let e=h+1;g(e),d?.(`increment`,e)},[h,l,d]),y=(0,a.useCallback)(()=>{if(h<=c)return;let e=h-1;g(e),d?.(`decrement`,e)},[h,c,d]),b=(0,a.useCallback)(e=>{let t=parseInt(e,10);if(Number.isNaN(t)){g(c);return}g(t<c?c:t>l?l:t)},[c,l]),x=(0,a.useCallback)(()=>{Number.isNaN(h)||h<c?g(c):h>l&&g(l)},[h,c,l]);return(0,o.jsxs)(`div`,{className:(0,i.cn)(`flex gap-x-0.5 h-8 items-center`,p),children:[(0,o.jsx)(t.Button,{variant:`outline`,color:`muted`,size:`icon`,onClick:y,disabled:m||h<=c,"aria-label":`Decrease quantity`,className:`rounded-xs focus:border focus:border-border`,children:(0,o.jsx)(r.Minus,{size:16})}),(0,o.jsx)(n.Input,{value:h.toString(),onValueChange:b,onBlur:x,min:c,max:l,disabled:m,className:`h-8 w-14 border border-border p-0 text-center focus-visible:border-muted focus-visible:ring-0 rounded-xs`,"aria-label":`Product quantity`}),(0,o.jsx)(t.Button,{variant:`outline`,color:`muted`,size:`icon`,onClick:v,disabled:m||h>=l,"aria-label":`Increase quantity`,className:`rounded-xs focus:border focus:border-border`,children:(0,o.jsx)(r.Plus,{size:16})})]})}exports.ProductQuantityControl=c;
1
+ "use client";const e=require(`../chunk-CUT6urMc.cjs`);require(`../dist-CAevLI5t.cjs`),require(`../button-variants-BHDyMRNh.cjs`);const t=require(`../button-BCahPWI8.cjs`),n=require(`../input-D7aXVX7j.cjs`);let r=require(`lucide-react`);r=e.__toESM(r);let i=require(`@customafk/react-toolkit/utils`);i=e.__toESM(i);let a=require(`react`);a=e.__toESM(a);let o=require(`react/jsx-runtime`);o=e.__toESM(o);let s=require(`@customafk/react-toolkit/hooks/useDebounceCallback`);s=e.__toESM(s);function c({initialValue:e=1,min:c=1,max:l=100,onQuantityChange:u,onButtonClick:d,debounceDelay:f=300,className:p,disabled:m=!1}){let[h,g]=(0,a.useState)(Math.min(Math.max(e,c),l)),_=(0,s.useDebounceCallback)(e=>{u?.(e)},f);(0,a.useEffect)(()=>{g(Math.min(Math.max(e,c),l))},[e,c,l]),(0,a.useEffect)(()=>(f<=0?u?.(h):_(h),()=>{_.cancel()}),[h,_,u,f]);let v=(0,a.useCallback)(()=>{if(h>=l)return;let e=h+1;g(e),d?.(`increment`,e)},[h,l,d]),y=(0,a.useCallback)(()=>{if(h<=c)return;let e=h-1;g(e),d?.(`decrement`,e)},[h,c,d]),b=(0,a.useCallback)(e=>{let t=parseInt(e,10);if(Number.isNaN(t)){g(c);return}g(t<c?c:t>l?l:t)},[c,l]),x=(0,a.useCallback)(()=>{Number.isNaN(h)||h<c?g(c):h>l&&g(l)},[h,c,l]);return(0,o.jsxs)(`div`,{className:(0,i.cn)(`flex gap-x-0.5 h-8 items-center`,p),children:[(0,o.jsx)(t.Button,{variant:`outline`,color:`muted`,size:`icon`,onClick:y,disabled:m||h<=c,"aria-label":`Decrease quantity`,className:`rounded-xs focus:border focus:border-border bg-background`,children:(0,o.jsx)(r.Minus,{size:16})}),(0,o.jsx)(n.Input,{value:h.toString(),onValueChange:b,onBlur:x,min:c,max:l,disabled:m,className:`h-8 w-14 border border-border p-0 text-center focus-visible:border-muted focus-visible:ring-0 rounded-xs bg-background`,"aria-label":`Product quantity`}),(0,o.jsx)(t.Button,{variant:`outline`,color:`muted`,size:`icon`,onClick:v,disabled:m||h>=l,"aria-label":`Increase quantity`,className:`rounded-xs focus:border focus:border-border bg-background`,children:(0,o.jsx)(r.Plus,{size:16})})]})}exports.ProductQuantityControl=c;
2
2
  //# sourceMappingURL=product-quantity-control.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"product-quantity-control.cjs","names":["Button","Minus","Input","Plus"],"sources":["../../packages/components/products/product-quantity-control.tsx"],"sourcesContent":["'use client';\n\nimport { useCallback, useEffect, useState } from 'react';\n\nimport { Minus, Plus } from 'lucide-react';\n\nimport { useDebounceCallback } from '@customafk/react-toolkit/hooks/useDebounceCallback';\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Button } from '../ui/button';\nimport { Input } from '../ui/input';\n\nexport interface ProductQuantityControlProps {\n /**\n * Initial quantity value\n */\n initialValue?: number;\n /**\n * Minimum allowed quantity (default: 1)\n */\n min?: number;\n /**\n * Maximum allowed quantity (default: 100)\n */\n max?: number;\n /**\n * Callback when quantity changes\n */\n onQuantityChange?: (quantity: number) => void;\n /**\n * Callback when increment or decrement button is clicked\n */\n onButtonClick?: (action: 'increment' | 'decrement', newQuantity: number) => void;\n /**\n * Delay in milliseconds before triggering onQuantityChange (default: 300)\n */\n debounceDelay?: number;\n /**\n * Custom class name\n */\n className?: string;\n /**\n * Whether the control is disabled\n */\n disabled?: boolean;\n}\n\nexport function ProductQuantityControl({\n initialValue = 1,\n min = 1,\n max = 100,\n onQuantityChange,\n onButtonClick,\n debounceDelay = 300,\n className,\n disabled = false,\n}: ProductQuantityControlProps) {\n const [quantity, setQuantity] = useState<number>(Math.min(Math.max(initialValue, min), max));\n\n // Create debounced version of the quantity change handler\n const debouncedQuantityChange = useDebounceCallback((value: number) => {\n onQuantityChange?.(value);\n }, debounceDelay);\n\n useEffect(() => {\n // Ensure initial value is within limits when props change\n const boundedValue = Math.min(Math.max(initialValue, min), max);\n setQuantity(boundedValue);\n }, [initialValue, min, max]);\n\n // Trigger debounced callback when quantity changes\n useEffect(() => {\n if (debounceDelay <= 0) {\n // If debounce is disabled, call immediately\n onQuantityChange?.(quantity);\n } else {\n debouncedQuantityChange(quantity);\n }\n return () => {\n debouncedQuantityChange.cancel();\n };\n }, [quantity, debouncedQuantityChange, onQuantityChange, debounceDelay]);\n\n const increment = useCallback(() => {\n if (quantity >= max) return;\n const newQuantity = quantity + 1;\n setQuantity(newQuantity);\n onButtonClick?.('increment', newQuantity);\n }, [quantity, max, onButtonClick]);\n\n const decrement = useCallback(() => {\n if (quantity <= min) return;\n const newQuantity = quantity - 1;\n setQuantity(newQuantity);\n onButtonClick?.('decrement', newQuantity);\n }, [quantity, min, onButtonClick]);\n\n const handleInputChange = useCallback(\n (value: string) => {\n const newValue = parseInt(value, 10);\n\n if (Number.isNaN(newValue)) {\n setQuantity(min);\n return;\n }\n\n if (newValue < min) {\n setQuantity(min);\n } else if (newValue > max) {\n setQuantity(max);\n } else {\n setQuantity(newValue);\n }\n },\n [min, max]\n );\n\n const handleBlur = useCallback(() => {\n // Ensure value is within limits when input loses focus\n if (Number.isNaN(quantity) || quantity < min) {\n setQuantity(min);\n } else if (quantity > max) {\n setQuantity(max);\n }\n }, [quantity, min, max]);\n\n return (\n <div className={cn('flex gap-x-0.5 h-8 items-center', className)}>\n <Button\n variant=\"outline\"\n color=\"muted\"\n size=\"icon\"\n onClick={decrement}\n disabled={disabled || quantity <= min}\n aria-label=\"Decrease quantity\"\n className=\"rounded-xs focus:border focus:border-border\"\n >\n <Minus size={16} />\n </Button>\n\n <Input\n value={quantity.toString()}\n onValueChange={handleInputChange}\n onBlur={handleBlur}\n min={min}\n max={max}\n disabled={disabled}\n className=\"h-8 w-14 border border-border p-0 text-center focus-visible:border-muted focus-visible:ring-0 rounded-xs\"\n aria-label=\"Product quantity\"\n />\n\n <Button\n variant=\"outline\"\n color=\"muted\"\n size=\"icon\"\n onClick={increment}\n disabled={disabled || quantity >= max}\n aria-label=\"Increase quantity\"\n className=\"rounded-xs focus:border focus:border-border\"\n >\n <Plus size={16} />\n </Button>\n </div>\n );\n}\n"],"mappings":"qeA+CA,SAAgB,EAAuB,CACrC,eAAe,EACf,MAAM,EACN,MAAM,IACN,mBACA,gBACA,gBAAgB,IAChB,YACA,WAAW,IACmB,CAC9B,GAAM,CAAC,EAAU,IAAA,EAAA,EAAA,UAAgC,KAAK,IAAI,KAAK,IAAI,EAAc,EAAI,CAAE,EAAI,CAAC,CAGtF,GAAA,EAAA,EAAA,qBAA+C,GAAkB,CACrE,IAAmB,EAAM,EACxB,EAAc,EAEjB,EAAA,EAAA,eAAgB,CAGd,EADqB,KAAK,IAAI,KAAK,IAAI,EAAc,EAAI,CAAE,EAAI,CACtC,EACxB,CAAC,EAAc,EAAK,EAAI,CAAC,EAG5B,EAAA,EAAA,gBACM,GAAiB,EAEnB,IAAmB,EAAS,CAE5B,EAAwB,EAAS,KAEtB,CACX,EAAwB,QAAQ,GAEjC,CAAC,EAAU,EAAyB,EAAkB,EAAc,CAAC,CAExE,IAAM,GAAA,EAAA,EAAA,iBAA8B,CAClC,GAAI,GAAY,EAAK,OACrB,IAAM,EAAc,EAAW,EAC/B,EAAY,EAAY,CACxB,IAAgB,YAAa,EAAY,EACxC,CAAC,EAAU,EAAK,EAAc,CAAC,CAE5B,GAAA,EAAA,EAAA,iBAA8B,CAClC,GAAI,GAAY,EAAK,OACrB,IAAM,EAAc,EAAW,EAC/B,EAAY,EAAY,CACxB,IAAgB,YAAa,EAAY,EACxC,CAAC,EAAU,EAAK,EAAc,CAAC,CAE5B,GAAA,EAAA,EAAA,aACH,GAAkB,CACjB,IAAM,EAAW,SAAS,EAAO,GAAG,CAEpC,GAAI,OAAO,MAAM,EAAS,CAAE,CAC1B,EAAY,EAAI,CAChB,OAIA,EADE,EAAW,EACD,EACH,EAAW,EACR,EAEA,EAAS,EAGzB,CAAC,EAAK,EAAI,CACX,CAEK,GAAA,EAAA,EAAA,iBAA+B,CAE/B,OAAO,MAAM,EAAS,EAAI,EAAW,EACvC,EAAY,EAAI,CACP,EAAW,GACpB,EAAY,EAAI,EAEjB,CAAC,EAAU,EAAK,EAAI,CAAC,CAExB,OACE,EAAA,EAAA,MAAC,MAAA,CAAI,WAAA,EAAA,EAAA,IAAc,kCAAmC,EAAU,YAC9D,EAAA,EAAA,KAACA,EAAAA,OAAAA,CACC,QAAQ,UACR,MAAM,QACN,KAAK,OACL,QAAS,EACT,SAAU,GAAY,GAAY,EAClC,aAAW,oBACX,UAAU,wDAEV,EAAA,EAAA,KAACC,EAAAA,MAAAA,CAAM,KAAM,GAAA,CAAM,EACZ,EAET,EAAA,EAAA,KAACC,EAAAA,MAAAA,CACC,MAAO,EAAS,UAAU,CAC1B,cAAe,EACf,OAAQ,EACH,MACA,MACK,WACV,UAAU,2GACV,aAAW,oBACX,EAEF,EAAA,EAAA,KAACF,EAAAA,OAAAA,CACC,QAAQ,UACR,MAAM,QACN,KAAK,OACL,QAAS,EACT,SAAU,GAAY,GAAY,EAClC,aAAW,oBACX,UAAU,wDAEV,EAAA,EAAA,KAACG,EAAAA,KAAAA,CAAK,KAAM,GAAA,CAAM,EACX,GACL"}
1
+ {"version":3,"file":"product-quantity-control.cjs","names":["Button","Minus","Input","Plus"],"sources":["../../packages/components/products/product-quantity-control.tsx"],"sourcesContent":["'use client';\n\nimport { useCallback, useEffect, useState } from 'react';\n\nimport { Minus, Plus } from 'lucide-react';\n\nimport { useDebounceCallback } from '@customafk/react-toolkit/hooks/useDebounceCallback';\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Button } from '../ui/button';\nimport { Input } from '../ui/input';\n\nexport interface ProductQuantityControlProps {\n /**\n * Initial quantity value\n */\n initialValue?: number;\n /**\n * Minimum allowed quantity (default: 1)\n */\n min?: number;\n /**\n * Maximum allowed quantity (default: 100)\n */\n max?: number;\n /**\n * Callback when quantity changes\n */\n onQuantityChange?: (quantity: number) => void;\n /**\n * Callback when increment or decrement button is clicked\n */\n onButtonClick?: (action: 'increment' | 'decrement', newQuantity: number) => void;\n /**\n * Delay in milliseconds before triggering onQuantityChange (default: 300)\n */\n debounceDelay?: number;\n /**\n * Custom class name\n */\n className?: string;\n /**\n * Whether the control is disabled\n */\n disabled?: boolean;\n}\n\nexport function ProductQuantityControl({\n initialValue = 1,\n min = 1,\n max = 100,\n onQuantityChange,\n onButtonClick,\n debounceDelay = 300,\n className,\n disabled = false,\n}: ProductQuantityControlProps) {\n const [quantity, setQuantity] = useState<number>(Math.min(Math.max(initialValue, min), max));\n\n // Create debounced version of the quantity change handler\n const debouncedQuantityChange = useDebounceCallback((value: number) => {\n onQuantityChange?.(value);\n }, debounceDelay);\n\n useEffect(() => {\n // Ensure initial value is within limits when props change\n const boundedValue = Math.min(Math.max(initialValue, min), max);\n setQuantity(boundedValue);\n }, [initialValue, min, max]);\n\n // Trigger debounced callback when quantity changes\n useEffect(() => {\n if (debounceDelay <= 0) {\n // If debounce is disabled, call immediately\n onQuantityChange?.(quantity);\n } else {\n debouncedQuantityChange(quantity);\n }\n return () => {\n debouncedQuantityChange.cancel();\n };\n }, [quantity, debouncedQuantityChange, onQuantityChange, debounceDelay]);\n\n const increment = useCallback(() => {\n if (quantity >= max) return;\n const newQuantity = quantity + 1;\n setQuantity(newQuantity);\n onButtonClick?.('increment', newQuantity);\n }, [quantity, max, onButtonClick]);\n\n const decrement = useCallback(() => {\n if (quantity <= min) return;\n const newQuantity = quantity - 1;\n setQuantity(newQuantity);\n onButtonClick?.('decrement', newQuantity);\n }, [quantity, min, onButtonClick]);\n\n const handleInputChange = useCallback(\n (value: string) => {\n const newValue = parseInt(value, 10);\n\n if (Number.isNaN(newValue)) {\n setQuantity(min);\n return;\n }\n\n if (newValue < min) {\n setQuantity(min);\n } else if (newValue > max) {\n setQuantity(max);\n } else {\n setQuantity(newValue);\n }\n },\n [min, max]\n );\n\n const handleBlur = useCallback(() => {\n // Ensure value is within limits when input loses focus\n if (Number.isNaN(quantity) || quantity < min) {\n setQuantity(min);\n } else if (quantity > max) {\n setQuantity(max);\n }\n }, [quantity, min, max]);\n\n return (\n <div className={cn('flex gap-x-0.5 h-8 items-center', className)}>\n <Button\n variant=\"outline\"\n color=\"muted\"\n size=\"icon\"\n onClick={decrement}\n disabled={disabled || quantity <= min}\n aria-label=\"Decrease quantity\"\n className=\"rounded-xs focus:border focus:border-border bg-background\"\n >\n <Minus size={16} />\n </Button>\n\n <Input\n value={quantity.toString()}\n onValueChange={handleInputChange}\n onBlur={handleBlur}\n min={min}\n max={max}\n disabled={disabled}\n className=\"h-8 w-14 border border-border p-0 text-center focus-visible:border-muted focus-visible:ring-0 rounded-xs bg-background\"\n aria-label=\"Product quantity\"\n />\n\n <Button\n variant=\"outline\"\n color=\"muted\"\n size=\"icon\"\n onClick={increment}\n disabled={disabled || quantity >= max}\n aria-label=\"Increase quantity\"\n className=\"rounded-xs focus:border focus:border-border bg-background\"\n >\n <Plus size={16} />\n </Button>\n </div>\n );\n}\n"],"mappings":"qeA+CA,SAAgB,EAAuB,CACrC,eAAe,EACf,MAAM,EACN,MAAM,IACN,mBACA,gBACA,gBAAgB,IAChB,YACA,WAAW,IACmB,CAC9B,GAAM,CAAC,EAAU,IAAA,EAAA,EAAA,UAAgC,KAAK,IAAI,KAAK,IAAI,EAAc,EAAI,CAAE,EAAI,CAAC,CAGtF,GAAA,EAAA,EAAA,qBAA+C,GAAkB,CACrE,IAAmB,EAAM,EACxB,EAAc,EAEjB,EAAA,EAAA,eAAgB,CAGd,EADqB,KAAK,IAAI,KAAK,IAAI,EAAc,EAAI,CAAE,EAAI,CACtC,EACxB,CAAC,EAAc,EAAK,EAAI,CAAC,EAG5B,EAAA,EAAA,gBACM,GAAiB,EAEnB,IAAmB,EAAS,CAE5B,EAAwB,EAAS,KAEtB,CACX,EAAwB,QAAQ,GAEjC,CAAC,EAAU,EAAyB,EAAkB,EAAc,CAAC,CAExE,IAAM,GAAA,EAAA,EAAA,iBAA8B,CAClC,GAAI,GAAY,EAAK,OACrB,IAAM,EAAc,EAAW,EAC/B,EAAY,EAAY,CACxB,IAAgB,YAAa,EAAY,EACxC,CAAC,EAAU,EAAK,EAAc,CAAC,CAE5B,GAAA,EAAA,EAAA,iBAA8B,CAClC,GAAI,GAAY,EAAK,OACrB,IAAM,EAAc,EAAW,EAC/B,EAAY,EAAY,CACxB,IAAgB,YAAa,EAAY,EACxC,CAAC,EAAU,EAAK,EAAc,CAAC,CAE5B,GAAA,EAAA,EAAA,aACH,GAAkB,CACjB,IAAM,EAAW,SAAS,EAAO,GAAG,CAEpC,GAAI,OAAO,MAAM,EAAS,CAAE,CAC1B,EAAY,EAAI,CAChB,OAIA,EADE,EAAW,EACD,EACH,EAAW,EACR,EAEA,EAAS,EAGzB,CAAC,EAAK,EAAI,CACX,CAEK,GAAA,EAAA,EAAA,iBAA+B,CAE/B,OAAO,MAAM,EAAS,EAAI,EAAW,EACvC,EAAY,EAAI,CACP,EAAW,GACpB,EAAY,EAAI,EAEjB,CAAC,EAAU,EAAK,EAAI,CAAC,CAExB,OACE,EAAA,EAAA,MAAC,MAAA,CAAI,WAAA,EAAA,EAAA,IAAc,kCAAmC,EAAU,YAC9D,EAAA,EAAA,KAACA,EAAAA,OAAAA,CACC,QAAQ,UACR,MAAM,QACN,KAAK,OACL,QAAS,EACT,SAAU,GAAY,GAAY,EAClC,aAAW,oBACX,UAAU,sEAEV,EAAA,EAAA,KAACC,EAAAA,MAAAA,CAAM,KAAM,GAAA,CAAM,EACZ,EAET,EAAA,EAAA,KAACC,EAAAA,MAAAA,CACC,MAAO,EAAS,UAAU,CAC1B,cAAe,EACf,OAAQ,EACH,MACA,MACK,WACV,UAAU,yHACV,aAAW,oBACX,EAEF,EAAA,EAAA,KAACF,EAAAA,OAAAA,CACC,QAAQ,UACR,MAAM,QACN,KAAK,OACL,QAAS,EACT,SAAU,GAAY,GAAY,EAClC,aAAW,oBACX,UAAU,sEAEV,EAAA,EAAA,KAACG,EAAAA,KAAAA,CAAK,KAAM,GAAA,CAAM,EACX,GACL"}
@@ -1,4 +1,4 @@
1
- import * as react_jsx_runtime11 from "react/jsx-runtime";
1
+ import * as react_jsx_runtime14 from "react/jsx-runtime";
2
2
 
3
3
  //#region packages/components/products/product-quantity-control.d.ts
4
4
  interface ProductQuantityControlProps {
@@ -44,7 +44,7 @@ declare function ProductQuantityControl({
44
44
  debounceDelay,
45
45
  className,
46
46
  disabled
47
- }: ProductQuantityControlProps): react_jsx_runtime11.JSX.Element;
47
+ }: ProductQuantityControlProps): react_jsx_runtime14.JSX.Element;
48
48
  //#endregion
49
49
  export { ProductQuantityControl, ProductQuantityControlProps };
50
50
  //# sourceMappingURL=product-quantity-control.d.cts.map
@@ -1,4 +1,4 @@
1
- import * as react_jsx_runtime13 from "react/jsx-runtime";
1
+ import * as react_jsx_runtime15 from "react/jsx-runtime";
2
2
 
3
3
  //#region packages/components/products/product-quantity-control.d.ts
4
4
  interface ProductQuantityControlProps {
@@ -44,7 +44,7 @@ declare function ProductQuantityControl({
44
44
  debounceDelay,
45
45
  className,
46
46
  disabled
47
- }: ProductQuantityControlProps): react_jsx_runtime13.JSX.Element;
47
+ }: ProductQuantityControlProps): react_jsx_runtime15.JSX.Element;
48
48
  //#endregion
49
49
  export { ProductQuantityControl, ProductQuantityControlProps };
50
50
  //# sourceMappingURL=product-quantity-control.d.ts.map
@@ -1,2 +1,2 @@
1
- "use client";import"../dist-BgkALM7U.js";import"../button-variants-aFWCWUvu.js";import{Button as e}from"../button-CriBqo8S.js";import{Input as t}from"../input-BStypTnq.js";import{Minus as n,Plus as r}from"lucide-react";import{cn as i}from"@customafk/react-toolkit/utils";import{useCallback as a,useEffect as o,useState as s}from"react";import{jsx as c,jsxs as l}from"react/jsx-runtime";import{useDebounceCallback as u}from"@customafk/react-toolkit/hooks/useDebounceCallback";function d({initialValue:d=1,min:f=1,max:p=100,onQuantityChange:m,onButtonClick:h,debounceDelay:g=300,className:_,disabled:v=!1}){let[y,b]=s(Math.min(Math.max(d,f),p)),x=u(e=>{m?.(e)},g);o(()=>{b(Math.min(Math.max(d,f),p))},[d,f,p]),o(()=>(g<=0?m?.(y):x(y),()=>{x.cancel()}),[y,x,m,g]);let S=a(()=>{if(y>=p)return;let e=y+1;b(e),h?.(`increment`,e)},[y,p,h]),C=a(()=>{if(y<=f)return;let e=y-1;b(e),h?.(`decrement`,e)},[y,f,h]),w=a(e=>{let t=parseInt(e,10);if(Number.isNaN(t)){b(f);return}b(t<f?f:t>p?p:t)},[f,p]),T=a(()=>{Number.isNaN(y)||y<f?b(f):y>p&&b(p)},[y,f,p]);return l(`div`,{className:i(`flex gap-x-0.5 h-8 items-center`,_),children:[c(e,{variant:`outline`,color:`muted`,size:`icon`,onClick:C,disabled:v||y<=f,"aria-label":`Decrease quantity`,className:`rounded-xs focus:border focus:border-border`,children:c(n,{size:16})}),c(t,{value:y.toString(),onValueChange:w,onBlur:T,min:f,max:p,disabled:v,className:`h-8 w-14 border border-border p-0 text-center focus-visible:border-muted focus-visible:ring-0 rounded-xs`,"aria-label":`Product quantity`}),c(e,{variant:`outline`,color:`muted`,size:`icon`,onClick:S,disabled:v||y>=p,"aria-label":`Increase quantity`,className:`rounded-xs focus:border focus:border-border`,children:c(r,{size:16})})]})}export{d as ProductQuantityControl};
1
+ "use client";import"../dist-BgkALM7U.js";import"../button-variants-aFWCWUvu.js";import{Button as e}from"../button-CriBqo8S.js";import{Input as t}from"../input-B-l6tT_9.js";import{Minus as n,Plus as r}from"lucide-react";import{cn as i}from"@customafk/react-toolkit/utils";import{useCallback as a,useEffect as o,useState as s}from"react";import{jsx as c,jsxs as l}from"react/jsx-runtime";import{useDebounceCallback as u}from"@customafk/react-toolkit/hooks/useDebounceCallback";function d({initialValue:d=1,min:f=1,max:p=100,onQuantityChange:m,onButtonClick:h,debounceDelay:g=300,className:_,disabled:v=!1}){let[y,b]=s(Math.min(Math.max(d,f),p)),x=u(e=>{m?.(e)},g);o(()=>{b(Math.min(Math.max(d,f),p))},[d,f,p]),o(()=>(g<=0?m?.(y):x(y),()=>{x.cancel()}),[y,x,m,g]);let S=a(()=>{if(y>=p)return;let e=y+1;b(e),h?.(`increment`,e)},[y,p,h]),C=a(()=>{if(y<=f)return;let e=y-1;b(e),h?.(`decrement`,e)},[y,f,h]),w=a(e=>{let t=parseInt(e,10);if(Number.isNaN(t)){b(f);return}b(t<f?f:t>p?p:t)},[f,p]),T=a(()=>{Number.isNaN(y)||y<f?b(f):y>p&&b(p)},[y,f,p]);return l(`div`,{className:i(`flex gap-x-0.5 h-8 items-center`,_),children:[c(e,{variant:`outline`,color:`muted`,size:`icon`,onClick:C,disabled:v||y<=f,"aria-label":`Decrease quantity`,className:`rounded-xs focus:border focus:border-border bg-background`,children:c(n,{size:16})}),c(t,{value:y.toString(),onValueChange:w,onBlur:T,min:f,max:p,disabled:v,className:`h-8 w-14 border border-border p-0 text-center focus-visible:border-muted focus-visible:ring-0 rounded-xs bg-background`,"aria-label":`Product quantity`}),c(e,{variant:`outline`,color:`muted`,size:`icon`,onClick:S,disabled:v||y>=p,"aria-label":`Increase quantity`,className:`rounded-xs focus:border focus:border-border bg-background`,children:c(r,{size:16})})]})}export{d as ProductQuantityControl};
2
2
  //# sourceMappingURL=product-quantity-control.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"product-quantity-control.js","names":[],"sources":["../../packages/components/products/product-quantity-control.tsx"],"sourcesContent":["'use client';\n\nimport { useCallback, useEffect, useState } from 'react';\n\nimport { Minus, Plus } from 'lucide-react';\n\nimport { useDebounceCallback } from '@customafk/react-toolkit/hooks/useDebounceCallback';\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Button } from '../ui/button';\nimport { Input } from '../ui/input';\n\nexport interface ProductQuantityControlProps {\n /**\n * Initial quantity value\n */\n initialValue?: number;\n /**\n * Minimum allowed quantity (default: 1)\n */\n min?: number;\n /**\n * Maximum allowed quantity (default: 100)\n */\n max?: number;\n /**\n * Callback when quantity changes\n */\n onQuantityChange?: (quantity: number) => void;\n /**\n * Callback when increment or decrement button is clicked\n */\n onButtonClick?: (action: 'increment' | 'decrement', newQuantity: number) => void;\n /**\n * Delay in milliseconds before triggering onQuantityChange (default: 300)\n */\n debounceDelay?: number;\n /**\n * Custom class name\n */\n className?: string;\n /**\n * Whether the control is disabled\n */\n disabled?: boolean;\n}\n\nexport function ProductQuantityControl({\n initialValue = 1,\n min = 1,\n max = 100,\n onQuantityChange,\n onButtonClick,\n debounceDelay = 300,\n className,\n disabled = false,\n}: ProductQuantityControlProps) {\n const [quantity, setQuantity] = useState<number>(Math.min(Math.max(initialValue, min), max));\n\n // Create debounced version of the quantity change handler\n const debouncedQuantityChange = useDebounceCallback((value: number) => {\n onQuantityChange?.(value);\n }, debounceDelay);\n\n useEffect(() => {\n // Ensure initial value is within limits when props change\n const boundedValue = Math.min(Math.max(initialValue, min), max);\n setQuantity(boundedValue);\n }, [initialValue, min, max]);\n\n // Trigger debounced callback when quantity changes\n useEffect(() => {\n if (debounceDelay <= 0) {\n // If debounce is disabled, call immediately\n onQuantityChange?.(quantity);\n } else {\n debouncedQuantityChange(quantity);\n }\n return () => {\n debouncedQuantityChange.cancel();\n };\n }, [quantity, debouncedQuantityChange, onQuantityChange, debounceDelay]);\n\n const increment = useCallback(() => {\n if (quantity >= max) return;\n const newQuantity = quantity + 1;\n setQuantity(newQuantity);\n onButtonClick?.('increment', newQuantity);\n }, [quantity, max, onButtonClick]);\n\n const decrement = useCallback(() => {\n if (quantity <= min) return;\n const newQuantity = quantity - 1;\n setQuantity(newQuantity);\n onButtonClick?.('decrement', newQuantity);\n }, [quantity, min, onButtonClick]);\n\n const handleInputChange = useCallback(\n (value: string) => {\n const newValue = parseInt(value, 10);\n\n if (Number.isNaN(newValue)) {\n setQuantity(min);\n return;\n }\n\n if (newValue < min) {\n setQuantity(min);\n } else if (newValue > max) {\n setQuantity(max);\n } else {\n setQuantity(newValue);\n }\n },\n [min, max]\n );\n\n const handleBlur = useCallback(() => {\n // Ensure value is within limits when input loses focus\n if (Number.isNaN(quantity) || quantity < min) {\n setQuantity(min);\n } else if (quantity > max) {\n setQuantity(max);\n }\n }, [quantity, min, max]);\n\n return (\n <div className={cn('flex gap-x-0.5 h-8 items-center', className)}>\n <Button\n variant=\"outline\"\n color=\"muted\"\n size=\"icon\"\n onClick={decrement}\n disabled={disabled || quantity <= min}\n aria-label=\"Decrease quantity\"\n className=\"rounded-xs focus:border focus:border-border\"\n >\n <Minus size={16} />\n </Button>\n\n <Input\n value={quantity.toString()}\n onValueChange={handleInputChange}\n onBlur={handleBlur}\n min={min}\n max={max}\n disabled={disabled}\n className=\"h-8 w-14 border border-border p-0 text-center focus-visible:border-muted focus-visible:ring-0 rounded-xs\"\n aria-label=\"Product quantity\"\n />\n\n <Button\n variant=\"outline\"\n color=\"muted\"\n size=\"icon\"\n onClick={increment}\n disabled={disabled || quantity >= max}\n aria-label=\"Increase quantity\"\n className=\"rounded-xs focus:border focus:border-border\"\n >\n <Plus size={16} />\n </Button>\n </div>\n );\n}\n"],"mappings":"2dA+CA,SAAgB,EAAuB,CACrC,eAAe,EACf,MAAM,EACN,MAAM,IACN,mBACA,gBACA,gBAAgB,IAChB,YACA,WAAW,IACmB,CAC9B,GAAM,CAAC,EAAU,GAAe,EAAiB,KAAK,IAAI,KAAK,IAAI,EAAc,EAAI,CAAE,EAAI,CAAC,CAGtF,EAA0B,EAAqB,GAAkB,CACrE,IAAmB,EAAM,EACxB,EAAc,CAEjB,MAAgB,CAGd,EADqB,KAAK,IAAI,KAAK,IAAI,EAAc,EAAI,CAAE,EAAI,CACtC,EACxB,CAAC,EAAc,EAAK,EAAI,CAAC,CAG5B,OACM,GAAiB,EAEnB,IAAmB,EAAS,CAE5B,EAAwB,EAAS,KAEtB,CACX,EAAwB,QAAQ,GAEjC,CAAC,EAAU,EAAyB,EAAkB,EAAc,CAAC,CAExE,IAAM,EAAY,MAAkB,CAClC,GAAI,GAAY,EAAK,OACrB,IAAM,EAAc,EAAW,EAC/B,EAAY,EAAY,CACxB,IAAgB,YAAa,EAAY,EACxC,CAAC,EAAU,EAAK,EAAc,CAAC,CAE5B,EAAY,MAAkB,CAClC,GAAI,GAAY,EAAK,OACrB,IAAM,EAAc,EAAW,EAC/B,EAAY,EAAY,CACxB,IAAgB,YAAa,EAAY,EACxC,CAAC,EAAU,EAAK,EAAc,CAAC,CAE5B,EAAoB,EACvB,GAAkB,CACjB,IAAM,EAAW,SAAS,EAAO,GAAG,CAEpC,GAAI,OAAO,MAAM,EAAS,CAAE,CAC1B,EAAY,EAAI,CAChB,OAIA,EADE,EAAW,EACD,EACH,EAAW,EACR,EAEA,EAAS,EAGzB,CAAC,EAAK,EAAI,CACX,CAEK,EAAa,MAAkB,CAE/B,OAAO,MAAM,EAAS,EAAI,EAAW,EACvC,EAAY,EAAI,CACP,EAAW,GACpB,EAAY,EAAI,EAEjB,CAAC,EAAU,EAAK,EAAI,CAAC,CAExB,OACE,EAAC,MAAA,CAAI,UAAW,EAAG,kCAAmC,EAAU,WAC9D,EAAC,EAAA,CACC,QAAQ,UACR,MAAM,QACN,KAAK,OACL,QAAS,EACT,SAAU,GAAY,GAAY,EAClC,aAAW,oBACX,UAAU,uDAEV,EAAC,EAAA,CAAM,KAAM,GAAA,CAAM,EACZ,CAET,EAAC,EAAA,CACC,MAAO,EAAS,UAAU,CAC1B,cAAe,EACf,OAAQ,EACH,MACA,MACK,WACV,UAAU,2GACV,aAAW,oBACX,CAEF,EAAC,EAAA,CACC,QAAQ,UACR,MAAM,QACN,KAAK,OACL,QAAS,EACT,SAAU,GAAY,GAAY,EAClC,aAAW,oBACX,UAAU,uDAEV,EAAC,EAAA,CAAK,KAAM,GAAA,CAAM,EACX,GACL"}
1
+ {"version":3,"file":"product-quantity-control.js","names":[],"sources":["../../packages/components/products/product-quantity-control.tsx"],"sourcesContent":["'use client';\n\nimport { useCallback, useEffect, useState } from 'react';\n\nimport { Minus, Plus } from 'lucide-react';\n\nimport { useDebounceCallback } from '@customafk/react-toolkit/hooks/useDebounceCallback';\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Button } from '../ui/button';\nimport { Input } from '../ui/input';\n\nexport interface ProductQuantityControlProps {\n /**\n * Initial quantity value\n */\n initialValue?: number;\n /**\n * Minimum allowed quantity (default: 1)\n */\n min?: number;\n /**\n * Maximum allowed quantity (default: 100)\n */\n max?: number;\n /**\n * Callback when quantity changes\n */\n onQuantityChange?: (quantity: number) => void;\n /**\n * Callback when increment or decrement button is clicked\n */\n onButtonClick?: (action: 'increment' | 'decrement', newQuantity: number) => void;\n /**\n * Delay in milliseconds before triggering onQuantityChange (default: 300)\n */\n debounceDelay?: number;\n /**\n * Custom class name\n */\n className?: string;\n /**\n * Whether the control is disabled\n */\n disabled?: boolean;\n}\n\nexport function ProductQuantityControl({\n initialValue = 1,\n min = 1,\n max = 100,\n onQuantityChange,\n onButtonClick,\n debounceDelay = 300,\n className,\n disabled = false,\n}: ProductQuantityControlProps) {\n const [quantity, setQuantity] = useState<number>(Math.min(Math.max(initialValue, min), max));\n\n // Create debounced version of the quantity change handler\n const debouncedQuantityChange = useDebounceCallback((value: number) => {\n onQuantityChange?.(value);\n }, debounceDelay);\n\n useEffect(() => {\n // Ensure initial value is within limits when props change\n const boundedValue = Math.min(Math.max(initialValue, min), max);\n setQuantity(boundedValue);\n }, [initialValue, min, max]);\n\n // Trigger debounced callback when quantity changes\n useEffect(() => {\n if (debounceDelay <= 0) {\n // If debounce is disabled, call immediately\n onQuantityChange?.(quantity);\n } else {\n debouncedQuantityChange(quantity);\n }\n return () => {\n debouncedQuantityChange.cancel();\n };\n }, [quantity, debouncedQuantityChange, onQuantityChange, debounceDelay]);\n\n const increment = useCallback(() => {\n if (quantity >= max) return;\n const newQuantity = quantity + 1;\n setQuantity(newQuantity);\n onButtonClick?.('increment', newQuantity);\n }, [quantity, max, onButtonClick]);\n\n const decrement = useCallback(() => {\n if (quantity <= min) return;\n const newQuantity = quantity - 1;\n setQuantity(newQuantity);\n onButtonClick?.('decrement', newQuantity);\n }, [quantity, min, onButtonClick]);\n\n const handleInputChange = useCallback(\n (value: string) => {\n const newValue = parseInt(value, 10);\n\n if (Number.isNaN(newValue)) {\n setQuantity(min);\n return;\n }\n\n if (newValue < min) {\n setQuantity(min);\n } else if (newValue > max) {\n setQuantity(max);\n } else {\n setQuantity(newValue);\n }\n },\n [min, max]\n );\n\n const handleBlur = useCallback(() => {\n // Ensure value is within limits when input loses focus\n if (Number.isNaN(quantity) || quantity < min) {\n setQuantity(min);\n } else if (quantity > max) {\n setQuantity(max);\n }\n }, [quantity, min, max]);\n\n return (\n <div className={cn('flex gap-x-0.5 h-8 items-center', className)}>\n <Button\n variant=\"outline\"\n color=\"muted\"\n size=\"icon\"\n onClick={decrement}\n disabled={disabled || quantity <= min}\n aria-label=\"Decrease quantity\"\n className=\"rounded-xs focus:border focus:border-border bg-background\"\n >\n <Minus size={16} />\n </Button>\n\n <Input\n value={quantity.toString()}\n onValueChange={handleInputChange}\n onBlur={handleBlur}\n min={min}\n max={max}\n disabled={disabled}\n className=\"h-8 w-14 border border-border p-0 text-center focus-visible:border-muted focus-visible:ring-0 rounded-xs bg-background\"\n aria-label=\"Product quantity\"\n />\n\n <Button\n variant=\"outline\"\n color=\"muted\"\n size=\"icon\"\n onClick={increment}\n disabled={disabled || quantity >= max}\n aria-label=\"Increase quantity\"\n className=\"rounded-xs focus:border focus:border-border bg-background\"\n >\n <Plus size={16} />\n </Button>\n </div>\n );\n}\n"],"mappings":"2dA+CA,SAAgB,EAAuB,CACrC,eAAe,EACf,MAAM,EACN,MAAM,IACN,mBACA,gBACA,gBAAgB,IAChB,YACA,WAAW,IACmB,CAC9B,GAAM,CAAC,EAAU,GAAe,EAAiB,KAAK,IAAI,KAAK,IAAI,EAAc,EAAI,CAAE,EAAI,CAAC,CAGtF,EAA0B,EAAqB,GAAkB,CACrE,IAAmB,EAAM,EACxB,EAAc,CAEjB,MAAgB,CAGd,EADqB,KAAK,IAAI,KAAK,IAAI,EAAc,EAAI,CAAE,EAAI,CACtC,EACxB,CAAC,EAAc,EAAK,EAAI,CAAC,CAG5B,OACM,GAAiB,EAEnB,IAAmB,EAAS,CAE5B,EAAwB,EAAS,KAEtB,CACX,EAAwB,QAAQ,GAEjC,CAAC,EAAU,EAAyB,EAAkB,EAAc,CAAC,CAExE,IAAM,EAAY,MAAkB,CAClC,GAAI,GAAY,EAAK,OACrB,IAAM,EAAc,EAAW,EAC/B,EAAY,EAAY,CACxB,IAAgB,YAAa,EAAY,EACxC,CAAC,EAAU,EAAK,EAAc,CAAC,CAE5B,EAAY,MAAkB,CAClC,GAAI,GAAY,EAAK,OACrB,IAAM,EAAc,EAAW,EAC/B,EAAY,EAAY,CACxB,IAAgB,YAAa,EAAY,EACxC,CAAC,EAAU,EAAK,EAAc,CAAC,CAE5B,EAAoB,EACvB,GAAkB,CACjB,IAAM,EAAW,SAAS,EAAO,GAAG,CAEpC,GAAI,OAAO,MAAM,EAAS,CAAE,CAC1B,EAAY,EAAI,CAChB,OAIA,EADE,EAAW,EACD,EACH,EAAW,EACR,EAEA,EAAS,EAGzB,CAAC,EAAK,EAAI,CACX,CAEK,EAAa,MAAkB,CAE/B,OAAO,MAAM,EAAS,EAAI,EAAW,EACvC,EAAY,EAAI,CACP,EAAW,GACpB,EAAY,EAAI,EAEjB,CAAC,EAAU,EAAK,EAAI,CAAC,CAExB,OACE,EAAC,MAAA,CAAI,UAAW,EAAG,kCAAmC,EAAU,WAC9D,EAAC,EAAA,CACC,QAAQ,UACR,MAAM,QACN,KAAK,OACL,QAAS,EACT,SAAU,GAAY,GAAY,EAClC,aAAW,oBACX,UAAU,qEAEV,EAAC,EAAA,CAAM,KAAM,GAAA,CAAM,EACZ,CAET,EAAC,EAAA,CACC,MAAO,EAAS,UAAU,CAC1B,cAAe,EACf,OAAQ,EACH,MACA,MACK,WACV,UAAU,yHACV,aAAW,oBACX,CAEF,EAAC,EAAA,CACC,QAAQ,UACR,MAAM,QACN,KAAK,OACL,QAAS,EACT,SAAU,GAAY,GAAY,EAClC,aAAW,oBACX,UAAU,qEAEV,EAAC,EAAA,CAAK,KAAM,GAAA,CAAM,EACX,GACL"}
@@ -1,2 +1,2 @@
1
1
  const e=require(`./chunk-CUT6urMc.cjs`);let t=require(`@customafk/react-toolkit/utils`);t=e.__toESM(t);let n=require(`react/jsx-runtime`);n=e.__toESM(n);let r=require(`radix-ui`);r=e.__toESM(r);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-BUlcGaLz.cjs.map
2
+ //# sourceMappingURL=progress-D57hgs0G.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"progress-BUlcGaLz.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":"kMAKA,SAAS,EAAS,CAAE,YAAW,QAAO,GAAG,GAA8D,CACrG,OACE,EAAA,EAAA,KAACA,EAAAA,SAAkB,KAAA,CAAK,YAAU,WAAW,WAAA,EAAA,EAAA,IAAc,mEAAoE,EAAU,CAAE,GAAI,YAC7I,EAAA,EAAA,KAACA,EAAAA,SAAkB,UAAA,CACjB,YAAU,qBACV,UAAU,6CACV,MAAO,CAAE,UAAW,eAAe,KAAO,GAAS,GAAG,IAAK,EAC3D,EACqB"}
1
+ {"version":3,"file":"progress-D57hgs0G.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":"kMAKA,SAAS,EAAS,CAAE,YAAW,QAAO,GAAG,GAA8D,CACrG,OACE,EAAA,EAAA,KAACA,EAAAA,SAAkB,KAAA,CAAK,YAAU,WAAW,WAAA,EAAA,EAAA,IAAc,mEAAoE,EAAU,CAAE,GAAI,YAC7I,EAAA,EAAA,KAACA,EAAAA,SAAkB,UAAA,CACjB,YAAU,qBACV,UAAU,6CACV,MAAO,CAAE,UAAW,eAAe,KAAO,GAAS,GAAG,IAAK,EAC3D,EACqB"}