@customafk/lunas-ui 0.2.37 → 0.2.39

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 (1037) hide show
  1. package/dist/alert-B2PaDJp6.cjs +2 -0
  2. package/dist/alert-B2PaDJp6.cjs.map +1 -0
  3. package/dist/alert-BzBDfGk2.js +2 -0
  4. package/dist/alert-BzBDfGk2.js.map +1 -0
  5. package/dist/alert-CNFuxKp7.d.cts +88 -0
  6. package/dist/alert-DOpQdSIC.d.ts +88 -0
  7. package/dist/avatar-Hpj8lmux.js +2 -0
  8. package/dist/avatar-Hpj8lmux.js.map +1 -0
  9. package/dist/avatar-TyOphzGo.cjs +2 -0
  10. package/dist/avatar-TyOphzGo.cjs.map +1 -0
  11. package/dist/badge-CRpRXSuO.js +2 -0
  12. package/dist/badge-CRpRXSuO.js.map +1 -0
  13. package/dist/badge-D4c9IlYD.d.cts +42 -0
  14. package/dist/badge-DowUoI6w.d.ts +42 -0
  15. package/dist/badge-KW7xu5Ca.cjs +2 -0
  16. package/dist/badge-KW7xu5Ca.cjs.map +1 -0
  17. package/dist/button-C--DAN1D.cjs +2 -0
  18. package/dist/button-C--DAN1D.cjs.map +1 -0
  19. package/dist/button-D4YMSwqK.d.ts +174 -0
  20. package/dist/button-IMi0bEY_.d.cts +174 -0
  21. package/dist/button-LMMbL-uH.js +2 -0
  22. package/dist/button-LMMbL-uH.js.map +1 -0
  23. package/dist/button.variants-4kw6plrv.cjs +2 -0
  24. package/dist/button.variants-4kw6plrv.cjs.map +1 -0
  25. package/dist/button.variants-CoSpd71B.js +2 -0
  26. package/dist/button.variants-CoSpd71B.js.map +1 -0
  27. package/dist/calendar-4weBDnXz.cjs +2 -0
  28. package/dist/calendar-4weBDnXz.cjs.map +1 -0
  29. package/dist/calendar-DzPt7b6k.js +2 -0
  30. package/dist/calendar-DzPt7b6k.js.map +1 -0
  31. package/dist/cards/grid-product-card.cjs +1 -1
  32. package/dist/cards/grid-product-card.d.ts +37 -0
  33. package/dist/cards/grid-product-card.js +2 -0
  34. package/dist/cards/grid-product-card.js.map +1 -0
  35. package/dist/cards/product-card.cjs +1 -1
  36. package/dist/cards/product-card.d.ts +37 -0
  37. package/dist/cards/product-card.js +2 -0
  38. package/dist/cards/product-card.js.map +1 -0
  39. package/dist/cards/simple-card.cjs +1 -1
  40. package/dist/cards/simple-card.d.ts +35 -0
  41. package/dist/cards/simple-card.js +2 -0
  42. package/dist/cards/simple-card.js.map +1 -0
  43. package/dist/checkbox-DLGDoU-1.js +2 -0
  44. package/dist/checkbox-DLGDoU-1.js.map +1 -0
  45. package/dist/checkbox-Dsq-MSbH.cjs +2 -0
  46. package/dist/checkbox-Dsq-MSbH.cjs.map +1 -0
  47. package/dist/chunk-350yNsax.cjs +1 -0
  48. package/dist/close-C0PdZGxr.js +2 -0
  49. package/dist/close-C0PdZGxr.js.map +1 -0
  50. package/dist/close-Dlo1bI8x.cjs +2 -0
  51. package/dist/close-Dlo1bI8x.cjs.map +1 -0
  52. package/dist/cms-layout-BCH4NroR.cjs +2 -0
  53. package/dist/cms-layout-BCH4NroR.cjs.map +1 -0
  54. package/dist/cms-layout-tPwrgJZc.js +2 -0
  55. package/dist/cms-layout-tPwrgJZc.js.map +1 -0
  56. package/dist/command-2gUejA6g.js +2 -0
  57. package/dist/command-2gUejA6g.js.map +1 -0
  58. package/dist/command-CsP8a1Un.cjs +2 -0
  59. package/dist/command-CsP8a1Un.cjs.map +1 -0
  60. package/dist/data-display/country.cjs +1 -1
  61. package/dist/data-display/country.d.ts +22 -0
  62. package/dist/data-display/country.js +2 -0
  63. package/dist/data-display/country.js.map +1 -0
  64. package/dist/data-display/data-list.cjs +1 -1
  65. package/dist/data-display/data-list.d.ts +43 -0
  66. package/dist/data-display/data-list.js +2 -0
  67. package/dist/data-display/data-list.js.map +1 -0
  68. package/dist/data-display/date-tooltip.cjs +1 -1
  69. package/dist/data-display/date-tooltip.d.ts +19 -0
  70. package/dist/data-display/date-tooltip.js +2 -0
  71. package/dist/data-display/date-tooltip.js.map +1 -0
  72. package/dist/data-display/date.cjs +1 -1
  73. package/dist/data-display/date.d.ts +39 -0
  74. package/dist/data-display/date.js +1 -0
  75. package/dist/data-display/empty.cjs +1 -1
  76. package/dist/data-display/empty.d.ts +21 -0
  77. package/dist/data-display/empty.js +2 -0
  78. package/dist/data-display/empty.js.map +1 -0
  79. package/dist/data-display/name.cjs +1 -1
  80. package/dist/data-display/name.d.ts +19 -0
  81. package/dist/data-display/name.js +2 -0
  82. package/dist/data-display/name.js.map +1 -0
  83. package/dist/data-display/phone-number.cjs +1 -1
  84. package/dist/data-display/phone-number.d.ts +19 -0
  85. package/dist/data-display/phone-number.js +2 -0
  86. package/dist/data-display/phone-number.js.map +1 -0
  87. package/dist/data-display/role-badge.cjs +1 -1
  88. package/dist/data-display/role-badge.d.ts +22 -0
  89. package/dist/data-display/role-badge.js +2 -0
  90. package/dist/data-display/role-badge.js.map +1 -0
  91. package/dist/data-display/statistic.cjs +1 -1
  92. package/dist/data-display/statistic.d.cts +3 -3
  93. package/dist/data-display/statistic.d.ts +57 -0
  94. package/dist/data-display/statistic.js +1 -0
  95. package/dist/data-display/user.cjs +1 -1
  96. package/dist/data-display/user.d.ts +23 -0
  97. package/dist/data-display/user.js +1 -0
  98. package/dist/date-BIqCFM1Z.js +2 -0
  99. package/dist/date-BIqCFM1Z.js.map +1 -0
  100. package/dist/date-D4NVl6C9.cjs +2 -0
  101. package/dist/date-D4NVl6C9.cjs.map +1 -0
  102. package/dist/dialog-AcOtFuF4.d.ts +90 -0
  103. package/dist/dialog-BLjShZci.d.cts +90 -0
  104. package/dist/dialog-BigPrWIj.cjs +2 -0
  105. package/dist/dialog-BigPrWIj.cjs.map +1 -0
  106. package/dist/dialog-CmutQ3rp.js +2 -0
  107. package/dist/dialog-CmutQ3rp.js.map +1 -0
  108. package/dist/dialogs/confirm-dialog.cjs +1 -1
  109. package/dist/dialogs/confirm-dialog.d.ts +142 -0
  110. package/dist/dialogs/confirm-dialog.js +2 -0
  111. package/dist/dialogs/confirm-dialog.js.map +1 -0
  112. package/dist/dialogs/detail-dialog/components/sidebar.cjs +1 -1
  113. package/dist/dialogs/detail-dialog/components/sidebar.d.cts +24 -24
  114. package/dist/dialogs/detail-dialog/components/sidebar.d.ts +209 -0
  115. package/dist/dialogs/detail-dialog/components/sidebar.js +1 -0
  116. package/dist/dialogs/detail-dialog/index.cjs +1 -1
  117. package/dist/dialogs/detail-dialog/index.d.ts +45 -0
  118. package/dist/dialogs/detail-dialog/index.js +2 -0
  119. package/dist/dialogs/detail-dialog/index.js.map +1 -0
  120. package/dist/dialogs/error-dialog.cjs +1 -1
  121. package/dist/dialogs/error-dialog.d.ts +25 -0
  122. package/dist/dialogs/error-dialog.js +2 -0
  123. package/dist/dialogs/error-dialog.js.map +1 -0
  124. package/dist/dialogs/loading-dialog.cjs +1 -1
  125. package/dist/dialogs/loading-dialog.d.ts +21 -0
  126. package/dist/dialogs/loading-dialog.js +2 -0
  127. package/dist/dialogs/loading-dialog.js.map +1 -0
  128. package/dist/dist-Cx5ufCdr.cjs +2 -0
  129. package/dist/dist-Cx5ufCdr.cjs.map +1 -0
  130. package/dist/dist-EPxjIRJp.js +2 -0
  131. package/dist/dist-EPxjIRJp.js.map +1 -0
  132. package/dist/drawer-B3qXaN5p.js +2 -0
  133. package/dist/drawer-B3qXaN5p.js.map +1 -0
  134. package/dist/drawer-BB8BZzDG.cjs +2 -0
  135. package/dist/drawer-BB8BZzDG.cjs.map +1 -0
  136. package/dist/dropdown-menu-CVh520yG.cjs +2 -0
  137. package/dist/dropdown-menu-CVh520yG.cjs.map +1 -0
  138. package/dist/dropdown-menu-DeHCVyby.js +2 -0
  139. package/dist/dropdown-menu-DeHCVyby.js.map +1 -0
  140. package/dist/features/descriptions/index.cjs +1 -1
  141. package/dist/features/descriptions/index.cjs.map +1 -1
  142. package/dist/features/descriptions/index.d.cts +1 -1
  143. package/dist/features/descriptions/index.d.ts +246 -0
  144. package/dist/features/descriptions/index.js +2 -0
  145. package/dist/features/descriptions/index.js.map +1 -0
  146. package/dist/features/search-modal/index.cjs +1 -1
  147. package/dist/features/search-modal/index.d.cts +2 -2
  148. package/dist/features/search-modal/index.d.ts +17 -0
  149. package/dist/features/search-modal/index.js +1 -0
  150. package/dist/features/tables/index.cjs +1 -1
  151. package/dist/features/tables/index.d.cts +2 -2
  152. package/dist/features/tables/index.d.ts +3 -0
  153. package/dist/features/tables/index.js +1 -0
  154. package/dist/features/tanstack-form/index.cjs +1 -1
  155. package/dist/features/tanstack-form/index.d.cts +2 -2
  156. package/dist/features/tanstack-form/index.d.ts +2 -0
  157. package/dist/features/tanstack-form/index.js +1 -0
  158. package/dist/features/text-editor/index.cjs +1 -1
  159. package/dist/features/text-editor/index.d.ts +2 -0
  160. package/dist/features/text-editor/index.js +1 -0
  161. package/dist/field-BrlETeXX.cjs +2 -0
  162. package/dist/field-BrlETeXX.cjs.map +1 -0
  163. package/dist/field-DpoKF1nY.js +2 -0
  164. package/dist/field-DpoKF1nY.js.map +1 -0
  165. package/dist/flex-CinRrgEy.js +2 -0
  166. package/dist/flex-CinRrgEy.js.map +1 -0
  167. package/dist/flex-DmWmOBn5.cjs +2 -0
  168. package/dist/flex-DmWmOBn5.cjs.map +1 -0
  169. package/dist/heading-Bz-hSatD.js +2 -0
  170. package/dist/heading-Bz-hSatD.js.map +1 -0
  171. package/dist/heading-tGTqk3pA.cjs +2 -0
  172. package/dist/heading-tGTqk3pA.cjs.map +1 -0
  173. package/dist/image-BpTuF_1w.js +2 -0
  174. package/dist/image-BpTuF_1w.js.map +1 -0
  175. package/dist/image-W_Yb0xTB.cjs +2 -0
  176. package/dist/image-W_Yb0xTB.cjs.map +1 -0
  177. package/dist/index-BDMEeMn4.d.ts +1093 -0
  178. package/dist/index-BiAWxLAj.d.ts +2348 -0
  179. package/dist/index-BlQGXGqt.d.ts +90 -0
  180. package/dist/index-BxoQxUnW.d.cts +1093 -0
  181. package/dist/index-C1WfBa-T.d.ts +85 -0
  182. package/dist/index-KO98y6L0.d.cts +90 -0
  183. package/dist/index-gSP59hja.d.cts +2348 -0
  184. package/dist/index.cjs +1 -1
  185. package/dist/index.d.cts +9 -9
  186. package/dist/index.d.ts +93 -0
  187. package/dist/index.js +1 -0
  188. package/dist/input-Aa-GQW2V.d.cts +44 -0
  189. package/dist/input-B1Wc5jsb.d.ts +44 -0
  190. package/dist/input-DAfP6LZ7.js +2 -0
  191. package/dist/input-DAfP6LZ7.js.map +1 -0
  192. package/dist/input-WJ0DLHTR.cjs +2 -0
  193. package/dist/input-WJ0DLHTR.cjs.map +1 -0
  194. package/dist/label-B8cAG2kc.js +2 -0
  195. package/dist/label-B8cAG2kc.js.map +1 -0
  196. package/dist/label-CC6fXVbC.cjs +2 -0
  197. package/dist/label-CC6fXVbC.cjs.map +1 -0
  198. package/dist/layouts/cms-layout/index.cjs +1 -1
  199. package/dist/layouts/cms-layout/index.d.cts +2 -76
  200. package/dist/layouts/cms-layout/index.d.ts +2 -0
  201. package/dist/layouts/cms-layout/index.js +1 -0
  202. package/dist/layouts/flex.cjs +1 -1
  203. package/dist/layouts/flex.d.cts +3 -3
  204. package/dist/layouts/flex.d.ts +117 -0
  205. package/dist/layouts/flex.js +1 -0
  206. package/dist/layouts/grid.cjs +1 -1
  207. package/dist/layouts/grid.d.ts +19 -0
  208. package/dist/layouts/grid.js +2 -0
  209. package/dist/layouts/grid.js.map +1 -0
  210. package/dist/layouts/payment-layout/index.cjs +1 -1
  211. package/dist/layouts/payment-layout/index.d.ts +74 -0
  212. package/dist/layouts/payment-layout/index.js +1 -0
  213. package/dist/pages/FeatureDeveloping.cjs +1 -1
  214. package/dist/pages/FeatureDeveloping.d.cts +2 -2
  215. package/dist/pages/FeatureDeveloping.d.ts +43 -0
  216. package/dist/pages/FeatureDeveloping.js +2 -0
  217. package/dist/pages/FeatureDeveloping.js.map +1 -0
  218. package/dist/pages/FeatureFixing.cjs +1 -1
  219. package/dist/pages/FeatureFixing.d.cts +2 -2
  220. package/dist/pages/FeatureFixing.d.ts +43 -0
  221. package/dist/pages/FeatureFixing.js +2 -0
  222. package/dist/pages/FeatureFixing.js.map +1 -0
  223. package/dist/pages/LoginPage.cjs +1 -1
  224. package/dist/pages/LoginPage.cjs.map +1 -1
  225. package/dist/pages/LoginPage.d.cts +2 -2
  226. package/dist/pages/LoginPage.d.ts +55 -0
  227. package/dist/pages/LoginPage.js +2 -0
  228. package/dist/pages/LoginPage.js.map +1 -0
  229. package/dist/pages/NotAuthorized.cjs +1 -1
  230. package/dist/pages/NotAuthorized.d.cts +2 -2
  231. package/dist/pages/NotAuthorized.d.ts +43 -0
  232. package/dist/pages/NotAuthorized.js +2 -0
  233. package/dist/pages/NotAuthorized.js.map +1 -0
  234. package/dist/pages/NotFound.cjs +1 -1
  235. package/dist/pages/NotFound.d.cts +2 -2
  236. package/dist/pages/NotFound.d.ts +43 -0
  237. package/dist/pages/NotFound.js +2 -0
  238. package/dist/pages/NotFound.js.map +1 -0
  239. package/dist/pages/RegisterPage.cjs +1 -1
  240. package/dist/pages/RegisterPage.cjs.map +1 -1
  241. package/dist/pages/RegisterPage.d.cts +2 -2
  242. package/dist/pages/RegisterPage.d.ts +52 -0
  243. package/dist/pages/RegisterPage.js +2 -0
  244. package/dist/pages/RegisterPage.js.map +1 -0
  245. package/dist/pages/VerifyEmailPage.cjs +1 -1
  246. package/dist/pages/VerifyEmailPage.d.cts +2 -2
  247. package/dist/pages/VerifyEmailPage.d.ts +64 -0
  248. package/dist/pages/VerifyEmailPage.js +2 -0
  249. package/dist/pages/VerifyEmailPage.js.map +1 -0
  250. package/dist/paragraph-Cc13ZI4d.js +2 -0
  251. package/dist/paragraph-Cc13ZI4d.js.map +1 -0
  252. package/dist/paragraph-DvTZvbzw.cjs +2 -0
  253. package/dist/paragraph-DvTZvbzw.cjs.map +1 -0
  254. package/dist/payment-layout-DyILfyVG.cjs +2 -0
  255. package/dist/payment-layout-DyILfyVG.cjs.map +1 -0
  256. package/dist/payment-layout-giaGvs8T.js +2 -0
  257. package/dist/payment-layout-giaGvs8T.js.map +1 -0
  258. package/dist/popover-6233wU1s.js +2 -0
  259. package/dist/popover-6233wU1s.js.map +1 -0
  260. package/dist/popover-DBsC8Ltp.cjs +2 -0
  261. package/dist/popover-DBsC8Ltp.cjs.map +1 -0
  262. package/dist/progress-AYknlEgK.js +2 -0
  263. package/dist/progress-AYknlEgK.js.map +1 -0
  264. package/dist/progress-gvBqNiHp.cjs +2 -0
  265. package/dist/progress-gvBqNiHp.cjs.map +1 -0
  266. package/dist/radio-group-ImoBjpqZ.js +2 -0
  267. package/dist/radio-group-ImoBjpqZ.js.map +1 -0
  268. package/dist/radio-group-_TdMkv8w.cjs +2 -0
  269. package/dist/radio-group-_TdMkv8w.cjs.map +1 -0
  270. package/dist/resizable-C-M-mu6b.js +2 -0
  271. package/dist/resizable-C-M-mu6b.js.map +1 -0
  272. package/dist/resizable-sgpaHAb8.cjs +2 -0
  273. package/dist/resizable-sgpaHAb8.cjs.map +1 -0
  274. package/dist/search-modal-B-pzGcfP.cjs +2 -0
  275. package/dist/search-modal-B-pzGcfP.cjs.map +1 -0
  276. package/dist/search-modal-b2AE5WEW.js +2 -0
  277. package/dist/search-modal-b2AE5WEW.js.map +1 -0
  278. package/dist/select-CWLQHh8x.cjs +2 -0
  279. package/dist/select-CWLQHh8x.cjs.map +1 -0
  280. package/dist/select-CryLzZA0.js +2 -0
  281. package/dist/select-CryLzZA0.js.map +1 -0
  282. package/dist/separator-BM8hA4DP.js +2 -0
  283. package/dist/separator-BM8hA4DP.js.map +1 -0
  284. package/dist/separator-KuymG9g0.cjs +2 -0
  285. package/dist/separator-KuymG9g0.cjs.map +1 -0
  286. package/dist/sheet-CvKSi0UC.cjs +2 -0
  287. package/dist/sheet-CvKSi0UC.cjs.map +1 -0
  288. package/dist/sheet-DGXXYgWB.js +2 -0
  289. package/dist/sheet-DGXXYgWB.js.map +1 -0
  290. package/dist/sidebar-BDrsbzo5.js +2 -0
  291. package/dist/sidebar-BDrsbzo5.js.map +1 -0
  292. package/dist/sidebar-D5J2gcTw.cjs +2 -0
  293. package/dist/sidebar-D5J2gcTw.cjs.map +1 -0
  294. package/dist/skeleton-CX1USu1w.cjs +2 -0
  295. package/dist/skeleton-CX1USu1w.cjs.map +1 -0
  296. package/dist/skeleton-DlRDNM97.js +2 -0
  297. package/dist/skeleton-DlRDNM97.js.map +1 -0
  298. package/dist/spinner-C1eamx3w.js +2 -0
  299. package/dist/spinner-C1eamx3w.js.map +1 -0
  300. package/dist/spinner-CFxorYEt.cjs +2 -0
  301. package/dist/spinner-CFxorYEt.cjs.map +1 -0
  302. package/dist/statistic-CYMqAYNc.js +2 -0
  303. package/dist/statistic-CYMqAYNc.js.map +1 -0
  304. package/dist/statistic-DDXilD7q.cjs +2 -0
  305. package/dist/statistic-DDXilD7q.cjs.map +1 -0
  306. package/dist/switch-BLHmdRq2.js +2 -0
  307. package/dist/switch-BLHmdRq2.js.map +1 -0
  308. package/dist/switch-DVfOV7wP.cjs +2 -0
  309. package/dist/switch-DVfOV7wP.cjs.map +1 -0
  310. package/dist/systems/google.cjs +1 -1
  311. package/dist/systems/google.d.ts +53 -0
  312. package/dist/systems/google.js +2 -0
  313. package/dist/systems/google.js.map +1 -0
  314. package/dist/tables-CPKHe3k-.cjs +4 -0
  315. package/dist/tables-CPKHe3k-.cjs.map +1 -0
  316. package/dist/tables-DWQytYNm.js +4 -0
  317. package/dist/tables-DWQytYNm.js.map +1 -0
  318. package/dist/tanstack-form-DatI41wz.cjs +12 -0
  319. package/dist/tanstack-form-DatI41wz.cjs.map +1 -0
  320. package/dist/tanstack-form-YVdm9V01.js +12 -0
  321. package/dist/tanstack-form-YVdm9V01.js.map +1 -0
  322. package/dist/text-editor-CvJN3nSL.cjs +2 -0
  323. package/dist/text-editor-CvJN3nSL.cjs.map +1 -0
  324. package/dist/text-editor-WbS7pJJs.js +2 -0
  325. package/dist/text-editor-WbS7pJJs.js.map +1 -0
  326. package/dist/textarea-Bp6VvhiA.js +2 -0
  327. package/dist/textarea-Bp6VvhiA.js.map +1 -0
  328. package/dist/textarea-Cc9CF8wD.cjs +2 -0
  329. package/dist/textarea-Cc9CF8wD.cjs.map +1 -0
  330. package/dist/tooltip-CBdoIzoM.cjs +2 -0
  331. package/dist/tooltip-CBdoIzoM.cjs.map +1 -0
  332. package/dist/tooltip-CVIl6Hln.js +2 -0
  333. package/dist/tooltip-CVIl6Hln.js.map +1 -0
  334. package/dist/types-BVSfF-1o.d.ts +24 -0
  335. package/dist/types-BZqffRVJ.js +2 -0
  336. package/dist/types-BZqffRVJ.js.map +1 -0
  337. package/dist/typography/paragraph.cjs +1 -1
  338. package/dist/typography/paragraph.d.cts +3 -3
  339. package/dist/typography/paragraph.d.ts +48 -0
  340. package/dist/typography/paragraph.js +1 -0
  341. package/dist/typography/title.cjs +1 -1
  342. package/dist/typography/title.d.ts +43 -0
  343. package/dist/typography/title.js +2 -0
  344. package/dist/typography/title.js.map +1 -0
  345. package/dist/ui/alert-dialog.cjs +1 -1
  346. package/dist/ui/alert-dialog.d.cts +12 -12
  347. package/dist/ui/alert-dialog.d.ts +90 -0
  348. package/dist/ui/alert-dialog.js +2 -0
  349. package/dist/ui/alert-dialog.js.map +1 -0
  350. package/dist/ui/alert.cjs +1 -1
  351. package/dist/ui/alert.d.cts +1 -1
  352. package/dist/ui/alert.d.ts +2 -0
  353. package/dist/ui/alert.js +1 -0
  354. package/dist/ui/aspect-ratio.cjs +1 -1
  355. package/dist/ui/aspect-ratio.d.cts +2 -2
  356. package/dist/ui/aspect-ratio.d.ts +24 -0
  357. package/dist/ui/aspect-ratio.js +2 -0
  358. package/dist/ui/aspect-ratio.js.map +1 -0
  359. package/dist/ui/avatar.cjs +1 -1
  360. package/dist/ui/avatar.d.cts +4 -4
  361. package/dist/ui/avatar.d.ts +35 -0
  362. package/dist/ui/avatar.js +1 -0
  363. package/dist/ui/badge.cjs +1 -1
  364. package/dist/ui/badge.d.cts +1 -1
  365. package/dist/ui/badge.d.ts +2 -0
  366. package/dist/ui/badge.js +1 -0
  367. package/dist/ui/breadcrumb.cjs +1 -1
  368. package/dist/ui/breadcrumb.d.cts +8 -8
  369. package/dist/ui/breadcrumb.d.ts +72 -0
  370. package/dist/ui/breadcrumb.js +2 -0
  371. package/dist/ui/breadcrumb.js.map +1 -0
  372. package/dist/ui/button-group.cjs +1 -1
  373. package/dist/ui/button-group.d.cts +7 -7
  374. package/dist/ui/button-group.d.ts +50 -0
  375. package/dist/ui/button-group.js +2 -0
  376. package/dist/ui/button-group.js.map +1 -0
  377. package/dist/ui/button.cjs +1 -1
  378. package/dist/ui/button.d.cts +1 -1
  379. package/dist/ui/button.d.ts +2 -0
  380. package/dist/ui/button.js +1 -0
  381. package/dist/ui/buttons/add-new.cjs +1 -1
  382. package/dist/ui/buttons/add-new.d.ts +17 -0
  383. package/dist/ui/buttons/add-new.js +2 -0
  384. package/dist/ui/buttons/add-new.js.map +1 -0
  385. package/dist/ui/buttons/edit.cjs +1 -1
  386. package/dist/ui/buttons/edit.d.ts +17 -0
  387. package/dist/ui/buttons/edit.js +2 -0
  388. package/dist/ui/buttons/edit.js.map +1 -0
  389. package/dist/ui/buttons/refresh.cjs +1 -1
  390. package/dist/ui/buttons/refresh.d.ts +17 -0
  391. package/dist/ui/buttons/refresh.js +2 -0
  392. package/dist/ui/buttons/refresh.js.map +1 -0
  393. package/dist/ui/buttons/trash.cjs +1 -1
  394. package/dist/ui/buttons/trash.d.ts +17 -0
  395. package/dist/ui/buttons/trash.js +2 -0
  396. package/dist/ui/buttons/trash.js.map +1 -0
  397. package/dist/ui/buttons/upload-image.cjs +1 -1
  398. package/dist/ui/buttons/upload-image.d.ts +24 -0
  399. package/dist/ui/buttons/upload-image.js +2 -0
  400. package/dist/ui/buttons/upload-image.js.map +1 -0
  401. package/dist/ui/calendar.cjs +1 -1
  402. package/dist/ui/calendar.d.cts +4 -4
  403. package/dist/ui/calendar.d.ts +45 -0
  404. package/dist/ui/calendar.js +1 -0
  405. package/dist/ui/card.cjs +1 -1
  406. package/dist/ui/card.d.cts +8 -8
  407. package/dist/ui/card.d.ts +63 -0
  408. package/dist/ui/card.js +2 -0
  409. package/dist/ui/card.js.map +1 -0
  410. package/dist/ui/carousel.cjs +1 -1
  411. package/dist/ui/carousel.d.cts +7 -7
  412. package/dist/ui/carousel.d.ts +71 -0
  413. package/dist/ui/carousel.js +2 -0
  414. package/dist/ui/carousel.js.map +1 -0
  415. package/dist/ui/checkbox.cjs +1 -1
  416. package/dist/ui/checkbox.d.cts +2 -2
  417. package/dist/ui/checkbox.d.ts +26 -0
  418. package/dist/ui/checkbox.js +1 -0
  419. package/dist/ui/collapsible.cjs +1 -1
  420. package/dist/ui/collapsible.d.cts +4 -4
  421. package/dist/ui/collapsible.d.ts +34 -0
  422. package/dist/ui/collapsible.js +2 -0
  423. package/dist/ui/collapsible.js.map +1 -0
  424. package/dist/ui/command.cjs +1 -1
  425. package/dist/ui/command.d.cts +11 -11
  426. package/dist/ui/command.d.ts +89 -0
  427. package/dist/ui/command.js +1 -0
  428. package/dist/ui/context-menu.cjs +1 -1
  429. package/dist/ui/context-menu.d.cts +16 -16
  430. package/dist/ui/context-menu.d.ts +125 -0
  431. package/dist/ui/context-menu.js +2 -0
  432. package/dist/ui/context-menu.js.map +1 -0
  433. package/dist/ui/dialog.cjs +1 -1
  434. package/dist/ui/dialog.d.cts +1 -1
  435. package/dist/ui/dialog.d.ts +2 -0
  436. package/dist/ui/dialog.js +1 -0
  437. package/dist/ui/drawer.cjs +1 -1
  438. package/dist/ui/drawer.d.cts +11 -11
  439. package/dist/ui/drawer.d.ts +72 -0
  440. package/dist/ui/drawer.js +1 -0
  441. package/dist/ui/dropdown-menu.cjs +1 -1
  442. package/dist/ui/dropdown-menu.d.cts +16 -16
  443. package/dist/ui/dropdown-menu.d.ts +127 -0
  444. package/dist/ui/dropdown-menu.js +1 -0
  445. package/dist/ui/empty.cjs +1 -1
  446. package/dist/ui/empty.d.cts +9 -9
  447. package/dist/ui/empty.d.ts +68 -0
  448. package/dist/ui/empty.js +2 -0
  449. package/dist/ui/empty.js.map +1 -0
  450. package/dist/ui/field.cjs +1 -1
  451. package/dist/ui/field.d.cts +24 -24
  452. package/dist/ui/field.d.ts +65 -0
  453. package/dist/ui/field.js +1 -0
  454. package/dist/ui/file-uploader.cjs +1 -1
  455. package/dist/ui/file-uploader.d.cts +2 -2
  456. package/dist/ui/file-uploader.d.ts +103 -0
  457. package/dist/ui/file-uploader.js +3 -0
  458. package/dist/ui/file-uploader.js.map +1 -0
  459. package/dist/ui/form.cjs +1 -1
  460. package/dist/ui/form.d.cts +10 -10
  461. package/dist/ui/form.d.ts +112 -0
  462. package/dist/ui/form.js +2 -0
  463. package/dist/ui/form.js.map +1 -0
  464. package/dist/ui/hover-card.cjs +1 -1
  465. package/dist/ui/hover-card.d.cts +4 -4
  466. package/dist/ui/hover-card.d.ts +37 -0
  467. package/dist/ui/hover-card.js +2 -0
  468. package/dist/ui/hover-card.js.map +1 -0
  469. package/dist/ui/image.cjs +1 -1
  470. package/dist/ui/image.d.ts +36 -0
  471. package/dist/ui/image.js +1 -0
  472. package/dist/ui/input-otp.cjs +1 -1
  473. package/dist/ui/input-otp.d.cts +5 -5
  474. package/dist/ui/input-otp.d.ts +59 -0
  475. package/dist/ui/input-otp.js +2 -0
  476. package/dist/ui/input-otp.js.map +1 -0
  477. package/dist/ui/input.cjs +1 -1
  478. package/dist/ui/input.d.cts +1 -1
  479. package/dist/ui/input.d.ts +2 -0
  480. package/dist/ui/input.js +1 -0
  481. package/dist/ui/inputs/search-input.cjs +1 -1
  482. package/dist/ui/inputs/search-input.d.cts +3 -3
  483. package/dist/ui/inputs/search-input.d.ts +29 -0
  484. package/dist/ui/inputs/search-input.js +2 -0
  485. package/dist/ui/inputs/search-input.js.map +1 -0
  486. package/dist/ui/item.cjs +1 -1
  487. package/dist/ui/item.d.cts +14 -14
  488. package/dist/ui/item.d.ts +102 -0
  489. package/dist/ui/item.js +2 -0
  490. package/dist/ui/item.js.map +1 -0
  491. package/dist/ui/label.cjs +1 -1
  492. package/dist/ui/label.d.cts +2 -2
  493. package/dist/ui/label.d.ts +24 -0
  494. package/dist/ui/label.js +1 -0
  495. package/dist/ui/menubar.cjs +1 -1
  496. package/dist/ui/menubar.d.cts +17 -17
  497. package/dist/ui/menubar.d.ts +135 -0
  498. package/dist/ui/menubar.js +2 -0
  499. package/dist/ui/menubar.js.map +1 -0
  500. package/dist/ui/multi-select.cjs +1 -1
  501. package/dist/ui/multi-select.d.cts +2 -2
  502. package/dist/ui/multi-select.d.ts +118 -0
  503. package/dist/ui/multi-select.js +2 -0
  504. package/dist/ui/multi-select.js.map +1 -0
  505. package/dist/ui/navigation-menu.cjs +1 -1
  506. package/dist/ui/navigation-menu.d.cts +9 -9
  507. package/dist/ui/navigation-menu.d.ts +77 -0
  508. package/dist/ui/navigation-menu.js +2 -0
  509. package/dist/ui/navigation-menu.js.map +1 -0
  510. package/dist/ui/pagination.cjs +1 -1
  511. package/dist/ui/pagination.d.cts +9 -9
  512. package/dist/ui/pagination.d.ts +67 -0
  513. package/dist/ui/pagination.js +2 -0
  514. package/dist/ui/pagination.js.map +1 -0
  515. package/dist/ui/popover.cjs +1 -1
  516. package/dist/ui/popover.d.cts +6 -6
  517. package/dist/ui/popover.d.ts +52 -0
  518. package/dist/ui/popover.js +1 -0
  519. package/dist/ui/progress.cjs +1 -1
  520. package/dist/ui/progress.d.cts +2 -2
  521. package/dist/ui/progress.d.ts +23 -0
  522. package/dist/ui/progress.js +1 -0
  523. package/dist/ui/radio-group.cjs +1 -1
  524. package/dist/ui/radio-group.d.cts +3 -3
  525. package/dist/ui/radio-group.d.ts +37 -0
  526. package/dist/ui/radio-group.js +1 -0
  527. package/dist/ui/resizable.cjs +1 -1
  528. package/dist/ui/resizable.d.cts +9 -9
  529. package/dist/ui/resizable.d.ts +63 -0
  530. package/dist/ui/resizable.js +1 -0
  531. package/dist/ui/scroll-area.cjs +1 -1
  532. package/dist/ui/scroll-area.d.cts +5 -5
  533. package/dist/ui/scroll-area.d.ts +37 -0
  534. package/dist/ui/scroll-area.js +2 -0
  535. package/dist/ui/scroll-area.js.map +1 -0
  536. package/dist/ui/select.cjs +1 -1
  537. package/dist/ui/select.d.cts +9 -9
  538. package/dist/ui/select.d.ts +77 -0
  539. package/dist/ui/select.js +1 -0
  540. package/dist/ui/separator.cjs +1 -1
  541. package/dist/ui/separator.d.cts +2 -2
  542. package/dist/ui/separator.d.ts +34 -0
  543. package/dist/ui/separator.js +1 -0
  544. package/dist/ui/sheet.cjs +1 -1
  545. package/dist/ui/sheet.d.cts +9 -9
  546. package/dist/ui/sheet.d.ts +69 -0
  547. package/dist/ui/sheet.js +1 -0
  548. package/dist/ui/skeleton.cjs +1 -1
  549. package/dist/ui/skeleton.d.cts +2 -2
  550. package/dist/ui/skeleton.d.ts +27 -0
  551. package/dist/ui/skeleton.js +1 -0
  552. package/dist/ui/slider.cjs +1 -1
  553. package/dist/ui/slider.d.cts +2 -2
  554. package/dist/ui/slider.d.ts +26 -0
  555. package/dist/ui/slider.js +2 -0
  556. package/dist/ui/slider.js.map +1 -0
  557. package/dist/ui/sonner.cjs +1 -1
  558. package/dist/ui/sonner.cjs.map +1 -1
  559. package/dist/ui/sonner.d.cts +2 -2
  560. package/dist/ui/sonner.d.ts +24 -0
  561. package/dist/ui/sonner.js +2 -0
  562. package/dist/ui/sonner.js.map +1 -0
  563. package/dist/ui/spinner.cjs +1 -1
  564. package/dist/ui/spinner.d.cts +2 -2
  565. package/dist/ui/spinner.d.ts +25 -0
  566. package/dist/ui/spinner.js +1 -0
  567. package/dist/ui/switch.cjs +1 -1
  568. package/dist/ui/switch.d.cts +2 -2
  569. package/dist/ui/switch.d.ts +26 -0
  570. package/dist/ui/switch.js +1 -0
  571. package/dist/ui/table.cjs +1 -1
  572. package/dist/ui/table.d.cts +17 -17
  573. package/dist/ui/table.d.ts +73 -0
  574. package/dist/ui/table.js +2 -0
  575. package/dist/ui/table.js.map +1 -0
  576. package/dist/ui/tabs.cjs +1 -1
  577. package/dist/ui/tabs.d.cts +5 -5
  578. package/dist/ui/tabs.d.ts +44 -0
  579. package/dist/ui/tabs.js +2 -0
  580. package/dist/ui/tabs.js.map +1 -0
  581. package/dist/ui/textarea.cjs +1 -1
  582. package/dist/ui/textarea.d.cts +2 -2
  583. package/dist/ui/textarea.d.ts +30 -0
  584. package/dist/ui/textarea.js +1 -0
  585. package/dist/ui/toggle-group.cjs +1 -1
  586. package/dist/ui/toggle-group.d.cts +3 -3
  587. package/dist/ui/toggle-group.d.ts +39 -0
  588. package/dist/ui/toggle-group.js +2 -0
  589. package/dist/ui/toggle-group.js.map +1 -0
  590. package/dist/ui/toggle.cjs +1 -1
  591. package/dist/ui/toggle.d.cts +4 -4
  592. package/dist/ui/toggle.d.ts +32 -0
  593. package/dist/ui/toggle.js +2 -0
  594. package/dist/ui/toggle.js.map +1 -0
  595. package/dist/ui/tooltip.cjs +1 -1
  596. package/dist/ui/tooltip.d.cts +5 -5
  597. package/dist/ui/tooltip.d.ts +55 -0
  598. package/dist/ui/tooltip.js +1 -0
  599. package/dist/user-BSpgswEC.js +2 -0
  600. package/dist/user-BSpgswEC.js.map +1 -0
  601. package/dist/user-ii4FBhO1.cjs +2 -0
  602. package/dist/user-ii4FBhO1.cjs.map +1 -0
  603. package/package.json +20 -5
  604. package/styles/spacing.css +186 -0
  605. package/dist/alert-BbvPwf2x.mjs +0 -2
  606. package/dist/alert-BbvPwf2x.mjs.map +0 -1
  607. package/dist/alert-CT7oAzCC.d.mts +0 -88
  608. package/dist/alert-DubR6Szk.cjs +0 -2
  609. package/dist/alert-DubR6Szk.cjs.map +0 -1
  610. package/dist/alert-lqPNRRvJ.d.cts +0 -88
  611. package/dist/avatar-CqRl9dge.cjs +0 -2
  612. package/dist/avatar-CqRl9dge.cjs.map +0 -1
  613. package/dist/avatar-m1LjDIil.mjs +0 -2
  614. package/dist/avatar-m1LjDIil.mjs.map +0 -1
  615. package/dist/badge-Bhbhmsic.mjs +0 -2
  616. package/dist/badge-Bhbhmsic.mjs.map +0 -1
  617. package/dist/badge-C4nTfJGX.d.mts +0 -42
  618. package/dist/badge-DMnKV_uW.cjs +0 -2
  619. package/dist/badge-DMnKV_uW.cjs.map +0 -1
  620. package/dist/badge-Dq-Yyus_.d.cts +0 -42
  621. package/dist/button-Bu4ejNOW.cjs +0 -2
  622. package/dist/button-Bu4ejNOW.cjs.map +0 -1
  623. package/dist/button-CYLxBCfa.d.cts +0 -174
  624. package/dist/button-CfPTDyoq.mjs +0 -2
  625. package/dist/button-CfPTDyoq.mjs.map +0 -1
  626. package/dist/button-DlFsSFmT.d.mts +0 -174
  627. package/dist/button.variants-B8aRZ52K.mjs +0 -2
  628. package/dist/button.variants-B8aRZ52K.mjs.map +0 -1
  629. package/dist/button.variants-tnhb123u.cjs +0 -2
  630. package/dist/button.variants-tnhb123u.cjs.map +0 -1
  631. package/dist/calendar-BDhIfwPP.mjs +0 -2
  632. package/dist/calendar-BDhIfwPP.mjs.map +0 -1
  633. package/dist/calendar-CMd11yg9.cjs +0 -2
  634. package/dist/calendar-CMd11yg9.cjs.map +0 -1
  635. package/dist/cards/grid-product-card.d.mts +0 -37
  636. package/dist/cards/grid-product-card.mjs +0 -2
  637. package/dist/cards/grid-product-card.mjs.map +0 -1
  638. package/dist/cards/product-card.d.mts +0 -37
  639. package/dist/cards/product-card.mjs +0 -2
  640. package/dist/cards/product-card.mjs.map +0 -1
  641. package/dist/cards/simple-card.d.mts +0 -35
  642. package/dist/cards/simple-card.mjs +0 -2
  643. package/dist/cards/simple-card.mjs.map +0 -1
  644. package/dist/checkbox-BwDvS4De.cjs +0 -2
  645. package/dist/checkbox-BwDvS4De.cjs.map +0 -1
  646. package/dist/checkbox-CgHaRkuU.mjs +0 -2
  647. package/dist/checkbox-CgHaRkuU.mjs.map +0 -1
  648. package/dist/chunk-Bmb41Sf3.cjs +0 -1
  649. package/dist/close-B7OOMSZl.mjs +0 -2
  650. package/dist/close-B7OOMSZl.mjs.map +0 -1
  651. package/dist/close-DrCUWZt0.cjs +0 -2
  652. package/dist/close-DrCUWZt0.cjs.map +0 -1
  653. package/dist/cms-layout-BrubV8D8.cjs +0 -2
  654. package/dist/cms-layout-BrubV8D8.cjs.map +0 -1
  655. package/dist/cms-layout-C2-yysO2.mjs +0 -2
  656. package/dist/cms-layout-C2-yysO2.mjs.map +0 -1
  657. package/dist/command-DiXzSGc8.cjs +0 -2
  658. package/dist/command-DiXzSGc8.cjs.map +0 -1
  659. package/dist/command-FnbrPZ7_.mjs +0 -2
  660. package/dist/command-FnbrPZ7_.mjs.map +0 -1
  661. package/dist/data-display/country.d.mts +0 -22
  662. package/dist/data-display/country.mjs +0 -2
  663. package/dist/data-display/country.mjs.map +0 -1
  664. package/dist/data-display/data-list.d.mts +0 -43
  665. package/dist/data-display/data-list.mjs +0 -2
  666. package/dist/data-display/data-list.mjs.map +0 -1
  667. package/dist/data-display/date-tooltip.d.mts +0 -19
  668. package/dist/data-display/date-tooltip.mjs +0 -2
  669. package/dist/data-display/date-tooltip.mjs.map +0 -1
  670. package/dist/data-display/date.d.mts +0 -39
  671. package/dist/data-display/date.mjs +0 -1
  672. package/dist/data-display/empty.d.mts +0 -21
  673. package/dist/data-display/empty.mjs +0 -2
  674. package/dist/data-display/empty.mjs.map +0 -1
  675. package/dist/data-display/name.d.mts +0 -19
  676. package/dist/data-display/name.mjs +0 -2
  677. package/dist/data-display/name.mjs.map +0 -1
  678. package/dist/data-display/phone-number.d.mts +0 -19
  679. package/dist/data-display/phone-number.mjs +0 -2
  680. package/dist/data-display/phone-number.mjs.map +0 -1
  681. package/dist/data-display/role-badge.d.mts +0 -22
  682. package/dist/data-display/role-badge.mjs +0 -2
  683. package/dist/data-display/role-badge.mjs.map +0 -1
  684. package/dist/data-display/statistic.d.mts +0 -57
  685. package/dist/data-display/statistic.mjs +0 -1
  686. package/dist/data-display/user.d.mts +0 -23
  687. package/dist/data-display/user.mjs +0 -1
  688. package/dist/date-CFgc7pK3.mjs +0 -2
  689. package/dist/date-CFgc7pK3.mjs.map +0 -1
  690. package/dist/date-DtajzNoy.cjs +0 -2
  691. package/dist/date-DtajzNoy.cjs.map +0 -1
  692. package/dist/dialog-1ArhWB8r.d.cts +0 -90
  693. package/dist/dialog-D1sWnn6n.cjs +0 -2
  694. package/dist/dialog-D1sWnn6n.cjs.map +0 -1
  695. package/dist/dialog-EGFZeITu.mjs +0 -2
  696. package/dist/dialog-EGFZeITu.mjs.map +0 -1
  697. package/dist/dialog-_zfOGo8B.d.mts +0 -90
  698. package/dist/dialogs/confirm-dialog.d.mts +0 -142
  699. package/dist/dialogs/confirm-dialog.mjs +0 -2
  700. package/dist/dialogs/confirm-dialog.mjs.map +0 -1
  701. package/dist/dialogs/detail-dialog/components/sidebar.d.mts +0 -209
  702. package/dist/dialogs/detail-dialog/components/sidebar.mjs +0 -1
  703. package/dist/dialogs/detail-dialog/index.d.mts +0 -45
  704. package/dist/dialogs/detail-dialog/index.mjs +0 -2
  705. package/dist/dialogs/detail-dialog/index.mjs.map +0 -1
  706. package/dist/dialogs/error-dialog.d.mts +0 -25
  707. package/dist/dialogs/error-dialog.mjs +0 -2
  708. package/dist/dialogs/error-dialog.mjs.map +0 -1
  709. package/dist/dialogs/loading-dialog.d.mts +0 -21
  710. package/dist/dialogs/loading-dialog.mjs +0 -2
  711. package/dist/dialogs/loading-dialog.mjs.map +0 -1
  712. package/dist/dist-BQGL-YKY.mjs +0 -2
  713. package/dist/dist-BQGL-YKY.mjs.map +0 -1
  714. package/dist/dist-CAeolvAH.cjs +0 -2
  715. package/dist/dist-CAeolvAH.cjs.map +0 -1
  716. package/dist/drawer-B6C8-Ndu.cjs +0 -2
  717. package/dist/drawer-B6C8-Ndu.cjs.map +0 -1
  718. package/dist/drawer-CMD7JWH8.mjs +0 -2
  719. package/dist/drawer-CMD7JWH8.mjs.map +0 -1
  720. package/dist/dropdown-menu-Bz7oMQ36.cjs +0 -2
  721. package/dist/dropdown-menu-Bz7oMQ36.cjs.map +0 -1
  722. package/dist/dropdown-menu-C6tRSumY.mjs +0 -2
  723. package/dist/dropdown-menu-C6tRSumY.mjs.map +0 -1
  724. package/dist/features/descriptions/index.d.mts +0 -246
  725. package/dist/features/descriptions/index.mjs +0 -2
  726. package/dist/features/descriptions/index.mjs.map +0 -1
  727. package/dist/features/search-modal/index.d.mts +0 -17
  728. package/dist/features/search-modal/index.mjs +0 -1
  729. package/dist/features/tables/index.d.mts +0 -3
  730. package/dist/features/tables/index.mjs +0 -1
  731. package/dist/features/tanstack-form/index.d.mts +0 -2
  732. package/dist/features/tanstack-form/index.mjs +0 -1
  733. package/dist/features/text-editor/index.d.mts +0 -2
  734. package/dist/features/text-editor/index.mjs +0 -1
  735. package/dist/field-DhgAIueI.mjs +0 -2
  736. package/dist/field-DhgAIueI.mjs.map +0 -1
  737. package/dist/field-pfL7RWcN.cjs +0 -2
  738. package/dist/field-pfL7RWcN.cjs.map +0 -1
  739. package/dist/flex-BAcvp4lB.mjs +0 -2
  740. package/dist/flex-BAcvp4lB.mjs.map +0 -1
  741. package/dist/flex-DYh2t8ft.cjs +0 -2
  742. package/dist/flex-DYh2t8ft.cjs.map +0 -1
  743. package/dist/heading-wUXEbicM.cjs +0 -2
  744. package/dist/heading-wUXEbicM.cjs.map +0 -1
  745. package/dist/heading-woRh-IC7.mjs +0 -2
  746. package/dist/heading-woRh-IC7.mjs.map +0 -1
  747. package/dist/image-D2U1SBw5.mjs +0 -2
  748. package/dist/image-D2U1SBw5.mjs.map +0 -1
  749. package/dist/image-Y7gCz7uE.cjs +0 -2
  750. package/dist/image-Y7gCz7uE.cjs.map +0 -1
  751. package/dist/index-9dZXIJo5.d.mts +0 -2749
  752. package/dist/index-C6nrbQ-E.d.cts +0 -1061
  753. package/dist/index-CJoz7sMc.d.mts +0 -1061
  754. package/dist/index-CQkuntSj.d.cts +0 -2749
  755. package/dist/index-DiW-62hY.d.mts +0 -85
  756. package/dist/index.d.mts +0 -93
  757. package/dist/index.mjs +0 -1
  758. package/dist/input-5gk-Jv1y.mjs +0 -2
  759. package/dist/input-5gk-Jv1y.mjs.map +0 -1
  760. package/dist/input-BAr0l-oA.d.cts +0 -44
  761. package/dist/input-BvzsfAUc.cjs +0 -2
  762. package/dist/input-BvzsfAUc.cjs.map +0 -1
  763. package/dist/input-DXO2mTgG.d.mts +0 -44
  764. package/dist/label-D9uNQ9b_.mjs +0 -2
  765. package/dist/label-D9uNQ9b_.mjs.map +0 -1
  766. package/dist/label-eIyGIRyw.cjs +0 -2
  767. package/dist/label-eIyGIRyw.cjs.map +0 -1
  768. package/dist/layouts/cms-layout/index.d.mts +0 -76
  769. package/dist/layouts/cms-layout/index.mjs +0 -1
  770. package/dist/layouts/flex.d.mts +0 -117
  771. package/dist/layouts/flex.mjs +0 -1
  772. package/dist/layouts/grid.d.mts +0 -19
  773. package/dist/layouts/grid.mjs +0 -2
  774. package/dist/layouts/grid.mjs.map +0 -1
  775. package/dist/layouts/payment-layout/index.d.mts +0 -74
  776. package/dist/layouts/payment-layout/index.mjs +0 -1
  777. package/dist/pages/FeatureDeveloping.d.mts +0 -43
  778. package/dist/pages/FeatureDeveloping.mjs +0 -2
  779. package/dist/pages/FeatureDeveloping.mjs.map +0 -1
  780. package/dist/pages/FeatureFixing.d.mts +0 -43
  781. package/dist/pages/FeatureFixing.mjs +0 -2
  782. package/dist/pages/FeatureFixing.mjs.map +0 -1
  783. package/dist/pages/LoginPage.d.mts +0 -55
  784. package/dist/pages/LoginPage.mjs +0 -2
  785. package/dist/pages/LoginPage.mjs.map +0 -1
  786. package/dist/pages/NotAuthorized.d.mts +0 -43
  787. package/dist/pages/NotAuthorized.mjs +0 -2
  788. package/dist/pages/NotAuthorized.mjs.map +0 -1
  789. package/dist/pages/NotFound.d.mts +0 -43
  790. package/dist/pages/NotFound.mjs +0 -2
  791. package/dist/pages/NotFound.mjs.map +0 -1
  792. package/dist/pages/RegisterPage.d.mts +0 -52
  793. package/dist/pages/RegisterPage.mjs +0 -2
  794. package/dist/pages/RegisterPage.mjs.map +0 -1
  795. package/dist/pages/VerifyEmailPage.d.mts +0 -64
  796. package/dist/pages/VerifyEmailPage.mjs +0 -2
  797. package/dist/pages/VerifyEmailPage.mjs.map +0 -1
  798. package/dist/paragraph-CjstaJFj.mjs +0 -2
  799. package/dist/paragraph-CjstaJFj.mjs.map +0 -1
  800. package/dist/paragraph-D-JHj7EP.cjs +0 -2
  801. package/dist/paragraph-D-JHj7EP.cjs.map +0 -1
  802. package/dist/payment-layout-_ZM4uBy_.mjs +0 -2
  803. package/dist/payment-layout-_ZM4uBy_.mjs.map +0 -1
  804. package/dist/payment-layout-fsYTkw3r.cjs +0 -2
  805. package/dist/payment-layout-fsYTkw3r.cjs.map +0 -1
  806. package/dist/popover-DwgdOX8a.mjs +0 -2
  807. package/dist/popover-DwgdOX8a.mjs.map +0 -1
  808. package/dist/popover-fsTCOb6a.cjs +0 -2
  809. package/dist/popover-fsTCOb6a.cjs.map +0 -1
  810. package/dist/progress-CDYA2V-W.cjs +0 -2
  811. package/dist/progress-CDYA2V-W.cjs.map +0 -1
  812. package/dist/progress-DCBKnTx0.mjs +0 -2
  813. package/dist/progress-DCBKnTx0.mjs.map +0 -1
  814. package/dist/radio-group-B-M599Ys.cjs +0 -2
  815. package/dist/radio-group-B-M599Ys.cjs.map +0 -1
  816. package/dist/radio-group-Y9bhdr55.mjs +0 -2
  817. package/dist/radio-group-Y9bhdr55.mjs.map +0 -1
  818. package/dist/resizable-DATSh0Du.cjs +0 -2
  819. package/dist/resizable-DATSh0Du.cjs.map +0 -1
  820. package/dist/resizable-DP1BQAF_.mjs +0 -2
  821. package/dist/resizable-DP1BQAF_.mjs.map +0 -1
  822. package/dist/search-modal-CYRJEDE-.cjs +0 -2
  823. package/dist/search-modal-CYRJEDE-.cjs.map +0 -1
  824. package/dist/search-modal-DWu08xkE.mjs +0 -2
  825. package/dist/search-modal-DWu08xkE.mjs.map +0 -1
  826. package/dist/select-BAlA65tZ.mjs +0 -2
  827. package/dist/select-BAlA65tZ.mjs.map +0 -1
  828. package/dist/select-Cib2aiw5.cjs +0 -2
  829. package/dist/select-Cib2aiw5.cjs.map +0 -1
  830. package/dist/separator-C6s-YvlT.mjs +0 -2
  831. package/dist/separator-C6s-YvlT.mjs.map +0 -1
  832. package/dist/separator-CBup_ah1.cjs +0 -2
  833. package/dist/separator-CBup_ah1.cjs.map +0 -1
  834. package/dist/sheet-Cj8hoftE.mjs +0 -2
  835. package/dist/sheet-Cj8hoftE.mjs.map +0 -1
  836. package/dist/sheet-DAjZ-Q6Q.cjs +0 -2
  837. package/dist/sheet-DAjZ-Q6Q.cjs.map +0 -1
  838. package/dist/sidebar-Drasn0Bx.cjs +0 -2
  839. package/dist/sidebar-Drasn0Bx.cjs.map +0 -1
  840. package/dist/sidebar-RcmDh50_.mjs +0 -2
  841. package/dist/sidebar-RcmDh50_.mjs.map +0 -1
  842. package/dist/skeleton-CHympz8k.cjs +0 -2
  843. package/dist/skeleton-CHympz8k.cjs.map +0 -1
  844. package/dist/skeleton-DupQ91XW.mjs +0 -2
  845. package/dist/skeleton-DupQ91XW.mjs.map +0 -1
  846. package/dist/spinner-BCnPYF1H.mjs +0 -2
  847. package/dist/spinner-BCnPYF1H.mjs.map +0 -1
  848. package/dist/spinner-Bdta7BMp.cjs +0 -2
  849. package/dist/spinner-Bdta7BMp.cjs.map +0 -1
  850. package/dist/statistic-Cm4nbkjQ.mjs +0 -2
  851. package/dist/statistic-Cm4nbkjQ.mjs.map +0 -1
  852. package/dist/statistic-DDDm5Om1.cjs +0 -2
  853. package/dist/statistic-DDDm5Om1.cjs.map +0 -1
  854. package/dist/switch-BP7EPatj.mjs +0 -2
  855. package/dist/switch-BP7EPatj.mjs.map +0 -1
  856. package/dist/switch-Dbc77c_D.cjs +0 -2
  857. package/dist/switch-Dbc77c_D.cjs.map +0 -1
  858. package/dist/systems/google.d.mts +0 -53
  859. package/dist/systems/google.mjs +0 -2
  860. package/dist/systems/google.mjs.map +0 -1
  861. package/dist/tables-B3Ald6An.cjs +0 -4
  862. package/dist/tables-B3Ald6An.cjs.map +0 -1
  863. package/dist/tables-C3asiSD4.mjs +0 -4
  864. package/dist/tables-C3asiSD4.mjs.map +0 -1
  865. package/dist/tanstack-form-Byb7E1m9.cjs +0 -2
  866. package/dist/tanstack-form-Byb7E1m9.cjs.map +0 -1
  867. package/dist/tanstack-form-Dg_0hFwX.mjs +0 -2
  868. package/dist/tanstack-form-Dg_0hFwX.mjs.map +0 -1
  869. package/dist/text-editor-Bg0Wtnt3.mjs +0 -2
  870. package/dist/text-editor-Bg0Wtnt3.mjs.map +0 -1
  871. package/dist/text-editor-DtLcsiR7.cjs +0 -2
  872. package/dist/text-editor-DtLcsiR7.cjs.map +0 -1
  873. package/dist/textarea-7HDXcaK9.mjs +0 -2
  874. package/dist/textarea-7HDXcaK9.mjs.map +0 -1
  875. package/dist/textarea-Byo8E8oi.cjs +0 -2
  876. package/dist/textarea-Byo8E8oi.cjs.map +0 -1
  877. package/dist/tooltip-BfBJRYpc.mjs +0 -2
  878. package/dist/tooltip-BfBJRYpc.mjs.map +0 -1
  879. package/dist/tooltip-DC6i1A25.cjs +0 -2
  880. package/dist/tooltip-DC6i1A25.cjs.map +0 -1
  881. package/dist/types-CFXgrpTm.mjs +0 -2
  882. package/dist/types-CFXgrpTm.mjs.map +0 -1
  883. package/dist/types-YLu40dXY.d.mts +0 -24
  884. package/dist/typography/paragraph.d.mts +0 -48
  885. package/dist/typography/paragraph.mjs +0 -1
  886. package/dist/typography/title.d.mts +0 -43
  887. package/dist/typography/title.mjs +0 -2
  888. package/dist/typography/title.mjs.map +0 -1
  889. package/dist/ui/alert-dialog.d.mts +0 -90
  890. package/dist/ui/alert-dialog.mjs +0 -2
  891. package/dist/ui/alert-dialog.mjs.map +0 -1
  892. package/dist/ui/alert.d.mts +0 -2
  893. package/dist/ui/alert.mjs +0 -1
  894. package/dist/ui/aspect-ratio.d.mts +0 -24
  895. package/dist/ui/aspect-ratio.mjs +0 -2
  896. package/dist/ui/aspect-ratio.mjs.map +0 -1
  897. package/dist/ui/avatar.d.mts +0 -35
  898. package/dist/ui/avatar.mjs +0 -1
  899. package/dist/ui/badge.d.mts +0 -2
  900. package/dist/ui/badge.mjs +0 -1
  901. package/dist/ui/breadcrumb.d.mts +0 -72
  902. package/dist/ui/breadcrumb.mjs +0 -2
  903. package/dist/ui/breadcrumb.mjs.map +0 -1
  904. package/dist/ui/button-group.d.mts +0 -50
  905. package/dist/ui/button-group.mjs +0 -2
  906. package/dist/ui/button-group.mjs.map +0 -1
  907. package/dist/ui/button.d.mts +0 -2
  908. package/dist/ui/button.mjs +0 -1
  909. package/dist/ui/buttons/add-new.d.mts +0 -17
  910. package/dist/ui/buttons/add-new.mjs +0 -2
  911. package/dist/ui/buttons/add-new.mjs.map +0 -1
  912. package/dist/ui/buttons/edit.d.mts +0 -17
  913. package/dist/ui/buttons/edit.mjs +0 -2
  914. package/dist/ui/buttons/edit.mjs.map +0 -1
  915. package/dist/ui/buttons/refresh.d.mts +0 -17
  916. package/dist/ui/buttons/refresh.mjs +0 -2
  917. package/dist/ui/buttons/refresh.mjs.map +0 -1
  918. package/dist/ui/buttons/trash.d.mts +0 -17
  919. package/dist/ui/buttons/trash.mjs +0 -2
  920. package/dist/ui/buttons/trash.mjs.map +0 -1
  921. package/dist/ui/buttons/upload-image.d.mts +0 -24
  922. package/dist/ui/buttons/upload-image.mjs +0 -2
  923. package/dist/ui/buttons/upload-image.mjs.map +0 -1
  924. package/dist/ui/calendar.d.mts +0 -45
  925. package/dist/ui/calendar.mjs +0 -1
  926. package/dist/ui/card.d.mts +0 -63
  927. package/dist/ui/card.mjs +0 -2
  928. package/dist/ui/card.mjs.map +0 -1
  929. package/dist/ui/carousel.d.mts +0 -71
  930. package/dist/ui/carousel.mjs +0 -2
  931. package/dist/ui/carousel.mjs.map +0 -1
  932. package/dist/ui/checkbox.d.mts +0 -26
  933. package/dist/ui/checkbox.mjs +0 -1
  934. package/dist/ui/collapsible.d.mts +0 -34
  935. package/dist/ui/collapsible.mjs +0 -2
  936. package/dist/ui/collapsible.mjs.map +0 -1
  937. package/dist/ui/command.d.mts +0 -89
  938. package/dist/ui/command.mjs +0 -1
  939. package/dist/ui/context-menu.d.mts +0 -125
  940. package/dist/ui/context-menu.mjs +0 -2
  941. package/dist/ui/context-menu.mjs.map +0 -1
  942. package/dist/ui/dialog.d.mts +0 -2
  943. package/dist/ui/dialog.mjs +0 -1
  944. package/dist/ui/drawer.d.mts +0 -72
  945. package/dist/ui/drawer.mjs +0 -1
  946. package/dist/ui/dropdown-menu.d.mts +0 -127
  947. package/dist/ui/dropdown-menu.mjs +0 -1
  948. package/dist/ui/empty.d.mts +0 -68
  949. package/dist/ui/empty.mjs +0 -2
  950. package/dist/ui/empty.mjs.map +0 -1
  951. package/dist/ui/field.d.mts +0 -65
  952. package/dist/ui/field.mjs +0 -1
  953. package/dist/ui/file-uploader.d.mts +0 -103
  954. package/dist/ui/file-uploader.mjs +0 -3
  955. package/dist/ui/file-uploader.mjs.map +0 -1
  956. package/dist/ui/form.d.mts +0 -112
  957. package/dist/ui/form.mjs +0 -2
  958. package/dist/ui/form.mjs.map +0 -1
  959. package/dist/ui/hover-card.d.mts +0 -37
  960. package/dist/ui/hover-card.mjs +0 -2
  961. package/dist/ui/hover-card.mjs.map +0 -1
  962. package/dist/ui/image.d.mts +0 -36
  963. package/dist/ui/image.mjs +0 -1
  964. package/dist/ui/input-otp.d.mts +0 -59
  965. package/dist/ui/input-otp.mjs +0 -2
  966. package/dist/ui/input-otp.mjs.map +0 -1
  967. package/dist/ui/input.d.mts +0 -2
  968. package/dist/ui/input.mjs +0 -1
  969. package/dist/ui/inputs/search-input.d.mts +0 -29
  970. package/dist/ui/inputs/search-input.mjs +0 -2
  971. package/dist/ui/inputs/search-input.mjs.map +0 -1
  972. package/dist/ui/item.d.mts +0 -102
  973. package/dist/ui/item.mjs +0 -2
  974. package/dist/ui/item.mjs.map +0 -1
  975. package/dist/ui/label.d.mts +0 -24
  976. package/dist/ui/label.mjs +0 -1
  977. package/dist/ui/menubar.d.mts +0 -135
  978. package/dist/ui/menubar.mjs +0 -2
  979. package/dist/ui/menubar.mjs.map +0 -1
  980. package/dist/ui/multi-select.d.mts +0 -118
  981. package/dist/ui/multi-select.mjs +0 -2
  982. package/dist/ui/multi-select.mjs.map +0 -1
  983. package/dist/ui/navigation-menu.d.mts +0 -77
  984. package/dist/ui/navigation-menu.mjs +0 -2
  985. package/dist/ui/navigation-menu.mjs.map +0 -1
  986. package/dist/ui/pagination.d.mts +0 -67
  987. package/dist/ui/pagination.mjs +0 -2
  988. package/dist/ui/pagination.mjs.map +0 -1
  989. package/dist/ui/popover.d.mts +0 -52
  990. package/dist/ui/popover.mjs +0 -1
  991. package/dist/ui/progress.d.mts +0 -23
  992. package/dist/ui/progress.mjs +0 -1
  993. package/dist/ui/radio-group.d.mts +0 -37
  994. package/dist/ui/radio-group.mjs +0 -1
  995. package/dist/ui/resizable.d.mts +0 -63
  996. package/dist/ui/resizable.mjs +0 -1
  997. package/dist/ui/scroll-area.d.mts +0 -37
  998. package/dist/ui/scroll-area.mjs +0 -2
  999. package/dist/ui/scroll-area.mjs.map +0 -1
  1000. package/dist/ui/select.d.mts +0 -77
  1001. package/dist/ui/select.mjs +0 -1
  1002. package/dist/ui/separator.d.mts +0 -34
  1003. package/dist/ui/separator.mjs +0 -1
  1004. package/dist/ui/sheet.d.mts +0 -69
  1005. package/dist/ui/sheet.mjs +0 -1
  1006. package/dist/ui/skeleton.d.mts +0 -27
  1007. package/dist/ui/skeleton.mjs +0 -1
  1008. package/dist/ui/slider.d.mts +0 -26
  1009. package/dist/ui/slider.mjs +0 -2
  1010. package/dist/ui/slider.mjs.map +0 -1
  1011. package/dist/ui/sonner.d.mts +0 -24
  1012. package/dist/ui/sonner.mjs +0 -2
  1013. package/dist/ui/sonner.mjs.map +0 -1
  1014. package/dist/ui/spinner.d.mts +0 -25
  1015. package/dist/ui/spinner.mjs +0 -1
  1016. package/dist/ui/switch.d.mts +0 -26
  1017. package/dist/ui/switch.mjs +0 -1
  1018. package/dist/ui/table.d.mts +0 -73
  1019. package/dist/ui/table.mjs +0 -2
  1020. package/dist/ui/table.mjs.map +0 -1
  1021. package/dist/ui/tabs.d.mts +0 -44
  1022. package/dist/ui/tabs.mjs +0 -2
  1023. package/dist/ui/tabs.mjs.map +0 -1
  1024. package/dist/ui/textarea.d.mts +0 -30
  1025. package/dist/ui/textarea.mjs +0 -1
  1026. package/dist/ui/toggle-group.d.mts +0 -39
  1027. package/dist/ui/toggle-group.mjs +0 -2
  1028. package/dist/ui/toggle-group.mjs.map +0 -1
  1029. package/dist/ui/toggle.d.mts +0 -32
  1030. package/dist/ui/toggle.mjs +0 -2
  1031. package/dist/ui/toggle.mjs.map +0 -1
  1032. package/dist/ui/tooltip.d.mts +0 -55
  1033. package/dist/ui/tooltip.mjs +0 -1
  1034. package/dist/user-D8Skw8dI.mjs +0 -2
  1035. package/dist/user-D8Skw8dI.mjs.map +0 -1
  1036. package/dist/user-Dns1BKaT.cjs +0 -2
  1037. package/dist/user-Dns1BKaT.cjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"checkbox-CgHaRkuU.mjs","names":["Checkbox","CheckboxPrimitive"],"sources":["../packages/components/ui/checkbox.tsx"],"sourcesContent":["'use client';\n\nimport { CheckIcon } from 'lucide-react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Checkbox as CheckboxPrimitive } from 'radix-ui';\n\n/**\n * Accessible checkbox input built on Radix UI's Checkbox primitive with checked, indeterminate, focus, invalid, and read-only states.\n *\n * @example\n * ```tsx\n * import { Checkbox } from '@customafk/lunas-ui/ui/checkbox';\n * import { Label } from '@customafk/lunas-ui/ui/label';\n *\n * <div className=\"flex items-center gap-2\">\n * <Checkbox id=\"terms\" />\n * <Label htmlFor=\"terms\">Accept terms and conditions</Label>\n * </div>\n * ```\n */\nfunction Checkbox({ className, ...props }: React.ComponentProps<typeof CheckboxPrimitive.Root>) {\n return (\n <CheckboxPrimitive.Root\n data-slot=\"checkbox\"\n className={cn(\n 'peer border-border',\n 'size-4 shrink-0 cursor-pointer rounded border shadow-xs outline-none transition-all',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'focus-visible:border-primary-strong',\n 'focus-visible:ring-3',\n 'focus-visible:ring-primary-weak',\n 'aria-invalid:border-danger aria-invalid:ring-danger-weak',\n 'aria-readonly:bg-muted-muted',\n 'aria-readonly:pointer-events-none',\n 'data-[state=checked]:aria-readonly:bg-muted-muted',\n 'data-[state=checked]:aria-readonly:border-border',\n 'data-[state=checked]:aria-readonly:text-text-positive-strong',\n 'data-[state=checked]:bg-primary',\n 'data-[state=checked]:border-primary-strong',\n 'data-[state=checked]:text-text-negative-strong',\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator data-slot=\"checkbox-indicator\" className=\"flex items-center justify-center text-current transition-none\">\n <CheckIcon size={14} />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n );\n}\n\nexport { Checkbox };\n"],"mappings":"yKAsBA,SAASA,EAAS,CAAE,YAAW,GAAG,GAA8D,CAC9F,OACE,EAACC,EAAkB,KAAA,CACjB,YAAU,WACV,UAAW,EACT,qBACA,sFACA,kDACA,sCACA,uBACA,kCACA,2DACA,+BACA,oCACA,oDACA,mDACA,+DACA,kCACA,6CACA,iDACA,EACD,CACD,GAAI,WAEJ,EAACA,EAAkB,UAAA,CAAU,YAAU,qBAAqB,UAAU,yEACpE,EAAC,EAAA,CAAU,KAAM,GAAA,CAAM,EACK,EACP"}
@@ -1 +0,0 @@
1
- var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return s}});
@@ -1,2 +0,0 @@
1
- import{XIcon as e}from"lucide-react";import{cn as t}from"@customafk/react-toolkit/utils";import{jsx as n}from"react/jsx-runtime";const r=({className:r,...i})=>n(`button`,{className:t(`flex cursor-pointer items-center justify-center rounded-[100px] p-2 text-text-positive-weak transition-colors hover:bg-muted-muted hover:text-text-positive active:bg-muted-weak active:text-text-positive-strong disabled:pointer-events-none disabled:opacity-60`,r),...i,children:n(e,{size:24})});export{r as t};
2
- //# sourceMappingURL=close-B7OOMSZl.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"close-B7OOMSZl.mjs","names":["CloseButton: React.FC<React.ComponentProps<'button'>>"],"sources":["../packages/components/ui/buttons/close.tsx"],"sourcesContent":["import { XIcon } from 'lucide-react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nexport const CloseButton: React.FC<React.ComponentProps<'button'>> = ({ className, ...props }) => {\n return (\n <button\n className={cn(\n 'flex cursor-pointer items-center justify-center rounded-[100px] p-2 text-text-positive-weak transition-colors hover:bg-muted-muted hover:text-text-positive active:bg-muted-weak active:text-text-positive-strong disabled:pointer-events-none disabled:opacity-60',\n className\n )}\n {...props}\n >\n <XIcon size={24} />\n </button>\n );\n};\n"],"mappings":"iIAIA,MAAaA,GAAyD,CAAE,YAAW,GAAG,KAElF,EAAC,SAAA,CACC,UAAW,EACT,qQACA,EACD,CACD,GAAI,WAEJ,EAAC,EAAA,CAAM,KAAM,GAAA,CAAM,EACZ"}
@@ -1,2 +0,0 @@
1
- const e=require(`./chunk-Bmb41Sf3.cjs`);let t=require(`lucide-react`),n=require(`@customafk/react-toolkit/utils`),r=require(`react/jsx-runtime`);const i=({className:e,...i})=>(0,r.jsx)(`button`,{className:(0,n.cn)(`flex cursor-pointer items-center justify-center rounded-[100px] p-2 text-text-positive-weak transition-colors hover:bg-muted-muted hover:text-text-positive active:bg-muted-weak active:text-text-positive-strong disabled:pointer-events-none disabled:opacity-60`,e),...i,children:(0,r.jsx)(t.XIcon,{size:24})});Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return i}});
2
- //# sourceMappingURL=close-DrCUWZt0.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"close-DrCUWZt0.cjs","names":["CloseButton: React.FC<React.ComponentProps<'button'>>","XIcon"],"sources":["../packages/components/ui/buttons/close.tsx"],"sourcesContent":["import { XIcon } from 'lucide-react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nexport const CloseButton: React.FC<React.ComponentProps<'button'>> = ({ className, ...props }) => {\n return (\n <button\n className={cn(\n 'flex cursor-pointer items-center justify-center rounded-[100px] p-2 text-text-positive-weak transition-colors hover:bg-muted-muted hover:text-text-positive active:bg-muted-weak active:text-text-positive-strong disabled:pointer-events-none disabled:opacity-60',\n className\n )}\n {...props}\n >\n <XIcon size={24} />\n </button>\n );\n};\n"],"mappings":"iJAIA,MAAaA,GAAyD,CAAE,YAAW,GAAG,MAElF,EAAA,EAAA,KAAC,SAAA,CACC,WAAA,EAAA,EAAA,IACE,qQACA,EACD,CACD,GAAI,YAEJ,EAAA,EAAA,KAACC,EAAAA,MAAAA,CAAM,KAAM,GAAA,CAAM,EACZ"}
@@ -1,2 +0,0 @@
1
- const e=require(`./chunk-Bmb41Sf3.cjs`),t=require(`./dist-CAeolvAH.cjs`),n=require(`./button-Bu4ejNOW.cjs`),r=require(`./tooltip-DC6i1A25.cjs`),i=require(`./separator-CBup_ah1.cjs`),a=require(`./sheet-DAjZ-Q6Q.cjs`),o=require(`./dropdown-menu-Bz7oMQ36.cjs`),s=require(`./input-BvzsfAUc.cjs`);let c=require(`lucide-react`),l=require(`react`),u=require(`@customafk/react-toolkit/utils`),d=require(`class-variance-authority`),f=require(`react/jsx-runtime`),p=require(`@customafk/react-toolkit/hooks/useMobile`);const m=`sidebar_state`,h=3600*24*7,g=`16rem`,_=`18rem`,v=`3rem`,y=`b`,b=(0,l.createContext)(null);function x(){let e=(0,l.useContext)(b);if(!e)throw Error(`useSidebar must be used within a SidebarProvider.`);return e}function S({defaultOpen:e=!0,open:t,onOpenChange:n,className:i,style:a,children:o,...s}){let c=(0,p.useIsMobile)(),[d,m]=(0,l.useState)(!1),[h,g]=(0,l.useState)(e),_=t??h,v=(0,l.useCallback)(e=>{let t=typeof e==`function`?e(_):e;n?n(t):g(t),document.cookie=`sidebar_state=${t}; path=/; max-age=604800`},[n,_]),y=(0,l.useCallback)(()=>c?m(e=>!e):v(e=>!e),[c,v]);(0,l.useEffect)(()=>{let e=e=>{e.key===`b`&&(e.metaKey||e.ctrlKey)&&(e.preventDefault(),y())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[y]);let x=_?`expanded`:`collapsed`,S=(0,l.useMemo)(()=>({state:x,open:_,setOpen:v,isMobile:c,openMobile:d,setOpenMobile:m,toggleSidebar:y}),[x,_,v,c,d,y]);return(0,f.jsx)(b.Provider,{value:S,children:(0,f.jsx)(r.r,{delayDuration:0,children:(0,f.jsx)(`section`,{"data-slot":`layout-wrapper`,style:{"--sidebar-width":`16rem`,"--sidebar-width-icon":`3rem`,...a},className:(0,u.cn)(`relative group/sidebar-wrapper flex h-dvh bg-sidebar`,i),...s,children:o})})})}const C=(0,l.memo)(({side:e=`left`,variant:t=`sidebar`,collapsible:r=`offcanvas`,className:i,children:o,...s})=>{let{isMobile:d,state:p,openMobile:m,setOpenMobile:h,toggleSidebar:g}=x(),_=(0,l.useCallback)(e=>{g(),e.preventDefault(),e.stopPropagation()},[g]);return r===`none`?(0,f.jsx)(`aside`,{"data-slot":`sidebar`,className:(0,u.cn)(`flex w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground`,i),...s,children:o}):d?(0,f.jsx)(a.t,{open:m,onOpenChange:h,...s,children:(0,f.jsxs)(a.r,{"data-sidebar":`sidebar`,"data-slot":`sidebar`,"data-mobile":`true`,style:{"--sidebar-width":`18rem`},side:e,className:`w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground sm:max-w-3xs [&>button]:hidden`,children:[(0,f.jsxs)(a.o,{className:`sr-only`,children:[(0,f.jsx)(a.s,{children:`Sidebar`}),(0,f.jsx)(a.i,{children:`Displays the mobile sidebar.`})]}),(0,f.jsxs)(`div`,{className:`flex size-full flex-col`,children:[(0,f.jsxs)(`div`,{className:`flex flex-0 items-center gap-x-2 border-b border-border-weak p-2 pr-4`,children:[(0,f.jsxs)(n.t,{"data-sidebar":`trigger`,"data-slot":`sidebar-trigger`,variant:`ghost`,color:`muted`,size:`icon`,className:(0,u.cn)(`size-10 rounded-full`,i),onClick:_,children:[(0,f.jsx)(c.MenuIcon,{className:`size-6!`}),(0,f.jsx)(`span`,{className:`sr-only`,children:`Toggle Sidebar`})]}),(0,f.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,f.jsx)(c.ShoppingCartIcon,{size:20})}),(0,f.jsxs)(`div`,{className:`grid flex-1 text-left text-sm leading-tight`,children:[(0,f.jsx)(`span`,{className:`truncate font-medium`,children:`Lunas Store`}),(0,f.jsx)(`span`,{className:`truncate text-xs`,children:`Established 2023`})]})]}),(0,f.jsx)(`div`,{className:`flex flex-1 flex-col p-2`,children:o})]})]})}):(0,f.jsxs)(`aside`,{className:`group peer hidden bg-card text-sidebar-foreground md:block`,"data-state":p,"data-collapsible":p===`collapsed`?r:``,"data-variant":t,"data-side":e,"data-slot":`sidebar`,children:[(0,f.jsx)(`div`,{"data-slot":`sidebar-gap`,className:(0,u.cn)(`bg-transparent`,`transition-[width] duration-200 ease-linear`,`h-(--header-height) sm:h-[calc(var(--header-height)+0.5rem)]`,`w-(--sidebar-width)`,`group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]`)}),(0,f.jsx)(`div`,{"data-slot":`sidebar-container`,className:(0,u.cn)(`hidden md:flex shadow-nav`,`fixed left-0 inset-y-0 p-2`,`top-[calc(var(--header-height)+0.5rem)] z-10`,`w-(--sidebar-width)`,`transition-all duration-200 ease-linear`,`group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]`,i),...s,children:(0,f.jsx)(`div`,{"data-sidebar":`sidebar`,"data-slot":`sidebar-inner`,className:`relative flex size-full flex-col`,children:o})})]})});C.displayName=`CMSLayoutSidebar`;const w=(0,l.memo)(({className:e,children:t,...n})=>(0,f.jsxs)(`main`,{"data-slot":`sidebar-inset`,className:(0,u.cn)(`relative flex w-full flex-1 flex-col`,e),...n,children:[(0,f.jsx)(`div`,{className:`h-(--header-height) sm:h-[calc(var(--header-height)+0.5rem)]`}),(0,f.jsx)(`div`,{className:`relative flex-1 size-full overflow-auto`,children:t})]}));w.displayName=`CMSLayoutMain`;const T=(0,l.memo)(({className:e,...t})=>(0,f.jsx)(s.t,{"data-slot":`sidebar-input`,"data-sidebar":`input`,className:(0,u.cn)(`h-8 w-full bg-background shadow-none`,e),...t}));T.displayName=`SidebarInput`;const E=(0,l.memo)(({className:e,...t})=>(0,f.jsx)(`div`,{"data-slot":`sidebar-header`,"data-sidebar":`header`,className:(0,u.cn)(`flex flex-col gap-2 p-2`,e),...t}));E.displayName=`SidebarHeader`;const D=(0,l.memo)(({className:e,...t})=>(0,f.jsx)(`div`,{"data-slot":`sidebar-footer`,"data-sidebar":`footer`,className:(0,u.cn)(`flex flex-col gap-2`,e),...t}));D.displayName=`SidebarFooter`;const O=(0,l.memo)(({className:e,...t})=>(0,f.jsx)(i.t,{"data-slot":`sidebar-separator`,"data-sidebar":`separator`,className:(0,u.cn)(`mx-2 w-auto bg-sidebar-border`,e),...t}));O.displayName=`SidebarSeparator`;const k=(0,l.memo)(({className:e,...t})=>(0,f.jsx)(`div`,{"data-slot":`sidebar-content`,"data-sidebar":`content`,className:(0,u.cn)(`flex flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden`,e),...t}));k.displayName=`SidebarContent`;const A=(0,l.memo)(({className:e,...t})=>(0,f.jsx)(`div`,{"data-slot":`sidebar-group`,"data-sidebar":`group`,className:(0,u.cn)(`relative flex w-full flex-col`,e),...t}));A.displayName=`SidebarGroup`;const j=(0,l.memo)(({className:e,asChild:n=!1,...r})=>(0,f.jsx)(n?t.t:`div`,{"data-slot":`sidebar-group-label`,"data-sidebar":`group-label`,className:(0,u.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,color] 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}));j.displayName=`SidebarGroupLabel`;const M=(0,l.memo)(({className:e,...t})=>(0,f.jsx)(`div`,{"data-slot":`sidebar-group-content`,"data-sidebar":`group-content`,className:(0,u.cn)(`w-full text-sm`,e),...t}));M.displayName=`SidebarGroupContent`;const N=(0,l.memo)(({className:e,...t})=>(0,f.jsx)(`ul`,{"data-slot":`sidebar-menu`,"data-sidebar":`menu`,className:(0,u.cn)(`flex w-full min-w-0 flex-col gap-1`,e),...t}));N.displayName=`SidebarMenu`;const P=(0,l.memo)(({className:e,...t})=>(0,f.jsx)(`li`,{"data-slot":`sidebar-menu-item`,"data-sidebar":`menu-item`,className:(0,u.cn)(`group/menu-item relative`,e),...t}));P.displayName=`SidebarMenuItem`;const F=(0,d.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,background-color,width,height,padding]`,`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`,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`}}),I=(0,l.memo)(({asChild:e=!1,isActive:n=!1,variant:i=`default`,size:a=`default`,tooltip:o,className:s,...c})=>{let d=e?t.t:`button`,{isMobile:p,state:m}=x(),h=(0,l.useCallback)(e=>{c.onClick?.(),e.preventDefault(),e.stopPropagation()},[c.onClick]),g=(0,f.jsx)(d,{"data-slot":`sidebar-menu-button`,"data-sidebar":`menu-button`,"data-size":a,"data-active":n,className:(0,u.cn)(F({variant:i,size:a}),s),onClick:h,...c});return o?(typeof o==`string`&&(o={children:o}),(0,f.jsxs)(r.t,{children:[(0,f.jsx)(r.i,{asChild:!0,children:g}),(0,f.jsx)(r.n,{side:`right`,align:`center`,hidden:m!==`collapsed`||p,...o})]})):g});I.displayName=`SidebarMenuButton`;const L=({i18nText:e,onChangeToEnLocale:t,onChangeToViLocale:r})=>{let{toggleSidebar:i}=x(),a=(0,l.useCallback)(e=>{e.preventDefault(),e.stopPropagation(),i()},[i]),s=(0,l.useCallback)(e=>{e.preventDefault(),e.stopPropagation(),t?.()},[t]),d=(0,l.useCallback)(e=>{e.preventDefault(),e.stopPropagation(),r?.()},[r]);return(0,f.jsxs)(`header`,{"data-slot":`cms-layout-header`,className:(0,u.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-[height] ease-linear`),children:[(0,f.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:a,children:[(0,f.jsx)(c.MenuIcon,{className:`size-6!`}),(0,f.jsx)(`span`,{className:`sr-only`,children:`Toggle Sidebar`})]}),(0,f.jsxs)(`div`,{className:`flex flex-1 gap-x-2 sm:ml-2.5`,children:[(0,f.jsx)(`div`,{className:`flex aspect-square size-8 items-center justify-center rounded-lg bg-sidebar-primary text-sidebar-primary-foreground`,children:(0,f.jsx)(c.ShoppingCartIcon,{size:20})}),(0,f.jsxs)(`div`,{className:`grid flex-1 text-left text-sm leading-tight`,children:[(0,f.jsx)(`span`,{className:`truncate font-medium`,children:`Lunas Enterprise`}),(0,f.jsx)(`span`,{className:`truncate text-xs`,children:`Established 2025`})]})]}),(0,f.jsxs)(o.t,{children:[(0,f.jsx)(o.h,{asChild:!0,children:(0,f.jsxs)(n.t,{"data-slot":`locale-trigger`,variant:`ghost`,color:`muted`,className:`gap-x-1 rounded-full transition-all hover:text-text-positive`,children:[(0,f.jsx)(c.EarthIcon,{className:`size-6!`}),e]})}),(0,f.jsx)(o.r,{align:`end`,children:(0,f.jsxs)(o.i,{children:[(0,f.jsx)(o.a,{onClick:s,children:`EN - English`}),(0,f.jsx)(o.a,{onClick:d,children:`VI - Vietnamese`})]})})]})]})},R=(0,l.memo)(({id:e,label:t,icon:n,activeNavItemId:r,onClick:i})=>(0,f.jsx)(P,{children:(0,f.jsxs)(I,{isActive:e===r,onClick:i,children:[n,t]})}));R.displayName=`SidebarContentGroupItem`;const z=(0,l.memo)(({id:e,label:t,children:n})=>(0,f.jsxs)(A,{children:[(0,f.jsx)(j,{children:t}),(0,f.jsx)(M,{children:(0,f.jsx)(N,{children:n})})]}));z.displayName=`SidebarContentGroup`;const B=({i18nText:e,activeNavItemId:t,sidebar:n,children:r,onChangeToEnLocale:i,onChangeToViLocale:a,onLogout:o,logoutLabel:s=`Log out`,copyright:l=`Copyright © ${new Date().getFullYear()}, Lunas.`})=>{let u=n?.groupcontent??[];return(0,f.jsxs)(S,{children:[(0,f.jsx)(L,{i18nText:e,onChangeToEnLocale:i,onChangeToViLocale:a}),(0,f.jsxs)(C,{variant:`inset`,collapsible:`icon`,children:[(0,f.jsx)(k,{children:u.map(e=>(0,f.jsx)(z,{id:e.id,label:e.label,children:e.items.map(e=>(0,f.jsx)(R,{id:e.id,activeNavItemId:t,label:e.label,icon:e.icon,onClick:e.onClick},e.id))},e.id))}),(0,f.jsx)(D,{children:(0,f.jsxs)(N,{children:[(0,f.jsx)(P,{children:(0,f.jsxs)(I,{className:`border border-border`,onClick:o,children:[(0,f.jsx)(c.LogOutIcon,{className:`text-text-positive-weak`}),s]})}),(0,f.jsx)(P,{className:`mt-2 border-t border-t-border`,children:(0,f.jsx)(`p`,{className:`pt-2 text-center text-xs text-text-positive-subtle`,children:l})})]})})]}),(0,f.jsx)(w,{children:r})]})};Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return B}});
2
- //# sourceMappingURL=cms-layout-BrubV8D8.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cms-layout-BrubV8D8.cjs","names":["open","TooltipProvider","Sheet","SheetContent","SheetHeader","SheetTitle","SheetDescription","Button","MenuIcon","ShoppingCartIcon","Input","Separator","Slot","Tooltip","TooltipTrigger","TooltipContent","CMSLayoutHeader: React.FC<{\n i18nText?: string;\n onChangeToEnLocale?: () => void;\n onChangeToViLocale?: () => void;\n}>","Button","MenuIcon","ShoppingCartIcon","DropdownMenu","DropdownMenuTrigger","EarthIcon","DropdownMenuContent","DropdownMenuGroup","DropdownMenuItem","CMSLayout: React.FC<React.PropsWithChildren<CMSLayoutProps>>","LogOutIcon"],"sources":["../packages/components/layouts/cms-layout/components/sidebar.tsx","../packages/components/layouts/cms-layout/components/header.tsx","../packages/components/layouts/cms-layout/index.tsx"],"sourcesContent":["'use client';\n\nimport { createContext, memo, 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 return context;\n}\n\nfunction CMSLayoutProvider({\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 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 // biome-ignore lint/suspicious/noDocumentCookie: persists sidebar state across page loads\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;\n },\n [setOpenProp, open]\n );\n\n const toggleSidebar = useCallback(() => {\n return isMobile ? setOpenMobile(open => !open) : setOpen(open => !open);\n }, [isMobile, setOpen]);\n\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 window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [toggleSidebar]);\n\n const state = open ? 'expanded' : 'collapsed';\n\n const contextValue = useMemo<SidebarContextProps>(\n () => ({ state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar }),\n [state, open, setOpen, isMobile, openMobile, toggleSidebar]\n );\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <TooltipProvider delayDuration={0}>\n <section\n data-slot=\"layout-wrapper\"\n style={{ '--sidebar-width': SIDEBAR_WIDTH, '--sidebar-width-icon': SIDEBAR_WIDTH_ICON, ...style } as React.CSSProperties}\n className={cn('relative group/sidebar-wrapper flex h-dvh bg-sidebar', className)}\n {...props}\n >\n {children}\n </section>\n </TooltipProvider>\n </SidebarContext.Provider>\n );\n}\n\nconst CMSLayoutSidebar = memo(\n ({\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 const handleToggleSidebar = useCallback<React.MouseEventHandler<HTMLButtonElement>>(\n event => {\n toggleSidebar();\n event.preventDefault();\n event.stopPropagation();\n },\n [toggleSidebar]\n );\n\n if (collapsible === 'none') {\n return (\n <aside data-slot=\"sidebar\" className={cn('flex 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 style={{ '--sidebar-width': SIDEBAR_WIDTH_MOBILE } as React.CSSProperties}\n side={side}\n className=\"w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground sm:max-w-3xs [&>button]:hidden\"\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-b border-border-weak 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={handleToggleSidebar}\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 <div\n data-slot=\"sidebar-gap\"\n className={cn(\n 'bg-transparent',\n 'transition-[width] duration-200 ease-linear',\n 'h-(--header-height) sm:h-[calc(var(--header-height)+0.5rem)]',\n 'w-(--sidebar-width)',\n 'group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]'\n )}\n />\n <div\n data-slot=\"sidebar-container\"\n className={cn(\n 'hidden md:flex shadow-nav',\n 'fixed left-0 inset-y-0 p-2',\n 'top-[calc(var(--header-height)+0.5rem)] z-10',\n 'w-(--sidebar-width)',\n 'transition-all duration-200 ease-linear',\n 'group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]',\n className\n )}\n {...props}\n >\n <div data-sidebar=\"sidebar\" data-slot=\"sidebar-inner\" className=\"relative flex size-full flex-col\">\n {children}\n </div>\n </div>\n </aside>\n );\n }\n);\nCMSLayoutSidebar.displayName = 'CMSLayoutSidebar';\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\nconst CMSLayoutMain = memo(({ 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) sm:h-[calc(var(--header-height)+0.5rem)]\" />\n <div className=\"relative flex-1 size-full overflow-auto\">{children}</div>\n </main>\n );\n});\nCMSLayoutMain.displayName = 'CMSLayoutMain';\n\nconst SidebarInput = memo(({ 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});\nSidebarInput.displayName = 'SidebarInput';\n\nconst SidebarHeader = memo(({ 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});\nSidebarHeader.displayName = 'SidebarHeader';\n\nconst SidebarFooter = memo(({ className, ...props }: React.ComponentProps<'div'>) => {\n return <div data-slot=\"sidebar-footer\" data-sidebar=\"footer\" className={cn('flex flex-col gap-2', className)} {...props} />;\n});\nSidebarFooter.displayName = 'SidebarFooter';\n\nconst SidebarSeparator = memo(({ 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});\nSidebarSeparator.displayName = 'SidebarSeparator';\n\nconst SidebarContent = memo(({ className, ...props }: React.ComponentProps<'div'>) => {\n return (\n <div\n data-slot=\"sidebar-content\"\n data-sidebar=\"content\"\n className={cn('flex flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden', className)}\n {...props}\n />\n );\n});\nSidebarContent.displayName = 'SidebarContent';\n\nconst SidebarGroup = memo(({ className, ...props }: React.ComponentProps<'div'>) => {\n return <div data-slot=\"sidebar-group\" data-sidebar=\"group\" className={cn('relative flex w-full flex-col', className)} {...props} />;\n});\nSidebarGroup.displayName = 'SidebarGroup';\n\nconst SidebarGroupLabel = memo(({ 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,color] 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});\nSidebarGroupLabel.displayName = 'SidebarGroupLabel';\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-[background-color,color,transform] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2',\n '[&>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 'group-data-[collapsible=icon]:hidden',\n className\n )}\n {...props}\n />\n );\n}\n\nconst SidebarGroupContent = memo(({ 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});\nSidebarGroupContent.displayName = 'SidebarGroupContent';\n\nconst SidebarMenu = memo(({ 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});\nSidebarMenu.displayName = 'SidebarMenu';\n\nconst SidebarMenuItem = memo(({ 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});\nSidebarMenuItem.displayName = 'SidebarMenuItem';\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,background-color,width,height,padding]',\n 'active:bg-sidebar-accent active:text-sidebar-accent-foreground',\n 'disabled:pointer-events-none disabled:opacity-50',\n 'group-has-data-[sidebar=menu-action]/menu-item:pr-8',\n 'aria-disabled:pointer-events-none aria-disabled:opacity-50',\n 'data-[active=true]:bg-sidebar-primary-muted data-[active=true]:text-sidebar-primary',\n 'data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground',\n 'group-data-[collapsible=icon]:size-12! group-data-[collapsible=icon]:p-3! group-data-[collapsible=icon]:gap-3!',\n '[&>svg]:size-6 [&>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',\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\nconst SidebarMenuButton = memo(\n ({\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 onClick?: () => void;\n } & VariantProps<typeof sidebarMenuButtonVariants>) => {\n const Comp = asChild ? Slot : 'button';\n const { isMobile, state } = useSidebar();\n\n const handleClick = useCallback<React.MouseEventHandler<HTMLButtonElement>>(\n event => {\n props.onClick?.();\n event.preventDefault();\n event.stopPropagation();\n },\n [props.onClick]\n );\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 onClick={handleClick}\n {...props}\n />\n );\n\n if (!tooltip) return button;\n\n if (typeof tooltip === 'string') {\n tooltip = { children: tooltip };\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);\nSidebarMenuButton.displayName = 'SidebarMenuButton';\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-[background-color,color,opacity] 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 transition-colors',\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 const width = useMemo(() => `${Math.floor(Math.random() * 40) + 50}%`, []);\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={{ '--skeleton-width': width } as React.CSSProperties}\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-l border-sidebar-border 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 transition-[background-color,color] 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 CMSLayoutSidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n CMSLayoutMain,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n CMSLayoutProvider,\n SidebarRail,\n SidebarSeparator,\n SidebarTrigger,\n // biome-ignore lint/style/useComponentExportOnlyModules: true\n useSidebar,\n};\n","'use client';\n\nimport { useCallback } from 'react';\n\nimport { EarthIcon, MenuIcon, ShoppingCartIcon } from 'lucide-react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Button } from '@/components/ui/button';\nimport { DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuTrigger } from '@/components/ui/dropdown-menu';\n\nimport { useSidebar } from './sidebar';\n\nexport const CMSLayoutHeader: React.FC<{\n i18nText?: string;\n onChangeToEnLocale?: () => void;\n onChangeToViLocale?: () => void;\n}> = ({ i18nText, onChangeToEnLocale, onChangeToViLocale }) => {\n const { toggleSidebar } = useSidebar();\n\n const handleToggleSidebar = useCallback(\n (event: React.MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n toggleSidebar();\n },\n [toggleSidebar]\n );\n\n const handleEnLocale = useCallback(\n (event: React.MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n onChangeToEnLocale?.();\n },\n [onChangeToEnLocale]\n );\n\n const handleViLocale = useCallback(\n (event: React.MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n onChangeToViLocale?.();\n },\n [onChangeToViLocale]\n );\n\n return (\n <header\n data-slot=\"cms-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-[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={handleToggleSidebar}\n >\n <MenuIcon className=\"size-6!\" />\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n\n <div className=\"flex flex-1 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\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button data-slot=\"locale-trigger\" variant=\"ghost\" color=\"muted\" className=\"gap-x-1 rounded-full transition-all hover:text-text-positive\">\n <EarthIcon className=\"size-6!\" />\n {i18nText}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuGroup>\n <DropdownMenuItem onClick={handleEnLocale}>EN - English</DropdownMenuItem>\n <DropdownMenuItem onClick={handleViLocale}>VI - Vietnamese</DropdownMenuItem>\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenu>\n </header>\n );\n};\n","'use client';\n\nimport { memo } from 'react';\n\nimport { LogOutIcon } from 'lucide-react';\n\nimport { CMSLayoutHeader } from './components/header';\nimport {\n CMSLayoutSidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n CMSLayoutMain,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n CMSLayoutProvider,\n} from './components/sidebar';\n\ntype NavItem = {\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\ntype NavGroup = {\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 /** Navigation items that belong to this group. */\n items: NavItem[];\n};\n\nexport type CMSLayoutProps = {\n /** Text label used by the header for language-toggle or i18n display. */\n i18nText?: string;\n /** ID of the currently active navigation item; matched against `NavItem.id` to highlight the active button. */\n activeNavItemId?: string;\n /** Sidebar navigation definition; omitting this prop renders an empty sidebar. */\n sidebar?: { groupcontent: NavGroup[] };\n /** Callback fired when the logout button is clicked. */\n onLogout?: () => void;\n /** Callback fired when the user switches the UI locale to English. */\n onChangeToEnLocale?: () => void;\n /** Callback fired when the user switches the UI locale to Vietnamese. */\n onChangeToViLocale?: () => void;\n /**\n * Label displayed on the logout button.\n * @default 'Log out'\n */\n logoutLabel?: string;\n /**\n * Copyright string shown at the bottom of the sidebar.\n * @default `Copyright © <current year>, Lunas.`\n */\n copyright?: string;\n};\n\nconst SidebarContentGroupItem = memo<NavItem & { activeNavItemId?: string }>(({ id, label, icon, activeNavItemId, onClick }) => (\n <SidebarMenuItem>\n <SidebarMenuButton isActive={id === activeNavItemId} onClick={onClick}>\n {icon}\n {label}\n </SidebarMenuButton>\n </SidebarMenuItem>\n));\nSidebarContentGroupItem.displayName = 'SidebarContentGroupItem';\n\nconst SidebarContentGroup = memo<React.PropsWithChildren<Omit<NavGroup, 'items'>>>(({ id, label, children }) => (\n <SidebarGroup>\n <SidebarGroupLabel>{label}</SidebarGroupLabel>\n <SidebarGroupContent>\n <SidebarMenu>{children}</SidebarMenu>\n </SidebarGroupContent>\n </SidebarGroup>\n));\nSidebarContentGroup.displayName = 'SidebarContentGroup';\n\n/**\n * Full-page CMS application shell with a collapsible inset sidebar, header, and main content area.\n *\n * @example\n * ```tsx\n * import { CMSLayout } from '@customafk/lunas-ui/layouts/cms-layout';\n * import { LayoutDashboardIcon } from 'lucide-react';\n *\n * <CMSLayout\n * activeNavItemId=\"dashboard\"\n * sidebar={{\n * groupcontent: [\n * {\n * id: 'main',\n * label: 'Main',\n * items: [\n * { id: 'dashboard', label: 'Dashboard', icon: <LayoutDashboardIcon />, onClick: () => router.push('/') },\n * ],\n * },\n * ],\n * }}\n * onLogout={() => signOut()}\n * >\n * <DashboardPage />\n * </CMSLayout>\n * ```\n */\nexport const CMSLayout: React.FC<React.PropsWithChildren<CMSLayoutProps>> = ({\n i18nText,\n activeNavItemId,\n sidebar,\n children,\n onChangeToEnLocale,\n onChangeToViLocale,\n onLogout,\n logoutLabel = 'Log out',\n copyright = `Copyright © ${new Date().getFullYear()}, Lunas.`,\n}) => {\n const groups = sidebar?.groupcontent ?? [];\n\n return (\n <CMSLayoutProvider>\n <CMSLayoutHeader i18nText={i18nText} onChangeToEnLocale={onChangeToEnLocale} onChangeToViLocale={onChangeToViLocale} />\n <CMSLayoutSidebar variant=\"inset\" collapsible=\"icon\">\n <SidebarContent>\n {groups.map(group => (\n <SidebarContentGroup key={group.id} id={group.id} label={group.label}>\n {group.items.map(item => (\n <SidebarContentGroupItem\n key={item.id}\n id={item.id}\n activeNavItemId={activeNavItemId}\n label={item.label}\n icon={item.icon}\n onClick={item.onClick}\n />\n ))}\n </SidebarContentGroup>\n ))}\n </SidebarContent>\n <SidebarFooter>\n <SidebarMenu>\n <SidebarMenuItem>\n <SidebarMenuButton className=\"border border-border\" onClick={onLogout}>\n <LogOutIcon className=\"text-text-positive-weak\" />\n {logoutLabel}\n </SidebarMenuButton>\n </SidebarMenuItem>\n <SidebarMenuItem className=\"mt-2 border-t border-t-border\">\n <p className=\"pt-2 text-center text-xs text-text-positive-subtle\">{copyright}</p>\n </SidebarMenuItem>\n </SidebarMenu>\n </SidebarFooter>\n </CMSLayoutSidebar>\n <CMSLayoutMain>{children}</CMSLayoutMain>\n </CMSLayoutProvider>\n );\n};\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import{t as e}from"./dist-BQGL-YKY.mjs";import{t}from"./button-CfPTDyoq.mjs";import{i as n,n as r,r as i,t as a}from"./tooltip-BfBJRYpc.mjs";import{t as o}from"./separator-C6s-YvlT.mjs";import{i as s,o as c,r as l,s as u,t as d}from"./sheet-Cj8hoftE.mjs";import{a as f,h as p,i as m,r as h,t as g}from"./dropdown-menu-C6tRSumY.mjs";import{t as _}from"./input-5gk-Jv1y.mjs";import{EarthIcon as v,LogOutIcon as y,MenuIcon as b,ShoppingCartIcon as x}from"lucide-react";import{createContext as S,memo as C,useCallback as w,useContext as T,useEffect as E,useMemo as D,useState as O}from"react";import{cn as k}from"@customafk/react-toolkit/utils";import{cva as A}from"class-variance-authority";import{jsx as j,jsxs as M}from"react/jsx-runtime";import{useIsMobile as N}from"@customafk/react-toolkit/hooks/useMobile";const P=S(null);function F(){let e=T(P);if(!e)throw Error(`useSidebar must be used within a SidebarProvider.`);return e}function I({defaultOpen:e=!0,open:t,onOpenChange:n,className:r,style:a,children:o,...s}){let c=N(),[l,u]=O(!1),[d,f]=O(e),p=t??d,m=w(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]),h=w(()=>c?u(e=>!e):m(e=>!e),[c,m]);E(()=>{let e=e=>{e.key===`b`&&(e.metaKey||e.ctrlKey)&&(e.preventDefault(),h())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[h]);let g=p?`expanded`:`collapsed`,_=D(()=>({state:g,open:p,setOpen:m,isMobile:c,openMobile:l,setOpenMobile:u,toggleSidebar:h}),[g,p,m,c,l,h]);return j(P.Provider,{value:_,children:j(i,{delayDuration:0,children:j(`section`,{"data-slot":`layout-wrapper`,style:{"--sidebar-width":`16rem`,"--sidebar-width-icon":`3rem`,...a},className:k(`relative group/sidebar-wrapper flex h-dvh bg-sidebar`,r),...s,children:o})})})}const L=C(({side:e=`left`,variant:n=`sidebar`,collapsible:r=`offcanvas`,className:i,children:a,...o})=>{let{isMobile:f,state:p,openMobile:m,setOpenMobile:h,toggleSidebar:g}=F(),_=w(e=>{g(),e.preventDefault(),e.stopPropagation()},[g]);return r===`none`?j(`aside`,{"data-slot":`sidebar`,className:k(`flex w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground`,i),...o,children:a}):f?j(d,{open:m,onOpenChange:h,...o,children:M(l,{"data-sidebar":`sidebar`,"data-slot":`sidebar`,"data-mobile":`true`,style:{"--sidebar-width":`18rem`},side:e,className:`w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground sm:max-w-3xs [&>button]:hidden`,children:[M(c,{className:`sr-only`,children:[j(u,{children:`Sidebar`}),j(s,{children:`Displays the mobile sidebar.`})]}),M(`div`,{className:`flex size-full flex-col`,children:[M(`div`,{className:`flex flex-0 items-center gap-x-2 border-b border-border-weak p-2 pr-4`,children:[M(t,{"data-sidebar":`trigger`,"data-slot":`sidebar-trigger`,variant:`ghost`,color:`muted`,size:`icon`,className:k(`size-10 rounded-full`,i),onClick:_,children:[j(b,{className:`size-6!`}),j(`span`,{className:`sr-only`,children:`Toggle Sidebar`})]}),j(`div`,{className:`ml-2 flex aspect-square size-8 items-center justify-center rounded-lg bg-sidebar-primary text-sidebar-primary-foreground`,children:j(x,{size:20})}),M(`div`,{className:`grid flex-1 text-left text-sm leading-tight`,children:[j(`span`,{className:`truncate font-medium`,children:`Lunas Store`}),j(`span`,{className:`truncate text-xs`,children:`Established 2023`})]})]}),j(`div`,{className:`flex flex-1 flex-col p-2`,children:a})]})]})}):M(`aside`,{className:`group peer hidden bg-card text-sidebar-foreground md:block`,"data-state":p,"data-collapsible":p===`collapsed`?r:``,"data-variant":n,"data-side":e,"data-slot":`sidebar`,children:[j(`div`,{"data-slot":`sidebar-gap`,className:k(`bg-transparent`,`transition-[width] duration-200 ease-linear`,`h-(--header-height) sm:h-[calc(var(--header-height)+0.5rem)]`,`w-(--sidebar-width)`,`group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]`)}),j(`div`,{"data-slot":`sidebar-container`,className:k(`hidden md:flex shadow-nav`,`fixed left-0 inset-y-0 p-2`,`top-[calc(var(--header-height)+0.5rem)] z-10`,`w-(--sidebar-width)`,`transition-all duration-200 ease-linear`,`group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]`,i),...o,children:j(`div`,{"data-sidebar":`sidebar`,"data-slot":`sidebar-inner`,className:`relative flex size-full flex-col`,children:a})})]})});L.displayName=`CMSLayoutSidebar`;const R=C(({className:e,children:t,...n})=>M(`main`,{"data-slot":`sidebar-inset`,className:k(`relative flex w-full flex-1 flex-col`,e),...n,children:[j(`div`,{className:`h-(--header-height) sm:h-[calc(var(--header-height)+0.5rem)]`}),j(`div`,{className:`relative flex-1 size-full overflow-auto`,children:t})]}));R.displayName=`CMSLayoutMain`;const z=C(({className:e,...t})=>j(_,{"data-slot":`sidebar-input`,"data-sidebar":`input`,className:k(`h-8 w-full bg-background shadow-none`,e),...t}));z.displayName=`SidebarInput`;const B=C(({className:e,...t})=>j(`div`,{"data-slot":`sidebar-header`,"data-sidebar":`header`,className:k(`flex flex-col gap-2 p-2`,e),...t}));B.displayName=`SidebarHeader`;const V=C(({className:e,...t})=>j(`div`,{"data-slot":`sidebar-footer`,"data-sidebar":`footer`,className:k(`flex flex-col gap-2`,e),...t}));V.displayName=`SidebarFooter`;const H=C(({className:e,...t})=>j(o,{"data-slot":`sidebar-separator`,"data-sidebar":`separator`,className:k(`mx-2 w-auto bg-sidebar-border`,e),...t}));H.displayName=`SidebarSeparator`;const U=C(({className:e,...t})=>j(`div`,{"data-slot":`sidebar-content`,"data-sidebar":`content`,className:k(`flex flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden`,e),...t}));U.displayName=`SidebarContent`;const W=C(({className:e,...t})=>j(`div`,{"data-slot":`sidebar-group`,"data-sidebar":`group`,className:k(`relative flex w-full flex-col`,e),...t}));W.displayName=`SidebarGroup`;const G=C(({className:t,asChild:n=!1,...r})=>j(n?e:`div`,{"data-slot":`sidebar-group-label`,"data-sidebar":`group-label`,className:k(`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,color] 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}));G.displayName=`SidebarGroupLabel`;const K=C(({className:e,...t})=>j(`div`,{"data-slot":`sidebar-group-content`,"data-sidebar":`group-content`,className:k(`w-full text-sm`,e),...t}));K.displayName=`SidebarGroupContent`;const q=C(({className:e,...t})=>j(`ul`,{"data-slot":`sidebar-menu`,"data-sidebar":`menu`,className:k(`flex w-full min-w-0 flex-col gap-1`,e),...t}));q.displayName=`SidebarMenu`;const J=C(({className:e,...t})=>j(`li`,{"data-slot":`sidebar-menu-item`,"data-sidebar":`menu-item`,className:k(`group/menu-item relative`,e),...t}));J.displayName=`SidebarMenuItem`;const Y=A([`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,background-color,width,height,padding]`,`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`,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`}}),X=C(({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}=F(),m=w(e=>{u.onClick?.(),e.preventDefault(),e.stopPropagation()},[u.onClick]),h=j(d,{"data-slot":`sidebar-menu-button`,"data-sidebar":`menu-button`,"data-size":s,"data-active":i,className:k(Y({variant:o,size:s}),l),onClick:m,...u});return c?(typeof c==`string`&&(c={children:c}),M(a,{children:[j(n,{asChild:!0,children:h}),j(r,{side:`right`,align:`center`,hidden:p!==`collapsed`||f,...c})]})):h});X.displayName=`SidebarMenuButton`;const Z=({i18nText:e,onChangeToEnLocale:n,onChangeToViLocale:r})=>{let{toggleSidebar:i}=F(),a=w(e=>{e.preventDefault(),e.stopPropagation(),i()},[i]),o=w(e=>{e.preventDefault(),e.stopPropagation(),n?.()},[n]),s=w(e=>{e.preventDefault(),e.stopPropagation(),r?.()},[r]);return M(`header`,{"data-slot":`cms-layout-header`,className:k(`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-[height] ease-linear`),children:[M(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:a,children:[j(b,{className:`size-6!`}),j(`span`,{className:`sr-only`,children:`Toggle Sidebar`})]}),M(`div`,{className:`flex flex-1 gap-x-2 sm:ml-2.5`,children:[j(`div`,{className:`flex aspect-square size-8 items-center justify-center rounded-lg bg-sidebar-primary text-sidebar-primary-foreground`,children:j(x,{size:20})}),M(`div`,{className:`grid flex-1 text-left text-sm leading-tight`,children:[j(`span`,{className:`truncate font-medium`,children:`Lunas Enterprise`}),j(`span`,{className:`truncate text-xs`,children:`Established 2025`})]})]}),M(g,{children:[j(p,{asChild:!0,children:M(t,{"data-slot":`locale-trigger`,variant:`ghost`,color:`muted`,className:`gap-x-1 rounded-full transition-all hover:text-text-positive`,children:[j(v,{className:`size-6!`}),e]})}),j(h,{align:`end`,children:M(m,{children:[j(f,{onClick:o,children:`EN - English`}),j(f,{onClick:s,children:`VI - Vietnamese`})]})})]})]})},Q=C(({id:e,label:t,icon:n,activeNavItemId:r,onClick:i})=>j(J,{children:M(X,{isActive:e===r,onClick:i,children:[n,t]})}));Q.displayName=`SidebarContentGroupItem`;const $=C(({id:e,label:t,children:n})=>M(W,{children:[j(G,{children:t}),j(K,{children:j(q,{children:n})})]}));$.displayName=`SidebarContentGroup`;const ee=({i18nText:e,activeNavItemId:t,sidebar:n,children:r,onChangeToEnLocale:i,onChangeToViLocale:a,onLogout:o,logoutLabel:s=`Log out`,copyright:c=`Copyright © ${new Date().getFullYear()}, Lunas.`})=>{let l=n?.groupcontent??[];return M(I,{children:[j(Z,{i18nText:e,onChangeToEnLocale:i,onChangeToViLocale:a}),M(L,{variant:`inset`,collapsible:`icon`,children:[j(U,{children:l.map(e=>j($,{id:e.id,label:e.label,children:e.items.map(e=>j(Q,{id:e.id,activeNavItemId:t,label:e.label,icon:e.icon,onClick:e.onClick},e.id))},e.id))}),j(V,{children:M(q,{children:[j(J,{children:M(X,{className:`border border-border`,onClick:o,children:[j(y,{className:`text-text-positive-weak`}),s]})}),j(J,{className:`mt-2 border-t border-t-border`,children:j(`p`,{className:`pt-2 text-center text-xs text-text-positive-subtle`,children:c})})]})})]}),j(R,{children:r})]})};export{ee as t};
2
- //# sourceMappingURL=cms-layout-C2-yysO2.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cms-layout-C2-yysO2.mjs","names":["open","CMSLayoutHeader: React.FC<{\n i18nText?: string;\n onChangeToEnLocale?: () => void;\n onChangeToViLocale?: () => void;\n}>","CMSLayout: React.FC<React.PropsWithChildren<CMSLayoutProps>>"],"sources":["../packages/components/layouts/cms-layout/components/sidebar.tsx","../packages/components/layouts/cms-layout/components/header.tsx","../packages/components/layouts/cms-layout/index.tsx"],"sourcesContent":["'use client';\n\nimport { createContext, memo, 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 return context;\n}\n\nfunction CMSLayoutProvider({\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 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 // biome-ignore lint/suspicious/noDocumentCookie: persists sidebar state across page loads\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;\n },\n [setOpenProp, open]\n );\n\n const toggleSidebar = useCallback(() => {\n return isMobile ? setOpenMobile(open => !open) : setOpen(open => !open);\n }, [isMobile, setOpen]);\n\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 window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [toggleSidebar]);\n\n const state = open ? 'expanded' : 'collapsed';\n\n const contextValue = useMemo<SidebarContextProps>(\n () => ({ state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar }),\n [state, open, setOpen, isMobile, openMobile, toggleSidebar]\n );\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <TooltipProvider delayDuration={0}>\n <section\n data-slot=\"layout-wrapper\"\n style={{ '--sidebar-width': SIDEBAR_WIDTH, '--sidebar-width-icon': SIDEBAR_WIDTH_ICON, ...style } as React.CSSProperties}\n className={cn('relative group/sidebar-wrapper flex h-dvh bg-sidebar', className)}\n {...props}\n >\n {children}\n </section>\n </TooltipProvider>\n </SidebarContext.Provider>\n );\n}\n\nconst CMSLayoutSidebar = memo(\n ({\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 const handleToggleSidebar = useCallback<React.MouseEventHandler<HTMLButtonElement>>(\n event => {\n toggleSidebar();\n event.preventDefault();\n event.stopPropagation();\n },\n [toggleSidebar]\n );\n\n if (collapsible === 'none') {\n return (\n <aside data-slot=\"sidebar\" className={cn('flex 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 style={{ '--sidebar-width': SIDEBAR_WIDTH_MOBILE } as React.CSSProperties}\n side={side}\n className=\"w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground sm:max-w-3xs [&>button]:hidden\"\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-b border-border-weak 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={handleToggleSidebar}\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 <div\n data-slot=\"sidebar-gap\"\n className={cn(\n 'bg-transparent',\n 'transition-[width] duration-200 ease-linear',\n 'h-(--header-height) sm:h-[calc(var(--header-height)+0.5rem)]',\n 'w-(--sidebar-width)',\n 'group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]'\n )}\n />\n <div\n data-slot=\"sidebar-container\"\n className={cn(\n 'hidden md:flex shadow-nav',\n 'fixed left-0 inset-y-0 p-2',\n 'top-[calc(var(--header-height)+0.5rem)] z-10',\n 'w-(--sidebar-width)',\n 'transition-all duration-200 ease-linear',\n 'group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]',\n className\n )}\n {...props}\n >\n <div data-sidebar=\"sidebar\" data-slot=\"sidebar-inner\" className=\"relative flex size-full flex-col\">\n {children}\n </div>\n </div>\n </aside>\n );\n }\n);\nCMSLayoutSidebar.displayName = 'CMSLayoutSidebar';\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\nconst CMSLayoutMain = memo(({ 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) sm:h-[calc(var(--header-height)+0.5rem)]\" />\n <div className=\"relative flex-1 size-full overflow-auto\">{children}</div>\n </main>\n );\n});\nCMSLayoutMain.displayName = 'CMSLayoutMain';\n\nconst SidebarInput = memo(({ 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});\nSidebarInput.displayName = 'SidebarInput';\n\nconst SidebarHeader = memo(({ 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});\nSidebarHeader.displayName = 'SidebarHeader';\n\nconst SidebarFooter = memo(({ className, ...props }: React.ComponentProps<'div'>) => {\n return <div data-slot=\"sidebar-footer\" data-sidebar=\"footer\" className={cn('flex flex-col gap-2', className)} {...props} />;\n});\nSidebarFooter.displayName = 'SidebarFooter';\n\nconst SidebarSeparator = memo(({ 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});\nSidebarSeparator.displayName = 'SidebarSeparator';\n\nconst SidebarContent = memo(({ className, ...props }: React.ComponentProps<'div'>) => {\n return (\n <div\n data-slot=\"sidebar-content\"\n data-sidebar=\"content\"\n className={cn('flex flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden', className)}\n {...props}\n />\n );\n});\nSidebarContent.displayName = 'SidebarContent';\n\nconst SidebarGroup = memo(({ className, ...props }: React.ComponentProps<'div'>) => {\n return <div data-slot=\"sidebar-group\" data-sidebar=\"group\" className={cn('relative flex w-full flex-col', className)} {...props} />;\n});\nSidebarGroup.displayName = 'SidebarGroup';\n\nconst SidebarGroupLabel = memo(({ 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,color] 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});\nSidebarGroupLabel.displayName = 'SidebarGroupLabel';\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-[background-color,color,transform] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2',\n '[&>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 'group-data-[collapsible=icon]:hidden',\n className\n )}\n {...props}\n />\n );\n}\n\nconst SidebarGroupContent = memo(({ 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});\nSidebarGroupContent.displayName = 'SidebarGroupContent';\n\nconst SidebarMenu = memo(({ 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});\nSidebarMenu.displayName = 'SidebarMenu';\n\nconst SidebarMenuItem = memo(({ 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});\nSidebarMenuItem.displayName = 'SidebarMenuItem';\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,background-color,width,height,padding]',\n 'active:bg-sidebar-accent active:text-sidebar-accent-foreground',\n 'disabled:pointer-events-none disabled:opacity-50',\n 'group-has-data-[sidebar=menu-action]/menu-item:pr-8',\n 'aria-disabled:pointer-events-none aria-disabled:opacity-50',\n 'data-[active=true]:bg-sidebar-primary-muted data-[active=true]:text-sidebar-primary',\n 'data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground',\n 'group-data-[collapsible=icon]:size-12! group-data-[collapsible=icon]:p-3! group-data-[collapsible=icon]:gap-3!',\n '[&>svg]:size-6 [&>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',\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\nconst SidebarMenuButton = memo(\n ({\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 onClick?: () => void;\n } & VariantProps<typeof sidebarMenuButtonVariants>) => {\n const Comp = asChild ? Slot : 'button';\n const { isMobile, state } = useSidebar();\n\n const handleClick = useCallback<React.MouseEventHandler<HTMLButtonElement>>(\n event => {\n props.onClick?.();\n event.preventDefault();\n event.stopPropagation();\n },\n [props.onClick]\n );\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 onClick={handleClick}\n {...props}\n />\n );\n\n if (!tooltip) return button;\n\n if (typeof tooltip === 'string') {\n tooltip = { children: tooltip };\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);\nSidebarMenuButton.displayName = 'SidebarMenuButton';\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-[background-color,color,opacity] 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 transition-colors',\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 const width = useMemo(() => `${Math.floor(Math.random() * 40) + 50}%`, []);\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={{ '--skeleton-width': width } as React.CSSProperties}\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-l border-sidebar-border 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 transition-[background-color,color] 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 CMSLayoutSidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n CMSLayoutMain,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n CMSLayoutProvider,\n SidebarRail,\n SidebarSeparator,\n SidebarTrigger,\n // biome-ignore lint/style/useComponentExportOnlyModules: true\n useSidebar,\n};\n","'use client';\n\nimport { useCallback } from 'react';\n\nimport { EarthIcon, MenuIcon, ShoppingCartIcon } from 'lucide-react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Button } from '@/components/ui/button';\nimport { DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuTrigger } from '@/components/ui/dropdown-menu';\n\nimport { useSidebar } from './sidebar';\n\nexport const CMSLayoutHeader: React.FC<{\n i18nText?: string;\n onChangeToEnLocale?: () => void;\n onChangeToViLocale?: () => void;\n}> = ({ i18nText, onChangeToEnLocale, onChangeToViLocale }) => {\n const { toggleSidebar } = useSidebar();\n\n const handleToggleSidebar = useCallback(\n (event: React.MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n toggleSidebar();\n },\n [toggleSidebar]\n );\n\n const handleEnLocale = useCallback(\n (event: React.MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n onChangeToEnLocale?.();\n },\n [onChangeToEnLocale]\n );\n\n const handleViLocale = useCallback(\n (event: React.MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n onChangeToViLocale?.();\n },\n [onChangeToViLocale]\n );\n\n return (\n <header\n data-slot=\"cms-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-[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={handleToggleSidebar}\n >\n <MenuIcon className=\"size-6!\" />\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n\n <div className=\"flex flex-1 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\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button data-slot=\"locale-trigger\" variant=\"ghost\" color=\"muted\" className=\"gap-x-1 rounded-full transition-all hover:text-text-positive\">\n <EarthIcon className=\"size-6!\" />\n {i18nText}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuGroup>\n <DropdownMenuItem onClick={handleEnLocale}>EN - English</DropdownMenuItem>\n <DropdownMenuItem onClick={handleViLocale}>VI - Vietnamese</DropdownMenuItem>\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenu>\n </header>\n );\n};\n","'use client';\n\nimport { memo } from 'react';\n\nimport { LogOutIcon } from 'lucide-react';\n\nimport { CMSLayoutHeader } from './components/header';\nimport {\n CMSLayoutSidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n CMSLayoutMain,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n CMSLayoutProvider,\n} from './components/sidebar';\n\ntype NavItem = {\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\ntype NavGroup = {\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 /** Navigation items that belong to this group. */\n items: NavItem[];\n};\n\nexport type CMSLayoutProps = {\n /** Text label used by the header for language-toggle or i18n display. */\n i18nText?: string;\n /** ID of the currently active navigation item; matched against `NavItem.id` to highlight the active button. */\n activeNavItemId?: string;\n /** Sidebar navigation definition; omitting this prop renders an empty sidebar. */\n sidebar?: { groupcontent: NavGroup[] };\n /** Callback fired when the logout button is clicked. */\n onLogout?: () => void;\n /** Callback fired when the user switches the UI locale to English. */\n onChangeToEnLocale?: () => void;\n /** Callback fired when the user switches the UI locale to Vietnamese. */\n onChangeToViLocale?: () => void;\n /**\n * Label displayed on the logout button.\n * @default 'Log out'\n */\n logoutLabel?: string;\n /**\n * Copyright string shown at the bottom of the sidebar.\n * @default `Copyright © <current year>, Lunas.`\n */\n copyright?: string;\n};\n\nconst SidebarContentGroupItem = memo<NavItem & { activeNavItemId?: string }>(({ id, label, icon, activeNavItemId, onClick }) => (\n <SidebarMenuItem>\n <SidebarMenuButton isActive={id === activeNavItemId} onClick={onClick}>\n {icon}\n {label}\n </SidebarMenuButton>\n </SidebarMenuItem>\n));\nSidebarContentGroupItem.displayName = 'SidebarContentGroupItem';\n\nconst SidebarContentGroup = memo<React.PropsWithChildren<Omit<NavGroup, 'items'>>>(({ id, label, children }) => (\n <SidebarGroup>\n <SidebarGroupLabel>{label}</SidebarGroupLabel>\n <SidebarGroupContent>\n <SidebarMenu>{children}</SidebarMenu>\n </SidebarGroupContent>\n </SidebarGroup>\n));\nSidebarContentGroup.displayName = 'SidebarContentGroup';\n\n/**\n * Full-page CMS application shell with a collapsible inset sidebar, header, and main content area.\n *\n * @example\n * ```tsx\n * import { CMSLayout } from '@customafk/lunas-ui/layouts/cms-layout';\n * import { LayoutDashboardIcon } from 'lucide-react';\n *\n * <CMSLayout\n * activeNavItemId=\"dashboard\"\n * sidebar={{\n * groupcontent: [\n * {\n * id: 'main',\n * label: 'Main',\n * items: [\n * { id: 'dashboard', label: 'Dashboard', icon: <LayoutDashboardIcon />, onClick: () => router.push('/') },\n * ],\n * },\n * ],\n * }}\n * onLogout={() => signOut()}\n * >\n * <DashboardPage />\n * </CMSLayout>\n * ```\n */\nexport const CMSLayout: React.FC<React.PropsWithChildren<CMSLayoutProps>> = ({\n i18nText,\n activeNavItemId,\n sidebar,\n children,\n onChangeToEnLocale,\n onChangeToViLocale,\n onLogout,\n logoutLabel = 'Log out',\n copyright = `Copyright © ${new Date().getFullYear()}, Lunas.`,\n}) => {\n const groups = sidebar?.groupcontent ?? [];\n\n return (\n <CMSLayoutProvider>\n <CMSLayoutHeader i18nText={i18nText} onChangeToEnLocale={onChangeToEnLocale} onChangeToViLocale={onChangeToViLocale} />\n <CMSLayoutSidebar variant=\"inset\" collapsible=\"icon\">\n <SidebarContent>\n {groups.map(group => (\n <SidebarContentGroup key={group.id} id={group.id} label={group.label}>\n {group.items.map(item => (\n <SidebarContentGroupItem\n key={item.id}\n id={item.id}\n activeNavItemId={activeNavItemId}\n label={item.label}\n icon={item.icon}\n onClick={item.onClick}\n />\n ))}\n </SidebarContentGroup>\n ))}\n </SidebarContent>\n <SidebarFooter>\n <SidebarMenu>\n <SidebarMenuItem>\n <SidebarMenuButton className=\"border border-border\" onClick={onLogout}>\n <LogOutIcon className=\"text-text-positive-weak\" />\n {logoutLabel}\n </SidebarMenuButton>\n </SidebarMenuItem>\n <SidebarMenuItem className=\"mt-2 border-t border-t-border\">\n <p className=\"pt-2 text-center text-xs text-text-positive-subtle\">{copyright}</p>\n </SidebarMenuItem>\n </SidebarMenu>\n </SidebarFooter>\n </CMSLayoutSidebar>\n <CMSLayoutMain>{children}</CMSLayoutMain>\n </CMSLayoutProvider>\n );\n};\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- const e=require(`./chunk-Bmb41Sf3.cjs`),t=require(`./dialog-D1sWnn6n.cjs`);let n=require(`lucide-react`),r=require(`@customafk/react-toolkit/utils`),i=require(`react/jsx-runtime`),a=require(`cmdk`);function o({className:e,...t}){return(0,i.jsx)(a.Command,{"data-slot":`command`,className:(0,r.cn)(`flex size-full flex-col overflow-hidden rounded-md border-border-weak bg-popover text-text-positive`,e),...t})}function s({title:e=`Command Palette`,description:n=`Search for a command to run...`,children:a,className:s,showCloseButton:c=!0,...l}){return(0,i.jsxs)(t.t,{...l,children:[(0,i.jsxs)(t.o,{className:`sr-only`,children:[(0,i.jsx)(t.l,{children:e}),(0,i.jsx)(t.i,{children:n})]}),(0,i.jsx)(t.r,{className:(0,r.cn)(`overflow-hidden p-0`,s),showCloseButton:c,children:(0,i.jsx)(o,{className:(0,r.cn)(`**:[[cmdk-group-heading]]:text-text-positive-muted`,`**:data-[slot=command-input-wrapper]:h-12`,`**:[[cmdk-group-heading]]:px-2`,`**:[[cmdk-group-heading]]:font-medium`,`**:[[cmdk-group]]:px-2`,`[&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0`,`[&_[cmdk-input-wrapper]_svg]:size-5`,`**:[[cmdk-input]]:h-12`,`**:[[cmdk-item]]:px-2`,`**:[[cmdk-item]]:py-3`,`[&_[cmdk-item]_svg]:size-5`),children:a})})]})}function c({className:e,...t}){return(0,i.jsxs)(`div`,{"data-slot":`command-input-wrapper`,className:`flex h-9 items-center gap-2 border-border-weak border-b px-3`,children:[(0,i.jsx)(n.SearchIcon,{className:`size-4 shrink-0 opacity-50`}),(0,i.jsx)(a.Command.Input,{"data-slot":`command-input`,className:(0,r.cn)(`flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden`,`placeholder:text-text-positive-muted`,`disabled:cursor-not-allowed`,`disabled:opacity-50`,e),...t})]})}function l({className:e,...t}){return(0,i.jsx)(a.Command.List,{"data-slot":`command-list`,className:(0,r.cn)(`max-h-80 scroll-py-1 overflow-y-auto overflow-x-hidden`,e),...t})}function u({...e}){return(0,i.jsx)(a.Command.Empty,{"data-slot":`command-empty`,className:`py-6 text-center text-sm`,...e})}function d({className:e,...t}){return(0,i.jsx)(a.Command.Group,{"data-slot":`command-group`,className:(0,r.cn)(`text-text-positive`,`overflow-hidden p-1`,`**:[[cmdk-group-heading]]:text-text-positive-weak`,`**:[[cmdk-group-heading]]:px-2`,`**:[[cmdk-group-heading]]:py-1.5`,`**:[[cmdk-group-heading]]:text-xs`,`**:[[cmdk-group-heading]]:font-medium`,e),...t})}function f({className:e,...t}){return(0,i.jsx)(a.Command.Separator,{"data-slot":`command-separator`,className:(0,r.cn)(`-mx-1 h-px bg-border-weak`,e),...t})}function p({className:e,...t}){return(0,i.jsx)(a.Command.Item,{"data-slot":`command-item`,className:(0,r.cn)(`relative flex cursor-pointer select-none items-center gap-2 rounded-md p-2.5 text-sm outline-hidden transition-all duration-300`,`active:ring-border`,`active:opacity-60`,`active:ring-4`,`data-[selected=true]:bg-muted-muted`,`data-[selected=true]:text-text-positive-strong`,`data-[disabled=true]:opacity-50`,`data-[disabled=true]:pointer-events-none`,`[&_svg]:shrink-0`,`[&_svg]:pointer-events-none`,`[&_svg:not([class*='size-'])]:size-4`,`[&_svg:not([class*='text-'])]:text-text-positive-muted`,e),...t})}function m({className:e,...t}){return(0,i.jsx)(`span`,{"data-slot":`command-shortcut`,className:(0,r.cn)(`ml-auto text-text-positive-muted text-xs tracking-widest`,e),...t})}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return o}});
2
- //# sourceMappingURL=command-DiXzSGc8.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"command-DiXzSGc8.cjs","names":["CommandPrimitive","Dialog","DialogHeader","DialogTitle","DialogDescription","DialogContent","SearchIcon"],"sources":["../packages/components/ui/command.tsx"],"sourcesContent":["'use client';\n\nimport { SearchIcon } from 'lucide-react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from '@/components/ui/dialog';\n\nimport { Command as CommandPrimitive } from 'cmdk';\n\n/**\n * A cmdk-powered command palette for searching and executing commands.\n *\n * @example\n * ```tsx\n * import {\n * Command, CommandInput, CommandList, CommandEmpty,\n * CommandGroup, CommandItem,\n * } from '@customafk/lunas-ui/ui/command';\n *\n * <Command>\n * <CommandInput placeholder=\"Type a command…\" />\n * <CommandList>\n * <CommandEmpty>No results found.</CommandEmpty>\n * <CommandGroup heading=\"Suggestions\">\n * <CommandItem>Calendar</CommandItem>\n * <CommandItem>Search</CommandItem>\n * </CommandGroup>\n * </CommandList>\n * </Command>\n * ```\n */\nfunction Command({ className, ...props }: React.ComponentProps<typeof CommandPrimitive>) {\n return (\n <CommandPrimitive\n data-slot=\"command\"\n className={cn('flex size-full flex-col overflow-hidden rounded-md border-border-weak bg-popover text-text-positive', className)}\n {...props}\n />\n );\n}\n\n/**\n * A Command palette rendered inside a Dialog overlay.\n *\n * @param title - Accessible title for the dialog (screen-reader only).\n * @param description - Accessible description for the dialog (screen-reader only).\n * @param showCloseButton - Whether to show the built-in close button on the dialog.\n */\nfunction CommandDialog({\n title = 'Command Palette',\n description = 'Search for a command to run...',\n children,\n className,\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof Dialog> & {\n title?: string;\n description?: string;\n className?: string;\n showCloseButton?: boolean;\n}) {\n return (\n <Dialog {...props}>\n <DialogHeader className=\"sr-only\">\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n <DialogContent className={cn('overflow-hidden p-0', className)} showCloseButton={showCloseButton}>\n <Command\n className={cn(\n '**:[[cmdk-group-heading]]:text-text-positive-muted',\n '**:data-[slot=command-input-wrapper]:h-12',\n '**:[[cmdk-group-heading]]:px-2',\n '**:[[cmdk-group-heading]]:font-medium',\n '**:[[cmdk-group]]:px-2',\n '[&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0',\n '[&_[cmdk-input-wrapper]_svg]:size-5',\n '**:[[cmdk-input]]:h-12',\n '**:[[cmdk-item]]:px-2',\n '**:[[cmdk-item]]:py-3',\n '[&_[cmdk-item]_svg]:size-5'\n )}\n >\n {children}\n </Command>\n </DialogContent>\n </Dialog>\n );\n}\n\n/** Search input with a leading search icon that filters CommandItems in real time. */\nfunction CommandInput({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Input>) {\n return (\n <div data-slot=\"command-input-wrapper\" className=\"flex h-9 items-center gap-2 border-border-weak border-b px-3\">\n <SearchIcon className=\"size-4 shrink-0 opacity-50\" />\n <CommandPrimitive.Input\n data-slot=\"command-input\"\n className={cn(\n 'flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden',\n 'placeholder:text-text-positive-muted',\n 'disabled:cursor-not-allowed',\n 'disabled:opacity-50',\n className\n )}\n {...props}\n />\n </div>\n );\n}\n\n/** Scrollable list that renders filtered CommandGroups and CommandItems. */\nfunction CommandList({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.List>) {\n return <CommandPrimitive.List data-slot=\"command-list\" className={cn('max-h-80 scroll-py-1 overflow-y-auto overflow-x-hidden', className)} {...props} />;\n}\n\n/** Fallback message displayed when no CommandItems match the current search query. */\nfunction CommandEmpty({ ...props }: React.ComponentProps<typeof CommandPrimitive.Empty>) {\n return <CommandPrimitive.Empty data-slot=\"command-empty\" className=\"py-6 text-center text-sm\" {...props} />;\n}\n\n/** Groups CommandItems under an optional heading label. */\nfunction CommandGroup({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Group>) {\n return (\n <CommandPrimitive.Group\n data-slot=\"command-group\"\n className={cn(\n 'text-text-positive',\n 'overflow-hidden p-1',\n '**:[[cmdk-group-heading]]:text-text-positive-weak',\n '**:[[cmdk-group-heading]]:px-2',\n '**:[[cmdk-group-heading]]:py-1.5',\n '**:[[cmdk-group-heading]]:text-xs',\n '**:[[cmdk-group-heading]]:font-medium',\n className\n )}\n {...props}\n />\n );\n}\n\n/** Horizontal dividing line between groups in a CommandList. */\nfunction CommandSeparator({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Separator>) {\n return <CommandPrimitive.Separator data-slot=\"command-separator\" className={cn('-mx-1 h-px bg-border-weak', className)} {...props} />;\n}\n\n/** A selectable row inside a CommandGroup that is highlighted when active or hovered. */\nfunction CommandItem({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Item>) {\n return (\n <CommandPrimitive.Item\n data-slot=\"command-item\"\n className={cn(\n 'relative flex cursor-pointer select-none items-center gap-2 rounded-md p-2.5 text-sm outline-hidden transition-all duration-300',\n 'active:ring-border',\n 'active:opacity-60',\n 'active:ring-4',\n 'data-[selected=true]:bg-muted-muted',\n 'data-[selected=true]:text-text-positive-strong',\n 'data-[disabled=true]:opacity-50',\n 'data-[disabled=true]:pointer-events-none',\n '[&_svg]:shrink-0',\n '[&_svg]:pointer-events-none',\n \"[&_svg:not([class*='size-'])]:size-4\",\n \"[&_svg:not([class*='text-'])]:text-text-positive-muted\",\n className\n )}\n {...props}\n />\n );\n}\n\n/** Displays a keyboard shortcut hint aligned to the right of a CommandItem. */\nfunction CommandShortcut({ className, ...props }: React.ComponentProps<'span'>) {\n return <span data-slot=\"command-shortcut\" className={cn('ml-auto text-text-positive-muted text-xs tracking-widest', className)} {...props} />;\n}\n\nexport { Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut };\n"],"mappings":"sMAgCA,SAAS,EAAQ,CAAE,YAAW,GAAG,GAAwD,CACvF,OACE,EAAA,EAAA,KAACA,EAAAA,QAAAA,CACC,YAAU,UACV,WAAA,EAAA,EAAA,IAAc,sGAAuG,EAAU,CAC/H,GAAI,GACJ,CAWN,SAAS,EAAc,CACrB,QAAQ,kBACR,cAAc,iCACd,WACA,YACA,kBAAkB,GAClB,GAAG,GAMF,CACD,OACE,EAAA,EAAA,MAACC,EAAAA,EAAAA,CAAO,GAAI,aACV,EAAA,EAAA,MAACC,EAAAA,EAAAA,CAAa,UAAU,qBACtB,EAAA,EAAA,KAACC,EAAAA,EAAAA,CAAAA,SAAa,EAAA,CAAoB,EAClC,EAAA,EAAA,KAACC,EAAAA,EAAAA,CAAAA,SAAmB,EAAA,CAAgC,CAAA,EACvC,EACf,EAAA,EAAA,KAACC,EAAAA,EAAAA,CAAc,WAAA,EAAA,EAAA,IAAc,sBAAuB,EAAU,CAAmB,4BAC/E,EAAA,EAAA,KAAC,EAAA,CACC,WAAA,EAAA,EAAA,IACE,qDACA,4CACA,iCACA,wCACA,yBACA,oDACA,sCACA,yBACA,wBACA,wBACA,6BACD,CAEA,YACO,EACI,CAAA,EACT,CAKb,SAAS,EAAa,CAAE,YAAW,GAAG,GAA8D,CAClG,OACE,EAAA,EAAA,MAAC,MAAA,CAAI,YAAU,wBAAwB,UAAU,0EAC/C,EAAA,EAAA,KAACC,EAAAA,WAAAA,CAAW,UAAU,6BAAA,CAA+B,EACrD,EAAA,EAAA,KAACN,EAAAA,QAAiB,MAAA,CAChB,YAAU,gBACV,WAAA,EAAA,EAAA,IACE,yEACA,uCACA,8BACA,sBACA,EACD,CACD,GAAI,GACJ,CAAA,EACE,CAKV,SAAS,EAAY,CAAE,YAAW,GAAG,GAA6D,CAChG,OAAO,EAAA,EAAA,KAACA,EAAAA,QAAiB,KAAA,CAAK,YAAU,eAAe,WAAA,EAAA,EAAA,IAAc,yDAA0D,EAAU,CAAE,GAAI,GAAS,CAI1J,SAAS,EAAa,CAAE,GAAG,GAA8D,CACvF,OAAO,EAAA,EAAA,KAACA,EAAAA,QAAiB,MAAA,CAAM,YAAU,gBAAgB,UAAU,2BAA2B,GAAI,GAAS,CAI7G,SAAS,EAAa,CAAE,YAAW,GAAG,GAA8D,CAClG,OACE,EAAA,EAAA,KAACA,EAAAA,QAAiB,MAAA,CAChB,YAAU,gBACV,WAAA,EAAA,EAAA,IACE,qBACA,sBACA,oDACA,iCACA,mCACA,oCACA,wCACA,EACD,CACD,GAAI,GACJ,CAKN,SAAS,EAAiB,CAAE,YAAW,GAAG,GAAkE,CAC1G,OAAO,EAAA,EAAA,KAACA,EAAAA,QAAiB,UAAA,CAAU,YAAU,oBAAoB,WAAA,EAAA,EAAA,IAAc,4BAA6B,EAAU,CAAE,GAAI,GAAS,CAIvI,SAAS,EAAY,CAAE,YAAW,GAAG,GAA6D,CAChG,OACE,EAAA,EAAA,KAACA,EAAAA,QAAiB,KAAA,CAChB,YAAU,eACV,WAAA,EAAA,EAAA,IACE,kIACA,qBACA,oBACA,gBACA,sCACA,iDACA,kCACA,2CACA,mBACA,8BACA,uCACA,yDACA,EACD,CACD,GAAI,GACJ,CAKN,SAAS,EAAgB,CAAE,YAAW,GAAG,GAAuC,CAC9E,OAAO,EAAA,EAAA,KAAC,OAAA,CAAK,YAAU,mBAAmB,WAAA,EAAA,EAAA,IAAc,2DAA4D,EAAU,CAAE,GAAI,GAAS"}
@@ -1,2 +0,0 @@
1
- import{i as e,l as t,o as n,r,t as i}from"./dialog-EGFZeITu.mjs";import{SearchIcon as a}from"lucide-react";import{cn as o}from"@customafk/react-toolkit/utils";import{jsx as s,jsxs as c}from"react/jsx-runtime";import{Command as l}from"cmdk";function u({className:e,...t}){return s(l,{"data-slot":`command`,className:o(`flex size-full flex-col overflow-hidden rounded-md border-border-weak bg-popover text-text-positive`,e),...t})}function d({title:a=`Command Palette`,description:l=`Search for a command to run...`,children:d,className:f,showCloseButton:p=!0,...m}){return c(i,{...m,children:[c(n,{className:`sr-only`,children:[s(t,{children:a}),s(e,{children:l})]}),s(r,{className:o(`overflow-hidden p-0`,f),showCloseButton:p,children:s(u,{className:o(`**:[[cmdk-group-heading]]:text-text-positive-muted`,`**:data-[slot=command-input-wrapper]:h-12`,`**:[[cmdk-group-heading]]:px-2`,`**:[[cmdk-group-heading]]:font-medium`,`**:[[cmdk-group]]:px-2`,`[&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0`,`[&_[cmdk-input-wrapper]_svg]:size-5`,`**:[[cmdk-input]]:h-12`,`**:[[cmdk-item]]:px-2`,`**:[[cmdk-item]]:py-3`,`[&_[cmdk-item]_svg]:size-5`),children:d})})]})}function f({className:e,...t}){return c(`div`,{"data-slot":`command-input-wrapper`,className:`flex h-9 items-center gap-2 border-border-weak border-b px-3`,children:[s(a,{className:`size-4 shrink-0 opacity-50`}),s(l.Input,{"data-slot":`command-input`,className:o(`flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden`,`placeholder:text-text-positive-muted`,`disabled:cursor-not-allowed`,`disabled:opacity-50`,e),...t})]})}function p({className:e,...t}){return s(l.List,{"data-slot":`command-list`,className:o(`max-h-80 scroll-py-1 overflow-y-auto overflow-x-hidden`,e),...t})}function m({...e}){return s(l.Empty,{"data-slot":`command-empty`,className:`py-6 text-center text-sm`,...e})}function h({className:e,...t}){return s(l.Group,{"data-slot":`command-group`,className:o(`text-text-positive`,`overflow-hidden p-1`,`**:[[cmdk-group-heading]]:text-text-positive-weak`,`**:[[cmdk-group-heading]]:px-2`,`**:[[cmdk-group-heading]]:py-1.5`,`**:[[cmdk-group-heading]]:text-xs`,`**:[[cmdk-group-heading]]:font-medium`,e),...t})}function g({className:e,...t}){return s(l.Separator,{"data-slot":`command-separator`,className:o(`-mx-1 h-px bg-border-weak`,e),...t})}function _({className:e,...t}){return s(l.Item,{"data-slot":`command-item`,className:o(`relative flex cursor-pointer select-none items-center gap-2 rounded-md p-2.5 text-sm outline-hidden transition-all duration-300`,`active:ring-border`,`active:opacity-60`,`active:ring-4`,`data-[selected=true]:bg-muted-muted`,`data-[selected=true]:text-text-positive-strong`,`data-[disabled=true]:opacity-50`,`data-[disabled=true]:pointer-events-none`,`[&_svg]:shrink-0`,`[&_svg]:pointer-events-none`,`[&_svg:not([class*='size-'])]:size-4`,`[&_svg:not([class*='text-'])]:text-text-positive-muted`,e),...t})}function v({className:e,...t}){return s(`span`,{"data-slot":`command-shortcut`,className:o(`ml-auto text-text-positive-muted text-xs tracking-widest`,e),...t})}export{f as a,g as c,h as i,v as l,d as n,_ as o,m as r,p as s,u as t};
2
- //# sourceMappingURL=command-FnbrPZ7_.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"command-FnbrPZ7_.mjs","names":["Command","CommandPrimitive"],"sources":["../packages/components/ui/command.tsx"],"sourcesContent":["'use client';\n\nimport { SearchIcon } from 'lucide-react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from '@/components/ui/dialog';\n\nimport { Command as CommandPrimitive } from 'cmdk';\n\n/**\n * A cmdk-powered command palette for searching and executing commands.\n *\n * @example\n * ```tsx\n * import {\n * Command, CommandInput, CommandList, CommandEmpty,\n * CommandGroup, CommandItem,\n * } from '@customafk/lunas-ui/ui/command';\n *\n * <Command>\n * <CommandInput placeholder=\"Type a command…\" />\n * <CommandList>\n * <CommandEmpty>No results found.</CommandEmpty>\n * <CommandGroup heading=\"Suggestions\">\n * <CommandItem>Calendar</CommandItem>\n * <CommandItem>Search</CommandItem>\n * </CommandGroup>\n * </CommandList>\n * </Command>\n * ```\n */\nfunction Command({ className, ...props }: React.ComponentProps<typeof CommandPrimitive>) {\n return (\n <CommandPrimitive\n data-slot=\"command\"\n className={cn('flex size-full flex-col overflow-hidden rounded-md border-border-weak bg-popover text-text-positive', className)}\n {...props}\n />\n );\n}\n\n/**\n * A Command palette rendered inside a Dialog overlay.\n *\n * @param title - Accessible title for the dialog (screen-reader only).\n * @param description - Accessible description for the dialog (screen-reader only).\n * @param showCloseButton - Whether to show the built-in close button on the dialog.\n */\nfunction CommandDialog({\n title = 'Command Palette',\n description = 'Search for a command to run...',\n children,\n className,\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof Dialog> & {\n title?: string;\n description?: string;\n className?: string;\n showCloseButton?: boolean;\n}) {\n return (\n <Dialog {...props}>\n <DialogHeader className=\"sr-only\">\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n <DialogContent className={cn('overflow-hidden p-0', className)} showCloseButton={showCloseButton}>\n <Command\n className={cn(\n '**:[[cmdk-group-heading]]:text-text-positive-muted',\n '**:data-[slot=command-input-wrapper]:h-12',\n '**:[[cmdk-group-heading]]:px-2',\n '**:[[cmdk-group-heading]]:font-medium',\n '**:[[cmdk-group]]:px-2',\n '[&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0',\n '[&_[cmdk-input-wrapper]_svg]:size-5',\n '**:[[cmdk-input]]:h-12',\n '**:[[cmdk-item]]:px-2',\n '**:[[cmdk-item]]:py-3',\n '[&_[cmdk-item]_svg]:size-5'\n )}\n >\n {children}\n </Command>\n </DialogContent>\n </Dialog>\n );\n}\n\n/** Search input with a leading search icon that filters CommandItems in real time. */\nfunction CommandInput({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Input>) {\n return (\n <div data-slot=\"command-input-wrapper\" className=\"flex h-9 items-center gap-2 border-border-weak border-b px-3\">\n <SearchIcon className=\"size-4 shrink-0 opacity-50\" />\n <CommandPrimitive.Input\n data-slot=\"command-input\"\n className={cn(\n 'flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden',\n 'placeholder:text-text-positive-muted',\n 'disabled:cursor-not-allowed',\n 'disabled:opacity-50',\n className\n )}\n {...props}\n />\n </div>\n );\n}\n\n/** Scrollable list that renders filtered CommandGroups and CommandItems. */\nfunction CommandList({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.List>) {\n return <CommandPrimitive.List data-slot=\"command-list\" className={cn('max-h-80 scroll-py-1 overflow-y-auto overflow-x-hidden', className)} {...props} />;\n}\n\n/** Fallback message displayed when no CommandItems match the current search query. */\nfunction CommandEmpty({ ...props }: React.ComponentProps<typeof CommandPrimitive.Empty>) {\n return <CommandPrimitive.Empty data-slot=\"command-empty\" className=\"py-6 text-center text-sm\" {...props} />;\n}\n\n/** Groups CommandItems under an optional heading label. */\nfunction CommandGroup({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Group>) {\n return (\n <CommandPrimitive.Group\n data-slot=\"command-group\"\n className={cn(\n 'text-text-positive',\n 'overflow-hidden p-1',\n '**:[[cmdk-group-heading]]:text-text-positive-weak',\n '**:[[cmdk-group-heading]]:px-2',\n '**:[[cmdk-group-heading]]:py-1.5',\n '**:[[cmdk-group-heading]]:text-xs',\n '**:[[cmdk-group-heading]]:font-medium',\n className\n )}\n {...props}\n />\n );\n}\n\n/** Horizontal dividing line between groups in a CommandList. */\nfunction CommandSeparator({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Separator>) {\n return <CommandPrimitive.Separator data-slot=\"command-separator\" className={cn('-mx-1 h-px bg-border-weak', className)} {...props} />;\n}\n\n/** A selectable row inside a CommandGroup that is highlighted when active or hovered. */\nfunction CommandItem({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Item>) {\n return (\n <CommandPrimitive.Item\n data-slot=\"command-item\"\n className={cn(\n 'relative flex cursor-pointer select-none items-center gap-2 rounded-md p-2.5 text-sm outline-hidden transition-all duration-300',\n 'active:ring-border',\n 'active:opacity-60',\n 'active:ring-4',\n 'data-[selected=true]:bg-muted-muted',\n 'data-[selected=true]:text-text-positive-strong',\n 'data-[disabled=true]:opacity-50',\n 'data-[disabled=true]:pointer-events-none',\n '[&_svg]:shrink-0',\n '[&_svg]:pointer-events-none',\n \"[&_svg:not([class*='size-'])]:size-4\",\n \"[&_svg:not([class*='text-'])]:text-text-positive-muted\",\n className\n )}\n {...props}\n />\n );\n}\n\n/** Displays a keyboard shortcut hint aligned to the right of a CommandItem. */\nfunction CommandShortcut({ className, ...props }: React.ComponentProps<'span'>) {\n return <span data-slot=\"command-shortcut\" className={cn('ml-auto text-text-positive-muted text-xs tracking-widest', className)} {...props} />;\n}\n\nexport { Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut };\n"],"mappings":"gPAgCA,SAASA,EAAQ,CAAE,YAAW,GAAG,GAAwD,CACvF,OACE,EAACC,EAAAA,CACC,YAAU,UACV,UAAW,EAAG,sGAAuG,EAAU,CAC/H,GAAI,GACJ,CAWN,SAAS,EAAc,CACrB,QAAQ,kBACR,cAAc,iCACd,WACA,YACA,kBAAkB,GAClB,GAAG,GAMF,CACD,OACE,EAAC,EAAA,CAAO,GAAI,YACV,EAAC,EAAA,CAAa,UAAU,oBACtB,EAAC,EAAA,CAAA,SAAa,EAAA,CAAoB,CAClC,EAAC,EAAA,CAAA,SAAmB,EAAA,CAAgC,CAAA,EACvC,CACf,EAAC,EAAA,CAAc,UAAW,EAAG,sBAAuB,EAAU,CAAmB,2BAC/E,EAACD,EAAAA,CACC,UAAW,EACT,qDACA,4CACA,iCACA,wCACA,yBACA,oDACA,sCACA,yBACA,wBACA,wBACA,6BACD,CAEA,YACO,EACI,CAAA,EACT,CAKb,SAAS,EAAa,CAAE,YAAW,GAAG,GAA8D,CAClG,OACE,EAAC,MAAA,CAAI,YAAU,wBAAwB,UAAU,yEAC/C,EAAC,EAAA,CAAW,UAAU,6BAAA,CAA+B,CACrD,EAACC,EAAiB,MAAA,CAChB,YAAU,gBACV,UAAW,EACT,yEACA,uCACA,8BACA,sBACA,EACD,CACD,GAAI,GACJ,CAAA,EACE,CAKV,SAAS,EAAY,CAAE,YAAW,GAAG,GAA6D,CAChG,OAAO,EAACA,EAAiB,KAAA,CAAK,YAAU,eAAe,UAAW,EAAG,yDAA0D,EAAU,CAAE,GAAI,GAAS,CAI1J,SAAS,EAAa,CAAE,GAAG,GAA8D,CACvF,OAAO,EAACA,EAAiB,MAAA,CAAM,YAAU,gBAAgB,UAAU,2BAA2B,GAAI,GAAS,CAI7G,SAAS,EAAa,CAAE,YAAW,GAAG,GAA8D,CAClG,OACE,EAACA,EAAiB,MAAA,CAChB,YAAU,gBACV,UAAW,EACT,qBACA,sBACA,oDACA,iCACA,mCACA,oCACA,wCACA,EACD,CACD,GAAI,GACJ,CAKN,SAAS,EAAiB,CAAE,YAAW,GAAG,GAAkE,CAC1G,OAAO,EAACA,EAAiB,UAAA,CAAU,YAAU,oBAAoB,UAAW,EAAG,4BAA6B,EAAU,CAAE,GAAI,GAAS,CAIvI,SAAS,EAAY,CAAE,YAAW,GAAG,GAA6D,CAChG,OACE,EAACA,EAAiB,KAAA,CAChB,YAAU,eACV,UAAW,EACT,kIACA,qBACA,oBACA,gBACA,sCACA,iDACA,kCACA,2CACA,mBACA,8BACA,uCACA,yDACA,EACD,CACD,GAAI,GACJ,CAKN,SAAS,EAAgB,CAAE,YAAW,GAAG,GAAuC,CAC9E,OAAO,EAAC,OAAA,CAAK,YAAU,mBAAmB,UAAW,EAAG,2DAA4D,EAAU,CAAE,GAAI,GAAS"}
@@ -1,22 +0,0 @@
1
- import { n as ECountry } from "../types-YLu40dXY.mjs";
2
-
3
- //#region packages/components/data-display/country.d.ts
4
- type CountryDisplayProps = {
5
- /** The country enum value to display; renders "No country" when `null` or `undefined`. */
6
- country?: ECountry | null;
7
- };
8
- /**
9
- * Displays a country flag (SVG) alongside the country's English name, or a muted "No country" label when the value is absent.
10
- *
11
- * @example
12
- * ```tsx
13
- * import { CountryDisplay } from '@customafk/lunas-ui/data-display/country';
14
- * import { ECountry } from '@customafk/lunas-ui/types';
15
- *
16
- * <CountryDisplay country={ECountry.VIETNAM} />
17
- * ```
18
- */
19
- declare const CountryDisplay: React.FC<CountryDisplayProps>;
20
- //#endregion
21
- export { CountryDisplay };
22
- //# sourceMappingURL=country.d.mts.map
@@ -1,2 +0,0 @@
1
- "use client";import{t as e}from"../paragraph-CjstaJFj.mjs";import{t}from"../types-CFXgrpTm.mjs";import{t as n}from"../flex-BAcvp4lB.mjs";import{useMemo as r}from"react";import{jsx as i,jsxs as a}from"react/jsx-runtime";import o from"react-country-flag";const s={[t.VIETNAM]:`VN`,[t.USA]:`US`,[t.JAPAN]:`JP`,[t.CHINA]:`CN`,[t.KOREA]:`KR`,[t.SINGAPORE]:`SG`,[t.MALAYSIA]:`MY`,[t.INDONESIA]:`ID`,[t.TAIWAN]:`TW`,[t.THAILAND]:`TH`},c={[t.VIETNAM]:`Vietnam`,[t.USA]:`America`,[t.JAPAN]:`Japan`,[t.CHINA]:`China`,[t.KOREA]:`Korea`,[t.SINGAPORE]:`Singapore`,[t.MALAYSIA]:`Malaysia`,[t.INDONESIA]:`Indonesia`,[t.TAIWAN]:`Taiwan`,[t.THAILAND]:`Thailand`},l=({country:t})=>{let l=r(()=>t?s[t]:`VN`,[t]);return t?a(n,{"data-slot":`country-display`,padding:`none`,className:`px-1`,children:[i(o,{svg:!0,countryCode:l,className:`emojiFlag border`}),i(e,{variant:`sm`,children:c[t]})]}):i(n,{"data-slot":`country-display`,padding:`none`,className:`px-1`,children:i(e,{variant:`muted`,className:`line-clamp-1 text-xs`,children:`No country`})})};export{l as CountryDisplay};
2
- //# sourceMappingURL=country.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"country.mjs","names":["COUNTRY_CODES: Record<ECountry, string>","COUNTRY_LABELS: Record<ECountry, string>","CountryDisplay: React.FC<CountryDisplayProps>"],"sources":["../../packages/components/data-display/country.tsx"],"sourcesContent":["'use client';\n\nimport { useMemo } from 'react';\nimport ReactCountryFlag from 'react-country-flag';\n\nimport { ECountry } from '@/types';\n\nimport { Flex } from '../layouts/flex';\nimport { Paragraph } from '../typography/paragraph';\n\nconst COUNTRY_CODES: Record<ECountry, string> = {\n [ECountry.VIETNAM]: 'VN',\n [ECountry.USA]: 'US',\n [ECountry.JAPAN]: 'JP',\n [ECountry.CHINA]: 'CN',\n [ECountry.KOREA]: 'KR',\n [ECountry.SINGAPORE]: 'SG',\n [ECountry.MALAYSIA]: 'MY',\n [ECountry.INDONESIA]: 'ID',\n [ECountry.TAIWAN]: 'TW',\n [ECountry.THAILAND]: 'TH',\n};\n\nconst COUNTRY_LABELS: Record<ECountry, string> = {\n [ECountry.VIETNAM]: 'Vietnam',\n [ECountry.USA]: 'America',\n [ECountry.JAPAN]: 'Japan',\n [ECountry.CHINA]: 'China',\n [ECountry.KOREA]: 'Korea',\n [ECountry.SINGAPORE]: 'Singapore',\n [ECountry.MALAYSIA]: 'Malaysia',\n [ECountry.INDONESIA]: 'Indonesia',\n [ECountry.TAIWAN]: 'Taiwan',\n [ECountry.THAILAND]: 'Thailand',\n};\n\ntype CountryDisplayProps = {\n /** The country enum value to display; renders \"No country\" when `null` or `undefined`. */\n country?: ECountry | null;\n};\n\n/**\n * Displays a country flag (SVG) alongside the country's English name, or a muted \"No country\" label when the value is absent.\n *\n * @example\n * ```tsx\n * import { CountryDisplay } from '@customafk/lunas-ui/data-display/country';\n * import { ECountry } from '@customafk/lunas-ui/types';\n *\n * <CountryDisplay country={ECountry.VIETNAM} />\n * ```\n */\nexport const CountryDisplay: React.FC<CountryDisplayProps> = ({ country }) => {\n const code = useMemo(() => (country ? COUNTRY_CODES[country] : 'VN'), [country]);\n\n if (!country) {\n return (\n <Flex data-slot=\"country-display\" padding=\"none\" className=\"px-1\">\n <Paragraph variant=\"muted\" className=\"line-clamp-1 text-xs\">\n No country\n </Paragraph>\n </Flex>\n );\n }\n\n return (\n <Flex data-slot=\"country-display\" padding=\"none\" className=\"px-1\">\n <ReactCountryFlag svg countryCode={code} className=\"emojiFlag border\" />\n <Paragraph variant=\"sm\">{COUNTRY_LABELS[country]}</Paragraph>\n </Flex>\n );\n};\n"],"mappings":"6PAUA,MAAMA,EAA0C,EAC7C,EAAS,SAAU,MACnB,EAAS,KAAM,MACf,EAAS,OAAQ,MACjB,EAAS,OAAQ,MACjB,EAAS,OAAQ,MACjB,EAAS,WAAY,MACrB,EAAS,UAAW,MACpB,EAAS,WAAY,MACrB,EAAS,QAAS,MAClB,EAAS,UAAW,KACtB,CAEKC,EAA2C,EAC9C,EAAS,SAAU,WACnB,EAAS,KAAM,WACf,EAAS,OAAQ,SACjB,EAAS,OAAQ,SACjB,EAAS,OAAQ,SACjB,EAAS,WAAY,aACrB,EAAS,UAAW,YACpB,EAAS,WAAY,aACrB,EAAS,QAAS,UAClB,EAAS,UAAW,WACtB,CAkBYC,GAAiD,CAAE,aAAc,CAC5E,IAAM,EAAO,MAAe,EAAU,EAAc,GAAW,KAAO,CAAC,EAAQ,CAAC,CAYhF,OAVK,EAWH,EAAC,EAAA,CAAK,YAAU,kBAAkB,QAAQ,OAAO,UAAU,iBACzD,EAAC,EAAA,CAAiB,IAAA,GAAI,YAAa,EAAM,UAAU,oBAAqB,CACxE,EAAC,EAAA,CAAU,QAAQ,cAAM,EAAe,IAAqB,CAAA,EACxD,CAZL,EAAC,EAAA,CAAK,YAAU,kBAAkB,QAAQ,OAAO,UAAU,gBACzD,EAAC,EAAA,CAAU,QAAQ,QAAQ,UAAU,gCAAuB,cAEhD,EACP"}
@@ -1,43 +0,0 @@
1
- //#region packages/components/data-display/data-list.d.ts
2
- type DataListProps = {
3
- /** Additional CSS classes applied to the wrapping container. */
4
- className?: string;
5
- };
6
- /**
7
- * A vertical container that stacks `DataListItem` rows with consistent spacing.
8
- *
9
- * @example
10
- * ```tsx
11
- * import { DataList, DataListItem } from '@customafk/lunas-ui/data-display/data-list';
12
- *
13
- * <DataList>
14
- * <DataListItem label="Status" value="Active" />
15
- * <DataListItem label="Created" value="2024-01-15" />
16
- * </DataList>
17
- * ```
18
- */
19
- declare const DataList: React.FC<React.PropsWithChildren<DataListProps>>;
20
- type DataListItemProps = {
21
- /** Descriptive label shown to the left of (or above, on mobile) the value. */
22
- label: string;
23
- /** The value to display; accepts strings, numbers, or arbitrary React nodes. */
24
- value: string | number | React.ReactNode;
25
- /** Minimum width applied to the label column. Defaults to `'120px'`. */
26
- minLabelWidth?: string;
27
- /** Additional CSS classes applied to the row container. */
28
- className?: string;
29
- };
30
- /**
31
- * A single label–value row inside a `DataList`, responsive to mobile (stacks vertically) and desktop (inline) layouts.
32
- *
33
- * @example
34
- * ```tsx
35
- * import { DataListItem } from '@customafk/lunas-ui/data-display/data-list';
36
- *
37
- * <DataListItem label="Email" value="user@example.com" />
38
- * ```
39
- */
40
- declare const DataListItem: React.FC<DataListItemProps>;
41
- //#endregion
42
- export { DataList, DataListItem };
43
- //# sourceMappingURL=data-list.d.mts.map
@@ -1,2 +0,0 @@
1
- "use client";import{cn as e}from"@customafk/react-toolkit/utils";import{jsx as t,jsxs as n}from"react/jsx-runtime";const r=({children:n,className:r})=>t(`div`,{"data-slot":`data-list`,className:e(`flex w-full flex-col gap-4`,r),children:n}),i=({label:r,value:i,minLabelWidth:a=`120px`,className:o})=>n(`div`,{"data-slot":`data-list-item`,className:e(`flex w-full flex-col items-start gap-1 md:flex-row md:items-center md:gap-4`,o),children:[t(`span`,{"data-slot":`data-list-label`,style:{minWidth:a},className:`text-sm text-text-positive-weak`,children:r}),t(`span`,{"data-slot":`data-list-value`,className:`text-sm text-text-positive`,children:i})]});export{r as DataList,i as DataListItem};
2
- //# sourceMappingURL=data-list.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"data-list.mjs","names":["DataList: React.FC<React.PropsWithChildren<DataListProps>>","DataListItem: React.FC<DataListItemProps>"],"sources":["../../packages/components/data-display/data-list.tsx"],"sourcesContent":["'use client';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\ntype DataListProps = {\n /** Additional CSS classes applied to the wrapping container. */\n className?: string;\n};\n\n/**\n * A vertical container that stacks `DataListItem` rows with consistent spacing.\n *\n * @example\n * ```tsx\n * import { DataList, DataListItem } from '@customafk/lunas-ui/data-display/data-list';\n *\n * <DataList>\n * <DataListItem label=\"Status\" value=\"Active\" />\n * <DataListItem label=\"Created\" value=\"2024-01-15\" />\n * </DataList>\n * ```\n */\nexport const DataList: React.FC<React.PropsWithChildren<DataListProps>> = ({ children, className }) => {\n return (\n <div data-slot=\"data-list\" className={cn('flex w-full flex-col gap-4', className)}>\n {children}\n </div>\n );\n};\n\ntype DataListItemProps = {\n /** Descriptive label shown to the left of (or above, on mobile) the value. */\n label: string;\n /** The value to display; accepts strings, numbers, or arbitrary React nodes. */\n value: string | number | React.ReactNode;\n /** Minimum width applied to the label column. Defaults to `'120px'`. */\n minLabelWidth?: string;\n /** Additional CSS classes applied to the row container. */\n className?: string;\n};\n\n/**\n * A single label–value row inside a `DataList`, responsive to mobile (stacks vertically) and desktop (inline) layouts.\n *\n * @example\n * ```tsx\n * import { DataListItem } from '@customafk/lunas-ui/data-display/data-list';\n *\n * <DataListItem label=\"Email\" value=\"user@example.com\" />\n * ```\n */\nexport const DataListItem: React.FC<DataListItemProps> = ({ label, value, minLabelWidth = '120px', className }) => {\n return (\n <div data-slot=\"data-list-item\" className={cn('flex w-full flex-col items-start gap-1 md:flex-row md:items-center md:gap-4', className)}>\n <span data-slot=\"data-list-label\" style={{ minWidth: minLabelWidth }} className=\"text-sm text-text-positive-weak\">\n {label}\n </span>\n <span data-slot=\"data-list-value\" className=\"text-sm text-text-positive\">\n {value}\n </span>\n </div>\n );\n};\n"],"mappings":"mHAsBA,MAAaA,GAA8D,CAAE,WAAU,eAEnF,EAAC,MAAA,CAAI,YAAU,YAAY,UAAW,EAAG,6BAA8B,EAAU,CAC9E,YACG,CAyBGC,GAA6C,CAAE,QAAO,QAAO,gBAAgB,QAAS,eAE/F,EAAC,MAAA,CAAI,YAAU,iBAAiB,UAAW,EAAG,8EAA+E,EAAU,WACrI,EAAC,OAAA,CAAK,YAAU,kBAAkB,MAAO,CAAE,SAAU,EAAe,CAAE,UAAU,2CAC7E,GACI,CACP,EAAC,OAAA,CAAK,YAAU,kBAAkB,UAAU,sCACzC,GACI,CAAA,EACH"}
@@ -1,19 +0,0 @@
1
- //#region packages/components/data-display/date-tooltip.d.ts
2
- type DateTooltipProps = {
3
- /** The date value to display; accepts a `Date` object, an ISO string, or a Unix timestamp (ms). */
4
- date: Date | string | number;
5
- };
6
- /**
7
- * Displays a date as a badge; hovering reveals a tooltip with the full Vietnamese weekday and time.
8
- *
9
- * @example
10
- * ```tsx
11
- * import { DateTooltip } from '@customafk/lunas-ui/data-display/date-tooltip';
12
- *
13
- * <DateTooltip date="2024-03-15T14:30:00Z" />
14
- * ```
15
- */
16
- declare const DateTooltip: React.FC<DateTooltipProps>;
17
- //#endregion
18
- export { DateTooltip };
19
- //# sourceMappingURL=date-tooltip.d.mts.map
@@ -1,2 +0,0 @@
1
- "use client";import{t as e}from"../date-CFgc7pK3.mjs";import{t}from"../badge-Bhbhmsic.mjs";import{i as n,n as r,r as i,t as a}from"../tooltip-BfBJRYpc.mjs";import{jsx as o,jsxs as s}from"react/jsx-runtime";const c=({date:c})=>o(i,{children:s(a,{children:[o(n,{asChild:!0,children:o(t,{"data-slot":`date-tooltip-trigger`,className:`h-fit`,children:o(e,{date:c,format:`medium`,className:`text-xs font-normal text-text-negative`})})}),o(r,{"data-slot":`date-tooltip-content`,children:o(e,{date:c,format:`full`,showTime:!0,className:`font-[Inter]! font-medium`})})]})});export{c as DateTooltip};
2
- //# sourceMappingURL=date-tooltip.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"date-tooltip.mjs","names":["DateTooltip: React.FC<DateTooltipProps>"],"sources":["../../packages/components/data-display/date-tooltip.tsx"],"sourcesContent":["'use client';\n\nimport { Badge } from '@/components/ui/badge';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';\n\nimport { DateDisplay } from './date';\n\ntype DateTooltipProps = {\n /** The date value to display; accepts a `Date` object, an ISO string, or a Unix timestamp (ms). */\n date: Date | string | number;\n};\n\n/**\n * Displays a date as a badge; hovering reveals a tooltip with the full Vietnamese weekday and time.\n *\n * @example\n * ```tsx\n * import { DateTooltip } from '@customafk/lunas-ui/data-display/date-tooltip';\n *\n * <DateTooltip date=\"2024-03-15T14:30:00Z\" />\n * ```\n */\nexport const DateTooltip: React.FC<DateTooltipProps> = ({ date }) => {\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <Badge data-slot=\"date-tooltip-trigger\" className=\"h-fit\">\n <DateDisplay date={date} format=\"medium\" className=\"text-xs font-normal text-text-negative\" />\n </Badge>\n </TooltipTrigger>\n <TooltipContent data-slot=\"date-tooltip-content\">\n <DateDisplay date={date} format=\"full\" showTime className=\"font-[Inter]! font-medium\" />\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n};\n"],"mappings":"8MAsBA,MAAaA,GAA2C,CAAE,UAEtD,EAAC,EAAA,CAAA,SACC,EAAC,EAAA,CAAA,SAAA,CACC,EAAC,EAAA,CAAe,QAAA,YACd,EAAC,EAAA,CAAM,YAAU,uBAAuB,UAAU,iBAChD,EAAC,EAAA,CAAkB,OAAM,OAAO,SAAS,UAAU,0CAA2C,EACxF,EACO,CACjB,EAAC,EAAA,CAAe,YAAU,gCACxB,EAAC,EAAA,CAAkB,OAAM,OAAO,OAAO,SAAA,GAAS,UAAU,6BAA8B,EACzE,CAAA,CAAA,CACT,CAAA,CACM"}
@@ -1,39 +0,0 @@
1
- //#region packages/components/data-display/date.d.ts
2
- interface DateDisplayProps {
3
- /** The date value to display; accepts a `Date` object, an ISO string, or a Unix timestamp (ms). */
4
- date: Date | string | number;
5
- /**
6
- * Controls how the date is formatted.
7
- * - `'short'` — `15/03/24`
8
- * - `'medium'` — `15/03/2024` (default)
9
- * - `'long'` — `15 tháng 3, 2024`
10
- * - `'full'` — `Thứ Sáu, ngày 15 tháng 3 năm 2024`
11
- * - `'relative'` — `2 giờ trước`
12
- * - `'datetime'` — `15/03/2024 14:30`
13
- * - `'time'` — `14:30`
14
- * - `'smart'` — auto-selects the most human-readable format based on recency
15
- */
16
- format?: 'short' | 'medium' | 'long' | 'full' | 'relative' | 'datetime' | 'time' | 'smart';
17
- /** When `true`, appends any recognised Vietnamese public holiday name to the formatted date. Defaults to `false`. */
18
- showHoliday?: boolean;
19
- /** When `true`, appends the time component to the formatted output. Defaults to `false`. */
20
- showTime?: boolean;
21
- /** Additional CSS classes applied to the `<time>` element. */
22
- className?: string;
23
- /** Custom HTML `title` attribute; defaults to the full ISO datetime string. */
24
- title?: string;
25
- }
26
- /**
27
- * Renders a formatted date using Vietnamese locale conventions inside a semantic `<time>` element.
28
- *
29
- * @example
30
- * ```tsx
31
- * import { DateDisplay } from '@customafk/lunas-ui/data-display/date';
32
- *
33
- * <DateDisplay date="2024-03-15T14:30:00Z" format="medium" showTime />
34
- * ```
35
- */
36
- declare const DateDisplay: React.FC<DateDisplayProps>;
37
- //#endregion
38
- export { DateDisplay };
39
- //# sourceMappingURL=date.d.mts.map
@@ -1 +0,0 @@
1
- "use client";import{t as e}from"../date-CFgc7pK3.mjs";export{e as DateDisplay};
@@ -1,21 +0,0 @@
1
- //#region packages/components/data-display/empty.d.ts
2
- type EmptyDisplayProps = {
3
- /** Message shown below the empty-state icon. Defaults to `'No data to display.'`. */
4
- label?: string;
5
- /** Additional CSS classes applied to the wrapping container. */
6
- className?: string;
7
- };
8
- /**
9
- * A full-area empty-state placeholder with a package icon and a configurable message.
10
- *
11
- * @example
12
- * ```tsx
13
- * import { EmptyDisplay } from '@customafk/lunas-ui/data-display/empty';
14
- *
15
- * <EmptyDisplay label="No results found." />
16
- * ```
17
- */
18
- declare const EmptyDisplay: React.FC<EmptyDisplayProps>;
19
- //#endregion
20
- export { EmptyDisplay };
21
- //# sourceMappingURL=empty.d.mts.map