@customafk/lunas-ui 0.2.64 → 0.2.66

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 (772) hide show
  1. package/dist/FeatureDeveloping-zuTTDIh_.d.cts +41 -0
  2. package/dist/FeatureDeveloping-zuTTDIh_.d.mts +41 -0
  3. package/dist/FeatureFixing-DYQlgHPk.d.cts +41 -0
  4. package/dist/FeatureFixing-DYQlgHPk.d.mts +41 -0
  5. package/dist/LoginPage-vMXvwtxf.d.cts +53 -0
  6. package/dist/LoginPage-vMXvwtxf.d.mts +53 -0
  7. package/dist/NotAuthorized-CZIQ6EaA.d.cts +41 -0
  8. package/dist/NotAuthorized-CZIQ6EaA.d.mts +41 -0
  9. package/dist/NotFound-CRSKxhV8.d.cts +41 -0
  10. package/dist/NotFound-CRSKxhV8.d.mts +41 -0
  11. package/dist/RegisterPage-BBtpEzvL.d.cts +50 -0
  12. package/dist/RegisterPage-BBtpEzvL.d.mts +50 -0
  13. package/dist/VerifyEmailPage-CsmIeYLu.d.cts +62 -0
  14. package/dist/VerifyEmailPage-CsmIeYLu.d.mts +62 -0
  15. package/dist/action-submit-42PxGLsR.cjs +2 -0
  16. package/dist/action-submit-42PxGLsR.cjs.map +1 -0
  17. package/dist/action-submit-SviPJW3i.mjs +2 -0
  18. package/dist/action-submit-SviPJW3i.mjs.map +1 -0
  19. package/dist/actions-form-Bo46j_dH.cjs +2 -0
  20. package/dist/actions-form-Bo46j_dH.cjs.map +1 -0
  21. package/dist/actions-form-QdAsKwcQ.mjs +2 -0
  22. package/dist/actions-form-QdAsKwcQ.mjs.map +1 -0
  23. package/dist/activity-heatmap-chart-DufvFndI.mjs +2 -0
  24. package/dist/activity-heatmap-chart-DufvFndI.mjs.map +1 -0
  25. package/dist/activity-heatmap-chart-gDcvIAK_.cjs +2 -0
  26. package/dist/activity-heatmap-chart-gDcvIAK_.cjs.map +1 -0
  27. package/dist/add-new-DkBwXh0Q.d.cts +16 -0
  28. package/dist/add-new-DkBwXh0Q.d.mts +16 -0
  29. package/dist/alert-dialog-Cdhz7jSj.d.cts +88 -0
  30. package/dist/alert-dialog-Cdhz7jSj.d.mts +88 -0
  31. package/dist/analysis-panel-DzsZKA9l.cjs +2 -0
  32. package/dist/analysis-panel-DzsZKA9l.cjs.map +1 -0
  33. package/dist/analysis-panel-ikcRtzG9.mjs +2 -0
  34. package/dist/analysis-panel-ikcRtzG9.mjs.map +1 -0
  35. package/dist/aspect-ratio-huscluwJ.d.cts +22 -0
  36. package/dist/aspect-ratio-huscluwJ.d.mts +22 -0
  37. package/dist/avatar-BpeFwSkQ.d.cts +33 -0
  38. package/dist/avatar-BpeFwSkQ.d.mts +33 -0
  39. package/dist/avatar-name-display-BrpnTqa_.mjs +2 -0
  40. package/dist/avatar-name-display-BrpnTqa_.mjs.map +1 -0
  41. package/dist/avatar-name-display-CLi1DJUs.cjs +2 -0
  42. package/dist/avatar-name-display-CLi1DJUs.cjs.map +1 -0
  43. package/dist/{badge-D0InQSvM.d.cts → badge-MRT40pxM.d.cts} +3 -3
  44. package/dist/{badge-D0InQSvM.d.mts → badge-MRT40pxM.d.mts} +3 -3
  45. package/dist/badge-display-9WXwgQgH.cjs +2 -0
  46. package/dist/badge-display-9WXwgQgH.cjs.map +1 -0
  47. package/dist/badge-display-Dx-dITLB.mjs +2 -0
  48. package/dist/badge-display-Dx-dITLB.mjs.map +1 -0
  49. package/dist/boolean-display-OVCtvzI1.mjs +2 -0
  50. package/dist/boolean-display-OVCtvzI1.mjs.map +1 -0
  51. package/dist/boolean-display-pmzYS-ND.cjs +2 -0
  52. package/dist/boolean-display-pmzYS-ND.cjs.map +1 -0
  53. package/dist/breadcrumb-CSpScKZm.d.cts +69 -0
  54. package/dist/breadcrumb-CSpScKZm.d.mts +69 -0
  55. package/dist/{button-DIqm3YRo.d.cts → button-Bk4Y6_9I.d.cts} +3 -3
  56. package/dist/{button-DIqm3YRo.d.mts → button-Bk4Y6_9I.d.mts} +3 -3
  57. package/dist/button-group-Cd5m5G3p.d.mts +48 -0
  58. package/dist/button-group-CiKhLVCg.d.cts +48 -0
  59. package/dist/calendar-DPKt7D3w.d.mts +43 -0
  60. package/dist/calendar-stv2bJv0.d.cts +43 -0
  61. package/dist/candlestick-chart-CiBiCU3y.mjs +2 -0
  62. package/dist/candlestick-chart-CiBiCU3y.mjs.map +1 -0
  63. package/dist/candlestick-chart-CqmRkfXj.cjs +2 -0
  64. package/dist/candlestick-chart-CqmRkfXj.cjs.map +1 -0
  65. package/dist/card-DOnx7RKz.d.cts +60 -0
  66. package/dist/card-DOnx7RKz.d.mts +60 -0
  67. package/dist/card-form-BR5kDTzB.cjs +2 -0
  68. package/dist/card-form-BR5kDTzB.cjs.map +1 -0
  69. package/dist/card-form-D9fNO-6F.mjs +2 -0
  70. package/dist/card-form-D9fNO-6F.mjs.map +1 -0
  71. package/dist/cards/grid-product-card.d.cts +2 -30
  72. package/dist/cards/grid-product-card.d.mts +2 -30
  73. package/dist/cards/product-card.d.cts +2 -30
  74. package/dist/cards/product-card.d.mts +2 -30
  75. package/dist/cards/simple-card.d.cts +2 -29
  76. package/dist/cards/simple-card.d.mts +2 -29
  77. package/dist/carousel-CV3IZ96x.d.mts +70 -0
  78. package/dist/carousel-c2XuzmYN.d.cts +70 -0
  79. package/dist/chart-sYFksFMk.d.cts +80 -0
  80. package/dist/chart-sYFksFMk.d.mts +80 -0
  81. package/dist/checkbox-XfLNnG0S.d.cts +24 -0
  82. package/dist/checkbox-XfLNnG0S.d.mts +24 -0
  83. package/dist/checkbox-field-B1vCz-Wf.cjs +2 -0
  84. package/dist/checkbox-field-B1vCz-Wf.cjs.map +1 -0
  85. package/dist/checkbox-field-FqCe38_D.mjs +2 -0
  86. package/dist/checkbox-field-FqCe38_D.mjs.map +1 -0
  87. package/dist/{cms-layout-SubgSF72.cjs → cms-layout-CGGJqbr0.cjs} +2 -2
  88. package/dist/{cms-layout-SubgSF72.cjs.map → cms-layout-CGGJqbr0.cjs.map} +1 -1
  89. package/dist/{cms-layout-CuF5ahpj.mjs → cms-layout-ePySxIQN.mjs} +2 -2
  90. package/dist/{cms-layout-CuF5ahpj.mjs.map → cms-layout-ePySxIQN.mjs.map} +1 -1
  91. package/dist/collapsible-liIHmFuw.d.cts +32 -0
  92. package/dist/collapsible-liIHmFuw.d.mts +32 -0
  93. package/dist/combobox-field-D6fiCcvU.mjs +2 -0
  94. package/dist/combobox-field-D6fiCcvU.mjs.map +1 -0
  95. package/dist/combobox-field-DLpH6J9H.cjs +2 -0
  96. package/dist/combobox-field-DLpH6J9H.cjs.map +1 -0
  97. package/dist/command-Bb6SneVI.d.mts +87 -0
  98. package/dist/command-CHSJVU9o.d.cts +87 -0
  99. package/dist/confirm-dialog-B8Vu0z8S.d.cts +142 -0
  100. package/dist/confirm-dialog-B8Vu0z8S.d.mts +142 -0
  101. package/dist/container-form-BdsEX0NH.mjs +2 -0
  102. package/dist/container-form-BdsEX0NH.mjs.map +1 -0
  103. package/dist/container-form-CxxUYctk.cjs +2 -0
  104. package/dist/container-form-CxxUYctk.cjs.map +1 -0
  105. package/dist/context-menu-BOlGSuep.d.cts +123 -0
  106. package/dist/context-menu-BOlGSuep.d.mts +123 -0
  107. package/dist/conversion-funnel-chart-CW_zDfKS.mjs +2 -0
  108. package/dist/conversion-funnel-chart-CW_zDfKS.mjs.map +1 -0
  109. package/dist/conversion-funnel-chart-r2m2QbiQ.cjs +2 -0
  110. package/dist/conversion-funnel-chart-r2m2QbiQ.cjs.map +1 -0
  111. package/dist/correlation-scatter-chart-Djtt7NU7.mjs +2 -0
  112. package/dist/correlation-scatter-chart-Djtt7NU7.mjs.map +1 -0
  113. package/dist/correlation-scatter-chart-HF48YUIB.cjs +2 -0
  114. package/dist/correlation-scatter-chart-HF48YUIB.cjs.map +1 -0
  115. package/dist/country-C8QijcHF.d.mts +21 -0
  116. package/dist/country-CJIaO0I7.d.cts +21 -0
  117. package/dist/currency-display-B91H66HM.cjs +2 -0
  118. package/dist/currency-display-B91H66HM.cjs.map +1 -0
  119. package/dist/currency-display-BN1i8jnU.mjs +2 -0
  120. package/dist/currency-display-BN1i8jnU.mjs.map +1 -0
  121. package/dist/data-display/country.d.cts +2 -21
  122. package/dist/data-display/country.d.mts +2 -21
  123. package/dist/data-display/data-list.d.cts +2 -38
  124. package/dist/data-display/data-list.d.mts +2 -38
  125. package/dist/data-display/date-tooltip.d.cts +2 -18
  126. package/dist/data-display/date-tooltip.d.mts +2 -18
  127. package/dist/data-display/date.d.cts +2 -39
  128. package/dist/data-display/date.d.mts +2 -39
  129. package/dist/data-display/empty.d.cts +2 -19
  130. package/dist/data-display/empty.d.mts +2 -19
  131. package/dist/data-display/name.d.cts +2 -18
  132. package/dist/data-display/name.d.mts +2 -18
  133. package/dist/data-display/phone-number.d.cts +2 -18
  134. package/dist/data-display/phone-number.d.mts +2 -18
  135. package/dist/data-display/role-badge.d.cts +2 -21
  136. package/dist/data-display/role-badge.d.mts +2 -21
  137. package/dist/data-display/statistic.d.cts +2 -45
  138. package/dist/data-display/statistic.d.mts +2 -45
  139. package/dist/data-display/user.d.cts +2 -20
  140. package/dist/data-display/user.d.mts +2 -20
  141. package/dist/data-list-Cg510z2m.d.cts +38 -0
  142. package/dist/data-list-Cg510z2m.d.mts +38 -0
  143. package/dist/date-KANPBbN4.d.cts +39 -0
  144. package/dist/date-KANPBbN4.d.mts +39 -0
  145. package/dist/date-display-BWtvWDHK.mjs +2 -0
  146. package/dist/date-display-BWtvWDHK.mjs.map +1 -0
  147. package/dist/date-display-odcC9NcB.cjs +2 -0
  148. package/dist/date-display-odcC9NcB.cjs.map +1 -0
  149. package/dist/date-field-Cxbrc0Vl.mjs +2 -0
  150. package/dist/date-field-Cxbrc0Vl.mjs.map +1 -0
  151. package/dist/date-field-RvEB9F1r.cjs +2 -0
  152. package/dist/date-field-RvEB9F1r.cjs.map +1 -0
  153. package/dist/date-tooltip-DptxGOj_.d.cts +18 -0
  154. package/dist/date-tooltip-DptxGOj_.d.mts +18 -0
  155. package/dist/description-display-BubAcFan.mjs +2 -0
  156. package/dist/description-display-BubAcFan.mjs.map +1 -0
  157. package/dist/description-display-CKe0j3q-.cjs +2 -0
  158. package/dist/description-display-CKe0j3q-.cjs.map +1 -0
  159. package/dist/dialog-form-C0W5C0u9.mjs +2 -0
  160. package/dist/dialog-form-C0W5C0u9.mjs.map +1 -0
  161. package/dist/dialog-form-CkNCwzWG.cjs +2 -0
  162. package/dist/dialog-form-CkNCwzWG.cjs.map +1 -0
  163. package/dist/dialogs/confirm-dialog.cjs +1 -1
  164. package/dist/dialogs/confirm-dialog.cjs.map +1 -1
  165. package/dist/dialogs/confirm-dialog.d.cts +2 -142
  166. package/dist/dialogs/confirm-dialog.d.mts +2 -142
  167. package/dist/dialogs/confirm-dialog.mjs +1 -1
  168. package/dist/dialogs/confirm-dialog.mjs.map +1 -1
  169. package/dist/dialogs/detail-dialog/components/sidebar.cjs +1 -1
  170. package/dist/dialogs/detail-dialog/components/sidebar.cjs.map +1 -1
  171. package/dist/dialogs/detail-dialog/components/sidebar.d.cts +50 -38
  172. package/dist/dialogs/detail-dialog/components/sidebar.d.mts +50 -38
  173. package/dist/dialogs/detail-dialog/components/sidebar.mjs +1 -1
  174. package/dist/dialogs/detail-dialog/components/sidebar.mjs.map +1 -1
  175. package/dist/dialogs/detail-dialog/index.cjs +1 -1
  176. package/dist/dialogs/detail-dialog/index.cjs.map +1 -1
  177. package/dist/dialogs/detail-dialog/index.d.cts +2 -36
  178. package/dist/dialogs/detail-dialog/index.d.mts +2 -36
  179. package/dist/dialogs/detail-dialog/index.mjs +1 -1
  180. package/dist/dialogs/detail-dialog/index.mjs.map +1 -1
  181. package/dist/dialogs/error-dialog.d.cts +2 -22
  182. package/dist/dialogs/error-dialog.d.mts +2 -22
  183. package/dist/dialogs/loading-dialog.d.cts +2 -19
  184. package/dist/dialogs/loading-dialog.d.mts +2 -19
  185. package/dist/donut-chart-CsPPKy0G.cjs +2 -0
  186. package/dist/donut-chart-CsPPKy0G.cjs.map +1 -0
  187. package/dist/donut-chart-eKZjuzW0.mjs +2 -0
  188. package/dist/donut-chart-eKZjuzW0.mjs.map +1 -0
  189. package/dist/drawer-Dwx99ff3.d.cts +70 -0
  190. package/dist/drawer-Dwx99ff3.d.mts +70 -0
  191. package/dist/dropdown-menu-CcMccVns.d.cts +125 -0
  192. package/dist/dropdown-menu-CcMccVns.d.mts +125 -0
  193. package/dist/edit-button-0_FLZoT3.cjs +2 -0
  194. package/dist/edit-button-0_FLZoT3.cjs.map +1 -0
  195. package/dist/edit-button-DmMFMzG0.mjs +2 -0
  196. package/dist/edit-button-DmMFMzG0.mjs.map +1 -0
  197. package/dist/edit-qfS5kOtM.d.cts +16 -0
  198. package/dist/edit-qfS5kOtM.d.mts +16 -0
  199. package/dist/email-display-BLt60GQ1.cjs +2 -0
  200. package/dist/email-display-BLt60GQ1.cjs.map +1 -0
  201. package/dist/email-display-CMme47S9.mjs +2 -0
  202. package/dist/email-display-CMme47S9.mjs.map +1 -0
  203. package/dist/email-field-BErx3liY.cjs +2 -0
  204. package/dist/email-field-BErx3liY.cjs.map +1 -0
  205. package/dist/email-field-BtcdBWL4.mjs +2 -0
  206. package/dist/email-field-BtcdBWL4.mjs.map +1 -0
  207. package/dist/empty-CaNJjp05.d.cts +65 -0
  208. package/dist/empty-CaNJjp05.d.mts +65 -0
  209. package/dist/empty-ClQptIZH.d.cts +19 -0
  210. package/dist/empty-ClQptIZH.d.mts +19 -0
  211. package/dist/error-dialog-D4jOPhmw.d.cts +22 -0
  212. package/dist/error-dialog-D4jOPhmw.d.mts +22 -0
  213. package/dist/features/charts/index.cjs +1 -1
  214. package/dist/features/charts/index.cjs.map +1 -1
  215. package/dist/features/charts/index.d.cts +2 -904
  216. package/dist/features/charts/index.d.mts +2 -904
  217. package/dist/features/charts/index.mjs +1 -1
  218. package/dist/features/charts/index.mjs.map +1 -1
  219. package/dist/features/descriptions/index.cjs +1 -1
  220. package/dist/features/descriptions/index.cjs.map +1 -1
  221. package/dist/features/descriptions/index.d.cts +2 -231
  222. package/dist/features/descriptions/index.d.mts +2 -231
  223. package/dist/features/descriptions/index.mjs +1 -1
  224. package/dist/features/descriptions/index.mjs.map +1 -1
  225. package/dist/features/search-modal/index.d.cts +2 -14
  226. package/dist/features/search-modal/index.d.mts +2 -14
  227. package/dist/features/tables/index.cjs +1 -1
  228. package/dist/features/tables/index.d.cts +2 -2
  229. package/dist/features/tables/index.d.mts +2 -2
  230. package/dist/features/tables/index.mjs +1 -1
  231. package/dist/features/tanstack-form/index.cjs +1 -1
  232. package/dist/features/tanstack-form/index.d.cts +1 -1
  233. package/dist/features/tanstack-form/index.d.mts +1 -1
  234. package/dist/features/tanstack-form/index.mjs +1 -1
  235. package/dist/features/text-editor/index.cjs +1 -1
  236. package/dist/features/text-editor/index.d.cts +1 -1
  237. package/dist/features/text-editor/index.d.mts +1 -1
  238. package/dist/features/text-editor/index.mjs +1 -1
  239. package/dist/field-BKyUqvzh.mjs +2 -0
  240. package/dist/field-BKyUqvzh.mjs.map +1 -0
  241. package/dist/field-BV5twmKA.cjs +2 -0
  242. package/dist/field-BV5twmKA.cjs.map +1 -0
  243. package/dist/file-uploader-U64lH0zG.d.cts +101 -0
  244. package/dist/file-uploader-U64lH0zG.d.mts +101 -0
  245. package/dist/filter-CMzD5h0M.mjs +2 -0
  246. package/dist/filter-CMzD5h0M.mjs.map +1 -0
  247. package/dist/filter-Cmg6SHMu.cjs +2 -0
  248. package/dist/filter-Cmg6SHMu.cjs.map +1 -0
  249. package/dist/flex-CT71VV-I.d.cts +114 -0
  250. package/dist/flex-CT71VV-I.d.mts +114 -0
  251. package/dist/form-CMP15S4r.d.cts +109 -0
  252. package/dist/form-CMP15S4r.d.mts +109 -0
  253. package/dist/gain-loss-bar-chart-Dz1oAj8H.mjs +2 -0
  254. package/dist/gain-loss-bar-chart-Dz1oAj8H.mjs.map +1 -0
  255. package/dist/gain-loss-bar-chart-FUzN7DxF.cjs +2 -0
  256. package/dist/gain-loss-bar-chart-FUzN7DxF.cjs.map +1 -0
  257. package/dist/google-Bl-jBW8L.d.cts +48 -0
  258. package/dist/google-Bl-jBW8L.d.mts +48 -0
  259. package/dist/grid-i7Oz2Izf.d.cts +19 -0
  260. package/dist/grid-i7Oz2Izf.d.mts +19 -0
  261. package/dist/grid-product-card-bpADqDOQ.d.cts +30 -0
  262. package/dist/grid-product-card-bpADqDOQ.d.mts +30 -0
  263. package/dist/group-field-0kStiX8n.cjs +2 -0
  264. package/dist/group-field-0kStiX8n.cjs.map +1 -0
  265. package/dist/group-field-bviEXmo4.mjs +2 -0
  266. package/dist/group-field-bviEXmo4.mjs.map +1 -0
  267. package/dist/hover-card-Prwm-0Q4.d.cts +35 -0
  268. package/dist/hover-card-Prwm-0Q4.d.mts +35 -0
  269. package/dist/image-Cln0r7Eb.d.cts +27 -0
  270. package/dist/image-Cln0r7Eb.d.mts +27 -0
  271. package/dist/{index-CGpGIM1H.d.cts → index-BRE7tL8d.d.cts} +121 -500
  272. package/dist/index-C2HFO3a9.d.mts +231 -0
  273. package/dist/index-C9eXmnvk.d.cts +36 -0
  274. package/dist/index-C9eXmnvk.d.mts +36 -0
  275. package/dist/index-CBntsHIg.d.cts +520 -0
  276. package/dist/index-CBntsHIg.d.mts +520 -0
  277. package/dist/{index-DOaKN0wJ.d.cts → index-D9bKlLiM.d.cts} +2 -22
  278. package/dist/{index-DOaKN0wJ.d.mts → index-D9bKlLiM.d.mts} +2 -22
  279. package/dist/{index-C2KjuFXQ.d.cts → index-DDROD2y9.d.cts} +596 -1117
  280. package/dist/{index-C2KjuFXQ.d.mts → index-DDROD2y9.d.mts} +596 -1117
  281. package/dist/index-DJiiPHPf.d.cts +59 -0
  282. package/dist/index-DJiiPHPf.d.mts +59 -0
  283. package/dist/index-DtIL69PB.d.cts +14 -0
  284. package/dist/index-DtIL69PB.d.mts +14 -0
  285. package/dist/{index-DueBB0rP.d.mts → index-DvoLzsh0.d.mts} +121 -500
  286. package/dist/index-fZChR7MS.d.cts +231 -0
  287. package/dist/index.cjs +1 -1
  288. package/dist/index.d.cts +92 -92
  289. package/dist/index.d.mts +92 -92
  290. package/dist/index.mjs +1 -1
  291. package/dist/indexed-performance-line-chart-CT79KOM6.cjs +2 -0
  292. package/dist/indexed-performance-line-chart-CT79KOM6.cjs.map +1 -0
  293. package/dist/indexed-performance-line-chart-D7F-rIMv.mjs +2 -0
  294. package/dist/indexed-performance-line-chart-D7F-rIMv.mjs.map +1 -0
  295. package/dist/{input-BJMvABEL.d.cts → input-BieGEIDf.d.cts} +2 -2
  296. package/dist/{input-BJMvABEL.d.mts → input-BieGEIDf.d.mts} +2 -2
  297. package/dist/input-otp-6hJfhBHX.d.cts +56 -0
  298. package/dist/input-otp-6hJfhBHX.d.mts +56 -0
  299. package/dist/item-DTR2f2CX.d.cts +99 -0
  300. package/dist/item-cIhkI3ZI.d.mts +99 -0
  301. package/dist/label-DPG_GY7h.d.cts +22 -0
  302. package/dist/label-DPG_GY7h.d.mts +22 -0
  303. package/dist/layouts/cms-layout/index.cjs +1 -1
  304. package/dist/layouts/cms-layout/index.mjs +1 -1
  305. package/dist/layouts/flex.d.cts +2 -114
  306. package/dist/layouts/flex.d.mts +2 -114
  307. package/dist/layouts/grid.d.cts +2 -19
  308. package/dist/layouts/grid.d.mts +2 -19
  309. package/dist/layouts/payment-layout/index.cjs +1 -1
  310. package/dist/layouts/payment-layout/index.d.cts +2 -59
  311. package/dist/layouts/payment-layout/index.d.mts +2 -59
  312. package/dist/layouts/payment-layout/index.mjs +1 -1
  313. package/dist/list-display-BuRCso6J.mjs +2 -0
  314. package/dist/list-display-BuRCso6J.mjs.map +1 -0
  315. package/dist/list-display-DEU6yFa9.cjs +2 -0
  316. package/dist/list-display-DEU6yFa9.cjs.map +1 -0
  317. package/dist/loading-dialog-C73EJx9s.d.cts +19 -0
  318. package/dist/loading-dialog-C73EJx9s.d.mts +19 -0
  319. package/dist/menubar-CFrn3S96.d.cts +133 -0
  320. package/dist/menubar-CFrn3S96.d.mts +133 -0
  321. package/dist/metric-radar-chart-6LTGQHsL.mjs +2 -0
  322. package/dist/metric-radar-chart-6LTGQHsL.mjs.map +1 -0
  323. package/dist/metric-radar-chart-DwgbXgJX.cjs +2 -0
  324. package/dist/metric-radar-chart-DwgbXgJX.cjs.map +1 -0
  325. package/dist/mirrored-bar-chart-BT7AYPJB.mjs +2 -0
  326. package/dist/mirrored-bar-chart-BT7AYPJB.mjs.map +1 -0
  327. package/dist/mirrored-bar-chart-BwjtExjh.cjs +2 -0
  328. package/dist/mirrored-bar-chart-BwjtExjh.cjs.map +1 -0
  329. package/dist/more-button-BKBcXz6E.mjs +2 -0
  330. package/dist/more-button-BKBcXz6E.mjs.map +1 -0
  331. package/dist/more-button-RYvZgYiu.cjs +2 -0
  332. package/dist/more-button-RYvZgYiu.cjs.map +1 -0
  333. package/dist/multi-select-BbiKgAYs.d.cts +116 -0
  334. package/dist/multi-select-BoBHt_Z9.d.mts +116 -0
  335. package/dist/name-7aoM5rAW.d.cts +18 -0
  336. package/dist/name-7aoM5rAW.d.mts +18 -0
  337. package/dist/name-display-B6X52ip_.cjs +2 -0
  338. package/dist/name-display-B6X52ip_.cjs.map +1 -0
  339. package/dist/name-display-DXMZ8Lug.mjs +2 -0
  340. package/dist/name-display-DXMZ8Lug.mjs.map +1 -0
  341. package/dist/navigation-menu-B1BY9Zll.d.cts +73 -0
  342. package/dist/navigation-menu-B1BY9Zll.d.mts +73 -0
  343. package/dist/number-field-BjVjf6s4.mjs +2 -0
  344. package/dist/number-field-BjVjf6s4.mjs.map +1 -0
  345. package/dist/number-field-DmKh7bbY.cjs +2 -0
  346. package/dist/number-field-DmKh7bbY.cjs.map +1 -0
  347. package/dist/number-input-CqkegUWs.mjs +2 -0
  348. package/dist/number-input-CqkegUWs.mjs.map +1 -0
  349. package/dist/number-input-kTh9zzr7.cjs +2 -0
  350. package/dist/number-input-kTh9zzr7.cjs.map +1 -0
  351. package/dist/orders-bar-chart-9RmtP6In.cjs +2 -0
  352. package/dist/orders-bar-chart-9RmtP6In.cjs.map +1 -0
  353. package/dist/orders-bar-chart-DQhJGmwY.mjs +2 -0
  354. package/dist/orders-bar-chart-DQhJGmwY.mjs.map +1 -0
  355. package/dist/pages/FeatureDeveloping.d.cts +2 -41
  356. package/dist/pages/FeatureDeveloping.d.mts +2 -41
  357. package/dist/pages/FeatureFixing.d.cts +2 -41
  358. package/dist/pages/FeatureFixing.d.mts +2 -41
  359. package/dist/pages/LoginPage.cjs +1 -1
  360. package/dist/pages/LoginPage.cjs.map +1 -1
  361. package/dist/pages/LoginPage.d.cts +2 -53
  362. package/dist/pages/LoginPage.d.mts +2 -53
  363. package/dist/pages/LoginPage.mjs +1 -1
  364. package/dist/pages/LoginPage.mjs.map +1 -1
  365. package/dist/pages/NotAuthorized.d.cts +2 -41
  366. package/dist/pages/NotAuthorized.d.mts +2 -41
  367. package/dist/pages/NotFound.d.cts +2 -41
  368. package/dist/pages/NotFound.d.mts +2 -41
  369. package/dist/pages/RegisterPage.cjs +1 -1
  370. package/dist/pages/RegisterPage.cjs.map +1 -1
  371. package/dist/pages/RegisterPage.d.cts +2 -50
  372. package/dist/pages/RegisterPage.d.mts +2 -50
  373. package/dist/pages/RegisterPage.mjs +1 -1
  374. package/dist/pages/RegisterPage.mjs.map +1 -1
  375. package/dist/pages/VerifyEmailPage.d.cts +2 -62
  376. package/dist/pages/VerifyEmailPage.d.mts +2 -62
  377. package/dist/pagination-B2fyP0J2.d.cts +64 -0
  378. package/dist/pagination-DY0PBCnI.d.mts +64 -0
  379. package/dist/paragraph-BTmvVS1S.d.mts +46 -0
  380. package/dist/paragraph-DbYYv0A0.d.cts +46 -0
  381. package/dist/password-field-C5FsQUa8.mjs +2 -0
  382. package/dist/password-field-C5FsQUa8.mjs.map +1 -0
  383. package/dist/password-field-gHYDiXWY.cjs +2 -0
  384. package/dist/password-field-gHYDiXWY.cjs.map +1 -0
  385. package/dist/payment-layout-Cb-Q8KD2.cjs +2 -0
  386. package/dist/{payment-layout-BLrXT-oc.cjs.map → payment-layout-Cb-Q8KD2.cjs.map} +1 -1
  387. package/dist/{payment-layout-Dsz6wYT1.mjs → payment-layout-DS5CEH1h.mjs} +2 -2
  388. package/dist/{payment-layout-Dsz6wYT1.mjs.map → payment-layout-DS5CEH1h.mjs.map} +1 -1
  389. package/dist/permalink-CZ3g9daG.mjs +2 -0
  390. package/dist/permalink-CZ3g9daG.mjs.map +1 -0
  391. package/dist/permalink-DeeEKhfc.cjs +2 -0
  392. package/dist/permalink-DeeEKhfc.cjs.map +1 -0
  393. package/dist/phone-number-6b_pkGI1.d.cts +18 -0
  394. package/dist/phone-number-6b_pkGI1.d.mts +18 -0
  395. package/dist/phone-number-C43z68gT.mjs +2 -0
  396. package/dist/phone-number-C43z68gT.mjs.map +1 -0
  397. package/dist/phone-number-DhThJwd6.cjs +2 -0
  398. package/dist/phone-number-DhThJwd6.cjs.map +1 -0
  399. package/dist/popover-CdOCi0xg.d.cts +50 -0
  400. package/dist/popover-CdOCi0xg.d.mts +50 -0
  401. package/dist/popover-form-B2taDBAh.mjs +2 -0
  402. package/dist/popover-form-B2taDBAh.mjs.map +1 -0
  403. package/dist/popover-form-_hQQpfAB.cjs +2 -0
  404. package/dist/popover-form-_hQQpfAB.cjs.map +1 -0
  405. package/dist/portfolio-allocation-treemap-Bn0X4wb6.cjs +2 -0
  406. package/dist/portfolio-allocation-treemap-Bn0X4wb6.cjs.map +1 -0
  407. package/dist/portfolio-allocation-treemap-Cb9Kidrl.mjs +2 -0
  408. package/dist/portfolio-allocation-treemap-Cb9Kidrl.mjs.map +1 -0
  409. package/dist/price-range-area-chart-BW6RQb_9.cjs +2 -0
  410. package/dist/price-range-area-chart-BW6RQb_9.cjs.map +1 -0
  411. package/dist/price-range-area-chart-Dy01mhWJ.mjs +2 -0
  412. package/dist/price-range-area-chart-Dy01mhWJ.mjs.map +1 -0
  413. package/dist/product-card-CvXLXbpV.d.cts +30 -0
  414. package/dist/product-card-CvXLXbpV.d.mts +30 -0
  415. package/dist/progress-Bp-5keO8.d.cts +21 -0
  416. package/dist/progress-Bp-5keO8.d.mts +21 -0
  417. package/dist/progress-display-Bp0xVhln.cjs +2 -0
  418. package/dist/progress-display-Bp0xVhln.cjs.map +1 -0
  419. package/dist/progress-display-DYj7vAe9.mjs +2 -0
  420. package/dist/progress-display-DYj7vAe9.mjs.map +1 -0
  421. package/dist/radio-group-field-McpjpLW-.cjs +2 -0
  422. package/dist/radio-group-field-McpjpLW-.cjs.map +1 -0
  423. package/dist/radio-group-field-ZqMrf9Dx.mjs +2 -0
  424. package/dist/radio-group-field-ZqMrf9Dx.mjs.map +1 -0
  425. package/dist/radio-group-ycQQrPGn.d.cts +35 -0
  426. package/dist/radio-group-ycQQrPGn.d.mts +35 -0
  427. package/dist/refresh-BiyrZAXL.d.cts +16 -0
  428. package/dist/refresh-BiyrZAXL.d.mts +16 -0
  429. package/dist/remove-button-B3qFw-M5.cjs +2 -0
  430. package/dist/remove-button-B3qFw-M5.cjs.map +1 -0
  431. package/dist/remove-button-Db5oSj4h.mjs +2 -0
  432. package/dist/remove-button-Db5oSj4h.mjs.map +1 -0
  433. package/dist/{resizable-BLfxHCf4.d.cts → resizable-CAyWR1At.d.cts} +2 -2
  434. package/dist/{resizable-BLfxHCf4.d.mts → resizable-CAyWR1At.d.mts} +2 -2
  435. package/dist/revenue-area-chart-BwzeTRzD.mjs +2 -0
  436. package/dist/revenue-area-chart-BwzeTRzD.mjs.map +1 -0
  437. package/dist/revenue-area-chart-w2FZCl_7.cjs +2 -0
  438. package/dist/revenue-area-chart-w2FZCl_7.cjs.map +1 -0
  439. package/dist/revenue-orders-composed-chart-BttOWYGt.cjs +2 -0
  440. package/dist/revenue-orders-composed-chart-BttOWYGt.cjs.map +1 -0
  441. package/dist/revenue-orders-composed-chart-DwkbWZSX.mjs +2 -0
  442. package/dist/revenue-orders-composed-chart-DwkbWZSX.mjs.map +1 -0
  443. package/dist/role-badge-Bl4Rimpk.d.mts +21 -0
  444. package/dist/role-badge-IdZW0tsN.d.cts +21 -0
  445. package/dist/sales-target-radial-chart-BFLxBT2m.mjs +2 -0
  446. package/dist/sales-target-radial-chart-BFLxBT2m.mjs.map +1 -0
  447. package/dist/sales-target-radial-chart-BoxSk7hW.cjs +2 -0
  448. package/dist/sales-target-radial-chart-BoxSk7hW.cjs.map +1 -0
  449. package/dist/sankey-flow-chart-CDUqIRMZ.cjs +2 -0
  450. package/dist/sankey-flow-chart-CDUqIRMZ.cjs.map +1 -0
  451. package/dist/sankey-flow-chart-bQ3Dffet.mjs +2 -0
  452. package/dist/sankey-flow-chart-bQ3Dffet.mjs.map +1 -0
  453. package/dist/scroll-area-PbkqIAaH.d.cts +35 -0
  454. package/dist/scroll-area-PbkqIAaH.d.mts +35 -0
  455. package/dist/search-input-Bq4enQzR.d.cts +27 -0
  456. package/dist/search-input-D51_mAY-.d.mts +27 -0
  457. package/dist/section-form-B9iTs2we.cjs +2 -0
  458. package/dist/section-form-B9iTs2we.cjs.map +1 -0
  459. package/dist/section-form-B_AZr7jZ.mjs +2 -0
  460. package/dist/section-form-B_AZr7jZ.mjs.map +1 -0
  461. package/dist/select-B5j4WvPM.d.cts +74 -0
  462. package/dist/select-B5j4WvPM.d.mts +74 -0
  463. package/dist/select-field-DG8sQ5iN.cjs +2 -0
  464. package/dist/select-field-DG8sQ5iN.cjs.map +1 -0
  465. package/dist/select-field-Kq5iQCRQ.mjs +2 -0
  466. package/dist/select-field-Kq5iQCRQ.mjs.map +1 -0
  467. package/dist/separator-BlNAFSJv.mjs +2 -0
  468. package/dist/separator-BlNAFSJv.mjs.map +1 -0
  469. package/dist/separator-D6_fMJtM.d.cts +32 -0
  470. package/dist/separator-D6_fMJtM.d.mts +32 -0
  471. package/dist/separator-sBz__BXC.cjs +2 -0
  472. package/dist/separator-sBz__BXC.cjs.map +1 -0
  473. package/dist/sheet-cHLLSvvt.d.cts +66 -0
  474. package/dist/sheet-cHLLSvvt.d.mts +66 -0
  475. package/dist/sidebar-core-Bh0dZXsm.mjs +2 -0
  476. package/dist/sidebar-core-Bh0dZXsm.mjs.map +1 -0
  477. package/dist/sidebar-core-DQE6ymo4.cjs +2 -0
  478. package/dist/sidebar-core-DQE6ymo4.cjs.map +1 -0
  479. package/dist/simple-array-field-4paKpxXk.cjs +2 -0
  480. package/dist/simple-array-field-4paKpxXk.cjs.map +1 -0
  481. package/dist/simple-array-field-C5XdemXa.mjs +2 -0
  482. package/dist/simple-array-field-C5XdemXa.mjs.map +1 -0
  483. package/dist/simple-boolean-field-B9T_fHk9.cjs +2 -0
  484. package/dist/simple-boolean-field-B9T_fHk9.cjs.map +1 -0
  485. package/dist/simple-boolean-field-DpJ-fSQk.mjs +2 -0
  486. package/dist/simple-boolean-field-DpJ-fSQk.mjs.map +1 -0
  487. package/dist/simple-card-6P377r4A.d.cts +29 -0
  488. package/dist/simple-card-6P377r4A.d.mts +29 -0
  489. package/dist/simple-combobox-field-Ch4SBHCH.mjs +2 -0
  490. package/dist/simple-combobox-field-Ch4SBHCH.mjs.map +1 -0
  491. package/dist/simple-combobox-field-ChMKk7xp.cjs +2 -0
  492. package/dist/simple-combobox-field-ChMKk7xp.cjs.map +1 -0
  493. package/dist/simple-date-field-BGGlsHzG.cjs +2 -0
  494. package/dist/simple-date-field-BGGlsHzG.cjs.map +1 -0
  495. package/dist/simple-date-field-CVKqIrEs.mjs +2 -0
  496. package/dist/simple-date-field-CVKqIrEs.mjs.map +1 -0
  497. package/dist/simple-email-field-98w0846B.mjs +2 -0
  498. package/dist/simple-email-field-98w0846B.mjs.map +1 -0
  499. package/dist/simple-email-field-DYqCWprP.cjs +2 -0
  500. package/dist/simple-email-field-DYqCWprP.cjs.map +1 -0
  501. package/dist/simple-number-field-otvv2xq-.cjs +2 -0
  502. package/dist/simple-number-field-otvv2xq-.cjs.map +1 -0
  503. package/dist/simple-number-field-zF3oqS8d.mjs +2 -0
  504. package/dist/simple-number-field-zF3oqS8d.mjs.map +1 -0
  505. package/dist/simple-password-field-CuC10c70.mjs +2 -0
  506. package/dist/simple-password-field-CuC10c70.mjs.map +1 -0
  507. package/dist/simple-password-field-D2UMmghM.cjs +2 -0
  508. package/dist/simple-password-field-D2UMmghM.cjs.map +1 -0
  509. package/dist/simple-radio-group-field-C2DDfIUs.cjs +2 -0
  510. package/dist/simple-radio-group-field-C2DDfIUs.cjs.map +1 -0
  511. package/dist/simple-radio-group-field-CfziNlLf.mjs +2 -0
  512. package/dist/simple-radio-group-field-CfziNlLf.mjs.map +1 -0
  513. package/dist/simple-select-field-CeNnXUHN.cjs +2 -0
  514. package/dist/simple-select-field-CeNnXUHN.cjs.map +1 -0
  515. package/dist/simple-select-field-DIaxhi1-.mjs +2 -0
  516. package/dist/simple-select-field-DIaxhi1-.mjs.map +1 -0
  517. package/dist/simple-text-field-D8jyznSd.mjs +2 -0
  518. package/dist/simple-text-field-D8jyznSd.mjs.map +1 -0
  519. package/dist/simple-text-field-LYWVIAfQ.cjs +2 -0
  520. package/dist/simple-text-field-LYWVIAfQ.cjs.map +1 -0
  521. package/dist/simple-textarea-field-DcEvaizE.cjs +2 -0
  522. package/dist/simple-textarea-field-DcEvaizE.cjs.map +1 -0
  523. package/dist/simple-textarea-field-p9qX_n7m.mjs +2 -0
  524. package/dist/simple-textarea-field-p9qX_n7m.mjs.map +1 -0
  525. package/dist/skeleton-Ct4sYEKk.d.cts +24 -0
  526. package/dist/skeleton-Ct4sYEKk.d.mts +24 -0
  527. package/dist/slider-DwR1MhR8.d.cts +24 -0
  528. package/dist/slider-DwR1MhR8.d.mts +24 -0
  529. package/dist/sonner-B6LxJMYT.d.mts +22 -0
  530. package/dist/sonner-BcNgR0GP.d.cts +22 -0
  531. package/dist/sparkline-chart-TbGzakUl.mjs +2 -0
  532. package/dist/sparkline-chart-TbGzakUl.mjs.map +1 -0
  533. package/dist/sparkline-chart-sPqaJHep.cjs +2 -0
  534. package/dist/sparkline-chart-sPqaJHep.cjs.map +1 -0
  535. package/dist/spinner-CXuqcoB5.d.cts +22 -0
  536. package/dist/spinner-CXuqcoB5.d.mts +22 -0
  537. package/dist/stacked-area-chart-DyxY96_l.cjs +2 -0
  538. package/dist/stacked-area-chart-DyxY96_l.cjs.map +1 -0
  539. package/dist/stacked-area-chart-UIWIxTmq.mjs +2 -0
  540. package/dist/stacked-area-chart-UIWIxTmq.mjs.map +1 -0
  541. package/dist/statistic-8zBJMdRa.d.cts +45 -0
  542. package/dist/statistic-8zBJMdRa.d.mts +45 -0
  543. package/dist/statistic-BUGIRhL9.cjs +2 -0
  544. package/dist/statistic-BUGIRhL9.cjs.map +1 -0
  545. package/dist/statistic-Ug9Zgi3N.mjs +2 -0
  546. package/dist/statistic-Ug9Zgi3N.mjs.map +1 -0
  547. package/dist/status-display-B-6KKttX.mjs +2 -0
  548. package/dist/status-display-B-6KKttX.mjs.map +1 -0
  549. package/dist/status-display-DkI9UwAu.cjs +2 -0
  550. package/dist/status-display-DkI9UwAu.cjs.map +1 -0
  551. package/dist/submit-button-CGBaPzE9.mjs +2 -0
  552. package/dist/submit-button-CGBaPzE9.mjs.map +1 -0
  553. package/dist/submit-button-CvINfld5.cjs +2 -0
  554. package/dist/submit-button-CvINfld5.cjs.map +1 -0
  555. package/dist/summary-bar-CZHeAORf.mjs +2 -0
  556. package/dist/summary-bar-CZHeAORf.mjs.map +1 -0
  557. package/dist/summary-bar-DTFVpBZn.cjs +2 -0
  558. package/dist/summary-bar-DTFVpBZn.cjs.map +1 -0
  559. package/dist/switch-9v4AYqJb.d.cts +24 -0
  560. package/dist/switch-9v4AYqJb.d.mts +24 -0
  561. package/dist/switch-field-CIoNsRWN.mjs +2 -0
  562. package/dist/switch-field-CIoNsRWN.mjs.map +1 -0
  563. package/dist/switch-field-n6a5SaEM.cjs +2 -0
  564. package/dist/switch-field-n6a5SaEM.cjs.map +1 -0
  565. package/dist/systems/google.d.cts +2 -48
  566. package/dist/systems/google.d.mts +2 -48
  567. package/dist/table-Dg2D0v87.d.cts +70 -0
  568. package/dist/table-Dg2D0v87.d.mts +70 -0
  569. package/dist/tables-7aC9WFs9.cjs +2 -0
  570. package/dist/tables-7aC9WFs9.cjs.map +1 -0
  571. package/dist/tables-UikqnT9q.mjs +2 -0
  572. package/dist/tables-UikqnT9q.mjs.map +1 -0
  573. package/dist/tabs-CJ6qZcFU.d.cts +42 -0
  574. package/dist/tabs-CJ6qZcFU.d.mts +42 -0
  575. package/dist/tanstack-form-CNrZQZhn.cjs +2 -0
  576. package/dist/tanstack-form-CNrZQZhn.cjs.map +1 -0
  577. package/dist/tanstack-form-PC9YNeeo.mjs +2 -0
  578. package/dist/tanstack-form-PC9YNeeo.mjs.map +1 -0
  579. package/dist/text-editor-BYE2-G5K.mjs +2 -0
  580. package/dist/text-editor-BYE2-G5K.mjs.map +1 -0
  581. package/dist/text-editor-CfQk5dIx.cjs +2 -0
  582. package/dist/text-editor-CfQk5dIx.cjs.map +1 -0
  583. package/dist/text-editor-field-fso-sw29.mjs +2 -0
  584. package/dist/text-editor-field-fso-sw29.mjs.map +1 -0
  585. package/dist/text-editor-field-gas5r-xy.cjs +2 -0
  586. package/dist/text-editor-field-gas5r-xy.cjs.map +1 -0
  587. package/dist/text-field-B67oTV62.mjs +2 -0
  588. package/dist/text-field-B67oTV62.mjs.map +1 -0
  589. package/dist/text-field-BMo-8rsq.cjs +2 -0
  590. package/dist/text-field-BMo-8rsq.cjs.map +1 -0
  591. package/dist/textarea-C8ZIZh-y.d.cts +26 -0
  592. package/dist/textarea-C8ZIZh-y.d.mts +26 -0
  593. package/dist/textarea-field-BUGcITwp.cjs +2 -0
  594. package/dist/textarea-field-BUGcITwp.cjs.map +1 -0
  595. package/dist/textarea-field-D70rGYIk.mjs +2 -0
  596. package/dist/textarea-field-D70rGYIk.mjs.map +1 -0
  597. package/dist/title-BT9guhSU.d.cts +41 -0
  598. package/dist/title-BT9guhSU.d.mts +41 -0
  599. package/dist/title-field-84EnHPvl.mjs +2 -0
  600. package/dist/title-field-84EnHPvl.mjs.map +1 -0
  601. package/dist/title-field-CKxwzMOM.cjs +2 -0
  602. package/dist/title-field-CKxwzMOM.cjs.map +1 -0
  603. package/dist/toggle-Bh4EazxT.d.cts +30 -0
  604. package/dist/toggle-Bh4EazxT.d.mts +30 -0
  605. package/dist/toggle-button-DNLtfjJC.mjs +2 -0
  606. package/dist/toggle-button-DNLtfjJC.mjs.map +1 -0
  607. package/dist/toggle-button-Dq78v8cH.cjs +2 -0
  608. package/dist/toggle-button-Dq78v8cH.cjs.map +1 -0
  609. package/dist/toggle-group-BpqkL1ds.d.cts +37 -0
  610. package/dist/toggle-group-DzNE38v5.d.mts +37 -0
  611. package/dist/tooltip-B-yLj6pe.mjs +4 -0
  612. package/dist/tooltip-B-yLj6pe.mjs.map +1 -0
  613. package/dist/tooltip-D4U-RhIu.d.cts +53 -0
  614. package/dist/tooltip-D4U-RhIu.d.mts +53 -0
  615. package/dist/tooltip-octglTPf.cjs +4 -0
  616. package/dist/tooltip-octglTPf.cjs.map +1 -0
  617. package/dist/top-products-bar-chart-5EJFSkeo.cjs +2 -0
  618. package/dist/top-products-bar-chart-5EJFSkeo.cjs.map +1 -0
  619. package/dist/top-products-bar-chart-CKYaOGWT.mjs +2 -0
  620. package/dist/top-products-bar-chart-CKYaOGWT.mjs.map +1 -0
  621. package/dist/trash-BfWSqlL4.d.cts +16 -0
  622. package/dist/trash-BfWSqlL4.d.mts +16 -0
  623. package/dist/typography/paragraph.d.cts +2 -46
  624. package/dist/typography/paragraph.d.mts +2 -46
  625. package/dist/typography/title.d.cts +2 -41
  626. package/dist/typography/title.d.mts +2 -41
  627. package/dist/ui/alert-dialog.d.cts +2 -88
  628. package/dist/ui/alert-dialog.d.mts +2 -88
  629. package/dist/ui/aspect-ratio.d.cts +2 -22
  630. package/dist/ui/aspect-ratio.d.mts +2 -22
  631. package/dist/ui/avatar.d.cts +2 -33
  632. package/dist/ui/avatar.d.mts +2 -33
  633. package/dist/ui/badge.cjs +1 -1
  634. package/dist/ui/badge.cjs.map +1 -1
  635. package/dist/ui/badge.d.cts +1 -1
  636. package/dist/ui/badge.d.mts +1 -1
  637. package/dist/ui/badge.mjs +1 -1
  638. package/dist/ui/badge.mjs.map +1 -1
  639. package/dist/ui/breadcrumb.d.cts +2 -69
  640. package/dist/ui/breadcrumb.d.mts +2 -69
  641. package/dist/ui/button-group.d.cts +2 -48
  642. package/dist/ui/button-group.d.mts +2 -48
  643. package/dist/ui/button.d.cts +1 -1
  644. package/dist/ui/button.d.mts +1 -1
  645. package/dist/ui/buttons/add-new.d.cts +2 -16
  646. package/dist/ui/buttons/add-new.d.mts +2 -16
  647. package/dist/ui/buttons/edit.d.cts +2 -16
  648. package/dist/ui/buttons/edit.d.mts +2 -16
  649. package/dist/ui/buttons/refresh.d.cts +2 -16
  650. package/dist/ui/buttons/refresh.d.mts +2 -16
  651. package/dist/ui/buttons/trash.d.cts +2 -16
  652. package/dist/ui/buttons/trash.d.mts +2 -16
  653. package/dist/ui/buttons/upload-image.d.cts +2 -23
  654. package/dist/ui/buttons/upload-image.d.mts +2 -23
  655. package/dist/ui/calendar.d.cts +2 -43
  656. package/dist/ui/calendar.d.mts +2 -43
  657. package/dist/ui/card.d.cts +2 -60
  658. package/dist/ui/card.d.mts +2 -60
  659. package/dist/ui/carousel.d.cts +2 -70
  660. package/dist/ui/carousel.d.mts +2 -70
  661. package/dist/ui/chart.d.cts +2 -80
  662. package/dist/ui/chart.d.mts +2 -80
  663. package/dist/ui/checkbox.d.cts +2 -24
  664. package/dist/ui/checkbox.d.mts +2 -24
  665. package/dist/ui/collapsible.d.cts +2 -32
  666. package/dist/ui/collapsible.d.mts +2 -32
  667. package/dist/ui/command.d.cts +2 -87
  668. package/dist/ui/command.d.mts +2 -87
  669. package/dist/ui/context-menu.d.cts +2 -123
  670. package/dist/ui/context-menu.d.mts +2 -123
  671. package/dist/ui/drawer.d.cts +2 -70
  672. package/dist/ui/drawer.d.mts +2 -70
  673. package/dist/ui/dropdown-menu.d.cts +2 -125
  674. package/dist/ui/dropdown-menu.d.mts +2 -125
  675. package/dist/ui/empty.d.cts +2 -65
  676. package/dist/ui/empty.d.mts +2 -65
  677. package/dist/ui/field.d.cts +1 -1
  678. package/dist/ui/field.d.mts +1 -1
  679. package/dist/ui/file-uploader.d.cts +2 -101
  680. package/dist/ui/file-uploader.d.mts +2 -101
  681. package/dist/ui/form.d.cts +2 -109
  682. package/dist/ui/form.d.mts +2 -109
  683. package/dist/ui/hover-card.d.cts +2 -35
  684. package/dist/ui/hover-card.d.mts +2 -35
  685. package/dist/ui/image.d.cts +2 -27
  686. package/dist/ui/image.d.mts +2 -27
  687. package/dist/ui/input-otp.d.cts +2 -56
  688. package/dist/ui/input-otp.d.mts +2 -56
  689. package/dist/ui/input.d.cts +1 -1
  690. package/dist/ui/input.d.mts +1 -1
  691. package/dist/ui/inputs/search-input.d.cts +2 -27
  692. package/dist/ui/inputs/search-input.d.mts +2 -27
  693. package/dist/ui/item.d.cts +2 -99
  694. package/dist/ui/item.d.mts +2 -99
  695. package/dist/ui/label.d.cts +2 -22
  696. package/dist/ui/label.d.mts +2 -22
  697. package/dist/ui/menubar.d.cts +2 -133
  698. package/dist/ui/menubar.d.mts +2 -133
  699. package/dist/ui/multi-select.d.cts +2 -116
  700. package/dist/ui/multi-select.d.mts +2 -116
  701. package/dist/ui/navigation-menu.d.cts +2 -73
  702. package/dist/ui/navigation-menu.d.mts +2 -73
  703. package/dist/ui/pagination.d.cts +2 -64
  704. package/dist/ui/pagination.d.mts +2 -64
  705. package/dist/ui/popover.d.cts +2 -50
  706. package/dist/ui/popover.d.mts +2 -50
  707. package/dist/ui/progress.d.cts +2 -21
  708. package/dist/ui/progress.d.mts +2 -21
  709. package/dist/ui/radio-group.d.cts +2 -35
  710. package/dist/ui/radio-group.d.mts +2 -35
  711. package/dist/ui/resizable.d.cts +1 -1
  712. package/dist/ui/resizable.d.mts +1 -1
  713. package/dist/ui/scroll-area.d.cts +2 -35
  714. package/dist/ui/scroll-area.d.mts +2 -35
  715. package/dist/ui/select.d.cts +2 -74
  716. package/dist/ui/select.d.mts +2 -74
  717. package/dist/ui/separator.d.cts +2 -32
  718. package/dist/ui/separator.d.mts +2 -32
  719. package/dist/ui/sheet.d.cts +2 -66
  720. package/dist/ui/sheet.d.mts +2 -66
  721. package/dist/ui/skeleton.d.cts +2 -24
  722. package/dist/ui/skeleton.d.mts +2 -24
  723. package/dist/ui/slider.d.cts +2 -24
  724. package/dist/ui/slider.d.mts +2 -24
  725. package/dist/ui/sonner.d.cts +2 -22
  726. package/dist/ui/sonner.d.mts +2 -22
  727. package/dist/ui/spinner.d.cts +2 -22
  728. package/dist/ui/spinner.d.mts +2 -22
  729. package/dist/ui/switch.d.cts +2 -24
  730. package/dist/ui/switch.d.mts +2 -24
  731. package/dist/ui/table.d.cts +2 -70
  732. package/dist/ui/table.d.mts +2 -70
  733. package/dist/ui/tabs.d.cts +2 -42
  734. package/dist/ui/tabs.d.mts +2 -42
  735. package/dist/ui/textarea.d.cts +2 -26
  736. package/dist/ui/textarea.d.mts +2 -26
  737. package/dist/ui/toggle-group.d.cts +2 -37
  738. package/dist/ui/toggle-group.d.mts +2 -37
  739. package/dist/ui/toggle.d.cts +2 -30
  740. package/dist/ui/toggle.d.mts +2 -30
  741. package/dist/ui/tooltip.d.cts +2 -53
  742. package/dist/ui/tooltip.d.mts +2 -53
  743. package/dist/upload-image-D4VZU3IA.d.cts +23 -0
  744. package/dist/upload-image-D4VZU3IA.d.mts +23 -0
  745. package/dist/user-BymzvsYp.mjs +2 -0
  746. package/dist/user-BymzvsYp.mjs.map +1 -0
  747. package/dist/user-CvesQf42.d.cts +20 -0
  748. package/dist/user-CvesQf42.d.mts +20 -0
  749. package/dist/user-Dn53Fu5q.cjs +2 -0
  750. package/dist/user-Dn53Fu5q.cjs.map +1 -0
  751. package/dist/volume-bar-chart-BRpC_8-X.mjs +2 -0
  752. package/dist/volume-bar-chart-BRpC_8-X.mjs.map +1 -0
  753. package/dist/volume-bar-chart-CRxZPZIn.cjs +2 -0
  754. package/dist/volume-bar-chart-CRxZPZIn.cjs.map +1 -0
  755. package/dist/waterfall-chart-CTB2f5eh.cjs +2 -0
  756. package/dist/waterfall-chart-CTB2f5eh.cjs.map +1 -0
  757. package/dist/waterfall-chart-DwetaJFJ.mjs +2 -0
  758. package/dist/waterfall-chart-DwetaJFJ.mjs.map +1 -0
  759. package/package.json +1 -5
  760. package/dist/payment-layout-BLrXT-oc.cjs +0 -2
  761. package/dist/tables-B0Jl8Osc.cjs +0 -4
  762. package/dist/tables-B0Jl8Osc.cjs.map +0 -1
  763. package/dist/tables-Cylalxey.mjs +0 -4
  764. package/dist/tables-Cylalxey.mjs.map +0 -1
  765. package/dist/tanstack-form-BMVn8ai_.cjs +0 -2
  766. package/dist/tanstack-form-BMVn8ai_.cjs.map +0 -1
  767. package/dist/tanstack-form-DTCgWGCA.mjs +0 -2
  768. package/dist/tanstack-form-DTCgWGCA.mjs.map +0 -1
  769. package/dist/text-editor-BQtIXOpM.mjs +0 -2
  770. package/dist/text-editor-BQtIXOpM.mjs.map +0 -1
  771. package/dist/text-editor-DJYQXXtP.cjs +0 -2
  772. package/dist/text-editor-DJYQXXtP.cjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-submit-42PxGLsR.cjs","names":["useTanStackFormContext","Button"],"sources":["../packages/components/features/tanstack-form/components/forms/action-submit.tsx"],"sourcesContent":["import { useCallback } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Button } from '@/components/ui/button';\n\nimport { useTanStackFormContext } from '../form-context';\n\n/**\n * Renders a submit button wired to the current TanStack Form context, automatically handling loading and disabled states.\n *\n * @example\n * import { TanStackActionSubmit } from '@customafk/lunas-ui/features/tanstack-form';\n *\n * // Inside a TanStack Form provider:\n * <TanStackActionSubmit label=\"Save Changes\" className=\"mt-4\" />\n */\nexport const TanStackActionSubmit: React.FC<{\n /** Button label text. Defaults to `'Submit'` when omitted. */\n label?: string;\n /** Additional CSS class names applied to the button element. */\n className?: string;\n}> = ({ label, className }) => {\n const form = useTanStackFormContext();\n\n const onSubmit = useCallback(async () => {\n await form.handleSubmit({ submitAction: 'submit' });\n if (!form.state.isSubmitSuccessful) return;\n form.reset();\n }, [form]);\n return (\n <form.Subscribe\n selector={state => ({\n disabled: state.isPristine || !state.isValid || state.isValidating || state.isSubmitting || !state.canSubmit || state.isDefaultValue,\n isSubmitting: state.isSubmitting,\n })}\n children={({ disabled, isSubmitting }) => {\n return (\n <Button type=\"button\" size=\"md\" disabled={disabled} isLoading={isSubmitting} className={cn('min-h-8 min-w-32', className)} onClick={onSubmit}>\n {label ?? 'Xác nhận'}\n </Button>\n );\n }}\n />\n );\n};\n"],"mappings":"+KAiBA,MAAa,GAKP,CAAE,QAAO,eAAgB,CAC7B,IAAM,EAAOA,EAAAA,EAAuB,EAE9B,GAAA,EAAA,EAAA,YAAA,CAAuB,SAAY,CACvC,MAAM,EAAK,aAAa,CAAE,aAAc,QAAS,CAAC,EAC7C,EAAK,MAAM,oBAChB,EAAK,MAAM,CACb,EAAG,CAAC,CAAI,CAAC,EACT,OACE,EAAA,EAAA,IAAA,CAAC,EAAK,UAAN,CACE,SAAU,IAAU,CAClB,SAAU,EAAM,YAAc,CAAC,EAAM,SAAW,EAAM,cAAgB,EAAM,cAAgB,CAAC,EAAM,WAAa,EAAM,eACtH,aAAc,EAAM,YACtB,GACA,UAAW,CAAE,WAAU,mBAEnB,EAAA,EAAA,IAAA,CAACC,EAAAA,OAAD,CAAQ,KAAK,SAAS,KAAK,KAAe,WAAU,UAAW,EAAc,WAAA,EAAA,EAAA,GAAA,CAAc,mBAAoB,CAAS,EAAG,QAAS,WACjI,GAAS,UACJ,CAAA,CAGb,CAAA,CAEL"}
@@ -0,0 +1,2 @@
1
+ import{Button as e}from"./ui/button.mjs";import{K as t}from"./tanstack-form-PC9YNeeo.mjs";import{useCallback as n}from"react";import{cn as r}from"@customafk/react-toolkit/utils";import{jsx as i}from"react/jsx-runtime";const a=({label:a,className:o})=>{let s=t(),c=n(async()=>{await s.handleSubmit({submitAction:`submit`}),s.state.isSubmitSuccessful&&s.reset()},[s]);return i(s.Subscribe,{selector:e=>({disabled:e.isPristine||!e.isValid||e.isValidating||e.isSubmitting||!e.canSubmit||e.isDefaultValue,isSubmitting:e.isSubmitting}),children:({disabled:t,isSubmitting:n})=>i(e,{type:`button`,size:`md`,disabled:t,isLoading:n,className:r(`min-h-8 min-w-32`,o),onClick:c,children:a??`Xác nhận`})})};export{a as TanStackActionSubmit};
2
+ //# sourceMappingURL=action-submit-SviPJW3i.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-submit-SviPJW3i.mjs","names":[],"sources":["../packages/components/features/tanstack-form/components/forms/action-submit.tsx"],"sourcesContent":["import { useCallback } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Button } from '@/components/ui/button';\n\nimport { useTanStackFormContext } from '../form-context';\n\n/**\n * Renders a submit button wired to the current TanStack Form context, automatically handling loading and disabled states.\n *\n * @example\n * import { TanStackActionSubmit } from '@customafk/lunas-ui/features/tanstack-form';\n *\n * // Inside a TanStack Form provider:\n * <TanStackActionSubmit label=\"Save Changes\" className=\"mt-4\" />\n */\nexport const TanStackActionSubmit: React.FC<{\n /** Button label text. Defaults to `'Submit'` when omitted. */\n label?: string;\n /** Additional CSS class names applied to the button element. */\n className?: string;\n}> = ({ label, className }) => {\n const form = useTanStackFormContext();\n\n const onSubmit = useCallback(async () => {\n await form.handleSubmit({ submitAction: 'submit' });\n if (!form.state.isSubmitSuccessful) return;\n form.reset();\n }, [form]);\n return (\n <form.Subscribe\n selector={state => ({\n disabled: state.isPristine || !state.isValid || state.isValidating || state.isSubmitting || !state.canSubmit || state.isDefaultValue,\n isSubmitting: state.isSubmitting,\n })}\n children={({ disabled, isSubmitting }) => {\n return (\n <Button type=\"button\" size=\"md\" disabled={disabled} isLoading={isSubmitting} className={cn('min-h-8 min-w-32', className)} onClick={onSubmit}>\n {label ?? 'Xác nhận'}\n </Button>\n );\n }}\n />\n );\n};\n"],"mappings":"0NAiBA,MAAa,GAKP,CAAE,QAAO,eAAgB,CAC7B,IAAM,EAAO,EAAuB,EAE9B,EAAW,EAAY,SAAY,CACvC,MAAM,EAAK,aAAa,CAAE,aAAc,QAAS,CAAC,EAC7C,EAAK,MAAM,oBAChB,EAAK,MAAM,CACb,EAAG,CAAC,CAAI,CAAC,EACT,OACE,EAAC,EAAK,UAAN,CACE,SAAU,IAAU,CAClB,SAAU,EAAM,YAAc,CAAC,EAAM,SAAW,EAAM,cAAgB,EAAM,cAAgB,CAAC,EAAM,WAAa,EAAM,eACtH,aAAc,EAAM,YACtB,GACA,UAAW,CAAE,WAAU,kBAEnB,EAAC,EAAD,CAAQ,KAAK,SAAS,KAAK,KAAe,WAAU,UAAW,EAAc,UAAW,EAAG,mBAAoB,CAAS,EAAG,QAAS,WACjI,GAAS,UACJ,CAAA,CAGb,CAAA,CAEL"}
@@ -0,0 +1,2 @@
1
+ const e=require("./ui/button.cjs"),t=require("./tanstack-form-CNrZQZhn.cjs");let n=require("lucide-react"),r=require("react/jsx-runtime");const i=({type:i=`create`})=>{let a=t.K();return(0,r.jsxs)(`div`,{className:`flex h-8 items-center justify-between`,children:[(0,r.jsx)(a.Subscribe,{selector:e=>({disabled:e.isPristine||e.isSubmitting}),children:({disabled:t})=>(0,r.jsx)(e.Button,{color:`muted`,variant:`outline`,type:`button`,size:`md`,disabled:t,className:`h-full min-w-32`,onClick:()=>a.reset(),children:`Hủy bỏ`})}),i===`create`&&(0,r.jsx)(a.Subscribe,{selector:e=>({disabled:e.isPristine||!e.isValid||e.isValidating||e.isSubmitting||!e.canSubmit||e.isDefaultValue,isSubmitting:e.isSubmitting}),children:({disabled:t,isSubmitting:i})=>(0,r.jsxs)(e.Button,{type:`submit`,size:`md`,disabled:t,isLoading:i,className:`h-full min-w-32`,onClick:async()=>{await a.handleSubmit({submitAction:`create`}),a.state.isSubmitSuccessful&&a.reset()},children:[(0,r.jsx)(n.PlusIcon,{}),`Thêm mới`]})}),i===`update`&&(0,r.jsx)(a.Subscribe,{selector:e=>({disabled:e.isPristine||!e.isValid||e.isValidating||e.isSubmitting||!e.canSubmit||e.isDefaultValue,isSubmitting:e.isSubmitting}),children:({disabled:t,isSubmitting:i})=>(0,r.jsxs)(e.Button,{type:`submit`,size:`md`,disabled:t,isLoading:i,className:`h-full min-w-32`,onClick:async()=>{await a.handleSubmit({submitAction:`update`}),a.state.isSubmitSuccessful&&a.reset()},children:[(0,r.jsx)(n.ArrowDownToLine,{}),`Cập nhật`]})})]})};exports.TanStackActionsForm=i;
2
+ //# sourceMappingURL=actions-form-Bo46j_dH.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions-form-Bo46j_dH.cjs","names":["useTanStackFormContext","Button","PlusIcon","ArrowDownToLine"],"sources":["../packages/components/features/tanstack-form/components/forms/actions-form.tsx"],"sourcesContent":["import { ArrowDownToLine, PlusIcon } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\n\nimport { useTanStackFormContext } from '../form-context';\n\n/**\n * Renders a form action bar with a Cancel button and a context-aware submit button (Add New or Update) driven by TanStack Form state.\n *\n * @example\n * import { TanStackActionsForm } from '@customafk/lunas-ui/features/tanstack-form';\n *\n * // Inside a TanStack Form provider:\n * <TanStackActionsForm type=\"create\" />\n *\n * // For an update workflow:\n * <TanStackActionsForm type=\"update\" />\n */\nexport const TanStackActionsForm: React.FC<\n React.PropsWithChildren<{\n /**\n * Determines which submit button variant is rendered.\n * - `'create'` — shows an \"Add New\" button that resets the form on success.\n * - `'update'` — shows an \"Update\" button that resets the form on success.\n * Defaults to `'create'`.\n */\n type?: 'create' | 'update';\n }>\n> = ({ type = 'create' }) => {\n const form = useTanStackFormContext();\n return (\n <div className=\"flex h-8 items-center justify-between\">\n <form.Subscribe\n selector={state => ({\n disabled: state.isPristine || state.isSubmitting,\n })}\n children={({ disabled }) => {\n return (\n <Button color=\"muted\" variant=\"outline\" type=\"button\" size=\"md\" disabled={disabled} className=\"h-full min-w-32\" onClick={() => form.reset()}>\n Hủy bỏ\n </Button>\n );\n }}\n />\n {type === 'create' && (\n <form.Subscribe\n selector={state => ({\n disabled: state.isPristine || !state.isValid || state.isValidating || state.isSubmitting || !state.canSubmit || state.isDefaultValue,\n isSubmitting: state.isSubmitting,\n })}\n children={({ disabled, isSubmitting }) => {\n return (\n <Button\n type=\"submit\"\n size=\"md\"\n disabled={disabled}\n isLoading={isSubmitting}\n className=\"h-full min-w-32\"\n onClick={async () => {\n await form.handleSubmit({ submitAction: 'create' });\n if (!form.state.isSubmitSuccessful) return;\n form.reset();\n }}\n >\n <PlusIcon />\n Thêm mới\n </Button>\n );\n }}\n />\n )}\n {type === 'update' && (\n <form.Subscribe\n selector={state => ({\n disabled: state.isPristine || !state.isValid || state.isValidating || state.isSubmitting || !state.canSubmit || state.isDefaultValue,\n isSubmitting: state.isSubmitting,\n })}\n children={({ disabled, isSubmitting }) => {\n return (\n <Button\n type=\"submit\"\n size=\"md\"\n disabled={disabled}\n isLoading={isSubmitting}\n className=\"h-full min-w-32\"\n onClick={async () => {\n await form.handleSubmit({ submitAction: 'update' });\n if (!form.state.isSubmitSuccessful) return;\n form.reset();\n }}\n >\n <ArrowDownToLine />\n Cập nhật\n </Button>\n );\n }}\n />\n )}\n </div>\n );\n};\n"],"mappings":"0IAkBA,MAAa,GAUR,CAAE,OAAO,YAAe,CAC3B,IAAM,EAAOA,EAAAA,EAAuB,EACpC,OACE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,iDAAf,EACE,EAAA,EAAA,IAAA,CAAC,EAAK,UAAN,CACE,SAAU,IAAU,CAClB,SAAU,EAAM,YAAc,EAAM,YACtC,GACA,UAAW,CAAE,eAET,EAAA,EAAA,IAAA,CAACC,EAAAA,OAAD,CAAQ,MAAM,QAAQ,QAAQ,UAAU,KAAK,SAAS,KAAK,KAAe,WAAU,UAAU,kBAAkB,YAAe,EAAK,MAAM,WAAG,QAErI,CAAA,CAGb,CAAA,EACA,IAAS,WACR,EAAA,EAAA,IAAA,CAAC,EAAK,UAAN,CACE,SAAU,IAAU,CAClB,SAAU,EAAM,YAAc,CAAC,EAAM,SAAW,EAAM,cAAgB,EAAM,cAAgB,CAAC,EAAM,WAAa,EAAM,eACtH,aAAc,EAAM,YACtB,GACA,UAAW,CAAE,WAAU,mBAEnB,EAAA,EAAA,KAAA,CAACA,EAAAA,OAAD,CACE,KAAK,SACL,KAAK,KACK,WACV,UAAW,EACX,UAAU,kBACV,QAAS,SAAY,CACnB,MAAM,EAAK,aAAa,CAAE,aAAc,QAAS,CAAC,EAC7C,EAAK,MAAM,oBAChB,EAAK,MAAM,CACb,WAVF,EAYE,EAAA,EAAA,IAAA,CAACC,EAAAA,SAAD,CAAW,CAAA,EAAC,UAEN,GAGb,CAAA,EAEF,IAAS,WACR,EAAA,EAAA,IAAA,CAAC,EAAK,UAAN,CACE,SAAU,IAAU,CAClB,SAAU,EAAM,YAAc,CAAC,EAAM,SAAW,EAAM,cAAgB,EAAM,cAAgB,CAAC,EAAM,WAAa,EAAM,eACtH,aAAc,EAAM,YACtB,GACA,UAAW,CAAE,WAAU,mBAEnB,EAAA,EAAA,KAAA,CAACD,EAAAA,OAAD,CACE,KAAK,SACL,KAAK,KACK,WACV,UAAW,EACX,UAAU,kBACV,QAAS,SAAY,CACnB,MAAM,EAAK,aAAa,CAAE,aAAc,QAAS,CAAC,EAC7C,EAAK,MAAM,oBAChB,EAAK,MAAM,CACb,WAVF,EAYE,EAAA,EAAA,IAAA,CAACE,EAAAA,gBAAD,CAAkB,CAAA,EAAC,UAEb,GAGb,CAAA,CAEA,GAET"}
@@ -0,0 +1,2 @@
1
+ import{Button as e}from"./ui/button.mjs";import{K as t}from"./tanstack-form-PC9YNeeo.mjs";import{ArrowDownToLine as n,PlusIcon as r}from"lucide-react";import{jsx as i,jsxs as a}from"react/jsx-runtime";const o=({type:o=`create`})=>{let s=t();return a(`div`,{className:`flex h-8 items-center justify-between`,children:[i(s.Subscribe,{selector:e=>({disabled:e.isPristine||e.isSubmitting}),children:({disabled:t})=>i(e,{color:`muted`,variant:`outline`,type:`button`,size:`md`,disabled:t,className:`h-full min-w-32`,onClick:()=>s.reset(),children:`Hủy bỏ`})}),o===`create`&&i(s.Subscribe,{selector:e=>({disabled:e.isPristine||!e.isValid||e.isValidating||e.isSubmitting||!e.canSubmit||e.isDefaultValue,isSubmitting:e.isSubmitting}),children:({disabled:t,isSubmitting:n})=>a(e,{type:`submit`,size:`md`,disabled:t,isLoading:n,className:`h-full min-w-32`,onClick:async()=>{await s.handleSubmit({submitAction:`create`}),s.state.isSubmitSuccessful&&s.reset()},children:[i(r,{}),`Thêm mới`]})}),o===`update`&&i(s.Subscribe,{selector:e=>({disabled:e.isPristine||!e.isValid||e.isValidating||e.isSubmitting||!e.canSubmit||e.isDefaultValue,isSubmitting:e.isSubmitting}),children:({disabled:t,isSubmitting:r})=>a(e,{type:`submit`,size:`md`,disabled:t,isLoading:r,className:`h-full min-w-32`,onClick:async()=>{await s.handleSubmit({submitAction:`update`}),s.state.isSubmitSuccessful&&s.reset()},children:[i(n,{}),`Cập nhật`]})})]})};export{o as TanStackActionsForm};
2
+ //# sourceMappingURL=actions-form-QdAsKwcQ.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions-form-QdAsKwcQ.mjs","names":[],"sources":["../packages/components/features/tanstack-form/components/forms/actions-form.tsx"],"sourcesContent":["import { ArrowDownToLine, PlusIcon } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\n\nimport { useTanStackFormContext } from '../form-context';\n\n/**\n * Renders a form action bar with a Cancel button and a context-aware submit button (Add New or Update) driven by TanStack Form state.\n *\n * @example\n * import { TanStackActionsForm } from '@customafk/lunas-ui/features/tanstack-form';\n *\n * // Inside a TanStack Form provider:\n * <TanStackActionsForm type=\"create\" />\n *\n * // For an update workflow:\n * <TanStackActionsForm type=\"update\" />\n */\nexport const TanStackActionsForm: React.FC<\n React.PropsWithChildren<{\n /**\n * Determines which submit button variant is rendered.\n * - `'create'` — shows an \"Add New\" button that resets the form on success.\n * - `'update'` — shows an \"Update\" button that resets the form on success.\n * Defaults to `'create'`.\n */\n type?: 'create' | 'update';\n }>\n> = ({ type = 'create' }) => {\n const form = useTanStackFormContext();\n return (\n <div className=\"flex h-8 items-center justify-between\">\n <form.Subscribe\n selector={state => ({\n disabled: state.isPristine || state.isSubmitting,\n })}\n children={({ disabled }) => {\n return (\n <Button color=\"muted\" variant=\"outline\" type=\"button\" size=\"md\" disabled={disabled} className=\"h-full min-w-32\" onClick={() => form.reset()}>\n Hủy bỏ\n </Button>\n );\n }}\n />\n {type === 'create' && (\n <form.Subscribe\n selector={state => ({\n disabled: state.isPristine || !state.isValid || state.isValidating || state.isSubmitting || !state.canSubmit || state.isDefaultValue,\n isSubmitting: state.isSubmitting,\n })}\n children={({ disabled, isSubmitting }) => {\n return (\n <Button\n type=\"submit\"\n size=\"md\"\n disabled={disabled}\n isLoading={isSubmitting}\n className=\"h-full min-w-32\"\n onClick={async () => {\n await form.handleSubmit({ submitAction: 'create' });\n if (!form.state.isSubmitSuccessful) return;\n form.reset();\n }}\n >\n <PlusIcon />\n Thêm mới\n </Button>\n );\n }}\n />\n )}\n {type === 'update' && (\n <form.Subscribe\n selector={state => ({\n disabled: state.isPristine || !state.isValid || state.isValidating || state.isSubmitting || !state.canSubmit || state.isDefaultValue,\n isSubmitting: state.isSubmitting,\n })}\n children={({ disabled, isSubmitting }) => {\n return (\n <Button\n type=\"submit\"\n size=\"md\"\n disabled={disabled}\n isLoading={isSubmitting}\n className=\"h-full min-w-32\"\n onClick={async () => {\n await form.handleSubmit({ submitAction: 'update' });\n if (!form.state.isSubmitSuccessful) return;\n form.reset();\n }}\n >\n <ArrowDownToLine />\n Cập nhật\n </Button>\n );\n }}\n />\n )}\n </div>\n );\n};\n"],"mappings":"yMAkBA,MAAa,GAUR,CAAE,OAAO,YAAe,CAC3B,IAAM,EAAO,EAAuB,EACpC,OACE,EAAC,MAAD,CAAK,UAAU,iDAAf,CACE,EAAC,EAAK,UAAN,CACE,SAAU,IAAU,CAClB,SAAU,EAAM,YAAc,EAAM,YACtC,GACA,UAAW,CAAE,cAET,EAAC,EAAD,CAAQ,MAAM,QAAQ,QAAQ,UAAU,KAAK,SAAS,KAAK,KAAe,WAAU,UAAU,kBAAkB,YAAe,EAAK,MAAM,WAAG,QAErI,CAAA,CAGb,CAAA,EACA,IAAS,UACR,EAAC,EAAK,UAAN,CACE,SAAU,IAAU,CAClB,SAAU,EAAM,YAAc,CAAC,EAAM,SAAW,EAAM,cAAgB,EAAM,cAAgB,CAAC,EAAM,WAAa,EAAM,eACtH,aAAc,EAAM,YACtB,GACA,UAAW,CAAE,WAAU,kBAEnB,EAAC,EAAD,CACE,KAAK,SACL,KAAK,KACK,WACV,UAAW,EACX,UAAU,kBACV,QAAS,SAAY,CACnB,MAAM,EAAK,aAAa,CAAE,aAAc,QAAS,CAAC,EAC7C,EAAK,MAAM,oBAChB,EAAK,MAAM,CACb,WAVF,CAYE,EAAC,EAAD,CAAW,CAAA,EAAC,UAEN,GAGb,CAAA,EAEF,IAAS,UACR,EAAC,EAAK,UAAN,CACE,SAAU,IAAU,CAClB,SAAU,EAAM,YAAc,CAAC,EAAM,SAAW,EAAM,cAAgB,EAAM,cAAgB,CAAC,EAAM,WAAa,EAAM,eACtH,aAAc,EAAM,YACtB,GACA,UAAW,CAAE,WAAU,kBAEnB,EAAC,EAAD,CACE,KAAK,SACL,KAAK,KACK,WACV,UAAW,EACX,UAAU,kBACV,QAAS,SAAY,CACnB,MAAM,EAAK,aAAa,CAAE,aAAc,QAAS,CAAC,EAC7C,EAAK,MAAM,oBAChB,EAAK,MAAM,CACb,WAVF,CAYE,EAAC,EAAD,CAAkB,CAAA,EAAC,UAEb,GAGb,CAAA,CAEA,GAET"}
@@ -0,0 +1,2 @@
1
+ import{toDateLabel as e}from"./features/charts/index.mjs";import{ChartContainer as t,ChartTooltip as n,ChartTooltipContent as r}from"./ui/chart.mjs";import{useMemo as i}from"react";import{cn as a}from"@customafk/react-toolkit/utils";import{jsx as o,jsxs as s}from"react/jsx-runtime";import{Scatter as c,ScatterChart as l,XAxis as u,YAxis as d}from"recharts";const f=[`S`,`M`,`T`,`W`,`T`,`F`,`S`],p=({data:p,label:m=`Activity`,color:h=`var(--chart-1)`,valueFormatter:g=e=>e.toLocaleString(`en-US`),className:_,height:v})=>{let y=i(()=>({value:{label:m,color:h}}),[m,h]),{chartData:b,monthTicks:x,maxWeek:S,maxValue:C}=i(()=>{let e=p.map(e=>({...e,parsedDate:e.date instanceof Date?e.date:new Date(e.date)})).sort((e,t)=>e.parsedDate.getTime()-t.parsedDate.getTime());if(e.length===0)return{chartData:[],monthTicks:new Map,maxWeek:0,maxValue:1};let t=e[0]?.parsedDate,n=new Date(t);n.setDate(n.getDate()-n.getDay());let r=new Map,i=-1,a=e.map(e=>{let t=e.parsedDate.getDay(),a=Math.floor((e.parsedDate.getTime()-n.getTime())/864e5/7),o=e.parsedDate.getMonth();return o!==i&&(r.set(a,e.parsedDate.toLocaleDateString(`en-US`,{month:`short`})),i=o),{x:a,y:t,value:e.value,date:e.date}});return{chartData:a,monthTicks:r,maxWeek:Math.max(...a.map(e=>e.x)),maxValue:Math.max(...a.map(e=>e.value),1)}},[p]);return o(t,{"data-slot":`activity-heatmap-chart`,config:y,className:a(`w-full`,_),style:v===void 0?void 0:{height:v,aspectRatio:`auto`},children:s(l,{margin:{top:8,right:12,bottom:0,left:0},children:[o(u,{type:`number`,dataKey:`x`,domain:[-.5,S+.5],ticks:Array.from(x.keys()),tickFormatter:e=>x.get(e)??``,tickLine:!1,axisLine:!1,tickMargin:8,interval:0}),o(d,{type:`number`,dataKey:`y`,domain:[-.5,6.5],reversed:!0,ticks:[0,1,2,3,4,5,6],tickFormatter:e=>f[e]??``,tickLine:!1,axisLine:!1,width:20,interval:0}),o(n,{cursor:!1,content:o(r,{hideLabel:!0,hideIndicator:!0,formatter:(t,n,r)=>{let i=r.payload;return s(`div`,{className:`grid gap-0.5`,children:[o(`span`,{className:`font-medium text-muted-strong`,children:e(i.date)}),s(`span`,{className:`text-muted`,children:[g(i.value),` `,y.value?.label]})]})}})}),o(c,{data:b,shape:e=>{let{cx:t,cy:n,payload:r}=e;if(t===void 0||n===void 0)return o(`g`,{});let i=Math.min(.12+.88*(r.value/C),1);return o(`rect`,{x:t-13/2,y:n-13/2,width:13,height:13,rx:3,fill:h,fillOpacity:i})}})]})})};export{p as ActivityHeatmapChart};
2
+ //# sourceMappingURL=activity-heatmap-chart-DufvFndI.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity-heatmap-chart-DufvFndI.mjs","names":["point"],"sources":["../packages/components/features/charts/components/activity-heatmap-chart.tsx"],"sourcesContent":["'use client';\n\nimport { useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { type ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart';\n\nimport { Scatter, ScatterChart, XAxis, YAxis } from 'recharts';\nimport type { ActivityPoint, BaseChartProps } from '../types';\nimport { toDateLabel } from '../utils';\n\nconst WEEKDAY_LABELS = ['S', 'M', 'T', 'W', 'T', 'F', 'S'];\nconst CELL_SIZE = 13;\nconst MS_PER_DAY = 86_400_000;\n\nexport type ActivityHeatmapChartProps = BaseChartProps & {\n data: ActivityPoint[];\n /** Series label used in the theme config. Defaults to `'Activity'`. */\n label?: string;\n color?: string;\n valueFormatter?: (value: number) => string;\n};\n\n/**\n * A GitHub-style calendar heatmap for daily activity/usage intensity — logins, orders, commits\n * per day — laid out as a week-by-weekday grid with color opacity mapped to value.\n *\n * @example\n * ```tsx\n * import { ActivityHeatmapChart } from '@customafk/lunas-ui/features/charts';\n *\n * <ActivityHeatmapChart\n * data={[\n * { date: '2026-06-01', value: 4 },\n * { date: '2026-06-02', value: 12 },\n * ]}\n * />\n * ```\n */\nexport const ActivityHeatmapChart = ({\n data,\n label = 'Activity',\n color = 'var(--chart-1)',\n valueFormatter = value => value.toLocaleString('en-US'),\n className,\n height,\n}: ActivityHeatmapChartProps) => {\n const config = useMemo<ChartConfig>(() => ({ value: { label, color } }), [label, color]);\n\n const { chartData, monthTicks, maxWeek, maxValue } = useMemo(() => {\n const parsed = data\n .map(point => ({ ...point, parsedDate: point.date instanceof Date ? point.date : new Date(point.date) }))\n .sort((a, b) => a.parsedDate.getTime() - b.parsedDate.getTime());\n\n if (parsed.length === 0) return { chartData: [], monthTicks: new Map<number, string>(), maxWeek: 0, maxValue: 1 };\n\n const firstDate = parsed[0]?.parsedDate;\n const weekStart = new Date(firstDate);\n weekStart.setDate(weekStart.getDate() - weekStart.getDay());\n\n const months = new Map<number, string>();\n let lastMonth = -1;\n\n const points = parsed.map(point => {\n const weekday = point.parsedDate.getDay();\n const weekIndex = Math.floor((point.parsedDate.getTime() - weekStart.getTime()) / MS_PER_DAY / 7);\n const month = point.parsedDate.getMonth();\n if (month !== lastMonth) {\n months.set(weekIndex, point.parsedDate.toLocaleDateString('en-US', { month: 'short' }));\n lastMonth = month;\n }\n return { x: weekIndex, y: weekday, value: point.value, date: point.date };\n });\n\n return {\n chartData: points,\n monthTicks: months,\n maxWeek: Math.max(...points.map(point => point.x)),\n maxValue: Math.max(...points.map(point => point.value), 1),\n };\n }, [data]);\n\n return (\n <ChartContainer\n data-slot=\"activity-heatmap-chart\"\n config={config}\n className={cn('w-full', className)}\n style={height !== undefined ? { height, aspectRatio: 'auto' } : undefined}\n >\n <ScatterChart margin={{ top: 8, right: 12, bottom: 0, left: 0 }}>\n <XAxis\n type=\"number\"\n dataKey=\"x\"\n domain={[-0.5, maxWeek + 0.5]}\n ticks={Array.from(monthTicks.keys())}\n tickFormatter={x => monthTicks.get(x) ?? ''}\n tickLine={false}\n axisLine={false}\n tickMargin={8}\n interval={0}\n />\n <YAxis\n type=\"number\"\n dataKey=\"y\"\n domain={[-0.5, 6.5]}\n reversed\n ticks={[0, 1, 2, 3, 4, 5, 6]}\n tickFormatter={y => WEEKDAY_LABELS[y] ?? ''}\n tickLine={false}\n axisLine={false}\n width={20}\n interval={0}\n />\n <ChartTooltip\n cursor={false}\n content={\n <ChartTooltipContent\n hideLabel\n hideIndicator\n formatter={(_value, _name, item) => {\n const point = item.payload as { date: string | Date; value: number };\n return (\n <div className=\"grid gap-0.5\">\n <span className=\"font-medium text-muted-strong\">{toDateLabel(point.date)}</span>\n <span className=\"text-muted\">\n {valueFormatter(point.value)} {config.value?.label}\n </span>\n </div>\n );\n }}\n />\n }\n />\n <Scatter\n data={chartData}\n shape={props => {\n const { cx, cy, payload } = props;\n if (cx === undefined || cy === undefined) return <g />;\n const point = payload as { value: number };\n const intensity = Math.min(0.12 + 0.88 * (point.value / maxValue), 1);\n return <rect x={cx - CELL_SIZE / 2} y={cy - CELL_SIZE / 2} width={CELL_SIZE} height={CELL_SIZE} rx={3} fill={color} fillOpacity={intensity} />;\n }}\n />\n </ScatterChart>\n </ChartContainer>\n );\n};\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ const e=require("./features/charts/index.cjs"),t=require("./ui/chart.cjs");let n=require("react"),r=require("@customafk/react-toolkit/utils"),i=require("react/jsx-runtime"),a=require("recharts");const o=[`S`,`M`,`T`,`W`,`T`,`F`,`S`],s=({data:s,label:c=`Activity`,color:l=`var(--chart-1)`,valueFormatter:u=e=>e.toLocaleString(`en-US`),className:d,height:f})=>{let p=(0,n.useMemo)(()=>({value:{label:c,color:l}}),[c,l]),{chartData:m,monthTicks:h,maxWeek:g,maxValue:_}=(0,n.useMemo)(()=>{let e=s.map(e=>({...e,parsedDate:e.date instanceof Date?e.date:new Date(e.date)})).sort((e,t)=>e.parsedDate.getTime()-t.parsedDate.getTime());if(e.length===0)return{chartData:[],monthTicks:new Map,maxWeek:0,maxValue:1};let t=e[0]?.parsedDate,n=new Date(t);n.setDate(n.getDate()-n.getDay());let r=new Map,i=-1,a=e.map(e=>{let t=e.parsedDate.getDay(),a=Math.floor((e.parsedDate.getTime()-n.getTime())/864e5/7),o=e.parsedDate.getMonth();return o!==i&&(r.set(a,e.parsedDate.toLocaleDateString(`en-US`,{month:`short`})),i=o),{x:a,y:t,value:e.value,date:e.date}});return{chartData:a,monthTicks:r,maxWeek:Math.max(...a.map(e=>e.x)),maxValue:Math.max(...a.map(e=>e.value),1)}},[s]);return(0,i.jsx)(t.ChartContainer,{"data-slot":`activity-heatmap-chart`,config:p,className:(0,r.cn)(`w-full`,d),style:f===void 0?void 0:{height:f,aspectRatio:`auto`},children:(0,i.jsxs)(a.ScatterChart,{margin:{top:8,right:12,bottom:0,left:0},children:[(0,i.jsx)(a.XAxis,{type:`number`,dataKey:`x`,domain:[-.5,g+.5],ticks:Array.from(h.keys()),tickFormatter:e=>h.get(e)??``,tickLine:!1,axisLine:!1,tickMargin:8,interval:0}),(0,i.jsx)(a.YAxis,{type:`number`,dataKey:`y`,domain:[-.5,6.5],reversed:!0,ticks:[0,1,2,3,4,5,6],tickFormatter:e=>o[e]??``,tickLine:!1,axisLine:!1,width:20,interval:0}),(0,i.jsx)(t.ChartTooltip,{cursor:!1,content:(0,i.jsx)(t.ChartTooltipContent,{hideLabel:!0,hideIndicator:!0,formatter:(t,n,r)=>{let a=r.payload;return(0,i.jsxs)(`div`,{className:`grid gap-0.5`,children:[(0,i.jsx)(`span`,{className:`font-medium text-muted-strong`,children:e.toDateLabel(a.date)}),(0,i.jsxs)(`span`,{className:`text-muted`,children:[u(a.value),` `,p.value?.label]})]})}})}),(0,i.jsx)(a.Scatter,{data:m,shape:e=>{let{cx:t,cy:n,payload:r}=e;if(t===void 0||n===void 0)return(0,i.jsx)(`g`,{});let a=Math.min(.12+.88*(r.value/_),1);return(0,i.jsx)(`rect`,{x:t-13/2,y:n-13/2,width:13,height:13,rx:3,fill:l,fillOpacity:a})}})]})})};exports.ActivityHeatmapChart=s;
2
+ //# sourceMappingURL=activity-heatmap-chart-gDcvIAK_.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity-heatmap-chart-gDcvIAK_.cjs","names":["ChartContainer","ScatterChart","XAxis","YAxis","ChartTooltip","ChartTooltipContent","toDateLabel","Scatter","point"],"sources":["../packages/components/features/charts/components/activity-heatmap-chart.tsx"],"sourcesContent":["'use client';\n\nimport { useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { type ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart';\n\nimport { Scatter, ScatterChart, XAxis, YAxis } from 'recharts';\nimport type { ActivityPoint, BaseChartProps } from '../types';\nimport { toDateLabel } from '../utils';\n\nconst WEEKDAY_LABELS = ['S', 'M', 'T', 'W', 'T', 'F', 'S'];\nconst CELL_SIZE = 13;\nconst MS_PER_DAY = 86_400_000;\n\nexport type ActivityHeatmapChartProps = BaseChartProps & {\n data: ActivityPoint[];\n /** Series label used in the theme config. Defaults to `'Activity'`. */\n label?: string;\n color?: string;\n valueFormatter?: (value: number) => string;\n};\n\n/**\n * A GitHub-style calendar heatmap for daily activity/usage intensity — logins, orders, commits\n * per day — laid out as a week-by-weekday grid with color opacity mapped to value.\n *\n * @example\n * ```tsx\n * import { ActivityHeatmapChart } from '@customafk/lunas-ui/features/charts';\n *\n * <ActivityHeatmapChart\n * data={[\n * { date: '2026-06-01', value: 4 },\n * { date: '2026-06-02', value: 12 },\n * ]}\n * />\n * ```\n */\nexport const ActivityHeatmapChart = ({\n data,\n label = 'Activity',\n color = 'var(--chart-1)',\n valueFormatter = value => value.toLocaleString('en-US'),\n className,\n height,\n}: ActivityHeatmapChartProps) => {\n const config = useMemo<ChartConfig>(() => ({ value: { label, color } }), [label, color]);\n\n const { chartData, monthTicks, maxWeek, maxValue } = useMemo(() => {\n const parsed = data\n .map(point => ({ ...point, parsedDate: point.date instanceof Date ? point.date : new Date(point.date) }))\n .sort((a, b) => a.parsedDate.getTime() - b.parsedDate.getTime());\n\n if (parsed.length === 0) return { chartData: [], monthTicks: new Map<number, string>(), maxWeek: 0, maxValue: 1 };\n\n const firstDate = parsed[0]?.parsedDate;\n const weekStart = new Date(firstDate);\n weekStart.setDate(weekStart.getDate() - weekStart.getDay());\n\n const months = new Map<number, string>();\n let lastMonth = -1;\n\n const points = parsed.map(point => {\n const weekday = point.parsedDate.getDay();\n const weekIndex = Math.floor((point.parsedDate.getTime() - weekStart.getTime()) / MS_PER_DAY / 7);\n const month = point.parsedDate.getMonth();\n if (month !== lastMonth) {\n months.set(weekIndex, point.parsedDate.toLocaleDateString('en-US', { month: 'short' }));\n lastMonth = month;\n }\n return { x: weekIndex, y: weekday, value: point.value, date: point.date };\n });\n\n return {\n chartData: points,\n monthTicks: months,\n maxWeek: Math.max(...points.map(point => point.x)),\n maxValue: Math.max(...points.map(point => point.value), 1),\n };\n }, [data]);\n\n return (\n <ChartContainer\n data-slot=\"activity-heatmap-chart\"\n config={config}\n className={cn('w-full', className)}\n style={height !== undefined ? { height, aspectRatio: 'auto' } : undefined}\n >\n <ScatterChart margin={{ top: 8, right: 12, bottom: 0, left: 0 }}>\n <XAxis\n type=\"number\"\n dataKey=\"x\"\n domain={[-0.5, maxWeek + 0.5]}\n ticks={Array.from(monthTicks.keys())}\n tickFormatter={x => monthTicks.get(x) ?? ''}\n tickLine={false}\n axisLine={false}\n tickMargin={8}\n interval={0}\n />\n <YAxis\n type=\"number\"\n dataKey=\"y\"\n domain={[-0.5, 6.5]}\n reversed\n ticks={[0, 1, 2, 3, 4, 5, 6]}\n tickFormatter={y => WEEKDAY_LABELS[y] ?? ''}\n tickLine={false}\n axisLine={false}\n width={20}\n interval={0}\n />\n <ChartTooltip\n cursor={false}\n content={\n <ChartTooltipContent\n hideLabel\n hideIndicator\n formatter={(_value, _name, item) => {\n const point = item.payload as { date: string | Date; value: number };\n return (\n <div className=\"grid gap-0.5\">\n <span className=\"font-medium text-muted-strong\">{toDateLabel(point.date)}</span>\n <span className=\"text-muted\">\n {valueFormatter(point.value)} {config.value?.label}\n </span>\n </div>\n );\n }}\n />\n }\n />\n <Scatter\n data={chartData}\n shape={props => {\n const { cx, cy, payload } = props;\n if (cx === undefined || cy === undefined) return <g />;\n const point = payload as { value: number };\n const intensity = Math.min(0.12 + 0.88 * (point.value / maxValue), 1);\n return <rect x={cx - CELL_SIZE / 2} y={cy - CELL_SIZE / 2} width={CELL_SIZE} height={CELL_SIZE} rx={3} fill={color} fillOpacity={intensity} />;\n }}\n />\n </ScatterChart>\n </ChartContainer>\n );\n};\n"],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ //#region packages/components/ui/buttons/add-new.d.ts
2
+ type Props = {
3
+ /** Callback invoked when the button is clicked. Defaults to a no-op. */onClick?: () => void;
4
+ };
5
+ /**
6
+ * A toolbar button that triggers a "create new" action, displaying a plus icon alongside a "Create" label that is hidden on small screens.
7
+ *
8
+ * @example
9
+ * import { AddNewBtn } from '@customafk/lunas-ui/ui/buttons/add-new';
10
+ *
11
+ * <AddNewBtn onClick={() => setOpen(true)} />
12
+ */
13
+ declare const AddNewBtn: React.FC<React.PropsWithChildren<Props>>;
14
+ //#endregion
15
+ export { AddNewBtn as t };
16
+ //# sourceMappingURL=add-new-DkBwXh0Q.d.cts.map
@@ -0,0 +1,16 @@
1
+ //#region packages/components/ui/buttons/add-new.d.ts
2
+ type Props = {
3
+ /** Callback invoked when the button is clicked. Defaults to a no-op. */onClick?: () => void;
4
+ };
5
+ /**
6
+ * A toolbar button that triggers a "create new" action, displaying a plus icon alongside a "Create" label that is hidden on small screens.
7
+ *
8
+ * @example
9
+ * import { AddNewBtn } from '@customafk/lunas-ui/ui/buttons/add-new';
10
+ *
11
+ * <AddNewBtn onClick={() => setOpen(true)} />
12
+ */
13
+ declare const AddNewBtn: React.FC<React.PropsWithChildren<Props>>;
14
+ //#endregion
15
+ export { AddNewBtn as t };
16
+ //# sourceMappingURL=add-new-DkBwXh0Q.d.mts.map
@@ -0,0 +1,88 @@
1
+ import { AlertDialog } from "radix-ui";
2
+
3
+ //#region packages/components/ui/alert-dialog.d.ts
4
+ /**
5
+ * Accessible alert dialog built on Radix UI's AlertDialog primitives, requiring explicit user confirmation before a destructive action can proceed.
6
+ *
7
+ * @example
8
+ * ```tsx
9
+ * import {
10
+ * AlertDialog, AlertDialogTrigger, AlertDialogContent,
11
+ * AlertDialogHeader, AlertDialogTitle, AlertDialogDescription,
12
+ * AlertDialogFooter, AlertDialogAction, AlertDialogCancel,
13
+ * } from '@customafk/lunas-ui/ui/alert-dialog';
14
+ * import { Button } from '@customafk/lunas-ui/ui/button';
15
+ *
16
+ * <AlertDialog>
17
+ * <AlertDialogTrigger asChild>
18
+ * <Button variant="solid" color="danger">Delete account</Button>
19
+ * </AlertDialogTrigger>
20
+ * <AlertDialogContent>
21
+ * <AlertDialogHeader>
22
+ * <AlertDialogTitle>Are you absolutely sure?</AlertDialogTitle>
23
+ * <AlertDialogDescription>
24
+ * This action cannot be undone. Your account will be permanently deleted.
25
+ * </AlertDialogDescription>
26
+ * </AlertDialogHeader>
27
+ * <AlertDialogFooter>
28
+ * <AlertDialogCancel>Cancel</AlertDialogCancel>
29
+ * <AlertDialogAction>Continue</AlertDialogAction>
30
+ * </AlertDialogFooter>
31
+ * </AlertDialogContent>
32
+ * </AlertDialog>
33
+ * ```
34
+ */
35
+ declare function AlertDialog$1({
36
+ ...props
37
+ }: React.ComponentProps<typeof AlertDialog.Root>): import("react").JSX.Element;
38
+ /** Element that opens the alert dialog when clicked; typically wrapped with `asChild` around a `Button`. */
39
+ declare function AlertDialogTrigger({
40
+ ...props
41
+ }: React.ComponentProps<typeof AlertDialog.Trigger>): import("react").JSX.Element;
42
+ /** Renders alert dialog overlay and content into a portal outside the normal React tree. */
43
+ declare function AlertDialogPortal({
44
+ ...props
45
+ }: React.ComponentProps<typeof AlertDialog.Portal>): import("react").JSX.Element;
46
+ /** Semi-transparent backdrop rendered behind the alert dialog panel; pointer events are disabled to prevent accidental dismissal. */
47
+ declare function AlertDialogOverlay({
48
+ className,
49
+ ...props
50
+ }: React.ComponentProps<typeof AlertDialog.Overlay>): import("react").JSX.Element;
51
+ /** Animated panel that contains the alert dialog body; renders via `AlertDialogPortal` over `AlertDialogOverlay`. */
52
+ declare function AlertDialogContent({
53
+ className,
54
+ ...props
55
+ }: React.ComponentProps<typeof AlertDialog.Content>): import("react").JSX.Element;
56
+ /** Layout wrapper for the alert dialog title and description. */
57
+ declare function AlertDialogHeader({
58
+ className,
59
+ ...props
60
+ }: React.ComponentProps<'div'>): import("react").JSX.Element;
61
+ /** Layout wrapper for the cancel and action buttons at the bottom of the alert dialog. */
62
+ declare function AlertDialogFooter({
63
+ className,
64
+ ...props
65
+ }: React.ComponentProps<'div'>): import("react").JSX.Element;
66
+ /** Accessible heading for the alert dialog, styled with the h3 heading variant. */
67
+ declare function AlertDialogTitle({
68
+ className,
69
+ ...props
70
+ }: React.ComponentProps<typeof AlertDialog.Title>): import("react").JSX.Element;
71
+ /** Muted supporting text that explains the consequences of the destructive action. */
72
+ declare function AlertDialogDescription({
73
+ className,
74
+ ...props
75
+ }: React.ComponentProps<typeof AlertDialog.Description>): import("react").JSX.Element;
76
+ /** Confirm button that closes the dialog and proceeds with the action; auto-focused and styled as the primary action. */
77
+ declare function AlertDialogAction({
78
+ className,
79
+ ...props
80
+ }: React.ComponentProps<typeof AlertDialog.Action>): import("react").JSX.Element;
81
+ /** Cancel button that closes the alert dialog without performing the destructive action. */
82
+ declare function AlertDialogCancel({
83
+ className,
84
+ ...props
85
+ }: React.ComponentProps<typeof AlertDialog.Cancel>): import("react").JSX.Element;
86
+ //#endregion
87
+ export { AlertDialogDescription as a, AlertDialogOverlay as c, AlertDialogTrigger as d, AlertDialogContent as i, AlertDialogPortal as l, AlertDialogAction as n, AlertDialogFooter as o, AlertDialogCancel as r, AlertDialogHeader as s, AlertDialog$1 as t, AlertDialogTitle as u };
88
+ //# sourceMappingURL=alert-dialog-Cdhz7jSj.d.cts.map
@@ -0,0 +1,88 @@
1
+ import { AlertDialog } from "radix-ui";
2
+
3
+ //#region packages/components/ui/alert-dialog.d.ts
4
+ /**
5
+ * Accessible alert dialog built on Radix UI's AlertDialog primitives, requiring explicit user confirmation before a destructive action can proceed.
6
+ *
7
+ * @example
8
+ * ```tsx
9
+ * import {
10
+ * AlertDialog, AlertDialogTrigger, AlertDialogContent,
11
+ * AlertDialogHeader, AlertDialogTitle, AlertDialogDescription,
12
+ * AlertDialogFooter, AlertDialogAction, AlertDialogCancel,
13
+ * } from '@customafk/lunas-ui/ui/alert-dialog';
14
+ * import { Button } from '@customafk/lunas-ui/ui/button';
15
+ *
16
+ * <AlertDialog>
17
+ * <AlertDialogTrigger asChild>
18
+ * <Button variant="solid" color="danger">Delete account</Button>
19
+ * </AlertDialogTrigger>
20
+ * <AlertDialogContent>
21
+ * <AlertDialogHeader>
22
+ * <AlertDialogTitle>Are you absolutely sure?</AlertDialogTitle>
23
+ * <AlertDialogDescription>
24
+ * This action cannot be undone. Your account will be permanently deleted.
25
+ * </AlertDialogDescription>
26
+ * </AlertDialogHeader>
27
+ * <AlertDialogFooter>
28
+ * <AlertDialogCancel>Cancel</AlertDialogCancel>
29
+ * <AlertDialogAction>Continue</AlertDialogAction>
30
+ * </AlertDialogFooter>
31
+ * </AlertDialogContent>
32
+ * </AlertDialog>
33
+ * ```
34
+ */
35
+ declare function AlertDialog$1({
36
+ ...props
37
+ }: React.ComponentProps<typeof AlertDialog.Root>): import("react").JSX.Element;
38
+ /** Element that opens the alert dialog when clicked; typically wrapped with `asChild` around a `Button`. */
39
+ declare function AlertDialogTrigger({
40
+ ...props
41
+ }: React.ComponentProps<typeof AlertDialog.Trigger>): import("react").JSX.Element;
42
+ /** Renders alert dialog overlay and content into a portal outside the normal React tree. */
43
+ declare function AlertDialogPortal({
44
+ ...props
45
+ }: React.ComponentProps<typeof AlertDialog.Portal>): import("react").JSX.Element;
46
+ /** Semi-transparent backdrop rendered behind the alert dialog panel; pointer events are disabled to prevent accidental dismissal. */
47
+ declare function AlertDialogOverlay({
48
+ className,
49
+ ...props
50
+ }: React.ComponentProps<typeof AlertDialog.Overlay>): import("react").JSX.Element;
51
+ /** Animated panel that contains the alert dialog body; renders via `AlertDialogPortal` over `AlertDialogOverlay`. */
52
+ declare function AlertDialogContent({
53
+ className,
54
+ ...props
55
+ }: React.ComponentProps<typeof AlertDialog.Content>): import("react").JSX.Element;
56
+ /** Layout wrapper for the alert dialog title and description. */
57
+ declare function AlertDialogHeader({
58
+ className,
59
+ ...props
60
+ }: React.ComponentProps<'div'>): import("react").JSX.Element;
61
+ /** Layout wrapper for the cancel and action buttons at the bottom of the alert dialog. */
62
+ declare function AlertDialogFooter({
63
+ className,
64
+ ...props
65
+ }: React.ComponentProps<'div'>): import("react").JSX.Element;
66
+ /** Accessible heading for the alert dialog, styled with the h3 heading variant. */
67
+ declare function AlertDialogTitle({
68
+ className,
69
+ ...props
70
+ }: React.ComponentProps<typeof AlertDialog.Title>): import("react").JSX.Element;
71
+ /** Muted supporting text that explains the consequences of the destructive action. */
72
+ declare function AlertDialogDescription({
73
+ className,
74
+ ...props
75
+ }: React.ComponentProps<typeof AlertDialog.Description>): import("react").JSX.Element;
76
+ /** Confirm button that closes the dialog and proceeds with the action; auto-focused and styled as the primary action. */
77
+ declare function AlertDialogAction({
78
+ className,
79
+ ...props
80
+ }: React.ComponentProps<typeof AlertDialog.Action>): import("react").JSX.Element;
81
+ /** Cancel button that closes the alert dialog without performing the destructive action. */
82
+ declare function AlertDialogCancel({
83
+ className,
84
+ ...props
85
+ }: React.ComponentProps<typeof AlertDialog.Cancel>): import("react").JSX.Element;
86
+ //#endregion
87
+ export { AlertDialogDescription as a, AlertDialogOverlay as c, AlertDialogTrigger as d, AlertDialogContent as i, AlertDialogPortal as l, AlertDialogAction as n, AlertDialogFooter as o, AlertDialogCancel as r, AlertDialogHeader as s, AlertDialog$1 as t, AlertDialogTitle as u };
88
+ //# sourceMappingURL=alert-dialog-Cdhz7jSj.d.mts.map
@@ -0,0 +1,2 @@
1
+ const e=require("./data-display/statistic.cjs"),t=require("./tables-7aC9WFs9.cjs");let n=require("lucide-react"),r=require("react"),i=require("@customafk/react-toolkit/utils"),a=require("react/jsx-runtime");function o(e,t,n){switch(n){case`count`:return e;case`sum`:return t.reduce((e,t)=>e+t,0);case`avg`:return t.length===0?0:t.reduce((e,t)=>e+t,0)/t.length;case`min`:return t.length===0?0:Math.min(...t);case`max`:return t.length===0?0:Math.max(...t)}}function s(e,t){return e.map(e=>{let n=e.getValue(t);return typeof n==`string`?Number(n):typeof n==`number`?n:NaN}).filter(e=>!Number.isNaN(e))}const c={sum:`Tổng`,avg:`Trung bình`,count:`Đếm`,min:`Nhỏ nhất`,max:`Lớn nhất`},l=(0,r.memo)(()=>{let{table:l,totalRows:d}=t.q(),{rowSelectionState:f}=t.K(),{isOpen:p,toggle:m}=t.G(),h=(0,r.useMemo)(()=>l.getRowModel().rows,[l]),g=(0,r.useMemo)(()=>l.getSelectedRowModel().flatRows,[l,f]),_=(0,r.useMemo)(()=>l.getHeaderGroups()[0]?.headers??[],[l]),v=(0,r.useMemo)(()=>_.filter(e=>![`select`,`actions`].includes(e.id)).flatMap(e=>{let t=e.column.columnDef.meta?.aggregation;if(!t)return[];let n=t.label??(typeof e.column.columnDef.header==`string`?e.column.columnDef.header:e.id),r=s(h,e.id),i=g.length>0?s(g,e.id):null;return[{colId:e.id,header:n,aggregation:t,allValue:o(h.length,r,t.type),selectedValue:i===null?null:o(g.length,i,t.type)}]}),[_,h,g]);return(0,a.jsxs)(`div`,{"data-slot":`table-analysis-panel`,className:`w-full border-t border-border`,children:[(0,a.jsxs)(`button`,{type:`button`,className:(0,i.cn)(`flex w-full items-center justify-between px-4 py-2 text-sm font-medium text-text-positive`,`hover:bg-muted-bg-subtle transition-colors outline-none`,`focus-visible:ring-2 focus-visible:ring-primary-weak`),onClick:m,"aria-expanded":p,children:[(0,a.jsx)(`span`,{children:`Tổng quan dữ liệu`}),p?(0,a.jsx)(n.ChevronUpIcon,{size:14}):(0,a.jsx)(n.ChevronDownIcon,{size:14})]}),p&&(0,a.jsxs)(`div`,{className:`px-4 pb-4 pt-2 space-y-4`,children:[(0,a.jsxs)(`div`,{className:`flex flex-wrap gap-4`,children:[(0,a.jsx)(u,{label:`Tổng bản ghi`,value:d??h.length}),(0,a.jsx)(u,{label:`Hàng hiển thị`,value:h.length}),(0,a.jsx)(u,{label:`Hàng đã chọn`,value:g.length,highlight:g.length>0})]}),v.length>0&&(0,a.jsxs)(`div`,{children:[(0,a.jsx)(`p`,{className:`mb-2 text-xs font-semibold uppercase tracking-wide text-text-positive-weak`,children:`Tóm tắt cột`}),(0,a.jsx)(`div`,{className:`overflow-x-auto rounded-md border border-border`,children:(0,a.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,a.jsx)(`thead`,{children:(0,a.jsxs)(`tr`,{className:`border-b border-border bg-muted-bg-subtle text-xs text-text-positive-weak`,children:[(0,a.jsx)(`th`,{className:`px-3 py-2 text-left font-medium`,children:`Cột`}),(0,a.jsx)(`th`,{className:`px-3 py-2 text-left font-medium`,children:`Kiểu`}),(0,a.jsx)(`th`,{className:`px-3 py-2 text-right font-medium`,children:`Tất cả hàng`}),g.length>0&&(0,a.jsx)(`th`,{className:`px-3 py-2 text-right font-medium`,children:`Hàng đã chọn`})]})}),(0,a.jsx)(`tbody`,{children:v.map((t,n)=>(0,a.jsxs)(`tr`,{className:(0,i.cn)(`border-b border-border last:border-b-0`,n%2==1&&`bg-muted-bg-subtle/50`),children:[(0,a.jsx)(`td`,{className:`px-3 py-2 text-text-positive font-medium`,children:t.header}),(0,a.jsx)(`td`,{className:`px-3 py-2 text-text-positive-weak`,children:c[t.aggregation.type]}),(0,a.jsx)(`td`,{className:`px-3 py-2 text-right`,children:(0,a.jsx)(e.Statistic,{value:t.allValue,prefix:t.aggregation.prefix,suffix:t.aggregation.suffix,precision:t.aggregation.precision,size:`sm`})}),g.length>0&&(0,a.jsx)(`td`,{className:`px-3 py-2 text-right`,children:t.selectedValue===null?(0,a.jsx)(`span`,{className:`text-text-positive-weak`,children:`—`}):(0,a.jsx)(e.Statistic,{value:t.selectedValue,prefix:t.aggregation.prefix,suffix:t.aggregation.suffix,precision:t.aggregation.precision,size:`sm`})})]},t.colId))})]})})]})]})]})});l.displayName=`UITableAnalysisPanel`;const u=(0,r.memo)(({label:e,value:t,highlight:n})=>(0,a.jsxs)(`div`,{className:(0,i.cn)(`flex flex-col gap-0.5 rounded border px-3 py-2 min-w-25 bg-white`,n&&t>0?`border-primary bg-primary-bg-subtle`:`border-border bg-white`),children:[(0,a.jsx)(`span`,{className:`text-[11px] text-text-positive-weak`,children:e}),(0,a.jsx)(`span`,{className:`text-base font-semibold tabular-nums text-text-positive-strong`,children:t.toLocaleString()})]}));u.displayName=`StatChip`,exports.UITableAnalysisPanel=l;
2
+ //# sourceMappingURL=analysis-panel-DzsZKA9l.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analysis-panel-DzsZKA9l.cjs","names":["useUITableContext","useUITableBodyContext","useUITableAnalysisContext","ChevronUpIcon","ChevronDownIcon","Statistic"],"sources":["../packages/components/features/tables/components/table/analysis-panel.tsx"],"sourcesContent":["'use client';\nimport { memo, useMemo } from 'react';\n\nimport { ChevronDownIcon, ChevronUpIcon } from 'lucide-react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport type { AnyEntity } from '@/types';\nimport { Statistic } from '@/components/data-display/statistic';\n\nimport { useUITableAnalysisContext, useUITableBodyContext, useUITableContext } from '../../hooks/use-context';\nimport type { ColumnAggregation, ColumnAggregationType } from '../../types';\n\nfunction computeAggregation(rowCount: number, values: number[], type: ColumnAggregationType): number {\n switch (type) {\n case 'count':\n return rowCount;\n case 'sum':\n return values.reduce((a, b) => a + b, 0);\n case 'avg':\n return values.length === 0 ? 0 : values.reduce((a, b) => a + b, 0) / values.length;\n case 'min':\n return values.length === 0 ? 0 : Math.min(...values);\n case 'max':\n return values.length === 0 ? 0 : Math.max(...values);\n }\n}\n\nfunction extractNumericValues(rows: { getValue: (id: string) => unknown }[], colId: string): number[] {\n return rows\n .map(r => {\n const v = r.getValue(colId);\n const n = typeof v === 'string' ? Number(v) : typeof v === 'number' ? v : NaN;\n return n;\n })\n .filter(n => !Number.isNaN(n));\n}\n\ntype AggregationLabel = {\n colId: string;\n header: string;\n aggregation: ColumnAggregation;\n allValue: number;\n selectedValue: number | null;\n};\n\nconst typeLabels: Record<ColumnAggregationType, string> = {\n sum: 'Tổng',\n avg: 'Trung bình',\n count: 'Đếm',\n min: 'Nhỏ nhất',\n max: 'Lớn nhất',\n};\n\nexport const UITableAnalysisPanel = memo(() => {\n const { table, totalRows } = useUITableContext();\n const { rowSelectionState } = useUITableBodyContext();\n const { isOpen, toggle } = useUITableAnalysisContext();\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: row model\n const allRows = useMemo(() => table.getRowModel().rows, [table]);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: selected rows\n const selectedRows = useMemo(() => table.getSelectedRowModel().flatRows, [table, rowSelectionState]);\n\n const headers = useMemo(() => table.getHeaderGroups()[0]?.headers ?? [], [table]);\n\n const aggregationRows = useMemo<AggregationLabel[]>(() => {\n return headers\n .filter(h => !['select', 'actions'].includes(h.id))\n .flatMap(header => {\n const agg = (header.column.columnDef.meta as AnyEntity)?.aggregation as ColumnAggregation | undefined;\n if (!agg) return [];\n\n const headerText = agg.label ?? (typeof header.column.columnDef.header === 'string' ? header.column.columnDef.header : header.id);\n\n const allValues = extractNumericValues(allRows, header.id);\n const selectedValues = selectedRows.length > 0 ? extractNumericValues(selectedRows, header.id) : null;\n\n return [\n {\n colId: header.id,\n header: headerText,\n aggregation: agg,\n allValue: computeAggregation(allRows.length, allValues, agg.type),\n selectedValue: selectedValues !== null ? computeAggregation(selectedRows.length, selectedValues, agg.type) : null,\n },\n ];\n });\n }, [headers, allRows, selectedRows]);\n\n return (\n <div data-slot=\"table-analysis-panel\" className=\"w-full border-t border-border\">\n <button\n type=\"button\"\n className={cn(\n 'flex w-full items-center justify-between px-4 py-2 text-sm font-medium text-text-positive',\n 'hover:bg-muted-bg-subtle transition-colors outline-none',\n 'focus-visible:ring-2 focus-visible:ring-primary-weak'\n )}\n onClick={toggle}\n aria-expanded={isOpen}\n >\n <span>Tổng quan dữ liệu</span>\n {isOpen ? <ChevronUpIcon size={14} /> : <ChevronDownIcon size={14} />}\n </button>\n\n {isOpen && (\n <div className=\"px-4 pb-4 pt-2 space-y-4\">\n {/* Row summary */}\n <div className=\"flex flex-wrap gap-4\">\n <StatChip label=\"Tổng bản ghi\" value={totalRows ?? allRows.length} />\n <StatChip label=\"Hàng hiển thị\" value={allRows.length} />\n <StatChip label=\"Hàng đã chọn\" value={selectedRows.length} highlight={selectedRows.length > 0} />\n </div>\n\n {/* Column aggregations */}\n {aggregationRows.length > 0 && (\n <div>\n <p className=\"mb-2 text-xs font-semibold uppercase tracking-wide text-text-positive-weak\">Tóm tắt cột</p>\n <div className=\"overflow-x-auto rounded-md border border-border\">\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"border-b border-border bg-muted-bg-subtle text-xs text-text-positive-weak\">\n <th className=\"px-3 py-2 text-left font-medium\">Cột</th>\n <th className=\"px-3 py-2 text-left font-medium\">Kiểu</th>\n <th className=\"px-3 py-2 text-right font-medium\">Tất cả hàng</th>\n {selectedRows.length > 0 && <th className=\"px-3 py-2 text-right font-medium\">Hàng đã chọn</th>}\n </tr>\n </thead>\n <tbody>\n {aggregationRows.map((row, idx) => (\n <tr key={row.colId} className={cn('border-b border-border last:border-b-0', idx % 2 === 1 && 'bg-muted-bg-subtle/50')}>\n <td className=\"px-3 py-2 text-text-positive font-medium\">{row.header}</td>\n <td className=\"px-3 py-2 text-text-positive-weak\">{typeLabels[row.aggregation.type]}</td>\n <td className=\"px-3 py-2 text-right\">\n <Statistic\n value={row.allValue}\n prefix={row.aggregation.prefix}\n suffix={row.aggregation.suffix}\n precision={row.aggregation.precision}\n size=\"sm\"\n />\n </td>\n {selectedRows.length > 0 && (\n <td className=\"px-3 py-2 text-right\">\n {row.selectedValue !== null ? (\n <Statistic\n value={row.selectedValue}\n prefix={row.aggregation.prefix}\n suffix={row.aggregation.suffix}\n precision={row.aggregation.precision}\n size=\"sm\"\n />\n ) : (\n <span className=\"text-text-positive-weak\">—</span>\n )}\n </td>\n )}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n );\n});\nUITableAnalysisPanel.displayName = 'UITableAnalysisPanel';\n\nconst StatChip = memo<{ label: string; value: number; highlight?: boolean }>(({ label, value, highlight }) => (\n <div\n className={cn(\n 'flex flex-col gap-0.5 rounded border px-3 py-2 min-w-25 bg-white',\n highlight && value > 0 ? 'border-primary bg-primary-bg-subtle' : 'border-border bg-white'\n )}\n >\n <span className=\"text-[11px] text-text-positive-weak\">{label}</span>\n <span className=\"text-base font-semibold tabular-nums text-text-positive-strong\">{value.toLocaleString()}</span>\n </div>\n));\nStatChip.displayName = 'StatChip';\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{Statistic as e}from"./data-display/statistic.mjs";import{G as t,K as n,q as r}from"./tables-UikqnT9q.mjs";import{ChevronDownIcon as i,ChevronUpIcon as a}from"lucide-react";import{memo as o,useMemo as s}from"react";import{cn as c}from"@customafk/react-toolkit/utils";import{jsx as l,jsxs as u}from"react/jsx-runtime";function d(e,t,n){switch(n){case`count`:return e;case`sum`:return t.reduce((e,t)=>e+t,0);case`avg`:return t.length===0?0:t.reduce((e,t)=>e+t,0)/t.length;case`min`:return t.length===0?0:Math.min(...t);case`max`:return t.length===0?0:Math.max(...t)}}function f(e,t){return e.map(e=>{let n=e.getValue(t);return typeof n==`string`?Number(n):typeof n==`number`?n:NaN}).filter(e=>!Number.isNaN(e))}const p={sum:`Tổng`,avg:`Trung bình`,count:`Đếm`,min:`Nhỏ nhất`,max:`Lớn nhất`},m=o(()=>{let{table:o,totalRows:m}=r(),{rowSelectionState:g}=n(),{isOpen:_,toggle:v}=t(),y=s(()=>o.getRowModel().rows,[o]),b=s(()=>o.getSelectedRowModel().flatRows,[o,g]),x=s(()=>o.getHeaderGroups()[0]?.headers??[],[o]),S=s(()=>x.filter(e=>![`select`,`actions`].includes(e.id)).flatMap(e=>{let t=e.column.columnDef.meta?.aggregation;if(!t)return[];let n=t.label??(typeof e.column.columnDef.header==`string`?e.column.columnDef.header:e.id),r=f(y,e.id),i=b.length>0?f(b,e.id):null;return[{colId:e.id,header:n,aggregation:t,allValue:d(y.length,r,t.type),selectedValue:i===null?null:d(b.length,i,t.type)}]}),[x,y,b]);return u(`div`,{"data-slot":`table-analysis-panel`,className:`w-full border-t border-border`,children:[u(`button`,{type:`button`,className:c(`flex w-full items-center justify-between px-4 py-2 text-sm font-medium text-text-positive`,`hover:bg-muted-bg-subtle transition-colors outline-none`,`focus-visible:ring-2 focus-visible:ring-primary-weak`),onClick:v,"aria-expanded":_,children:[l(`span`,{children:`Tổng quan dữ liệu`}),l(_?a:i,{size:14})]}),_&&u(`div`,{className:`px-4 pb-4 pt-2 space-y-4`,children:[u(`div`,{className:`flex flex-wrap gap-4`,children:[l(h,{label:`Tổng bản ghi`,value:m??y.length}),l(h,{label:`Hàng hiển thị`,value:y.length}),l(h,{label:`Hàng đã chọn`,value:b.length,highlight:b.length>0})]}),S.length>0&&u(`div`,{children:[l(`p`,{className:`mb-2 text-xs font-semibold uppercase tracking-wide text-text-positive-weak`,children:`Tóm tắt cột`}),l(`div`,{className:`overflow-x-auto rounded-md border border-border`,children:u(`table`,{className:`w-full text-sm`,children:[l(`thead`,{children:u(`tr`,{className:`border-b border-border bg-muted-bg-subtle text-xs text-text-positive-weak`,children:[l(`th`,{className:`px-3 py-2 text-left font-medium`,children:`Cột`}),l(`th`,{className:`px-3 py-2 text-left font-medium`,children:`Kiểu`}),l(`th`,{className:`px-3 py-2 text-right font-medium`,children:`Tất cả hàng`}),b.length>0&&l(`th`,{className:`px-3 py-2 text-right font-medium`,children:`Hàng đã chọn`})]})}),l(`tbody`,{children:S.map((t,n)=>u(`tr`,{className:c(`border-b border-border last:border-b-0`,n%2==1&&`bg-muted-bg-subtle/50`),children:[l(`td`,{className:`px-3 py-2 text-text-positive font-medium`,children:t.header}),l(`td`,{className:`px-3 py-2 text-text-positive-weak`,children:p[t.aggregation.type]}),l(`td`,{className:`px-3 py-2 text-right`,children:l(e,{value:t.allValue,prefix:t.aggregation.prefix,suffix:t.aggregation.suffix,precision:t.aggregation.precision,size:`sm`})}),b.length>0&&l(`td`,{className:`px-3 py-2 text-right`,children:t.selectedValue===null?l(`span`,{className:`text-text-positive-weak`,children:`—`}):l(e,{value:t.selectedValue,prefix:t.aggregation.prefix,suffix:t.aggregation.suffix,precision:t.aggregation.precision,size:`sm`})})]},t.colId))})]})})]})]})]})});m.displayName=`UITableAnalysisPanel`;const h=o(({label:e,value:t,highlight:n})=>u(`div`,{className:c(`flex flex-col gap-0.5 rounded border px-3 py-2 min-w-25 bg-white`,n&&t>0?`border-primary bg-primary-bg-subtle`:`border-border bg-white`),children:[l(`span`,{className:`text-[11px] text-text-positive-weak`,children:e}),l(`span`,{className:`text-base font-semibold tabular-nums text-text-positive-strong`,children:t.toLocaleString()})]}));h.displayName=`StatChip`;export{m as UITableAnalysisPanel};
2
+ //# sourceMappingURL=analysis-panel-ikcRtzG9.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analysis-panel-ikcRtzG9.mjs","names":[],"sources":["../packages/components/features/tables/components/table/analysis-panel.tsx"],"sourcesContent":["'use client';\nimport { memo, useMemo } from 'react';\n\nimport { ChevronDownIcon, ChevronUpIcon } from 'lucide-react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport type { AnyEntity } from '@/types';\nimport { Statistic } from '@/components/data-display/statistic';\n\nimport { useUITableAnalysisContext, useUITableBodyContext, useUITableContext } from '../../hooks/use-context';\nimport type { ColumnAggregation, ColumnAggregationType } from '../../types';\n\nfunction computeAggregation(rowCount: number, values: number[], type: ColumnAggregationType): number {\n switch (type) {\n case 'count':\n return rowCount;\n case 'sum':\n return values.reduce((a, b) => a + b, 0);\n case 'avg':\n return values.length === 0 ? 0 : values.reduce((a, b) => a + b, 0) / values.length;\n case 'min':\n return values.length === 0 ? 0 : Math.min(...values);\n case 'max':\n return values.length === 0 ? 0 : Math.max(...values);\n }\n}\n\nfunction extractNumericValues(rows: { getValue: (id: string) => unknown }[], colId: string): number[] {\n return rows\n .map(r => {\n const v = r.getValue(colId);\n const n = typeof v === 'string' ? Number(v) : typeof v === 'number' ? v : NaN;\n return n;\n })\n .filter(n => !Number.isNaN(n));\n}\n\ntype AggregationLabel = {\n colId: string;\n header: string;\n aggregation: ColumnAggregation;\n allValue: number;\n selectedValue: number | null;\n};\n\nconst typeLabels: Record<ColumnAggregationType, string> = {\n sum: 'Tổng',\n avg: 'Trung bình',\n count: 'Đếm',\n min: 'Nhỏ nhất',\n max: 'Lớn nhất',\n};\n\nexport const UITableAnalysisPanel = memo(() => {\n const { table, totalRows } = useUITableContext();\n const { rowSelectionState } = useUITableBodyContext();\n const { isOpen, toggle } = useUITableAnalysisContext();\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: row model\n const allRows = useMemo(() => table.getRowModel().rows, [table]);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: selected rows\n const selectedRows = useMemo(() => table.getSelectedRowModel().flatRows, [table, rowSelectionState]);\n\n const headers = useMemo(() => table.getHeaderGroups()[0]?.headers ?? [], [table]);\n\n const aggregationRows = useMemo<AggregationLabel[]>(() => {\n return headers\n .filter(h => !['select', 'actions'].includes(h.id))\n .flatMap(header => {\n const agg = (header.column.columnDef.meta as AnyEntity)?.aggregation as ColumnAggregation | undefined;\n if (!agg) return [];\n\n const headerText = agg.label ?? (typeof header.column.columnDef.header === 'string' ? header.column.columnDef.header : header.id);\n\n const allValues = extractNumericValues(allRows, header.id);\n const selectedValues = selectedRows.length > 0 ? extractNumericValues(selectedRows, header.id) : null;\n\n return [\n {\n colId: header.id,\n header: headerText,\n aggregation: agg,\n allValue: computeAggregation(allRows.length, allValues, agg.type),\n selectedValue: selectedValues !== null ? computeAggregation(selectedRows.length, selectedValues, agg.type) : null,\n },\n ];\n });\n }, [headers, allRows, selectedRows]);\n\n return (\n <div data-slot=\"table-analysis-panel\" className=\"w-full border-t border-border\">\n <button\n type=\"button\"\n className={cn(\n 'flex w-full items-center justify-between px-4 py-2 text-sm font-medium text-text-positive',\n 'hover:bg-muted-bg-subtle transition-colors outline-none',\n 'focus-visible:ring-2 focus-visible:ring-primary-weak'\n )}\n onClick={toggle}\n aria-expanded={isOpen}\n >\n <span>Tổng quan dữ liệu</span>\n {isOpen ? <ChevronUpIcon size={14} /> : <ChevronDownIcon size={14} />}\n </button>\n\n {isOpen && (\n <div className=\"px-4 pb-4 pt-2 space-y-4\">\n {/* Row summary */}\n <div className=\"flex flex-wrap gap-4\">\n <StatChip label=\"Tổng bản ghi\" value={totalRows ?? allRows.length} />\n <StatChip label=\"Hàng hiển thị\" value={allRows.length} />\n <StatChip label=\"Hàng đã chọn\" value={selectedRows.length} highlight={selectedRows.length > 0} />\n </div>\n\n {/* Column aggregations */}\n {aggregationRows.length > 0 && (\n <div>\n <p className=\"mb-2 text-xs font-semibold uppercase tracking-wide text-text-positive-weak\">Tóm tắt cột</p>\n <div className=\"overflow-x-auto rounded-md border border-border\">\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"border-b border-border bg-muted-bg-subtle text-xs text-text-positive-weak\">\n <th className=\"px-3 py-2 text-left font-medium\">Cột</th>\n <th className=\"px-3 py-2 text-left font-medium\">Kiểu</th>\n <th className=\"px-3 py-2 text-right font-medium\">Tất cả hàng</th>\n {selectedRows.length > 0 && <th className=\"px-3 py-2 text-right font-medium\">Hàng đã chọn</th>}\n </tr>\n </thead>\n <tbody>\n {aggregationRows.map((row, idx) => (\n <tr key={row.colId} className={cn('border-b border-border last:border-b-0', idx % 2 === 1 && 'bg-muted-bg-subtle/50')}>\n <td className=\"px-3 py-2 text-text-positive font-medium\">{row.header}</td>\n <td className=\"px-3 py-2 text-text-positive-weak\">{typeLabels[row.aggregation.type]}</td>\n <td className=\"px-3 py-2 text-right\">\n <Statistic\n value={row.allValue}\n prefix={row.aggregation.prefix}\n suffix={row.aggregation.suffix}\n precision={row.aggregation.precision}\n size=\"sm\"\n />\n </td>\n {selectedRows.length > 0 && (\n <td className=\"px-3 py-2 text-right\">\n {row.selectedValue !== null ? (\n <Statistic\n value={row.selectedValue}\n prefix={row.aggregation.prefix}\n suffix={row.aggregation.suffix}\n precision={row.aggregation.precision}\n size=\"sm\"\n />\n ) : (\n <span className=\"text-text-positive-weak\">—</span>\n )}\n </td>\n )}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n );\n});\nUITableAnalysisPanel.displayName = 'UITableAnalysisPanel';\n\nconst StatChip = memo<{ label: string; value: number; highlight?: boolean }>(({ label, value, highlight }) => (\n <div\n className={cn(\n 'flex flex-col gap-0.5 rounded border px-3 py-2 min-w-25 bg-white',\n highlight && value > 0 ? 'border-primary bg-primary-bg-subtle' : 'border-border bg-white'\n )}\n >\n <span className=\"text-[11px] text-text-positive-weak\">{label}</span>\n <span className=\"text-base font-semibold tabular-nums text-text-positive-strong\">{value.toLocaleString()}</span>\n </div>\n));\nStatChip.displayName = 'StatChip';\n"],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { AspectRatio } from "radix-ui";
2
+
3
+ //#region packages/components/ui/aspect-ratio.d.ts
4
+ /**
5
+ * Constrains its child to a given aspect ratio using the Radix UI AspectRatio primitive.
6
+ *
7
+ * @example
8
+ * ```tsx
9
+ * import { AspectRatio } from '@customafk/lunas-ui/ui/aspect-ratio';
10
+ *
11
+ * <AspectRatio ratio={16 / 9}>
12
+ * <img src="/banner.jpg" alt="Banner" className="size-full object-cover" />
13
+ * </AspectRatio>
14
+ * ```
15
+ */
16
+ declare function AspectRatio$1({
17
+ className,
18
+ ...props
19
+ }: React.ComponentProps<typeof AspectRatio.Root>): import("react").JSX.Element;
20
+ //#endregion
21
+ export { AspectRatio$1 as t };
22
+ //# sourceMappingURL=aspect-ratio-huscluwJ.d.cts.map
@@ -0,0 +1,22 @@
1
+ import { AspectRatio } from "radix-ui";
2
+
3
+ //#region packages/components/ui/aspect-ratio.d.ts
4
+ /**
5
+ * Constrains its child to a given aspect ratio using the Radix UI AspectRatio primitive.
6
+ *
7
+ * @example
8
+ * ```tsx
9
+ * import { AspectRatio } from '@customafk/lunas-ui/ui/aspect-ratio';
10
+ *
11
+ * <AspectRatio ratio={16 / 9}>
12
+ * <img src="/banner.jpg" alt="Banner" className="size-full object-cover" />
13
+ * </AspectRatio>
14
+ * ```
15
+ */
16
+ declare function AspectRatio$1({
17
+ className,
18
+ ...props
19
+ }: React.ComponentProps<typeof AspectRatio.Root>): import("react").JSX.Element;
20
+ //#endregion
21
+ export { AspectRatio$1 as t };
22
+ //# sourceMappingURL=aspect-ratio-huscluwJ.d.mts.map
@@ -0,0 +1,33 @@
1
+ import { Avatar } from "radix-ui";
2
+
3
+ //#region packages/components/ui/avatar.d.ts
4
+ /**
5
+ * Circular user avatar built on Radix UI's Avatar primitives, falling back to initials or an icon when the image fails to load.
6
+ *
7
+ * @example
8
+ * ```tsx
9
+ * import { Avatar, AvatarImage, AvatarFallback } from '@customafk/lunas-ui/ui/avatar';
10
+ *
11
+ * <Avatar>
12
+ * <AvatarImage src="https://example.com/avatar.jpg" alt="Jane Doe" />
13
+ * <AvatarFallback>JD</AvatarFallback>
14
+ * </Avatar>
15
+ * ```
16
+ */
17
+ declare function Avatar$1({
18
+ className,
19
+ ...props
20
+ }: React.ComponentProps<typeof Avatar.Root>): import("react").JSX.Element;
21
+ /** The avatar photo; hidden automatically by Radix UI when the image fails to load, revealing `AvatarFallback`. */
22
+ declare function AvatarImage({
23
+ className,
24
+ ...props
25
+ }: React.ComponentProps<typeof Avatar.Image>): import("react").JSX.Element;
26
+ /** Fallback content (e.g. initials) displayed inside the avatar when the image is unavailable or still loading. */
27
+ declare function AvatarFallback({
28
+ className,
29
+ ...props
30
+ }: React.ComponentProps<typeof Avatar.Fallback>): import("react").JSX.Element;
31
+ //#endregion
32
+ export { AvatarFallback as n, AvatarImage as r, Avatar$1 as t };
33
+ //# sourceMappingURL=avatar-BpeFwSkQ.d.cts.map
@@ -0,0 +1,33 @@
1
+ import { Avatar } from "radix-ui";
2
+
3
+ //#region packages/components/ui/avatar.d.ts
4
+ /**
5
+ * Circular user avatar built on Radix UI's Avatar primitives, falling back to initials or an icon when the image fails to load.
6
+ *
7
+ * @example
8
+ * ```tsx
9
+ * import { Avatar, AvatarImage, AvatarFallback } from '@customafk/lunas-ui/ui/avatar';
10
+ *
11
+ * <Avatar>
12
+ * <AvatarImage src="https://example.com/avatar.jpg" alt="Jane Doe" />
13
+ * <AvatarFallback>JD</AvatarFallback>
14
+ * </Avatar>
15
+ * ```
16
+ */
17
+ declare function Avatar$1({
18
+ className,
19
+ ...props
20
+ }: React.ComponentProps<typeof Avatar.Root>): import("react").JSX.Element;
21
+ /** The avatar photo; hidden automatically by Radix UI when the image fails to load, revealing `AvatarFallback`. */
22
+ declare function AvatarImage({
23
+ className,
24
+ ...props
25
+ }: React.ComponentProps<typeof Avatar.Image>): import("react").JSX.Element;
26
+ /** Fallback content (e.g. initials) displayed inside the avatar when the image is unavailable or still loading. */
27
+ declare function AvatarFallback({
28
+ className,
29
+ ...props
30
+ }: React.ComponentProps<typeof Avatar.Fallback>): import("react").JSX.Element;
31
+ //#endregion
32
+ export { AvatarFallback as n, AvatarImage as r, Avatar$1 as t };
33
+ //# sourceMappingURL=avatar-BpeFwSkQ.d.mts.map
@@ -0,0 +1,2 @@
1
+ import{Avatar as e,AvatarFallback as t,AvatarImage as n}from"./ui/avatar.mjs";import{UserRoundIcon as r}from"lucide-react";import{jsx as i,jsxs as a}from"react/jsx-runtime";import{colorHashLight as o}from"@customafk/react-toolkit/color-hash";const s=({name:s,avatarUrl:c,uuid:l})=>{let u=o.hex(l??s);return a(`div`,{className:`flex min-w-0 items-center gap-2`,children:[a(e,{className:`size-8 shrink-0`,children:[i(n,{src:c,alt:s}),i(t,{style:{backgroundColor:u},children:i(r,{size:18,className:`text-white`})})]}),i(`span`,{className:`truncate text-sm font-medium`,children:s})]})};export{s as UITableAvatarNameDisplay};
2
+ //# sourceMappingURL=avatar-name-display-BrpnTqa_.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"avatar-name-display-BrpnTqa_.mjs","names":[],"sources":["../packages/components/features/tables/components/atoms/avatar-name-display.tsx"],"sourcesContent":["'use client';\n\nimport { UserRoundIcon } from 'lucide-react';\n\nimport { colorHashLight } from '@customafk/react-toolkit/color-hash';\n\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar';\n\n/** Props for the {@link UITableAvatarNameDisplay} component. */\ntype Props = {\n /** Display name shown beside the avatar. */\n name: string;\n /** Optional image URL for the avatar. Falls back to a color-hashed icon when absent. */\n avatarUrl?: string;\n /** Seed for deterministic avatar background color generation. Defaults to `name`. */\n uuid?: string;\n};\n\n/**\n * Renders a circular avatar paired with a name in a compact horizontal row.\n * When no `avatarUrl` is provided the fallback uses a deterministic background\n * color derived from `uuid` (or `name`) via `colorHashLight`, matching the\n * style of `UserDataDisplay`.\n *\n * @example\n * import { UITableAvatarNameDisplay } from '@customafk/lunas-ui/features/tables';\n *\n * <UITableAvatarNameDisplay name=\"Jane Smith\" uuid=\"user-42\" avatarUrl=\"/avatars/jane.png\" />\n */\nexport const UITableAvatarNameDisplay: React.FC<Props> = ({ name, avatarUrl, uuid }) => {\n const bgColor = colorHashLight.hex(uuid ?? name);\n return (\n <div className=\"flex min-w-0 items-center gap-2\">\n <Avatar className=\"size-8 shrink-0\">\n <AvatarImage src={avatarUrl} alt={name} />\n <AvatarFallback style={{ backgroundColor: bgColor }}>\n <UserRoundIcon size={18} className=\"text-white\" />\n </AvatarFallback>\n </Avatar>\n <span className=\"truncate text-sm font-medium\">{name}</span>\n </div>\n );\n};\n"],"mappings":"kPA6BA,MAAa,GAA6C,CAAE,OAAM,YAAW,UAAW,CACtF,IAAM,EAAU,EAAe,IAAI,GAAQ,CAAI,EAC/C,OACE,EAAC,MAAD,CAAK,UAAU,2CAAf,CACE,EAAC,EAAD,CAAQ,UAAU,2BAAlB,CACE,EAAC,EAAD,CAAa,IAAK,EAAW,IAAK,CAAO,CAAA,EACzC,EAAC,EAAD,CAAgB,MAAO,CAAE,gBAAiB,CAAQ,WAChD,EAAC,EAAD,CAAe,KAAM,GAAI,UAAU,YAAc,CAAA,CACnC,CAAA,CACV,IACR,EAAC,OAAD,CAAM,UAAU,wCAAgC,CAAW,CAAA,CACxD,GAET"}
@@ -0,0 +1,2 @@
1
+ const e=require("./ui/avatar.cjs");let t=require("lucide-react"),n=require("react/jsx-runtime"),r=require("@customafk/react-toolkit/color-hash");const i=({name:i,avatarUrl:a,uuid:o})=>{let s=r.colorHashLight.hex(o??i);return(0,n.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[(0,n.jsxs)(e.Avatar,{className:`size-8 shrink-0`,children:[(0,n.jsx)(e.AvatarImage,{src:a,alt:i}),(0,n.jsx)(e.AvatarFallback,{style:{backgroundColor:s},children:(0,n.jsx)(t.UserRoundIcon,{size:18,className:`text-white`})})]}),(0,n.jsx)(`span`,{className:`truncate text-sm font-medium`,children:i})]})};exports.UITableAvatarNameDisplay=i;
2
+ //# sourceMappingURL=avatar-name-display-CLi1DJUs.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"avatar-name-display-CLi1DJUs.cjs","names":["colorHashLight","Avatar","AvatarImage","AvatarFallback","UserRoundIcon"],"sources":["../packages/components/features/tables/components/atoms/avatar-name-display.tsx"],"sourcesContent":["'use client';\n\nimport { UserRoundIcon } from 'lucide-react';\n\nimport { colorHashLight } from '@customafk/react-toolkit/color-hash';\n\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar';\n\n/** Props for the {@link UITableAvatarNameDisplay} component. */\ntype Props = {\n /** Display name shown beside the avatar. */\n name: string;\n /** Optional image URL for the avatar. Falls back to a color-hashed icon when absent. */\n avatarUrl?: string;\n /** Seed for deterministic avatar background color generation. Defaults to `name`. */\n uuid?: string;\n};\n\n/**\n * Renders a circular avatar paired with a name in a compact horizontal row.\n * When no `avatarUrl` is provided the fallback uses a deterministic background\n * color derived from `uuid` (or `name`) via `colorHashLight`, matching the\n * style of `UserDataDisplay`.\n *\n * @example\n * import { UITableAvatarNameDisplay } from '@customafk/lunas-ui/features/tables';\n *\n * <UITableAvatarNameDisplay name=\"Jane Smith\" uuid=\"user-42\" avatarUrl=\"/avatars/jane.png\" />\n */\nexport const UITableAvatarNameDisplay: React.FC<Props> = ({ name, avatarUrl, uuid }) => {\n const bgColor = colorHashLight.hex(uuid ?? name);\n return (\n <div className=\"flex min-w-0 items-center gap-2\">\n <Avatar className=\"size-8 shrink-0\">\n <AvatarImage src={avatarUrl} alt={name} />\n <AvatarFallback style={{ backgroundColor: bgColor }}>\n <UserRoundIcon size={18} className=\"text-white\" />\n </AvatarFallback>\n </Avatar>\n <span className=\"truncate text-sm font-medium\">{name}</span>\n </div>\n );\n};\n"],"mappings":"iJA6BA,MAAa,GAA6C,CAAE,OAAM,YAAW,UAAW,CACtF,IAAM,EAAUA,EAAAA,eAAe,IAAI,GAAQ,CAAI,EAC/C,OACE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,2CAAf,EACE,EAAA,EAAA,KAAA,CAACC,EAAAA,OAAD,CAAQ,UAAU,2BAAlB,EACE,EAAA,EAAA,IAAA,CAACC,EAAAA,YAAD,CAAa,IAAK,EAAW,IAAK,CAAO,CAAA,GACzC,EAAA,EAAA,IAAA,CAACC,EAAAA,eAAD,CAAgB,MAAO,CAAE,gBAAiB,CAAQ,YAChD,EAAA,EAAA,IAAA,CAACC,EAAAA,cAAD,CAAe,KAAM,GAAI,UAAU,YAAc,CAAA,CACnC,CAAA,CACV,KACR,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAU,wCAAgC,CAAW,CAAA,CACxD,GAET"}
@@ -2,8 +2,8 @@ import { VariantProps } from "class-variance-authority";
2
2
 
3
3
  //#region packages/components/ui/badge.d.ts
4
4
  declare const badgeVariants: (props?: ({
5
- variant?: "outline" | "solid" | "soft" | null | undefined;
6
- color?: "muted" | "primary" | "secondary" | "accent" | "info" | "success" | "warning" | "danger" | null | undefined;
5
+ variant?: "solid" | "soft" | "outline" | null | undefined;
6
+ color?: "primary" | "secondary" | "muted" | "accent" | "info" | "success" | "warning" | "danger" | null | undefined;
7
7
  size?: "xs" | "sm" | "md" | "lg" | "xl" | null | undefined;
8
8
  pill?: boolean | null | undefined;
9
9
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
@@ -37,4 +37,4 @@ declare function Badge({
37
37
  }: BadgeProps): import("react").JSX.Element;
38
38
  //#endregion
39
39
  export { BadgeProps as n, badgeVariants as r, Badge as t };
40
- //# sourceMappingURL=badge-D0InQSvM.d.cts.map
40
+ //# sourceMappingURL=badge-MRT40pxM.d.cts.map