@customafk/lunas-ui 0.2.42 → 0.2.43

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 (1008) hide show
  1. package/dist/alert-2JBj0aPL.d.mts +88 -0
  2. package/dist/alert-B2PaDJp6.cjs +2 -0
  3. package/dist/alert-B2PaDJp6.cjs.map +1 -0
  4. package/dist/alert-BbvPwf2x.mjs +2 -0
  5. package/dist/alert-BbvPwf2x.mjs.map +1 -0
  6. package/dist/alert-Cm6RAKdp.d.cts +88 -0
  7. package/dist/avatar-TyOphzGo.cjs +2 -0
  8. package/dist/avatar-TyOphzGo.cjs.map +1 -0
  9. package/dist/avatar-fltdRVsJ.mjs +2 -0
  10. package/dist/avatar-fltdRVsJ.mjs.map +1 -0
  11. package/dist/badge-CDGBGq8X.mjs +2 -0
  12. package/dist/badge-CDGBGq8X.mjs.map +1 -0
  13. package/dist/badge-CnR78VnH.d.mts +42 -0
  14. package/dist/badge-KW7xu5Ca.cjs +2 -0
  15. package/dist/badge-KW7xu5Ca.cjs.map +1 -0
  16. package/dist/badge-ic9HOAa7.d.cts +42 -0
  17. package/dist/button--eH0xdF-.d.mts +174 -0
  18. package/dist/button-C--DAN1D.cjs +2 -0
  19. package/dist/button-C--DAN1D.cjs.map +1 -0
  20. package/dist/button-CCVJTHBI.mjs +2 -0
  21. package/dist/button-CCVJTHBI.mjs.map +1 -0
  22. package/dist/button-DserH5cQ.d.cts +174 -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-DkMqWB8G.mjs +2 -0
  26. package/dist/button.variants-DkMqWB8G.mjs.map +1 -0
  27. package/dist/calendar-4weBDnXz.cjs +2 -0
  28. package/dist/calendar-4weBDnXz.cjs.map +1 -0
  29. package/dist/calendar-R866yyd1.mjs +2 -0
  30. package/dist/calendar-R866yyd1.mjs.map +1 -0
  31. package/dist/cards/grid-product-card.cjs +1 -1
  32. package/dist/cards/grid-product-card.cjs.map +1 -1
  33. package/dist/cards/grid-product-card.d.mts +37 -0
  34. package/dist/cards/grid-product-card.mjs +2 -0
  35. package/dist/cards/grid-product-card.mjs.map +1 -0
  36. package/dist/cards/product-card.cjs +1 -1
  37. package/dist/cards/product-card.cjs.map +1 -1
  38. package/dist/cards/product-card.d.mts +37 -0
  39. package/dist/cards/product-card.mjs +2 -0
  40. package/dist/cards/product-card.mjs.map +1 -0
  41. package/dist/cards/simple-card.cjs +1 -1
  42. package/dist/cards/simple-card.d.mts +35 -0
  43. package/dist/cards/simple-card.mjs +2 -0
  44. package/dist/cards/simple-card.mjs.map +1 -0
  45. package/dist/checkbox-Cat3i08X.mjs +2 -0
  46. package/dist/checkbox-Cat3i08X.mjs.map +1 -0
  47. package/dist/checkbox-Dsq-MSbH.cjs +2 -0
  48. package/dist/checkbox-Dsq-MSbH.cjs.map +1 -0
  49. package/dist/chunk-350yNsax.cjs +1 -0
  50. package/dist/close-Dlo1bI8x.cjs +2 -0
  51. package/dist/close-Dlo1bI8x.cjs.map +1 -0
  52. package/dist/close-_UHFeiLS.mjs +2 -0
  53. package/dist/close-_UHFeiLS.mjs.map +1 -0
  54. package/dist/cms-layout-BCH4NroR.cjs +2 -0
  55. package/dist/cms-layout-BCH4NroR.cjs.map +1 -0
  56. package/dist/cms-layout-DkCR1AfG.mjs +2 -0
  57. package/dist/cms-layout-DkCR1AfG.mjs.map +1 -0
  58. package/dist/command-CsP8a1Un.cjs +2 -0
  59. package/dist/command-CsP8a1Un.cjs.map +1 -0
  60. package/dist/command-D6_CSbwJ.mjs +2 -0
  61. package/dist/command-D6_CSbwJ.mjs.map +1 -0
  62. package/dist/data-display/country.cjs +1 -1
  63. package/dist/data-display/country.cjs.map +1 -1
  64. package/dist/data-display/country.d.cts +1 -1
  65. package/dist/data-display/country.d.mts +22 -0
  66. package/dist/data-display/country.mjs +2 -0
  67. package/dist/data-display/country.mjs.map +1 -0
  68. package/dist/data-display/data-list.cjs +1 -1
  69. package/dist/data-display/data-list.d.mts +43 -0
  70. package/dist/data-display/data-list.mjs +2 -0
  71. package/dist/data-display/data-list.mjs.map +1 -0
  72. package/dist/data-display/date-tooltip.cjs +1 -1
  73. package/dist/data-display/date-tooltip.cjs.map +1 -1
  74. package/dist/data-display/date-tooltip.d.mts +19 -0
  75. package/dist/data-display/date-tooltip.mjs +2 -0
  76. package/dist/data-display/date-tooltip.mjs.map +1 -0
  77. package/dist/data-display/date.cjs +1 -2
  78. package/dist/data-display/date.d.mts +39 -0
  79. package/dist/data-display/date.mjs +1 -0
  80. package/dist/data-display/empty.cjs +1 -1
  81. package/dist/data-display/empty.d.mts +21 -0
  82. package/dist/data-display/empty.mjs +2 -0
  83. package/dist/data-display/empty.mjs.map +1 -0
  84. package/dist/data-display/name.cjs +1 -1
  85. package/dist/data-display/name.cjs.map +1 -1
  86. package/dist/data-display/name.d.mts +19 -0
  87. package/dist/data-display/name.mjs +2 -0
  88. package/dist/data-display/name.mjs.map +1 -0
  89. package/dist/data-display/phone-number.cjs +1 -1
  90. package/dist/data-display/phone-number.cjs.map +1 -1
  91. package/dist/data-display/phone-number.d.mts +19 -0
  92. package/dist/data-display/phone-number.mjs +2 -0
  93. package/dist/data-display/phone-number.mjs.map +1 -0
  94. package/dist/data-display/role-badge.cjs +1 -1
  95. package/dist/data-display/role-badge.cjs.map +1 -1
  96. package/dist/data-display/role-badge.d.cts +1 -1
  97. package/dist/data-display/role-badge.d.mts +22 -0
  98. package/dist/data-display/role-badge.mjs +2 -0
  99. package/dist/data-display/role-badge.mjs.map +1 -0
  100. package/dist/data-display/statistic.cjs +1 -2
  101. package/dist/data-display/statistic.d.cts +3 -3
  102. package/dist/data-display/statistic.d.mts +57 -0
  103. package/dist/data-display/statistic.mjs +1 -0
  104. package/dist/data-display/user.cjs +1 -2
  105. package/dist/data-display/user.d.mts +23 -0
  106. package/dist/data-display/user.mjs +1 -0
  107. package/dist/date-D4NVl6C9.cjs +2 -0
  108. package/dist/date-D4NVl6C9.cjs.map +1 -0
  109. package/dist/date-fY3sUcLp.mjs +2 -0
  110. package/dist/date-fY3sUcLp.mjs.map +1 -0
  111. package/dist/dialog-BigPrWIj.cjs +2 -0
  112. package/dist/dialog-BigPrWIj.cjs.map +1 -0
  113. package/dist/dialog-CLDnvNH_.mjs +2 -0
  114. package/dist/dialog-CLDnvNH_.mjs.map +1 -0
  115. package/dist/dialog-CYHT9WNs.d.cts +90 -0
  116. package/dist/dialog-pWSVE0gd.d.mts +90 -0
  117. package/dist/dialogs/confirm-dialog.cjs +1 -1
  118. package/dist/dialogs/confirm-dialog.d.mts +142 -0
  119. package/dist/dialogs/confirm-dialog.mjs +2 -0
  120. package/dist/dialogs/confirm-dialog.mjs.map +1 -0
  121. package/dist/dialogs/detail-dialog/components/sidebar.cjs +1 -1
  122. package/dist/dialogs/detail-dialog/components/sidebar.d.cts +26 -26
  123. package/dist/dialogs/detail-dialog/components/sidebar.d.mts +209 -0
  124. package/dist/dialogs/detail-dialog/components/sidebar.mjs +1 -0
  125. package/dist/dialogs/detail-dialog/index.cjs +1 -1
  126. package/dist/dialogs/detail-dialog/index.cjs.map +1 -1
  127. package/dist/dialogs/detail-dialog/index.d.mts +45 -0
  128. package/dist/dialogs/detail-dialog/index.mjs +2 -0
  129. package/dist/dialogs/detail-dialog/index.mjs.map +1 -0
  130. package/dist/dialogs/error-dialog.cjs +1 -1
  131. package/dist/dialogs/error-dialog.d.mts +25 -0
  132. package/dist/dialogs/error-dialog.mjs +2 -0
  133. package/dist/dialogs/error-dialog.mjs.map +1 -0
  134. package/dist/dialogs/loading-dialog.cjs +1 -1
  135. package/dist/dialogs/loading-dialog.cjs.map +1 -1
  136. package/dist/dialogs/loading-dialog.d.mts +21 -0
  137. package/dist/dialogs/loading-dialog.mjs +2 -0
  138. package/dist/dialogs/loading-dialog.mjs.map +1 -0
  139. package/dist/dist-Cx5ufCdr.cjs +2 -0
  140. package/dist/dist-Cx5ufCdr.cjs.map +1 -0
  141. package/dist/dist-DVrfqn8H.mjs +2 -0
  142. package/dist/dist-DVrfqn8H.mjs.map +1 -0
  143. package/dist/drawer-BB8BZzDG.cjs +2 -0
  144. package/dist/drawer-BB8BZzDG.cjs.map +1 -0
  145. package/dist/drawer-CMD7JWH8.mjs +2 -0
  146. package/dist/drawer-CMD7JWH8.mjs.map +1 -0
  147. package/dist/dropdown-menu-BWhiVsEf.mjs +2 -0
  148. package/dist/dropdown-menu-BWhiVsEf.mjs.map +1 -0
  149. package/dist/dropdown-menu-CVh520yG.cjs +2 -0
  150. package/dist/dropdown-menu-CVh520yG.cjs.map +1 -0
  151. package/dist/features/descriptions/index.cjs +1 -1
  152. package/dist/features/descriptions/index.cjs.map +1 -1
  153. package/dist/features/descriptions/index.d.cts +3 -3
  154. package/dist/features/descriptions/index.d.mts +246 -0
  155. package/dist/features/descriptions/index.mjs +2 -0
  156. package/dist/features/descriptions/index.mjs.map +1 -0
  157. package/dist/features/search-modal/index.cjs +1 -1
  158. package/dist/features/search-modal/index.d.cts +2 -2
  159. package/dist/features/search-modal/index.d.mts +17 -0
  160. package/dist/features/search-modal/index.mjs +1 -0
  161. package/dist/features/tables/index.cjs +1 -1
  162. package/dist/features/tables/index.d.cts +1 -1
  163. package/dist/features/tables/index.d.mts +3 -0
  164. package/dist/features/tables/index.mjs +1 -0
  165. package/dist/features/tanstack-form/index.cjs +1 -1
  166. package/dist/features/tanstack-form/index.d.cts +1 -1
  167. package/dist/features/tanstack-form/index.d.mts +2 -0
  168. package/dist/features/tanstack-form/index.mjs +1 -0
  169. package/dist/features/text-editor/index.cjs +1 -1
  170. package/dist/features/text-editor/index.d.cts +1 -1
  171. package/dist/features/text-editor/index.d.mts +2 -0
  172. package/dist/features/text-editor/index.mjs +1 -0
  173. package/dist/field-BrlETeXX.cjs +2 -0
  174. package/dist/field-BrlETeXX.cjs.map +1 -0
  175. package/dist/field-dYemS0hQ.mjs +2 -0
  176. package/dist/field-dYemS0hQ.mjs.map +1 -0
  177. package/dist/flex-B6YSJzGe.mjs +2 -0
  178. package/dist/flex-B6YSJzGe.mjs.map +1 -0
  179. package/dist/flex-DmWmOBn5.cjs +2 -0
  180. package/dist/flex-DmWmOBn5.cjs.map +1 -0
  181. package/dist/heading-De4Pn3mZ.mjs +2 -0
  182. package/dist/heading-De4Pn3mZ.mjs.map +1 -0
  183. package/dist/heading-tGTqk3pA.cjs +2 -0
  184. package/dist/heading-tGTqk3pA.cjs.map +1 -0
  185. package/dist/image-D7OZ13Ib.mjs +2 -0
  186. package/dist/image-D7OZ13Ib.mjs.map +1 -0
  187. package/dist/image-W_Yb0xTB.cjs +2 -0
  188. package/dist/image-W_Yb0xTB.cjs.map +1 -0
  189. package/dist/index-BsWsCPh8.d.cts +1093 -0
  190. package/dist/index-CMqwTAAq.d.mts +2348 -0
  191. package/dist/index-Cm62M0Ft.d.mts +90 -0
  192. package/dist/index-DSciiDhn.d.cts +2348 -0
  193. package/dist/index-DXU6DwLg.d.mts +1093 -0
  194. package/dist/index-DiW-62hY.d.mts +85 -0
  195. package/dist/index-FIl1Am8j.d.cts +85 -0
  196. package/dist/index-KO98y6L0.d.cts +90 -0
  197. package/dist/index.cjs +1 -1
  198. package/dist/index.d.cts +11 -11
  199. package/dist/index.d.mts +93 -0
  200. package/dist/index.mjs +1 -0
  201. package/dist/input-B_ucx08i.d.cts +44 -0
  202. package/dist/input-Drm_rLe2.d.mts +44 -0
  203. package/dist/input-NJP2wQOm.mjs +2 -0
  204. package/dist/input-NJP2wQOm.mjs.map +1 -0
  205. package/dist/input-WJ0DLHTR.cjs +2 -0
  206. package/dist/input-WJ0DLHTR.cjs.map +1 -0
  207. package/dist/label-CC6fXVbC.cjs +2 -0
  208. package/dist/label-CC6fXVbC.cjs.map +1 -0
  209. package/dist/label-CUCpwS5D.mjs +2 -0
  210. package/dist/label-CUCpwS5D.mjs.map +1 -0
  211. package/dist/layouts/cms-layout/index.cjs +1 -1
  212. package/dist/layouts/cms-layout/index.d.cts +1 -1
  213. package/dist/layouts/cms-layout/index.d.mts +2 -0
  214. package/dist/layouts/cms-layout/index.mjs +1 -0
  215. package/dist/layouts/flex.cjs +1 -1
  216. package/dist/layouts/flex.d.cts +5 -5
  217. package/dist/layouts/flex.d.mts +117 -0
  218. package/dist/layouts/flex.mjs +1 -0
  219. package/dist/layouts/grid.cjs +1 -1
  220. package/dist/layouts/grid.d.mts +19 -0
  221. package/dist/layouts/grid.mjs +2 -0
  222. package/dist/layouts/grid.mjs.map +1 -0
  223. package/dist/layouts/payment-layout/index.cjs +1 -1
  224. package/dist/layouts/payment-layout/index.d.mts +74 -0
  225. package/dist/layouts/payment-layout/index.mjs +1 -0
  226. package/dist/pages/FeatureDeveloping.cjs +1 -1
  227. package/dist/pages/FeatureDeveloping.cjs.map +1 -1
  228. package/dist/pages/FeatureDeveloping.d.cts +2 -2
  229. package/dist/pages/FeatureDeveloping.d.mts +43 -0
  230. package/dist/pages/FeatureDeveloping.mjs +2 -0
  231. package/dist/pages/FeatureDeveloping.mjs.map +1 -0
  232. package/dist/pages/FeatureFixing.cjs +1 -1
  233. package/dist/pages/FeatureFixing.cjs.map +1 -1
  234. package/dist/pages/FeatureFixing.d.cts +2 -2
  235. package/dist/pages/FeatureFixing.d.mts +43 -0
  236. package/dist/pages/FeatureFixing.mjs +2 -0
  237. package/dist/pages/FeatureFixing.mjs.map +1 -0
  238. package/dist/pages/LoginPage.cjs +1 -1
  239. package/dist/pages/LoginPage.cjs.map +1 -1
  240. package/dist/pages/LoginPage.d.cts +2 -2
  241. package/dist/pages/LoginPage.d.mts +55 -0
  242. package/dist/pages/LoginPage.mjs +2 -0
  243. package/dist/pages/LoginPage.mjs.map +1 -0
  244. package/dist/pages/NotAuthorized.cjs +1 -1
  245. package/dist/pages/NotAuthorized.cjs.map +1 -1
  246. package/dist/pages/NotAuthorized.d.cts +2 -2
  247. package/dist/pages/NotAuthorized.d.mts +43 -0
  248. package/dist/pages/NotAuthorized.mjs +2 -0
  249. package/dist/pages/NotAuthorized.mjs.map +1 -0
  250. package/dist/pages/NotFound.cjs +1 -1
  251. package/dist/pages/NotFound.cjs.map +1 -1
  252. package/dist/pages/NotFound.d.cts +2 -2
  253. package/dist/pages/NotFound.d.mts +43 -0
  254. package/dist/pages/NotFound.mjs +2 -0
  255. package/dist/pages/NotFound.mjs.map +1 -0
  256. package/dist/pages/RegisterPage.cjs +1 -1
  257. package/dist/pages/RegisterPage.cjs.map +1 -1
  258. package/dist/pages/RegisterPage.d.cts +2 -2
  259. package/dist/pages/RegisterPage.d.mts +52 -0
  260. package/dist/pages/RegisterPage.mjs +2 -0
  261. package/dist/pages/RegisterPage.mjs.map +1 -0
  262. package/dist/pages/VerifyEmailPage.cjs +1 -1
  263. package/dist/pages/VerifyEmailPage.cjs.map +1 -1
  264. package/dist/pages/VerifyEmailPage.d.cts +2 -2
  265. package/dist/pages/VerifyEmailPage.d.mts +64 -0
  266. package/dist/pages/VerifyEmailPage.mjs +2 -0
  267. package/dist/pages/VerifyEmailPage.mjs.map +1 -0
  268. package/dist/paragraph-DYLaQtTV.mjs +2 -0
  269. package/dist/paragraph-DYLaQtTV.mjs.map +1 -0
  270. package/dist/paragraph-DvTZvbzw.cjs +2 -0
  271. package/dist/paragraph-DvTZvbzw.cjs.map +1 -0
  272. package/dist/payment-layout-DrQ0kZPX.mjs +2 -0
  273. package/dist/payment-layout-DrQ0kZPX.mjs.map +1 -0
  274. package/dist/payment-layout-DyILfyVG.cjs +2 -0
  275. package/dist/payment-layout-DyILfyVG.cjs.map +1 -0
  276. package/dist/popover-C8rcemA3.mjs +2 -0
  277. package/dist/popover-C8rcemA3.mjs.map +1 -0
  278. package/dist/popover-DBsC8Ltp.cjs +2 -0
  279. package/dist/popover-DBsC8Ltp.cjs.map +1 -0
  280. package/dist/progress-CLeM0e7Z.mjs +2 -0
  281. package/dist/progress-CLeM0e7Z.mjs.map +1 -0
  282. package/dist/progress-gvBqNiHp.cjs +2 -0
  283. package/dist/progress-gvBqNiHp.cjs.map +1 -0
  284. package/dist/radio-group-Y9bhdr55.mjs +2 -0
  285. package/dist/radio-group-Y9bhdr55.mjs.map +1 -0
  286. package/dist/radio-group-_TdMkv8w.cjs +2 -0
  287. package/dist/radio-group-_TdMkv8w.cjs.map +1 -0
  288. package/dist/resizable-CpCaSCFB.mjs +2 -0
  289. package/dist/resizable-CpCaSCFB.mjs.map +1 -0
  290. package/dist/resizable-sgpaHAb8.cjs +2 -0
  291. package/dist/resizable-sgpaHAb8.cjs.map +1 -0
  292. package/dist/search-modal-B-pzGcfP.cjs +2 -0
  293. package/dist/search-modal-B-pzGcfP.cjs.map +1 -0
  294. package/dist/search-modal-Bn-GOOCy.mjs +2 -0
  295. package/dist/search-modal-Bn-GOOCy.mjs.map +1 -0
  296. package/dist/select-CWLQHh8x.cjs +2 -0
  297. package/dist/select-CWLQHh8x.cjs.map +1 -0
  298. package/dist/select-LlPCZFSF.mjs +2 -0
  299. package/dist/select-LlPCZFSF.mjs.map +1 -0
  300. package/dist/separator-D3Gmkxzq.mjs +2 -0
  301. package/dist/separator-D3Gmkxzq.mjs.map +1 -0
  302. package/dist/separator-KuymG9g0.cjs +2 -0
  303. package/dist/separator-KuymG9g0.cjs.map +1 -0
  304. package/dist/sheet-BFlIfNaA.mjs +2 -0
  305. package/dist/sheet-BFlIfNaA.mjs.map +1 -0
  306. package/dist/sheet-CvKSi0UC.cjs +2 -0
  307. package/dist/sheet-CvKSi0UC.cjs.map +1 -0
  308. package/dist/sidebar-ChtCyu-n.mjs +2 -0
  309. package/dist/sidebar-ChtCyu-n.mjs.map +1 -0
  310. package/dist/sidebar-D5J2gcTw.cjs +2 -0
  311. package/dist/sidebar-D5J2gcTw.cjs.map +1 -0
  312. package/dist/skeleton-C51IdOfK.mjs +2 -0
  313. package/dist/skeleton-C51IdOfK.mjs.map +1 -0
  314. package/dist/skeleton-CX1USu1w.cjs +2 -0
  315. package/dist/skeleton-CX1USu1w.cjs.map +1 -0
  316. package/dist/spinner-CFxorYEt.cjs +2 -0
  317. package/dist/spinner-CFxorYEt.cjs.map +1 -0
  318. package/dist/spinner-eClTgHjk.mjs +2 -0
  319. package/dist/spinner-eClTgHjk.mjs.map +1 -0
  320. package/dist/statistic-DDXilD7q.cjs +2 -0
  321. package/dist/statistic-DDXilD7q.cjs.map +1 -0
  322. package/dist/statistic-cwLwcukn.mjs +2 -0
  323. package/dist/statistic-cwLwcukn.mjs.map +1 -0
  324. package/dist/switch-BP7EPatj.mjs +2 -0
  325. package/dist/switch-BP7EPatj.mjs.map +1 -0
  326. package/dist/switch-DVfOV7wP.cjs +2 -0
  327. package/dist/switch-DVfOV7wP.cjs.map +1 -0
  328. package/dist/systems/google.cjs +1 -1
  329. package/dist/systems/google.d.mts +53 -0
  330. package/dist/systems/google.mjs +2 -0
  331. package/dist/systems/google.mjs.map +1 -0
  332. package/dist/tables-CFrsk2lM.mjs +4 -0
  333. package/dist/tables-CFrsk2lM.mjs.map +1 -0
  334. package/dist/tables-CPKHe3k-.cjs +4 -0
  335. package/dist/tables-CPKHe3k-.cjs.map +1 -0
  336. package/dist/tanstack-form-DT1TqIDl.mjs +12 -0
  337. package/dist/tanstack-form-DT1TqIDl.mjs.map +1 -0
  338. package/dist/tanstack-form-DatI41wz.cjs +12 -0
  339. package/dist/tanstack-form-DatI41wz.cjs.map +1 -0
  340. package/dist/text-editor-5mA7XyaI.mjs +2 -0
  341. package/dist/text-editor-5mA7XyaI.mjs.map +1 -0
  342. package/dist/text-editor-CvJN3nSL.cjs +2 -0
  343. package/dist/text-editor-CvJN3nSL.cjs.map +1 -0
  344. package/dist/textarea-7HDXcaK9.mjs +2 -0
  345. package/dist/textarea-7HDXcaK9.mjs.map +1 -0
  346. package/dist/textarea-Cc9CF8wD.cjs +2 -0
  347. package/dist/textarea-Cc9CF8wD.cjs.map +1 -0
  348. package/dist/tooltip-CBdoIzoM.cjs +2 -0
  349. package/dist/tooltip-CBdoIzoM.cjs.map +1 -0
  350. package/dist/tooltip-Dxl5Wa8i.mjs +2 -0
  351. package/dist/tooltip-Dxl5Wa8i.mjs.map +1 -0
  352. package/dist/types-B5nyTWtO.mjs +2 -0
  353. package/dist/types-B5nyTWtO.mjs.map +1 -0
  354. package/dist/types-BD1t0Bj8.cjs +2 -0
  355. package/dist/types-BD1t0Bj8.cjs.map +1 -0
  356. package/dist/types-Cc_mLRAn.d.cts +24 -0
  357. package/dist/types-YLu40dXY.d.mts +24 -0
  358. package/dist/typography/paragraph.cjs +1 -1
  359. package/dist/typography/paragraph.d.cts +4 -4
  360. package/dist/typography/paragraph.d.mts +48 -0
  361. package/dist/typography/paragraph.mjs +1 -0
  362. package/dist/typography/title.cjs +1 -1
  363. package/dist/typography/title.d.mts +43 -0
  364. package/dist/typography/title.mjs +2 -0
  365. package/dist/typography/title.mjs.map +1 -0
  366. package/dist/ui/alert-dialog.cjs +1 -1
  367. package/dist/ui/alert-dialog.d.cts +12 -12
  368. package/dist/ui/alert-dialog.d.mts +90 -0
  369. package/dist/ui/alert-dialog.mjs +2 -0
  370. package/dist/ui/alert-dialog.mjs.map +1 -0
  371. package/dist/ui/alert.cjs +1 -1
  372. package/dist/ui/alert.d.cts +1 -1
  373. package/dist/ui/alert.d.mts +2 -0
  374. package/dist/ui/alert.mjs +1 -0
  375. package/dist/ui/aspect-ratio.cjs +1 -1
  376. package/dist/ui/aspect-ratio.d.cts +2 -2
  377. package/dist/ui/aspect-ratio.d.mts +24 -0
  378. package/dist/ui/aspect-ratio.mjs +2 -0
  379. package/dist/ui/aspect-ratio.mjs.map +1 -0
  380. package/dist/ui/avatar.cjs +1 -2
  381. package/dist/ui/avatar.d.cts +4 -4
  382. package/dist/ui/avatar.d.mts +35 -0
  383. package/dist/ui/avatar.mjs +1 -0
  384. package/dist/ui/badge.cjs +1 -2
  385. package/dist/ui/badge.d.cts +2 -42
  386. package/dist/ui/badge.d.mts +2 -0
  387. package/dist/ui/badge.mjs +1 -0
  388. package/dist/ui/breadcrumb.cjs +1 -1
  389. package/dist/ui/breadcrumb.cjs.map +1 -1
  390. package/dist/ui/breadcrumb.d.cts +8 -8
  391. package/dist/ui/breadcrumb.d.mts +72 -0
  392. package/dist/ui/breadcrumb.mjs +2 -0
  393. package/dist/ui/breadcrumb.mjs.map +1 -0
  394. package/dist/ui/button-group.cjs +1 -1
  395. package/dist/ui/button-group.cjs.map +1 -1
  396. package/dist/ui/button-group.d.cts +7 -7
  397. package/dist/ui/button-group.d.mts +50 -0
  398. package/dist/ui/button-group.mjs +2 -0
  399. package/dist/ui/button-group.mjs.map +1 -0
  400. package/dist/ui/button.cjs +1 -2
  401. package/dist/ui/button.d.cts +1 -1
  402. package/dist/ui/button.d.mts +2 -0
  403. package/dist/ui/button.mjs +1 -0
  404. package/dist/ui/buttons/add-new.cjs +1 -1
  405. package/dist/ui/buttons/add-new.cjs.map +1 -1
  406. package/dist/ui/buttons/add-new.d.mts +17 -0
  407. package/dist/ui/buttons/add-new.mjs +2 -0
  408. package/dist/ui/buttons/add-new.mjs.map +1 -0
  409. package/dist/ui/buttons/edit.cjs +1 -1
  410. package/dist/ui/buttons/edit.cjs.map +1 -1
  411. package/dist/ui/buttons/edit.d.mts +17 -0
  412. package/dist/ui/buttons/edit.mjs +2 -0
  413. package/dist/ui/buttons/edit.mjs.map +1 -0
  414. package/dist/ui/buttons/refresh.cjs +1 -1
  415. package/dist/ui/buttons/refresh.cjs.map +1 -1
  416. package/dist/ui/buttons/refresh.d.mts +17 -0
  417. package/dist/ui/buttons/refresh.mjs +2 -0
  418. package/dist/ui/buttons/refresh.mjs.map +1 -0
  419. package/dist/ui/buttons/trash.cjs +1 -1
  420. package/dist/ui/buttons/trash.cjs.map +1 -1
  421. package/dist/ui/buttons/trash.d.mts +17 -0
  422. package/dist/ui/buttons/trash.mjs +2 -0
  423. package/dist/ui/buttons/trash.mjs.map +1 -0
  424. package/dist/ui/buttons/upload-image.cjs +1 -1
  425. package/dist/ui/buttons/upload-image.cjs.map +1 -1
  426. package/dist/ui/buttons/upload-image.d.mts +24 -0
  427. package/dist/ui/buttons/upload-image.mjs +2 -0
  428. package/dist/ui/buttons/upload-image.mjs.map +1 -0
  429. package/dist/ui/calendar.cjs +1 -2
  430. package/dist/ui/calendar.d.cts +4 -4
  431. package/dist/ui/calendar.d.mts +45 -0
  432. package/dist/ui/calendar.mjs +1 -0
  433. package/dist/ui/card.cjs +1 -1
  434. package/dist/ui/card.d.cts +8 -8
  435. package/dist/ui/card.d.mts +63 -0
  436. package/dist/ui/card.mjs +2 -0
  437. package/dist/ui/card.mjs.map +1 -0
  438. package/dist/ui/carousel.cjs +1 -1
  439. package/dist/ui/carousel.cjs.map +1 -1
  440. package/dist/ui/carousel.d.cts +7 -7
  441. package/dist/ui/carousel.d.mts +71 -0
  442. package/dist/ui/carousel.mjs +2 -0
  443. package/dist/ui/carousel.mjs.map +1 -0
  444. package/dist/ui/checkbox.cjs +1 -2
  445. package/dist/ui/checkbox.d.cts +2 -2
  446. package/dist/ui/checkbox.d.mts +26 -0
  447. package/dist/ui/checkbox.mjs +1 -0
  448. package/dist/ui/collapsible.cjs +1 -1
  449. package/dist/ui/collapsible.d.cts +4 -4
  450. package/dist/ui/collapsible.d.mts +34 -0
  451. package/dist/ui/collapsible.mjs +2 -0
  452. package/dist/ui/collapsible.mjs.map +1 -0
  453. package/dist/ui/command.cjs +1 -2
  454. package/dist/ui/command.d.cts +11 -11
  455. package/dist/ui/command.d.mts +89 -0
  456. package/dist/ui/command.mjs +1 -0
  457. package/dist/ui/context-menu.cjs +1 -1
  458. package/dist/ui/context-menu.d.cts +16 -16
  459. package/dist/ui/context-menu.d.mts +125 -0
  460. package/dist/ui/context-menu.mjs +2 -0
  461. package/dist/ui/context-menu.mjs.map +1 -0
  462. package/dist/ui/dialog.cjs +1 -2
  463. package/dist/ui/dialog.d.cts +2 -90
  464. package/dist/ui/dialog.d.mts +2 -0
  465. package/dist/ui/dialog.mjs +1 -0
  466. package/dist/ui/drawer.cjs +1 -2
  467. package/dist/ui/drawer.d.cts +11 -11
  468. package/dist/ui/drawer.d.mts +72 -0
  469. package/dist/ui/drawer.mjs +1 -0
  470. package/dist/ui/dropdown-menu.cjs +1 -2
  471. package/dist/ui/dropdown-menu.d.cts +16 -16
  472. package/dist/ui/dropdown-menu.d.mts +127 -0
  473. package/dist/ui/dropdown-menu.mjs +1 -0
  474. package/dist/ui/empty.cjs +1 -1
  475. package/dist/ui/empty.d.cts +9 -9
  476. package/dist/ui/empty.d.mts +68 -0
  477. package/dist/ui/empty.mjs +2 -0
  478. package/dist/ui/empty.mjs.map +1 -0
  479. package/dist/ui/field.cjs +1 -1
  480. package/dist/ui/field.d.cts +22 -22
  481. package/dist/ui/field.d.mts +65 -0
  482. package/dist/ui/field.mjs +1 -0
  483. package/dist/ui/file-uploader.cjs +2 -2
  484. package/dist/ui/file-uploader.cjs.map +1 -1
  485. package/dist/ui/file-uploader.d.cts +2 -2
  486. package/dist/ui/file-uploader.d.mts +103 -0
  487. package/dist/ui/file-uploader.mjs +3 -0
  488. package/dist/ui/file-uploader.mjs.map +1 -0
  489. package/dist/ui/form.cjs +1 -1
  490. package/dist/ui/form.cjs.map +1 -1
  491. package/dist/ui/form.d.cts +10 -10
  492. package/dist/ui/form.d.mts +112 -0
  493. package/dist/ui/form.mjs +2 -0
  494. package/dist/ui/form.mjs.map +1 -0
  495. package/dist/ui/hover-card.cjs +1 -1
  496. package/dist/ui/hover-card.d.cts +4 -4
  497. package/dist/ui/hover-card.d.mts +37 -0
  498. package/dist/ui/hover-card.mjs +2 -0
  499. package/dist/ui/hover-card.mjs.map +1 -0
  500. package/dist/ui/image.cjs +1 -2
  501. package/dist/ui/image.d.mts +36 -0
  502. package/dist/ui/image.mjs +1 -0
  503. package/dist/ui/input-otp.cjs +1 -1
  504. package/dist/ui/input-otp.d.cts +5 -5
  505. package/dist/ui/input-otp.d.mts +59 -0
  506. package/dist/ui/input-otp.mjs +2 -0
  507. package/dist/ui/input-otp.mjs.map +1 -0
  508. package/dist/ui/input.cjs +1 -2
  509. package/dist/ui/input.d.cts +2 -44
  510. package/dist/ui/input.d.mts +2 -0
  511. package/dist/ui/input.mjs +1 -0
  512. package/dist/ui/inputs/search-input.cjs +1 -1
  513. package/dist/ui/inputs/search-input.cjs.map +1 -1
  514. package/dist/ui/inputs/search-input.d.cts +3 -3
  515. package/dist/ui/inputs/search-input.d.mts +29 -0
  516. package/dist/ui/inputs/search-input.mjs +2 -0
  517. package/dist/ui/inputs/search-input.mjs.map +1 -0
  518. package/dist/ui/item.cjs +1 -1
  519. package/dist/ui/item.cjs.map +1 -1
  520. package/dist/ui/item.d.cts +15 -15
  521. package/dist/ui/item.d.mts +102 -0
  522. package/dist/ui/item.mjs +2 -0
  523. package/dist/ui/item.mjs.map +1 -0
  524. package/dist/ui/label.cjs +1 -2
  525. package/dist/ui/label.d.cts +2 -2
  526. package/dist/ui/label.d.mts +24 -0
  527. package/dist/ui/label.mjs +1 -0
  528. package/dist/ui/menubar.cjs +1 -1
  529. package/dist/ui/menubar.d.cts +17 -17
  530. package/dist/ui/menubar.d.mts +135 -0
  531. package/dist/ui/menubar.mjs +2 -0
  532. package/dist/ui/menubar.mjs.map +1 -0
  533. package/dist/ui/multi-select.cjs +1 -1
  534. package/dist/ui/multi-select.cjs.map +1 -1
  535. package/dist/ui/multi-select.d.cts +3 -3
  536. package/dist/ui/multi-select.d.mts +118 -0
  537. package/dist/ui/multi-select.mjs +2 -0
  538. package/dist/ui/multi-select.mjs.map +1 -0
  539. package/dist/ui/navigation-menu.cjs +1 -1
  540. package/dist/ui/navigation-menu.d.cts +11 -11
  541. package/dist/ui/navigation-menu.d.mts +77 -0
  542. package/dist/ui/navigation-menu.mjs +2 -0
  543. package/dist/ui/navigation-menu.mjs.map +1 -0
  544. package/dist/ui/pagination.cjs +1 -1
  545. package/dist/ui/pagination.d.cts +9 -9
  546. package/dist/ui/pagination.d.mts +67 -0
  547. package/dist/ui/pagination.mjs +2 -0
  548. package/dist/ui/pagination.mjs.map +1 -0
  549. package/dist/ui/popover.cjs +1 -2
  550. package/dist/ui/popover.d.cts +6 -6
  551. package/dist/ui/popover.d.mts +52 -0
  552. package/dist/ui/popover.mjs +1 -0
  553. package/dist/ui/progress.cjs +1 -2
  554. package/dist/ui/progress.d.cts +2 -2
  555. package/dist/ui/progress.d.mts +23 -0
  556. package/dist/ui/progress.mjs +1 -0
  557. package/dist/ui/radio-group.cjs +1 -2
  558. package/dist/ui/radio-group.d.cts +3 -3
  559. package/dist/ui/radio-group.d.mts +37 -0
  560. package/dist/ui/radio-group.mjs +1 -0
  561. package/dist/ui/resizable.cjs +1 -2
  562. package/dist/ui/resizable.d.cts +9 -9
  563. package/dist/ui/resizable.d.mts +63 -0
  564. package/dist/ui/resizable.mjs +1 -0
  565. package/dist/ui/scroll-area.cjs +1 -1
  566. package/dist/ui/scroll-area.d.cts +5 -5
  567. package/dist/ui/scroll-area.d.mts +37 -0
  568. package/dist/ui/scroll-area.mjs +2 -0
  569. package/dist/ui/scroll-area.mjs.map +1 -0
  570. package/dist/ui/select.cjs +1 -2
  571. package/dist/ui/select.d.cts +9 -9
  572. package/dist/ui/select.d.mts +77 -0
  573. package/dist/ui/select.mjs +1 -0
  574. package/dist/ui/separator.cjs +1 -2
  575. package/dist/ui/separator.d.cts +2 -2
  576. package/dist/ui/separator.d.mts +34 -0
  577. package/dist/ui/separator.mjs +1 -0
  578. package/dist/ui/sheet.cjs +1 -2
  579. package/dist/ui/sheet.d.cts +9 -9
  580. package/dist/ui/sheet.d.mts +69 -0
  581. package/dist/ui/sheet.mjs +1 -0
  582. package/dist/ui/skeleton.cjs +1 -1
  583. package/dist/ui/skeleton.d.cts +2 -2
  584. package/dist/ui/skeleton.d.mts +27 -0
  585. package/dist/ui/skeleton.mjs +1 -0
  586. package/dist/ui/slider.cjs +1 -1
  587. package/dist/ui/slider.d.cts +2 -2
  588. package/dist/ui/slider.d.mts +26 -0
  589. package/dist/ui/slider.mjs +2 -0
  590. package/dist/ui/slider.mjs.map +1 -0
  591. package/dist/ui/sonner.cjs +1 -1
  592. package/dist/ui/sonner.d.cts +2 -2
  593. package/dist/ui/sonner.d.mts +24 -0
  594. package/dist/ui/sonner.mjs +2 -0
  595. package/dist/ui/sonner.mjs.map +1 -0
  596. package/dist/ui/spinner.cjs +1 -2
  597. package/dist/ui/spinner.d.cts +2 -2
  598. package/dist/ui/spinner.d.mts +25 -0
  599. package/dist/ui/spinner.mjs +1 -0
  600. package/dist/ui/switch.cjs +1 -2
  601. package/dist/ui/switch.d.cts +2 -2
  602. package/dist/ui/switch.d.mts +26 -0
  603. package/dist/ui/switch.mjs +1 -0
  604. package/dist/ui/table.cjs +1 -1
  605. package/dist/ui/table.d.cts +17 -17
  606. package/dist/ui/table.d.mts +73 -0
  607. package/dist/ui/table.mjs +2 -0
  608. package/dist/ui/table.mjs.map +1 -0
  609. package/dist/ui/tabs.cjs +1 -1
  610. package/dist/ui/tabs.d.cts +5 -5
  611. package/dist/ui/tabs.d.mts +44 -0
  612. package/dist/ui/tabs.mjs +2 -0
  613. package/dist/ui/tabs.mjs.map +1 -0
  614. package/dist/ui/textarea.cjs +1 -2
  615. package/dist/ui/textarea.d.cts +2 -2
  616. package/dist/ui/textarea.d.mts +30 -0
  617. package/dist/ui/textarea.mjs +1 -0
  618. package/dist/ui/toggle-group.cjs +1 -1
  619. package/dist/ui/toggle-group.cjs.map +1 -1
  620. package/dist/ui/toggle-group.d.cts +4 -4
  621. package/dist/ui/toggle-group.d.mts +39 -0
  622. package/dist/ui/toggle-group.mjs +2 -0
  623. package/dist/ui/toggle-group.mjs.map +1 -0
  624. package/dist/ui/toggle.cjs +1 -1
  625. package/dist/ui/toggle.d.cts +4 -4
  626. package/dist/ui/toggle.d.mts +32 -0
  627. package/dist/ui/toggle.mjs +2 -0
  628. package/dist/ui/toggle.mjs.map +1 -0
  629. package/dist/ui/tooltip.cjs +1 -2
  630. package/dist/ui/tooltip.d.cts +5 -5
  631. package/dist/ui/tooltip.d.mts +55 -0
  632. package/dist/ui/tooltip.mjs +1 -0
  633. package/dist/user-DtZy4P9d.mjs +2 -0
  634. package/dist/user-DtZy4P9d.mjs.map +1 -0
  635. package/dist/user-ii4FBhO1.cjs +2 -0
  636. package/dist/user-ii4FBhO1.cjs.map +1 -0
  637. package/package.json +100 -100
  638. package/dist/alert-BVsYpWFX.d.cts +0 -88
  639. package/dist/alert-D5VmhFT9.js +0 -2
  640. package/dist/alert-D5VmhFT9.js.map +0 -1
  641. package/dist/alert-DXmXDeGs.d.ts +0 -88
  642. package/dist/alert-JwECRZfz.cjs +0 -2
  643. package/dist/alert-JwECRZfz.cjs.map +0 -1
  644. package/dist/button-BBfGvggN.d.ts +0 -174
  645. package/dist/button-BEjRVw6s.d.cts +0 -174
  646. package/dist/button.variants-BruXd4VM.js +0 -2
  647. package/dist/button.variants-BruXd4VM.js.map +0 -1
  648. package/dist/button.variants-DgVFNsVc.cjs +0 -2
  649. package/dist/button.variants-DgVFNsVc.cjs.map +0 -1
  650. package/dist/cards/grid-product-card.d.ts +0 -37
  651. package/dist/cards/grid-product-card.js +0 -2
  652. package/dist/cards/grid-product-card.js.map +0 -1
  653. package/dist/cards/product-card.d.ts +0 -37
  654. package/dist/cards/product-card.js +0 -2
  655. package/dist/cards/product-card.js.map +0 -1
  656. package/dist/cards/simple-card.d.ts +0 -35
  657. package/dist/cards/simple-card.js +0 -2
  658. package/dist/cards/simple-card.js.map +0 -1
  659. package/dist/chunk-Bmb41Sf3.cjs +0 -1
  660. package/dist/close-Dflkky9q.cjs +0 -2
  661. package/dist/close-Dflkky9q.cjs.map +0 -1
  662. package/dist/close-DrkwaVXK.js +0 -2
  663. package/dist/close-DrkwaVXK.js.map +0 -1
  664. package/dist/cms-layout-B8maJRLp.cjs +0 -2
  665. package/dist/cms-layout-B8maJRLp.cjs.map +0 -1
  666. package/dist/cms-layout-CLeGdpMb.js +0 -2
  667. package/dist/cms-layout-CLeGdpMb.js.map +0 -1
  668. package/dist/data-display/country.d.ts +0 -22
  669. package/dist/data-display/country.js +0 -2
  670. package/dist/data-display/country.js.map +0 -1
  671. package/dist/data-display/data-list.d.ts +0 -43
  672. package/dist/data-display/data-list.js +0 -2
  673. package/dist/data-display/data-list.js.map +0 -1
  674. package/dist/data-display/date-tooltip.d.ts +0 -19
  675. package/dist/data-display/date-tooltip.js +0 -2
  676. package/dist/data-display/date-tooltip.js.map +0 -1
  677. package/dist/data-display/date.cjs.map +0 -1
  678. package/dist/data-display/date.d.ts +0 -39
  679. package/dist/data-display/date.js +0 -2
  680. package/dist/data-display/date.js.map +0 -1
  681. package/dist/data-display/empty.d.ts +0 -21
  682. package/dist/data-display/empty.js +0 -2
  683. package/dist/data-display/empty.js.map +0 -1
  684. package/dist/data-display/name.d.ts +0 -19
  685. package/dist/data-display/name.js +0 -2
  686. package/dist/data-display/name.js.map +0 -1
  687. package/dist/data-display/phone-number.d.ts +0 -19
  688. package/dist/data-display/phone-number.js +0 -2
  689. package/dist/data-display/phone-number.js.map +0 -1
  690. package/dist/data-display/role-badge.d.ts +0 -22
  691. package/dist/data-display/role-badge.js +0 -2
  692. package/dist/data-display/role-badge.js.map +0 -1
  693. package/dist/data-display/statistic.cjs.map +0 -1
  694. package/dist/data-display/statistic.d.ts +0 -57
  695. package/dist/data-display/statistic.js +0 -2
  696. package/dist/data-display/statistic.js.map +0 -1
  697. package/dist/data-display/user.cjs.map +0 -1
  698. package/dist/data-display/user.d.ts +0 -23
  699. package/dist/data-display/user.js +0 -2
  700. package/dist/data-display/user.js.map +0 -1
  701. package/dist/dialogs/confirm-dialog.d.ts +0 -142
  702. package/dist/dialogs/confirm-dialog.js +0 -2
  703. package/dist/dialogs/confirm-dialog.js.map +0 -1
  704. package/dist/dialogs/detail-dialog/components/sidebar.d.ts +0 -209
  705. package/dist/dialogs/detail-dialog/components/sidebar.js +0 -1
  706. package/dist/dialogs/detail-dialog/index.d.ts +0 -45
  707. package/dist/dialogs/detail-dialog/index.js +0 -2
  708. package/dist/dialogs/detail-dialog/index.js.map +0 -1
  709. package/dist/dialogs/error-dialog.d.ts +0 -25
  710. package/dist/dialogs/error-dialog.js +0 -2
  711. package/dist/dialogs/error-dialog.js.map +0 -1
  712. package/dist/dialogs/loading-dialog.d.ts +0 -21
  713. package/dist/dialogs/loading-dialog.js +0 -2
  714. package/dist/dialogs/loading-dialog.js.map +0 -1
  715. package/dist/features/descriptions/index.d.ts +0 -246
  716. package/dist/features/descriptions/index.js +0 -2
  717. package/dist/features/descriptions/index.js.map +0 -1
  718. package/dist/features/search-modal/index.d.ts +0 -17
  719. package/dist/features/search-modal/index.js +0 -1
  720. package/dist/features/tables/index.d.ts +0 -2
  721. package/dist/features/tables/index.js +0 -1
  722. package/dist/features/tanstack-form/index.d.ts +0 -2
  723. package/dist/features/tanstack-form/index.js +0 -1
  724. package/dist/features/text-editor/index.d.ts +0 -2
  725. package/dist/features/text-editor/index.js +0 -1
  726. package/dist/field-0gaEKxov.cjs +0 -2
  727. package/dist/field-0gaEKxov.cjs.map +0 -1
  728. package/dist/field-DG-kX3HU.js +0 -2
  729. package/dist/field-DG-kX3HU.js.map +0 -1
  730. package/dist/flex-BAfCk_in.cjs +0 -2
  731. package/dist/flex-BAfCk_in.cjs.map +0 -1
  732. package/dist/flex-D_XtSjf4.js +0 -2
  733. package/dist/flex-D_XtSjf4.js.map +0 -1
  734. package/dist/heading-BX7ZVnVg.cjs +0 -2
  735. package/dist/heading-BX7ZVnVg.cjs.map +0 -1
  736. package/dist/heading-Bw3eo6IT.js +0 -2
  737. package/dist/heading-Bw3eo6IT.js.map +0 -1
  738. package/dist/index--eHW_BCk.d.ts +0 -85
  739. package/dist/index-C257sc-c.d.ts +0 -90
  740. package/dist/index-C4ZFmaZm.d.cts +0 -2348
  741. package/dist/index-DWEpRM8i.d.cts +0 -1093
  742. package/dist/index-DnQeeNHV.d.ts +0 -1093
  743. package/dist/index-_MFRCXuJ.d.cts +0 -85
  744. package/dist/index-rNI5ia8r.d.cts +0 -90
  745. package/dist/index-rZ2RtGJp.d.ts +0 -2348
  746. package/dist/index.d.ts +0 -93
  747. package/dist/index.js +0 -1
  748. package/dist/layouts/cms-layout/index.d.ts +0 -2
  749. package/dist/layouts/cms-layout/index.js +0 -1
  750. package/dist/layouts/flex.d.ts +0 -117
  751. package/dist/layouts/flex.js +0 -1
  752. package/dist/layouts/grid.d.ts +0 -19
  753. package/dist/layouts/grid.js +0 -2
  754. package/dist/layouts/grid.js.map +0 -1
  755. package/dist/layouts/payment-layout/index.d.ts +0 -74
  756. package/dist/layouts/payment-layout/index.js +0 -1
  757. package/dist/pages/FeatureDeveloping.d.ts +0 -43
  758. package/dist/pages/FeatureDeveloping.js +0 -2
  759. package/dist/pages/FeatureDeveloping.js.map +0 -1
  760. package/dist/pages/FeatureFixing.d.ts +0 -43
  761. package/dist/pages/FeatureFixing.js +0 -2
  762. package/dist/pages/FeatureFixing.js.map +0 -1
  763. package/dist/pages/LoginPage.d.ts +0 -55
  764. package/dist/pages/LoginPage.js +0 -2
  765. package/dist/pages/LoginPage.js.map +0 -1
  766. package/dist/pages/NotAuthorized.d.ts +0 -43
  767. package/dist/pages/NotAuthorized.js +0 -2
  768. package/dist/pages/NotAuthorized.js.map +0 -1
  769. package/dist/pages/NotFound.d.ts +0 -43
  770. package/dist/pages/NotFound.js +0 -2
  771. package/dist/pages/NotFound.js.map +0 -1
  772. package/dist/pages/RegisterPage.d.ts +0 -52
  773. package/dist/pages/RegisterPage.js +0 -2
  774. package/dist/pages/RegisterPage.js.map +0 -1
  775. package/dist/pages/VerifyEmailPage.d.ts +0 -64
  776. package/dist/pages/VerifyEmailPage.js +0 -2
  777. package/dist/pages/VerifyEmailPage.js.map +0 -1
  778. package/dist/paragraph-D0x3Jc6W.cjs +0 -2
  779. package/dist/paragraph-D0x3Jc6W.cjs.map +0 -1
  780. package/dist/paragraph-ESjXXqHU.js +0 -2
  781. package/dist/paragraph-ESjXXqHU.js.map +0 -1
  782. package/dist/payment-layout-CksJbGsl.js +0 -2
  783. package/dist/payment-layout-CksJbGsl.js.map +0 -1
  784. package/dist/payment-layout-O7TNw2Cr.cjs +0 -2
  785. package/dist/payment-layout-O7TNw2Cr.cjs.map +0 -1
  786. package/dist/search-modal-Db8Xp2L4.cjs +0 -2
  787. package/dist/search-modal-Db8Xp2L4.cjs.map +0 -1
  788. package/dist/search-modal-DdonKbwA.js +0 -2
  789. package/dist/search-modal-DdonKbwA.js.map +0 -1
  790. package/dist/sidebar-BCuXtop_.js +0 -2
  791. package/dist/sidebar-BCuXtop_.js.map +0 -1
  792. package/dist/sidebar-CQZlWCK4.cjs +0 -2
  793. package/dist/sidebar-CQZlWCK4.cjs.map +0 -1
  794. package/dist/skeleton-DAcbjBGp.js +0 -2
  795. package/dist/skeleton-DAcbjBGp.js.map +0 -1
  796. package/dist/skeleton-oQFT4xR2.cjs +0 -2
  797. package/dist/skeleton-oQFT4xR2.cjs.map +0 -1
  798. package/dist/systems/google.d.ts +0 -53
  799. package/dist/systems/google.js +0 -2
  800. package/dist/systems/google.js.map +0 -1
  801. package/dist/tables-DbwtCMRI.js +0 -4
  802. package/dist/tables-DbwtCMRI.js.map +0 -1
  803. package/dist/tables-DgZbLZQP.cjs +0 -4
  804. package/dist/tables-DgZbLZQP.cjs.map +0 -1
  805. package/dist/tanstack-form-C3SGhsmN.cjs +0 -2
  806. package/dist/tanstack-form-C3SGhsmN.cjs.map +0 -1
  807. package/dist/tanstack-form-Ds_Zjt20.js +0 -2
  808. package/dist/tanstack-form-Ds_Zjt20.js.map +0 -1
  809. package/dist/text-editor-DhTxCxvH.cjs +0 -2
  810. package/dist/text-editor-DhTxCxvH.cjs.map +0 -1
  811. package/dist/text-editor-DwisU9_U.js +0 -2
  812. package/dist/text-editor-DwisU9_U.js.map +0 -1
  813. package/dist/typography/paragraph.d.ts +0 -48
  814. package/dist/typography/paragraph.js +0 -1
  815. package/dist/typography/title.d.ts +0 -43
  816. package/dist/typography/title.js +0 -2
  817. package/dist/typography/title.js.map +0 -1
  818. package/dist/ui/alert-dialog.d.ts +0 -90
  819. package/dist/ui/alert-dialog.js +0 -2
  820. package/dist/ui/alert-dialog.js.map +0 -1
  821. package/dist/ui/alert.d.ts +0 -2
  822. package/dist/ui/alert.js +0 -1
  823. package/dist/ui/aspect-ratio.d.ts +0 -24
  824. package/dist/ui/aspect-ratio.js +0 -2
  825. package/dist/ui/aspect-ratio.js.map +0 -1
  826. package/dist/ui/avatar.cjs.map +0 -1
  827. package/dist/ui/avatar.d.ts +0 -35
  828. package/dist/ui/avatar.js +0 -2
  829. package/dist/ui/avatar.js.map +0 -1
  830. package/dist/ui/badge.cjs.map +0 -1
  831. package/dist/ui/badge.d.ts +0 -42
  832. package/dist/ui/badge.js +0 -2
  833. package/dist/ui/badge.js.map +0 -1
  834. package/dist/ui/breadcrumb.d.ts +0 -72
  835. package/dist/ui/breadcrumb.js +0 -2
  836. package/dist/ui/breadcrumb.js.map +0 -1
  837. package/dist/ui/button-group.d.ts +0 -50
  838. package/dist/ui/button-group.js +0 -2
  839. package/dist/ui/button-group.js.map +0 -1
  840. package/dist/ui/button.cjs.map +0 -1
  841. package/dist/ui/button.d.ts +0 -2
  842. package/dist/ui/button.js +0 -2
  843. package/dist/ui/button.js.map +0 -1
  844. package/dist/ui/buttons/add-new.d.ts +0 -17
  845. package/dist/ui/buttons/add-new.js +0 -2
  846. package/dist/ui/buttons/add-new.js.map +0 -1
  847. package/dist/ui/buttons/edit.d.ts +0 -17
  848. package/dist/ui/buttons/edit.js +0 -2
  849. package/dist/ui/buttons/edit.js.map +0 -1
  850. package/dist/ui/buttons/refresh.d.ts +0 -17
  851. package/dist/ui/buttons/refresh.js +0 -2
  852. package/dist/ui/buttons/refresh.js.map +0 -1
  853. package/dist/ui/buttons/trash.d.ts +0 -17
  854. package/dist/ui/buttons/trash.js +0 -2
  855. package/dist/ui/buttons/trash.js.map +0 -1
  856. package/dist/ui/buttons/upload-image.d.ts +0 -24
  857. package/dist/ui/buttons/upload-image.js +0 -2
  858. package/dist/ui/buttons/upload-image.js.map +0 -1
  859. package/dist/ui/calendar.cjs.map +0 -1
  860. package/dist/ui/calendar.d.ts +0 -45
  861. package/dist/ui/calendar.js +0 -2
  862. package/dist/ui/calendar.js.map +0 -1
  863. package/dist/ui/card.d.ts +0 -63
  864. package/dist/ui/card.js +0 -2
  865. package/dist/ui/card.js.map +0 -1
  866. package/dist/ui/carousel.d.ts +0 -71
  867. package/dist/ui/carousel.js +0 -2
  868. package/dist/ui/carousel.js.map +0 -1
  869. package/dist/ui/checkbox.cjs.map +0 -1
  870. package/dist/ui/checkbox.d.ts +0 -26
  871. package/dist/ui/checkbox.js +0 -2
  872. package/dist/ui/checkbox.js.map +0 -1
  873. package/dist/ui/collapsible.d.ts +0 -34
  874. package/dist/ui/collapsible.js +0 -2
  875. package/dist/ui/collapsible.js.map +0 -1
  876. package/dist/ui/command.cjs.map +0 -1
  877. package/dist/ui/command.d.ts +0 -89
  878. package/dist/ui/command.js +0 -2
  879. package/dist/ui/command.js.map +0 -1
  880. package/dist/ui/context-menu.d.ts +0 -125
  881. package/dist/ui/context-menu.js +0 -2
  882. package/dist/ui/context-menu.js.map +0 -1
  883. package/dist/ui/dialog.cjs.map +0 -1
  884. package/dist/ui/dialog.d.ts +0 -90
  885. package/dist/ui/dialog.js +0 -2
  886. package/dist/ui/dialog.js.map +0 -1
  887. package/dist/ui/drawer.cjs.map +0 -1
  888. package/dist/ui/drawer.d.ts +0 -72
  889. package/dist/ui/drawer.js +0 -2
  890. package/dist/ui/drawer.js.map +0 -1
  891. package/dist/ui/dropdown-menu.cjs.map +0 -1
  892. package/dist/ui/dropdown-menu.d.ts +0 -127
  893. package/dist/ui/dropdown-menu.js +0 -2
  894. package/dist/ui/dropdown-menu.js.map +0 -1
  895. package/dist/ui/empty.d.ts +0 -68
  896. package/dist/ui/empty.js +0 -2
  897. package/dist/ui/empty.js.map +0 -1
  898. package/dist/ui/field.d.ts +0 -65
  899. package/dist/ui/field.js +0 -1
  900. package/dist/ui/file-uploader.d.ts +0 -103
  901. package/dist/ui/file-uploader.js +0 -3
  902. package/dist/ui/file-uploader.js.map +0 -1
  903. package/dist/ui/form.d.ts +0 -112
  904. package/dist/ui/form.js +0 -2
  905. package/dist/ui/form.js.map +0 -1
  906. package/dist/ui/hover-card.d.ts +0 -37
  907. package/dist/ui/hover-card.js +0 -2
  908. package/dist/ui/hover-card.js.map +0 -1
  909. package/dist/ui/image.cjs.map +0 -1
  910. package/dist/ui/image.d.ts +0 -36
  911. package/dist/ui/image.js +0 -2
  912. package/dist/ui/image.js.map +0 -1
  913. package/dist/ui/input-otp.d.ts +0 -59
  914. package/dist/ui/input-otp.js +0 -2
  915. package/dist/ui/input-otp.js.map +0 -1
  916. package/dist/ui/input.cjs.map +0 -1
  917. package/dist/ui/input.d.ts +0 -44
  918. package/dist/ui/input.js +0 -2
  919. package/dist/ui/input.js.map +0 -1
  920. package/dist/ui/inputs/search-input.d.ts +0 -29
  921. package/dist/ui/inputs/search-input.js +0 -2
  922. package/dist/ui/inputs/search-input.js.map +0 -1
  923. package/dist/ui/item.d.ts +0 -102
  924. package/dist/ui/item.js +0 -2
  925. package/dist/ui/item.js.map +0 -1
  926. package/dist/ui/label.cjs.map +0 -1
  927. package/dist/ui/label.d.ts +0 -24
  928. package/dist/ui/label.js +0 -2
  929. package/dist/ui/label.js.map +0 -1
  930. package/dist/ui/menubar.d.ts +0 -135
  931. package/dist/ui/menubar.js +0 -2
  932. package/dist/ui/menubar.js.map +0 -1
  933. package/dist/ui/multi-select.d.ts +0 -117
  934. package/dist/ui/multi-select.js +0 -2
  935. package/dist/ui/multi-select.js.map +0 -1
  936. package/dist/ui/navigation-menu.d.ts +0 -77
  937. package/dist/ui/navigation-menu.js +0 -2
  938. package/dist/ui/navigation-menu.js.map +0 -1
  939. package/dist/ui/pagination.d.ts +0 -67
  940. package/dist/ui/pagination.js +0 -2
  941. package/dist/ui/pagination.js.map +0 -1
  942. package/dist/ui/popover.cjs.map +0 -1
  943. package/dist/ui/popover.d.ts +0 -52
  944. package/dist/ui/popover.js +0 -2
  945. package/dist/ui/popover.js.map +0 -1
  946. package/dist/ui/progress.cjs.map +0 -1
  947. package/dist/ui/progress.d.ts +0 -23
  948. package/dist/ui/progress.js +0 -2
  949. package/dist/ui/progress.js.map +0 -1
  950. package/dist/ui/radio-group.cjs.map +0 -1
  951. package/dist/ui/radio-group.d.ts +0 -37
  952. package/dist/ui/radio-group.js +0 -2
  953. package/dist/ui/radio-group.js.map +0 -1
  954. package/dist/ui/resizable.cjs.map +0 -1
  955. package/dist/ui/resizable.d.ts +0 -63
  956. package/dist/ui/resizable.js +0 -2
  957. package/dist/ui/resizable.js.map +0 -1
  958. package/dist/ui/scroll-area.d.ts +0 -37
  959. package/dist/ui/scroll-area.js +0 -2
  960. package/dist/ui/scroll-area.js.map +0 -1
  961. package/dist/ui/select.cjs.map +0 -1
  962. package/dist/ui/select.d.ts +0 -77
  963. package/dist/ui/select.js +0 -2
  964. package/dist/ui/select.js.map +0 -1
  965. package/dist/ui/separator.cjs.map +0 -1
  966. package/dist/ui/separator.d.ts +0 -34
  967. package/dist/ui/separator.js +0 -2
  968. package/dist/ui/separator.js.map +0 -1
  969. package/dist/ui/sheet.cjs.map +0 -1
  970. package/dist/ui/sheet.d.ts +0 -69
  971. package/dist/ui/sheet.js +0 -2
  972. package/dist/ui/sheet.js.map +0 -1
  973. package/dist/ui/skeleton.d.ts +0 -27
  974. package/dist/ui/skeleton.js +0 -1
  975. package/dist/ui/slider.d.ts +0 -26
  976. package/dist/ui/slider.js +0 -2
  977. package/dist/ui/slider.js.map +0 -1
  978. package/dist/ui/sonner.d.ts +0 -24
  979. package/dist/ui/sonner.js +0 -2
  980. package/dist/ui/sonner.js.map +0 -1
  981. package/dist/ui/spinner.cjs.map +0 -1
  982. package/dist/ui/spinner.d.ts +0 -25
  983. package/dist/ui/spinner.js +0 -2
  984. package/dist/ui/spinner.js.map +0 -1
  985. package/dist/ui/switch.cjs.map +0 -1
  986. package/dist/ui/switch.d.ts +0 -26
  987. package/dist/ui/switch.js +0 -2
  988. package/dist/ui/switch.js.map +0 -1
  989. package/dist/ui/table.d.ts +0 -73
  990. package/dist/ui/table.js +0 -2
  991. package/dist/ui/table.js.map +0 -1
  992. package/dist/ui/tabs.d.ts +0 -44
  993. package/dist/ui/tabs.js +0 -2
  994. package/dist/ui/tabs.js.map +0 -1
  995. package/dist/ui/textarea.cjs.map +0 -1
  996. package/dist/ui/textarea.d.ts +0 -30
  997. package/dist/ui/textarea.js +0 -2
  998. package/dist/ui/textarea.js.map +0 -1
  999. package/dist/ui/toggle-group.d.ts +0 -39
  1000. package/dist/ui/toggle-group.js +0 -2
  1001. package/dist/ui/toggle-group.js.map +0 -1
  1002. package/dist/ui/toggle.d.ts +0 -32
  1003. package/dist/ui/toggle.js +0 -2
  1004. package/dist/ui/toggle.js.map +0 -1
  1005. package/dist/ui/tooltip.cjs.map +0 -1
  1006. package/dist/ui/tooltip.d.ts +0 -55
  1007. package/dist/ui/tooltip.js +0 -2
  1008. package/dist/ui/tooltip.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"data-list.js","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.ts.map
@@ -1,2 +0,0 @@
1
- "use client";import{DateDisplay as e}from"./date.js";import{jsx as t,jsxs as n}from"react/jsx-runtime";import{Badge as r}from"@/components/ui/badge";import{Tooltip as i,TooltipContent as a,TooltipProvider as o,TooltipTrigger as s}from"@/components/ui/tooltip";const c=({date:c})=>t(o,{children:n(i,{children:[t(s,{asChild:!0,children:t(r,{"data-slot":`date-tooltip-trigger`,className:`h-fit`,children:t(e,{date:c,format:`medium`,className:`text-xs font-normal text-text-negative`})})}),t(a,{"data-slot":`date-tooltip-content`,children:t(e,{date:c,format:`full`,showTime:!0,className:`font-[Inter]! font-medium`})})]})});export{c as DateTooltip};
2
- //# sourceMappingURL=date-tooltip.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"date-tooltip.js","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":"oQAsBA,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 +0,0 @@
1
- {"version":3,"file":"date.cjs","names":["DateDisplay: React.FC<DateDisplayProps>","TIME_IN_SECONDS","vietnameseLocale","vietnameseHolidays"],"sources":["../../packages/components/data-display/date.tsx"],"sourcesContent":["'use client';\n\nimport { useCallback, useMemo } from 'react';\n\nimport { format, isThisMonth, isThisWeek, isThisYear, isToday, isTomorrow, isValid, isYesterday, parseISO } from '@customafk/react-toolkit/date-fns';\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { TIME_IN_SECONDS, vietnameseHolidays, vietnameseLocale } from '@/constants';\n\ninterface DateDisplayProps {\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 * Controls how the date is formatted.\n * - `'short'` — `15/03/24`\n * - `'medium'` — `15/03/2024` (default)\n * - `'long'` — `15 tháng 3, 2024`\n * - `'full'` — `Thứ Sáu, ngày 15 tháng 3 năm 2024`\n * - `'relative'` — `2 giờ trước`\n * - `'datetime'` — `15/03/2024 14:30`\n * - `'time'` — `14:30`\n * - `'smart'` — auto-selects the most human-readable format based on recency\n */\n format?:\n | 'short' // 15/03/24\n | 'medium' // 15/03/2024\n | 'long' // 15 tháng 3, 2024\n | 'full' // Thứ Sáu, ngày 15 tháng 3 năm 2024\n | 'relative' // 2 giờ trước\n | 'datetime' // 15/03/2024 14:30\n | 'time' // 14:30\n | 'smart'; // auto-selects format based on recency\n /** When `true`, appends any recognised Vietnamese public holiday name to the formatted date. Defaults to `false`. */\n showHoliday?: boolean;\n /** When `true`, appends the time component to the formatted output. Defaults to `false`. */\n showTime?: boolean;\n /** Additional CSS classes applied to the `<time>` element. */\n className?: string;\n /** Custom HTML `title` attribute; defaults to the full ISO datetime string. */\n title?: string;\n}\n\n/**\n * Renders a formatted date using Vietnamese locale conventions inside a semantic `<time>` element.\n *\n * @example\n * ```tsx\n * import { DateDisplay } from '@customafk/lunas-ui/data-display/date';\n *\n * <DateDisplay date=\"2024-03-15T14:30:00Z\" format=\"medium\" showTime />\n * ```\n */\nexport const DateDisplay: React.FC<DateDisplayProps> = ({\n date,\n format: formatType = 'medium',\n showHoliday = false,\n showTime = false,\n className = '',\n title,\n}) => {\n const parsedDate = useMemo(() => {\n try {\n if (date instanceof Date) return isValid(date) ? date : null;\n if (typeof date === 'string') {\n const parsed = parseISO(date);\n return isValid(parsed) ? parsed : new Date(date);\n }\n if (typeof date === 'number') {\n const parsed = new Date(date);\n return isValid(parsed) ? parsed : null;\n }\n return null;\n } catch {\n return null;\n }\n }, [date]);\n\n const formatRelativeTime = useCallback((d: Date): string => {\n const diffInSeconds = Math.floor((Date.now() - d.getTime()) / 1000);\n if (diffInSeconds < 60) return 'Vừa xong';\n if (diffInSeconds < 3600) return `${Math.floor(diffInSeconds / TIME_IN_SECONDS.MINUTE)} phút trước`;\n if (diffInSeconds < 86400) return `${Math.floor(diffInSeconds / TIME_IN_SECONDS.HOUR)} giờ trước`;\n if (diffInSeconds < 604800) return `${Math.floor(diffInSeconds / TIME_IN_SECONDS.DAY)} ngày trước`;\n if (diffInSeconds < 2592000) return `${Math.floor(diffInSeconds / TIME_IN_SECONDS.WEEK)} tuần trước`;\n if (diffInSeconds < 31536000) return `${Math.floor(diffInSeconds / TIME_IN_SECONDS.MONTH)} tháng trước`;\n return `${Math.floor(diffInSeconds / TIME_IN_SECONDS.YEAR)} năm trước`;\n }, []);\n\n const getVietnameseWeekday = useCallback((d: Date, short = false): string => {\n return short ? vietnameseLocale.weekdaysShort[d.getDay()] : vietnameseLocale.weekdays[d.getDay()];\n }, []);\n\n const getVietnameseMonth = useCallback((d: Date, short = false): string => {\n return short ? vietnameseLocale.monthsShort[d.getMonth()] : vietnameseLocale.months[d.getMonth()];\n }, []);\n\n const getHoliday = useCallback((d: Date): string | null => {\n const monthDay = format(d, 'MM-dd') as keyof typeof vietnameseHolidays;\n return vietnameseHolidays[monthDay] || null;\n }, []);\n\n const getSmartFormat = useCallback(\n (d: Date): string => {\n if (isToday(d)) return showTime ? `Hôm nay ${format(d, 'HH:mm')}` : 'Hôm nay';\n if (isYesterday(d)) return showTime ? `Hôm qua ${format(d, 'HH:mm')}` : 'Hôm qua';\n if (isTomorrow(d)) return showTime ? `Ngày mai ${format(d, 'HH:mm')}` : 'Ngày mai';\n if (isThisWeek(d)) {\n const weekday = getVietnameseWeekday(d);\n return showTime ? `${weekday} ${format(d, 'HH:mm')}` : weekday;\n }\n if (isThisMonth(d)) {\n const day = format(d, 'd');\n return showTime ? `${day}/${format(d, 'M')} ${format(d, 'HH:mm')}` : `${day}/${format(d, 'M')}`;\n }\n if (isThisYear(d)) return showTime ? format(d, 'd/M HH:mm') : format(d, 'd/M');\n return showTime ? format(d, 'd/M/yyyy HH:mm') : format(d, 'd/M/yyyy');\n },\n [getVietnameseWeekday, showTime]\n );\n\n const formatDate = useCallback(\n (d: Date, type: string): string => {\n const timeStr = showTime ? format(d, ', HH:mm:ss') : '';\n switch (type) {\n case 'short':\n return format(d, 'd/M/yy') + timeStr;\n case 'medium':\n return format(d, 'dd/MM/yyyy') + timeStr;\n case 'long':\n return `${format(d, 'd')} ${getVietnameseMonth(d)} ${format(d, 'yyyy')}` + timeStr;\n case 'full':\n return `${getVietnameseWeekday(d)}, ngày ${format(d, 'd')} ${getVietnameseMonth(d)} năm ${format(d, 'yyyy')}` + timeStr;\n case 'relative':\n return formatRelativeTime(d);\n case 'datetime':\n return format(d, 'd/M/yyyy HH:mm');\n case 'time':\n return format(d, 'HH:mm');\n case 'smart':\n return getSmartFormat(d);\n default:\n return format(d, 'd/M/yyyy') + timeStr;\n }\n },\n [getSmartFormat, getVietnameseMonth, getVietnameseWeekday, formatRelativeTime, showTime]\n );\n\n if (!parsedDate) {\n return <span className={cn('text-sm text-text-positive-subtle', className)}>--/--/----</span>;\n }\n\n const formattedDate = formatDate(parsedDate, formatType);\n const holiday = showHoliday ? getHoliday(parsedDate) : null;\n const displayText = holiday ? `${formattedDate} (${holiday})` : formattedDate;\n const tooltipTitle = title || format(parsedDate, 'EEEE, d MMMM yyyy HH:mm:ss');\n\n return (\n <time\n data-slot=\"date-display\"\n dateTime={parsedDate.toISOString()}\n className={cn('tabular-nums text-xs text-text-positive-weak transition-colors', className)}\n title={tooltipTitle}\n >\n {displayText}\n </time>\n );\n};\n"],"mappings":"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"}
@@ -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.ts.map
@@ -1,2 +0,0 @@
1
- "use client";import{cn as e}from"@customafk/react-toolkit/utils";import{jsx as t}from"react/jsx-runtime";import{useCallback as n,useMemo as r}from"react";import{format as i,isThisMonth as a,isThisWeek as o,isThisYear as s,isToday as c,isTomorrow as l,isValid as u,isYesterday as d,parseISO as f}from"@customafk/react-toolkit/date-fns";import{TIME_IN_SECONDS as p,vietnameseHolidays as m,vietnameseLocale as h}from"@/constants";const g=({date:g,format:_=`medium`,showHoliday:v=!1,showTime:y=!1,className:b=``,title:x})=>{let S=r(()=>{try{if(g instanceof Date)return u(g)?g:null;if(typeof g==`string`){let e=f(g);return u(e)?e:new Date(g)}if(typeof g==`number`){let e=new Date(g);return u(e)?e:null}return null}catch{return null}},[g]),C=n(e=>{let t=Math.floor((Date.now()-e.getTime())/1e3);return t<60?`Vừa xong`:t<3600?`${Math.floor(t/p.MINUTE)} phút trước`:t<86400?`${Math.floor(t/p.HOUR)} giờ trước`:t<604800?`${Math.floor(t/p.DAY)} ngày trước`:t<2592e3?`${Math.floor(t/p.WEEK)} tuần trước`:t<31536e3?`${Math.floor(t/p.MONTH)} tháng trước`:`${Math.floor(t/p.YEAR)} năm trước`},[]),w=n((e,t=!1)=>t?h.weekdaysShort[e.getDay()]:h.weekdays[e.getDay()],[]),T=n((e,t=!1)=>t?h.monthsShort[e.getMonth()]:h.months[e.getMonth()],[]),E=n(e=>m[i(e,`MM-dd`)]||null,[]),D=n(e=>{if(c(e))return y?`Hôm nay ${i(e,`HH:mm`)}`:`Hôm nay`;if(d(e))return y?`Hôm qua ${i(e,`HH:mm`)}`:`Hôm qua`;if(l(e))return y?`Ngày mai ${i(e,`HH:mm`)}`:`Ngày mai`;if(o(e)){let t=w(e);return y?`${t} ${i(e,`HH:mm`)}`:t}if(a(e)){let t=i(e,`d`);return y?`${t}/${i(e,`M`)} ${i(e,`HH:mm`)}`:`${t}/${i(e,`M`)}`}return s(e)?y?i(e,`d/M HH:mm`):i(e,`d/M`):y?i(e,`d/M/yyyy HH:mm`):i(e,`d/M/yyyy`)},[w,y]),O=n((e,t)=>{let n=y?i(e,`, HH:mm:ss`):``;switch(t){case`short`:return i(e,`d/M/yy`)+n;case`medium`:return i(e,`dd/MM/yyyy`)+n;case`long`:return`${i(e,`d`)} ${T(e)} ${i(e,`yyyy`)}`+n;case`full`:return`${w(e)}, ngày ${i(e,`d`)} ${T(e)} năm ${i(e,`yyyy`)}`+n;case`relative`:return C(e);case`datetime`:return i(e,`d/M/yyyy HH:mm`);case`time`:return i(e,`HH:mm`);case`smart`:return D(e);default:return i(e,`d/M/yyyy`)+n}},[D,T,w,C,y]);if(!S)return t(`span`,{className:e(`text-sm text-text-positive-subtle`,b),children:`--/--/----`});let k=O(S,_),A=v?E(S):null,j=A?`${k} (${A})`:k,M=x||i(S,`EEEE, d MMMM yyyy HH:mm:ss`);return t(`time`,{"data-slot":`date-display`,dateTime:S.toISOString(),className:e(`tabular-nums text-xs text-text-positive-weak transition-colors`,b),title:M,children:j})};export{g as DateDisplay};
2
- //# sourceMappingURL=date.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"date.js","names":["DateDisplay: React.FC<DateDisplayProps>"],"sources":["../../packages/components/data-display/date.tsx"],"sourcesContent":["'use client';\n\nimport { useCallback, useMemo } from 'react';\n\nimport { format, isThisMonth, isThisWeek, isThisYear, isToday, isTomorrow, isValid, isYesterday, parseISO } from '@customafk/react-toolkit/date-fns';\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { TIME_IN_SECONDS, vietnameseHolidays, vietnameseLocale } from '@/constants';\n\ninterface DateDisplayProps {\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 * Controls how the date is formatted.\n * - `'short'` — `15/03/24`\n * - `'medium'` — `15/03/2024` (default)\n * - `'long'` — `15 tháng 3, 2024`\n * - `'full'` — `Thứ Sáu, ngày 15 tháng 3 năm 2024`\n * - `'relative'` — `2 giờ trước`\n * - `'datetime'` — `15/03/2024 14:30`\n * - `'time'` — `14:30`\n * - `'smart'` — auto-selects the most human-readable format based on recency\n */\n format?:\n | 'short' // 15/03/24\n | 'medium' // 15/03/2024\n | 'long' // 15 tháng 3, 2024\n | 'full' // Thứ Sáu, ngày 15 tháng 3 năm 2024\n | 'relative' // 2 giờ trước\n | 'datetime' // 15/03/2024 14:30\n | 'time' // 14:30\n | 'smart'; // auto-selects format based on recency\n /** When `true`, appends any recognised Vietnamese public holiday name to the formatted date. Defaults to `false`. */\n showHoliday?: boolean;\n /** When `true`, appends the time component to the formatted output. Defaults to `false`. */\n showTime?: boolean;\n /** Additional CSS classes applied to the `<time>` element. */\n className?: string;\n /** Custom HTML `title` attribute; defaults to the full ISO datetime string. */\n title?: string;\n}\n\n/**\n * Renders a formatted date using Vietnamese locale conventions inside a semantic `<time>` element.\n *\n * @example\n * ```tsx\n * import { DateDisplay } from '@customafk/lunas-ui/data-display/date';\n *\n * <DateDisplay date=\"2024-03-15T14:30:00Z\" format=\"medium\" showTime />\n * ```\n */\nexport const DateDisplay: React.FC<DateDisplayProps> = ({\n date,\n format: formatType = 'medium',\n showHoliday = false,\n showTime = false,\n className = '',\n title,\n}) => {\n const parsedDate = useMemo(() => {\n try {\n if (date instanceof Date) return isValid(date) ? date : null;\n if (typeof date === 'string') {\n const parsed = parseISO(date);\n return isValid(parsed) ? parsed : new Date(date);\n }\n if (typeof date === 'number') {\n const parsed = new Date(date);\n return isValid(parsed) ? parsed : null;\n }\n return null;\n } catch {\n return null;\n }\n }, [date]);\n\n const formatRelativeTime = useCallback((d: Date): string => {\n const diffInSeconds = Math.floor((Date.now() - d.getTime()) / 1000);\n if (diffInSeconds < 60) return 'Vừa xong';\n if (diffInSeconds < 3600) return `${Math.floor(diffInSeconds / TIME_IN_SECONDS.MINUTE)} phút trước`;\n if (diffInSeconds < 86400) return `${Math.floor(diffInSeconds / TIME_IN_SECONDS.HOUR)} giờ trước`;\n if (diffInSeconds < 604800) return `${Math.floor(diffInSeconds / TIME_IN_SECONDS.DAY)} ngày trước`;\n if (diffInSeconds < 2592000) return `${Math.floor(diffInSeconds / TIME_IN_SECONDS.WEEK)} tuần trước`;\n if (diffInSeconds < 31536000) return `${Math.floor(diffInSeconds / TIME_IN_SECONDS.MONTH)} tháng trước`;\n return `${Math.floor(diffInSeconds / TIME_IN_SECONDS.YEAR)} năm trước`;\n }, []);\n\n const getVietnameseWeekday = useCallback((d: Date, short = false): string => {\n return short ? vietnameseLocale.weekdaysShort[d.getDay()] : vietnameseLocale.weekdays[d.getDay()];\n }, []);\n\n const getVietnameseMonth = useCallback((d: Date, short = false): string => {\n return short ? vietnameseLocale.monthsShort[d.getMonth()] : vietnameseLocale.months[d.getMonth()];\n }, []);\n\n const getHoliday = useCallback((d: Date): string | null => {\n const monthDay = format(d, 'MM-dd') as keyof typeof vietnameseHolidays;\n return vietnameseHolidays[monthDay] || null;\n }, []);\n\n const getSmartFormat = useCallback(\n (d: Date): string => {\n if (isToday(d)) return showTime ? `Hôm nay ${format(d, 'HH:mm')}` : 'Hôm nay';\n if (isYesterday(d)) return showTime ? `Hôm qua ${format(d, 'HH:mm')}` : 'Hôm qua';\n if (isTomorrow(d)) return showTime ? `Ngày mai ${format(d, 'HH:mm')}` : 'Ngày mai';\n if (isThisWeek(d)) {\n const weekday = getVietnameseWeekday(d);\n return showTime ? `${weekday} ${format(d, 'HH:mm')}` : weekday;\n }\n if (isThisMonth(d)) {\n const day = format(d, 'd');\n return showTime ? `${day}/${format(d, 'M')} ${format(d, 'HH:mm')}` : `${day}/${format(d, 'M')}`;\n }\n if (isThisYear(d)) return showTime ? format(d, 'd/M HH:mm') : format(d, 'd/M');\n return showTime ? format(d, 'd/M/yyyy HH:mm') : format(d, 'd/M/yyyy');\n },\n [getVietnameseWeekday, showTime]\n );\n\n const formatDate = useCallback(\n (d: Date, type: string): string => {\n const timeStr = showTime ? format(d, ', HH:mm:ss') : '';\n switch (type) {\n case 'short':\n return format(d, 'd/M/yy') + timeStr;\n case 'medium':\n return format(d, 'dd/MM/yyyy') + timeStr;\n case 'long':\n return `${format(d, 'd')} ${getVietnameseMonth(d)} ${format(d, 'yyyy')}` + timeStr;\n case 'full':\n return `${getVietnameseWeekday(d)}, ngày ${format(d, 'd')} ${getVietnameseMonth(d)} năm ${format(d, 'yyyy')}` + timeStr;\n case 'relative':\n return formatRelativeTime(d);\n case 'datetime':\n return format(d, 'd/M/yyyy HH:mm');\n case 'time':\n return format(d, 'HH:mm');\n case 'smart':\n return getSmartFormat(d);\n default:\n return format(d, 'd/M/yyyy') + timeStr;\n }\n },\n [getSmartFormat, getVietnameseMonth, getVietnameseWeekday, formatRelativeTime, showTime]\n );\n\n if (!parsedDate) {\n return <span className={cn('text-sm text-text-positive-subtle', className)}>--/--/----</span>;\n }\n\n const formattedDate = formatDate(parsedDate, formatType);\n const holiday = showHoliday ? getHoliday(parsedDate) : null;\n const displayText = holiday ? `${formattedDate} (${holiday})` : formattedDate;\n const tooltipTitle = title || format(parsedDate, 'EEEE, d MMMM yyyy HH:mm:ss');\n\n return (\n <time\n data-slot=\"date-display\"\n dateTime={parsedDate.toISOString()}\n className={cn('tabular-nums text-xs text-text-positive-weak transition-colors', className)}\n title={tooltipTitle}\n >\n {displayText}\n </time>\n );\n};\n"],"mappings":"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"}
@@ -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.ts.map
@@ -1,2 +0,0 @@
1
- "use client";import{PackageOpenIcon as e}from"lucide-react";import{cn as t}from"@customafk/react-toolkit/utils";import{jsx as n,jsxs as r}from"react/jsx-runtime";const i=({label:i=`No data to display.`,className:a})=>r(`div`,{"data-slot":`empty-display`,className:t(`flex size-full flex-col items-center justify-center gap-2 text-text-positive-muted`,a),children:[n(e,{size:52,strokeWidth:1}),n(`p`,{className:`text-sm`,children:i})]});export{i as EmptyDisplay};
2
- //# sourceMappingURL=empty.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"empty.js","names":["EmptyDisplay: React.FC<EmptyDisplayProps>"],"sources":["../../packages/components/data-display/empty.tsx"],"sourcesContent":["'use client';\n\nimport { PackageOpenIcon } from 'lucide-react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\ntype EmptyDisplayProps = {\n /** Message shown below the empty-state icon. Defaults to `'No data to display.'`. */\n label?: string;\n /** Additional CSS classes applied to the wrapping container. */\n className?: string;\n};\n\n/**\n * A full-area empty-state placeholder with a package icon and a configurable message.\n *\n * @example\n * ```tsx\n * import { EmptyDisplay } from '@customafk/lunas-ui/data-display/empty';\n *\n * <EmptyDisplay label=\"No results found.\" />\n * ```\n */\nexport const EmptyDisplay: React.FC<EmptyDisplayProps> = ({ label = 'No data to display.', className }) => {\n return (\n <div data-slot=\"empty-display\" className={cn('flex size-full flex-col items-center justify-center gap-2 text-text-positive-muted', className)}>\n <PackageOpenIcon size={52} strokeWidth={1} />\n <p className=\"text-sm\">{label}</p>\n </div>\n );\n};\n"],"mappings":"kKAuBA,MAAaA,GAA6C,CAAE,QAAQ,sBAAuB,eAEvF,EAAC,MAAA,CAAI,YAAU,gBAAgB,UAAW,EAAG,qFAAsF,EAAU,WAC3I,EAAC,EAAA,CAAgB,KAAM,GAAI,YAAa,GAAK,CAC7C,EAAC,IAAA,CAAE,UAAU,mBAAW,GAAU,CAAA,EAC9B"}
@@ -1,19 +0,0 @@
1
- //#region packages/components/data-display/name.d.ts
2
- type NameDisplayProps = {
3
- /** The full name string to display; shown truncated inline and in full via tooltip. */
4
- name: string;
5
- };
6
- /**
7
- * Renders a clamped, truncated name with a tooltip that reveals the complete text on hover.
8
- *
9
- * @example
10
- * ```tsx
11
- * import { NameDisplay } from '@customafk/lunas-ui/data-display/name';
12
- *
13
- * <NameDisplay name="Nguyễn Văn An" />
14
- * ```
15
- */
16
- declare const NameDisplay: React.FC<NameDisplayProps>;
17
- //#endregion
18
- export { NameDisplay };
19
- //# sourceMappingURL=name.d.ts.map
@@ -1,2 +0,0 @@
1
- "use client";import{t as e}from"../paragraph-ESjXXqHU.js";import{Tooltip as t,TooltipContent as n,TooltipTrigger as r}from"../ui/tooltip.js";import{jsx as i,jsxs as a}from"react/jsx-runtime";const o=({name:o})=>a(t,{children:[i(r,{"data-slot":`name-display`,children:i(e,{variant:`sm`,className:`line-clamp-2 w-full truncate text-wrap pb-px text-start`,children:o})}),i(n,{align:`start`,className:`max-w-80 whitespace-pre-line text-wrap break-keep`,children:o})]});export{o as NameDisplay};
2
- //# sourceMappingURL=name.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"name.js","names":["NameDisplay: React.FC<NameDisplayProps>"],"sources":["../../packages/components/data-display/name.tsx"],"sourcesContent":["'use client';\n\nimport { Paragraph } from '../typography/paragraph';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '../ui/tooltip';\n\ntype NameDisplayProps = {\n /** The full name string to display; shown truncated inline and in full via tooltip. */\n name: string;\n};\n\n/**\n * Renders a clamped, truncated name with a tooltip that reveals the complete text on hover.\n *\n * @example\n * ```tsx\n * import { NameDisplay } from '@customafk/lunas-ui/data-display/name';\n *\n * <NameDisplay name=\"Nguyễn Văn An\" />\n * ```\n */\nexport const NameDisplay: React.FC<NameDisplayProps> = ({ name }) => {\n return (\n <Tooltip>\n <TooltipTrigger data-slot=\"name-display\">\n <Paragraph variant=\"sm\" className=\"line-clamp-2 w-full truncate text-wrap pb-px text-start\">\n {name}\n </Paragraph>\n </TooltipTrigger>\n <TooltipContent align=\"start\" className=\"max-w-80 whitespace-pre-line text-wrap break-keep\">\n {name}\n </TooltipContent>\n </Tooltip>\n );\n};\n"],"mappings":"+LAoBA,MAAaA,GAA2C,CAAE,UAEtD,EAAC,EAAA,CAAA,SAAA,CACC,EAAC,EAAA,CAAe,YAAU,wBACxB,EAAC,EAAA,CAAU,QAAQ,KAAK,UAAU,mEAC/B,GACS,EACG,CACjB,EAAC,EAAA,CAAe,MAAM,QAAQ,UAAU,6DACrC,GACc,CAAA,CAAA,CACT"}
@@ -1,19 +0,0 @@
1
- //#region packages/components/data-display/phone-number.d.ts
2
- type PhoneNumberDisplayProps = {
3
- /** The raw phone number string (e.g. `'0901234567'`); automatically formatted as `(090) 123-4567` with a +84 tooltip. */
4
- value: string;
5
- };
6
- /**
7
- * Formats and displays a Vietnamese phone number with a tooltip showing the international dialling format.
8
- *
9
- * @example
10
- * ```tsx
11
- * import { PhoneNumberDisplay } from '@customafk/lunas-ui/data-display/phone-number';
12
- *
13
- * <PhoneNumberDisplay value="0901234567" />
14
- * ```
15
- */
16
- declare const PhoneNumberDisplay: React.FC<PhoneNumberDisplayProps>;
17
- //#endregion
18
- export { PhoneNumberDisplay };
19
- //# sourceMappingURL=phone-number.d.ts.map
@@ -1,2 +0,0 @@
1
- "use client";import{Tooltip as e,TooltipContent as t,TooltipTrigger as n}from"../ui/tooltip.js";import{jsx as r,jsxs as i}from"react/jsx-runtime";const a=({value:a})=>i(e,{children:[r(n,{asChild:!0,children:r(`p`,{"data-slot":`phone-number-display`,className:`cursor-default font-number text-sm text-text-positive tabular-nums transition-colors`,children:a.replace(/(\d{3})(\d{3})(\d{4})/,`($1) $2-$3`)})}),r(t,{align:`start`,children:r(`p`,{children:a.slice(1).replace(/(\d{2})(\d{3})(\d{4})/,`(00) (+84) ($1) $2-$3`)})})]});export{a as PhoneNumberDisplay};
2
- //# sourceMappingURL=phone-number.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"phone-number.js","names":["PhoneNumberDisplay: React.FC<PhoneNumberDisplayProps>"],"sources":["../../packages/components/data-display/phone-number.tsx"],"sourcesContent":["'use client';\n\nimport { Tooltip, TooltipContent, TooltipTrigger } from '../ui/tooltip';\n\ntype PhoneNumberDisplayProps = {\n /** The raw phone number string (e.g. `'0901234567'`); automatically formatted as `(090) 123-4567` with a +84 tooltip. */\n value: string;\n};\n\n/**\n * Formats and displays a Vietnamese phone number with a tooltip showing the international dialling format.\n *\n * @example\n * ```tsx\n * import { PhoneNumberDisplay } from '@customafk/lunas-ui/data-display/phone-number';\n *\n * <PhoneNumberDisplay value=\"0901234567\" />\n * ```\n */\nexport const PhoneNumberDisplay: React.FC<PhoneNumberDisplayProps> = ({ value }) => {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <p data-slot=\"phone-number-display\" className=\"cursor-default font-number text-sm text-text-positive tabular-nums transition-colors\">\n {value.replace(/(\\d{3})(\\d{3})(\\d{4})/, '($1) $2-$3')}\n </p>\n </TooltipTrigger>\n <TooltipContent align=\"start\">\n <p>{value.slice(1).replace(/(\\d{2})(\\d{3})(\\d{4})/, '(00) (+84) ($1) $2-$3')}</p>\n </TooltipContent>\n </Tooltip>\n );\n};\n"],"mappings":"kJAmBA,MAAaA,GAAyD,CAAE,WAEpE,EAAC,EAAA,CAAA,SAAA,CACC,EAAC,EAAA,CAAe,QAAA,YACd,EAAC,IAAA,CAAE,YAAU,uBAAuB,UAAU,gGAC3C,EAAM,QAAQ,wBAAyB,aAAa,EACnD,EACW,CACjB,EAAC,EAAA,CAAe,MAAM,iBACpB,EAAC,IAAA,CAAA,SAAG,EAAM,MAAM,EAAE,CAAC,QAAQ,wBAAyB,wBAAwB,CAAA,CAAK,EAClE,CAAA,CAAA,CACT"}
@@ -1,22 +0,0 @@
1
- import { ERole } from "@/types";
2
-
3
- //#region packages/components/data-display/role-badge.d.ts
4
- type RoleBadgeProps = {
5
- /** The user role enum value that determines the badge label and colour. */
6
- status: ERole;
7
- };
8
- /**
9
- * Renders a colour-coded badge for a user role (e.g. Admin, Staff, User).
10
- *
11
- * @example
12
- * ```tsx
13
- * import { RoleBadge } from '@customafk/lunas-ui/data-display/role-badge';
14
- * import { ERole } from '@customafk/lunas-ui/types';
15
- *
16
- * <RoleBadge status={ERole.ADMIN} />
17
- * ```
18
- */
19
- declare const RoleBadge: React.FC<RoleBadgeProps>;
20
- //#endregion
21
- export { RoleBadge };
22
- //# sourceMappingURL=role-badge.d.ts.map
@@ -1,2 +0,0 @@
1
- "use client";import{Badge as e}from"../ui/badge.js";import{jsx as t}from"react/jsx-runtime";import{ERole as n}from"@/types";const r={[n.ADMIN]:`primary`,[n.SUPER_ADMIN]:`danger`,[n.MODERATOR]:`info`,[n.STAFF]:`accent`,[n.USER]:`muted`},i={[n.SUPER_ADMIN]:`Super Admin`,[n.ADMIN]:`Admin`,[n.MODERATOR]:`Moderator`,[n.STAFF]:`Staff`,[n.USER]:`User`},a=({status:n})=>t(e,{"data-slot":`role-badge`,color:r[n],className:`min-w-24 justify-center`,children:i[n]});export{a as RoleBadge};
2
- //# sourceMappingURL=role-badge.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"role-badge.js","names":["ROLE_COLORS: Record<ERole, React.ComponentProps<typeof Badge>['color']>","ROLE_LABELS: Record<ERole, string>","RoleBadge: React.FC<RoleBadgeProps>"],"sources":["../../packages/components/data-display/role-badge.tsx"],"sourcesContent":["'use client';\n\nimport { ERole } from '@/types';\n\nimport { Badge } from '../ui/badge';\n\nconst ROLE_COLORS: Record<ERole, React.ComponentProps<typeof Badge>['color']> = {\n [ERole.ADMIN]: 'primary',\n [ERole.SUPER_ADMIN]: 'danger',\n [ERole.MODERATOR]: 'info',\n [ERole.STAFF]: 'accent',\n [ERole.USER]: 'muted',\n};\n\nconst ROLE_LABELS: Record<ERole, string> = {\n [ERole.SUPER_ADMIN]: 'Super Admin',\n [ERole.ADMIN]: 'Admin',\n [ERole.MODERATOR]: 'Moderator',\n [ERole.STAFF]: 'Staff',\n [ERole.USER]: 'User',\n};\n\ntype RoleBadgeProps = {\n /** The user role enum value that determines the badge label and colour. */\n status: ERole;\n};\n\n/**\n * Renders a colour-coded badge for a user role (e.g. Admin, Staff, User).\n *\n * @example\n * ```tsx\n * import { RoleBadge } from '@customafk/lunas-ui/data-display/role-badge';\n * import { ERole } from '@customafk/lunas-ui/types';\n *\n * <RoleBadge status={ERole.ADMIN} />\n * ```\n */\nexport const RoleBadge: React.FC<RoleBadgeProps> = ({ status }) => {\n return (\n <Badge data-slot=\"role-badge\" color={ROLE_COLORS[status]} className=\"min-w-24 justify-center\">\n {ROLE_LABELS[status]}\n </Badge>\n );\n};\n"],"mappings":"4HAMA,MAAMA,EAA0E,EAC7E,EAAM,OAAQ,WACd,EAAM,aAAc,UACpB,EAAM,WAAY,QAClB,EAAM,OAAQ,UACd,EAAM,MAAO,QACf,CAEKC,EAAqC,EACxC,EAAM,aAAc,eACpB,EAAM,OAAQ,SACd,EAAM,WAAY,aAClB,EAAM,OAAQ,SACd,EAAM,MAAO,OACf,CAkBYC,GAAuC,CAAE,YAElD,EAAC,EAAA,CAAM,YAAU,aAAa,MAAO,EAAY,GAAS,UAAU,mCACjE,EAAY,IACP"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"statistic.cjs","names":["options: Intl.NumberFormatOptions"],"sources":["../../packages/components/data-display/statistic.tsx"],"sourcesContent":["'use client';\n\nimport { memo, useCallback, useMemo } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '@customafk/react-toolkit/utils';\n\nconst statisticVariants = cva('inline-flex items-center gap-1 font-number tabular-nums transition-colors', {\n variants: {\n size: {\n xs: 'text-xs',\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg',\n xl: 'text-xl',\n },\n trend: {\n neutral: 'text-text-positive-strong',\n up: 'text-success',\n down: 'text-danger',\n },\n },\n defaultVariants: {\n size: 'lg',\n trend: 'neutral',\n },\n});\n\nexport type StatisticProps = VariantProps<typeof statisticVariants> & {\n /** Character used to separate the decimal part. Defaults to `'.'`. */\n decimalSeparator?: string;\n /** Character used to separate thousands groups. Defaults to `','`. */\n groupSeparator?: string;\n /** Optional node rendered before the numeric value (e.g. a currency symbol). */\n prefix?: React.ReactNode;\n /** Optional node rendered after the numeric value (e.g. a unit label). */\n suffix?: React.ReactNode;\n /** Number of decimal digits to display; omit to show all significant digits. */\n precision?: number;\n /** Rounding strategy applied before formatting. Defaults to `'round'`. */\n roundingMode?: 'round' | 'floor' | 'ceil';\n /** When `true`, pads the decimal part with trailing zeros up to `precision`. Defaults to `false`. */\n showTrailingZeros?: boolean;\n /** The numeric (or numeric-string) value to format and display. */\n value: number | string;\n /** Additional CSS classes applied to the wrapper element. */\n className?: string;\n /** Colour trend indicator: `'neutral'` (default), `'up'` (green), or `'down'` (red). */\n trend?: 'neutral' | 'up' | 'down';\n};\n\n/**\n * A memoised numeric display component with locale-aware formatting, optional prefix/suffix, trend colouring, and configurable rounding.\n *\n * @example\n * ```tsx\n * import { Statistic } from '@customafk/lunas-ui/data-display/statistic';\n *\n * <Statistic value={1234567.89} precision={2} prefix=\"$\" trend=\"up\" size=\"lg\" />\n * ```\n */\nexport const Statistic = memo(\n ({\n decimalSeparator = '.',\n groupSeparator = ',',\n prefix: Prefix,\n suffix: Suffix,\n precision,\n roundingMode = 'round',\n showTrailingZeros = false,\n size = 'lg',\n trend = 'neutral',\n value,\n className,\n }: StatisticProps) => {\n const applyRounding = useCallback(\n (num: number, precisionValue: number): number => {\n const multiplier = 10 ** precisionValue;\n switch (roundingMode) {\n case 'floor':\n return Math.floor(num * multiplier) / multiplier;\n case 'ceil':\n return Math.ceil(num * multiplier) / multiplier;\n default:\n return Math.round(num * multiplier) / multiplier;\n }\n },\n [roundingMode]\n );\n\n const formatOptions = useMemo((): Intl.NumberFormatOptions => {\n const options: Intl.NumberFormatOptions = {};\n if (typeof precision === 'number' && precision >= 0) {\n if (showTrailingZeros) {\n options.minimumFractionDigits = precision;\n options.maximumFractionDigits = precision;\n } else {\n options.maximumFractionDigits = precision;\n }\n }\n return options;\n }, [precision, showTrailingZeros]);\n\n const formatNumber = useCallback(\n (num: number): string => {\n let processedNum = num;\n if (typeof precision === 'number' && precision >= 0) {\n processedNum = applyRounding(num, precision);\n }\n return processedNum.toLocaleString('en-US', formatOptions);\n },\n [applyRounding, formatOptions, precision]\n );\n\n const processedValue = useMemo((): string => {\n if (typeof value === 'number') {\n if (Number.isNaN(value) || !Number.isFinite(value)) return 'N/A';\n return formatNumber(value);\n }\n if (typeof value === 'string') {\n const trimmedValue = value.trim();\n if (!trimmedValue) return 'N/A';\n const numValue = Number(trimmedValue);\n if (Number.isNaN(numValue) || !Number.isFinite(numValue)) return 'N/A';\n return formatNumber(numValue);\n }\n return 'N/A';\n }, [value, formatNumber]);\n\n const finalFormattedValue = useMemo((): string => {\n if (decimalSeparator === '.' && groupSeparator === ',') return processedValue;\n return processedValue.replace(/,/g, groupSeparator).replace(/\\./g, decimalSeparator);\n }, [processedValue, decimalSeparator, groupSeparator]);\n\n return (\n <div data-slot=\"statistic\" className={cn(statisticVariants({ size, trend }), className)}>\n {Prefix && <span data-slot=\"statistic-prefix\">{Prefix}</span>}\n <p data-slot=\"statistic-value\">{finalFormattedValue}</p>\n {Suffix && <span data-slot=\"statistic-suffix\">{Suffix}</span>}\n </div>\n );\n }\n);\nStatistic.displayName = 'Statistic';\n"],"mappings":"8LAMA,MAAM,GAAA,EAAA,EAAA,KAAwB,4EAA6E,CACzG,SAAU,CACR,KAAM,CACJ,GAAI,UACJ,GAAI,UACJ,GAAI,YACJ,GAAI,UACJ,GAAI,UACL,CACD,MAAO,CACL,QAAS,4BACT,GAAI,eACJ,KAAM,cACP,CACF,CACD,gBAAiB,CACf,KAAM,KACN,MAAO,UACR,CACF,CAAC,CAmCW,GAAA,EAAA,EAAA,OACV,CACC,mBAAmB,IACnB,iBAAiB,IACjB,OAAQ,EACR,OAAQ,EACR,YACA,eAAe,QACf,oBAAoB,GACpB,OAAO,KACP,QAAQ,UACR,QACA,eACoB,CACpB,IAAM,GAAA,EAAA,EAAA,cACH,EAAa,IAAmC,CAC/C,IAAM,EAAa,IAAM,EACzB,OAAQ,EAAR,CACE,IAAK,QACH,OAAO,KAAK,MAAM,EAAM,EAAW,CAAG,EACxC,IAAK,OACH,OAAO,KAAK,KAAK,EAAM,EAAW,CAAG,EACvC,QACE,OAAO,KAAK,MAAM,EAAM,EAAW,CAAG,IAG5C,CAAC,EAAa,CACf,CAEK,GAAA,EAAA,EAAA,aAAwD,CAC5D,IAAMA,EAAoC,EAAE,CAS5C,OARI,OAAO,GAAc,UAAY,GAAa,IAC5C,IACF,EAAQ,sBAAwB,GAGhC,EAAQ,sBAAwB,GAG7B,GACN,CAAC,EAAW,EAAkB,CAAC,CAE5B,GAAA,EAAA,EAAA,aACH,GAAwB,CACvB,IAAI,EAAe,EAInB,OAHI,OAAO,GAAc,UAAY,GAAa,IAChD,EAAe,EAAc,EAAK,EAAU,EAEvC,EAAa,eAAe,QAAS,EAAc,EAE5D,CAAC,EAAe,EAAe,EAAU,CAC1C,CAEK,GAAA,EAAA,EAAA,aAAuC,CAC3C,GAAI,OAAO,GAAU,SAEnB,OADI,OAAO,MAAM,EAAM,EAAI,CAAC,OAAO,SAAS,EAAM,CAAS,MACpD,EAAa,EAAM,CAE5B,GAAI,OAAO,GAAU,SAAU,CAC7B,IAAM,EAAe,EAAM,MAAM,CACjC,GAAI,CAAC,EAAc,MAAO,MAC1B,IAAM,EAAW,OAAO,EAAa,CAErC,OADI,OAAO,MAAM,EAAS,EAAI,CAAC,OAAO,SAAS,EAAS,CAAS,MAC1D,EAAa,EAAS,CAE/B,MAAO,OACN,CAAC,EAAO,EAAa,CAAC,CAEnB,GAAA,EAAA,EAAA,aACA,IAAqB,KAAO,IAAmB,IAAY,EACxD,EAAe,QAAQ,KAAM,EAAe,CAAC,QAAQ,MAAO,EAAiB,CACnF,CAAC,EAAgB,EAAkB,EAAe,CAAC,CAEtD,OACE,EAAA,EAAA,MAAC,MAAA,CAAI,YAAU,YAAY,WAAA,EAAA,EAAA,IAAc,EAAkB,CAAE,OAAM,QAAO,CAAC,CAAE,EAAU,WACpF,IAAU,EAAA,EAAA,KAAC,OAAA,CAAK,YAAU,4BAAoB,GAAc,EAC7D,EAAA,EAAA,KAAC,IAAA,CAAE,YAAU,2BAAmB,GAAwB,CACvD,IAAU,EAAA,EAAA,KAAC,OAAA,CAAK,YAAU,4BAAoB,GAAc,GACzD,EAGX,CACD,EAAU,YAAc"}
@@ -1,57 +0,0 @@
1
- import { VariantProps } from "class-variance-authority";
2
- import * as react4 from "react";
3
- import * as class_variance_authority_types0 from "class-variance-authority/types";
4
-
5
- //#region packages/components/data-display/statistic.d.ts
6
- declare const statisticVariants: (props?: ({
7
- size?: "xs" | "sm" | "md" | "lg" | "xl" | null | undefined;
8
- trend?: "neutral" | "up" | "down" | null | undefined;
9
- } & class_variance_authority_types0.ClassProp) | undefined) => string;
10
- type StatisticProps = VariantProps<typeof statisticVariants> & {
11
- /** Character used to separate the decimal part. Defaults to `'.'`. */
12
- decimalSeparator?: string;
13
- /** Character used to separate thousands groups. Defaults to `','`. */
14
- groupSeparator?: string;
15
- /** Optional node rendered before the numeric value (e.g. a currency symbol). */
16
- prefix?: React.ReactNode;
17
- /** Optional node rendered after the numeric value (e.g. a unit label). */
18
- suffix?: React.ReactNode;
19
- /** Number of decimal digits to display; omit to show all significant digits. */
20
- precision?: number;
21
- /** Rounding strategy applied before formatting. Defaults to `'round'`. */
22
- roundingMode?: 'round' | 'floor' | 'ceil';
23
- /** When `true`, pads the decimal part with trailing zeros up to `precision`. Defaults to `false`. */
24
- showTrailingZeros?: boolean;
25
- /** The numeric (or numeric-string) value to format and display. */
26
- value: number | string;
27
- /** Additional CSS classes applied to the wrapper element. */
28
- className?: string;
29
- /** Colour trend indicator: `'neutral'` (default), `'up'` (green), or `'down'` (red). */
30
- trend?: 'neutral' | 'up' | 'down';
31
- };
32
- /**
33
- * A memoised numeric display component with locale-aware formatting, optional prefix/suffix, trend colouring, and configurable rounding.
34
- *
35
- * @example
36
- * ```tsx
37
- * import { Statistic } from '@customafk/lunas-ui/data-display/statistic';
38
- *
39
- * <Statistic value={1234567.89} precision={2} prefix="$" trend="up" size="lg" />
40
- * ```
41
- */
42
- declare const Statistic: react4.MemoExoticComponent<({
43
- decimalSeparator,
44
- groupSeparator,
45
- prefix: Prefix,
46
- suffix: Suffix,
47
- precision,
48
- roundingMode,
49
- showTrailingZeros,
50
- size,
51
- trend,
52
- value,
53
- className
54
- }: StatisticProps) => react4.JSX.Element>;
55
- //#endregion
56
- export { Statistic, StatisticProps };
57
- //# sourceMappingURL=statistic.d.ts.map
@@ -1,2 +0,0 @@
1
- "use client";import{cn as e}from"@customafk/react-toolkit/utils";import{cva as t}from"class-variance-authority";import{jsx as n,jsxs as r}from"react/jsx-runtime";import{memo as i,useCallback as a,useMemo as o}from"react";const s=t(`inline-flex items-center gap-1 font-number tabular-nums transition-colors`,{variants:{size:{xs:`text-xs`,sm:`text-sm`,md:`text-base`,lg:`text-lg`,xl:`text-xl`},trend:{neutral:`text-text-positive-strong`,up:`text-success`,down:`text-danger`}},defaultVariants:{size:`lg`,trend:`neutral`}}),c=i(({decimalSeparator:t=`.`,groupSeparator:i=`,`,prefix:c,suffix:l,precision:u,roundingMode:d=`round`,showTrailingZeros:f=!1,size:p=`lg`,trend:m=`neutral`,value:h,className:g})=>{let _=a((e,t)=>{let n=10**t;switch(d){case`floor`:return Math.floor(e*n)/n;case`ceil`:return Math.ceil(e*n)/n;default:return Math.round(e*n)/n}},[d]),v=o(()=>{let e={};return typeof u==`number`&&u>=0&&(f&&(e.minimumFractionDigits=u),e.maximumFractionDigits=u),e},[u,f]),y=a(e=>{let t=e;return typeof u==`number`&&u>=0&&(t=_(e,u)),t.toLocaleString(`en-US`,v)},[_,v,u]),b=o(()=>{if(typeof h==`number`)return Number.isNaN(h)||!Number.isFinite(h)?`N/A`:y(h);if(typeof h==`string`){let e=h.trim();if(!e)return`N/A`;let t=Number(e);return Number.isNaN(t)||!Number.isFinite(t)?`N/A`:y(t)}return`N/A`},[h,y]),x=o(()=>t===`.`&&i===`,`?b:b.replace(/,/g,i).replace(/\./g,t),[b,t,i]);return r(`div`,{"data-slot":`statistic`,className:e(s({size:p,trend:m}),g),children:[c&&n(`span`,{"data-slot":`statistic-prefix`,children:c}),n(`p`,{"data-slot":`statistic-value`,children:x}),l&&n(`span`,{"data-slot":`statistic-suffix`,children:l})]})});c.displayName=`Statistic`;export{c as Statistic};
2
- //# sourceMappingURL=statistic.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"statistic.js","names":["options: Intl.NumberFormatOptions"],"sources":["../../packages/components/data-display/statistic.tsx"],"sourcesContent":["'use client';\n\nimport { memo, useCallback, useMemo } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '@customafk/react-toolkit/utils';\n\nconst statisticVariants = cva('inline-flex items-center gap-1 font-number tabular-nums transition-colors', {\n variants: {\n size: {\n xs: 'text-xs',\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg',\n xl: 'text-xl',\n },\n trend: {\n neutral: 'text-text-positive-strong',\n up: 'text-success',\n down: 'text-danger',\n },\n },\n defaultVariants: {\n size: 'lg',\n trend: 'neutral',\n },\n});\n\nexport type StatisticProps = VariantProps<typeof statisticVariants> & {\n /** Character used to separate the decimal part. Defaults to `'.'`. */\n decimalSeparator?: string;\n /** Character used to separate thousands groups. Defaults to `','`. */\n groupSeparator?: string;\n /** Optional node rendered before the numeric value (e.g. a currency symbol). */\n prefix?: React.ReactNode;\n /** Optional node rendered after the numeric value (e.g. a unit label). */\n suffix?: React.ReactNode;\n /** Number of decimal digits to display; omit to show all significant digits. */\n precision?: number;\n /** Rounding strategy applied before formatting. Defaults to `'round'`. */\n roundingMode?: 'round' | 'floor' | 'ceil';\n /** When `true`, pads the decimal part with trailing zeros up to `precision`. Defaults to `false`. */\n showTrailingZeros?: boolean;\n /** The numeric (or numeric-string) value to format and display. */\n value: number | string;\n /** Additional CSS classes applied to the wrapper element. */\n className?: string;\n /** Colour trend indicator: `'neutral'` (default), `'up'` (green), or `'down'` (red). */\n trend?: 'neutral' | 'up' | 'down';\n};\n\n/**\n * A memoised numeric display component with locale-aware formatting, optional prefix/suffix, trend colouring, and configurable rounding.\n *\n * @example\n * ```tsx\n * import { Statistic } from '@customafk/lunas-ui/data-display/statistic';\n *\n * <Statistic value={1234567.89} precision={2} prefix=\"$\" trend=\"up\" size=\"lg\" />\n * ```\n */\nexport const Statistic = memo(\n ({\n decimalSeparator = '.',\n groupSeparator = ',',\n prefix: Prefix,\n suffix: Suffix,\n precision,\n roundingMode = 'round',\n showTrailingZeros = false,\n size = 'lg',\n trend = 'neutral',\n value,\n className,\n }: StatisticProps) => {\n const applyRounding = useCallback(\n (num: number, precisionValue: number): number => {\n const multiplier = 10 ** precisionValue;\n switch (roundingMode) {\n case 'floor':\n return Math.floor(num * multiplier) / multiplier;\n case 'ceil':\n return Math.ceil(num * multiplier) / multiplier;\n default:\n return Math.round(num * multiplier) / multiplier;\n }\n },\n [roundingMode]\n );\n\n const formatOptions = useMemo((): Intl.NumberFormatOptions => {\n const options: Intl.NumberFormatOptions = {};\n if (typeof precision === 'number' && precision >= 0) {\n if (showTrailingZeros) {\n options.minimumFractionDigits = precision;\n options.maximumFractionDigits = precision;\n } else {\n options.maximumFractionDigits = precision;\n }\n }\n return options;\n }, [precision, showTrailingZeros]);\n\n const formatNumber = useCallback(\n (num: number): string => {\n let processedNum = num;\n if (typeof precision === 'number' && precision >= 0) {\n processedNum = applyRounding(num, precision);\n }\n return processedNum.toLocaleString('en-US', formatOptions);\n },\n [applyRounding, formatOptions, precision]\n );\n\n const processedValue = useMemo((): string => {\n if (typeof value === 'number') {\n if (Number.isNaN(value) || !Number.isFinite(value)) return 'N/A';\n return formatNumber(value);\n }\n if (typeof value === 'string') {\n const trimmedValue = value.trim();\n if (!trimmedValue) return 'N/A';\n const numValue = Number(trimmedValue);\n if (Number.isNaN(numValue) || !Number.isFinite(numValue)) return 'N/A';\n return formatNumber(numValue);\n }\n return 'N/A';\n }, [value, formatNumber]);\n\n const finalFormattedValue = useMemo((): string => {\n if (decimalSeparator === '.' && groupSeparator === ',') return processedValue;\n return processedValue.replace(/,/g, groupSeparator).replace(/\\./g, decimalSeparator);\n }, [processedValue, decimalSeparator, groupSeparator]);\n\n return (\n <div data-slot=\"statistic\" className={cn(statisticVariants({ size, trend }), className)}>\n {Prefix && <span data-slot=\"statistic-prefix\">{Prefix}</span>}\n <p data-slot=\"statistic-value\">{finalFormattedValue}</p>\n {Suffix && <span data-slot=\"statistic-suffix\">{Suffix}</span>}\n </div>\n );\n }\n);\nStatistic.displayName = 'Statistic';\n"],"mappings":"6NAMA,MAAM,EAAoB,EAAI,4EAA6E,CACzG,SAAU,CACR,KAAM,CACJ,GAAI,UACJ,GAAI,UACJ,GAAI,YACJ,GAAI,UACJ,GAAI,UACL,CACD,MAAO,CACL,QAAS,4BACT,GAAI,eACJ,KAAM,cACP,CACF,CACD,gBAAiB,CACf,KAAM,KACN,MAAO,UACR,CACF,CAAC,CAmCW,EAAY,GACtB,CACC,mBAAmB,IACnB,iBAAiB,IACjB,OAAQ,EACR,OAAQ,EACR,YACA,eAAe,QACf,oBAAoB,GACpB,OAAO,KACP,QAAQ,UACR,QACA,eACoB,CACpB,IAAM,EAAgB,GACnB,EAAa,IAAmC,CAC/C,IAAM,EAAa,IAAM,EACzB,OAAQ,EAAR,CACE,IAAK,QACH,OAAO,KAAK,MAAM,EAAM,EAAW,CAAG,EACxC,IAAK,OACH,OAAO,KAAK,KAAK,EAAM,EAAW,CAAG,EACvC,QACE,OAAO,KAAK,MAAM,EAAM,EAAW,CAAG,IAG5C,CAAC,EAAa,CACf,CAEK,EAAgB,MAAwC,CAC5D,IAAMA,EAAoC,EAAE,CAS5C,OARI,OAAO,GAAc,UAAY,GAAa,IAC5C,IACF,EAAQ,sBAAwB,GAGhC,EAAQ,sBAAwB,GAG7B,GACN,CAAC,EAAW,EAAkB,CAAC,CAE5B,EAAe,EAClB,GAAwB,CACvB,IAAI,EAAe,EAInB,OAHI,OAAO,GAAc,UAAY,GAAa,IAChD,EAAe,EAAc,EAAK,EAAU,EAEvC,EAAa,eAAe,QAAS,EAAc,EAE5D,CAAC,EAAe,EAAe,EAAU,CAC1C,CAEK,EAAiB,MAAsB,CAC3C,GAAI,OAAO,GAAU,SAEnB,OADI,OAAO,MAAM,EAAM,EAAI,CAAC,OAAO,SAAS,EAAM,CAAS,MACpD,EAAa,EAAM,CAE5B,GAAI,OAAO,GAAU,SAAU,CAC7B,IAAM,EAAe,EAAM,MAAM,CACjC,GAAI,CAAC,EAAc,MAAO,MAC1B,IAAM,EAAW,OAAO,EAAa,CAErC,OADI,OAAO,MAAM,EAAS,EAAI,CAAC,OAAO,SAAS,EAAS,CAAS,MAC1D,EAAa,EAAS,CAE/B,MAAO,OACN,CAAC,EAAO,EAAa,CAAC,CAEnB,EAAsB,MACtB,IAAqB,KAAO,IAAmB,IAAY,EACxD,EAAe,QAAQ,KAAM,EAAe,CAAC,QAAQ,MAAO,EAAiB,CACnF,CAAC,EAAgB,EAAkB,EAAe,CAAC,CAEtD,OACE,EAAC,MAAA,CAAI,YAAU,YAAY,UAAW,EAAG,EAAkB,CAAE,OAAM,QAAO,CAAC,CAAE,EAAU,WACpF,GAAU,EAAC,OAAA,CAAK,YAAU,4BAAoB,GAAc,CAC7D,EAAC,IAAA,CAAE,YAAU,2BAAmB,GAAwB,CACvD,GAAU,EAAC,OAAA,CAAK,YAAU,4BAAoB,GAAc,GACzD,EAGX,CACD,EAAU,YAAc"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"user.cjs","names":["UserDataDisplay: React.FC<UserDataDisplayProps>","Flex","Avatar","AvatarFallback","colorHashLight","UserRoundIcon","Paragraph"],"sources":["../../packages/components/data-display/user.tsx"],"sourcesContent":["'use client';\n\nimport { UserRoundIcon } from 'lucide-react';\n\nimport { colorHashLight } from '@customafk/react-toolkit/color-hash';\n\nimport { Flex } from '../layouts/flex';\nimport { Paragraph } from '../typography/paragraph';\nimport { Avatar, AvatarFallback } from '../ui/avatar';\n\ntype UserDataDisplayProps = {\n /** Unique identifier used to deterministically generate the avatar background colour. */\n uuid: string;\n /** Display name rendered as the primary line of the user card. */\n username: string;\n /** Email address rendered as the secondary, muted line below the username. */\n email: string;\n};\n\n/**\n * Displays a user identity card with a colour-hashed avatar, username, and email address.\n *\n * @example\n * ```tsx\n * import { UserDataDisplay } from '@customafk/lunas-ui/data-display/user';\n *\n * <UserDataDisplay uuid=\"abc-123\" username=\"Nguyễn Văn An\" email=\"an@example.com\" />\n * ```\n */\nexport const UserDataDisplay: React.FC<UserDataDisplayProps> = ({ uuid, username, email }) => {\n return (\n <Flex data-slot=\"user-display\" wrap={false} gap=\"sm\" padding=\"none\">\n <Avatar className=\"size-10 shadow-card\">\n <AvatarFallback style={{ backgroundColor: colorHashLight.hex(uuid) }}>\n <UserRoundIcon size={28} className=\"text-white\" />\n </AvatarFallback>\n </Avatar>\n <Flex vertical padding=\"none\" gap=\"none\" align=\"start\">\n <Paragraph className=\"text-sm font-medium text-text-positive\">{username}</Paragraph>\n <Paragraph variant=\"sm\" className=\"mt-0! text-xs text-text-positive-weak\">\n {email}\n </Paragraph>\n </Flex>\n </Flex>\n );\n};\n"],"mappings":"2QA6BA,MAAaA,GAAmD,CAAE,OAAM,WAAU,YAE9E,EAAA,EAAA,MAACC,EAAAA,EAAAA,CAAK,YAAU,eAAe,KAAM,GAAO,IAAI,KAAK,QAAQ,kBAC3D,EAAA,EAAA,KAACC,EAAAA,OAAAA,CAAO,UAAU,gCAChB,EAAA,EAAA,KAACC,EAAAA,eAAAA,CAAe,MAAO,CAAE,gBAAiBC,EAAAA,eAAe,IAAI,EAAK,CAAE,WAClE,EAAA,EAAA,KAACC,EAAAA,cAAAA,CAAc,KAAM,GAAI,UAAU,cAAe,EACnC,EACV,EACT,EAAA,EAAA,MAACJ,EAAAA,EAAAA,CAAK,SAAA,GAAS,QAAQ,OAAO,IAAI,OAAO,MAAM,mBAC7C,EAAA,EAAA,KAACK,EAAAA,EAAAA,CAAU,UAAU,kDAA0C,GAAqB,EACpF,EAAA,EAAA,KAACA,EAAAA,EAAAA,CAAU,QAAQ,KAAK,UAAU,iDAC/B,GACS,CAAA,EACP,CAAA,EACF"}
@@ -1,23 +0,0 @@
1
- //#region packages/components/data-display/user.d.ts
2
- type UserDataDisplayProps = {
3
- /** Unique identifier used to deterministically generate the avatar background colour. */
4
- uuid: string;
5
- /** Display name rendered as the primary line of the user card. */
6
- username: string;
7
- /** Email address rendered as the secondary, muted line below the username. */
8
- email: string;
9
- };
10
- /**
11
- * Displays a user identity card with a colour-hashed avatar, username, and email address.
12
- *
13
- * @example
14
- * ```tsx
15
- * import { UserDataDisplay } from '@customafk/lunas-ui/data-display/user';
16
- *
17
- * <UserDataDisplay uuid="abc-123" username="Nguyễn Văn An" email="an@example.com" />
18
- * ```
19
- */
20
- declare const UserDataDisplay: React.FC<UserDataDisplayProps>;
21
- //#endregion
22
- export { UserDataDisplay };
23
- //# sourceMappingURL=user.d.ts.map
@@ -1,2 +0,0 @@
1
- "use client";import{t as e}from"../paragraph-ESjXXqHU.js";import{t}from"../flex-D_XtSjf4.js";import{Avatar as n,AvatarFallback as r}from"../ui/avatar.js";import{UserRoundIcon as i}from"lucide-react";import{jsx as a,jsxs as o}from"react/jsx-runtime";import{colorHashLight as s}from"@customafk/react-toolkit/color-hash";const c=({uuid:c,username:l,email:u})=>o(t,{"data-slot":`user-display`,wrap:!1,gap:`sm`,padding:`none`,children:[a(n,{className:`size-10 shadow-card`,children:a(r,{style:{backgroundColor:s.hex(c)},children:a(i,{size:28,className:`text-white`})})}),o(t,{vertical:!0,padding:`none`,gap:`none`,align:`start`,children:[a(e,{className:`text-sm font-medium text-text-positive`,children:l}),a(e,{variant:`sm`,className:`mt-0! text-xs text-text-positive-weak`,children:u})]})]});export{c as UserDataDisplay};
2
- //# sourceMappingURL=user.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"user.js","names":["UserDataDisplay: React.FC<UserDataDisplayProps>"],"sources":["../../packages/components/data-display/user.tsx"],"sourcesContent":["'use client';\n\nimport { UserRoundIcon } from 'lucide-react';\n\nimport { colorHashLight } from '@customafk/react-toolkit/color-hash';\n\nimport { Flex } from '../layouts/flex';\nimport { Paragraph } from '../typography/paragraph';\nimport { Avatar, AvatarFallback } from '../ui/avatar';\n\ntype UserDataDisplayProps = {\n /** Unique identifier used to deterministically generate the avatar background colour. */\n uuid: string;\n /** Display name rendered as the primary line of the user card. */\n username: string;\n /** Email address rendered as the secondary, muted line below the username. */\n email: string;\n};\n\n/**\n * Displays a user identity card with a colour-hashed avatar, username, and email address.\n *\n * @example\n * ```tsx\n * import { UserDataDisplay } from '@customafk/lunas-ui/data-display/user';\n *\n * <UserDataDisplay uuid=\"abc-123\" username=\"Nguyễn Văn An\" email=\"an@example.com\" />\n * ```\n */\nexport const UserDataDisplay: React.FC<UserDataDisplayProps> = ({ uuid, username, email }) => {\n return (\n <Flex data-slot=\"user-display\" wrap={false} gap=\"sm\" padding=\"none\">\n <Avatar className=\"size-10 shadow-card\">\n <AvatarFallback style={{ backgroundColor: colorHashLight.hex(uuid) }}>\n <UserRoundIcon size={28} className=\"text-white\" />\n </AvatarFallback>\n </Avatar>\n <Flex vertical padding=\"none\" gap=\"none\" align=\"start\">\n <Paragraph className=\"text-sm font-medium text-text-positive\">{username}</Paragraph>\n <Paragraph variant=\"sm\" className=\"mt-0! text-xs text-text-positive-weak\">\n {email}\n </Paragraph>\n </Flex>\n </Flex>\n );\n};\n"],"mappings":"8TA6BA,MAAaA,GAAmD,CAAE,OAAM,WAAU,WAE9E,EAAC,EAAA,CAAK,YAAU,eAAe,KAAM,GAAO,IAAI,KAAK,QAAQ,iBAC3D,EAAC,EAAA,CAAO,UAAU,+BAChB,EAAC,EAAA,CAAe,MAAO,CAAE,gBAAiB,EAAe,IAAI,EAAK,CAAE,UAClE,EAAC,EAAA,CAAc,KAAM,GAAI,UAAU,cAAe,EACnC,EACV,CACT,EAAC,EAAA,CAAK,SAAA,GAAS,QAAQ,OAAO,IAAI,OAAO,MAAM,kBAC7C,EAAC,EAAA,CAAU,UAAU,kDAA0C,GAAqB,CACpF,EAAC,EAAA,CAAU,QAAQ,KAAK,UAAU,iDAC/B,GACS,CAAA,EACP,CAAA,EACF"}
@@ -1,142 +0,0 @@
1
- //#region packages/components/dialogs/confirm-dialog.d.ts
2
- /**
3
- * Props for the {@link ConfirmDialog} component.
4
- */
5
- type ConfirmDialogProps = {
6
- /**
7
- * Controls whether the dialog is currently open.
8
- * This is a **controlled** prop — pair it with `onOpenChange` to manage state.
9
- */
10
- open?: boolean;
11
- /**
12
- * When `true`, shows an animated spinner inside the confirm button and
13
- * prevents double-submission. Typically bound to a mutation's pending state.
14
- *
15
- * @default false
16
- */
17
- isLoading?: boolean;
18
- /**
19
- * The dialog heading text. Keep it short and action-oriented,
20
- * e.g. `"Delete user?"` or `"Unsaved changes"`.
21
- */
22
- title: string;
23
- /**
24
- * Body copy explaining what will happen if the user confirms.
25
- * For irreversible actions, state explicitly that the action cannot be undone.
26
- */
27
- description: string;
28
- /**
29
- * Label for the cancel / dismiss button.
30
- *
31
- * @default "Cancel"
32
- */
33
- cancelText?: string;
34
- /**
35
- * Label for the confirm / submit button.
36
- *
37
- * @default "Confirm"
38
- */
39
- submitText?: string;
40
- /**
41
- * Additional class names applied to the `AlertDialogDescription` element.
42
- * Useful for overriding text color or font size for specific contexts.
43
- */
44
- descriptionClassName?: string;
45
- /**
46
- * Callback fired when the dialog open state changes.
47
- * Required to implement controlled open / close behavior.
48
- *
49
- * @param open - `true` when opening, `false` when closing.
50
- */
51
- onOpenChange?: (open: boolean) => void;
52
- /**
53
- * Async-safe callback fired when the user clicks the confirm button.
54
- * Supports both synchronous and `Promise`-returning functions.
55
- *
56
- * The dialog does **not** auto-close after `onConfirm` resolves — the caller
57
- * is responsible for setting `open` to `false` once the operation completes.
58
- *
59
- * @example
60
- * ```tsx
61
- * onConfirm={async () => {
62
- * await deleteUser(userId);
63
- * setOpen(false);
64
- * }}
65
- * ```
66
- */
67
- onConfirm?: () => Promise<void> | void;
68
- };
69
- /**
70
- * A controlled confirmation dialog for destructive or irreversible actions.
71
- *
72
- * Built on Radix UI's `AlertDialog` primitive. Renders a warning icon, title,
73
- * description, and Cancel / Confirm buttons. The confirm button supports an
74
- * async loading state to prevent double-submission.
75
- *
76
- * **Import:** `import { ConfirmDialog } from '@customafk/lunas-ui/dialogs/confirm-dialog'`
77
- *
78
- * @example Delete confirmation with React state
79
- * ```tsx
80
- * import { useState } from 'react';
81
- * import { Button } from '@customafk/lunas-ui/ui/button';
82
- * import { ConfirmDialog } from '@customafk/lunas-ui/dialogs/confirm-dialog';
83
- *
84
- * export function DeleteUserButton({ userId }: { userId: string }) {
85
- * const [open, setOpen] = useState(false);
86
- * const [isPending, setIsPending] = useState(false);
87
- *
88
- * const handleDelete = async () => {
89
- * setIsPending(true);
90
- * try {
91
- * await deleteUser(userId);
92
- * setOpen(false);
93
- * } finally {
94
- * setIsPending(false);
95
- * }
96
- * };
97
- *
98
- * return (
99
- * <>
100
- * <Button variant="outline" color="danger" onClick={() => setOpen(true)}>
101
- * Delete user
102
- * </Button>
103
- * <ConfirmDialog
104
- * open={open}
105
- * title="Delete user?"
106
- * description="This action is permanent and cannot be undone."
107
- * submitText="Yes, delete"
108
- * isLoading={isPending}
109
- * onOpenChange={setOpen}
110
- * onConfirm={handleDelete}
111
- * />
112
- * </>
113
- * );
114
- * }
115
- * ```
116
- *
117
- * @example With TanStack Query mutation
118
- * ```tsx
119
- * import { ConfirmDialog } from '@customafk/lunas-ui/dialogs/confirm-dialog';
120
- * import { useMutation } from '@tanstack/react-query';
121
- *
122
- * export function ArchiveDialog({ open, onOpenChange, id }: Props) {
123
- * const { mutateAsync, isPending } = useMutation({ mutationFn: archiveItem });
124
- *
125
- * return (
126
- * <ConfirmDialog
127
- * open={open}
128
- * title="Archive item?"
129
- * description="The item will be hidden but can be restored later."
130
- * submitText="Archive"
131
- * isLoading={isPending}
132
- * onOpenChange={onOpenChange}
133
- * onConfirm={() => mutateAsync(id).then(() => onOpenChange(false))}
134
- * />
135
- * );
136
- * }
137
- * ```
138
- */
139
- declare const ConfirmDialog: React.FC<ConfirmDialogProps>;
140
- //#endregion
141
- export { ConfirmDialog, ConfirmDialogProps };
142
- //# sourceMappingURL=confirm-dialog.d.ts.map
@@ -1,2 +0,0 @@
1
- "use client";import"../button.variants-BruXd4VM.js";import"../heading-Bw3eo6IT.js";import"../paragraph-ESjXXqHU.js";import{AlertDialog as e,AlertDialogAction as t,AlertDialogCancel as n,AlertDialogContent as r,AlertDialogDescription as i,AlertDialogFooter as a,AlertDialogHeader as o,AlertDialogTitle as s}from"../ui/alert-dialog.js";import{TriangleAlert as c}from"lucide-react";import{jsx as l,jsxs as u}from"react/jsx-runtime";import{useCallback as d}from"react";const f=({open:f,isLoading:p=!1,title:m,description:h,cancelText:g=`Cancel`,submitText:_=`Confirm`,descriptionClassName:v,onOpenChange:y,onConfirm:b})=>{let x=d(e=>{e.preventDefault(),e.stopPropagation(),b?.()},[b]);return l(e,{open:f,onOpenChange:y,children:u(r,{className:`p-4 pb-5`,children:[u(o,{className:`gap-2`,children:[u(s,{className:`inline-flex items-center gap-x-1`,children:[l(c,{size:20}),l(`p`,{children:m})]}),l(i,{className:v,children:h})]}),u(a,{children:[l(n,{children:g}),l(t,{type:`button`,className:`min-h-9 w-full md:w-24`,onClick:x,children:p?l(`div`,{className:`absolute inset-0 flex items-center justify-center`,children:l(`div`,{className:`loader-spinner text-text-positive-weak`})}):_})]})]})})};export{f as ConfirmDialog};
2
- //# sourceMappingURL=confirm-dialog.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"confirm-dialog.js","names":["ConfirmDialog: React.FC<ConfirmDialogProps>"],"sources":["../../packages/components/dialogs/confirm-dialog.tsx"],"sourcesContent":["'use client';\n\nimport { useCallback } from 'react';\n\nimport { TriangleAlert } from 'lucide-react';\n\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n} from '../ui/alert-dialog';\n\n/**\n * Props for the {@link ConfirmDialog} component.\n */\nexport type ConfirmDialogProps = {\n /**\n * Controls whether the dialog is currently open.\n * This is a **controlled** prop — pair it with `onOpenChange` to manage state.\n */\n open?: boolean;\n\n /**\n * When `true`, shows an animated spinner inside the confirm button and\n * prevents double-submission. Typically bound to a mutation's pending state.\n *\n * @default false\n */\n isLoading?: boolean;\n\n /**\n * The dialog heading text. Keep it short and action-oriented,\n * e.g. `\"Delete user?\"` or `\"Unsaved changes\"`.\n */\n title: string;\n\n /**\n * Body copy explaining what will happen if the user confirms.\n * For irreversible actions, state explicitly that the action cannot be undone.\n */\n description: string;\n\n /**\n * Label for the cancel / dismiss button.\n *\n * @default \"Cancel\"\n */\n cancelText?: string;\n\n /**\n * Label for the confirm / submit button.\n *\n * @default \"Confirm\"\n */\n submitText?: string;\n\n /**\n * Additional class names applied to the `AlertDialogDescription` element.\n * Useful for overriding text color or font size for specific contexts.\n */\n descriptionClassName?: string;\n\n /**\n * Callback fired when the dialog open state changes.\n * Required to implement controlled open / close behavior.\n *\n * @param open - `true` when opening, `false` when closing.\n */\n onOpenChange?: (open: boolean) => void;\n\n /**\n * Async-safe callback fired when the user clicks the confirm button.\n * Supports both synchronous and `Promise`-returning functions.\n *\n * The dialog does **not** auto-close after `onConfirm` resolves — the caller\n * is responsible for setting `open` to `false` once the operation completes.\n *\n * @example\n * ```tsx\n * onConfirm={async () => {\n * await deleteUser(userId);\n * setOpen(false);\n * }}\n * ```\n */\n onConfirm?: () => Promise<void> | void;\n};\n\n/**\n * A controlled confirmation dialog for destructive or irreversible actions.\n *\n * Built on Radix UI's `AlertDialog` primitive. Renders a warning icon, title,\n * description, and Cancel / Confirm buttons. The confirm button supports an\n * async loading state to prevent double-submission.\n *\n * **Import:** `import { ConfirmDialog } from '@customafk/lunas-ui/dialogs/confirm-dialog'`\n *\n * @example Delete confirmation with React state\n * ```tsx\n * import { useState } from 'react';\n * import { Button } from '@customafk/lunas-ui/ui/button';\n * import { ConfirmDialog } from '@customafk/lunas-ui/dialogs/confirm-dialog';\n *\n * export function DeleteUserButton({ userId }: { userId: string }) {\n * const [open, setOpen] = useState(false);\n * const [isPending, setIsPending] = useState(false);\n *\n * const handleDelete = async () => {\n * setIsPending(true);\n * try {\n * await deleteUser(userId);\n * setOpen(false);\n * } finally {\n * setIsPending(false);\n * }\n * };\n *\n * return (\n * <>\n * <Button variant=\"outline\" color=\"danger\" onClick={() => setOpen(true)}>\n * Delete user\n * </Button>\n * <ConfirmDialog\n * open={open}\n * title=\"Delete user?\"\n * description=\"This action is permanent and cannot be undone.\"\n * submitText=\"Yes, delete\"\n * isLoading={isPending}\n * onOpenChange={setOpen}\n * onConfirm={handleDelete}\n * />\n * </>\n * );\n * }\n * ```\n *\n * @example With TanStack Query mutation\n * ```tsx\n * import { ConfirmDialog } from '@customafk/lunas-ui/dialogs/confirm-dialog';\n * import { useMutation } from '@tanstack/react-query';\n *\n * export function ArchiveDialog({ open, onOpenChange, id }: Props) {\n * const { mutateAsync, isPending } = useMutation({ mutationFn: archiveItem });\n *\n * return (\n * <ConfirmDialog\n * open={open}\n * title=\"Archive item?\"\n * description=\"The item will be hidden but can be restored later.\"\n * submitText=\"Archive\"\n * isLoading={isPending}\n * onOpenChange={onOpenChange}\n * onConfirm={() => mutateAsync(id).then(() => onOpenChange(false))}\n * />\n * );\n * }\n * ```\n */\nexport const ConfirmDialog: React.FC<ConfirmDialogProps> = ({\n open,\n isLoading = false,\n title,\n description,\n cancelText = 'Cancel',\n submitText = 'Confirm',\n descriptionClassName,\n onOpenChange,\n onConfirm,\n}) => {\n const handleConfirm = useCallback(\n (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n onConfirm?.();\n },\n [onConfirm]\n );\n\n return (\n <AlertDialog open={open} onOpenChange={onOpenChange}>\n <AlertDialogContent className=\"p-4 pb-5\">\n <AlertDialogHeader className=\"gap-2\">\n <AlertDialogTitle className=\"inline-flex items-center gap-x-1\">\n <TriangleAlert size={20} />\n <p>{title}</p>\n </AlertDialogTitle>\n <AlertDialogDescription className={descriptionClassName}>{description}</AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>{cancelText}</AlertDialogCancel>\n <AlertDialogAction type=\"button\" className=\"min-h-9 w-full md:w-24\" onClick={handleConfirm}>\n {isLoading ? (\n <div className=\"absolute inset-0 flex items-center justify-center\">\n <div className=\"loader-spinner text-text-positive-weak\" />\n </div>\n ) : (\n submitText\n )}\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n );\n};\n"],"mappings":"idAmKA,MAAaA,GAA+C,CAC1D,OACA,YAAY,GACZ,QACA,cACA,aAAa,SACb,aAAa,UACb,uBACA,eACA,eACI,CACJ,IAAM,EAAgB,EACnB,GAAwB,CACvB,EAAE,gBAAgB,CAClB,EAAE,iBAAiB,CACnB,KAAa,EAEf,CAAC,EAAU,CACZ,CAED,OACE,EAAC,EAAA,CAAkB,OAAoB,wBACrC,EAAC,EAAA,CAAmB,UAAU,qBAC5B,EAAC,EAAA,CAAkB,UAAU,kBAC3B,EAAC,EAAA,CAAiB,UAAU,6CAC1B,EAAC,EAAA,CAAc,KAAM,GAAA,CAAM,CAC3B,EAAC,IAAA,CAAA,SAAG,EAAA,CAAU,CAAA,EACG,CACnB,EAAC,EAAA,CAAuB,UAAW,WAAuB,GAAqC,CAAA,EAC7E,CACpB,EAAC,EAAA,CAAA,SAAA,CACC,EAAC,EAAA,CAAA,SAAmB,EAAA,CAA+B,CACnD,EAAC,EAAA,CAAkB,KAAK,SAAS,UAAU,yBAAyB,QAAS,WAC1E,EACC,EAAC,MAAA,CAAI,UAAU,6DACb,EAAC,MAAA,CAAI,UAAU,yCAAA,CAA2C,EACtD,CAEN,GAEgB,CAAA,CAAA,CACF,CAAA,EACD,EACT"}