@customafk/lunas-ui 0.2.19 → 0.2.21

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 (340) hide show
  1. package/dist/{alert-Beqe8m7q.d.cts → alert-BVAbQWFI.d.cts} +6 -6
  2. package/dist/{alert-Dn5x8pBc.mjs → alert-C-Y4ZWNd.mjs} +1 -1
  3. package/dist/{alert-Dn5x8pBc.mjs.map → alert-C-Y4ZWNd.mjs.map} +1 -1
  4. package/dist/{alert-XpHbQl4p.d.mts → alert-CSWXGnl2.d.mts} +6 -6
  5. package/dist/{avatar-5LzTjIjo.mjs → avatar-SJmvlfqm.mjs} +1 -1
  6. package/dist/{avatar-5LzTjIjo.mjs.map → avatar-SJmvlfqm.mjs.map} +1 -1
  7. package/dist/{badge-cDG94TBd.d.mts → badge-BnpWeeM-.d.cts} +7 -7
  8. package/dist/{badge-DYcJtNU0.mjs → badge-DSwkF4C4.mjs} +1 -1
  9. package/dist/{badge-DYcJtNU0.mjs.map → badge-DSwkF4C4.mjs.map} +1 -1
  10. package/dist/{badge-CSIbd6Ib.d.cts → badge-DjmK3DTo.d.mts} +7 -7
  11. package/dist/{button-DPABon17.mjs → button-Bc8L9sFb.mjs} +2 -2
  12. package/dist/{button-DPABon17.mjs.map → button-Bc8L9sFb.mjs.map} +1 -1
  13. package/dist/{button-Bu1wgqhO.d.mts → button-BxGWLI9o.d.cts} +6 -6
  14. package/dist/{button-D_PwLu6A.d.cts → button-DxWrJ_EO.d.mts} +7 -7
  15. package/dist/{button.variants-B8KCLWPT.mjs → button.variants-CwcJHcI5.mjs} +1 -1
  16. package/dist/{button.variants-B8KCLWPT.mjs.map → button.variants-CwcJHcI5.mjs.map} +1 -1
  17. package/dist/{calendar-DJnuujFC.mjs → calendar-C2psGpju.mjs} +2 -2
  18. package/dist/{calendar-DJnuujFC.mjs.map → calendar-C2psGpju.mjs.map} +1 -1
  19. package/dist/cards/grid-product-card.mjs +1 -1
  20. package/dist/cards/product-card.mjs +1 -1
  21. package/dist/cards/simple-card.d.mts +2 -2
  22. package/dist/cards/simple-card.mjs +1 -1
  23. package/dist/{checkbox-dDSDiwLB.mjs → checkbox-Bwy_4QS_.mjs} +1 -1
  24. package/dist/{checkbox-dDSDiwLB.mjs.map → checkbox-Bwy_4QS_.mjs.map} +1 -1
  25. package/dist/{close-BcOkVqd8.mjs → close-BS6EeCrQ.mjs} +1 -1
  26. package/dist/{close-BcOkVqd8.mjs.map → close-BS6EeCrQ.mjs.map} +1 -1
  27. package/dist/{cms-layout-CujBx9FA.mjs → cms-layout-DCODI3eE.mjs} +2 -2
  28. package/dist/{cms-layout-CujBx9FA.mjs.map → cms-layout-DCODI3eE.mjs.map} +1 -1
  29. package/dist/{command-B8y4H5q5.mjs → command-B5DpL6OG.mjs} +2 -2
  30. package/dist/{command-B8y4H5q5.mjs.map → command-B5DpL6OG.mjs.map} +1 -1
  31. package/dist/data-display/country.d.cts +1 -1
  32. package/dist/data-display/country.d.mts +1 -1
  33. package/dist/data-display/country.mjs +1 -1
  34. package/dist/data-display/date-tooltip.mjs +1 -1
  35. package/dist/data-display/date.mjs +1 -1
  36. package/dist/data-display/name.mjs +1 -1
  37. package/dist/data-display/phone-number.mjs +1 -1
  38. package/dist/data-display/role-badge.d.cts +1 -1
  39. package/dist/data-display/role-badge.d.mts +1 -1
  40. package/dist/data-display/role-badge.mjs +1 -1
  41. package/dist/data-display/statistic.d.mts +6 -6
  42. package/dist/data-display/user.mjs +1 -1
  43. package/dist/{date-C76vNHGL.mjs → date-D_nB7Lh1.mjs} +1 -1
  44. package/dist/{date-C76vNHGL.mjs.map → date-D_nB7Lh1.mjs.map} +1 -1
  45. package/dist/{dialog-DtknheXI.d.mts → dialog-D28jTUyP.d.cts} +12 -12
  46. package/dist/{dialog-dqqupmOT.mjs → dialog-DG4vMCr5.mjs} +2 -2
  47. package/dist/{dialog-dqqupmOT.mjs.map → dialog-DG4vMCr5.mjs.map} +1 -1
  48. package/dist/{dialog-CtO9ie0P.d.cts → dialog-Fcy96kRf.d.mts} +12 -12
  49. package/dist/dialogs/confirm-dialog.mjs +1 -1
  50. package/dist/dialogs/detail-dialog/components/sidebar.d.cts +27 -27
  51. package/dist/dialogs/detail-dialog/components/sidebar.d.mts +25 -25
  52. package/dist/dialogs/detail-dialog/components/sidebar.mjs +1 -1
  53. package/dist/dialogs/detail-dialog/index.mjs +1 -1
  54. package/dist/dialogs/error-dialog.mjs +1 -1
  55. package/dist/dialogs/loading-dialog.mjs +1 -1
  56. package/dist/{dist-DPEjz4kv.mjs → dist-XxWAVHy8.mjs} +1 -1
  57. package/dist/{dist-DPEjz4kv.mjs.map → dist-XxWAVHy8.mjs.map} +1 -1
  58. package/dist/{dropdown-menu-BocQ2Vev.mjs → dropdown-menu-BlsIwe4B.mjs} +1 -1
  59. package/dist/{dropdown-menu-BocQ2Vev.mjs.map → dropdown-menu-BlsIwe4B.mjs.map} +1 -1
  60. package/dist/features/descriptions/index.d.cts +5 -5
  61. package/dist/features/descriptions/index.d.mts +5 -5
  62. package/dist/features/descriptions/index.mjs +1 -1
  63. package/dist/features/search-modal/index.d.cts +2 -2
  64. package/dist/features/search-modal/index.mjs +1 -1
  65. package/dist/features/tables/index.cjs +1 -1
  66. package/dist/features/tables/index.d.cts +2 -2
  67. package/dist/features/tables/index.d.mts +3 -3
  68. package/dist/features/tables/index.mjs +1 -1
  69. package/dist/features/tanstack-form/index.d.cts +1 -1
  70. package/dist/features/tanstack-form/index.d.mts +1 -1
  71. package/dist/features/tanstack-form/index.mjs +1 -1
  72. package/dist/features/text-editor/index.d.cts +1 -1
  73. package/dist/features/text-editor/index.d.mts +1 -1
  74. package/dist/features/text-editor/index.mjs +1 -1
  75. package/dist/{field-DaZocB_E.mjs → field-Mn2bf2Ns.mjs} +2 -2
  76. package/dist/{field-DaZocB_E.mjs.map → field-Mn2bf2Ns.mjs.map} +1 -1
  77. package/dist/{flex-zl_w1yeZ.mjs → flex-Br7F9Fln.mjs} +1 -1
  78. package/dist/{flex-zl_w1yeZ.mjs.map → flex-Br7F9Fln.mjs.map} +1 -1
  79. package/dist/{heading-D8K7UGv2.mjs → heading-BnaNuvDS.mjs} +1 -1
  80. package/dist/{heading-D8K7UGv2.mjs.map → heading-BnaNuvDS.mjs.map} +1 -1
  81. package/dist/{image-WRAFECmc.mjs → image-C-CdKKP1.mjs} +2 -2
  82. package/dist/{image-WRAFECmc.mjs.map → image-C-CdKKP1.mjs.map} +1 -1
  83. package/dist/{index-DgO3fRA8.d.mts → index--EqgvW4c.d.cts} +36 -32
  84. package/dist/{index-D8a6GRB2.d.mts → index-CST_ZBzY.d.mts} +360 -360
  85. package/dist/{index-tr2ndIm-.d.mts → index-CrnEUjWU.d.mts} +6 -6
  86. package/dist/{index-6R0zla55.d.cts → index-DYKVk2cJ.d.cts} +358 -358
  87. package/dist/{index-CDGAuUDu.d.cts → index-DtwMtKUS.d.mts} +36 -32
  88. package/dist/{index-Dn6FVL5X.d.cts → index-y3v1_4XZ.d.cts} +6 -6
  89. package/dist/index.cjs +1 -1
  90. package/dist/index.d.cts +13 -10
  91. package/dist/index.d.mts +13 -10
  92. package/dist/index.mjs +1 -1
  93. package/dist/{input-BFD3ecVI.d.mts → input-CK10I74-.d.cts} +6 -6
  94. package/dist/{input-BTm2GrZP.mjs → input-DLRypEj3.mjs} +1 -1
  95. package/dist/{input-BTm2GrZP.mjs.map → input-DLRypEj3.mjs.map} +1 -1
  96. package/dist/{input-CsTijTsW.d.cts → input-DP5cYLNw.d.mts} +6 -6
  97. package/dist/{label-BC2u42kJ.mjs → label-BukQnBn7.mjs} +1 -1
  98. package/dist/{label-BC2u42kJ.mjs.map → label-BukQnBn7.mjs.map} +1 -1
  99. package/dist/layouts/cms-layout/index.mjs +1 -1
  100. package/dist/layouts/flex.d.cts +9 -9
  101. package/dist/layouts/flex.d.mts +9 -9
  102. package/dist/layouts/flex.mjs +1 -1
  103. package/dist/layouts/payment-layout/index.cjs +1 -1
  104. package/dist/layouts/payment-layout/index.d.cts +17 -2
  105. package/dist/layouts/payment-layout/index.d.mts +17 -2
  106. package/dist/layouts/payment-layout/index.mjs +1 -1
  107. package/dist/pages/FeatureDeveloping.d.cts +2 -2
  108. package/dist/pages/FeatureDeveloping.d.mts +2 -2
  109. package/dist/pages/FeatureDeveloping.mjs +1 -1
  110. package/dist/pages/FeatureFixing.d.cts +2 -2
  111. package/dist/pages/FeatureFixing.d.mts +2 -2
  112. package/dist/pages/FeatureFixing.mjs +1 -1
  113. package/dist/pages/LoginPage.cjs +2 -0
  114. package/dist/pages/LoginPage.cjs.map +1 -0
  115. package/dist/pages/LoginPage.d.cts +55 -0
  116. package/dist/pages/LoginPage.d.mts +55 -0
  117. package/dist/pages/LoginPage.mjs +2 -0
  118. package/dist/pages/LoginPage.mjs.map +1 -0
  119. package/dist/pages/NotAuthorized.d.cts +2 -2
  120. package/dist/pages/NotAuthorized.d.mts +2 -2
  121. package/dist/pages/NotAuthorized.mjs +1 -1
  122. package/dist/pages/NotFound.d.cts +2 -2
  123. package/dist/pages/NotFound.d.mts +2 -2
  124. package/dist/pages/NotFound.mjs +1 -1
  125. package/dist/pages/RegisterPage.cjs +2 -0
  126. package/dist/pages/RegisterPage.cjs.map +1 -0
  127. package/dist/pages/RegisterPage.d.cts +52 -0
  128. package/dist/pages/RegisterPage.d.mts +52 -0
  129. package/dist/pages/RegisterPage.mjs +2 -0
  130. package/dist/pages/RegisterPage.mjs.map +1 -0
  131. package/dist/pages/VerifyEmailPage.cjs +2 -0
  132. package/dist/pages/VerifyEmailPage.cjs.map +1 -0
  133. package/dist/pages/VerifyEmailPage.d.cts +64 -0
  134. package/dist/pages/VerifyEmailPage.d.mts +64 -0
  135. package/dist/pages/VerifyEmailPage.mjs +2 -0
  136. package/dist/pages/VerifyEmailPage.mjs.map +1 -0
  137. package/dist/{paragraph-jzLzzEYZ.mjs → paragraph-CnHNC0rS.mjs} +1 -1
  138. package/dist/{paragraph-jzLzzEYZ.mjs.map → paragraph-CnHNC0rS.mjs.map} +1 -1
  139. package/dist/payment-layout-0mqqno1V.cjs +2 -0
  140. package/dist/payment-layout-0mqqno1V.cjs.map +1 -0
  141. package/dist/payment-layout-ClqGIxV7.mjs +2 -0
  142. package/dist/payment-layout-ClqGIxV7.mjs.map +1 -0
  143. package/dist/{popover-HZvZNeka.mjs → popover-DvGJ23lJ.mjs} +2 -2
  144. package/dist/{popover-HZvZNeka.mjs.map → popover-DvGJ23lJ.mjs.map} +1 -1
  145. package/dist/{progress-CgQ13rSf.mjs → progress-2G9rCupJ.mjs} +1 -1
  146. package/dist/{progress-CgQ13rSf.mjs.map → progress-2G9rCupJ.mjs.map} +1 -1
  147. package/dist/{radio-group-BN5y5gZY.mjs → radio-group-fN6o0QBx.mjs} +1 -1
  148. package/dist/{radio-group-BN5y5gZY.mjs.map → radio-group-fN6o0QBx.mjs.map} +1 -1
  149. package/dist/{resizable-CLUR91Hx.mjs → resizable-BxsL978e.mjs} +1 -1
  150. package/dist/{resizable-CLUR91Hx.mjs.map → resizable-BxsL978e.mjs.map} +1 -1
  151. package/dist/{search-modal-Dz7rfifb.mjs → search-modal-DZI6O6ua.mjs} +2 -2
  152. package/dist/{search-modal-Dz7rfifb.mjs.map → search-modal-DZI6O6ua.mjs.map} +1 -1
  153. package/dist/{select-1Z1p9bmp.mjs → select-Ze8Fq88G.mjs} +1 -1
  154. package/dist/{select-1Z1p9bmp.mjs.map → select-Ze8Fq88G.mjs.map} +1 -1
  155. package/dist/{separator-DVI2h_rd.mjs → separator-DXnFHf3v.mjs} +1 -1
  156. package/dist/{separator-DVI2h_rd.mjs.map → separator-DXnFHf3v.mjs.map} +1 -1
  157. package/dist/{sheet-BRXYSJDv.mjs → sheet-GUUifKAd.mjs} +1 -1
  158. package/dist/{sheet-BRXYSJDv.mjs.map → sheet-GUUifKAd.mjs.map} +1 -1
  159. package/dist/{sidebar-QPaK3ryM.mjs → sidebar-C_jArO1q.mjs} +2 -2
  160. package/dist/{sidebar-QPaK3ryM.mjs.map → sidebar-C_jArO1q.mjs.map} +1 -1
  161. package/dist/{skeleton-CZVkWN4p.mjs → skeleton-BLwzHejl.mjs} +1 -1
  162. package/dist/{skeleton-CZVkWN4p.mjs.map → skeleton-BLwzHejl.mjs.map} +1 -1
  163. package/dist/{spinner-DkmcGiVT.mjs → spinner-BaZ19Lla.mjs} +1 -1
  164. package/dist/{spinner-DkmcGiVT.mjs.map → spinner-BaZ19Lla.mjs.map} +1 -1
  165. package/dist/{tables-BhX5FzM4.cjs → tables--hUSBZFP.cjs} +4 -4
  166. package/dist/tables--hUSBZFP.cjs.map +1 -0
  167. package/dist/tables-BZQ6E523.mjs +4 -0
  168. package/dist/tables-BZQ6E523.mjs.map +1 -0
  169. package/dist/{tanstack-form-Sqj9ZD9z.mjs → tanstack-form-C1EVQJ-n.mjs} +2 -2
  170. package/dist/{tanstack-form-Sqj9ZD9z.mjs.map → tanstack-form-C1EVQJ-n.mjs.map} +1 -1
  171. package/dist/{text-editor-BLK_EeiU.mjs → text-editor-ae2UTKW8.mjs} +1 -1
  172. package/dist/{text-editor-BLK_EeiU.mjs.map → text-editor-ae2UTKW8.mjs.map} +1 -1
  173. package/dist/{textarea-D2ILgz82.mjs → textarea-CEtUNLwy.mjs} +1 -1
  174. package/dist/{textarea-D2ILgz82.mjs.map → textarea-CEtUNLwy.mjs.map} +1 -1
  175. package/dist/{tooltip-C7UhtrFf.mjs → tooltip-Cy0HbyAx.mjs} +1 -1
  176. package/dist/{tooltip-C7UhtrFf.mjs.map → tooltip-Cy0HbyAx.mjs.map} +1 -1
  177. package/dist/{types-BonWRhox.d.mts → types-CLkAmCre.d.cts} +1 -1
  178. package/dist/{types-COppLTPh.mjs → types-CuAlMviO.mjs} +1 -1
  179. package/dist/{types-COppLTPh.mjs.map → types-CuAlMviO.mjs.map} +1 -1
  180. package/dist/{types-CILbFL3j.d.cts → types-wApFGHmV.d.mts} +1 -1
  181. package/dist/typography/paragraph.d.cts +5 -5
  182. package/dist/typography/paragraph.d.mts +5 -5
  183. package/dist/typography/paragraph.mjs +1 -1
  184. package/dist/typography/title.d.cts +2 -2
  185. package/dist/typography/title.d.mts +2 -2
  186. package/dist/ui/alert-dialog.d.cts +12 -12
  187. package/dist/ui/alert-dialog.d.mts +12 -12
  188. package/dist/ui/alert-dialog.mjs +1 -1
  189. package/dist/ui/alert.d.cts +1 -1
  190. package/dist/ui/alert.d.mts +1 -1
  191. package/dist/ui/alert.mjs +1 -1
  192. package/dist/ui/aspect-ratio.d.cts +2 -2
  193. package/dist/ui/aspect-ratio.d.mts +2 -2
  194. package/dist/ui/avatar.d.cts +4 -4
  195. package/dist/ui/avatar.d.mts +4 -4
  196. package/dist/ui/avatar.mjs +1 -1
  197. package/dist/ui/badge.d.cts +1 -1
  198. package/dist/ui/badge.d.mts +1 -1
  199. package/dist/ui/badge.mjs +1 -1
  200. package/dist/ui/breadcrumb.d.cts +8 -8
  201. package/dist/ui/breadcrumb.d.mts +8 -8
  202. package/dist/ui/breadcrumb.mjs +1 -1
  203. package/dist/ui/button-group.d.cts +7 -7
  204. package/dist/ui/button-group.d.mts +7 -7
  205. package/dist/ui/button-group.mjs +1 -1
  206. package/dist/ui/button.d.cts +1 -1
  207. package/dist/ui/button.d.mts +1 -1
  208. package/dist/ui/button.mjs +1 -1
  209. package/dist/ui/buttons/add-new.mjs +1 -1
  210. package/dist/ui/buttons/edit.mjs +1 -1
  211. package/dist/ui/buttons/refresh.mjs +1 -1
  212. package/dist/ui/buttons/trash.mjs +1 -1
  213. package/dist/ui/buttons/upload-image.mjs +1 -1
  214. package/dist/ui/calendar.d.cts +4 -4
  215. package/dist/ui/calendar.d.mts +4 -4
  216. package/dist/ui/calendar.mjs +1 -1
  217. package/dist/ui/card.d.cts +8 -8
  218. package/dist/ui/card.d.mts +8 -8
  219. package/dist/ui/card.mjs +1 -1
  220. package/dist/ui/carousel.d.cts +7 -7
  221. package/dist/ui/carousel.d.mts +7 -7
  222. package/dist/ui/carousel.mjs +1 -1
  223. package/dist/ui/checkbox.d.cts +2 -2
  224. package/dist/ui/checkbox.d.mts +2 -2
  225. package/dist/ui/checkbox.mjs +1 -1
  226. package/dist/ui/collapsible.d.cts +4 -4
  227. package/dist/ui/collapsible.d.mts +4 -4
  228. package/dist/ui/command.d.cts +11 -11
  229. package/dist/ui/command.d.mts +11 -11
  230. package/dist/ui/command.mjs +1 -1
  231. package/dist/ui/context-menu.d.cts +16 -16
  232. package/dist/ui/context-menu.d.mts +16 -16
  233. package/dist/ui/dialog.d.cts +1 -1
  234. package/dist/ui/dialog.d.mts +1 -1
  235. package/dist/ui/dialog.mjs +1 -1
  236. package/dist/ui/drawer.d.cts +11 -11
  237. package/dist/ui/drawer.d.mts +11 -11
  238. package/dist/ui/dropdown-menu.d.cts +16 -16
  239. package/dist/ui/dropdown-menu.d.mts +16 -16
  240. package/dist/ui/dropdown-menu.mjs +1 -1
  241. package/dist/ui/empty.d.cts +9 -9
  242. package/dist/ui/empty.d.mts +9 -9
  243. package/dist/ui/field.d.cts +25 -25
  244. package/dist/ui/field.d.mts +25 -25
  245. package/dist/ui/field.mjs +1 -1
  246. package/dist/ui/file-uploader.d.cts +2 -2
  247. package/dist/ui/file-uploader.d.mts +2 -2
  248. package/dist/ui/file-uploader.mjs +1 -1
  249. package/dist/ui/form.d.cts +11 -11
  250. package/dist/ui/form.d.mts +11 -11
  251. package/dist/ui/form.mjs +1 -1
  252. package/dist/ui/hover-card.d.cts +4 -4
  253. package/dist/ui/hover-card.d.mts +4 -4
  254. package/dist/ui/image.mjs +1 -1
  255. package/dist/ui/input-otp.d.cts +5 -5
  256. package/dist/ui/input-otp.d.mts +5 -5
  257. package/dist/ui/input.d.cts +1 -1
  258. package/dist/ui/input.d.mts +1 -1
  259. package/dist/ui/input.mjs +1 -1
  260. package/dist/ui/inputs/search-input.d.cts +3 -3
  261. package/dist/ui/inputs/search-input.d.mts +3 -3
  262. package/dist/ui/inputs/search-input.mjs +1 -1
  263. package/dist/ui/item.d.cts +16 -16
  264. package/dist/ui/item.d.mts +16 -16
  265. package/dist/ui/item.mjs +1 -1
  266. package/dist/ui/label.d.cts +2 -2
  267. package/dist/ui/label.d.mts +2 -2
  268. package/dist/ui/label.mjs +1 -1
  269. package/dist/ui/menubar.d.cts +17 -17
  270. package/dist/ui/menubar.d.mts +17 -17
  271. package/dist/ui/multi-select.d.cts +2 -2
  272. package/dist/ui/multi-select.d.mts +3 -3
  273. package/dist/ui/multi-select.mjs +1 -1
  274. package/dist/ui/navigation-menu.d.cts +11 -11
  275. package/dist/ui/navigation-menu.d.mts +11 -11
  276. package/dist/ui/pagination.d.cts +9 -9
  277. package/dist/ui/pagination.d.mts +9 -9
  278. package/dist/ui/pagination.mjs +1 -1
  279. package/dist/ui/popover.d.cts +6 -6
  280. package/dist/ui/popover.d.mts +6 -6
  281. package/dist/ui/popover.mjs +1 -1
  282. package/dist/ui/progress.d.cts +2 -2
  283. package/dist/ui/progress.d.mts +2 -2
  284. package/dist/ui/progress.mjs +1 -1
  285. package/dist/ui/radio-group.d.cts +3 -3
  286. package/dist/ui/radio-group.d.mts +3 -3
  287. package/dist/ui/radio-group.mjs +1 -1
  288. package/dist/ui/resizable.d.cts +9 -9
  289. package/dist/ui/resizable.d.mts +9 -9
  290. package/dist/ui/resizable.mjs +1 -1
  291. package/dist/ui/scroll-area.d.cts +6 -6
  292. package/dist/ui/scroll-area.d.mts +6 -6
  293. package/dist/ui/select.d.cts +9 -9
  294. package/dist/ui/select.d.mts +9 -9
  295. package/dist/ui/select.mjs +1 -1
  296. package/dist/ui/separator.d.cts +2 -2
  297. package/dist/ui/separator.d.mts +2 -2
  298. package/dist/ui/separator.mjs +1 -1
  299. package/dist/ui/sheet.d.cts +9 -9
  300. package/dist/ui/sheet.d.mts +9 -9
  301. package/dist/ui/sheet.mjs +1 -1
  302. package/dist/ui/sidebar.d.cts +29 -29
  303. package/dist/ui/sidebar.d.mts +29 -29
  304. package/dist/ui/sidebar.mjs +1 -1
  305. package/dist/ui/skeleton.d.cts +2 -2
  306. package/dist/ui/skeleton.d.mts +2 -2
  307. package/dist/ui/skeleton.mjs +1 -1
  308. package/dist/ui/slider.d.cts +2 -2
  309. package/dist/ui/slider.d.mts +2 -2
  310. package/dist/ui/sonner.d.cts +2 -2
  311. package/dist/ui/sonner.d.mts +2 -2
  312. package/dist/ui/spinner.d.cts +2 -2
  313. package/dist/ui/spinner.d.mts +2 -2
  314. package/dist/ui/spinner.mjs +1 -1
  315. package/dist/ui/switch.d.cts +2 -2
  316. package/dist/ui/switch.d.mts +2 -2
  317. package/dist/ui/table.d.cts +18 -18
  318. package/dist/ui/table.d.mts +18 -18
  319. package/dist/ui/tabs.d.cts +5 -5
  320. package/dist/ui/tabs.d.mts +5 -5
  321. package/dist/ui/textarea.d.cts +2 -2
  322. package/dist/ui/textarea.d.mts +2 -2
  323. package/dist/ui/textarea.mjs +1 -1
  324. package/dist/ui/toggle-group.d.cts +3 -3
  325. package/dist/ui/toggle-group.d.mts +3 -3
  326. package/dist/ui/toggle.d.cts +5 -5
  327. package/dist/ui/toggle.d.mts +5 -5
  328. package/dist/ui/tooltip.d.cts +5 -5
  329. package/dist/ui/tooltip.d.mts +5 -5
  330. package/dist/ui/tooltip.mjs +1 -1
  331. package/dist/{user-DIEH54XW.mjs → user-DxSilm4V.mjs} +2 -2
  332. package/dist/{user-DIEH54XW.mjs.map → user-DxSilm4V.mjs.map} +1 -1
  333. package/package.json +13 -1
  334. package/dist/payment-layout-BKJ5xJra.mjs +0 -2
  335. package/dist/payment-layout-BKJ5xJra.mjs.map +0 -1
  336. package/dist/payment-layout-CcMvKPaX.cjs +0 -2
  337. package/dist/payment-layout-CcMvKPaX.cjs.map +0 -1
  338. package/dist/tables-BhX5FzM4.cjs.map +0 -1
  339. package/dist/tables-D2za3DdW.mjs +0 -4
  340. package/dist/tables-D2za3DdW.mjs.map +0 -1
@@ -1,4 +1,4 @@
1
- import * as react_jsx_runtime150 from "react/jsx-runtime";
1
+ import * as react_jsx_runtime248 from "react/jsx-runtime";
2
2
 
3
3
  //#region packages/components/ui/textarea.d.ts
4
4
 
@@ -24,7 +24,7 @@ declare function Textarea({
24
24
  }: React.ComponentProps<'textarea'> & {
25
25
  /** Convenience callback that receives the raw string value on every change, bypassing the synthetic event. */
26
26
  onValueChange?: (value: string) => void;
27
- }): react_jsx_runtime150.JSX.Element;
27
+ }): react_jsx_runtime248.JSX.Element;
28
28
  //#endregion
29
29
  export { Textarea };
30
30
  //# sourceMappingURL=textarea.d.cts.map
@@ -1,4 +1,4 @@
1
- import * as react_jsx_runtime240 from "react/jsx-runtime";
1
+ import * as react_jsx_runtime259 from "react/jsx-runtime";
2
2
 
3
3
  //#region packages/components/ui/textarea.d.ts
4
4
 
@@ -24,7 +24,7 @@ declare function Textarea({
24
24
  }: React.ComponentProps<'textarea'> & {
25
25
  /** Convenience callback that receives the raw string value on every change, bypassing the synthetic event. */
26
26
  onValueChange?: (value: string) => void;
27
- }): react_jsx_runtime240.JSX.Element;
27
+ }): react_jsx_runtime259.JSX.Element;
28
28
  //#endregion
29
29
  export { Textarea };
30
30
  //# sourceMappingURL=textarea.d.mts.map
@@ -1 +1 @@
1
- "use client";import{t as e}from"../textarea-D2ILgz82.mjs";export{e as Textarea};
1
+ "use client";import{t as e}from"../textarea-CEtUNLwy.mjs";export{e as Textarea};
@@ -1,5 +1,5 @@
1
1
  import { toggleVariants } from "./toggle.cjs";
2
- import * as react_jsx_runtime147 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime175 from "react/jsx-runtime";
3
3
  import { VariantProps } from "class-variance-authority";
4
4
  import { ToggleGroup as ToggleGroup$1 } from "radix-ui";
5
5
 
@@ -25,7 +25,7 @@ declare function ToggleGroup({
25
25
  size,
26
26
  children,
27
27
  ...props
28
- }: React.ComponentProps<typeof ToggleGroup$1.Root> & VariantProps<typeof toggleVariants>): react_jsx_runtime147.JSX.Element;
28
+ }: React.ComponentProps<typeof ToggleGroup$1.Root> & VariantProps<typeof toggleVariants>): react_jsx_runtime175.JSX.Element;
29
29
  /** A single item/button within a ToggleGroup that inherits the group's variant and size. */
30
30
  declare function ToggleGroupItem({
31
31
  className,
@@ -33,7 +33,7 @@ declare function ToggleGroupItem({
33
33
  variant,
34
34
  size,
35
35
  ...props
36
- }: React.ComponentProps<typeof ToggleGroup$1.Item> & VariantProps<typeof toggleVariants>): react_jsx_runtime147.JSX.Element;
36
+ }: React.ComponentProps<typeof ToggleGroup$1.Item> & VariantProps<typeof toggleVariants>): react_jsx_runtime175.JSX.Element;
37
37
  //#endregion
38
38
  export { ToggleGroup, ToggleGroupItem };
39
39
  //# sourceMappingURL=toggle-group.d.cts.map
@@ -1,5 +1,5 @@
1
1
  import { toggleVariants } from "./toggle.mjs";
2
- import * as react_jsx_runtime178 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime261 from "react/jsx-runtime";
3
3
  import { VariantProps } from "class-variance-authority";
4
4
  import { ToggleGroup as ToggleGroup$1 } from "radix-ui";
5
5
 
@@ -25,7 +25,7 @@ declare function ToggleGroup({
25
25
  size,
26
26
  children,
27
27
  ...props
28
- }: React.ComponentProps<typeof ToggleGroup$1.Root> & VariantProps<typeof toggleVariants>): react_jsx_runtime178.JSX.Element;
28
+ }: React.ComponentProps<typeof ToggleGroup$1.Root> & VariantProps<typeof toggleVariants>): react_jsx_runtime261.JSX.Element;
29
29
  /** A single item/button within a ToggleGroup that inherits the group's variant and size. */
30
30
  declare function ToggleGroupItem({
31
31
  className,
@@ -33,7 +33,7 @@ declare function ToggleGroupItem({
33
33
  variant,
34
34
  size,
35
35
  ...props
36
- }: React.ComponentProps<typeof ToggleGroup$1.Item> & VariantProps<typeof toggleVariants>): react_jsx_runtime178.JSX.Element;
36
+ }: React.ComponentProps<typeof ToggleGroup$1.Item> & VariantProps<typeof toggleVariants>): react_jsx_runtime261.JSX.Element;
37
37
  //#endregion
38
38
  export { ToggleGroup, ToggleGroupItem };
39
39
  //# sourceMappingURL=toggle-group.d.mts.map
@@ -1,13 +1,13 @@
1
- import * as react_jsx_runtime119 from "react/jsx-runtime";
2
- import * as class_variance_authority_types6 from "class-variance-authority/types";
1
+ import * as react_jsx_runtime185 from "react/jsx-runtime";
2
+ import * as class_variance_authority_types8 from "class-variance-authority/types";
3
3
  import { VariantProps } from "class-variance-authority";
4
4
  import { Toggle as Toggle$1 } from "radix-ui";
5
5
 
6
6
  //#region packages/components/ui/toggle.d.ts
7
7
  declare const toggleVariants: (props?: ({
8
- variant?: "outline" | "default" | null | undefined;
8
+ variant?: "default" | "outline" | null | undefined;
9
9
  size?: "sm" | "lg" | "default" | null | undefined;
10
- } & class_variance_authority_types6.ClassProp) | undefined) => string;
10
+ } & class_variance_authority_types8.ClassProp) | undefined) => string;
11
11
  /**
12
12
  * A two-state button that switches between pressed (`on`) and unpressed (`off`).
13
13
  *
@@ -26,7 +26,7 @@ declare function Toggle({
26
26
  variant,
27
27
  size,
28
28
  ...props
29
- }: React.ComponentProps<typeof Toggle$1.Root> & VariantProps<typeof toggleVariants>): react_jsx_runtime119.JSX.Element;
29
+ }: React.ComponentProps<typeof Toggle$1.Root> & VariantProps<typeof toggleVariants>): react_jsx_runtime185.JSX.Element;
30
30
  //#endregion
31
31
  export { Toggle, toggleVariants };
32
32
  //# sourceMappingURL=toggle.d.cts.map
@@ -1,13 +1,13 @@
1
- import * as react_jsx_runtime232 from "react/jsx-runtime";
1
+ import * as react_jsx_runtime254 from "react/jsx-runtime";
2
2
  import { VariantProps } from "class-variance-authority";
3
3
  import { Toggle as Toggle$1 } from "radix-ui";
4
- import * as class_variance_authority_types9 from "class-variance-authority/types";
4
+ import * as class_variance_authority_types11 from "class-variance-authority/types";
5
5
 
6
6
  //#region packages/components/ui/toggle.d.ts
7
7
  declare const toggleVariants: (props?: ({
8
- variant?: "outline" | "default" | null | undefined;
8
+ variant?: "default" | "outline" | null | undefined;
9
9
  size?: "sm" | "lg" | "default" | null | undefined;
10
- } & class_variance_authority_types9.ClassProp) | undefined) => string;
10
+ } & class_variance_authority_types11.ClassProp) | undefined) => string;
11
11
  /**
12
12
  * A two-state button that switches between pressed (`on`) and unpressed (`off`).
13
13
  *
@@ -26,7 +26,7 @@ declare function Toggle({
26
26
  variant,
27
27
  size,
28
28
  ...props
29
- }: React.ComponentProps<typeof Toggle$1.Root> & VariantProps<typeof toggleVariants>): react_jsx_runtime232.JSX.Element;
29
+ }: React.ComponentProps<typeof Toggle$1.Root> & VariantProps<typeof toggleVariants>): react_jsx_runtime254.JSX.Element;
30
30
  //#endregion
31
31
  export { Toggle, toggleVariants };
32
32
  //# sourceMappingURL=toggle.d.mts.map
@@ -1,4 +1,4 @@
1
- import * as react_jsx_runtime120 from "react/jsx-runtime";
1
+ import * as react_jsx_runtime270 from "react/jsx-runtime";
2
2
  import { Tooltip as Tooltip$1 } from "radix-ui";
3
3
 
4
4
  //#region packages/components/ui/tooltip.d.ts
@@ -19,7 +19,7 @@ import { Tooltip as Tooltip$1 } from "radix-ui";
19
19
  declare function TooltipProvider({
20
20
  delayDuration,
21
21
  ...props
22
- }: React.ComponentProps<typeof Tooltip$1.Provider>): react_jsx_runtime120.JSX.Element;
22
+ }: React.ComponentProps<typeof Tooltip$1.Provider>): react_jsx_runtime270.JSX.Element;
23
23
  /**
24
24
  * Floating label that reveals supplementary text when the user hovers or focuses its trigger element.
25
25
  *
@@ -38,18 +38,18 @@ declare function TooltipProvider({
38
38
  */
39
39
  declare function Tooltip({
40
40
  ...props
41
- }: React.ComponentProps<typeof Tooltip$1.Root>): react_jsx_runtime120.JSX.Element;
41
+ }: React.ComponentProps<typeof Tooltip$1.Root>): react_jsx_runtime270.JSX.Element;
42
42
  /** Element that opens the tooltip on hover/focus; use `asChild` to forward props to a custom child element. */
43
43
  declare function TooltipTrigger({
44
44
  ...props
45
- }: React.ComponentProps<typeof Tooltip$1.Trigger>): react_jsx_runtime120.JSX.Element;
45
+ }: React.ComponentProps<typeof Tooltip$1.Trigger>): react_jsx_runtime270.JSX.Element;
46
46
  /** Floating panel rendered in a portal that displays the tooltip text with a directional arrow. */
47
47
  declare function TooltipContent({
48
48
  className,
49
49
  sideOffset,
50
50
  children,
51
51
  ...props
52
- }: React.ComponentProps<typeof Tooltip$1.Content>): react_jsx_runtime120.JSX.Element;
52
+ }: React.ComponentProps<typeof Tooltip$1.Content>): react_jsx_runtime270.JSX.Element;
53
53
  //#endregion
54
54
  export { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger };
55
55
  //# sourceMappingURL=tooltip.d.cts.map
@@ -1,4 +1,4 @@
1
- import * as react_jsx_runtime183 from "react/jsx-runtime";
1
+ import * as react_jsx_runtime263 from "react/jsx-runtime";
2
2
  import { Tooltip as Tooltip$1 } from "radix-ui";
3
3
 
4
4
  //#region packages/components/ui/tooltip.d.ts
@@ -19,7 +19,7 @@ import { Tooltip as Tooltip$1 } from "radix-ui";
19
19
  declare function TooltipProvider({
20
20
  delayDuration,
21
21
  ...props
22
- }: React.ComponentProps<typeof Tooltip$1.Provider>): react_jsx_runtime183.JSX.Element;
22
+ }: React.ComponentProps<typeof Tooltip$1.Provider>): react_jsx_runtime263.JSX.Element;
23
23
  /**
24
24
  * Floating label that reveals supplementary text when the user hovers or focuses its trigger element.
25
25
  *
@@ -38,18 +38,18 @@ declare function TooltipProvider({
38
38
  */
39
39
  declare function Tooltip({
40
40
  ...props
41
- }: React.ComponentProps<typeof Tooltip$1.Root>): react_jsx_runtime183.JSX.Element;
41
+ }: React.ComponentProps<typeof Tooltip$1.Root>): react_jsx_runtime263.JSX.Element;
42
42
  /** Element that opens the tooltip on hover/focus; use `asChild` to forward props to a custom child element. */
43
43
  declare function TooltipTrigger({
44
44
  ...props
45
- }: React.ComponentProps<typeof Tooltip$1.Trigger>): react_jsx_runtime183.JSX.Element;
45
+ }: React.ComponentProps<typeof Tooltip$1.Trigger>): react_jsx_runtime263.JSX.Element;
46
46
  /** Floating panel rendered in a portal that displays the tooltip text with a directional arrow. */
47
47
  declare function TooltipContent({
48
48
  className,
49
49
  sideOffset,
50
50
  children,
51
51
  ...props
52
- }: React.ComponentProps<typeof Tooltip$1.Content>): react_jsx_runtime183.JSX.Element;
52
+ }: React.ComponentProps<typeof Tooltip$1.Content>): react_jsx_runtime263.JSX.Element;
53
53
  //#endregion
54
54
  export { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger };
55
55
  //# sourceMappingURL=tooltip.d.mts.map
@@ -1 +1 @@
1
- "use client";import{i as e,n as t,r as n,t as r}from"../tooltip-C7UhtrFf.mjs";export{r as Tooltip,t as TooltipContent,n as TooltipProvider,e as TooltipTrigger};
1
+ "use client";import{i as e,n as t,r as n,t as r}from"../tooltip-Cy0HbyAx.mjs";export{r as Tooltip,t as TooltipContent,n as TooltipProvider,e as TooltipTrigger};
@@ -1,2 +1,2 @@
1
- import{t as e}from"./paragraph-jzLzzEYZ.mjs";import{t}from"./flex-zl_w1yeZ.mjs";import{n,t as r}from"./avatar-5LzTjIjo.mjs";import{UserRoundIcon as i}from"lucide-react";import{jsx as a,jsxs as o}from"react/jsx-runtime";import{colorHashLight as s}from"@customafk/react-toolkit/color-hash";const c=({uuid:c,username:l,email:u})=>o(t,{"data-slot":`user-display`,wrap:!1,gap:`sm`,padding:`none`,children:[a(r,{className:`size-10 shadow-card`,children:a(n,{style:{backgroundColor:s.hex(c)},children:a(i,{size:28,className:`text-white`})})}),o(t,{vertical:!0,padding:`none`,gap:`none`,align:`start`,children:[a(e,{className:`text-sm font-medium text-text-positive`,children:l}),a(e,{variant:`sm`,className:`mt-0! text-xs text-text-positive-weak`,children:u})]})]});export{c as t};
2
- //# sourceMappingURL=user-DIEH54XW.mjs.map
1
+ import{t as e}from"./paragraph-CnHNC0rS.mjs";import{t}from"./flex-Br7F9Fln.mjs";import{n,t as r}from"./avatar-SJmvlfqm.mjs";import{UserRoundIcon as i}from"lucide-react";import{jsx as a,jsxs as o}from"react/jsx-runtime";import{colorHashLight as s}from"@customafk/react-toolkit/color-hash";const c=({uuid:c,username:l,email:u})=>o(t,{"data-slot":`user-display`,wrap:!1,gap:`sm`,padding:`none`,children:[a(r,{className:`size-10 shadow-card`,children:a(n,{style:{backgroundColor:s.hex(c)},children:a(i,{size:28,className:`text-white`})})}),o(t,{vertical:!0,padding:`none`,gap:`none`,align:`start`,children:[a(e,{className:`text-sm font-medium text-text-positive`,children:l}),a(e,{variant:`sm`,className:`mt-0! text-xs text-text-positive-weak`,children:u})]})]});export{c as t};
2
+ //# sourceMappingURL=user-DxSilm4V.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"user-DIEH54XW.mjs","names":["UserDataDisplay: React.FC<UserDataDisplayProps>"],"sources":["../packages/components/data-display/user.tsx"],"sourcesContent":["'use client';\n\nimport { UserRoundIcon } from 'lucide-react';\n\nimport { colorHashLight } from '@customafk/react-toolkit/color-hash';\n\nimport { Flex } from '../layouts/flex';\nimport { Paragraph } from '../typography/paragraph';\nimport { Avatar, AvatarFallback } from '../ui/avatar';\n\ntype UserDataDisplayProps = {\n /** Unique identifier used to deterministically generate the avatar background colour. */\n uuid: string;\n /** Display name rendered as the primary line of the user card. */\n username: string;\n /** Email address rendered as the secondary, muted line below the username. */\n email: string;\n};\n\n/**\n * Displays a user identity card with a colour-hashed avatar, username, and email address.\n *\n * @example\n * ```tsx\n * import { UserDataDisplay } from '@customafk/lunas-ui/data-display/user';\n *\n * <UserDataDisplay uuid=\"abc-123\" username=\"Nguyễn Văn An\" email=\"an@example.com\" />\n * ```\n */\nexport const UserDataDisplay: React.FC<UserDataDisplayProps> = ({ uuid, username, email }) => {\n return (\n <Flex data-slot=\"user-display\" wrap={false} gap=\"sm\" padding=\"none\">\n <Avatar className=\"size-10 shadow-card\">\n <AvatarFallback style={{ backgroundColor: colorHashLight.hex(uuid) }}>\n <UserRoundIcon size={28} className=\"text-white\" />\n </AvatarFallback>\n </Avatar>\n <Flex vertical padding=\"none\" gap=\"none\" align=\"start\">\n <Paragraph className=\"text-sm font-medium text-text-positive\">{username}</Paragraph>\n <Paragraph variant=\"sm\" className=\"mt-0! text-xs text-text-positive-weak\">\n {email}\n </Paragraph>\n </Flex>\n </Flex>\n );\n};\n"],"mappings":"gSA6BA,MAAaA,GAAmD,CAAE,OAAM,WAAU,WAE9E,EAAC,EAAA,CAAK,YAAU,eAAe,KAAM,GAAO,IAAI,KAAK,QAAQ,iBAC3D,EAAC,EAAA,CAAO,UAAU,+BAChB,EAAC,EAAA,CAAe,MAAO,CAAE,gBAAiB,EAAe,IAAI,EAAK,CAAE,UAClE,EAAC,EAAA,CAAc,KAAM,GAAI,UAAU,cAAe,EACnC,EACV,CACT,EAAC,EAAA,CAAK,SAAA,GAAS,QAAQ,OAAO,IAAI,OAAO,MAAM,kBAC7C,EAAC,EAAA,CAAU,UAAU,kDAA0C,GAAqB,CACpF,EAAC,EAAA,CAAU,QAAQ,KAAK,UAAU,iDAC/B,GACS,CAAA,EACP,CAAA,EACF"}
1
+ {"version":3,"file":"user-DxSilm4V.mjs","names":["UserDataDisplay: React.FC<UserDataDisplayProps>"],"sources":["../packages/components/data-display/user.tsx"],"sourcesContent":["'use client';\n\nimport { UserRoundIcon } from 'lucide-react';\n\nimport { colorHashLight } from '@customafk/react-toolkit/color-hash';\n\nimport { Flex } from '../layouts/flex';\nimport { Paragraph } from '../typography/paragraph';\nimport { Avatar, AvatarFallback } from '../ui/avatar';\n\ntype UserDataDisplayProps = {\n /** Unique identifier used to deterministically generate the avatar background colour. */\n uuid: string;\n /** Display name rendered as the primary line of the user card. */\n username: string;\n /** Email address rendered as the secondary, muted line below the username. */\n email: string;\n};\n\n/**\n * Displays a user identity card with a colour-hashed avatar, username, and email address.\n *\n * @example\n * ```tsx\n * import { UserDataDisplay } from '@customafk/lunas-ui/data-display/user';\n *\n * <UserDataDisplay uuid=\"abc-123\" username=\"Nguyễn Văn An\" email=\"an@example.com\" />\n * ```\n */\nexport const UserDataDisplay: React.FC<UserDataDisplayProps> = ({ uuid, username, email }) => {\n return (\n <Flex data-slot=\"user-display\" wrap={false} gap=\"sm\" padding=\"none\">\n <Avatar className=\"size-10 shadow-card\">\n <AvatarFallback style={{ backgroundColor: colorHashLight.hex(uuid) }}>\n <UserRoundIcon size={28} className=\"text-white\" />\n </AvatarFallback>\n </Avatar>\n <Flex vertical padding=\"none\" gap=\"none\" align=\"start\">\n <Paragraph className=\"text-sm font-medium text-text-positive\">{username}</Paragraph>\n <Paragraph variant=\"sm\" className=\"mt-0! text-xs text-text-positive-weak\">\n {email}\n </Paragraph>\n </Flex>\n </Flex>\n );\n};\n"],"mappings":"gSA6BA,MAAaA,GAAmD,CAAE,OAAM,WAAU,WAE9E,EAAC,EAAA,CAAK,YAAU,eAAe,KAAM,GAAO,IAAI,KAAK,QAAQ,iBAC3D,EAAC,EAAA,CAAO,UAAU,+BAChB,EAAC,EAAA,CAAe,MAAO,CAAE,gBAAiB,EAAe,IAAI,EAAK,CAAE,UAClE,EAAC,EAAA,CAAc,KAAM,GAAI,UAAU,cAAe,EACnC,EACV,CACT,EAAC,EAAA,CAAK,SAAA,GAAS,QAAQ,OAAO,IAAI,OAAO,MAAM,kBAC7C,EAAC,EAAA,CAAU,UAAU,kDAA0C,GAAqB,CACpF,EAAC,EAAA,CAAU,QAAQ,KAAK,UAAU,iDAC/B,GACS,CAAA,EACP,CAAA,EACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@customafk/lunas-ui",
3
- "version": "0.2.19",
3
+ "version": "0.2.21",
4
4
  "description": "UI library for Lunas Enterprise",
5
5
  "type": "module",
6
6
  "author": {
@@ -156,6 +156,18 @@
156
156
  "require": "./dist/pages/NotFound.cjs",
157
157
  "import": "./dist/pages/NotFound.mjs"
158
158
  },
159
+ "./pages/LoginPage": {
160
+ "require": "./dist/pages/LoginPage.cjs",
161
+ "import": "./dist/pages/LoginPage.mjs"
162
+ },
163
+ "./pages/RegisterPage": {
164
+ "require": "./dist/pages/RegisterPage.cjs",
165
+ "import": "./dist/pages/RegisterPage.mjs"
166
+ },
167
+ "./pages/VerifyEmailPage": {
168
+ "require": "./dist/pages/VerifyEmailPage.cjs",
169
+ "import": "./dist/pages/VerifyEmailPage.mjs"
170
+ },
159
171
  "./systems/google": {
160
172
  "require": "./dist/systems/google.cjs",
161
173
  "import": "./dist/systems/google.mjs"
@@ -1,2 +0,0 @@
1
- import{t as e}from"./dist-DPEjz4kv.mjs";import{t}from"./button-DPABon17.mjs";import{i as n,n as r,r as i,t as a}from"./tooltip-C7UhtrFf.mjs";import{i as o,o as s,r as c,s as l,t as u}from"./sheet-BRXYSJDv.mjs";import{MenuIcon as d,ShoppingCartIcon as f}from"lucide-react";import{createContext as p,useCallback as m,useContext as h,useEffect as g,useMemo as _,useState as v}from"react";import{jsx as y,jsxs as b}from"react/jsx-runtime";import{cn as x}from"@customafk/react-toolkit/utils";import{cva as S}from"class-variance-authority";import{useIsMobile as C}from"@customafk/react-toolkit/hooks/useMobile";const w=p(null);function T(){let e=h(w);if(!e)throw Error(`useSidebar must be used within a SidebarProvider.`);return e}function E({defaultOpen:e=!0,open:t,onOpenChange:n,className:r,style:a,children:o,...s}){let c=C(),[l,u]=v(!1),[d,f]=v(e),p=t??d,h=m(e=>{let t=typeof e==`function`?e(p):e;n?n(t):f(t),document.cookie=`sidebar_state=${t}; path=/; max-age=604800`},[n,p]),b=m(()=>c?u(e=>!e):h(e=>!e),[c,h]);g(()=>{let e=e=>{e.key===`b`&&(e.metaKey||e.ctrlKey)&&(e.preventDefault(),b())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[b]);let S=p?`expanded`:`collapsed`,T=_(()=>({state:S,open:p,setOpen:h,isMobile:c,openMobile:l,setOpenMobile:u,toggleSidebar:b}),[S,p,h,c,l,b]);return y(w.Provider,{value:T,children:y(i,{delayDuration:0,children:y(`div`,{"data-slot":`sidebar-wrapper`,style:{"--sidebar-width":`16rem`,"--sidebar-width-icon":`3rem`,...a},className:x(`group/sidebar-wrapper flex h-dvh w-full`,r),...s,children:o})})})}function D({side:e=`left`,variant:n=`sidebar`,collapsible:r=`offcanvas`,className:i,children:a,...p}){let{isMobile:m,state:h,openMobile:g,setOpenMobile:_,toggleSidebar:v}=T();return r===`none`?y(`aside`,{"data-slot":`sidebar`,className:x(`flex h-full w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground`,i),...p,children:a}):m?y(u,{open:g,onOpenChange:_,...p,children:b(c,{"data-sidebar":`sidebar`,"data-slot":`sidebar`,"data-mobile":`true`,className:`w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground sm:max-w-3xs [&>button]:hidden`,style:{"--sidebar-width":`18rem`},side:e,children:[b(s,{className:`sr-only`,children:[y(l,{children:`Sidebar`}),y(o,{children:`Displays the mobile sidebar.`})]}),b(`div`,{className:`flex size-full flex-col`,children:[b(`div`,{className:`flex flex-0 items-center gap-x-2 border-border-weak border-b p-2 pr-4`,children:[b(t,{"data-sidebar":`trigger`,"data-slot":`sidebar-trigger`,variant:`ghost`,color:`muted`,size:`icon`,className:x(`size-10 rounded-full`,i),onClick:e=>{v(),e.preventDefault(),e.stopPropagation()},children:[y(d,{className:`size-6!`}),y(`span`,{className:`sr-only`,children:`Toggle Sidebar`})]}),y(`div`,{className:`ml-2 flex aspect-square size-8 items-center justify-center rounded-lg bg-sidebar-primary text-sidebar-primary-foreground`,children:y(f,{size:20})}),b(`div`,{className:`grid flex-1 text-left text-sm leading-tight`,children:[y(`span`,{className:`truncate font-medium`,children:`Lunas Store`}),y(`span`,{className:`truncate text-xs`,children:`Established 2023`})]})]}),y(`div`,{className:`flex flex-1 flex-col p-2`,children:a})]})]})}):b(`aside`,{className:`group peer hidden bg-card text-sidebar-foreground md:block`,"data-state":h,"data-collapsible":h===`collapsed`?r:``,"data-variant":n,"data-side":e,"data-slot":`sidebar`,children:[y(`div`,{"data-slot":`sidebar-gap`,className:x(`relative`,`bg-transparent`,`transition-[width] duration-200 ease-linear`,`h-(--header-height) w-(--sidebar-width)`,`sm:h-[calc(var(--header-height)+0.5rem)]`,`group-data-[collapsible=offcanvas]:w-0`,`group-data-[side=right]:rotate-180`,n===`floating`||n===`inset`?`group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]`:`group-data-[collapsible=icon]:w-(--sidebar-width-icon)`)}),y(`div`,{"data-slot":`sidebar-container`,className:x(`hidden md:flex`,`fixed inset-y-0 top-14 z-10 shadow-nav`,`h-[calc(100dvh-3.5rem)] w-(--sidebar-width)`,`transition-[left,right,width] duration-200 ease-linear`,e===`left`&&`left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]`,e===`right`&&`right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]`,n===`floating`||n===`inset`?`p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]`:`group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l`,i),...p,children:y(`div`,{"data-sidebar":`sidebar`,"data-slot":`sidebar-inner`,className:x(`flex size-full flex-col`,`group-data-[variant=floating]:rounded-lg`,`group-data-[variant=floating]:border`,`group-data-[variant=floating]:border-sidebar-border`,`group-data-[variant=floating]:shadow-sm`),children:a})})]})}function O({className:e,children:t,...n}){return b(`main`,{"data-slot":`sidebar-inset`,className:x(`relative flex w-full flex-1 flex-col`,e),...n,children:[y(`div`,{className:`h-(--header-height) w-full sm:h-[calc(var(--header-height)+0.5rem)]`}),y(`div`,{className:`inset-shadow-sm flex-1`,children:t})]})}function k({className:e,...t}){return y(`div`,{"data-slot":`sidebar-footer`,"data-sidebar":`footer`,className:x(`flex flex-col gap-2 p-2`,e),...t})}function A({className:e,...t}){return y(`div`,{"data-slot":`sidebar-content`,"data-sidebar":`content`,className:x(`flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden`,e),...t})}function j({className:e,...t}){return y(`div`,{"data-slot":`sidebar-group`,"data-sidebar":`group`,className:x(`relative flex w-full min-w-0 flex-col`,e),...t})}function M({className:t,asChild:n=!1,...r}){return y(n?e:`div`,{"data-slot":`sidebar-group-label`,"data-sidebar":`group-label`,className:x(`flex h-8 shrink-0 items-center rounded-md px-2 font-medium text-sidebar-foreground/70 text-xs outline-hidden ring-sidebar-ring transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0`,`group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0`,t),...r})}function N({className:e,...t}){return y(`div`,{"data-slot":`sidebar-group-content`,"data-sidebar":`group-content`,className:x(`w-full text-sm`,e),...t})}function P({className:e,...t}){return y(`ul`,{"data-slot":`sidebar-menu`,"data-sidebar":`menu`,className:x(`flex w-full min-w-0 flex-col gap-1`,e),...t})}function F({className:e,...t}){return y(`li`,{"data-slot":`sidebar-menu-item`,"data-sidebar":`menu-item`,className:x(`group/menu-item relative`,e),...t})}const I=S([`peer/menu-button`,`cursor-pointer`,`flex w-full items-center gap-2`,`overflow-hidden rounded-md p-2 outline-hidden`,`truncate text-left font-normal`,`transition-[color,width,height,padding]`,`hover:bg-sidebar-accent`,`hover:text-sidebar-accent-foreground`,`active:bg-sidebar-accent`,`active:text-sidebar-accent-foreground`,`disabled:pointer-events-none`,`disabled:opacity-50`,`group-has-data-[sidebar=menu-action]/menu-item:pr-8`,`aria-disabled:pointer-events-none`,`aria-disabled:opacity-50`,`data-[active=true]:bg-sidebar-primary-muted`,`data-[active=true]:text-sidebar-primary`,`data-[state=open]:hover:bg-sidebar-accent`,`data-[state=open]:hover:text-sidebar-accent-foreground`,`group-data-[collapsible=icon]:size-12!`,`group-data-[collapsible=icon]:p-3!`,`group-data-[collapsible=icon]:gap-3!`,`[&>svg]:size-6`,`[&>svg]:shrink-0`,`[&>span:last-child]:truncate`],{variants:{variant:{default:`hover:bg-sidebar-accent/60 hover:text-sidebar-accent-foreground/80`,outline:`bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]`},size:{default:`h-10 text-sm`,sm:`h-7 text-xs`,lg:`h-12 text-sm group-data-[collapsible=icon]:p-0!`}},defaultVariants:{variant:`default`,size:`default`}});function L({asChild:t=!1,isActive:i=!1,variant:o=`default`,size:s=`default`,tooltip:c,className:l,...u}){let d=t?e:`button`,{isMobile:f,state:p}=T(),m=y(d,{"data-slot":`sidebar-menu-button`,"data-sidebar":`menu-button`,"data-size":s,"data-active":i,className:x(I({variant:o,size:s}),l),...u});return c?(typeof c==`string`&&(c={children:c}),b(a,{children:[y(n,{asChild:!0,children:m}),y(r,{side:`right`,align:`center`,hidden:p!==`collapsed`||f,...c})]})):m}const R=()=>{let{toggleSidebar:e}=T();return b(`header`,{"data-slot":`payment-layout-header`,className:x(`bg-card`,`h-(--header-height)`,`sm:h-[calc(var(--header-height)+0.5rem)] sm:px-4 sm:pr-6`,`absolute inset-x-0 top-0 z-20 gap-2 px-2 pr-4.5`,`flex items-center shadow-nav`,`transition-[width,height] ease-linear`),children:[b(t,{"data-sidebar":`trigger`,"data-slot":`sidebar-trigger`,variant:`ghost`,color:`muted`,size:`icon`,className:`size-10 rounded-full transition-all hover:text-text-positive`,onClick:t=>{t.preventDefault(),t.stopPropagation(),e()},children:[y(d,{className:`size-6!`}),y(`span`,{className:`sr-only`,children:`Toggle Sidebar`})]}),b(`div`,{className:`flex gap-x-2 sm:ml-2.5`,children:[y(`div`,{className:`flex aspect-square size-8 items-center justify-center rounded-lg bg-sidebar-primary text-sidebar-primary-foreground`,children:y(f,{size:20})}),b(`div`,{className:`grid flex-1 text-left text-sm leading-tight`,children:[y(`span`,{className:`truncate font-medium`,children:`Lunas Enterprise`}),y(`span`,{className:`truncate text-xs`,children:`Established 2025`})]})]})]})},z=({activeNavItemId:e,sidebar:t,children:n})=>{let r=_(()=>t?.groupcontent||[],[t]);return b(E,{children:[y(R,{}),b(D,{variant:`inset`,collapsible:`icon`,children:[y(A,{children:r.map(t=>b(j,{children:[y(M,{children:t.label}),y(N,{children:y(P,{children:t.items.map(t=>y(F,{children:b(L,{isActive:t.id===e,onClick:e=>{t.onClick?.(),e.preventDefault(),e.stopPropagation()},children:[t.icon,t.label]})},t.id))})})]},t.id))}),y(k,{children:y(P,{children:y(F,{className:`mt-2 border-t border-t-border`,children:y(`p`,{className:`pt-2 text-center text-muted-foreground text-xs`,children:`Copyright © 2025, Lunas.`})})})})]}),y(O,{children:y(`section`,{className:`relative size-full`,children:y(`div`,{className:`absolute inset-0`,children:n})})})]})};export{z as t};
2
- //# sourceMappingURL=payment-layout-BKJ5xJra.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"payment-layout-BKJ5xJra.mjs","names":["open","PaymentLayout: React.FC<\n React.PropsWithChildren<{\n /** ID of the currently active navigation item; matched against each item's `id` to apply the active style. */\n activeNavItemId?: string;\n /** Sidebar navigation definition; omitting this prop renders an empty sidebar. */\n sidebar?: {\n groupcontent: {\n /** Unique identifier for the group, used as React key. */\n id: string;\n /** Optional section heading rendered above the group's items. */\n label?: string;\n items: {\n /** Unique identifier for the nav item, used as React key and for active-state comparison. */\n id: string;\n /** Human-readable label rendered inside the sidebar button. */\n label: string;\n /** Optional icon element rendered to the left of the label. */\n icon?: React.ReactNode;\n /** Callback fired when the sidebar button is clicked. */\n onClick?: () => void;\n }[];\n }[];\n };\n /** Reserved for a future logout action (currently unused in the rendered output). */\n onLogout?: () => void;\n }>\n>"],"sources":["../packages/components/layouts/payment-layout/components/sidebar.tsx","../packages/components/layouts/payment-layout/components/header.tsx","../packages/components/layouts/payment-layout/index.tsx"],"sourcesContent":["'use client';\n\nimport { createContext, useCallback, useContext, useEffect, useMemo, useState } from 'react';\n\nimport { MenuIcon, PanelLeftIcon, ShoppingCartIcon } from 'lucide-react';\n\nimport { useIsMobile } from '@customafk/react-toolkit/hooks/useMobile';\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Button } from '@/components/ui/button';\nimport { Input } from '@/components/ui/input';\nimport { Separator } from '@/components/ui/separator';\nimport { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle } from '@/components/ui/sheet';\nimport { Skeleton } from '@/components/ui/skeleton';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';\n\nimport { Slot } from '@radix-ui/react-slot';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nconst SIDEBAR_COOKIE_NAME = 'sidebar_state';\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;\nconst SIDEBAR_WIDTH = '16rem';\nconst SIDEBAR_WIDTH_MOBILE = '18rem';\nconst SIDEBAR_WIDTH_ICON = '3rem';\nconst SIDEBAR_KEYBOARD_SHORTCUT = 'b';\n\ntype SidebarContextProps = {\n state: 'expanded' | 'collapsed';\n open: boolean;\n setOpen: (open: boolean) => void;\n openMobile: boolean;\n setOpenMobile: (open: boolean) => void;\n isMobile: boolean;\n toggleSidebar: () => void;\n};\n\nconst SidebarContext = createContext<SidebarContextProps | null>(null);\n\nfunction useSidebar() {\n const context = useContext(SidebarContext);\n if (!context) {\n throw new Error('useSidebar must be used within a SidebarProvider.');\n }\n\n return context;\n}\n\nfunction SidebarProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}) {\n const isMobile = useIsMobile();\n const [openMobile, setOpenMobile] = useState(false);\n\n // This is the internal state of the sidebar.\n // We use openProp and setOpenProp for control from outside the component.\n const [_open, _setOpen] = useState(defaultOpen);\n const open = openProp ?? _open;\n const setOpen = useCallback(\n (value: boolean | ((value: boolean) => boolean)) => {\n const openState = typeof value === 'function' ? value(open) : value;\n if (setOpenProp) {\n setOpenProp(openState);\n } else {\n _setOpen(openState);\n }\n\n // This sets the cookie to keep the sidebar state.\n // biome-ignore lint/suspicious/noDocumentCookie: true\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;\n },\n [setOpenProp, open]\n );\n\n // Helper to toggle the sidebar.\n const toggleSidebar = useCallback(() => {\n return isMobile ? setOpenMobile(open => !open) : setOpen(open => !open);\n }, [isMobile, setOpen]);\n\n // Adds a keyboard shortcut to toggle the sidebar.\n useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {\n event.preventDefault();\n toggleSidebar();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [toggleSidebar]);\n\n // We add a state so that we can do data-state=\"expanded\" or \"collapsed\".\n // This makes it easier to style the sidebar with Tailwind classes.\n const state = open ? 'expanded' : 'collapsed';\n\n const contextValue = useMemo<SidebarContextProps>(\n () => ({\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n }),\n [state, open, setOpen, isMobile, openMobile, toggleSidebar]\n );\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <TooltipProvider delayDuration={0}>\n <div\n data-slot=\"sidebar-wrapper\"\n style={\n {\n '--sidebar-width': SIDEBAR_WIDTH,\n '--sidebar-width-icon': SIDEBAR_WIDTH_ICON,\n ...style,\n } as React.CSSProperties\n }\n className={cn('group/sidebar-wrapper flex h-dvh w-full', className)}\n {...props}\n >\n {children}\n </div>\n </TooltipProvider>\n </SidebarContext.Provider>\n );\n}\n\nfunction Sidebar({\n side = 'left',\n variant = 'sidebar',\n collapsible = 'offcanvas',\n className,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n side?: 'left' | 'right';\n variant?: 'sidebar' | 'floating' | 'inset';\n collapsible?: 'offcanvas' | 'icon' | 'none';\n}) {\n const { isMobile, state, openMobile, setOpenMobile, toggleSidebar } = useSidebar();\n\n if (collapsible === 'none') {\n return (\n <aside data-slot=\"sidebar\" className={cn('flex h-full w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground', className)} {...props}>\n {children}\n </aside>\n );\n }\n\n if (isMobile) {\n return (\n <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n <SheetContent\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar\"\n data-mobile=\"true\"\n className=\"w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground sm:max-w-3xs [&>button]:hidden\"\n style={\n {\n '--sidebar-width': SIDEBAR_WIDTH_MOBILE,\n } as React.CSSProperties\n }\n side={side}\n >\n <SheetHeader className=\"sr-only\">\n <SheetTitle>Sidebar</SheetTitle>\n <SheetDescription>Displays the mobile sidebar.</SheetDescription>\n </SheetHeader>\n <div className=\"flex size-full flex-col\">\n <div className=\"flex flex-0 items-center gap-x-2 border-border-weak border-b p-2 pr-4\">\n <Button\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n variant=\"ghost\"\n color=\"muted\"\n size=\"icon\"\n className={cn('size-10 rounded-full', className)}\n onClick={event => {\n toggleSidebar();\n event.preventDefault();\n event.stopPropagation();\n }}\n >\n <MenuIcon className=\"size-6!\" />\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n <div className=\"ml-2 flex aspect-square size-8 items-center justify-center rounded-lg bg-sidebar-primary text-sidebar-primary-foreground\">\n <ShoppingCartIcon size={20} />\n </div>\n <div className=\"grid flex-1 text-left text-sm leading-tight\">\n <span className=\"truncate font-medium\">Lunas Store</span>\n <span className=\"truncate text-xs\">Established 2023</span>\n </div>\n </div>\n <div className=\"flex flex-1 flex-col p-2\">{children}</div>\n </div>\n </SheetContent>\n </Sheet>\n );\n }\n\n return (\n <aside\n className=\"group peer hidden bg-card text-sidebar-foreground md:block\"\n data-state={state}\n data-collapsible={state === 'collapsed' ? collapsible : ''}\n data-variant={variant}\n data-side={side}\n data-slot=\"sidebar\"\n >\n {/* This is what handles the sidebar gap on desktop */}\n <div\n data-slot=\"sidebar-gap\"\n className={cn(\n 'relative',\n 'bg-transparent',\n 'transition-[width] duration-200 ease-linear',\n 'h-(--header-height) w-(--sidebar-width)',\n 'sm:h-[calc(var(--header-height)+0.5rem)]',\n 'group-data-[collapsible=offcanvas]:w-0',\n 'group-data-[side=right]:rotate-180',\n variant === 'floating' || variant === 'inset'\n ? 'group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]'\n : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon)'\n )}\n />\n <div\n data-slot=\"sidebar-container\"\n className={cn(\n 'hidden md:flex',\n 'fixed inset-y-0 top-14 z-10 shadow-nav',\n 'h-[calc(100dvh-3.5rem)] w-(--sidebar-width)',\n 'transition-[left,right,width] duration-200 ease-linear',\n side === 'left' && 'left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]',\n side === 'right' && 'right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]',\n // Adjust the padding for floating and inset variants.\n variant === 'floating' || variant === 'inset'\n ? 'p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]'\n : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l',\n className\n )}\n {...props}\n >\n <div\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar-inner\"\n className={cn(\n 'flex size-full flex-col',\n 'group-data-[variant=floating]:rounded-lg',\n 'group-data-[variant=floating]:border',\n 'group-data-[variant=floating]:border-sidebar-border',\n 'group-data-[variant=floating]:shadow-sm'\n )}\n >\n {children}\n </div>\n </div>\n </aside>\n );\n}\n\nfunction SidebarTrigger({ className, onClick, ...props }: React.ComponentProps<typeof Button>) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <Button\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n variant=\"ghost\"\n size=\"icon\"\n className={cn('size-7', className)}\n onClick={event => {\n onClick?.(event);\n toggleSidebar();\n }}\n {...props}\n >\n <PanelLeftIcon />\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n );\n}\n\nfunction SidebarRail({ className, ...props }: React.ComponentProps<'button'>) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <button\n data-sidebar=\"rail\"\n data-slot=\"sidebar-rail\"\n aria-label=\"Toggle Sidebar\"\n tabIndex={-1}\n onClick={toggleSidebar}\n title=\"Toggle Sidebar\"\n className={cn(\n 'absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear after:absolute after:inset-y-0 after:left-1/2 after:w-0.5 hover:after:bg-sidebar-border group-data-[side=left]:-right-4 group-data-[side=right]:left-0 sm:flex',\n 'in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize',\n '[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize',\n 'group-data-[collapsible=offcanvas]:translate-x-0 hover:group-data-[collapsible=offcanvas]:bg-sidebar group-data-[collapsible=offcanvas]:after:left-full',\n '[[data-side=left][data-collapsible=offcanvas]_&]:-right-2',\n '[[data-side=right][data-collapsible=offcanvas]_&]:-left-2',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarInset({ className, children, ...props }: React.ComponentProps<'main'>) {\n return (\n <main data-slot=\"sidebar-inset\" className={cn('relative flex w-full flex-1 flex-col', className)} {...props}>\n <div className=\"h-(--header-height) w-full sm:h-[calc(var(--header-height)+0.5rem)]\" />\n <div className=\"inset-shadow-sm flex-1\">{children}</div>\n </main>\n );\n}\n\nfunction SidebarInput({ className, ...props }: React.ComponentProps<typeof Input>) {\n return <Input data-slot=\"sidebar-input\" data-sidebar=\"input\" className={cn('h-8 w-full bg-background shadow-none', className)} {...props} />;\n}\n\nfunction SidebarHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"sidebar-header\" data-sidebar=\"header\" className={cn('flex flex-col gap-2 p-2', className)} {...props} />;\n}\n\nfunction SidebarFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"sidebar-footer\" data-sidebar=\"footer\" className={cn('flex flex-col gap-2 p-2', className)} {...props} />;\n}\n\nfunction SidebarSeparator({ className, ...props }: React.ComponentProps<typeof Separator>) {\n return <Separator data-slot=\"sidebar-separator\" data-sidebar=\"separator\" className={cn('mx-2 w-auto bg-sidebar-border', className)} {...props} />;\n}\n\nfunction SidebarContent({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-content\"\n data-sidebar=\"content\"\n className={cn('flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarGroup({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"sidebar-group\" data-sidebar=\"group\" className={cn('relative flex w-full min-w-0 flex-col', className)} {...props} />;\n}\n\nfunction SidebarGroupLabel({ className, asChild = false, ...props }: React.ComponentProps<'div'> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : 'div';\n\n return (\n <Comp\n data-slot=\"sidebar-group-label\"\n data-sidebar=\"group-label\"\n className={cn(\n 'flex h-8 shrink-0 items-center rounded-md px-2 font-medium text-sidebar-foreground/70 text-xs outline-hidden ring-sidebar-ring transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0',\n 'group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarGroupAction({ className, asChild = false, ...props }: React.ComponentProps<'button'> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : 'button';\n\n return (\n <Comp\n data-slot=\"sidebar-group-action\"\n data-sidebar=\"group-action\"\n className={cn(\n 'absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground outline-hidden ring-sidebar-ring transition-transform hover:bg-sidebar-accent hover:text-sidebar-accent-foreground',\n 'focus-visible:ring-2',\n '[&>svg]:size-4',\n '[&>svg]:shrink-0',\n // Increases the hit area of the button on mobile.\n 'after:absolute after:-inset-2 md:after:hidden',\n 'group-data-[collapsible=icon]:hidden',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarGroupContent({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"sidebar-group-content\" data-sidebar=\"group-content\" className={cn('w-full text-sm', className)} {...props} />;\n}\n\nfunction SidebarMenu({ className, ...props }: React.ComponentProps<'ul'>) {\n return <ul data-slot=\"sidebar-menu\" data-sidebar=\"menu\" className={cn('flex w-full min-w-0 flex-col gap-1', className)} {...props} />;\n}\n\nfunction SidebarMenuItem({ className, ...props }: React.ComponentProps<'li'>) {\n return <li data-slot=\"sidebar-menu-item\" data-sidebar=\"menu-item\" className={cn('group/menu-item relative', className)} {...props} />;\n}\n\nconst sidebarMenuButtonVariants = cva(\n [\n 'peer/menu-button',\n 'cursor-pointer',\n 'flex w-full items-center gap-2',\n 'overflow-hidden rounded-md p-2 outline-hidden',\n 'truncate text-left font-normal',\n 'transition-[color,width,height,padding]',\n 'hover:bg-sidebar-accent',\n 'hover:text-sidebar-accent-foreground',\n 'active:bg-sidebar-accent',\n 'active:text-sidebar-accent-foreground',\n 'disabled:pointer-events-none',\n 'disabled:opacity-50',\n 'group-has-data-[sidebar=menu-action]/menu-item:pr-8',\n 'aria-disabled:pointer-events-none',\n 'aria-disabled:opacity-50',\n 'data-[active=true]:bg-sidebar-primary-muted',\n 'data-[active=true]:text-sidebar-primary',\n 'data-[state=open]:hover:bg-sidebar-accent',\n 'data-[state=open]:hover:text-sidebar-accent-foreground',\n 'group-data-[collapsible=icon]:size-12!',\n 'group-data-[collapsible=icon]:p-3!',\n 'group-data-[collapsible=icon]:gap-3!',\n '[&>svg]:size-6',\n '[&>svg]:shrink-0',\n '[&>span:last-child]:truncate',\n ],\n {\n variants: {\n variant: {\n default: 'hover:bg-sidebar-accent/60 hover:text-sidebar-accent-foreground/80',\n outline:\n 'bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]',\n },\n size: {\n default: 'h-10 text-sm',\n sm: 'h-7 text-xs',\n lg: 'h-12 text-sm group-data-[collapsible=icon]:p-0!',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n);\n\nfunction SidebarMenuButton({\n asChild = false,\n isActive = false,\n variant = 'default',\n size = 'default',\n tooltip,\n className,\n ...props\n}: React.ComponentProps<'button'> & {\n asChild?: boolean;\n isActive?: boolean;\n tooltip?: string | React.ComponentProps<typeof TooltipContent>;\n} & VariantProps<typeof sidebarMenuButtonVariants>) {\n const Comp = asChild ? Slot : 'button';\n const { isMobile, state } = useSidebar();\n\n const button = (\n <Comp\n data-slot=\"sidebar-menu-button\"\n data-sidebar=\"menu-button\"\n data-size={size}\n data-active={isActive}\n className={cn(sidebarMenuButtonVariants({ variant, size }), className)}\n {...props}\n />\n );\n\n if (!tooltip) {\n return button;\n }\n\n if (typeof tooltip === 'string') {\n tooltip = {\n children: tooltip,\n };\n }\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent side=\"right\" align=\"center\" hidden={state !== 'collapsed' || isMobile} {...tooltip} />\n </Tooltip>\n );\n}\n\nfunction SidebarMenuAction({\n className,\n asChild = false,\n showOnHover = false,\n ...props\n}: React.ComponentProps<'button'> & {\n asChild?: boolean;\n showOnHover?: boolean;\n}) {\n const Comp = asChild ? Slot : 'button';\n\n return (\n <Comp\n data-slot=\"sidebar-menu-action\"\n data-sidebar=\"menu-action\"\n className={cn(\n 'absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground outline-hidden ring-sidebar-ring transition-transform hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 peer-hover/menu-button:text-sidebar-accent-foreground [&>svg]:size-4 [&>svg]:shrink-0',\n // Increases the hit area of the button on mobile.\n 'after:absolute after:-inset-2 md:after:hidden',\n 'peer-data-[size=sm]/menu-button:top-1',\n 'peer-data-[size=default]/menu-button:top-1.5',\n 'peer-data-[size=lg]/menu-button:top-2.5',\n 'group-data-[collapsible=icon]:hidden',\n showOnHover &&\n 'group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100 peer-data-[active=true]/menu-button:text-sidebar-accent-foreground md:opacity-0',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuBadge({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-menu-badge\"\n data-sidebar=\"menu-badge\"\n className={cn(\n 'pointer-events-none absolute right-1 flex h-5 min-w-5 select-none items-center justify-center rounded-md px-1 font-medium text-sidebar-foreground text-xs tabular-nums',\n 'peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground',\n 'peer-data-[size=sm]/menu-button:top-1',\n 'peer-data-[size=default]/menu-button:top-1.5',\n 'peer-data-[size=lg]/menu-button:top-2.5',\n 'group-data-[collapsible=icon]:hidden',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuSkeleton({\n className,\n showIcon = false,\n ...props\n}: React.ComponentProps<'div'> & {\n showIcon?: boolean;\n}) {\n // Random width between 50 to 90%.\n const width = useMemo(() => {\n return `${Math.floor(Math.random() * 40) + 50}%`;\n }, []);\n\n return (\n <div data-slot=\"sidebar-menu-skeleton\" data-sidebar=\"menu-skeleton\" className={cn('flex h-8 items-center gap-2 rounded-md px-2', className)} {...props}>\n {showIcon && <Skeleton className=\"size-4 rounded-md\" data-sidebar=\"menu-skeleton-icon\" />}\n <Skeleton\n className=\"h-4 max-w-(--skeleton-width) flex-1\"\n data-sidebar=\"menu-skeleton-text\"\n style={\n {\n '--skeleton-width': width,\n } as React.CSSProperties\n }\n />\n </div>\n );\n}\n\nfunction SidebarMenuSub({ className, ...props }: React.ComponentProps<'ul'>) {\n return (\n <ul\n data-slot=\"sidebar-menu-sub\"\n data-sidebar=\"menu-sub\"\n className={cn(\n 'mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-sidebar-border border-l px-2.5 py-0.5',\n 'group-data-[collapsible=icon]:hidden',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuSubItem({ className, ...props }: React.ComponentProps<'li'>) {\n return <li data-slot=\"sidebar-menu-sub-item\" data-sidebar=\"menu-sub-item\" className={cn('group/menu-sub-item relative', className)} {...props} />;\n}\n\nfunction SidebarMenuSubButton({\n asChild = false,\n size = 'md',\n isActive = false,\n className,\n ...props\n}: React.ComponentProps<'a'> & {\n asChild?: boolean;\n size?: 'sm' | 'md';\n isActive?: boolean;\n}) {\n const Comp = asChild ? Slot : 'a';\n\n return (\n <Comp\n data-slot=\"sidebar-menu-sub-button\"\n data-sidebar=\"menu-sub-button\"\n data-size={size}\n data-active={isActive}\n className={cn(\n 'flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 text-sidebar-foreground outline-hidden ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:text-sidebar-accent-foreground',\n 'data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground',\n size === 'sm' && 'text-xs',\n size === 'md' && 'text-sm',\n 'group-data-[collapsible=icon]:hidden',\n className\n )}\n {...props}\n />\n );\n}\n\nexport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n SidebarInset,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarSeparator,\n SidebarTrigger,\n // biome-ignore lint/style/useComponentExportOnlyModules: true\n useSidebar,\n};\n","import { MenuIcon, ShoppingCartIcon } from 'lucide-react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Button } from '@/components/ui/button';\n\nimport { useSidebar } from './sidebar';\n\nexport const PaymentLayoutHeader = () => {\n const { toggleSidebar } = useSidebar();\n return (\n <header\n data-slot=\"payment-layout-header\"\n className={cn(\n 'bg-card',\n 'h-(--header-height)',\n 'sm:h-[calc(var(--header-height)+0.5rem)] sm:px-4 sm:pr-6',\n 'absolute inset-x-0 top-0 z-20 gap-2 px-2 pr-4.5',\n 'flex items-center shadow-nav',\n 'transition-[width,height] ease-linear'\n )}\n >\n <Button\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n variant=\"ghost\"\n color=\"muted\"\n size=\"icon\"\n className=\"size-10 rounded-full transition-all hover:text-text-positive\"\n onClick={event => {\n event.preventDefault();\n event.stopPropagation();\n toggleSidebar();\n }}\n >\n <MenuIcon className=\"size-6!\" />\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n\n <div className=\"flex gap-x-2 sm:ml-2.5\">\n <div className=\"flex aspect-square size-8 items-center justify-center rounded-lg bg-sidebar-primary text-sidebar-primary-foreground\">\n <ShoppingCartIcon size={20} />\n </div>\n <div className=\"grid flex-1 text-left text-sm leading-tight\">\n <span className=\"truncate font-medium\">Lunas Enterprise</span>\n <span className=\"truncate text-xs\">Established 2025</span>\n </div>\n </div>\n </header>\n );\n};\n","import { useMemo } from 'react';\n\nimport { PaymentLayoutHeader } from './components/header';\nimport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarInset,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n} from './components/sidebar';\n\n/**\n * Full-page payment application shell with a collapsible inset sidebar and a fixed header.\n *\n * @example\n * ```tsx\n * import { PaymentLayout } from '@customafk/lunas-ui/layouts/payment-layout';\n * import { CreditCardIcon } from 'lucide-react';\n *\n * <PaymentLayout\n * activeNavItemId=\"transactions\"\n * sidebar={{\n * groupcontent: [\n * {\n * id: 'payment',\n * label: 'Payment',\n * items: [\n * { id: 'transactions', label: 'Transactions', icon: <CreditCardIcon />, onClick: () => router.push('/transactions') },\n * ],\n * },\n * ],\n * }}\n * >\n * <TransactionsPage />\n * </PaymentLayout>\n * ```\n */\nexport const PaymentLayout: React.FC<\n React.PropsWithChildren<{\n /** ID of the currently active navigation item; matched against each item's `id` to apply the active style. */\n activeNavItemId?: string;\n /** Sidebar navigation definition; omitting this prop renders an empty sidebar. */\n sidebar?: {\n groupcontent: {\n /** Unique identifier for the group, used as React key. */\n id: string;\n /** Optional section heading rendered above the group's items. */\n label?: string;\n items: {\n /** Unique identifier for the nav item, used as React key and for active-state comparison. */\n id: string;\n /** Human-readable label rendered inside the sidebar button. */\n label: string;\n /** Optional icon element rendered to the left of the label. */\n icon?: React.ReactNode;\n /** Callback fired when the sidebar button is clicked. */\n onClick?: () => void;\n }[];\n }[];\n };\n /** Reserved for a future logout action (currently unused in the rendered output). */\n onLogout?: () => void;\n }>\n> = ({ activeNavItemId, sidebar, children }) => {\n const groupcontent = useMemo(() => {\n return sidebar?.groupcontent || [];\n }, [sidebar]);\n return (\n <SidebarProvider>\n <PaymentLayoutHeader />\n\n <Sidebar variant=\"inset\" collapsible=\"icon\">\n <SidebarContent>\n {groupcontent.map(group => {\n return (\n <SidebarGroup key={group.id}>\n <SidebarGroupLabel>{group.label}</SidebarGroupLabel>\n <SidebarGroupContent>\n <SidebarMenu>\n {group.items.map(item => {\n return (\n <SidebarMenuItem key={item.id}>\n <SidebarMenuButton\n isActive={item.id === activeNavItemId}\n onClick={event => {\n item.onClick?.();\n event.preventDefault();\n event.stopPropagation();\n }}\n >\n {item.icon}\n {item.label}\n </SidebarMenuButton>\n </SidebarMenuItem>\n );\n })}\n </SidebarMenu>\n </SidebarGroupContent>\n </SidebarGroup>\n );\n })}\n </SidebarContent>\n <SidebarFooter>\n <SidebarMenu>\n {/*<SidebarMenuItem>\n <SidebarMenuButton\n className=\"border border-border\"\n onClick={event => {\n onLogout?.();\n event.preventDefault();\n event.stopPropagation();\n }}\n >\n <LogOutIcon className=\"text-text-positive-weak\" />\n Đăng xuất\n </SidebarMenuButton>\n </SidebarMenuItem>*/}\n <SidebarMenuItem className=\"mt-2 border-t border-t-border\">\n <p className=\"pt-2 text-center text-muted-foreground text-xs\">Copyright © 2025, Lunas.</p>\n </SidebarMenuItem>\n </SidebarMenu>\n </SidebarFooter>\n </Sidebar>\n\n <SidebarInset>\n <section className=\"relative size-full\">\n <div className=\"absolute inset-0\">{children}</div>\n </section>\n </SidebarInset>\n </SidebarProvider>\n );\n};\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- const e=require(`./chunk-Bmb41Sf3.cjs`),t=require(`./dist-Dh8WwRa8.cjs`),n=require(`./button-CwDT3m4m.cjs`),r=require(`./tooltip-itUmYz9k.cjs`),i=require(`./sheet-CaDXTx7n.cjs`);let a=require(`lucide-react`),o=require(`react`),s=require(`react/jsx-runtime`),c=require(`@customafk/react-toolkit/utils`),l=require(`class-variance-authority`),u=require(`@customafk/react-toolkit/hooks/useMobile`);const d=`sidebar_state`,f=3600*24*7,p=`16rem`,m=`18rem`,h=`3rem`,g=`b`,_=(0,o.createContext)(null);function v(){let e=(0,o.useContext)(_);if(!e)throw Error(`useSidebar must be used within a SidebarProvider.`);return e}function y({defaultOpen:e=!0,open:t,onOpenChange:n,className:i,style:a,children:l,...d}){let f=(0,u.useIsMobile)(),[p,m]=(0,o.useState)(!1),[h,g]=(0,o.useState)(e),v=t??h,y=(0,o.useCallback)(e=>{let t=typeof e==`function`?e(v):e;n?n(t):g(t),document.cookie=`sidebar_state=${t}; path=/; max-age=604800`},[n,v]),b=(0,o.useCallback)(()=>f?m(e=>!e):y(e=>!e),[f,y]);(0,o.useEffect)(()=>{let e=e=>{e.key===`b`&&(e.metaKey||e.ctrlKey)&&(e.preventDefault(),b())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[b]);let x=v?`expanded`:`collapsed`,S=(0,o.useMemo)(()=>({state:x,open:v,setOpen:y,isMobile:f,openMobile:p,setOpenMobile:m,toggleSidebar:b}),[x,v,y,f,p,b]);return(0,s.jsx)(_.Provider,{value:S,children:(0,s.jsx)(r.r,{delayDuration:0,children:(0,s.jsx)(`div`,{"data-slot":`sidebar-wrapper`,style:{"--sidebar-width":`16rem`,"--sidebar-width-icon":`3rem`,...a},className:(0,c.cn)(`group/sidebar-wrapper flex h-dvh w-full`,i),...d,children:l})})})}function b({side:e=`left`,variant:t=`sidebar`,collapsible:r=`offcanvas`,className:o,children:l,...u}){let{isMobile:d,state:f,openMobile:p,setOpenMobile:m,toggleSidebar:h}=v();return r===`none`?(0,s.jsx)(`aside`,{"data-slot":`sidebar`,className:(0,c.cn)(`flex h-full w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground`,o),...u,children:l}):d?(0,s.jsx)(i.t,{open:p,onOpenChange:m,...u,children:(0,s.jsxs)(i.r,{"data-sidebar":`sidebar`,"data-slot":`sidebar`,"data-mobile":`true`,className:`w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground sm:max-w-3xs [&>button]:hidden`,style:{"--sidebar-width":`18rem`},side:e,children:[(0,s.jsxs)(i.o,{className:`sr-only`,children:[(0,s.jsx)(i.s,{children:`Sidebar`}),(0,s.jsx)(i.i,{children:`Displays the mobile sidebar.`})]}),(0,s.jsxs)(`div`,{className:`flex size-full flex-col`,children:[(0,s.jsxs)(`div`,{className:`flex flex-0 items-center gap-x-2 border-border-weak border-b p-2 pr-4`,children:[(0,s.jsxs)(n.t,{"data-sidebar":`trigger`,"data-slot":`sidebar-trigger`,variant:`ghost`,color:`muted`,size:`icon`,className:(0,c.cn)(`size-10 rounded-full`,o),onClick:e=>{h(),e.preventDefault(),e.stopPropagation()},children:[(0,s.jsx)(a.MenuIcon,{className:`size-6!`}),(0,s.jsx)(`span`,{className:`sr-only`,children:`Toggle Sidebar`})]}),(0,s.jsx)(`div`,{className:`ml-2 flex aspect-square size-8 items-center justify-center rounded-lg bg-sidebar-primary text-sidebar-primary-foreground`,children:(0,s.jsx)(a.ShoppingCartIcon,{size:20})}),(0,s.jsxs)(`div`,{className:`grid flex-1 text-left text-sm leading-tight`,children:[(0,s.jsx)(`span`,{className:`truncate font-medium`,children:`Lunas Store`}),(0,s.jsx)(`span`,{className:`truncate text-xs`,children:`Established 2023`})]})]}),(0,s.jsx)(`div`,{className:`flex flex-1 flex-col p-2`,children:l})]})]})}):(0,s.jsxs)(`aside`,{className:`group peer hidden bg-card text-sidebar-foreground md:block`,"data-state":f,"data-collapsible":f===`collapsed`?r:``,"data-variant":t,"data-side":e,"data-slot":`sidebar`,children:[(0,s.jsx)(`div`,{"data-slot":`sidebar-gap`,className:(0,c.cn)(`relative`,`bg-transparent`,`transition-[width] duration-200 ease-linear`,`h-(--header-height) w-(--sidebar-width)`,`sm:h-[calc(var(--header-height)+0.5rem)]`,`group-data-[collapsible=offcanvas]:w-0`,`group-data-[side=right]:rotate-180`,t===`floating`||t===`inset`?`group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]`:`group-data-[collapsible=icon]:w-(--sidebar-width-icon)`)}),(0,s.jsx)(`div`,{"data-slot":`sidebar-container`,className:(0,c.cn)(`hidden md:flex`,`fixed inset-y-0 top-14 z-10 shadow-nav`,`h-[calc(100dvh-3.5rem)] w-(--sidebar-width)`,`transition-[left,right,width] duration-200 ease-linear`,e===`left`&&`left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]`,e===`right`&&`right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]`,t===`floating`||t===`inset`?`p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]`:`group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l`,o),...u,children:(0,s.jsx)(`div`,{"data-sidebar":`sidebar`,"data-slot":`sidebar-inner`,className:(0,c.cn)(`flex size-full flex-col`,`group-data-[variant=floating]:rounded-lg`,`group-data-[variant=floating]:border`,`group-data-[variant=floating]:border-sidebar-border`,`group-data-[variant=floating]:shadow-sm`),children:l})})]})}function x({className:e,children:t,...n}){return(0,s.jsxs)(`main`,{"data-slot":`sidebar-inset`,className:(0,c.cn)(`relative flex w-full flex-1 flex-col`,e),...n,children:[(0,s.jsx)(`div`,{className:`h-(--header-height) w-full sm:h-[calc(var(--header-height)+0.5rem)]`}),(0,s.jsx)(`div`,{className:`inset-shadow-sm flex-1`,children:t})]})}function S({className:e,...t}){return(0,s.jsx)(`div`,{"data-slot":`sidebar-footer`,"data-sidebar":`footer`,className:(0,c.cn)(`flex flex-col gap-2 p-2`,e),...t})}function C({className:e,...t}){return(0,s.jsx)(`div`,{"data-slot":`sidebar-content`,"data-sidebar":`content`,className:(0,c.cn)(`flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden`,e),...t})}function w({className:e,...t}){return(0,s.jsx)(`div`,{"data-slot":`sidebar-group`,"data-sidebar":`group`,className:(0,c.cn)(`relative flex w-full min-w-0 flex-col`,e),...t})}function T({className:e,asChild:n=!1,...r}){return(0,s.jsx)(n?t.t:`div`,{"data-slot":`sidebar-group-label`,"data-sidebar":`group-label`,className:(0,c.cn)(`flex h-8 shrink-0 items-center rounded-md px-2 font-medium text-sidebar-foreground/70 text-xs outline-hidden ring-sidebar-ring transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0`,`group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0`,e),...r})}function E({className:e,...t}){return(0,s.jsx)(`div`,{"data-slot":`sidebar-group-content`,"data-sidebar":`group-content`,className:(0,c.cn)(`w-full text-sm`,e),...t})}function D({className:e,...t}){return(0,s.jsx)(`ul`,{"data-slot":`sidebar-menu`,"data-sidebar":`menu`,className:(0,c.cn)(`flex w-full min-w-0 flex-col gap-1`,e),...t})}function O({className:e,...t}){return(0,s.jsx)(`li`,{"data-slot":`sidebar-menu-item`,"data-sidebar":`menu-item`,className:(0,c.cn)(`group/menu-item relative`,e),...t})}const k=(0,l.cva)([`peer/menu-button`,`cursor-pointer`,`flex w-full items-center gap-2`,`overflow-hidden rounded-md p-2 outline-hidden`,`truncate text-left font-normal`,`transition-[color,width,height,padding]`,`hover:bg-sidebar-accent`,`hover:text-sidebar-accent-foreground`,`active:bg-sidebar-accent`,`active:text-sidebar-accent-foreground`,`disabled:pointer-events-none`,`disabled:opacity-50`,`group-has-data-[sidebar=menu-action]/menu-item:pr-8`,`aria-disabled:pointer-events-none`,`aria-disabled:opacity-50`,`data-[active=true]:bg-sidebar-primary-muted`,`data-[active=true]:text-sidebar-primary`,`data-[state=open]:hover:bg-sidebar-accent`,`data-[state=open]:hover:text-sidebar-accent-foreground`,`group-data-[collapsible=icon]:size-12!`,`group-data-[collapsible=icon]:p-3!`,`group-data-[collapsible=icon]:gap-3!`,`[&>svg]:size-6`,`[&>svg]:shrink-0`,`[&>span:last-child]:truncate`],{variants:{variant:{default:`hover:bg-sidebar-accent/60 hover:text-sidebar-accent-foreground/80`,outline:`bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]`},size:{default:`h-10 text-sm`,sm:`h-7 text-xs`,lg:`h-12 text-sm group-data-[collapsible=icon]:p-0!`}},defaultVariants:{variant:`default`,size:`default`}});function A({asChild:e=!1,isActive:n=!1,variant:i=`default`,size:a=`default`,tooltip:o,className:l,...u}){let d=e?t.t:`button`,{isMobile:f,state:p}=v(),m=(0,s.jsx)(d,{"data-slot":`sidebar-menu-button`,"data-sidebar":`menu-button`,"data-size":a,"data-active":n,className:(0,c.cn)(k({variant:i,size:a}),l),...u});return o?(typeof o==`string`&&(o={children:o}),(0,s.jsxs)(r.t,{children:[(0,s.jsx)(r.i,{asChild:!0,children:m}),(0,s.jsx)(r.n,{side:`right`,align:`center`,hidden:p!==`collapsed`||f,...o})]})):m}const j=()=>{let{toggleSidebar:e}=v();return(0,s.jsxs)(`header`,{"data-slot":`payment-layout-header`,className:(0,c.cn)(`bg-card`,`h-(--header-height)`,`sm:h-[calc(var(--header-height)+0.5rem)] sm:px-4 sm:pr-6`,`absolute inset-x-0 top-0 z-20 gap-2 px-2 pr-4.5`,`flex items-center shadow-nav`,`transition-[width,height] ease-linear`),children:[(0,s.jsxs)(n.t,{"data-sidebar":`trigger`,"data-slot":`sidebar-trigger`,variant:`ghost`,color:`muted`,size:`icon`,className:`size-10 rounded-full transition-all hover:text-text-positive`,onClick:t=>{t.preventDefault(),t.stopPropagation(),e()},children:[(0,s.jsx)(a.MenuIcon,{className:`size-6!`}),(0,s.jsx)(`span`,{className:`sr-only`,children:`Toggle Sidebar`})]}),(0,s.jsxs)(`div`,{className:`flex gap-x-2 sm:ml-2.5`,children:[(0,s.jsx)(`div`,{className:`flex aspect-square size-8 items-center justify-center rounded-lg bg-sidebar-primary text-sidebar-primary-foreground`,children:(0,s.jsx)(a.ShoppingCartIcon,{size:20})}),(0,s.jsxs)(`div`,{className:`grid flex-1 text-left text-sm leading-tight`,children:[(0,s.jsx)(`span`,{className:`truncate font-medium`,children:`Lunas Enterprise`}),(0,s.jsx)(`span`,{className:`truncate text-xs`,children:`Established 2025`})]})]})]})},M=({activeNavItemId:e,sidebar:t,children:n})=>{let r=(0,o.useMemo)(()=>t?.groupcontent||[],[t]);return(0,s.jsxs)(y,{children:[(0,s.jsx)(j,{}),(0,s.jsxs)(b,{variant:`inset`,collapsible:`icon`,children:[(0,s.jsx)(C,{children:r.map(t=>(0,s.jsxs)(w,{children:[(0,s.jsx)(T,{children:t.label}),(0,s.jsx)(E,{children:(0,s.jsx)(D,{children:t.items.map(t=>(0,s.jsx)(O,{children:(0,s.jsxs)(A,{isActive:t.id===e,onClick:e=>{t.onClick?.(),e.preventDefault(),e.stopPropagation()},children:[t.icon,t.label]})},t.id))})})]},t.id))}),(0,s.jsx)(S,{children:(0,s.jsx)(D,{children:(0,s.jsx)(O,{className:`mt-2 border-t border-t-border`,children:(0,s.jsx)(`p`,{className:`pt-2 text-center text-muted-foreground text-xs`,children:`Copyright © 2025, Lunas.`})})})})]}),(0,s.jsx)(x,{children:(0,s.jsx)(`section`,{className:`relative size-full`,children:(0,s.jsx)(`div`,{className:`absolute inset-0`,children:n})})})]})};Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return M}});
2
- //# sourceMappingURL=payment-layout-CcMvKPaX.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"payment-layout-CcMvKPaX.cjs","names":["open","TooltipProvider","Sheet","SheetContent","SheetHeader","SheetTitle","SheetDescription","Button","MenuIcon","ShoppingCartIcon","Slot","Tooltip","TooltipTrigger","TooltipContent","Button","MenuIcon","ShoppingCartIcon","PaymentLayout: React.FC<\n React.PropsWithChildren<{\n /** ID of the currently active navigation item; matched against each item's `id` to apply the active style. */\n activeNavItemId?: string;\n /** Sidebar navigation definition; omitting this prop renders an empty sidebar. */\n sidebar?: {\n groupcontent: {\n /** Unique identifier for the group, used as React key. */\n id: string;\n /** Optional section heading rendered above the group's items. */\n label?: string;\n items: {\n /** Unique identifier for the nav item, used as React key and for active-state comparison. */\n id: string;\n /** Human-readable label rendered inside the sidebar button. */\n label: string;\n /** Optional icon element rendered to the left of the label. */\n icon?: React.ReactNode;\n /** Callback fired when the sidebar button is clicked. */\n onClick?: () => void;\n }[];\n }[];\n };\n /** Reserved for a future logout action (currently unused in the rendered output). */\n onLogout?: () => void;\n }>\n>"],"sources":["../packages/components/layouts/payment-layout/components/sidebar.tsx","../packages/components/layouts/payment-layout/components/header.tsx","../packages/components/layouts/payment-layout/index.tsx"],"sourcesContent":["'use client';\n\nimport { createContext, useCallback, useContext, useEffect, useMemo, useState } from 'react';\n\nimport { MenuIcon, PanelLeftIcon, ShoppingCartIcon } from 'lucide-react';\n\nimport { useIsMobile } from '@customafk/react-toolkit/hooks/useMobile';\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Button } from '@/components/ui/button';\nimport { Input } from '@/components/ui/input';\nimport { Separator } from '@/components/ui/separator';\nimport { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle } from '@/components/ui/sheet';\nimport { Skeleton } from '@/components/ui/skeleton';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';\n\nimport { Slot } from '@radix-ui/react-slot';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nconst SIDEBAR_COOKIE_NAME = 'sidebar_state';\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;\nconst SIDEBAR_WIDTH = '16rem';\nconst SIDEBAR_WIDTH_MOBILE = '18rem';\nconst SIDEBAR_WIDTH_ICON = '3rem';\nconst SIDEBAR_KEYBOARD_SHORTCUT = 'b';\n\ntype SidebarContextProps = {\n state: 'expanded' | 'collapsed';\n open: boolean;\n setOpen: (open: boolean) => void;\n openMobile: boolean;\n setOpenMobile: (open: boolean) => void;\n isMobile: boolean;\n toggleSidebar: () => void;\n};\n\nconst SidebarContext = createContext<SidebarContextProps | null>(null);\n\nfunction useSidebar() {\n const context = useContext(SidebarContext);\n if (!context) {\n throw new Error('useSidebar must be used within a SidebarProvider.');\n }\n\n return context;\n}\n\nfunction SidebarProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}) {\n const isMobile = useIsMobile();\n const [openMobile, setOpenMobile] = useState(false);\n\n // This is the internal state of the sidebar.\n // We use openProp and setOpenProp for control from outside the component.\n const [_open, _setOpen] = useState(defaultOpen);\n const open = openProp ?? _open;\n const setOpen = useCallback(\n (value: boolean | ((value: boolean) => boolean)) => {\n const openState = typeof value === 'function' ? value(open) : value;\n if (setOpenProp) {\n setOpenProp(openState);\n } else {\n _setOpen(openState);\n }\n\n // This sets the cookie to keep the sidebar state.\n // biome-ignore lint/suspicious/noDocumentCookie: true\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;\n },\n [setOpenProp, open]\n );\n\n // Helper to toggle the sidebar.\n const toggleSidebar = useCallback(() => {\n return isMobile ? setOpenMobile(open => !open) : setOpen(open => !open);\n }, [isMobile, setOpen]);\n\n // Adds a keyboard shortcut to toggle the sidebar.\n useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {\n event.preventDefault();\n toggleSidebar();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [toggleSidebar]);\n\n // We add a state so that we can do data-state=\"expanded\" or \"collapsed\".\n // This makes it easier to style the sidebar with Tailwind classes.\n const state = open ? 'expanded' : 'collapsed';\n\n const contextValue = useMemo<SidebarContextProps>(\n () => ({\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n }),\n [state, open, setOpen, isMobile, openMobile, toggleSidebar]\n );\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <TooltipProvider delayDuration={0}>\n <div\n data-slot=\"sidebar-wrapper\"\n style={\n {\n '--sidebar-width': SIDEBAR_WIDTH,\n '--sidebar-width-icon': SIDEBAR_WIDTH_ICON,\n ...style,\n } as React.CSSProperties\n }\n className={cn('group/sidebar-wrapper flex h-dvh w-full', className)}\n {...props}\n >\n {children}\n </div>\n </TooltipProvider>\n </SidebarContext.Provider>\n );\n}\n\nfunction Sidebar({\n side = 'left',\n variant = 'sidebar',\n collapsible = 'offcanvas',\n className,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n side?: 'left' | 'right';\n variant?: 'sidebar' | 'floating' | 'inset';\n collapsible?: 'offcanvas' | 'icon' | 'none';\n}) {\n const { isMobile, state, openMobile, setOpenMobile, toggleSidebar } = useSidebar();\n\n if (collapsible === 'none') {\n return (\n <aside data-slot=\"sidebar\" className={cn('flex h-full w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground', className)} {...props}>\n {children}\n </aside>\n );\n }\n\n if (isMobile) {\n return (\n <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n <SheetContent\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar\"\n data-mobile=\"true\"\n className=\"w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground sm:max-w-3xs [&>button]:hidden\"\n style={\n {\n '--sidebar-width': SIDEBAR_WIDTH_MOBILE,\n } as React.CSSProperties\n }\n side={side}\n >\n <SheetHeader className=\"sr-only\">\n <SheetTitle>Sidebar</SheetTitle>\n <SheetDescription>Displays the mobile sidebar.</SheetDescription>\n </SheetHeader>\n <div className=\"flex size-full flex-col\">\n <div className=\"flex flex-0 items-center gap-x-2 border-border-weak border-b p-2 pr-4\">\n <Button\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n variant=\"ghost\"\n color=\"muted\"\n size=\"icon\"\n className={cn('size-10 rounded-full', className)}\n onClick={event => {\n toggleSidebar();\n event.preventDefault();\n event.stopPropagation();\n }}\n >\n <MenuIcon className=\"size-6!\" />\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n <div className=\"ml-2 flex aspect-square size-8 items-center justify-center rounded-lg bg-sidebar-primary text-sidebar-primary-foreground\">\n <ShoppingCartIcon size={20} />\n </div>\n <div className=\"grid flex-1 text-left text-sm leading-tight\">\n <span className=\"truncate font-medium\">Lunas Store</span>\n <span className=\"truncate text-xs\">Established 2023</span>\n </div>\n </div>\n <div className=\"flex flex-1 flex-col p-2\">{children}</div>\n </div>\n </SheetContent>\n </Sheet>\n );\n }\n\n return (\n <aside\n className=\"group peer hidden bg-card text-sidebar-foreground md:block\"\n data-state={state}\n data-collapsible={state === 'collapsed' ? collapsible : ''}\n data-variant={variant}\n data-side={side}\n data-slot=\"sidebar\"\n >\n {/* This is what handles the sidebar gap on desktop */}\n <div\n data-slot=\"sidebar-gap\"\n className={cn(\n 'relative',\n 'bg-transparent',\n 'transition-[width] duration-200 ease-linear',\n 'h-(--header-height) w-(--sidebar-width)',\n 'sm:h-[calc(var(--header-height)+0.5rem)]',\n 'group-data-[collapsible=offcanvas]:w-0',\n 'group-data-[side=right]:rotate-180',\n variant === 'floating' || variant === 'inset'\n ? 'group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]'\n : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon)'\n )}\n />\n <div\n data-slot=\"sidebar-container\"\n className={cn(\n 'hidden md:flex',\n 'fixed inset-y-0 top-14 z-10 shadow-nav',\n 'h-[calc(100dvh-3.5rem)] w-(--sidebar-width)',\n 'transition-[left,right,width] duration-200 ease-linear',\n side === 'left' && 'left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]',\n side === 'right' && 'right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]',\n // Adjust the padding for floating and inset variants.\n variant === 'floating' || variant === 'inset'\n ? 'p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]'\n : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l',\n className\n )}\n {...props}\n >\n <div\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar-inner\"\n className={cn(\n 'flex size-full flex-col',\n 'group-data-[variant=floating]:rounded-lg',\n 'group-data-[variant=floating]:border',\n 'group-data-[variant=floating]:border-sidebar-border',\n 'group-data-[variant=floating]:shadow-sm'\n )}\n >\n {children}\n </div>\n </div>\n </aside>\n );\n}\n\nfunction SidebarTrigger({ className, onClick, ...props }: React.ComponentProps<typeof Button>) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <Button\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n variant=\"ghost\"\n size=\"icon\"\n className={cn('size-7', className)}\n onClick={event => {\n onClick?.(event);\n toggleSidebar();\n }}\n {...props}\n >\n <PanelLeftIcon />\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n );\n}\n\nfunction SidebarRail({ className, ...props }: React.ComponentProps<'button'>) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <button\n data-sidebar=\"rail\"\n data-slot=\"sidebar-rail\"\n aria-label=\"Toggle Sidebar\"\n tabIndex={-1}\n onClick={toggleSidebar}\n title=\"Toggle Sidebar\"\n className={cn(\n 'absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear after:absolute after:inset-y-0 after:left-1/2 after:w-0.5 hover:after:bg-sidebar-border group-data-[side=left]:-right-4 group-data-[side=right]:left-0 sm:flex',\n 'in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize',\n '[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize',\n 'group-data-[collapsible=offcanvas]:translate-x-0 hover:group-data-[collapsible=offcanvas]:bg-sidebar group-data-[collapsible=offcanvas]:after:left-full',\n '[[data-side=left][data-collapsible=offcanvas]_&]:-right-2',\n '[[data-side=right][data-collapsible=offcanvas]_&]:-left-2',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarInset({ className, children, ...props }: React.ComponentProps<'main'>) {\n return (\n <main data-slot=\"sidebar-inset\" className={cn('relative flex w-full flex-1 flex-col', className)} {...props}>\n <div className=\"h-(--header-height) w-full sm:h-[calc(var(--header-height)+0.5rem)]\" />\n <div className=\"inset-shadow-sm flex-1\">{children}</div>\n </main>\n );\n}\n\nfunction SidebarInput({ className, ...props }: React.ComponentProps<typeof Input>) {\n return <Input data-slot=\"sidebar-input\" data-sidebar=\"input\" className={cn('h-8 w-full bg-background shadow-none', className)} {...props} />;\n}\n\nfunction SidebarHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"sidebar-header\" data-sidebar=\"header\" className={cn('flex flex-col gap-2 p-2', className)} {...props} />;\n}\n\nfunction SidebarFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"sidebar-footer\" data-sidebar=\"footer\" className={cn('flex flex-col gap-2 p-2', className)} {...props} />;\n}\n\nfunction SidebarSeparator({ className, ...props }: React.ComponentProps<typeof Separator>) {\n return <Separator data-slot=\"sidebar-separator\" data-sidebar=\"separator\" className={cn('mx-2 w-auto bg-sidebar-border', className)} {...props} />;\n}\n\nfunction SidebarContent({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-content\"\n data-sidebar=\"content\"\n className={cn('flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarGroup({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"sidebar-group\" data-sidebar=\"group\" className={cn('relative flex w-full min-w-0 flex-col', className)} {...props} />;\n}\n\nfunction SidebarGroupLabel({ className, asChild = false, ...props }: React.ComponentProps<'div'> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : 'div';\n\n return (\n <Comp\n data-slot=\"sidebar-group-label\"\n data-sidebar=\"group-label\"\n className={cn(\n 'flex h-8 shrink-0 items-center rounded-md px-2 font-medium text-sidebar-foreground/70 text-xs outline-hidden ring-sidebar-ring transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0',\n 'group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarGroupAction({ className, asChild = false, ...props }: React.ComponentProps<'button'> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : 'button';\n\n return (\n <Comp\n data-slot=\"sidebar-group-action\"\n data-sidebar=\"group-action\"\n className={cn(\n 'absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground outline-hidden ring-sidebar-ring transition-transform hover:bg-sidebar-accent hover:text-sidebar-accent-foreground',\n 'focus-visible:ring-2',\n '[&>svg]:size-4',\n '[&>svg]:shrink-0',\n // Increases the hit area of the button on mobile.\n 'after:absolute after:-inset-2 md:after:hidden',\n 'group-data-[collapsible=icon]:hidden',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarGroupContent({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"sidebar-group-content\" data-sidebar=\"group-content\" className={cn('w-full text-sm', className)} {...props} />;\n}\n\nfunction SidebarMenu({ className, ...props }: React.ComponentProps<'ul'>) {\n return <ul data-slot=\"sidebar-menu\" data-sidebar=\"menu\" className={cn('flex w-full min-w-0 flex-col gap-1', className)} {...props} />;\n}\n\nfunction SidebarMenuItem({ className, ...props }: React.ComponentProps<'li'>) {\n return <li data-slot=\"sidebar-menu-item\" data-sidebar=\"menu-item\" className={cn('group/menu-item relative', className)} {...props} />;\n}\n\nconst sidebarMenuButtonVariants = cva(\n [\n 'peer/menu-button',\n 'cursor-pointer',\n 'flex w-full items-center gap-2',\n 'overflow-hidden rounded-md p-2 outline-hidden',\n 'truncate text-left font-normal',\n 'transition-[color,width,height,padding]',\n 'hover:bg-sidebar-accent',\n 'hover:text-sidebar-accent-foreground',\n 'active:bg-sidebar-accent',\n 'active:text-sidebar-accent-foreground',\n 'disabled:pointer-events-none',\n 'disabled:opacity-50',\n 'group-has-data-[sidebar=menu-action]/menu-item:pr-8',\n 'aria-disabled:pointer-events-none',\n 'aria-disabled:opacity-50',\n 'data-[active=true]:bg-sidebar-primary-muted',\n 'data-[active=true]:text-sidebar-primary',\n 'data-[state=open]:hover:bg-sidebar-accent',\n 'data-[state=open]:hover:text-sidebar-accent-foreground',\n 'group-data-[collapsible=icon]:size-12!',\n 'group-data-[collapsible=icon]:p-3!',\n 'group-data-[collapsible=icon]:gap-3!',\n '[&>svg]:size-6',\n '[&>svg]:shrink-0',\n '[&>span:last-child]:truncate',\n ],\n {\n variants: {\n variant: {\n default: 'hover:bg-sidebar-accent/60 hover:text-sidebar-accent-foreground/80',\n outline:\n 'bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]',\n },\n size: {\n default: 'h-10 text-sm',\n sm: 'h-7 text-xs',\n lg: 'h-12 text-sm group-data-[collapsible=icon]:p-0!',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n);\n\nfunction SidebarMenuButton({\n asChild = false,\n isActive = false,\n variant = 'default',\n size = 'default',\n tooltip,\n className,\n ...props\n}: React.ComponentProps<'button'> & {\n asChild?: boolean;\n isActive?: boolean;\n tooltip?: string | React.ComponentProps<typeof TooltipContent>;\n} & VariantProps<typeof sidebarMenuButtonVariants>) {\n const Comp = asChild ? Slot : 'button';\n const { isMobile, state } = useSidebar();\n\n const button = (\n <Comp\n data-slot=\"sidebar-menu-button\"\n data-sidebar=\"menu-button\"\n data-size={size}\n data-active={isActive}\n className={cn(sidebarMenuButtonVariants({ variant, size }), className)}\n {...props}\n />\n );\n\n if (!tooltip) {\n return button;\n }\n\n if (typeof tooltip === 'string') {\n tooltip = {\n children: tooltip,\n };\n }\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent side=\"right\" align=\"center\" hidden={state !== 'collapsed' || isMobile} {...tooltip} />\n </Tooltip>\n );\n}\n\nfunction SidebarMenuAction({\n className,\n asChild = false,\n showOnHover = false,\n ...props\n}: React.ComponentProps<'button'> & {\n asChild?: boolean;\n showOnHover?: boolean;\n}) {\n const Comp = asChild ? Slot : 'button';\n\n return (\n <Comp\n data-slot=\"sidebar-menu-action\"\n data-sidebar=\"menu-action\"\n className={cn(\n 'absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground outline-hidden ring-sidebar-ring transition-transform hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 peer-hover/menu-button:text-sidebar-accent-foreground [&>svg]:size-4 [&>svg]:shrink-0',\n // Increases the hit area of the button on mobile.\n 'after:absolute after:-inset-2 md:after:hidden',\n 'peer-data-[size=sm]/menu-button:top-1',\n 'peer-data-[size=default]/menu-button:top-1.5',\n 'peer-data-[size=lg]/menu-button:top-2.5',\n 'group-data-[collapsible=icon]:hidden',\n showOnHover &&\n 'group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100 peer-data-[active=true]/menu-button:text-sidebar-accent-foreground md:opacity-0',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuBadge({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-menu-badge\"\n data-sidebar=\"menu-badge\"\n className={cn(\n 'pointer-events-none absolute right-1 flex h-5 min-w-5 select-none items-center justify-center rounded-md px-1 font-medium text-sidebar-foreground text-xs tabular-nums',\n 'peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground',\n 'peer-data-[size=sm]/menu-button:top-1',\n 'peer-data-[size=default]/menu-button:top-1.5',\n 'peer-data-[size=lg]/menu-button:top-2.5',\n 'group-data-[collapsible=icon]:hidden',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuSkeleton({\n className,\n showIcon = false,\n ...props\n}: React.ComponentProps<'div'> & {\n showIcon?: boolean;\n}) {\n // Random width between 50 to 90%.\n const width = useMemo(() => {\n return `${Math.floor(Math.random() * 40) + 50}%`;\n }, []);\n\n return (\n <div data-slot=\"sidebar-menu-skeleton\" data-sidebar=\"menu-skeleton\" className={cn('flex h-8 items-center gap-2 rounded-md px-2', className)} {...props}>\n {showIcon && <Skeleton className=\"size-4 rounded-md\" data-sidebar=\"menu-skeleton-icon\" />}\n <Skeleton\n className=\"h-4 max-w-(--skeleton-width) flex-1\"\n data-sidebar=\"menu-skeleton-text\"\n style={\n {\n '--skeleton-width': width,\n } as React.CSSProperties\n }\n />\n </div>\n );\n}\n\nfunction SidebarMenuSub({ className, ...props }: React.ComponentProps<'ul'>) {\n return (\n <ul\n data-slot=\"sidebar-menu-sub\"\n data-sidebar=\"menu-sub\"\n className={cn(\n 'mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-sidebar-border border-l px-2.5 py-0.5',\n 'group-data-[collapsible=icon]:hidden',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuSubItem({ className, ...props }: React.ComponentProps<'li'>) {\n return <li data-slot=\"sidebar-menu-sub-item\" data-sidebar=\"menu-sub-item\" className={cn('group/menu-sub-item relative', className)} {...props} />;\n}\n\nfunction SidebarMenuSubButton({\n asChild = false,\n size = 'md',\n isActive = false,\n className,\n ...props\n}: React.ComponentProps<'a'> & {\n asChild?: boolean;\n size?: 'sm' | 'md';\n isActive?: boolean;\n}) {\n const Comp = asChild ? Slot : 'a';\n\n return (\n <Comp\n data-slot=\"sidebar-menu-sub-button\"\n data-sidebar=\"menu-sub-button\"\n data-size={size}\n data-active={isActive}\n className={cn(\n 'flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 text-sidebar-foreground outline-hidden ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:text-sidebar-accent-foreground',\n 'data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground',\n size === 'sm' && 'text-xs',\n size === 'md' && 'text-sm',\n 'group-data-[collapsible=icon]:hidden',\n className\n )}\n {...props}\n />\n );\n}\n\nexport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n SidebarInset,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarSeparator,\n SidebarTrigger,\n // biome-ignore lint/style/useComponentExportOnlyModules: true\n useSidebar,\n};\n","import { MenuIcon, ShoppingCartIcon } from 'lucide-react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Button } from '@/components/ui/button';\n\nimport { useSidebar } from './sidebar';\n\nexport const PaymentLayoutHeader = () => {\n const { toggleSidebar } = useSidebar();\n return (\n <header\n data-slot=\"payment-layout-header\"\n className={cn(\n 'bg-card',\n 'h-(--header-height)',\n 'sm:h-[calc(var(--header-height)+0.5rem)] sm:px-4 sm:pr-6',\n 'absolute inset-x-0 top-0 z-20 gap-2 px-2 pr-4.5',\n 'flex items-center shadow-nav',\n 'transition-[width,height] ease-linear'\n )}\n >\n <Button\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n variant=\"ghost\"\n color=\"muted\"\n size=\"icon\"\n className=\"size-10 rounded-full transition-all hover:text-text-positive\"\n onClick={event => {\n event.preventDefault();\n event.stopPropagation();\n toggleSidebar();\n }}\n >\n <MenuIcon className=\"size-6!\" />\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n\n <div className=\"flex gap-x-2 sm:ml-2.5\">\n <div className=\"flex aspect-square size-8 items-center justify-center rounded-lg bg-sidebar-primary text-sidebar-primary-foreground\">\n <ShoppingCartIcon size={20} />\n </div>\n <div className=\"grid flex-1 text-left text-sm leading-tight\">\n <span className=\"truncate font-medium\">Lunas Enterprise</span>\n <span className=\"truncate text-xs\">Established 2025</span>\n </div>\n </div>\n </header>\n );\n};\n","import { useMemo } from 'react';\n\nimport { PaymentLayoutHeader } from './components/header';\nimport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarInset,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n} from './components/sidebar';\n\n/**\n * Full-page payment application shell with a collapsible inset sidebar and a fixed header.\n *\n * @example\n * ```tsx\n * import { PaymentLayout } from '@customafk/lunas-ui/layouts/payment-layout';\n * import { CreditCardIcon } from 'lucide-react';\n *\n * <PaymentLayout\n * activeNavItemId=\"transactions\"\n * sidebar={{\n * groupcontent: [\n * {\n * id: 'payment',\n * label: 'Payment',\n * items: [\n * { id: 'transactions', label: 'Transactions', icon: <CreditCardIcon />, onClick: () => router.push('/transactions') },\n * ],\n * },\n * ],\n * }}\n * >\n * <TransactionsPage />\n * </PaymentLayout>\n * ```\n */\nexport const PaymentLayout: React.FC<\n React.PropsWithChildren<{\n /** ID of the currently active navigation item; matched against each item's `id` to apply the active style. */\n activeNavItemId?: string;\n /** Sidebar navigation definition; omitting this prop renders an empty sidebar. */\n sidebar?: {\n groupcontent: {\n /** Unique identifier for the group, used as React key. */\n id: string;\n /** Optional section heading rendered above the group's items. */\n label?: string;\n items: {\n /** Unique identifier for the nav item, used as React key and for active-state comparison. */\n id: string;\n /** Human-readable label rendered inside the sidebar button. */\n label: string;\n /** Optional icon element rendered to the left of the label. */\n icon?: React.ReactNode;\n /** Callback fired when the sidebar button is clicked. */\n onClick?: () => void;\n }[];\n }[];\n };\n /** Reserved for a future logout action (currently unused in the rendered output). */\n onLogout?: () => void;\n }>\n> = ({ activeNavItemId, sidebar, children }) => {\n const groupcontent = useMemo(() => {\n return sidebar?.groupcontent || [];\n }, [sidebar]);\n return (\n <SidebarProvider>\n <PaymentLayoutHeader />\n\n <Sidebar variant=\"inset\" collapsible=\"icon\">\n <SidebarContent>\n {groupcontent.map(group => {\n return (\n <SidebarGroup key={group.id}>\n <SidebarGroupLabel>{group.label}</SidebarGroupLabel>\n <SidebarGroupContent>\n <SidebarMenu>\n {group.items.map(item => {\n return (\n <SidebarMenuItem key={item.id}>\n <SidebarMenuButton\n isActive={item.id === activeNavItemId}\n onClick={event => {\n item.onClick?.();\n event.preventDefault();\n event.stopPropagation();\n }}\n >\n {item.icon}\n {item.label}\n </SidebarMenuButton>\n </SidebarMenuItem>\n );\n })}\n </SidebarMenu>\n </SidebarGroupContent>\n </SidebarGroup>\n );\n })}\n </SidebarContent>\n <SidebarFooter>\n <SidebarMenu>\n {/*<SidebarMenuItem>\n <SidebarMenuButton\n className=\"border border-border\"\n onClick={event => {\n onLogout?.();\n event.preventDefault();\n event.stopPropagation();\n }}\n >\n <LogOutIcon className=\"text-text-positive-weak\" />\n Đăng xuất\n </SidebarMenuButton>\n </SidebarMenuItem>*/}\n <SidebarMenuItem className=\"mt-2 border-t border-t-border\">\n <p className=\"pt-2 text-center text-muted-foreground text-xs\">Copyright © 2025, Lunas.</p>\n </SidebarMenuItem>\n </SidebarMenu>\n </SidebarFooter>\n </Sidebar>\n\n <SidebarInset>\n <section className=\"relative size-full\">\n <div className=\"absolute inset-0\">{children}</div>\n </section>\n </SidebarInset>\n </SidebarProvider>\n );\n};\n"],"mappings":"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"}