@customafk/lunas-ui 0.2.74 → 0.2.76

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 (806) hide show
  1. package/dist/{FeatureDeveloping-zuTTDIh_.d.cts → FeatureDeveloping-DRmYHj91.d.cts} +2 -9
  2. package/dist/{FeatureDeveloping-zuTTDIh_.d.mts → FeatureDeveloping-DRmYHj91.d.mts} +2 -9
  3. package/dist/{FeatureFixing-DYQlgHPk.d.cts → FeatureFixing-BHHCDtAQ.d.cts} +2 -9
  4. package/dist/{FeatureFixing-DYQlgHPk.d.mts → FeatureFixing-BHHCDtAQ.d.mts} +2 -9
  5. package/dist/{LoginPage-vMXvwtxf.d.cts → LoginPage-DDljzV6A.d.cts} +2 -12
  6. package/dist/{LoginPage-vMXvwtxf.d.mts → LoginPage-DDljzV6A.d.mts} +2 -12
  7. package/dist/{NotAuthorized-CZIQ6EaA.d.cts → NotAuthorized-DTT57OHb.d.cts} +2 -9
  8. package/dist/{NotAuthorized-CZIQ6EaA.d.mts → NotAuthorized-DTT57OHb.d.mts} +2 -9
  9. package/dist/{NotFound-CRSKxhV8.d.cts → NotFound-BeUB1yus.d.cts} +2 -9
  10. package/dist/{NotFound-CRSKxhV8.d.mts → NotFound-BeUB1yus.d.mts} +2 -9
  11. package/dist/{RegisterPage-BBtpEzvL.d.cts → RegisterPage-LuTuV7Sw.d.cts} +2 -11
  12. package/dist/{RegisterPage-BBtpEzvL.d.mts → RegisterPage-LuTuV7Sw.d.mts} +2 -11
  13. package/dist/{VerifyEmailPage-CsmIeYLu.d.cts → VerifyEmailPage-5DFlEkk3.d.cts} +2 -14
  14. package/dist/{VerifyEmailPage-CsmIeYLu.d.mts → VerifyEmailPage-5DFlEkk3.d.mts} +2 -14
  15. package/dist/{action-submit-ScN29AQ1.mjs → action-submit-DVNxnW4-.mjs} +2 -2
  16. package/dist/{action-submit-ScN29AQ1.mjs.map → action-submit-DVNxnW4-.mjs.map} +1 -1
  17. package/dist/{action-submit-DI590CG3.cjs → action-submit-kYjq-iPD.cjs} +2 -2
  18. package/dist/{action-submit-DI590CG3.cjs.map → action-submit-kYjq-iPD.cjs.map} +1 -1
  19. package/dist/{actions-form-CNW4nhAP.cjs → actions-form-CwicJU89.cjs} +2 -2
  20. package/dist/{actions-form-CNW4nhAP.cjs.map → actions-form-CwicJU89.cjs.map} +1 -1
  21. package/dist/{actions-form-f8sejItb.mjs → actions-form-DRrkiGzh.mjs} +2 -2
  22. package/dist/{actions-form-f8sejItb.mjs.map → actions-form-DRrkiGzh.mjs.map} +1 -1
  23. package/dist/activity-heatmap-chart-DufvFndI.mjs.map +1 -1
  24. package/dist/activity-heatmap-chart-gDcvIAK_.cjs.map +1 -1
  25. package/dist/{add-new-DkBwXh0Q.d.cts → add-new-CHYPSC1G.d.cts} +3 -2
  26. package/dist/{add-new-DkBwXh0Q.d.mts → add-new-CHYPSC1G.d.mts} +3 -2
  27. package/dist/{alert-Bip5XjBw.d.cts → alert-C8wdckO8.d.cts} +4 -19
  28. package/dist/{alert-Bip5XjBw.d.mts → alert-C8wdckO8.d.mts} +4 -19
  29. package/dist/alert-D31c6DLq.cjs.map +1 -1
  30. package/dist/alert-OD1KJTEV.mjs.map +1 -1
  31. package/dist/{alert-dialog-Cdhz7jSj.d.cts → alert-dialog-8aDimwPK.d.cts} +12 -43
  32. package/dist/{alert-dialog-Cdhz7jSj.d.mts → alert-dialog-8aDimwPK.d.mts} +12 -43
  33. package/dist/analysis-panel-BqZmOU58.mjs.map +1 -1
  34. package/dist/analysis-panel-CQZ0hmfN.cjs.map +1 -1
  35. package/dist/{aspect-ratio-huscluwJ.d.cts → aspect-ratio-DqXWkGJQ.d.cts} +2 -6
  36. package/dist/{aspect-ratio-huscluwJ.d.mts → aspect-ratio-DqXWkGJQ.d.mts} +2 -6
  37. package/dist/avatar-name-display-BrpnTqa_.mjs.map +1 -1
  38. package/dist/avatar-name-display-CLi1DJUs.cjs.map +1 -1
  39. package/dist/{avatar-BpeFwSkQ.d.cts → avatar-yN3dNBsZ.d.cts} +4 -14
  40. package/dist/{avatar-BpeFwSkQ.d.mts → avatar-yN3dNBsZ.d.mts} +4 -14
  41. package/dist/{badge-MRT40pxM.d.cts → badge-BPiU1Ss2.d.cts} +2 -10
  42. package/dist/{badge-MRT40pxM.d.mts → badge-BPiU1Ss2.d.mts} +2 -10
  43. package/dist/badge-display-DmCKpGk9.cjs.map +1 -1
  44. package/dist/badge-display-RP5VTE10.mjs.map +1 -1
  45. package/dist/{breadcrumb-CSpScKZm.d.cts → breadcrumb-DEFTnz90.d.cts} +8 -31
  46. package/dist/{breadcrumb-CSpScKZm.d.mts → breadcrumb-DEFTnz90.d.mts} +8 -31
  47. package/dist/{button-CKRN3ZQT.d.cts → button-BnoPktln.d.cts} +3 -16
  48. package/dist/{button-CKRN3ZQT.d.mts → button-BnoPktln.d.mts} +3 -16
  49. package/dist/{button-group-Cd5m5G3p.d.mts → button-group-BTYrTSxc.d.cts} +6 -19
  50. package/dist/{button-group-CiKhLVCg.d.cts → button-group-CMz9WD27.d.mts} +6 -19
  51. package/dist/{calendar-CIhMEz65.d.mts → calendar-BkV5hTX2.d.mts} +6 -21
  52. package/dist/{calendar-DJdVw-yD.d.cts → calendar-iDMPT1kI.d.cts} +6 -21
  53. package/dist/candlestick-chart-CiBiCU3y.mjs.map +1 -1
  54. package/dist/candlestick-chart-CqmRkfXj.cjs.map +1 -1
  55. package/dist/{card-DOnx7RKz.d.cts → card-C7jG9mCZ.d.cts} +8 -29
  56. package/dist/{card-DOnx7RKz.d.mts → card-C7jG9mCZ.d.mts} +8 -29
  57. package/dist/card-form-BR5kDTzB.cjs.map +1 -1
  58. package/dist/card-form-D9fNO-6F.mjs.map +1 -1
  59. package/dist/cards/grid-product-card.cjs.map +1 -1
  60. package/dist/cards/grid-product-card.d.cts +1 -1
  61. package/dist/cards/grid-product-card.d.mts +1 -1
  62. package/dist/cards/grid-product-card.mjs.map +1 -1
  63. package/dist/cards/product-card.cjs.map +1 -1
  64. package/dist/cards/product-card.d.cts +1 -1
  65. package/dist/cards/product-card.d.mts +1 -1
  66. package/dist/cards/product-card.mjs.map +1 -1
  67. package/dist/cards/simple-card.d.cts +1 -1
  68. package/dist/cards/simple-card.d.mts +1 -1
  69. package/dist/{carousel-BniJSLfd.d.mts → carousel-D7VXWJ3S.d.mts} +7 -32
  70. package/dist/{carousel-D4--8HfP.d.cts → carousel-bBvM31sh.d.cts} +7 -32
  71. package/dist/{chart-sYFksFMk.d.cts → chart-D8tNf0_6.d.cts} +6 -36
  72. package/dist/{chart-sYFksFMk.d.mts → chart-D8tNf0_6.d.mts} +6 -36
  73. package/dist/{checkbox-XfLNnG0S.d.cts → checkbox-Cuc-_UcF.d.cts} +2 -6
  74. package/dist/{checkbox-XfLNnG0S.d.mts → checkbox-Cuc-_UcF.d.mts} +2 -6
  75. package/dist/{checkbox-field-Csro0Nla.mjs → checkbox-field-BN3Vd9qq.mjs} +2 -2
  76. package/dist/{checkbox-field-Csro0Nla.mjs.map → checkbox-field-BN3Vd9qq.mjs.map} +1 -1
  77. package/dist/{checkbox-field-Ck_VADFe.cjs → checkbox-field-DBUjQC_4.cjs} +2 -2
  78. package/dist/{checkbox-field-Ck_VADFe.cjs.map → checkbox-field-DBUjQC_4.cjs.map} +1 -1
  79. package/dist/close-BYHgEZvZ.cjs.map +1 -1
  80. package/dist/close-DYJZ8fkh.mjs.map +1 -1
  81. package/dist/cms-layout-Cr0FjyGt.cjs +2 -0
  82. package/dist/cms-layout-Cr0FjyGt.cjs.map +1 -0
  83. package/dist/cms-layout-pnkDb9PY.mjs +2 -0
  84. package/dist/cms-layout-pnkDb9PY.mjs.map +1 -0
  85. package/dist/{collapsible-liIHmFuw.d.cts → collapsible-D3MS6pMC.d.cts} +4 -11
  86. package/dist/{collapsible-liIHmFuw.d.mts → collapsible-D3MS6pMC.d.mts} +4 -11
  87. package/dist/combobox-BFLmuV4w.d.cts +120 -0
  88. package/dist/combobox-C64Rvd7n.mjs +2 -0
  89. package/dist/combobox-C64Rvd7n.mjs.map +1 -0
  90. package/dist/{combobox-field-Bxrct4lA.cjs → combobox-field-BE9miJ3D.cjs} +2 -2
  91. package/dist/{combobox-field-Bxrct4lA.cjs.map → combobox-field-BE9miJ3D.cjs.map} +1 -1
  92. package/dist/{combobox-field-BMfA_taQ.mjs → combobox-field-Bug1qI5B.mjs} +2 -2
  93. package/dist/{combobox-field-BMfA_taQ.mjs.map → combobox-field-Bug1qI5B.mjs.map} +1 -1
  94. package/dist/combobox-kp_kPY8o.cjs +2 -0
  95. package/dist/combobox-kp_kPY8o.cjs.map +1 -0
  96. package/dist/combobox-wOpqEFBq.d.mts +120 -0
  97. package/dist/{command-Bb6SneVI.d.mts → command-BM9cIuFp.d.cts} +11 -42
  98. package/dist/{command-CHSJVU9o.d.cts → command-DLnIGYou.d.mts} +11 -42
  99. package/dist/{context-menu-BOlGSuep.d.cts → context-menu-z_-DdL8k.d.cts} +16 -64
  100. package/dist/{context-menu-BOlGSuep.d.mts → context-menu-z_-DdL8k.d.mts} +16 -64
  101. package/dist/conversion-funnel-chart-CW_zDfKS.mjs.map +1 -1
  102. package/dist/conversion-funnel-chart-r2m2QbiQ.cjs.map +1 -1
  103. package/dist/correlation-scatter-chart-Djtt7NU7.mjs.map +1 -1
  104. package/dist/correlation-scatter-chart-HF48YUIB.cjs.map +1 -1
  105. package/dist/{country-C8QijcHF.d.mts → country-8m51pdnj.d.mts} +3 -3
  106. package/dist/{country-CJIaO0I7.d.cts → country-BPlbbV9W.d.cts} +3 -3
  107. package/dist/currency-display-Buxc6Ph5.cjs.map +1 -1
  108. package/dist/currency-display-CEg_HRYv.mjs.map +1 -1
  109. package/dist/data-display/country.cjs.map +1 -1
  110. package/dist/data-display/country.d.cts +1 -1
  111. package/dist/data-display/country.d.mts +1 -1
  112. package/dist/data-display/country.mjs.map +1 -1
  113. package/dist/data-display/data-list.cjs.map +1 -1
  114. package/dist/data-display/data-list.d.cts +1 -1
  115. package/dist/data-display/data-list.d.mts +1 -1
  116. package/dist/data-display/data-list.mjs.map +1 -1
  117. package/dist/data-display/date-tooltip.cjs.map +1 -1
  118. package/dist/data-display/date-tooltip.d.cts +1 -1
  119. package/dist/data-display/date-tooltip.d.mts +1 -1
  120. package/dist/data-display/date-tooltip.mjs.map +1 -1
  121. package/dist/data-display/empty.cjs.map +1 -1
  122. package/dist/data-display/empty.d.cts +1 -1
  123. package/dist/data-display/empty.d.mts +1 -1
  124. package/dist/data-display/empty.mjs.map +1 -1
  125. package/dist/data-display/name.cjs.map +1 -1
  126. package/dist/data-display/name.d.cts +1 -1
  127. package/dist/data-display/name.d.mts +1 -1
  128. package/dist/data-display/name.mjs.map +1 -1
  129. package/dist/data-display/phone-number.cjs.map +1 -1
  130. package/dist/data-display/phone-number.d.cts +1 -1
  131. package/dist/data-display/phone-number.d.mts +1 -1
  132. package/dist/data-display/phone-number.mjs.map +1 -1
  133. package/dist/data-display/role-badge.cjs.map +1 -1
  134. package/dist/data-display/role-badge.d.cts +1 -1
  135. package/dist/data-display/role-badge.d.mts +1 -1
  136. package/dist/data-display/role-badge.mjs.map +1 -1
  137. package/dist/data-display/statistic.cjs.map +1 -1
  138. package/dist/data-display/statistic.d.cts +1 -1
  139. package/dist/data-display/statistic.d.mts +1 -1
  140. package/dist/data-display/statistic.mjs.map +1 -1
  141. package/dist/data-display/user.cjs.map +1 -1
  142. package/dist/data-display/user.d.cts +1 -1
  143. package/dist/data-display/user.d.mts +1 -1
  144. package/dist/data-display/user.mjs.map +1 -1
  145. package/dist/{data-list-Cg510z2m.d.cts → data-list-BRHjqVUT.d.cts} +10 -5
  146. package/dist/{data-list-Cg510z2m.d.mts → data-list-BRHjqVUT.d.mts} +10 -5
  147. package/dist/date-B3cozmfV.cjs.map +1 -1
  148. package/dist/date-Nsz0Pewe.mjs.map +1 -1
  149. package/dist/date-display-BgI7Wjqf.cjs.map +1 -1
  150. package/dist/date-display-DGfHQhpu.mjs.map +1 -1
  151. package/dist/{date-field-Ba6O0uV3.cjs → date-field-CYoPe74G.cjs} +2 -2
  152. package/dist/{date-field-Ba6O0uV3.cjs.map → date-field-CYoPe74G.cjs.map} +1 -1
  153. package/dist/{date-field-DUx13OiJ.mjs → date-field-D_qpBb-t.mjs} +2 -2
  154. package/dist/{date-field-DUx13OiJ.mjs.map → date-field-D_qpBb-t.mjs.map} +1 -1
  155. package/dist/{date-tooltip-DptxGOj_.d.cts → date-tooltip-BZ4JiwfW.d.cts} +3 -2
  156. package/dist/{date-tooltip-DptxGOj_.d.mts → date-tooltip-BZ4JiwfW.d.mts} +3 -2
  157. package/dist/description-display-BR8nXqc_.cjs.map +1 -1
  158. package/dist/description-display-CW0g3aJa.mjs.map +1 -1
  159. package/dist/detail-dialog-Ct0vAjFe.mjs +2 -0
  160. package/dist/detail-dialog-Ct0vAjFe.mjs.map +1 -0
  161. package/dist/detail-dialog-uN5mrCa7.cjs +2 -0
  162. package/dist/detail-dialog-uN5mrCa7.cjs.map +1 -0
  163. package/dist/{dialog-BASlxWF_.d.cts → dialog-c1vBnso8.d.cts} +13 -41
  164. package/dist/{dialog-BASlxWF_.d.mts → dialog-c1vBnso8.d.mts} +13 -41
  165. package/dist/{dialog-form-B_kgYxZg.cjs → dialog-form-BTZZwz3T.cjs} +2 -2
  166. package/dist/{dialog-form-B_kgYxZg.cjs.map → dialog-form-BTZZwz3T.cjs.map} +1 -1
  167. package/dist/{dialog-form-SyBJUlDB.mjs → dialog-form-CCIcht28.mjs} +2 -2
  168. package/dist/{dialog-form-SyBJUlDB.mjs.map → dialog-form-CCIcht28.mjs.map} +1 -1
  169. package/dist/dialogs/confirm-dialog.cjs.map +1 -1
  170. package/dist/dialogs/confirm-dialog.mjs.map +1 -1
  171. package/dist/dialogs/detail-dialog/components/sidebar.cjs +1 -1
  172. package/dist/dialogs/detail-dialog/components/sidebar.cjs.map +1 -1
  173. package/dist/dialogs/detail-dialog/components/sidebar.d.cts +65 -134
  174. package/dist/dialogs/detail-dialog/components/sidebar.d.mts +65 -134
  175. package/dist/dialogs/detail-dialog/components/sidebar.mjs +1 -1
  176. package/dist/dialogs/detail-dialog/components/sidebar.mjs.map +1 -1
  177. package/dist/dialogs/detail-dialog/index.cjs +1 -2
  178. package/dist/dialogs/detail-dialog/index.d.cts +1 -1
  179. package/dist/dialogs/detail-dialog/index.d.mts +1 -1
  180. package/dist/dialogs/detail-dialog/index.mjs +1 -2
  181. package/dist/dialogs/error-dialog.cjs.map +1 -1
  182. package/dist/dialogs/error-dialog.d.cts +1 -1
  183. package/dist/dialogs/error-dialog.d.mts +1 -1
  184. package/dist/dialogs/error-dialog.mjs.map +1 -1
  185. package/dist/dialogs/loading-dialog.cjs.map +1 -1
  186. package/dist/dialogs/loading-dialog.d.cts +1 -1
  187. package/dist/dialogs/loading-dialog.d.mts +1 -1
  188. package/dist/dialogs/loading-dialog.mjs.map +1 -1
  189. package/dist/donut-chart-CsPPKy0G.cjs.map +1 -1
  190. package/dist/donut-chart-eKZjuzW0.mjs.map +1 -1
  191. package/dist/{drawer-Dwx99ff3.d.cts → drawer-B8cntcg3.d.cts} +11 -39
  192. package/dist/{drawer-Dwx99ff3.d.mts → drawer-B8cntcg3.d.mts} +11 -39
  193. package/dist/{dropdown-menu-CcMccVns.d.cts → dropdown-menu-wdaYl-q0.d.cts} +16 -66
  194. package/dist/{dropdown-menu-CcMccVns.d.mts → dropdown-menu-wdaYl-q0.d.mts} +16 -66
  195. package/dist/{edit-qfS5kOtM.d.cts → edit-C8JDClC3.d.cts} +3 -2
  196. package/dist/{edit-qfS5kOtM.d.mts → edit-C8JDClC3.d.mts} +3 -2
  197. package/dist/edit-button-0_FLZoT3.cjs.map +1 -1
  198. package/dist/edit-button-DmMFMzG0.mjs.map +1 -1
  199. package/dist/email-display-BKcoWmPK.mjs.map +1 -1
  200. package/dist/email-display-DqKYq0iM.cjs.map +1 -1
  201. package/dist/{email-field-CO_BZHod.cjs → email-field-DJa7iASY.cjs} +2 -2
  202. package/dist/{email-field-CO_BZHod.cjs.map → email-field-DJa7iASY.cjs.map} +1 -1
  203. package/dist/{email-field-BGYZUVl0.mjs → email-field-DxSNJ6tf.mjs} +2 -2
  204. package/dist/{email-field-BGYZUVl0.mjs.map → email-field-DxSNJ6tf.mjs.map} +1 -1
  205. package/dist/{empty-CaNJjp05.d.cts → empty-B-Nd7s_O.d.cts} +7 -27
  206. package/dist/{empty-CaNJjp05.d.mts → empty-B-Nd7s_O.d.mts} +7 -27
  207. package/dist/{empty-ClQptIZH.d.cts → empty-CHTdH5fg.d.cts} +4 -2
  208. package/dist/{empty-ClQptIZH.d.mts → empty-CHTdH5fg.d.mts} +4 -2
  209. package/dist/{error-dialog-D4jOPhmw.d.cts → error-dialog-DYQSm_JC.d.cts} +6 -3
  210. package/dist/{error-dialog-D4jOPhmw.d.mts → error-dialog-DYQSm_JC.d.mts} +6 -3
  211. package/dist/features/charts/index.cjs.map +1 -1
  212. package/dist/features/charts/index.d.cts +1 -1
  213. package/dist/features/charts/index.d.mts +1 -1
  214. package/dist/features/charts/index.mjs.map +1 -1
  215. package/dist/features/descriptions/index.cjs.map +1 -1
  216. package/dist/features/descriptions/index.d.cts +1 -1
  217. package/dist/features/descriptions/index.d.mts +1 -1
  218. package/dist/features/descriptions/index.mjs.map +1 -1
  219. package/dist/features/logo/index.cjs.map +1 -1
  220. package/dist/features/logo/index.d.cts +3 -8
  221. package/dist/features/logo/index.d.mts +3 -8
  222. package/dist/features/logo/index.mjs.map +1 -1
  223. package/dist/features/tables/index.d.cts +1 -1
  224. package/dist/features/tables/index.d.mts +1 -1
  225. package/dist/features/tanstack-form/index.cjs +1 -1
  226. package/dist/features/tanstack-form/index.d.cts +1 -1
  227. package/dist/features/tanstack-form/index.d.mts +1 -1
  228. package/dist/features/tanstack-form/index.mjs +1 -1
  229. package/dist/features/text-editor/index.cjs +1 -1
  230. package/dist/features/text-editor/index.d.cts +1 -1
  231. package/dist/features/text-editor/index.d.mts +1 -1
  232. package/dist/features/text-editor/index.mjs +1 -1
  233. package/dist/field-BSLi-P0Q.cjs.map +1 -1
  234. package/dist/field-V2DoD8qL.mjs.map +1 -1
  235. package/dist/{file-uploader-U64lH0zG.d.cts → file-uploader-DyHOMFK3.d.cts} +1 -2
  236. package/dist/{file-uploader-U64lH0zG.d.mts → file-uploader-DyHOMFK3.d.mts} +1 -2
  237. package/dist/filter-CWuRGTl4.mjs.map +1 -1
  238. package/dist/filter-DqedvThM.cjs.map +1 -1
  239. package/dist/{flex-bw7U4hXn.d.cts → flex-CrxTaAXE.d.cts} +5 -16
  240. package/dist/{flex-bw7U4hXn.d.mts → flex-CrxTaAXE.d.mts} +5 -16
  241. package/dist/{form-CMP15S4r.d.cts → form-D0M_qGX_.d.cts} +8 -45
  242. package/dist/{form-CMP15S4r.d.mts → form-D0M_qGX_.d.mts} +8 -45
  243. package/dist/gain-loss-bar-chart-Dz1oAj8H.mjs.map +1 -1
  244. package/dist/gain-loss-bar-chart-FUzN7DxF.cjs.map +1 -1
  245. package/dist/{google-Bl-jBW8L.d.cts → google-vajkoOiC.d.cts} +9 -5
  246. package/dist/{google-Bl-jBW8L.d.mts → google-vajkoOiC.d.mts} +9 -5
  247. package/dist/{grid-product-card-bpADqDOQ.d.cts → grid-product-card-P5X8ZPQF.d.cts} +14 -7
  248. package/dist/{grid-product-card-bpADqDOQ.d.mts → grid-product-card-P5X8ZPQF.d.mts} +14 -7
  249. package/dist/group-field-gejvx_Td.mjs.map +1 -1
  250. package/dist/group-field-sVykO2JZ.cjs.map +1 -1
  251. package/dist/{hover-card-Prwm-0Q4.d.cts → hover-card-JeShfV9g.d.cts} +4 -14
  252. package/dist/{hover-card-Prwm-0Q4.d.mts → hover-card-JeShfV9g.d.mts} +4 -14
  253. package/dist/image-BvDGi_G7.d.cts +36 -0
  254. package/dist/image-BvDGi_G7.d.mts +36 -0
  255. package/dist/{index-DJiiPHPf.d.cts → index-BBMKb5q2.d.cts} +28 -13
  256. package/dist/{index-DJiiPHPf.d.mts → index-BBMKb5q2.d.mts} +28 -13
  257. package/dist/{index-CS7oydGk.d.cts → index-BMuVmm7f.d.mts} +26 -26
  258. package/dist/{index-BGnN6Vax.d.cts → index-BNw6P5PU.d.cts} +793 -698
  259. package/dist/{index-BGnN6Vax.d.mts → index-BNw6P5PU.d.mts} +793 -698
  260. package/dist/index-BOifmu0V.d.cts +51 -0
  261. package/dist/index-BOifmu0V.d.mts +51 -0
  262. package/dist/{index-DmvXR2Cn.d.mts → index-CLx89ATZ.d.cts} +26 -26
  263. package/dist/{index-FEMPGfwO.d.cts → index-Ck7BOwK3.d.cts} +304 -142
  264. package/dist/{index-_GTjwUdG.d.mts → index-D4lNFNf2.d.mts} +304 -142
  265. package/dist/{index-CBntsHIg.d.cts → index-DJKJt7oV.d.cts} +111 -54
  266. package/dist/{index-CBntsHIg.d.mts → index-DJKJt7oV.d.mts} +111 -54
  267. package/dist/{index-DOaKN0wJ.d.cts → index-DRAyYm8g.d.cts} +4 -34
  268. package/dist/{index-DOaKN0wJ.d.mts → index-DRAyYm8g.d.mts} +4 -34
  269. package/dist/{index-teY5hw2R.d.cts → index-KgI9KqIf.d.cts} +33 -15
  270. package/dist/{index-teY5hw2R.d.mts → index-KgI9KqIf.d.mts} +33 -15
  271. package/dist/index.cjs +1 -1
  272. package/dist/index.d.cts +92 -91
  273. package/dist/index.d.mts +92 -91
  274. package/dist/index.mjs +1 -1
  275. package/dist/indexed-performance-line-chart-CT79KOM6.cjs.map +1 -1
  276. package/dist/indexed-performance-line-chart-D7F-rIMv.mjs.map +1 -1
  277. package/dist/{input-BieGEIDf.d.cts → input-DxNK7Wo6.d.cts} +7 -12
  278. package/dist/{input-BieGEIDf.d.mts → input-DxNK7Wo6.d.mts} +7 -12
  279. package/dist/{input-otp-6hJfhBHX.d.cts → input-otp-DGf28Nq2.d.cts} +7 -20
  280. package/dist/{input-otp-6hJfhBHX.d.mts → input-otp-DGf28Nq2.d.mts} +7 -20
  281. package/dist/{item-B2JsbfYJ.d.cts → item-BxUBO7Hd.d.cts} +13 -48
  282. package/dist/{item-DCYlZYdc.d.mts → item-ChW41yKF.d.mts} +13 -48
  283. package/dist/{label-DPG_GY7h.d.cts → label-CKywNz0h.d.cts} +2 -6
  284. package/dist/{label-DPG_GY7h.d.mts → label-CKywNz0h.d.mts} +2 -6
  285. package/dist/layouts/cms-layout/index.cjs +1 -1
  286. package/dist/layouts/cms-layout/index.d.cts +1 -1
  287. package/dist/layouts/cms-layout/index.d.mts +1 -1
  288. package/dist/layouts/cms-layout/index.mjs +1 -1
  289. package/dist/layouts/flex.d.cts +1 -1
  290. package/dist/layouts/flex.d.mts +1 -1
  291. package/dist/layouts/grid.cjs.map +1 -1
  292. package/dist/layouts/grid.mjs.map +1 -1
  293. package/dist/layouts/payment-layout/index.cjs +1 -1
  294. package/dist/layouts/payment-layout/index.d.cts +1 -1
  295. package/dist/layouts/payment-layout/index.d.mts +1 -1
  296. package/dist/layouts/payment-layout/index.mjs +1 -1
  297. package/dist/list-display-BRJVmji0.cjs.map +1 -1
  298. package/dist/list-display-Co94sV4H.mjs.map +1 -1
  299. package/dist/{loading-dialog-C73EJx9s.d.cts → loading-dialog-DXjQSQnC.d.cts} +4 -2
  300. package/dist/{loading-dialog-C73EJx9s.d.mts → loading-dialog-DXjQSQnC.d.mts} +4 -2
  301. package/dist/{menubar-CFrn3S96.d.cts → menubar-PDJeDtHh.d.cts} +17 -72
  302. package/dist/{menubar-CFrn3S96.d.mts → menubar-PDJeDtHh.d.mts} +17 -72
  303. package/dist/metric-radar-chart-6LTGQHsL.mjs.map +1 -1
  304. package/dist/metric-radar-chart-DwgbXgJX.cjs.map +1 -1
  305. package/dist/mirrored-bar-chart-BT7AYPJB.mjs.map +1 -1
  306. package/dist/mirrored-bar-chart-BwjtExjh.cjs.map +1 -1
  307. package/dist/more-button-BKBcXz6E.mjs.map +1 -1
  308. package/dist/more-button-RYvZgYiu.cjs.map +1 -1
  309. package/dist/{multi-select-BbiKgAYs.d.cts → multi-select-C4ae_jaX.d.mts} +2 -3
  310. package/dist/{multi-select-BoBHt_Z9.d.mts → multi-select-V3chK_bJ.d.cts} +2 -3
  311. package/dist/name-display-B-FtblLL.cjs.map +1 -1
  312. package/dist/name-display-CB9XAhXP.mjs.map +1 -1
  313. package/dist/{name-7aoM5rAW.d.cts → name-tnVKGZN7.d.cts} +3 -2
  314. package/dist/{name-7aoM5rAW.d.mts → name-tnVKGZN7.d.mts} +3 -2
  315. package/dist/{navigation-menu-B1BY9Zll.d.cts → navigation-menu-BCjjeblq.d.cts} +11 -38
  316. package/dist/{navigation-menu-B1BY9Zll.d.mts → navigation-menu-BCjjeblq.d.mts} +11 -38
  317. package/dist/{number-field-B89VeU2r.mjs → number-field-5INgdUUv.mjs} +2 -2
  318. package/dist/{number-field-B89VeU2r.mjs.map → number-field-5INgdUUv.mjs.map} +1 -1
  319. package/dist/{number-field-C7iEv5GJ.cjs → number-field-DKZz-27X.cjs} +2 -2
  320. package/dist/{number-field-C7iEv5GJ.cjs.map → number-field-DKZz-27X.cjs.map} +1 -1
  321. package/dist/number-input-CAr3JaA-.cjs +2 -0
  322. package/dist/{number-input-kTh9zzr7.cjs.map → number-input-CAr3JaA-.cjs.map} +1 -1
  323. package/dist/number-input-CJcEV9Cg.mjs +2 -0
  324. package/dist/{number-input-CqkegUWs.mjs.map → number-input-CJcEV9Cg.mjs.map} +1 -1
  325. package/dist/orders-bar-chart-9RmtP6In.cjs.map +1 -1
  326. package/dist/orders-bar-chart-DQhJGmwY.mjs.map +1 -1
  327. package/dist/pages/FeatureDeveloping.cjs.map +1 -1
  328. package/dist/pages/FeatureDeveloping.d.cts +1 -1
  329. package/dist/pages/FeatureDeveloping.d.mts +1 -1
  330. package/dist/pages/FeatureDeveloping.mjs.map +1 -1
  331. package/dist/pages/FeatureFixing.cjs.map +1 -1
  332. package/dist/pages/FeatureFixing.d.cts +1 -1
  333. package/dist/pages/FeatureFixing.d.mts +1 -1
  334. package/dist/pages/FeatureFixing.mjs.map +1 -1
  335. package/dist/pages/LoginPage.cjs.map +1 -1
  336. package/dist/pages/LoginPage.d.cts +1 -1
  337. package/dist/pages/LoginPage.d.mts +1 -1
  338. package/dist/pages/LoginPage.mjs.map +1 -1
  339. package/dist/pages/NotAuthorized.cjs.map +1 -1
  340. package/dist/pages/NotAuthorized.d.cts +1 -1
  341. package/dist/pages/NotAuthorized.d.mts +1 -1
  342. package/dist/pages/NotAuthorized.mjs.map +1 -1
  343. package/dist/pages/NotFound.cjs.map +1 -1
  344. package/dist/pages/NotFound.d.cts +1 -1
  345. package/dist/pages/NotFound.d.mts +1 -1
  346. package/dist/pages/NotFound.mjs.map +1 -1
  347. package/dist/pages/RegisterPage.cjs.map +1 -1
  348. package/dist/pages/RegisterPage.d.cts +1 -1
  349. package/dist/pages/RegisterPage.d.mts +1 -1
  350. package/dist/pages/RegisterPage.mjs.map +1 -1
  351. package/dist/pages/VerifyEmailPage.cjs.map +1 -1
  352. package/dist/pages/VerifyEmailPage.d.cts +1 -1
  353. package/dist/pages/VerifyEmailPage.d.mts +1 -1
  354. package/dist/pages/VerifyEmailPage.mjs.map +1 -1
  355. package/dist/{pagination-B03e1b6x.d.mts → pagination-BRw-yZBY.d.cts} +11 -33
  356. package/dist/{pagination-Dw23nKW-.d.cts → pagination-BlLiOvY9.d.mts} +11 -33
  357. package/dist/{paragraph-BTmvVS1S.d.mts → paragraph-CRo5eC7H.d.mts} +2 -7
  358. package/dist/{paragraph-DbYYv0A0.d.cts → paragraph-CkCNIsvz.d.cts} +2 -7
  359. package/dist/{password-field-9RZ84TNz.cjs → password-field-BuWARi35.cjs} +2 -2
  360. package/dist/{password-field-9RZ84TNz.cjs.map → password-field-BuWARi35.cjs.map} +1 -1
  361. package/dist/{password-field-pqUgUcgf.mjs → password-field-DOIe6wTv.mjs} +2 -2
  362. package/dist/{password-field-pqUgUcgf.mjs.map → password-field-DOIe6wTv.mjs.map} +1 -1
  363. package/dist/{payment-layout-DS5CEH1h.mjs → payment-layout-BSl9DYQA.mjs} +2 -2
  364. package/dist/{payment-layout-DS5CEH1h.mjs.map → payment-layout-BSl9DYQA.mjs.map} +1 -1
  365. package/dist/payment-layout-DDcLanA0.cjs +2 -0
  366. package/dist/{payment-layout-Cb-Q8KD2.cjs.map → payment-layout-DDcLanA0.cjs.map} +1 -1
  367. package/dist/permalink-CUIKG9VA.cjs.map +1 -1
  368. package/dist/permalink-I-INEarM.mjs.map +1 -1
  369. package/dist/phone-number-Cu7Mnl6J.mjs.map +1 -1
  370. package/dist/{phone-number-6b_pkGI1.d.cts → phone-number-D9j5xYDW.d.cts} +3 -2
  371. package/dist/{phone-number-6b_pkGI1.d.mts → phone-number-D9j5xYDW.d.mts} +3 -2
  372. package/dist/phone-number-DJvfJg1b.cjs.map +1 -1
  373. package/dist/{popover-form-CLr6xIl5.cjs → popover-form-Bq2GcuZu.cjs} +2 -2
  374. package/dist/{popover-form-CLr6xIl5.cjs.map → popover-form-Bq2GcuZu.cjs.map} +1 -1
  375. package/dist/{popover-form-BmOqFjQM.mjs → popover-form-BsapHJck.mjs} +2 -2
  376. package/dist/{popover-form-BmOqFjQM.mjs.map → popover-form-BsapHJck.mjs.map} +1 -1
  377. package/dist/{popover-CdOCi0xg.d.cts → popover-qfF3o0zL.d.cts} +6 -21
  378. package/dist/{popover-CdOCi0xg.d.mts → popover-qfF3o0zL.d.mts} +6 -21
  379. package/dist/portfolio-allocation-treemap-Bn0X4wb6.cjs.map +1 -1
  380. package/dist/portfolio-allocation-treemap-Cb9Kidrl.mjs.map +1 -1
  381. package/dist/price-range-area-chart-BW6RQb_9.cjs.map +1 -1
  382. package/dist/price-range-area-chart-Dy01mhWJ.mjs.map +1 -1
  383. package/dist/{product-card-CvXLXbpV.d.cts → product-card-CYNh0CT5.d.cts} +14 -7
  384. package/dist/{product-card-CvXLXbpV.d.mts → product-card-CYNh0CT5.d.mts} +14 -7
  385. package/dist/{progress-Bp-5keO8.d.cts → progress-BpWaSlPG.d.cts} +2 -7
  386. package/dist/{progress-Bp-5keO8.d.mts → progress-BpWaSlPG.d.mts} +2 -7
  387. package/dist/progress-display-DbfN7U8m.cjs.map +1 -1
  388. package/dist/progress-display-qgvclwy9.mjs.map +1 -1
  389. package/dist/{radio-group-ycQQrPGn.d.cts → radio-group-D_ssq0Q2.d.cts} +3 -10
  390. package/dist/{radio-group-ycQQrPGn.d.mts → radio-group-D_ssq0Q2.d.mts} +3 -10
  391. package/dist/{radio-group-field-DsUi8uCy.mjs → radio-group-field-DOJ4jVSr.mjs} +2 -2
  392. package/dist/{radio-group-field-DsUi8uCy.mjs.map → radio-group-field-DOJ4jVSr.mjs.map} +1 -1
  393. package/dist/{radio-group-field-Bm2nkk1W.cjs → radio-group-field-kTgtvp1p.cjs} +2 -2
  394. package/dist/{radio-group-field-Bm2nkk1W.cjs.map → radio-group-field-kTgtvp1p.cjs.map} +1 -1
  395. package/dist/{refresh-BiyrZAXL.d.cts → refresh-CWvkHT0L.d.cts} +3 -2
  396. package/dist/{refresh-BiyrZAXL.d.mts → refresh-CWvkHT0L.d.mts} +3 -2
  397. package/dist/remove-button-B3qFw-M5.cjs.map +1 -1
  398. package/dist/remove-button-Db5oSj4h.mjs.map +1 -1
  399. package/dist/{resizable-CAyWR1At.d.cts → resizable-D-Z8NJ7S.d.cts} +2 -3
  400. package/dist/{resizable-CAyWR1At.d.mts → resizable-D-Z8NJ7S.d.mts} +2 -3
  401. package/dist/revenue-area-chart-BwzeTRzD.mjs.map +1 -1
  402. package/dist/revenue-area-chart-w2FZCl_7.cjs.map +1 -1
  403. package/dist/revenue-orders-composed-chart-BttOWYGt.cjs.map +1 -1
  404. package/dist/revenue-orders-composed-chart-DwkbWZSX.mjs.map +1 -1
  405. package/dist/{role-badge-IdZW0tsN.d.cts → role-badge-CojpT6hX.d.cts} +3 -3
  406. package/dist/{role-badge-Bl4Rimpk.d.mts → role-badge-NTpnTz8M.d.mts} +3 -3
  407. package/dist/sales-target-radial-chart-BFLxBT2m.mjs.map +1 -1
  408. package/dist/sales-target-radial-chart-BoxSk7hW.cjs.map +1 -1
  409. package/dist/sankey-flow-chart-CDUqIRMZ.cjs.map +1 -1
  410. package/dist/sankey-flow-chart-bQ3Dffet.mjs.map +1 -1
  411. package/dist/{scroll-area-PbkqIAaH.d.cts → scroll-area-BpSwutyr.d.cts} +3 -14
  412. package/dist/{scroll-area-PbkqIAaH.d.mts → scroll-area-BpSwutyr.d.mts} +3 -14
  413. package/dist/{search-input-Bq4enQzR.d.cts → search-input-C8feOKe2.d.cts} +3 -7
  414. package/dist/{search-input-D51_mAY-.d.mts → search-input-CoqwakbI.d.mts} +3 -7
  415. package/dist/search-modal-CMhsIxae.cjs.map +1 -1
  416. package/dist/search-modal-Cdmi2iyV.mjs.map +1 -1
  417. package/dist/section-form-BJWWflUR.mjs.map +1 -1
  418. package/dist/section-form-C_pHiBEW.cjs.map +1 -1
  419. package/dist/{select-B5j4WvPM.d.cts → select-UNtSe_Fs.d.cts} +11 -37
  420. package/dist/{select-B5j4WvPM.d.mts → select-UNtSe_Fs.d.mts} +11 -37
  421. package/dist/{select-field-ikKFoatc.mjs → select-field-BcsFBbNJ.mjs} +2 -2
  422. package/dist/{select-field-ikKFoatc.mjs.map → select-field-BcsFBbNJ.mjs.map} +1 -1
  423. package/dist/{select-field-F9eikYws.cjs → select-field-CURv37h4.cjs} +2 -2
  424. package/dist/{select-field-F9eikYws.cjs.map → select-field-CURv37h4.cjs.map} +1 -1
  425. package/dist/{separator-D6_fMJtM.d.cts → separator-Cvxkpzrj.d.cts} +2 -8
  426. package/dist/{separator-D6_fMJtM.d.mts → separator-Cvxkpzrj.d.mts} +2 -8
  427. package/dist/{sheet-cHLLSvvt.d.cts → sheet-BBvQsKM_.d.cts} +11 -34
  428. package/dist/{sheet-cHLLSvvt.d.mts → sheet-BBvQsKM_.d.mts} +11 -34
  429. package/dist/sidebar-core-Bz_LtXZy.mjs +2 -0
  430. package/dist/sidebar-core-Bz_LtXZy.mjs.map +1 -0
  431. package/dist/sidebar-core-DUdB9WCv.cjs +2 -0
  432. package/dist/sidebar-core-DUdB9WCv.cjs.map +1 -0
  433. package/dist/{simple-array-field-Bm_5b8pE.cjs → simple-array-field-bCUuPMgT.cjs} +2 -2
  434. package/dist/{simple-array-field-Bm_5b8pE.cjs.map → simple-array-field-bCUuPMgT.cjs.map} +1 -1
  435. package/dist/{simple-array-field-CeqZJfVs.mjs → simple-array-field-wFE_DUOV.mjs} +2 -2
  436. package/dist/{simple-array-field-CeqZJfVs.mjs.map → simple-array-field-wFE_DUOV.mjs.map} +1 -1
  437. package/dist/{simple-boolean-field-BeL9WjD5.cjs → simple-boolean-field-DRapzNrB.cjs} +2 -2
  438. package/dist/{simple-boolean-field-BeL9WjD5.cjs.map → simple-boolean-field-DRapzNrB.cjs.map} +1 -1
  439. package/dist/{simple-boolean-field-DZ0J-Pk0.mjs → simple-boolean-field-GQJyeyVS.mjs} +2 -2
  440. package/dist/{simple-boolean-field-DZ0J-Pk0.mjs.map → simple-boolean-field-GQJyeyVS.mjs.map} +1 -1
  441. package/dist/simple-card-Dhf9UXBg.d.cts +27 -0
  442. package/dist/simple-card-Dhf9UXBg.d.mts +27 -0
  443. package/dist/{simple-combobox-field-CeV40wnv.cjs → simple-combobox-field-Cp5dfQv3.cjs} +2 -2
  444. package/dist/{simple-combobox-field-CeV40wnv.cjs.map → simple-combobox-field-Cp5dfQv3.cjs.map} +1 -1
  445. package/dist/{simple-combobox-field-BQXmNATZ.mjs → simple-combobox-field-D6IaMJKl.mjs} +2 -2
  446. package/dist/{simple-combobox-field-BQXmNATZ.mjs.map → simple-combobox-field-D6IaMJKl.mjs.map} +1 -1
  447. package/dist/{simple-date-field-CrH-92i4.cjs → simple-date-field-_PSkIXAt.cjs} +2 -2
  448. package/dist/{simple-date-field-CrH-92i4.cjs.map → simple-date-field-_PSkIXAt.cjs.map} +1 -1
  449. package/dist/{simple-date-field-D9ymav2L.mjs → simple-date-field-dszQs7Ik.mjs} +2 -2
  450. package/dist/{simple-date-field-D9ymav2L.mjs.map → simple-date-field-dszQs7Ik.mjs.map} +1 -1
  451. package/dist/{simple-email-field-8IiVOYa-.mjs → simple-email-field-CwyoXqWo.mjs} +2 -2
  452. package/dist/{simple-email-field-8IiVOYa-.mjs.map → simple-email-field-CwyoXqWo.mjs.map} +1 -1
  453. package/dist/{simple-email-field-CsMmMSvS.cjs → simple-email-field-DIHwYrhk.cjs} +2 -2
  454. package/dist/{simple-email-field-CsMmMSvS.cjs.map → simple-email-field-DIHwYrhk.cjs.map} +1 -1
  455. package/dist/{simple-number-field-C6hE1Qlj.mjs → simple-number-field-Id1kV5yR.mjs} +2 -2
  456. package/dist/{simple-number-field-C6hE1Qlj.mjs.map → simple-number-field-Id1kV5yR.mjs.map} +1 -1
  457. package/dist/{simple-number-field-CrU2A2yp.cjs → simple-number-field-VdEeaIiC.cjs} +2 -2
  458. package/dist/{simple-number-field-CrU2A2yp.cjs.map → simple-number-field-VdEeaIiC.cjs.map} +1 -1
  459. package/dist/{simple-password-field-DWmUR_5_.cjs → simple-password-field-7xbVB1H3.cjs} +2 -2
  460. package/dist/{simple-password-field-DWmUR_5_.cjs.map → simple-password-field-7xbVB1H3.cjs.map} +1 -1
  461. package/dist/{simple-password-field-CabyA9Y7.mjs → simple-password-field-DIO9FwQy.mjs} +2 -2
  462. package/dist/{simple-password-field-CabyA9Y7.mjs.map → simple-password-field-DIO9FwQy.mjs.map} +1 -1
  463. package/dist/{simple-radio-group-field-BNFgrTSb.mjs → simple-radio-group-field-BmHWRnns.mjs} +2 -2
  464. package/dist/{simple-radio-group-field-BNFgrTSb.mjs.map → simple-radio-group-field-BmHWRnns.mjs.map} +1 -1
  465. package/dist/{simple-radio-group-field-CpTX_Xoy.cjs → simple-radio-group-field-CxVAr6yW.cjs} +2 -2
  466. package/dist/{simple-radio-group-field-CpTX_Xoy.cjs.map → simple-radio-group-field-CxVAr6yW.cjs.map} +1 -1
  467. package/dist/{simple-select-field-VibM3I3D.cjs → simple-select-field-C9u7Pg9u.cjs} +2 -2
  468. package/dist/{simple-select-field-VibM3I3D.cjs.map → simple-select-field-C9u7Pg9u.cjs.map} +1 -1
  469. package/dist/{simple-select-field-CiUfRHCo.mjs → simple-select-field-DfZk0zPa.mjs} +2 -2
  470. package/dist/{simple-select-field-CiUfRHCo.mjs.map → simple-select-field-DfZk0zPa.mjs.map} +1 -1
  471. package/dist/{simple-text-field-DRlcBB-3.cjs → simple-text-field-BxPjcB4c.cjs} +2 -2
  472. package/dist/{simple-text-field-DRlcBB-3.cjs.map → simple-text-field-BxPjcB4c.cjs.map} +1 -1
  473. package/dist/{simple-text-field-Cmmmci4R.mjs → simple-text-field-CT9KFUSK.mjs} +2 -2
  474. package/dist/{simple-text-field-Cmmmci4R.mjs.map → simple-text-field-CT9KFUSK.mjs.map} +1 -1
  475. package/dist/{simple-textarea-field-BDqw8ewE.mjs → simple-textarea-field-B22rT6zS.mjs} +2 -2
  476. package/dist/{simple-textarea-field-BDqw8ewE.mjs.map → simple-textarea-field-B22rT6zS.mjs.map} +1 -1
  477. package/dist/{simple-textarea-field-B0fOG7nh.cjs → simple-textarea-field-DG9oPtP-.cjs} +2 -2
  478. package/dist/{simple-textarea-field-B0fOG7nh.cjs.map → simple-textarea-field-DG9oPtP-.cjs.map} +1 -1
  479. package/dist/{skeleton-Ct4sYEKk.d.cts → skeleton-BL19ZqPB.d.cts} +2 -5
  480. package/dist/{skeleton-Ct4sYEKk.d.mts → skeleton-BL19ZqPB.d.mts} +2 -5
  481. package/dist/{slider-DwR1MhR8.d.cts → slider-KvzhtIbT.d.cts} +2 -10
  482. package/dist/{slider-DwR1MhR8.d.mts → slider-KvzhtIbT.d.mts} +2 -10
  483. package/dist/{sonner-B6LxJMYT.d.mts → sonner-C-sM3xU2.d.mts} +1 -2
  484. package/dist/{sonner-BcNgR0GP.d.cts → sonner-D-rrTnjn.d.cts} +1 -2
  485. package/dist/sparkline-chart-TbGzakUl.mjs.map +1 -1
  486. package/dist/sparkline-chart-sPqaJHep.cjs.map +1 -1
  487. package/dist/{spinner-CXuqcoB5.d.cts → spinner-Cz20qsxS.d.cts} +2 -5
  488. package/dist/{spinner-CXuqcoB5.d.mts → spinner-Cz20qsxS.d.mts} +2 -5
  489. package/dist/stacked-area-chart-DyxY96_l.cjs.map +1 -1
  490. package/dist/stacked-area-chart-UIWIxTmq.mjs.map +1 -1
  491. package/dist/statistic-Bpif8p8R.d.cts +42 -0
  492. package/dist/statistic-Bpif8p8R.d.mts +42 -0
  493. package/dist/statistic-ClkqqDfk.mjs.map +1 -1
  494. package/dist/statistic-LL4uHlRb.cjs.map +1 -1
  495. package/dist/status-display-BUphOF18.mjs.map +1 -1
  496. package/dist/status-display-o9inMVvb.cjs.map +1 -1
  497. package/dist/submit-button-CGBaPzE9.mjs.map +1 -1
  498. package/dist/submit-button-CvINfld5.cjs.map +1 -1
  499. package/dist/summary-bar-CYfgdxrQ.mjs.map +1 -1
  500. package/dist/summary-bar-Mb1B9Dnf.cjs.map +1 -1
  501. package/dist/{switch-9v4AYqJb.d.cts → switch-Ce5Pre2e.d.cts} +2 -6
  502. package/dist/{switch-9v4AYqJb.d.mts → switch-Ce5Pre2e.d.mts} +2 -6
  503. package/dist/{switch-field-BDVIJ21m.mjs → switch-field-Cz4lDf1D.mjs} +2 -2
  504. package/dist/{switch-field-BDVIJ21m.mjs.map → switch-field-Cz4lDf1D.mjs.map} +1 -1
  505. package/dist/{switch-field-D6CCxaEX.cjs → switch-field-yE4A6EoF.cjs} +2 -2
  506. package/dist/{switch-field-D6CCxaEX.cjs.map → switch-field-yE4A6EoF.cjs.map} +1 -1
  507. package/dist/systems/google.cjs.map +1 -1
  508. package/dist/systems/google.d.cts +1 -1
  509. package/dist/systems/google.d.mts +1 -1
  510. package/dist/systems/google.mjs.map +1 -1
  511. package/dist/{table-Dg2D0v87.d.cts → table-D354-TpC.d.cts} +9 -33
  512. package/dist/{table-Dg2D0v87.d.mts → table-D354-TpC.d.mts} +9 -33
  513. package/dist/tables-078i-X0d.cjs.map +1 -1
  514. package/dist/tables-BGzwkdFO.mjs.map +1 -1
  515. package/dist/{tabs-CJ6qZcFU.d.cts → tabs-DLEtBGOr.d.cts} +5 -18
  516. package/dist/{tabs-CJ6qZcFU.d.mts → tabs-DLEtBGOr.d.mts} +5 -18
  517. package/dist/{tanstack-form-Bae0TOEr.cjs → tanstack-form-BxqS40rB.cjs} +2 -2
  518. package/dist/{tanstack-form-Bae0TOEr.cjs.map → tanstack-form-BxqS40rB.cjs.map} +1 -1
  519. package/dist/{tanstack-form-AGwPfwiM.mjs → tanstack-form-q9hDCc0Y.mjs} +2 -2
  520. package/dist/{tanstack-form-AGwPfwiM.mjs.map → tanstack-form-q9hDCc0Y.mjs.map} +1 -1
  521. package/dist/text-editor-BtfyZSgR.cjs +2 -0
  522. package/dist/{text-editor-DJYQXXtP.cjs.map → text-editor-BtfyZSgR.cjs.map} +1 -1
  523. package/dist/text-editor-CtR27_PR.mjs +2 -0
  524. package/dist/{text-editor-BQtIXOpM.mjs.map → text-editor-CtR27_PR.mjs.map} +1 -1
  525. package/dist/{text-editor-field-C2KDtfZV.mjs → text-editor-field-CQ8tnZFw.mjs} +2 -2
  526. package/dist/{text-editor-field-C2KDtfZV.mjs.map → text-editor-field-CQ8tnZFw.mjs.map} +1 -1
  527. package/dist/{text-editor-field-DF8lkOc_.cjs → text-editor-field-CxU-KMMn.cjs} +2 -2
  528. package/dist/{text-editor-field-DF8lkOc_.cjs.map → text-editor-field-CxU-KMMn.cjs.map} +1 -1
  529. package/dist/{text-field-BJciq-S8.mjs → text-field-B3xlvEUN.mjs} +2 -2
  530. package/dist/{text-field-BJciq-S8.mjs.map → text-field-B3xlvEUN.mjs.map} +1 -1
  531. package/dist/{text-field-B1n5Xd-k.cjs → text-field-BQovKYN-.cjs} +2 -2
  532. package/dist/{text-field-B1n5Xd-k.cjs.map → text-field-BQovKYN-.cjs.map} +1 -1
  533. package/dist/{textarea-C8ZIZh-y.d.cts → textarea-D1diQohb.d.cts} +4 -8
  534. package/dist/{textarea-C8ZIZh-y.d.mts → textarea-D1diQohb.d.mts} +4 -8
  535. package/dist/{textarea-field-Bm7bsyjB.cjs → textarea-field-B38SnNv4.cjs} +2 -2
  536. package/dist/{textarea-field-Bm7bsyjB.cjs.map → textarea-field-B38SnNv4.cjs.map} +1 -1
  537. package/dist/{textarea-field-BjdX2Qjt.mjs → textarea-field-u2UUwtr_.mjs} +2 -2
  538. package/dist/{textarea-field-BjdX2Qjt.mjs.map → textarea-field-u2UUwtr_.mjs.map} +1 -1
  539. package/dist/{title-BT9guhSU.d.cts → title-D8BSkLsi.d.cts} +6 -9
  540. package/dist/{title-BT9guhSU.d.mts → title-D8BSkLsi.d.mts} +6 -9
  541. package/dist/title-field-B2hM3S_S.cjs.map +1 -1
  542. package/dist/title-field-oAqHRw59.mjs.map +1 -1
  543. package/dist/{toggle-Bk5Lvs5n.d.cts → toggle-CqTmiPDi.d.cts} +3 -9
  544. package/dist/{toggle-Bk5Lvs5n.d.mts → toggle-CqTmiPDi.d.mts} +3 -9
  545. package/dist/toggle-button-DNLtfjJC.mjs.map +1 -1
  546. package/dist/toggle-button-Dq78v8cH.cjs.map +1 -1
  547. package/dist/{toggle-group-7ZP2e-K1.d.mts → toggle-group--bJylFDV.d.cts} +4 -17
  548. package/dist/{toggle-group-B0pu4YV-.d.cts → toggle-group-l_Mi7NRg.d.mts} +4 -17
  549. package/dist/{tooltip-D4U-RhIu.d.cts → tooltip-BVYKhsC2.d.cts} +5 -18
  550. package/dist/{tooltip-D4U-RhIu.d.mts → tooltip-BVYKhsC2.d.mts} +5 -18
  551. package/dist/tooltip-BcfELg8e.cjs.map +1 -1
  552. package/dist/tooltip-TGmzPdoR.mjs.map +1 -1
  553. package/dist/top-products-bar-chart-5EJFSkeo.cjs.map +1 -1
  554. package/dist/top-products-bar-chart-CKYaOGWT.mjs.map +1 -1
  555. package/dist/{trash-BfWSqlL4.d.cts → trash-DBDuSVzW.d.cts} +3 -2
  556. package/dist/{trash-BfWSqlL4.d.mts → trash-DBDuSVzW.d.mts} +3 -2
  557. package/dist/typography/paragraph.d.cts +1 -1
  558. package/dist/typography/paragraph.d.mts +1 -1
  559. package/dist/typography/title.d.cts +1 -1
  560. package/dist/typography/title.d.mts +1 -1
  561. package/dist/ui/alert-dialog.d.cts +1 -1
  562. package/dist/ui/alert-dialog.d.mts +1 -1
  563. package/dist/ui/alert.d.cts +1 -1
  564. package/dist/ui/alert.d.mts +1 -1
  565. package/dist/ui/aspect-ratio.d.cts +1 -1
  566. package/dist/ui/aspect-ratio.d.mts +1 -1
  567. package/dist/ui/avatar.d.cts +1 -1
  568. package/dist/ui/avatar.d.mts +1 -1
  569. package/dist/ui/badge.cjs +1 -1
  570. package/dist/ui/badge.cjs.map +1 -1
  571. package/dist/ui/badge.d.cts +1 -1
  572. package/dist/ui/badge.d.mts +1 -1
  573. package/dist/ui/badge.mjs +1 -1
  574. package/dist/ui/badge.mjs.map +1 -1
  575. package/dist/ui/breadcrumb.cjs.map +1 -1
  576. package/dist/ui/breadcrumb.d.cts +1 -1
  577. package/dist/ui/breadcrumb.d.mts +1 -1
  578. package/dist/ui/breadcrumb.mjs.map +1 -1
  579. package/dist/ui/button-group.d.cts +1 -1
  580. package/dist/ui/button-group.d.mts +1 -1
  581. package/dist/ui/button.cjs.map +1 -1
  582. package/dist/ui/button.d.cts +1 -1
  583. package/dist/ui/button.d.mts +1 -1
  584. package/dist/ui/button.mjs.map +1 -1
  585. package/dist/ui/buttons/add-new.cjs.map +1 -1
  586. package/dist/ui/buttons/add-new.d.cts +1 -1
  587. package/dist/ui/buttons/add-new.d.mts +1 -1
  588. package/dist/ui/buttons/add-new.mjs.map +1 -1
  589. package/dist/ui/buttons/edit.cjs.map +1 -1
  590. package/dist/ui/buttons/edit.d.cts +1 -1
  591. package/dist/ui/buttons/edit.d.mts +1 -1
  592. package/dist/ui/buttons/edit.mjs.map +1 -1
  593. package/dist/ui/buttons/refresh.cjs.map +1 -1
  594. package/dist/ui/buttons/refresh.d.cts +1 -1
  595. package/dist/ui/buttons/refresh.d.mts +1 -1
  596. package/dist/ui/buttons/refresh.mjs.map +1 -1
  597. package/dist/ui/buttons/trash.cjs.map +1 -1
  598. package/dist/ui/buttons/trash.d.cts +1 -1
  599. package/dist/ui/buttons/trash.d.mts +1 -1
  600. package/dist/ui/buttons/trash.mjs.map +1 -1
  601. package/dist/ui/buttons/upload-image.cjs.map +1 -1
  602. package/dist/ui/buttons/upload-image.d.cts +1 -1
  603. package/dist/ui/buttons/upload-image.d.mts +1 -1
  604. package/dist/ui/buttons/upload-image.mjs.map +1 -1
  605. package/dist/ui/calendar.cjs.map +1 -1
  606. package/dist/ui/calendar.d.cts +1 -1
  607. package/dist/ui/calendar.d.mts +1 -1
  608. package/dist/ui/calendar.mjs.map +1 -1
  609. package/dist/ui/card.d.cts +1 -1
  610. package/dist/ui/card.d.mts +1 -1
  611. package/dist/ui/carousel.cjs.map +1 -1
  612. package/dist/ui/carousel.d.cts +1 -1
  613. package/dist/ui/carousel.d.mts +1 -1
  614. package/dist/ui/carousel.mjs.map +1 -1
  615. package/dist/ui/chart.cjs +1 -1
  616. package/dist/ui/chart.cjs.map +1 -1
  617. package/dist/ui/chart.d.cts +1 -1
  618. package/dist/ui/chart.d.mts +1 -1
  619. package/dist/ui/chart.mjs +1 -1
  620. package/dist/ui/chart.mjs.map +1 -1
  621. package/dist/ui/checkbox.cjs.map +1 -1
  622. package/dist/ui/checkbox.d.cts +1 -1
  623. package/dist/ui/checkbox.d.mts +1 -1
  624. package/dist/ui/checkbox.mjs.map +1 -1
  625. package/dist/ui/collapsible.d.cts +1 -1
  626. package/dist/ui/collapsible.d.mts +1 -1
  627. package/dist/ui/combobox.cjs +1 -0
  628. package/dist/ui/combobox.d.cts +2 -0
  629. package/dist/ui/combobox.d.mts +2 -0
  630. package/dist/ui/combobox.mjs +1 -0
  631. package/dist/ui/command.cjs +1 -1
  632. package/dist/ui/command.cjs.map +1 -1
  633. package/dist/ui/command.d.cts +1 -1
  634. package/dist/ui/command.d.mts +1 -1
  635. package/dist/ui/command.mjs +1 -1
  636. package/dist/ui/command.mjs.map +1 -1
  637. package/dist/ui/context-menu.cjs.map +1 -1
  638. package/dist/ui/context-menu.d.cts +1 -1
  639. package/dist/ui/context-menu.d.mts +1 -1
  640. package/dist/ui/context-menu.mjs.map +1 -1
  641. package/dist/ui/dialog.cjs.map +1 -1
  642. package/dist/ui/dialog.d.cts +1 -1
  643. package/dist/ui/dialog.d.mts +1 -1
  644. package/dist/ui/dialog.mjs.map +1 -1
  645. package/dist/ui/drawer.cjs.map +1 -1
  646. package/dist/ui/drawer.d.cts +1 -1
  647. package/dist/ui/drawer.d.mts +1 -1
  648. package/dist/ui/drawer.mjs.map +1 -1
  649. package/dist/ui/dropdown-menu.cjs.map +1 -1
  650. package/dist/ui/dropdown-menu.d.cts +1 -1
  651. package/dist/ui/dropdown-menu.d.mts +1 -1
  652. package/dist/ui/dropdown-menu.mjs.map +1 -1
  653. package/dist/ui/empty.d.cts +1 -1
  654. package/dist/ui/empty.d.mts +1 -1
  655. package/dist/ui/field.cjs.map +1 -1
  656. package/dist/ui/field.d.cts +12 -48
  657. package/dist/ui/field.d.mts +12 -48
  658. package/dist/ui/field.mjs.map +1 -1
  659. package/dist/ui/file-uploader.cjs.map +1 -1
  660. package/dist/ui/file-uploader.d.cts +1 -1
  661. package/dist/ui/file-uploader.d.mts +1 -1
  662. package/dist/ui/file-uploader.mjs.map +1 -1
  663. package/dist/ui/form.cjs.map +1 -1
  664. package/dist/ui/form.d.cts +1 -1
  665. package/dist/ui/form.d.mts +1 -1
  666. package/dist/ui/form.mjs.map +1 -1
  667. package/dist/ui/hover-card.cjs.map +1 -1
  668. package/dist/ui/hover-card.d.cts +1 -1
  669. package/dist/ui/hover-card.d.mts +1 -1
  670. package/dist/ui/hover-card.mjs.map +1 -1
  671. package/dist/ui/image.cjs +1 -1
  672. package/dist/ui/image.cjs.map +1 -1
  673. package/dist/ui/image.d.cts +1 -1
  674. package/dist/ui/image.d.mts +1 -1
  675. package/dist/ui/image.mjs +1 -1
  676. package/dist/ui/image.mjs.map +1 -1
  677. package/dist/ui/input-otp.cjs.map +1 -1
  678. package/dist/ui/input-otp.d.cts +1 -1
  679. package/dist/ui/input-otp.d.mts +1 -1
  680. package/dist/ui/input-otp.mjs.map +1 -1
  681. package/dist/ui/input.d.cts +1 -1
  682. package/dist/ui/input.d.mts +1 -1
  683. package/dist/ui/inputs/search-input.cjs.map +1 -1
  684. package/dist/ui/inputs/search-input.d.cts +1 -1
  685. package/dist/ui/inputs/search-input.d.mts +1 -1
  686. package/dist/ui/inputs/search-input.mjs.map +1 -1
  687. package/dist/ui/item.d.cts +1 -1
  688. package/dist/ui/item.d.mts +1 -1
  689. package/dist/ui/label.d.cts +1 -1
  690. package/dist/ui/label.d.mts +1 -1
  691. package/dist/ui/menubar.cjs.map +1 -1
  692. package/dist/ui/menubar.d.cts +1 -1
  693. package/dist/ui/menubar.d.mts +1 -1
  694. package/dist/ui/menubar.mjs.map +1 -1
  695. package/dist/ui/multi-select.cjs +1 -1
  696. package/dist/ui/multi-select.cjs.map +1 -1
  697. package/dist/ui/multi-select.d.cts +1 -1
  698. package/dist/ui/multi-select.d.mts +1 -1
  699. package/dist/ui/multi-select.mjs +1 -1
  700. package/dist/ui/multi-select.mjs.map +1 -1
  701. package/dist/ui/navigation-menu.cjs.map +1 -1
  702. package/dist/ui/navigation-menu.d.cts +1 -1
  703. package/dist/ui/navigation-menu.d.mts +1 -1
  704. package/dist/ui/navigation-menu.mjs.map +1 -1
  705. package/dist/ui/pagination.cjs.map +1 -1
  706. package/dist/ui/pagination.d.cts +1 -1
  707. package/dist/ui/pagination.d.mts +1 -1
  708. package/dist/ui/pagination.mjs.map +1 -1
  709. package/dist/ui/popover.cjs.map +1 -1
  710. package/dist/ui/popover.d.cts +1 -1
  711. package/dist/ui/popover.d.mts +1 -1
  712. package/dist/ui/popover.mjs.map +1 -1
  713. package/dist/ui/progress.cjs.map +1 -1
  714. package/dist/ui/progress.d.cts +1 -1
  715. package/dist/ui/progress.d.mts +1 -1
  716. package/dist/ui/progress.mjs.map +1 -1
  717. package/dist/ui/radio-group.cjs.map +1 -1
  718. package/dist/ui/radio-group.d.cts +1 -1
  719. package/dist/ui/radio-group.d.mts +1 -1
  720. package/dist/ui/radio-group.mjs.map +1 -1
  721. package/dist/ui/resizable.cjs.map +1 -1
  722. package/dist/ui/resizable.d.cts +1 -1
  723. package/dist/ui/resizable.d.mts +1 -1
  724. package/dist/ui/resizable.mjs.map +1 -1
  725. package/dist/ui/scroll-area.cjs.map +1 -1
  726. package/dist/ui/scroll-area.d.cts +1 -1
  727. package/dist/ui/scroll-area.d.mts +1 -1
  728. package/dist/ui/scroll-area.mjs.map +1 -1
  729. package/dist/ui/select.cjs.map +1 -1
  730. package/dist/ui/select.d.cts +1 -1
  731. package/dist/ui/select.d.mts +1 -1
  732. package/dist/ui/select.mjs.map +1 -1
  733. package/dist/ui/separator.d.cts +1 -1
  734. package/dist/ui/separator.d.mts +1 -1
  735. package/dist/ui/sheet.cjs.map +1 -1
  736. package/dist/ui/sheet.d.cts +1 -1
  737. package/dist/ui/sheet.d.mts +1 -1
  738. package/dist/ui/sheet.mjs.map +1 -1
  739. package/dist/ui/skeleton.d.cts +1 -1
  740. package/dist/ui/skeleton.d.mts +1 -1
  741. package/dist/ui/slider.cjs.map +1 -1
  742. package/dist/ui/slider.d.cts +1 -1
  743. package/dist/ui/slider.d.mts +1 -1
  744. package/dist/ui/slider.mjs.map +1 -1
  745. package/dist/ui/sonner.d.cts +1 -1
  746. package/dist/ui/sonner.d.mts +1 -1
  747. package/dist/ui/spinner.d.cts +1 -1
  748. package/dist/ui/spinner.d.mts +1 -1
  749. package/dist/ui/status.cjs.map +1 -1
  750. package/dist/ui/status.d.cts +2 -10
  751. package/dist/ui/status.d.mts +2 -10
  752. package/dist/ui/status.mjs.map +1 -1
  753. package/dist/ui/switch.cjs.map +1 -1
  754. package/dist/ui/switch.d.cts +1 -1
  755. package/dist/ui/switch.d.mts +1 -1
  756. package/dist/ui/switch.mjs.map +1 -1
  757. package/dist/ui/table.d.cts +1 -1
  758. package/dist/ui/table.d.mts +1 -1
  759. package/dist/ui/tabs.d.cts +1 -1
  760. package/dist/ui/tabs.d.mts +1 -1
  761. package/dist/ui/textarea.d.cts +1 -1
  762. package/dist/ui/textarea.d.mts +1 -1
  763. package/dist/ui/toggle-group.cjs.map +1 -1
  764. package/dist/ui/toggle-group.d.cts +1 -1
  765. package/dist/ui/toggle-group.d.mts +1 -1
  766. package/dist/ui/toggle-group.mjs.map +1 -1
  767. package/dist/ui/toggle.d.cts +1 -1
  768. package/dist/ui/toggle.d.mts +1 -1
  769. package/dist/ui/tooltip.cjs.map +1 -1
  770. package/dist/ui/tooltip.d.cts +1 -1
  771. package/dist/ui/tooltip.d.mts +1 -1
  772. package/dist/ui/tooltip.mjs.map +1 -1
  773. package/dist/{upload-image-D4VZU3IA.d.cts → upload-image-DM-tkZuR.d.cts} +3 -3
  774. package/dist/{upload-image-D4VZU3IA.d.mts → upload-image-DM-tkZuR.d.mts} +3 -3
  775. package/dist/user-BymzvsYp.mjs.map +1 -1
  776. package/dist/{user-CvesQf42.d.cts → user-D46H2MOh.d.cts} +6 -3
  777. package/dist/{user-CvesQf42.d.mts → user-D46H2MOh.d.mts} +6 -3
  778. package/dist/user-Dn53Fu5q.cjs.map +1 -1
  779. package/dist/volume-bar-chart-BRpC_8-X.mjs.map +1 -1
  780. package/dist/volume-bar-chart-CRxZPZIn.cjs.map +1 -1
  781. package/dist/waterfall-chart-CTB2f5eh.cjs.map +1 -1
  782. package/dist/waterfall-chart-DwetaJFJ.mjs.map +1 -1
  783. package/package.json +6 -2
  784. package/dist/cms-layout-CGGJqbr0.cjs +0 -2
  785. package/dist/cms-layout-CGGJqbr0.cjs.map +0 -1
  786. package/dist/cms-layout-ePySxIQN.mjs +0 -2
  787. package/dist/cms-layout-ePySxIQN.mjs.map +0 -1
  788. package/dist/dialogs/detail-dialog/index.cjs.map +0 -1
  789. package/dist/dialogs/detail-dialog/index.mjs.map +0 -1
  790. package/dist/image-Cln0r7Eb.d.cts +0 -27
  791. package/dist/image-Cln0r7Eb.d.mts +0 -27
  792. package/dist/index-C9eXmnvk.d.cts +0 -36
  793. package/dist/index-C9eXmnvk.d.mts +0 -36
  794. package/dist/number-input-CqkegUWs.mjs +0 -2
  795. package/dist/number-input-kTh9zzr7.cjs +0 -2
  796. package/dist/payment-layout-Cb-Q8KD2.cjs +0 -2
  797. package/dist/sidebar-core-Bh0dZXsm.mjs +0 -2
  798. package/dist/sidebar-core-Bh0dZXsm.mjs.map +0 -1
  799. package/dist/sidebar-core-DQE6ymo4.cjs +0 -2
  800. package/dist/sidebar-core-DQE6ymo4.cjs.map +0 -1
  801. package/dist/simple-card-6P377r4A.d.cts +0 -29
  802. package/dist/simple-card-6P377r4A.d.mts +0 -29
  803. package/dist/statistic-8zBJMdRa.d.cts +0 -45
  804. package/dist/statistic-8zBJMdRa.d.mts +0 -45
  805. package/dist/text-editor-BQtIXOpM.mjs +0 -2
  806. package/dist/text-editor-DJYQXXtP.cjs +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"radio-group-field-DsUi8uCy.mjs","names":[],"sources":["../packages/components/features/tanstack-form/components/fields/radio-group-field.tsx"],"sourcesContent":["'use client';\n\nimport { useStore } from '@tanstack/react-form';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { useTanStackFieldContext } from '../form-context';\nimport {\n Field,\n FieldContent,\n FieldContentMain,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldNote,\n FieldSeparator,\n FieldTitle,\n FieldTooltip,\n} from '../ui/field';\nimport { RadioGroup, RadioGroupItem } from '@/components/ui/radio-group';\n\nimport type { RadioGroupFieldProps as Props } from '../../types';\n\nexport const RadioGroupField: React.FC<Props> = ({ label, description, orientation, options, tooltip, helperText }) => {\n const field = useTanStackFieldContext<string | null>();\n const isSubmitting = useStore(field.form.store, ({ isSubmitting }) => isSubmitting);\n\n return (\n <FieldGroup className=\"px-4\">\n <Field orientation={orientation} className=\"flex-col gap-2\">\n <FieldContent>\n <FieldLabel>\n {label}\n {tooltip && <FieldTooltip tooltip={tooltip} />}\n </FieldLabel>\n <FieldDescription>{description}</FieldDescription>\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </FieldContent>\n\n <FieldContentMain>\n <RadioGroup value={field.state.value ?? ''} className=\"w-full\" onValueChange={field.handleChange}>\n {options.map(option => (\n <FieldLabel\n key={option.value}\n className={cn(\n 'h-fit',\n field.state.value === option.value && 'border-primary-weak! bg-primary-bg-subtle',\n isSubmitting && 'pointer-events-none bg-muted-muted opacity-60',\n field.state.value === option.value && isSubmitting && 'border-border-strong!'\n )}\n >\n <Field orientation=\"horizontal\" className=\"items-start gap-3 rounded p-2!\">\n <RadioGroupItem value={option.value} className=\"mt-0.5 shrink-0\" />\n <FieldContent className=\"gap-0.5!\">\n <FieldTitle>{option.label}</FieldTitle>\n <FieldDescription className=\"text-xs\">{option.description}</FieldDescription>\n </FieldContent>\n </Field>\n </FieldLabel>\n ))}\n </RadioGroup>\n </FieldContentMain>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n};\n"],"mappings":"6dAuBA,MAAa,GAAoC,CAAE,QAAO,cAAa,cAAa,UAAS,UAAS,gBAAiB,CACrH,IAAM,EAAQ,EAAuC,EAC/C,EAAe,EAAS,EAAM,KAAK,OAAQ,CAAE,kBAAmB,CAAY,EAElF,OACE,EAAC,EAAD,CAAY,UAAU,gBAAtB,CACE,EAAC,EAAD,CAAoB,cAAa,UAAU,0BAA3C,CACE,EAAC,EAAD,CAAA,SAAA,CACE,EAAC,EAAD,CAAA,SAAA,CACG,EACA,GAAW,EAAC,EAAD,CAAuB,SAAU,CAAA,CACnC,CAAA,CAAA,EACZ,EAAC,EAAD,CAAA,SAAmB,CAA8B,CAAA,EACjD,EAAC,EAAD,CAAW,OAAQ,CAAC,CAAC,WAAa,CAAsB,CAAA,CAC5C,CAAA,CAAA,EAEd,EAAC,EAAD,CAAA,SACE,EAAC,EAAD,CAAY,MAAO,EAAM,MAAM,OAAS,GAAI,UAAU,SAAS,cAAe,EAAM,sBACjF,EAAQ,IAAI,GACX,EAAC,EAAD,CAEE,UAAW,EACT,QACA,EAAM,MAAM,QAAU,EAAO,OAAS,4CACtC,GAAgB,gDAChB,EAAM,MAAM,QAAU,EAAO,OAAS,GAAgB,uBACxD,WAEA,EAAC,EAAD,CAAO,YAAY,aAAa,UAAU,0CAA1C,CACE,EAAC,EAAD,CAAgB,MAAO,EAAO,MAAO,UAAU,iBAAmB,CAAA,EAClE,EAAC,EAAD,CAAc,UAAU,oBAAxB,CACE,EAAC,EAAD,CAAA,SAAa,EAAO,KAAkB,CAAA,EACtC,EAAC,EAAD,CAAkB,UAAU,mBAAW,EAAO,WAA8B,CAAA,CAChE,GACT,GACG,EAfL,EAAO,KAeF,CACb,CACS,CAAA,CACI,CAAA,CACb,IACP,EAAC,EAAD,CAAiB,CAAA,CACP,GAEhB"}
1
+ {"version":3,"file":"radio-group-field-DOJ4jVSr.mjs","names":[],"sources":["../packages/components/features/tanstack-form/components/fields/radio-group-field.tsx"],"sourcesContent":["'use client';\n\nimport { useStore } from '@tanstack/react-form';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { useTanStackFieldContext } from '../form-context';\nimport {\n Field,\n FieldContent,\n FieldContentMain,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldNote,\n FieldSeparator,\n FieldTitle,\n FieldTooltip,\n} from '../ui/field';\nimport { RadioGroup, RadioGroupItem } from '@/components/ui/radio-group';\n\nimport type { RadioGroupFieldProps as Props } from '../../types';\n\nexport const RadioGroupField: React.FC<Props> = ({ label, description, orientation, options, tooltip, helperText }) => {\n const field = useTanStackFieldContext<string | null>();\n const isSubmitting = useStore(field.form.store, ({ isSubmitting }) => isSubmitting);\n\n return (\n <FieldGroup className=\"px-4\">\n <Field orientation={orientation} className=\"flex-col gap-2\">\n <FieldContent>\n <FieldLabel>\n {label}\n {tooltip && <FieldTooltip tooltip={tooltip} />}\n </FieldLabel>\n <FieldDescription>{description}</FieldDescription>\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </FieldContent>\n\n <FieldContentMain>\n <RadioGroup value={field.state.value ?? ''} className=\"w-full\" onValueChange={field.handleChange}>\n {options.map(option => (\n <FieldLabel\n key={option.value}\n className={cn(\n 'h-fit',\n field.state.value === option.value && 'border-primary-weak! bg-primary-bg-subtle',\n isSubmitting && 'pointer-events-none bg-muted-muted opacity-60',\n field.state.value === option.value && isSubmitting && 'border-border-strong!'\n )}\n >\n <Field orientation=\"horizontal\" className=\"items-start gap-3 rounded p-2!\">\n <RadioGroupItem value={option.value} className=\"mt-0.5 shrink-0\" />\n <FieldContent className=\"gap-0.5!\">\n <FieldTitle>{option.label}</FieldTitle>\n <FieldDescription className=\"text-xs\">{option.description}</FieldDescription>\n </FieldContent>\n </Field>\n </FieldLabel>\n ))}\n </RadioGroup>\n </FieldContentMain>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n};\n"],"mappings":"6dAuBA,MAAa,GAAoC,CAAE,QAAO,cAAa,cAAa,UAAS,UAAS,gBAAiB,CACrH,IAAM,EAAQ,EAAuC,EAC/C,EAAe,EAAS,EAAM,KAAK,OAAQ,CAAE,kBAAmB,CAAY,EAElF,OACE,EAAC,EAAD,CAAY,UAAU,OAAtB,SAAA,CACE,EAAC,EAAD,CAAoB,cAAa,UAAU,iBAA3C,SAAA,CACE,EAAC,EAAD,CAAA,SAAA,CACE,EAAC,EAAD,CAAA,SAAA,CACG,EACA,GAAW,EAAC,EAAD,CAAuB,SAAU,CAAA,CACnC,CAAA,CAAA,EACZ,EAAC,EAAD,CAAA,SAAmB,CAA8B,CAAA,EACjD,EAAC,EAAD,CAAW,OAAQ,CAAC,CAAC,EAAa,SAAA,CAAsB,CAAA,CAC5C,CAAA,CAAA,EAEd,EAAC,EAAD,CAAA,SACE,EAAC,EAAD,CAAY,MAAO,EAAM,MAAM,OAAS,GAAI,UAAU,SAAS,cAAe,EAAM,aACjF,SAAA,EAAQ,IAAI,GACX,EAAC,EAAD,CAEE,UAAW,EACT,QACA,EAAM,MAAM,QAAU,EAAO,OAAS,4CACtC,GAAgB,gDAChB,EAAM,MAAM,QAAU,EAAO,OAAS,GAAgB,uBACxD,EAEA,SAAA,EAAC,EAAD,CAAO,YAAY,aAAa,UAAU,iCAA1C,SAAA,CACE,EAAC,EAAD,CAAgB,MAAO,EAAO,MAAO,UAAU,iBAAmB,CAAA,EAClE,EAAC,EAAD,CAAc,UAAU,WAAxB,SAAA,CACE,EAAC,EAAD,CAAA,SAAa,EAAO,KAAkB,CAAA,EACtC,EAAC,EAAD,CAAkB,UAAU,UAAW,SAAA,EAAO,WAA8B,CAAA,CAChE,CACT,CAAA,CAAA,GACG,EAfL,EAAO,KAeF,CACb,CACS,CAAA,CACI,CAAA,CACb,CACP,CAAA,EAAA,EAAC,EAAD,CAAiB,CAAA,CACP,GAEhB"}
@@ -1,2 +1,2 @@
1
- const e=require("./tanstack-form-Bae0TOEr.cjs"),t=require("./ui/radio-group.cjs"),n=require("./field-BSLi-P0Q.cjs");let r=require("@customafk/react-toolkit/utils"),i=require("react/jsx-runtime"),a=require("@tanstack/react-form");const o=({label:o,description:s,orientation:c,options:l,tooltip:u,helperText:d})=>{let f=e.G(),p=(0,a.useStore)(f.form.store,({isSubmitting:e})=>e);return(0,i.jsxs)(n.FieldGroup,{className:`px-4`,children:[(0,i.jsxs)(n.Field,{orientation:c,className:`flex-col gap-2`,children:[(0,i.jsxs)(n.FieldContent,{children:[(0,i.jsxs)(n.FieldLabel,{children:[o,u&&(0,i.jsx)(n.FieldTooltip,{tooltip:u})]}),(0,i.jsx)(n.FieldDescription,{children:s}),(0,i.jsx)(n.FieldNote,{isShow:!!d,children:d})]}),(0,i.jsx)(n.FieldContentMain,{children:(0,i.jsx)(t.RadioGroup,{value:f.state.value??``,className:`w-full`,onValueChange:f.handleChange,children:l.map(e=>(0,i.jsx)(n.FieldLabel,{className:(0,r.cn)(`h-fit`,f.state.value===e.value&&`border-primary-weak! bg-primary-bg-subtle`,p&&`pointer-events-none bg-muted-muted opacity-60`,f.state.value===e.value&&p&&`border-border-strong!`),children:(0,i.jsxs)(n.Field,{orientation:`horizontal`,className:`items-start gap-3 rounded p-2!`,children:[(0,i.jsx)(t.RadioGroupItem,{value:e.value,className:`mt-0.5 shrink-0`}),(0,i.jsxs)(n.FieldContent,{className:`gap-0.5!`,children:[(0,i.jsx)(n.FieldTitle,{children:e.label}),(0,i.jsx)(n.FieldDescription,{className:`text-xs`,children:e.description})]})]})},e.value))})})]}),(0,i.jsx)(n.FieldSeparator,{})]})};exports.RadioGroupField=o;
2
- //# sourceMappingURL=radio-group-field-Bm2nkk1W.cjs.map
1
+ const e=require("./tanstack-form-BxqS40rB.cjs"),t=require("./ui/radio-group.cjs"),n=require("./field-BSLi-P0Q.cjs");let r=require("@customafk/react-toolkit/utils"),i=require("react/jsx-runtime"),a=require("@tanstack/react-form");const o=({label:o,description:s,orientation:c,options:l,tooltip:u,helperText:d})=>{let f=e.G(),p=(0,a.useStore)(f.form.store,({isSubmitting:e})=>e);return(0,i.jsxs)(n.FieldGroup,{className:`px-4`,children:[(0,i.jsxs)(n.Field,{orientation:c,className:`flex-col gap-2`,children:[(0,i.jsxs)(n.FieldContent,{children:[(0,i.jsxs)(n.FieldLabel,{children:[o,u&&(0,i.jsx)(n.FieldTooltip,{tooltip:u})]}),(0,i.jsx)(n.FieldDescription,{children:s}),(0,i.jsx)(n.FieldNote,{isShow:!!d,children:d})]}),(0,i.jsx)(n.FieldContentMain,{children:(0,i.jsx)(t.RadioGroup,{value:f.state.value??``,className:`w-full`,onValueChange:f.handleChange,children:l.map(e=>(0,i.jsx)(n.FieldLabel,{className:(0,r.cn)(`h-fit`,f.state.value===e.value&&`border-primary-weak! bg-primary-bg-subtle`,p&&`pointer-events-none bg-muted-muted opacity-60`,f.state.value===e.value&&p&&`border-border-strong!`),children:(0,i.jsxs)(n.Field,{orientation:`horizontal`,className:`items-start gap-3 rounded p-2!`,children:[(0,i.jsx)(t.RadioGroupItem,{value:e.value,className:`mt-0.5 shrink-0`}),(0,i.jsxs)(n.FieldContent,{className:`gap-0.5!`,children:[(0,i.jsx)(n.FieldTitle,{children:e.label}),(0,i.jsx)(n.FieldDescription,{className:`text-xs`,children:e.description})]})]})},e.value))})})]}),(0,i.jsx)(n.FieldSeparator,{})]})};exports.RadioGroupField=o;
2
+ //# sourceMappingURL=radio-group-field-kTgtvp1p.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"radio-group-field-Bm2nkk1W.cjs","names":["useTanStackFieldContext","FieldGroup","Field","FieldContent","FieldLabel","FieldTooltip","FieldDescription","FieldNote","FieldContentMain","RadioGroup","RadioGroupItem","FieldTitle","FieldSeparator"],"sources":["../packages/components/features/tanstack-form/components/fields/radio-group-field.tsx"],"sourcesContent":["'use client';\n\nimport { useStore } from '@tanstack/react-form';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { useTanStackFieldContext } from '../form-context';\nimport {\n Field,\n FieldContent,\n FieldContentMain,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldNote,\n FieldSeparator,\n FieldTitle,\n FieldTooltip,\n} from '../ui/field';\nimport { RadioGroup, RadioGroupItem } from '@/components/ui/radio-group';\n\nimport type { RadioGroupFieldProps as Props } from '../../types';\n\nexport const RadioGroupField: React.FC<Props> = ({ label, description, orientation, options, tooltip, helperText }) => {\n const field = useTanStackFieldContext<string | null>();\n const isSubmitting = useStore(field.form.store, ({ isSubmitting }) => isSubmitting);\n\n return (\n <FieldGroup className=\"px-4\">\n <Field orientation={orientation} className=\"flex-col gap-2\">\n <FieldContent>\n <FieldLabel>\n {label}\n {tooltip && <FieldTooltip tooltip={tooltip} />}\n </FieldLabel>\n <FieldDescription>{description}</FieldDescription>\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </FieldContent>\n\n <FieldContentMain>\n <RadioGroup value={field.state.value ?? ''} className=\"w-full\" onValueChange={field.handleChange}>\n {options.map(option => (\n <FieldLabel\n key={option.value}\n className={cn(\n 'h-fit',\n field.state.value === option.value && 'border-primary-weak! bg-primary-bg-subtle',\n isSubmitting && 'pointer-events-none bg-muted-muted opacity-60',\n field.state.value === option.value && isSubmitting && 'border-border-strong!'\n )}\n >\n <Field orientation=\"horizontal\" className=\"items-start gap-3 rounded p-2!\">\n <RadioGroupItem value={option.value} className=\"mt-0.5 shrink-0\" />\n <FieldContent className=\"gap-0.5!\">\n <FieldTitle>{option.label}</FieldTitle>\n <FieldDescription className=\"text-xs\">{option.description}</FieldDescription>\n </FieldContent>\n </Field>\n </FieldLabel>\n ))}\n </RadioGroup>\n </FieldContentMain>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n};\n"],"mappings":"qOAuBA,MAAa,GAAoC,CAAE,QAAO,cAAa,cAAa,UAAS,UAAS,gBAAiB,CACrH,IAAM,EAAQA,EAAAA,EAAuC,EAC/C,GAAA,EAAA,EAAA,SAAA,CAAwB,EAAM,KAAK,OAAQ,CAAE,kBAAmB,CAAY,EAElF,OACE,EAAA,EAAA,KAAA,CAACC,EAAAA,WAAD,CAAY,UAAU,gBAAtB,EACE,EAAA,EAAA,KAAA,CAACC,EAAAA,MAAD,CAAoB,cAAa,UAAU,0BAA3C,EACE,EAAA,EAAA,KAAA,CAACC,EAAAA,aAAD,CAAA,SAAA,EACE,EAAA,EAAA,KAAA,CAACC,EAAAA,WAAD,CAAA,SAAA,CACG,EACA,IAAW,EAAA,EAAA,IAAA,CAACC,EAAAA,aAAD,CAAuB,SAAU,CAAA,CACnC,CAAA,CAAA,GACZ,EAAA,EAAA,IAAA,CAACC,EAAAA,iBAAD,CAAA,SAAmB,CAA8B,CAAA,GACjD,EAAA,EAAA,IAAA,CAACC,EAAAA,UAAD,CAAW,OAAQ,CAAC,CAAC,WAAa,CAAsB,CAAA,CAC5C,CAAA,CAAA,GAEd,EAAA,EAAA,IAAA,CAACC,EAAAA,iBAAD,CAAA,UACE,EAAA,EAAA,IAAA,CAACC,EAAAA,WAAD,CAAY,MAAO,EAAM,MAAM,OAAS,GAAI,UAAU,SAAS,cAAe,EAAM,sBACjF,EAAQ,IAAI,IACX,EAAA,EAAA,IAAA,CAACL,EAAAA,WAAD,CAEE,WAAA,EAAA,EAAA,GAAA,CACE,QACA,EAAM,MAAM,QAAU,EAAO,OAAS,4CACtC,GAAgB,gDAChB,EAAM,MAAM,QAAU,EAAO,OAAS,GAAgB,uBACxD,YAEA,EAAA,EAAA,KAAA,CAACF,EAAAA,MAAD,CAAO,YAAY,aAAa,UAAU,0CAA1C,EACE,EAAA,EAAA,IAAA,CAACQ,EAAAA,eAAD,CAAgB,MAAO,EAAO,MAAO,UAAU,iBAAmB,CAAA,GAClE,EAAA,EAAA,KAAA,CAACP,EAAAA,aAAD,CAAc,UAAU,oBAAxB,EACE,EAAA,EAAA,IAAA,CAACQ,EAAAA,WAAD,CAAA,SAAa,EAAO,KAAkB,CAAA,GACtC,EAAA,EAAA,IAAA,CAACL,EAAAA,iBAAD,CAAkB,UAAU,mBAAW,EAAO,WAA8B,CAAA,CAChE,GACT,GACG,EAfL,EAAO,KAeF,CACb,CACS,CAAA,CACI,CAAA,CACb,KACP,EAAA,EAAA,IAAA,CAACM,EAAAA,eAAD,CAAiB,CAAA,CACP,GAEhB"}
1
+ {"version":3,"file":"radio-group-field-kTgtvp1p.cjs","names":["useTanStackFieldContext","FieldGroup","Field","FieldContent","FieldLabel","FieldTooltip","FieldDescription","FieldNote","FieldContentMain","RadioGroup","RadioGroupItem","FieldTitle","FieldSeparator"],"sources":["../packages/components/features/tanstack-form/components/fields/radio-group-field.tsx"],"sourcesContent":["'use client';\n\nimport { useStore } from '@tanstack/react-form';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { useTanStackFieldContext } from '../form-context';\nimport {\n Field,\n FieldContent,\n FieldContentMain,\n FieldDescription,\n FieldGroup,\n FieldLabel,\n FieldNote,\n FieldSeparator,\n FieldTitle,\n FieldTooltip,\n} from '../ui/field';\nimport { RadioGroup, RadioGroupItem } from '@/components/ui/radio-group';\n\nimport type { RadioGroupFieldProps as Props } from '../../types';\n\nexport const RadioGroupField: React.FC<Props> = ({ label, description, orientation, options, tooltip, helperText }) => {\n const field = useTanStackFieldContext<string | null>();\n const isSubmitting = useStore(field.form.store, ({ isSubmitting }) => isSubmitting);\n\n return (\n <FieldGroup className=\"px-4\">\n <Field orientation={orientation} className=\"flex-col gap-2\">\n <FieldContent>\n <FieldLabel>\n {label}\n {tooltip && <FieldTooltip tooltip={tooltip} />}\n </FieldLabel>\n <FieldDescription>{description}</FieldDescription>\n <FieldNote isShow={!!helperText}>{helperText}</FieldNote>\n </FieldContent>\n\n <FieldContentMain>\n <RadioGroup value={field.state.value ?? ''} className=\"w-full\" onValueChange={field.handleChange}>\n {options.map(option => (\n <FieldLabel\n key={option.value}\n className={cn(\n 'h-fit',\n field.state.value === option.value && 'border-primary-weak! bg-primary-bg-subtle',\n isSubmitting && 'pointer-events-none bg-muted-muted opacity-60',\n field.state.value === option.value && isSubmitting && 'border-border-strong!'\n )}\n >\n <Field orientation=\"horizontal\" className=\"items-start gap-3 rounded p-2!\">\n <RadioGroupItem value={option.value} className=\"mt-0.5 shrink-0\" />\n <FieldContent className=\"gap-0.5!\">\n <FieldTitle>{option.label}</FieldTitle>\n <FieldDescription className=\"text-xs\">{option.description}</FieldDescription>\n </FieldContent>\n </Field>\n </FieldLabel>\n ))}\n </RadioGroup>\n </FieldContentMain>\n </Field>\n <FieldSeparator />\n </FieldGroup>\n );\n};\n"],"mappings":"qOAuBA,MAAa,GAAoC,CAAE,QAAO,cAAa,cAAa,UAAS,UAAS,gBAAiB,CACrH,IAAM,EAAQA,EAAAA,EAAuC,EAC/C,GAAA,EAAA,EAAA,SAAA,CAAwB,EAAM,KAAK,OAAQ,CAAE,kBAAmB,CAAY,EAElF,OACE,EAAA,EAAA,KAAA,CAACC,EAAAA,WAAD,CAAY,UAAU,OAAtB,SAAA,EACE,EAAA,EAAA,KAAA,CAACC,EAAAA,MAAD,CAAoB,cAAa,UAAU,iBAA3C,SAAA,EACE,EAAA,EAAA,KAAA,CAACC,EAAAA,aAAD,CAAA,SAAA,EACE,EAAA,EAAA,KAAA,CAACC,EAAAA,WAAD,CAAA,SAAA,CACG,EACA,IAAW,EAAA,EAAA,IAAA,CAACC,EAAAA,aAAD,CAAuB,SAAU,CAAA,CACnC,CAAA,CAAA,GACZ,EAAA,EAAA,IAAA,CAACC,EAAAA,iBAAD,CAAA,SAAmB,CAA8B,CAAA,GACjD,EAAA,EAAA,IAAA,CAACC,EAAAA,UAAD,CAAW,OAAQ,CAAC,CAAC,EAAa,SAAA,CAAsB,CAAA,CAC5C,CAAA,CAAA,GAEd,EAAA,EAAA,IAAA,CAACC,EAAAA,iBAAD,CAAA,UACE,EAAA,EAAA,IAAA,CAACC,EAAAA,WAAD,CAAY,MAAO,EAAM,MAAM,OAAS,GAAI,UAAU,SAAS,cAAe,EAAM,aACjF,SAAA,EAAQ,IAAI,IACX,EAAA,EAAA,IAAA,CAACL,EAAAA,WAAD,CAEE,WAAA,EAAA,EAAA,GAAA,CACE,QACA,EAAM,MAAM,QAAU,EAAO,OAAS,4CACtC,GAAgB,gDAChB,EAAM,MAAM,QAAU,EAAO,OAAS,GAAgB,uBACxD,EAEA,UAAA,EAAA,EAAA,KAAA,CAACF,EAAAA,MAAD,CAAO,YAAY,aAAa,UAAU,iCAA1C,SAAA,EACE,EAAA,EAAA,IAAA,CAACQ,EAAAA,eAAD,CAAgB,MAAO,EAAO,MAAO,UAAU,iBAAmB,CAAA,GAClE,EAAA,EAAA,KAAA,CAACP,EAAAA,aAAD,CAAc,UAAU,WAAxB,SAAA,EACE,EAAA,EAAA,IAAA,CAACQ,EAAAA,WAAD,CAAA,SAAa,EAAO,KAAkB,CAAA,GACtC,EAAA,EAAA,IAAA,CAACL,EAAAA,iBAAD,CAAkB,UAAU,UAAW,SAAA,EAAO,WAA8B,CAAA,CAChE,CACT,CAAA,CAAA,GACG,EAfL,EAAO,KAeF,CACb,CACS,CAAA,CACI,CAAA,CACb,CACP,CAAA,GAAA,EAAA,EAAA,IAAA,CAACM,EAAAA,eAAD,CAAiB,CAAA,CACP,GAEhB"}
@@ -1,6 +1,7 @@
1
1
  //#region packages/components/ui/buttons/refresh.d.ts
2
2
  type Props = {
3
- /** Callback invoked when the button is clicked. Defaults to a no-op. */onClick?: () => void;
3
+ /** Callback invoked when the button is clicked. Defaults to a no-op. */
4
+ onClick?: () => void;
4
5
  };
5
6
  /**
6
7
  * A toolbar button that triggers a refresh/reset action, displaying a rotating arrows icon alongside a "Reset" label that is hidden on small screens.
@@ -13,4 +14,4 @@ type Props = {
13
14
  declare const RefreshBtn: React.FC<React.PropsWithChildren<Props>>;
14
15
  //#endregion
15
16
  export { RefreshBtn as t };
16
- //# sourceMappingURL=refresh-BiyrZAXL.d.cts.map
17
+ //# sourceMappingURL=refresh-CWvkHT0L.d.cts.map
@@ -1,6 +1,7 @@
1
1
  //#region packages/components/ui/buttons/refresh.d.ts
2
2
  type Props = {
3
- /** Callback invoked when the button is clicked. Defaults to a no-op. */onClick?: () => void;
3
+ /** Callback invoked when the button is clicked. Defaults to a no-op. */
4
+ onClick?: () => void;
4
5
  };
5
6
  /**
6
7
  * A toolbar button that triggers a refresh/reset action, displaying a rotating arrows icon alongside a "Reset" label that is hidden on small screens.
@@ -13,4 +14,4 @@ type Props = {
13
14
  declare const RefreshBtn: React.FC<React.PropsWithChildren<Props>>;
14
15
  //#endregion
15
16
  export { RefreshBtn as t };
16
- //# sourceMappingURL=refresh-BiyrZAXL.d.mts.map
17
+ //# sourceMappingURL=refresh-CWvkHT0L.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"remove-button-B3qFw-M5.cjs","names":["Tooltip","TooltipTrigger","Button","Trash2Icon","TooltipContent"],"sources":["../packages/components/features/tables/components/atoms/remove-button.tsx"],"sourcesContent":["'use client';\nimport { useCallback } from 'react';\n\nimport { Trash2Icon } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\n\n/**\n * A ghost danger icon button with a trash icon that triggers an async removal\n * handler; displays a descriptive tooltip on hover to confirm the action intent.\n *\n * @example\n * import { UITableRemoveButton } from '@customafk/lunas-ui/features/tables';\n *\n * <UITableRemoveButton\n * title=\"Remove member from project\"\n * onClick={async () => await deleteRow(rowId)}\n * />\n */\nexport const UITableRemoveButton: React.FC<{\n /** Tooltip label describing what will be removed; defaults to a generic message. */\n title?: string;\n /** Async-compatible callback invoked when the button is clicked. */\n onClick?: () => void | Promise<void>;\n}> = ({ title, onClick }) => {\n const handleClick = useCallback<React.MouseEventHandler<HTMLButtonElement>>(\n async e => {\n e.preventDefault();\n e.stopPropagation();\n await onClick?.();\n },\n [onClick]\n );\n return (\n <Tooltip>\n <TooltipTrigger>\n <Button type=\"button\" variant=\"ghost\" color=\"danger\" size=\"icon\" onClick={handleClick}>\n <Trash2Icon />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>{title || 'Remove item from list table'}</p>\n </TooltipContent>\n </Tooltip>\n );\n};\n"],"mappings":"iJAoBA,MAAa,GAKP,CAAE,QAAO,cAUX,EAAA,EAAA,KAAA,CAACA,EAAAA,QAAD,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAACC,EAAAA,eAAD,CAAA,UACE,EAAA,EAAA,IAAA,CAACC,EAAAA,OAAD,CAAQ,KAAK,SAAS,QAAQ,QAAQ,MAAM,SAAS,KAAK,OAAO,SAAA,EAAA,EAAA,YAAA,CAVrE,KAAM,IAAK,CACT,EAAE,eAAe,EACjB,EAAE,gBAAgB,EAClB,MAAM,IAAU,CAClB,EACA,CAAC,CAAO,CAKgF,YAClF,EAAA,EAAA,IAAA,CAACC,EAAAA,WAAD,CAAa,CAAA,CACP,CAAA,CACM,CAAA,GAChB,EAAA,EAAA,IAAA,CAACC,EAAAA,eAAD,CAAA,UACE,EAAA,EAAA,IAAA,CAAC,IAAD,CAAA,SAAI,GAAS,6BAAiC,CAAA,CAChC,CAAA,CACT,CAAA,CAAA"}
1
+ {"version":3,"file":"remove-button-B3qFw-M5.cjs","names":["Tooltip","TooltipTrigger","Button","Trash2Icon","TooltipContent"],"sources":["../packages/components/features/tables/components/atoms/remove-button.tsx"],"sourcesContent":["'use client';\nimport { useCallback } from 'react';\n\nimport { Trash2Icon } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\n\n/**\n * A ghost danger icon button with a trash icon that triggers an async removal\n * handler; displays a descriptive tooltip on hover to confirm the action intent.\n *\n * @example\n * import { UITableRemoveButton } from '@customafk/lunas-ui/features/tables';\n *\n * <UITableRemoveButton\n * title=\"Remove member from project\"\n * onClick={async () => await deleteRow(rowId)}\n * />\n */\nexport const UITableRemoveButton: React.FC<{\n /** Tooltip label describing what will be removed; defaults to a generic message. */\n title?: string;\n /** Async-compatible callback invoked when the button is clicked. */\n onClick?: () => void | Promise<void>;\n}> = ({ title, onClick }) => {\n const handleClick = useCallback<React.MouseEventHandler<HTMLButtonElement>>(\n async e => {\n e.preventDefault();\n e.stopPropagation();\n await onClick?.();\n },\n [onClick]\n );\n return (\n <Tooltip>\n <TooltipTrigger>\n <Button type=\"button\" variant=\"ghost\" color=\"danger\" size=\"icon\" onClick={handleClick}>\n <Trash2Icon />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>{title || 'Remove item from list table'}</p>\n </TooltipContent>\n </Tooltip>\n );\n};\n"],"mappings":"iJAoBA,MAAa,GAKP,CAAE,QAAO,cAUX,EAAA,EAAA,KAAA,CAACA,EAAAA,QAAD,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAACC,EAAAA,eAAD,CAAA,UACE,EAAA,EAAA,IAAA,CAACC,EAAAA,OAAD,CAAQ,KAAK,SAAS,QAAQ,QAAQ,MAAM,SAAS,KAAK,OAAO,SAAA,EAAA,EAAA,YAAA,CAVrE,KAAM,IAAK,CACT,EAAE,eAAe,EACjB,EAAE,gBAAgB,EAClB,MAAM,IAAU,CAClB,EACA,CAAC,CAAO,CAKgF,EAClF,UAAA,EAAA,EAAA,IAAA,CAACC,EAAAA,WAAD,CAAa,CAAA,CACP,CAAA,CACM,CAAA,GAChB,EAAA,EAAA,IAAA,CAACC,EAAAA,eAAD,CAAA,UACE,EAAA,EAAA,IAAA,CAAC,IAAD,CAAA,SAAI,GAAS,6BAAiC,CAAA,CAChC,CAAA,CACT,CAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"remove-button-Db5oSj4h.mjs","names":[],"sources":["../packages/components/features/tables/components/atoms/remove-button.tsx"],"sourcesContent":["'use client';\nimport { useCallback } from 'react';\n\nimport { Trash2Icon } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\n\n/**\n * A ghost danger icon button with a trash icon that triggers an async removal\n * handler; displays a descriptive tooltip on hover to confirm the action intent.\n *\n * @example\n * import { UITableRemoveButton } from '@customafk/lunas-ui/features/tables';\n *\n * <UITableRemoveButton\n * title=\"Remove member from project\"\n * onClick={async () => await deleteRow(rowId)}\n * />\n */\nexport const UITableRemoveButton: React.FC<{\n /** Tooltip label describing what will be removed; defaults to a generic message. */\n title?: string;\n /** Async-compatible callback invoked when the button is clicked. */\n onClick?: () => void | Promise<void>;\n}> = ({ title, onClick }) => {\n const handleClick = useCallback<React.MouseEventHandler<HTMLButtonElement>>(\n async e => {\n e.preventDefault();\n e.stopPropagation();\n await onClick?.();\n },\n [onClick]\n );\n return (\n <Tooltip>\n <TooltipTrigger>\n <Button type=\"button\" variant=\"ghost\" color=\"danger\" size=\"icon\" onClick={handleClick}>\n <Trash2Icon />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>{title || 'Remove item from list table'}</p>\n </TooltipContent>\n </Tooltip>\n );\n};\n"],"mappings":"4PAoBA,MAAa,GAKP,CAAE,QAAO,aAUX,EAAC,EAAD,CAAA,SAAA,CACE,EAAC,EAAD,CAAA,SACE,EAAC,EAAD,CAAQ,KAAK,SAAS,QAAQ,QAAQ,MAAM,SAAS,KAAK,OAAO,QAXnD,EAClB,KAAM,IAAK,CACT,EAAE,eAAe,EACjB,EAAE,gBAAgB,EAClB,MAAM,IAAU,CAClB,EACA,CAAC,CAAO,CAKgF,WAClF,EAAC,EAAD,CAAa,CAAA,CACP,CAAA,CACM,CAAA,EAChB,EAAC,EAAD,CAAA,SACE,EAAC,IAAD,CAAA,SAAI,GAAS,6BAAiC,CAAA,CAChC,CAAA,CACT,CAAA,CAAA"}
1
+ {"version":3,"file":"remove-button-Db5oSj4h.mjs","names":[],"sources":["../packages/components/features/tables/components/atoms/remove-button.tsx"],"sourcesContent":["'use client';\nimport { useCallback } from 'react';\n\nimport { Trash2Icon } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\n\n/**\n * A ghost danger icon button with a trash icon that triggers an async removal\n * handler; displays a descriptive tooltip on hover to confirm the action intent.\n *\n * @example\n * import { UITableRemoveButton } from '@customafk/lunas-ui/features/tables';\n *\n * <UITableRemoveButton\n * title=\"Remove member from project\"\n * onClick={async () => await deleteRow(rowId)}\n * />\n */\nexport const UITableRemoveButton: React.FC<{\n /** Tooltip label describing what will be removed; defaults to a generic message. */\n title?: string;\n /** Async-compatible callback invoked when the button is clicked. */\n onClick?: () => void | Promise<void>;\n}> = ({ title, onClick }) => {\n const handleClick = useCallback<React.MouseEventHandler<HTMLButtonElement>>(\n async e => {\n e.preventDefault();\n e.stopPropagation();\n await onClick?.();\n },\n [onClick]\n );\n return (\n <Tooltip>\n <TooltipTrigger>\n <Button type=\"button\" variant=\"ghost\" color=\"danger\" size=\"icon\" onClick={handleClick}>\n <Trash2Icon />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>{title || 'Remove item from list table'}</p>\n </TooltipContent>\n </Tooltip>\n );\n};\n"],"mappings":"4PAoBA,MAAa,GAKP,CAAE,QAAO,aAUX,EAAC,EAAD,CAAA,SAAA,CACE,EAAC,EAAD,CAAA,SACE,EAAC,EAAD,CAAQ,KAAK,SAAS,QAAQ,QAAQ,MAAM,SAAS,KAAK,OAAO,QAXnD,EAClB,KAAM,IAAK,CACT,EAAE,eAAe,EACjB,EAAE,gBAAgB,EAClB,MAAM,IAAU,CAClB,EACA,CAAC,CAAO,CAKgF,EAClF,SAAA,EAAC,EAAD,CAAa,CAAA,CACP,CAAA,CACM,CAAA,EAChB,EAAC,EAAD,CAAA,SACE,EAAC,IAAD,CAAA,SAAI,GAAS,6BAAiC,CAAA,CAChC,CAAA,CACT,CAAA,CAAA"}
@@ -1,5 +1,4 @@
1
1
  import * as ResizablePrimitive from "react-resizable-panels";
2
-
3
2
  //#region node_modules/react-resizable-panels/dist/declarations/src/types.d.ts
4
3
  type Direction = "horizontal" | "vertical";
5
4
  //#endregion
@@ -36,7 +35,7 @@ declare const ResizablePanelGroup: import("react").NamedExoticComponent<Omit<imp
36
35
  children?: import("react").ReactNode | undefined;
37
36
  } & import("react").RefAttributes<ResizablePrimitive.ImperativePanelGroupHandle>>;
38
37
  /** An individual resizable panel within a ResizablePanelGroup. */
39
- declare const ResizablePanel: import("react").NamedExoticComponent<Omit<import("react").HTMLAttributes<HTMLInputElement | HTMLElement | HTMLParagraphElement | HTMLButtonElement | HTMLDivElement | HTMLFieldSetElement | HTMLLegendElement | HTMLLabelElement | HTMLObjectElement | HTMLAnchorElement | HTMLAreaElement | HTMLAudioElement | HTMLBaseElement | HTMLQuoteElement | HTMLBodyElement | HTMLBRElement | HTMLCanvasElement | HTMLTableCaptionElement | HTMLTableColElement | HTMLDataElement | HTMLDataListElement | HTMLModElement | HTMLDetailsElement | HTMLDialogElement | HTMLDListElement | HTMLEmbedElement | HTMLFormElement | HTMLHeadingElement | HTMLHeadElement | HTMLHRElement | HTMLHtmlElement | HTMLIFrameElement | HTMLImageElement | HTMLLIElement | HTMLLinkElement | HTMLMapElement | HTMLMenuElement | HTMLMetaElement | HTMLMeterElement | HTMLOListElement | HTMLOptGroupElement | HTMLOptionElement | HTMLOutputElement | HTMLPictureElement | HTMLPreElement | HTMLProgressElement | HTMLScriptElement | HTMLSelectElement | HTMLSlotElement | HTMLSourceElement | HTMLSpanElement | HTMLStyleElement | HTMLTableElement | HTMLTableSectionElement | HTMLTableCellElement | HTMLTemplateElement | HTMLTextAreaElement | HTMLTimeElement | HTMLTitleElement | HTMLTableRowElement | HTMLTrackElement | HTMLUListElement | HTMLVideoElement>, "id" | "onResize"> & {
38
+ declare const ResizablePanel: import("react").NamedExoticComponent<Omit<import("react").HTMLAttributes<HTMLInputElement | HTMLElement | HTMLParagraphElement | HTMLDivElement | HTMLButtonElement | HTMLFieldSetElement | HTMLLegendElement | HTMLLabelElement | HTMLTableElement | HTMLTableSectionElement | HTMLTableRowElement | HTMLTableCellElement | HTMLObjectElement | HTMLAnchorElement | HTMLAreaElement | HTMLAudioElement | HTMLBaseElement | HTMLQuoteElement | HTMLBodyElement | HTMLBRElement | HTMLCanvasElement | HTMLTableCaptionElement | HTMLTableColElement | HTMLDataElement | HTMLDataListElement | HTMLModElement | HTMLDetailsElement | HTMLDialogElement | HTMLDListElement | HTMLEmbedElement | HTMLFormElement | HTMLHeadingElement | HTMLHeadElement | HTMLHRElement | HTMLHtmlElement | HTMLIFrameElement | HTMLImageElement | HTMLLIElement | HTMLLinkElement | HTMLMapElement | HTMLMenuElement | HTMLMetaElement | HTMLMeterElement | HTMLOListElement | HTMLOptGroupElement | HTMLOptionElement | HTMLOutputElement | HTMLPictureElement | HTMLPreElement | HTMLProgressElement | HTMLScriptElement | HTMLSelectElement | HTMLSlotElement | HTMLSourceElement | HTMLSpanElement | HTMLStyleElement | HTMLTemplateElement | HTMLTextAreaElement | HTMLTimeElement | HTMLTitleElement | HTMLTrackElement | HTMLUListElement | HTMLVideoElement>, "id" | "onResize"> & {
40
39
  className?: string;
41
40
  collapsedSize?: number | undefined;
42
41
  collapsible?: boolean | undefined;
@@ -61,4 +60,4 @@ declare const ResizablePanel: import("react").NamedExoticComponent<Omit<import("
61
60
  declare const ResizableHandle: import("react").NamedExoticComponent<TResizableHandle>;
62
61
  //#endregion
63
62
  export { ResizablePanel as n, ResizablePanelGroup as r, ResizableHandle as t };
64
- //# sourceMappingURL=resizable-CAyWR1At.d.cts.map
63
+ //# sourceMappingURL=resizable-D-Z8NJ7S.d.cts.map
@@ -1,5 +1,4 @@
1
1
  import * as ResizablePrimitive from "react-resizable-panels";
2
-
3
2
  //#region node_modules/react-resizable-panels/dist/declarations/src/types.d.ts
4
3
  type Direction = "horizontal" | "vertical";
5
4
  //#endregion
@@ -36,7 +35,7 @@ declare const ResizablePanelGroup: import("react").NamedExoticComponent<Omit<imp
36
35
  children?: import("react").ReactNode | undefined;
37
36
  } & import("react").RefAttributes<ResizablePrimitive.ImperativePanelGroupHandle>>;
38
37
  /** An individual resizable panel within a ResizablePanelGroup. */
39
- declare const ResizablePanel: import("react").NamedExoticComponent<Omit<import("react").HTMLAttributes<HTMLInputElement | HTMLElement | HTMLParagraphElement | HTMLButtonElement | HTMLDivElement | HTMLFieldSetElement | HTMLLegendElement | HTMLLabelElement | HTMLObjectElement | HTMLAnchorElement | HTMLAreaElement | HTMLAudioElement | HTMLBaseElement | HTMLQuoteElement | HTMLBodyElement | HTMLBRElement | HTMLCanvasElement | HTMLTableCaptionElement | HTMLTableColElement | HTMLDataElement | HTMLDataListElement | HTMLModElement | HTMLDetailsElement | HTMLDialogElement | HTMLDListElement | HTMLEmbedElement | HTMLFormElement | HTMLHeadingElement | HTMLHeadElement | HTMLHRElement | HTMLHtmlElement | HTMLIFrameElement | HTMLImageElement | HTMLLIElement | HTMLLinkElement | HTMLMapElement | HTMLMenuElement | HTMLMetaElement | HTMLMeterElement | HTMLOListElement | HTMLOptGroupElement | HTMLOptionElement | HTMLOutputElement | HTMLPictureElement | HTMLPreElement | HTMLProgressElement | HTMLScriptElement | HTMLSelectElement | HTMLSlotElement | HTMLSourceElement | HTMLSpanElement | HTMLStyleElement | HTMLTableElement | HTMLTableSectionElement | HTMLTableCellElement | HTMLTemplateElement | HTMLTextAreaElement | HTMLTimeElement | HTMLTitleElement | HTMLTableRowElement | HTMLTrackElement | HTMLUListElement | HTMLVideoElement>, "id" | "onResize"> & {
38
+ declare const ResizablePanel: import("react").NamedExoticComponent<Omit<import("react").HTMLAttributes<HTMLInputElement | HTMLElement | HTMLParagraphElement | HTMLDivElement | HTMLButtonElement | HTMLFieldSetElement | HTMLLegendElement | HTMLLabelElement | HTMLTableElement | HTMLTableSectionElement | HTMLTableRowElement | HTMLTableCellElement | HTMLObjectElement | HTMLAnchorElement | HTMLAreaElement | HTMLAudioElement | HTMLBaseElement | HTMLQuoteElement | HTMLBodyElement | HTMLBRElement | HTMLCanvasElement | HTMLTableCaptionElement | HTMLTableColElement | HTMLDataElement | HTMLDataListElement | HTMLModElement | HTMLDetailsElement | HTMLDialogElement | HTMLDListElement | HTMLEmbedElement | HTMLFormElement | HTMLHeadingElement | HTMLHeadElement | HTMLHRElement | HTMLHtmlElement | HTMLIFrameElement | HTMLImageElement | HTMLLIElement | HTMLLinkElement | HTMLMapElement | HTMLMenuElement | HTMLMetaElement | HTMLMeterElement | HTMLOListElement | HTMLOptGroupElement | HTMLOptionElement | HTMLOutputElement | HTMLPictureElement | HTMLPreElement | HTMLProgressElement | HTMLScriptElement | HTMLSelectElement | HTMLSlotElement | HTMLSourceElement | HTMLSpanElement | HTMLStyleElement | HTMLTemplateElement | HTMLTextAreaElement | HTMLTimeElement | HTMLTitleElement | HTMLTrackElement | HTMLUListElement | HTMLVideoElement>, "id" | "onResize"> & {
40
39
  className?: string;
41
40
  collapsedSize?: number | undefined;
42
41
  collapsible?: boolean | undefined;
@@ -61,4 +60,4 @@ declare const ResizablePanel: import("react").NamedExoticComponent<Omit<import("
61
60
  declare const ResizableHandle: import("react").NamedExoticComponent<TResizableHandle>;
62
61
  //#endregion
63
62
  export { ResizablePanel as n, ResizablePanelGroup as r, ResizableHandle as t };
64
- //# sourceMappingURL=resizable-CAyWR1At.d.mts.map
63
+ //# sourceMappingURL=resizable-D-Z8NJ7S.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"revenue-area-chart-BwzeTRzD.mjs","names":[],"sources":["../packages/components/features/charts/components/revenue-area-chart.tsx"],"sourcesContent":["'use client';\n\nimport { useId, useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { type ChartConfig, ChartContainer, ChartLegend, ChartLegendContent, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart';\n\nimport { Area, AreaChart, CartesianGrid, XAxis, YAxis } from 'recharts';\nimport type { BaseChartProps, TimeSeriesPoint } from '../types';\nimport { formatCurrency, toDateLabel } from '../utils';\n\nexport type RevenueAreaChartProps = BaseChartProps & {\n data: TimeSeriesPoint[];\n /** Series label. Defaults to `'Revenue'`. */\n label?: string;\n /** Comparison series label. Defaults to `'Previous period'`. */\n comparisonLabel?: string;\n /** Renders `previousValue` as a second, muted area series. */\n showComparison?: boolean;\n color?: string;\n comparisonColor?: string;\n /** Formats tooltip and Y-axis values. Defaults to compact currency. */\n valueFormatter?: (value: number) => string;\n dateFormatter?: (date: string | Date) => string;\n /** Defaults to `showComparison`. */\n showLegend?: boolean;\n showGrid?: boolean;\n};\n\n/**\n * A gradient area chart for revenue (or any currency metric) over time, with an optional\n * previous-period comparison series.\n *\n * @example\n * ```tsx\n * import { RevenueAreaChart } from '@customafk/lunas-ui/features/charts';\n *\n * <RevenueAreaChart\n * data={[\n * { date: '2026-06-01', value: 4200, previousValue: 3800 },\n * { date: '2026-06-02', value: 5100, previousValue: 4300 },\n * ]}\n * showComparison\n * />\n * ```\n */\nexport const RevenueAreaChart = ({\n data,\n label = 'Revenue',\n comparisonLabel = 'Previous period',\n showComparison = false,\n color = 'var(--chart-1)',\n comparisonColor = 'var(--chart-8)',\n valueFormatter = value => formatCurrency(value),\n dateFormatter = toDateLabel,\n showLegend = showComparison,\n showGrid = true,\n className,\n animate = true,\n height,\n}: RevenueAreaChartProps) => {\n const gradientId = useId();\n\n const config = useMemo<ChartConfig>(\n () => ({\n value: { label, color },\n ...(showComparison ? { previousValue: { label: comparisonLabel, color: comparisonColor } } : {}),\n }),\n [label, color, showComparison, comparisonLabel, comparisonColor]\n );\n\n return (\n <ChartContainer\n data-slot=\"revenue-area-chart\"\n config={config}\n className={cn('w-full', className)}\n style={height !== undefined ? { height, aspectRatio: 'auto' } : undefined}\n >\n <AreaChart data={data} margin={{ top: 8, right: 12, bottom: 0, left: 12 }}>\n <defs>\n <linearGradient id={`${gradientId}-value`} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"5%\" stopColor={color} stopOpacity={0.6} />\n <stop offset=\"95%\" stopColor={color} stopOpacity={0.05} />\n </linearGradient>\n <linearGradient id={`${gradientId}-previous`} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"5%\" stopColor={comparisonColor} stopOpacity={0.3} />\n <stop offset=\"95%\" stopColor={comparisonColor} stopOpacity={0.02} />\n </linearGradient>\n </defs>\n {showGrid && <CartesianGrid vertical={false} />}\n <XAxis dataKey=\"date\" tickLine={false} axisLine={false} tickMargin={8} tickFormatter={dateFormatter} />\n <YAxis tickLine={false} axisLine={false} tickMargin={8} width={64} tickFormatter={valueFormatter} />\n <ChartTooltip\n cursor={false}\n content={\n <ChartTooltipContent\n labelFormatter={(_, payload) => {\n const date = payload?.[0]?.payload?.date;\n return date ? dateFormatter(date) : null;\n }}\n formatter={(value, name, item) => (\n <>\n <div className=\"size-2.5 shrink-0 rounded-[2px]\" style={{ backgroundColor: item.color }} />\n <span className=\"text-muted\">{config[String(name)]?.label || name}</span>\n <span className=\"text-text-positive-strong font-number ml-auto font-medium tabular-nums\">{valueFormatter(Number(value))}</span>\n </>\n )}\n />\n }\n />\n {showComparison && (\n <Area\n type=\"natural\"\n dataKey=\"previousValue\"\n stroke={comparisonColor}\n strokeWidth={2}\n strokeDasharray=\"4 4\"\n fill={`url(#${gradientId}-previous)`}\n isAnimationActive={animate}\n />\n )}\n <Area type=\"natural\" dataKey=\"value\" stroke={color} strokeWidth={2} fill={`url(#${gradientId}-value)`} isAnimationActive={animate} />\n {showLegend && <ChartLegend content={<ChartLegendContent />} />}\n </AreaChart>\n </ChartContainer>\n );\n};\n"],"mappings":"ycA+CA,MAAa,GAAoB,CAC/B,OACA,QAAQ,UACR,kBAAkB,kBAClB,iBAAiB,GACjB,QAAQ,iBACR,kBAAkB,iBAClB,iBAAiB,GAAS,EAAe,CAAK,EAC9C,gBAAgB,EAChB,aAAa,EACb,WAAW,GACX,YACA,UAAU,GACV,YAC2B,CAC3B,IAAM,EAAa,EAAM,EAEnB,EAAS,OACN,CACL,MAAO,CAAE,QAAO,OAAM,EACtB,GAAI,EAAiB,CAAE,cAAe,CAAE,MAAO,EAAiB,MAAO,CAAgB,CAAE,EAAI,CAAC,CAChG,GACA,CAAC,EAAO,EAAO,EAAgB,EAAiB,CAAe,CACjE,EAEA,OACE,EAAC,EAAD,CACE,YAAU,qBACF,SACR,UAAW,EAAG,SAAU,CAAS,EACjC,MAAO,IAAW,IAAA,GAA8C,IAAA,GAAlC,CAAE,SAAQ,YAAa,MAAO,WAE5D,EAAC,EAAD,CAAiB,OAAM,OAAQ,CAAE,IAAK,EAAG,MAAO,GAAI,OAAQ,EAAG,KAAM,EAAG,WAAxE,CACE,EAAC,OAAD,CAAA,SAAA,CACE,EAAC,iBAAD,CAAgB,GAAI,GAAG,EAAW,QAAS,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,aAAnE,CACE,EAAC,OAAD,CAAM,OAAO,KAAK,UAAW,EAAO,YAAa,EAAM,CAAA,EACvD,EAAC,OAAD,CAAM,OAAO,MAAM,UAAW,EAAO,YAAa,GAAO,CAAA,CAC3C,IAChB,EAAC,iBAAD,CAAgB,GAAI,GAAG,EAAW,WAAY,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,aAAtE,CACE,EAAC,OAAD,CAAM,OAAO,KAAK,UAAW,EAAiB,YAAa,EAAM,CAAA,EACjE,EAAC,OAAD,CAAM,OAAO,MAAM,UAAW,EAAiB,YAAa,GAAO,CAAA,CACrD,GACZ,CAAA,CAAA,EACL,GAAY,EAAC,EAAD,CAAe,SAAU,EAAQ,CAAA,EAC9C,EAAC,EAAD,CAAO,QAAQ,OAAO,SAAU,GAAO,SAAU,GAAO,WAAY,EAAG,cAAe,CAAgB,CAAA,EACtG,EAAC,EAAD,CAAO,SAAU,GAAO,SAAU,GAAO,WAAY,EAAG,MAAO,GAAI,cAAe,CAAiB,CAAA,EACnG,EAAC,EAAD,CACE,OAAQ,GACR,QACE,EAAC,EAAD,CACE,gBAAiB,EAAG,IAAY,CAC9B,IAAM,EAAO,IAAU,EAAE,EAAE,SAAS,KACpC,OAAO,EAAO,EAAc,CAAI,EAAI,IACtC,EACA,WAAY,EAAO,EAAM,IACvB,EAAA,EAAA,CAAA,SAAA,CACE,EAAC,MAAD,CAAK,UAAU,kCAAkC,MAAO,CAAE,gBAAiB,EAAK,KAAM,CAAI,CAAA,EAC1F,EAAC,OAAD,CAAM,UAAU,sBAAc,EAAO,OAAO,CAAI,EAAE,EAAE,OAAS,CAAW,CAAA,EACxE,EAAC,OAAD,CAAM,UAAU,kFAA0E,EAAe,OAAO,CAAK,CAAC,CAAQ,CAAA,CAC9H,CAAA,CAAA,CAEL,CAAA,CAEJ,CAAA,EACA,GACC,EAAC,EAAD,CACE,KAAK,UACL,QAAQ,gBACR,OAAQ,EACR,YAAa,EACb,gBAAgB,MAChB,KAAM,QAAQ,EAAW,YACzB,kBAAmB,CACpB,CAAA,EAEH,EAAC,EAAD,CAAM,KAAK,UAAU,QAAQ,QAAQ,OAAQ,EAAO,YAAa,EAAG,KAAM,QAAQ,EAAW,SAAU,kBAAmB,CAAU,CAAA,EACnI,GAAc,EAAC,EAAD,CAAa,QAAS,EAAC,EAAD,CAAqB,CAAA,CAAI,CAAA,CACrD,GACG,CAAA,CAEpB"}
1
+ {"version":3,"file":"revenue-area-chart-BwzeTRzD.mjs","names":[],"sources":["../packages/components/features/charts/components/revenue-area-chart.tsx"],"sourcesContent":["'use client';\n\nimport { useId, useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { type ChartConfig, ChartContainer, ChartLegend, ChartLegendContent, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart';\n\nimport { Area, AreaChart, CartesianGrid, XAxis, YAxis } from 'recharts';\nimport type { BaseChartProps, TimeSeriesPoint } from '../types';\nimport { formatCurrency, toDateLabel } from '../utils';\n\nexport type RevenueAreaChartProps = BaseChartProps & {\n data: TimeSeriesPoint[];\n /** Series label. Defaults to `'Revenue'`. */\n label?: string;\n /** Comparison series label. Defaults to `'Previous period'`. */\n comparisonLabel?: string;\n /** Renders `previousValue` as a second, muted area series. */\n showComparison?: boolean;\n color?: string;\n comparisonColor?: string;\n /** Formats tooltip and Y-axis values. Defaults to compact currency. */\n valueFormatter?: (value: number) => string;\n dateFormatter?: (date: string | Date) => string;\n /** Defaults to `showComparison`. */\n showLegend?: boolean;\n showGrid?: boolean;\n};\n\n/**\n * A gradient area chart for revenue (or any currency metric) over time, with an optional\n * previous-period comparison series.\n *\n * @example\n * ```tsx\n * import { RevenueAreaChart } from '@customafk/lunas-ui/features/charts';\n *\n * <RevenueAreaChart\n * data={[\n * { date: '2026-06-01', value: 4200, previousValue: 3800 },\n * { date: '2026-06-02', value: 5100, previousValue: 4300 },\n * ]}\n * showComparison\n * />\n * ```\n */\nexport const RevenueAreaChart = ({\n data,\n label = 'Revenue',\n comparisonLabel = 'Previous period',\n showComparison = false,\n color = 'var(--chart-1)',\n comparisonColor = 'var(--chart-8)',\n valueFormatter = value => formatCurrency(value),\n dateFormatter = toDateLabel,\n showLegend = showComparison,\n showGrid = true,\n className,\n animate = true,\n height,\n}: RevenueAreaChartProps) => {\n const gradientId = useId();\n\n const config = useMemo<ChartConfig>(\n () => ({\n value: { label, color },\n ...(showComparison ? { previousValue: { label: comparisonLabel, color: comparisonColor } } : {}),\n }),\n [label, color, showComparison, comparisonLabel, comparisonColor]\n );\n\n return (\n <ChartContainer\n data-slot=\"revenue-area-chart\"\n config={config}\n className={cn('w-full', className)}\n style={height !== undefined ? { height, aspectRatio: 'auto' } : undefined}\n >\n <AreaChart data={data} margin={{ top: 8, right: 12, bottom: 0, left: 12 }}>\n <defs>\n <linearGradient id={`${gradientId}-value`} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"5%\" stopColor={color} stopOpacity={0.6} />\n <stop offset=\"95%\" stopColor={color} stopOpacity={0.05} />\n </linearGradient>\n <linearGradient id={`${gradientId}-previous`} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"5%\" stopColor={comparisonColor} stopOpacity={0.3} />\n <stop offset=\"95%\" stopColor={comparisonColor} stopOpacity={0.02} />\n </linearGradient>\n </defs>\n {showGrid && <CartesianGrid vertical={false} />}\n <XAxis dataKey=\"date\" tickLine={false} axisLine={false} tickMargin={8} tickFormatter={dateFormatter} />\n <YAxis tickLine={false} axisLine={false} tickMargin={8} width={64} tickFormatter={valueFormatter} />\n <ChartTooltip\n cursor={false}\n content={\n <ChartTooltipContent\n labelFormatter={(_, payload) => {\n const date = payload?.[0]?.payload?.date;\n return date ? dateFormatter(date) : null;\n }}\n formatter={(value, name, item) => (\n <>\n <div className=\"size-2.5 shrink-0 rounded-[2px]\" style={{ backgroundColor: item.color }} />\n <span className=\"text-muted\">{config[String(name)]?.label || name}</span>\n <span className=\"text-text-positive-strong font-number ml-auto font-medium tabular-nums\">{valueFormatter(Number(value))}</span>\n </>\n )}\n />\n }\n />\n {showComparison && (\n <Area\n type=\"natural\"\n dataKey=\"previousValue\"\n stroke={comparisonColor}\n strokeWidth={2}\n strokeDasharray=\"4 4\"\n fill={`url(#${gradientId}-previous)`}\n isAnimationActive={animate}\n />\n )}\n <Area type=\"natural\" dataKey=\"value\" stroke={color} strokeWidth={2} fill={`url(#${gradientId}-value)`} isAnimationActive={animate} />\n {showLegend && <ChartLegend content={<ChartLegendContent />} />}\n </AreaChart>\n </ChartContainer>\n );\n};\n"],"mappings":"ycA+CA,MAAa,GAAoB,CAC/B,OACA,QAAQ,UACR,kBAAkB,kBAClB,iBAAiB,GACjB,QAAQ,iBACR,kBAAkB,iBAClB,iBAAiB,GAAS,EAAe,CAAK,EAC9C,gBAAgB,EAChB,aAAa,EACb,WAAW,GACX,YACA,UAAU,GACV,YAC2B,CAC3B,IAAM,EAAa,EAAM,EAEnB,EAAS,OACN,CACL,MAAO,CAAE,QAAO,OAAM,EACtB,GAAI,EAAiB,CAAE,cAAe,CAAE,MAAO,EAAiB,MAAO,CAAgB,CAAE,EAAI,CAAC,CAChG,GACA,CAAC,EAAO,EAAO,EAAgB,EAAiB,CAAe,CACjE,EAEA,OACE,EAAC,EAAD,CACE,YAAU,qBACF,SACR,UAAW,EAAG,SAAU,CAAS,EACjC,MAAO,IAAW,IAAA,GAA8C,IAAA,GAAlC,CAAE,SAAQ,YAAa,MAAO,EAE5D,SAAA,EAAC,EAAD,CAAiB,OAAM,OAAQ,CAAE,IAAK,EAAG,MAAO,GAAI,OAAQ,EAAG,KAAM,EAAG,EAAxE,SAAA,CACE,EAAC,OAAD,CAAA,SAAA,CACE,EAAC,iBAAD,CAAgB,GAAI,GAAG,EAAW,QAAS,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAnE,SAAA,CACE,EAAC,OAAD,CAAM,OAAO,KAAK,UAAW,EAAO,YAAa,EAAM,CAAA,EACvD,EAAC,OAAD,CAAM,OAAO,MAAM,UAAW,EAAO,YAAa,GAAO,CAAA,CAC3C,CAChB,CAAA,EAAA,EAAC,iBAAD,CAAgB,GAAI,GAAG,EAAW,WAAY,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAtE,SAAA,CACE,EAAC,OAAD,CAAM,OAAO,KAAK,UAAW,EAAiB,YAAa,EAAM,CAAA,EACjE,EAAC,OAAD,CAAM,OAAO,MAAM,UAAW,EAAiB,YAAa,GAAO,CAAA,CACrD,CACZ,CAAA,CAAA,CAAA,CAAA,EACL,GAAY,EAAC,EAAD,CAAe,SAAU,EAAQ,CAAA,EAC9C,EAAC,EAAD,CAAO,QAAQ,OAAO,SAAU,GAAO,SAAU,GAAO,WAAY,EAAG,cAAe,CAAgB,CAAA,EACtG,EAAC,EAAD,CAAO,SAAU,GAAO,SAAU,GAAO,WAAY,EAAG,MAAO,GAAI,cAAe,CAAiB,CAAA,EACnG,EAAC,EAAD,CACE,OAAQ,GACR,QACE,EAAC,EAAD,CACE,gBAAiB,EAAG,IAAY,CAC9B,IAAM,EAAO,IAAU,EAAE,EAAE,SAAS,KACpC,OAAO,EAAO,EAAc,CAAI,EAAI,IACtC,EACA,WAAY,EAAO,EAAM,IACvB,EAAA,EAAA,CAAA,SAAA,CACE,EAAC,MAAD,CAAK,UAAU,kCAAkC,MAAO,CAAE,gBAAiB,EAAK,KAAM,CAAI,CAAA,EAC1F,EAAC,OAAD,CAAM,UAAU,aAAc,SAAA,EAAO,OAAO,CAAI,EAAE,EAAE,OAAS,CAAW,CAAA,EACxE,EAAC,OAAD,CAAM,UAAU,yEAA0E,SAAA,EAAe,OAAO,CAAK,CAAC,CAAQ,CAAA,CAC9H,CAAA,CAAA,CAEL,CAAA,CAEJ,CAAA,EACA,GACC,EAAC,EAAD,CACE,KAAK,UACL,QAAQ,gBACR,OAAQ,EACR,YAAa,EACb,gBAAgB,MAChB,KAAM,QAAQ,EAAW,YACzB,kBAAmB,CACpB,CAAA,EAEH,EAAC,EAAD,CAAM,KAAK,UAAU,QAAQ,QAAQ,OAAQ,EAAO,YAAa,EAAG,KAAM,QAAQ,EAAW,SAAU,kBAAmB,CAAU,CAAA,EACnI,GAAc,EAAC,EAAD,CAAa,QAAS,EAAC,EAAD,CAAqB,CAAA,CAAI,CAAA,CACrD,GACG,CAAA,CAEpB"}
@@ -1 +1 @@
1
- {"version":3,"file":"revenue-area-chart-w2FZCl_7.cjs","names":["formatCurrency","toDateLabel","ChartContainer","AreaChart","CartesianGrid","XAxis","YAxis","ChartTooltip","ChartTooltipContent","Area","ChartLegend","ChartLegendContent"],"sources":["../packages/components/features/charts/components/revenue-area-chart.tsx"],"sourcesContent":["'use client';\n\nimport { useId, useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { type ChartConfig, ChartContainer, ChartLegend, ChartLegendContent, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart';\n\nimport { Area, AreaChart, CartesianGrid, XAxis, YAxis } from 'recharts';\nimport type { BaseChartProps, TimeSeriesPoint } from '../types';\nimport { formatCurrency, toDateLabel } from '../utils';\n\nexport type RevenueAreaChartProps = BaseChartProps & {\n data: TimeSeriesPoint[];\n /** Series label. Defaults to `'Revenue'`. */\n label?: string;\n /** Comparison series label. Defaults to `'Previous period'`. */\n comparisonLabel?: string;\n /** Renders `previousValue` as a second, muted area series. */\n showComparison?: boolean;\n color?: string;\n comparisonColor?: string;\n /** Formats tooltip and Y-axis values. Defaults to compact currency. */\n valueFormatter?: (value: number) => string;\n dateFormatter?: (date: string | Date) => string;\n /** Defaults to `showComparison`. */\n showLegend?: boolean;\n showGrid?: boolean;\n};\n\n/**\n * A gradient area chart for revenue (or any currency metric) over time, with an optional\n * previous-period comparison series.\n *\n * @example\n * ```tsx\n * import { RevenueAreaChart } from '@customafk/lunas-ui/features/charts';\n *\n * <RevenueAreaChart\n * data={[\n * { date: '2026-06-01', value: 4200, previousValue: 3800 },\n * { date: '2026-06-02', value: 5100, previousValue: 4300 },\n * ]}\n * showComparison\n * />\n * ```\n */\nexport const RevenueAreaChart = ({\n data,\n label = 'Revenue',\n comparisonLabel = 'Previous period',\n showComparison = false,\n color = 'var(--chart-1)',\n comparisonColor = 'var(--chart-8)',\n valueFormatter = value => formatCurrency(value),\n dateFormatter = toDateLabel,\n showLegend = showComparison,\n showGrid = true,\n className,\n animate = true,\n height,\n}: RevenueAreaChartProps) => {\n const gradientId = useId();\n\n const config = useMemo<ChartConfig>(\n () => ({\n value: { label, color },\n ...(showComparison ? { previousValue: { label: comparisonLabel, color: comparisonColor } } : {}),\n }),\n [label, color, showComparison, comparisonLabel, comparisonColor]\n );\n\n return (\n <ChartContainer\n data-slot=\"revenue-area-chart\"\n config={config}\n className={cn('w-full', className)}\n style={height !== undefined ? { height, aspectRatio: 'auto' } : undefined}\n >\n <AreaChart data={data} margin={{ top: 8, right: 12, bottom: 0, left: 12 }}>\n <defs>\n <linearGradient id={`${gradientId}-value`} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"5%\" stopColor={color} stopOpacity={0.6} />\n <stop offset=\"95%\" stopColor={color} stopOpacity={0.05} />\n </linearGradient>\n <linearGradient id={`${gradientId}-previous`} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"5%\" stopColor={comparisonColor} stopOpacity={0.3} />\n <stop offset=\"95%\" stopColor={comparisonColor} stopOpacity={0.02} />\n </linearGradient>\n </defs>\n {showGrid && <CartesianGrid vertical={false} />}\n <XAxis dataKey=\"date\" tickLine={false} axisLine={false} tickMargin={8} tickFormatter={dateFormatter} />\n <YAxis tickLine={false} axisLine={false} tickMargin={8} width={64} tickFormatter={valueFormatter} />\n <ChartTooltip\n cursor={false}\n content={\n <ChartTooltipContent\n labelFormatter={(_, payload) => {\n const date = payload?.[0]?.payload?.date;\n return date ? dateFormatter(date) : null;\n }}\n formatter={(value, name, item) => (\n <>\n <div className=\"size-2.5 shrink-0 rounded-[2px]\" style={{ backgroundColor: item.color }} />\n <span className=\"text-muted\">{config[String(name)]?.label || name}</span>\n <span className=\"text-text-positive-strong font-number ml-auto font-medium tabular-nums\">{valueFormatter(Number(value))}</span>\n </>\n )}\n />\n }\n />\n {showComparison && (\n <Area\n type=\"natural\"\n dataKey=\"previousValue\"\n stroke={comparisonColor}\n strokeWidth={2}\n strokeDasharray=\"4 4\"\n fill={`url(#${gradientId}-previous)`}\n isAnimationActive={animate}\n />\n )}\n <Area type=\"natural\" dataKey=\"value\" stroke={color} strokeWidth={2} fill={`url(#${gradientId}-value)`} isAnimationActive={animate} />\n {showLegend && <ChartLegend content={<ChartLegendContent />} />}\n </AreaChart>\n </ChartContainer>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"revenue-area-chart-w2FZCl_7.cjs","names":["formatCurrency","toDateLabel","ChartContainer","AreaChart","CartesianGrid","XAxis","YAxis","ChartTooltip","ChartTooltipContent","Area","ChartLegend","ChartLegendContent"],"sources":["../packages/components/features/charts/components/revenue-area-chart.tsx"],"sourcesContent":["'use client';\n\nimport { useId, useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { type ChartConfig, ChartContainer, ChartLegend, ChartLegendContent, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart';\n\nimport { Area, AreaChart, CartesianGrid, XAxis, YAxis } from 'recharts';\nimport type { BaseChartProps, TimeSeriesPoint } from '../types';\nimport { formatCurrency, toDateLabel } from '../utils';\n\nexport type RevenueAreaChartProps = BaseChartProps & {\n data: TimeSeriesPoint[];\n /** Series label. Defaults to `'Revenue'`. */\n label?: string;\n /** Comparison series label. Defaults to `'Previous period'`. */\n comparisonLabel?: string;\n /** Renders `previousValue` as a second, muted area series. */\n showComparison?: boolean;\n color?: string;\n comparisonColor?: string;\n /** Formats tooltip and Y-axis values. Defaults to compact currency. */\n valueFormatter?: (value: number) => string;\n dateFormatter?: (date: string | Date) => string;\n /** Defaults to `showComparison`. */\n showLegend?: boolean;\n showGrid?: boolean;\n};\n\n/**\n * A gradient area chart for revenue (or any currency metric) over time, with an optional\n * previous-period comparison series.\n *\n * @example\n * ```tsx\n * import { RevenueAreaChart } from '@customafk/lunas-ui/features/charts';\n *\n * <RevenueAreaChart\n * data={[\n * { date: '2026-06-01', value: 4200, previousValue: 3800 },\n * { date: '2026-06-02', value: 5100, previousValue: 4300 },\n * ]}\n * showComparison\n * />\n * ```\n */\nexport const RevenueAreaChart = ({\n data,\n label = 'Revenue',\n comparisonLabel = 'Previous period',\n showComparison = false,\n color = 'var(--chart-1)',\n comparisonColor = 'var(--chart-8)',\n valueFormatter = value => formatCurrency(value),\n dateFormatter = toDateLabel,\n showLegend = showComparison,\n showGrid = true,\n className,\n animate = true,\n height,\n}: RevenueAreaChartProps) => {\n const gradientId = useId();\n\n const config = useMemo<ChartConfig>(\n () => ({\n value: { label, color },\n ...(showComparison ? { previousValue: { label: comparisonLabel, color: comparisonColor } } : {}),\n }),\n [label, color, showComparison, comparisonLabel, comparisonColor]\n );\n\n return (\n <ChartContainer\n data-slot=\"revenue-area-chart\"\n config={config}\n className={cn('w-full', className)}\n style={height !== undefined ? { height, aspectRatio: 'auto' } : undefined}\n >\n <AreaChart data={data} margin={{ top: 8, right: 12, bottom: 0, left: 12 }}>\n <defs>\n <linearGradient id={`${gradientId}-value`} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"5%\" stopColor={color} stopOpacity={0.6} />\n <stop offset=\"95%\" stopColor={color} stopOpacity={0.05} />\n </linearGradient>\n <linearGradient id={`${gradientId}-previous`} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"5%\" stopColor={comparisonColor} stopOpacity={0.3} />\n <stop offset=\"95%\" stopColor={comparisonColor} stopOpacity={0.02} />\n </linearGradient>\n </defs>\n {showGrid && <CartesianGrid vertical={false} />}\n <XAxis dataKey=\"date\" tickLine={false} axisLine={false} tickMargin={8} tickFormatter={dateFormatter} />\n <YAxis tickLine={false} axisLine={false} tickMargin={8} width={64} tickFormatter={valueFormatter} />\n <ChartTooltip\n cursor={false}\n content={\n <ChartTooltipContent\n labelFormatter={(_, payload) => {\n const date = payload?.[0]?.payload?.date;\n return date ? dateFormatter(date) : null;\n }}\n formatter={(value, name, item) => (\n <>\n <div className=\"size-2.5 shrink-0 rounded-[2px]\" style={{ backgroundColor: item.color }} />\n <span className=\"text-muted\">{config[String(name)]?.label || name}</span>\n <span className=\"text-text-positive-strong font-number ml-auto font-medium tabular-nums\">{valueFormatter(Number(value))}</span>\n </>\n )}\n />\n }\n />\n {showComparison && (\n <Area\n type=\"natural\"\n dataKey=\"previousValue\"\n stroke={comparisonColor}\n strokeWidth={2}\n strokeDasharray=\"4 4\"\n fill={`url(#${gradientId}-previous)`}\n isAnimationActive={animate}\n />\n )}\n <Area type=\"natural\" dataKey=\"value\" stroke={color} strokeWidth={2} fill={`url(#${gradientId}-value)`} isAnimationActive={animate} />\n {showLegend && <ChartLegend content={<ChartLegendContent />} />}\n </AreaChart>\n </ChartContainer>\n );\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"revenue-orders-composed-chart-BttOWYGt.cjs","names":["formatCurrency","toDateLabel","ChartContainer","ComposedChart","CartesianGrid","XAxis","YAxis","ChartTooltip","ChartTooltipContent","Bar","Line","ChartLegend","ChartLegendContent"],"sources":["../packages/components/features/charts/components/revenue-orders-composed-chart.tsx"],"sourcesContent":["'use client';\n\nimport { useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { type ChartConfig, ChartContainer, ChartLegend, ChartLegendContent, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart';\n\nimport { Bar, CartesianGrid, ComposedChart, Line, XAxis, YAxis } from 'recharts';\nimport type { BaseChartProps } from '../types';\nimport { formatCurrency, toDateLabel } from '../utils';\n\nexport type RevenueOrdersPoint = {\n date: string | Date;\n revenue: number;\n orders: number;\n};\n\nexport type RevenueOrdersComposedChartProps = BaseChartProps & {\n data: RevenueOrdersPoint[];\n revenueLabel?: string;\n ordersLabel?: string;\n revenueColor?: string;\n ordersColor?: string;\n /** Formats the left (revenue) axis and tooltip values. Defaults to compact currency. */\n revenueFormatter?: (value: number) => string;\n /** Formats the right (orders) axis and tooltip values. */\n ordersFormatter?: (value: number) => string;\n dateFormatter?: (date: string | Date) => string;\n showLegend?: boolean;\n showGrid?: boolean;\n};\n\n/**\n * A dual-axis chart combining revenue bars (left axis, currency) with an orders line\n * (right axis, count) to correlate the two metrics per period.\n *\n * @example\n * ```tsx\n * import { RevenueOrdersComposedChart } from '@customafk/lunas-ui/features/charts';\n *\n * <RevenueOrdersComposedChart\n * data={[{ date: '2026-06-01', revenue: 12400, orders: 87 }]}\n * />\n * ```\n */\nexport const RevenueOrdersComposedChart = ({\n data,\n revenueLabel = 'Revenue',\n ordersLabel = 'Orders',\n revenueColor = 'var(--chart-1)',\n ordersColor = 'var(--chart-4)',\n revenueFormatter = value => formatCurrency(value),\n ordersFormatter = value => value.toLocaleString('en-US'),\n dateFormatter = toDateLabel,\n showLegend = true,\n showGrid = true,\n className,\n animate = true,\n height,\n}: RevenueOrdersComposedChartProps) => {\n const config = useMemo<ChartConfig>(\n () => ({\n revenue: { label: revenueLabel, color: revenueColor },\n orders: { label: ordersLabel, color: ordersColor },\n }),\n [revenueLabel, revenueColor, ordersLabel, ordersColor]\n );\n\n return (\n <ChartContainer\n data-slot=\"revenue-orders-composed-chart\"\n config={config}\n className={cn('w-full', className)}\n style={height !== undefined ? { height, aspectRatio: 'auto' } : undefined}\n >\n <ComposedChart data={data} margin={{ top: 8, right: 12, bottom: 0, left: 12 }}>\n {showGrid && <CartesianGrid vertical={false} />}\n <XAxis dataKey=\"date\" tickLine={false} axisLine={false} tickMargin={8} tickFormatter={dateFormatter} />\n <YAxis yAxisId=\"revenue\" tickLine={false} axisLine={false} tickMargin={8} width={64} tickFormatter={revenueFormatter} />\n <YAxis\n yAxisId=\"orders\"\n orientation=\"right\"\n tickLine={false}\n axisLine={false}\n tickMargin={8}\n width={48}\n allowDecimals={false}\n tickFormatter={ordersFormatter}\n />\n <ChartTooltip\n content={\n <ChartTooltipContent\n labelFormatter={(_, payload) => {\n const date = payload?.[0]?.payload?.date;\n return date ? dateFormatter(date) : null;\n }}\n formatter={(value, name, item) => (\n <>\n <div className=\"size-2.5 shrink-0 rounded-[2px]\" style={{ backgroundColor: item.color }} />\n <span className=\"text-muted\">{config[String(name)]?.label || name}</span>\n <span className=\"text-text-positive-strong font-number ml-auto font-medium tabular-nums\">\n {name === 'revenue' ? revenueFormatter(Number(value)) : ordersFormatter(Number(value))}\n </span>\n </>\n )}\n />\n }\n />\n <Bar dataKey=\"revenue\" yAxisId=\"revenue\" fill={revenueColor} radius={[4, 4, 0, 0]} isAnimationActive={animate} />\n <Line type=\"natural\" dataKey=\"orders\" yAxisId=\"orders\" stroke={ordersColor} strokeWidth={2} dot={false} isAnimationActive={animate} />\n {showLegend && <ChartLegend content={<ChartLegendContent />} />}\n </ComposedChart>\n </ChartContainer>\n );\n};\n"],"mappings":"mMA8CA,MAAa,GAA8B,CACzC,OACA,eAAe,UACf,cAAc,SACd,eAAe,iBACf,cAAc,iBACd,mBAAmB,GAASA,EAAAA,eAAe,CAAK,EAChD,kBAAkB,GAAS,EAAM,eAAe,OAAO,EACvD,gBAAgBC,EAAAA,YAChB,aAAa,GACb,WAAW,GACX,YACA,UAAU,GACV,YACqC,CACrC,IAAM,GAAA,EAAA,EAAA,QAAA,MACG,CACL,QAAS,CAAE,MAAO,EAAc,MAAO,CAAa,EACpD,OAAQ,CAAE,MAAO,EAAa,MAAO,CAAY,CACnD,GACA,CAAC,EAAc,EAAc,EAAa,CAAW,CACvD,EAEA,OACE,EAAA,EAAA,IAAA,CAACC,EAAAA,eAAD,CACE,YAAU,gCACF,SACR,WAAA,EAAA,EAAA,GAAA,CAAc,SAAU,CAAS,EACjC,MAAO,IAAW,IAAA,GAA8C,IAAA,GAAlC,CAAE,SAAQ,YAAa,MAAO,YAE5D,EAAA,EAAA,KAAA,CAACC,EAAAA,cAAD,CAAqB,OAAM,OAAQ,CAAE,IAAK,EAAG,MAAO,GAAI,OAAQ,EAAG,KAAM,EAAG,WAA5E,CACG,IAAY,EAAA,EAAA,IAAA,CAACC,EAAAA,cAAD,CAAe,SAAU,EAAQ,CAAA,GAC9C,EAAA,EAAA,IAAA,CAACC,EAAAA,MAAD,CAAO,QAAQ,OAAO,SAAU,GAAO,SAAU,GAAO,WAAY,EAAG,cAAe,CAAgB,CAAA,GACtG,EAAA,EAAA,IAAA,CAACC,EAAAA,MAAD,CAAO,QAAQ,UAAU,SAAU,GAAO,SAAU,GAAO,WAAY,EAAG,MAAO,GAAI,cAAe,CAAmB,CAAA,GACvH,EAAA,EAAA,IAAA,CAACA,EAAAA,MAAD,CACE,QAAQ,SACR,YAAY,QACZ,SAAU,GACV,SAAU,GACV,WAAY,EACZ,MAAO,GACP,cAAe,GACf,cAAe,CAChB,CAAA,GACD,EAAA,EAAA,IAAA,CAACC,EAAAA,aAAD,CACE,SACE,EAAA,EAAA,IAAA,CAACC,EAAAA,oBAAD,CACE,gBAAiB,EAAG,IAAY,CAC9B,IAAM,EAAO,IAAU,EAAE,EAAE,SAAS,KACpC,OAAO,EAAO,EAAc,CAAI,EAAI,IACtC,EACA,WAAY,EAAO,EAAM,KACvB,EAAA,EAAA,KAAA,CAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,kCAAkC,MAAO,CAAE,gBAAiB,EAAK,KAAM,CAAI,CAAA,GAC1F,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAU,sBAAc,EAAO,OAAO,CAAI,EAAE,EAAE,OAAS,CAAW,CAAA,GACxE,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAU,kFACb,IAAS,UAAY,EAAiB,OAAO,CAAK,CAAC,EAAI,EAAgB,OAAO,CAAK,CAAC,CACjF,CAAA,CACN,CAAA,CAAA,CAEL,CAAA,CAEJ,CAAA,GACD,EAAA,EAAA,IAAA,CAACC,EAAAA,IAAD,CAAK,QAAQ,UAAU,QAAQ,UAAU,KAAM,EAAc,OAAQ,CAAC,EAAG,EAAG,EAAG,CAAC,EAAG,kBAAmB,CAAU,CAAA,GAChH,EAAA,EAAA,IAAA,CAACC,EAAAA,KAAD,CAAM,KAAK,UAAU,QAAQ,SAAS,QAAQ,SAAS,OAAQ,EAAa,YAAa,EAAG,IAAK,GAAO,kBAAmB,CAAU,CAAA,EACpI,IAAc,EAAA,EAAA,IAAA,CAACC,EAAAA,YAAD,CAAa,SAAS,EAAA,EAAA,IAAA,CAACC,EAAAA,mBAAD,CAAqB,CAAA,CAAI,CAAA,CACjD,GACD,CAAA,CAEpB"}
1
+ {"version":3,"file":"revenue-orders-composed-chart-BttOWYGt.cjs","names":["formatCurrency","toDateLabel","ChartContainer","ComposedChart","CartesianGrid","XAxis","YAxis","ChartTooltip","ChartTooltipContent","Bar","Line","ChartLegend","ChartLegendContent"],"sources":["../packages/components/features/charts/components/revenue-orders-composed-chart.tsx"],"sourcesContent":["'use client';\n\nimport { useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { type ChartConfig, ChartContainer, ChartLegend, ChartLegendContent, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart';\n\nimport { Bar, CartesianGrid, ComposedChart, Line, XAxis, YAxis } from 'recharts';\nimport type { BaseChartProps } from '../types';\nimport { formatCurrency, toDateLabel } from '../utils';\n\nexport type RevenueOrdersPoint = {\n date: string | Date;\n revenue: number;\n orders: number;\n};\n\nexport type RevenueOrdersComposedChartProps = BaseChartProps & {\n data: RevenueOrdersPoint[];\n revenueLabel?: string;\n ordersLabel?: string;\n revenueColor?: string;\n ordersColor?: string;\n /** Formats the left (revenue) axis and tooltip values. Defaults to compact currency. */\n revenueFormatter?: (value: number) => string;\n /** Formats the right (orders) axis and tooltip values. */\n ordersFormatter?: (value: number) => string;\n dateFormatter?: (date: string | Date) => string;\n showLegend?: boolean;\n showGrid?: boolean;\n};\n\n/**\n * A dual-axis chart combining revenue bars (left axis, currency) with an orders line\n * (right axis, count) to correlate the two metrics per period.\n *\n * @example\n * ```tsx\n * import { RevenueOrdersComposedChart } from '@customafk/lunas-ui/features/charts';\n *\n * <RevenueOrdersComposedChart\n * data={[{ date: '2026-06-01', revenue: 12400, orders: 87 }]}\n * />\n * ```\n */\nexport const RevenueOrdersComposedChart = ({\n data,\n revenueLabel = 'Revenue',\n ordersLabel = 'Orders',\n revenueColor = 'var(--chart-1)',\n ordersColor = 'var(--chart-4)',\n revenueFormatter = value => formatCurrency(value),\n ordersFormatter = value => value.toLocaleString('en-US'),\n dateFormatter = toDateLabel,\n showLegend = true,\n showGrid = true,\n className,\n animate = true,\n height,\n}: RevenueOrdersComposedChartProps) => {\n const config = useMemo<ChartConfig>(\n () => ({\n revenue: { label: revenueLabel, color: revenueColor },\n orders: { label: ordersLabel, color: ordersColor },\n }),\n [revenueLabel, revenueColor, ordersLabel, ordersColor]\n );\n\n return (\n <ChartContainer\n data-slot=\"revenue-orders-composed-chart\"\n config={config}\n className={cn('w-full', className)}\n style={height !== undefined ? { height, aspectRatio: 'auto' } : undefined}\n >\n <ComposedChart data={data} margin={{ top: 8, right: 12, bottom: 0, left: 12 }}>\n {showGrid && <CartesianGrid vertical={false} />}\n <XAxis dataKey=\"date\" tickLine={false} axisLine={false} tickMargin={8} tickFormatter={dateFormatter} />\n <YAxis yAxisId=\"revenue\" tickLine={false} axisLine={false} tickMargin={8} width={64} tickFormatter={revenueFormatter} />\n <YAxis\n yAxisId=\"orders\"\n orientation=\"right\"\n tickLine={false}\n axisLine={false}\n tickMargin={8}\n width={48}\n allowDecimals={false}\n tickFormatter={ordersFormatter}\n />\n <ChartTooltip\n content={\n <ChartTooltipContent\n labelFormatter={(_, payload) => {\n const date = payload?.[0]?.payload?.date;\n return date ? dateFormatter(date) : null;\n }}\n formatter={(value, name, item) => (\n <>\n <div className=\"size-2.5 shrink-0 rounded-[2px]\" style={{ backgroundColor: item.color }} />\n <span className=\"text-muted\">{config[String(name)]?.label || name}</span>\n <span className=\"text-text-positive-strong font-number ml-auto font-medium tabular-nums\">\n {name === 'revenue' ? revenueFormatter(Number(value)) : ordersFormatter(Number(value))}\n </span>\n </>\n )}\n />\n }\n />\n <Bar dataKey=\"revenue\" yAxisId=\"revenue\" fill={revenueColor} radius={[4, 4, 0, 0]} isAnimationActive={animate} />\n <Line type=\"natural\" dataKey=\"orders\" yAxisId=\"orders\" stroke={ordersColor} strokeWidth={2} dot={false} isAnimationActive={animate} />\n {showLegend && <ChartLegend content={<ChartLegendContent />} />}\n </ComposedChart>\n </ChartContainer>\n );\n};\n"],"mappings":"mMA8CA,MAAa,GAA8B,CACzC,OACA,eAAe,UACf,cAAc,SACd,eAAe,iBACf,cAAc,iBACd,mBAAmB,GAASA,EAAAA,eAAe,CAAK,EAChD,kBAAkB,GAAS,EAAM,eAAe,OAAO,EACvD,gBAAgBC,EAAAA,YAChB,aAAa,GACb,WAAW,GACX,YACA,UAAU,GACV,YACqC,CACrC,IAAM,GAAA,EAAA,EAAA,QAAA,MACG,CACL,QAAS,CAAE,MAAO,EAAc,MAAO,CAAa,EACpD,OAAQ,CAAE,MAAO,EAAa,MAAO,CAAY,CACnD,GACA,CAAC,EAAc,EAAc,EAAa,CAAW,CACvD,EAEA,OACE,EAAA,EAAA,IAAA,CAACC,EAAAA,eAAD,CACE,YAAU,gCACF,SACR,WAAA,EAAA,EAAA,GAAA,CAAc,SAAU,CAAS,EACjC,MAAO,IAAW,IAAA,GAA8C,IAAA,GAAlC,CAAE,SAAQ,YAAa,MAAO,EAE5D,UAAA,EAAA,EAAA,KAAA,CAACC,EAAAA,cAAD,CAAqB,OAAM,OAAQ,CAAE,IAAK,EAAG,MAAO,GAAI,OAAQ,EAAG,KAAM,EAAG,EAA5E,SAAA,CACG,IAAY,EAAA,EAAA,IAAA,CAACC,EAAAA,cAAD,CAAe,SAAU,EAAQ,CAAA,GAC9C,EAAA,EAAA,IAAA,CAACC,EAAAA,MAAD,CAAO,QAAQ,OAAO,SAAU,GAAO,SAAU,GAAO,WAAY,EAAG,cAAe,CAAgB,CAAA,GACtG,EAAA,EAAA,IAAA,CAACC,EAAAA,MAAD,CAAO,QAAQ,UAAU,SAAU,GAAO,SAAU,GAAO,WAAY,EAAG,MAAO,GAAI,cAAe,CAAmB,CAAA,GACvH,EAAA,EAAA,IAAA,CAACA,EAAAA,MAAD,CACE,QAAQ,SACR,YAAY,QACZ,SAAU,GACV,SAAU,GACV,WAAY,EACZ,MAAO,GACP,cAAe,GACf,cAAe,CAChB,CAAA,GACD,EAAA,EAAA,IAAA,CAACC,EAAAA,aAAD,CACE,SACE,EAAA,EAAA,IAAA,CAACC,EAAAA,oBAAD,CACE,gBAAiB,EAAG,IAAY,CAC9B,IAAM,EAAO,IAAU,EAAE,EAAE,SAAS,KACpC,OAAO,EAAO,EAAc,CAAI,EAAI,IACtC,EACA,WAAY,EAAO,EAAM,KACvB,EAAA,EAAA,KAAA,CAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,kCAAkC,MAAO,CAAE,gBAAiB,EAAK,KAAM,CAAI,CAAA,GAC1F,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAU,aAAc,SAAA,EAAO,OAAO,CAAI,EAAE,EAAE,OAAS,CAAW,CAAA,GACxE,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAU,yEACb,SAAA,IAAS,UAAY,EAAiB,OAAO,CAAK,CAAC,EAAI,EAAgB,OAAO,CAAK,CAAC,CACjF,CAAA,CACN,CAAA,CAAA,CAEL,CAAA,CAEJ,CAAA,GACD,EAAA,EAAA,IAAA,CAACC,EAAAA,IAAD,CAAK,QAAQ,UAAU,QAAQ,UAAU,KAAM,EAAc,OAAQ,CAAC,EAAG,EAAG,EAAG,CAAC,EAAG,kBAAmB,CAAU,CAAA,GAChH,EAAA,EAAA,IAAA,CAACC,EAAAA,KAAD,CAAM,KAAK,UAAU,QAAQ,SAAS,QAAQ,SAAS,OAAQ,EAAa,YAAa,EAAG,IAAK,GAAO,kBAAmB,CAAU,CAAA,EACpI,IAAc,EAAA,EAAA,IAAA,CAACC,EAAAA,YAAD,CAAa,SAAS,EAAA,EAAA,IAAA,CAACC,EAAAA,mBAAD,CAAqB,CAAA,CAAI,CAAA,CACjD,GACD,CAAA,CAEpB"}
@@ -1 +1 @@
1
- {"version":3,"file":"revenue-orders-composed-chart-DwkbWZSX.mjs","names":[],"sources":["../packages/components/features/charts/components/revenue-orders-composed-chart.tsx"],"sourcesContent":["'use client';\n\nimport { useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { type ChartConfig, ChartContainer, ChartLegend, ChartLegendContent, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart';\n\nimport { Bar, CartesianGrid, ComposedChart, Line, XAxis, YAxis } from 'recharts';\nimport type { BaseChartProps } from '../types';\nimport { formatCurrency, toDateLabel } from '../utils';\n\nexport type RevenueOrdersPoint = {\n date: string | Date;\n revenue: number;\n orders: number;\n};\n\nexport type RevenueOrdersComposedChartProps = BaseChartProps & {\n data: RevenueOrdersPoint[];\n revenueLabel?: string;\n ordersLabel?: string;\n revenueColor?: string;\n ordersColor?: string;\n /** Formats the left (revenue) axis and tooltip values. Defaults to compact currency. */\n revenueFormatter?: (value: number) => string;\n /** Formats the right (orders) axis and tooltip values. */\n ordersFormatter?: (value: number) => string;\n dateFormatter?: (date: string | Date) => string;\n showLegend?: boolean;\n showGrid?: boolean;\n};\n\n/**\n * A dual-axis chart combining revenue bars (left axis, currency) with an orders line\n * (right axis, count) to correlate the two metrics per period.\n *\n * @example\n * ```tsx\n * import { RevenueOrdersComposedChart } from '@customafk/lunas-ui/features/charts';\n *\n * <RevenueOrdersComposedChart\n * data={[{ date: '2026-06-01', revenue: 12400, orders: 87 }]}\n * />\n * ```\n */\nexport const RevenueOrdersComposedChart = ({\n data,\n revenueLabel = 'Revenue',\n ordersLabel = 'Orders',\n revenueColor = 'var(--chart-1)',\n ordersColor = 'var(--chart-4)',\n revenueFormatter = value => formatCurrency(value),\n ordersFormatter = value => value.toLocaleString('en-US'),\n dateFormatter = toDateLabel,\n showLegend = true,\n showGrid = true,\n className,\n animate = true,\n height,\n}: RevenueOrdersComposedChartProps) => {\n const config = useMemo<ChartConfig>(\n () => ({\n revenue: { label: revenueLabel, color: revenueColor },\n orders: { label: ordersLabel, color: ordersColor },\n }),\n [revenueLabel, revenueColor, ordersLabel, ordersColor]\n );\n\n return (\n <ChartContainer\n data-slot=\"revenue-orders-composed-chart\"\n config={config}\n className={cn('w-full', className)}\n style={height !== undefined ? { height, aspectRatio: 'auto' } : undefined}\n >\n <ComposedChart data={data} margin={{ top: 8, right: 12, bottom: 0, left: 12 }}>\n {showGrid && <CartesianGrid vertical={false} />}\n <XAxis dataKey=\"date\" tickLine={false} axisLine={false} tickMargin={8} tickFormatter={dateFormatter} />\n <YAxis yAxisId=\"revenue\" tickLine={false} axisLine={false} tickMargin={8} width={64} tickFormatter={revenueFormatter} />\n <YAxis\n yAxisId=\"orders\"\n orientation=\"right\"\n tickLine={false}\n axisLine={false}\n tickMargin={8}\n width={48}\n allowDecimals={false}\n tickFormatter={ordersFormatter}\n />\n <ChartTooltip\n content={\n <ChartTooltipContent\n labelFormatter={(_, payload) => {\n const date = payload?.[0]?.payload?.date;\n return date ? dateFormatter(date) : null;\n }}\n formatter={(value, name, item) => (\n <>\n <div className=\"size-2.5 shrink-0 rounded-[2px]\" style={{ backgroundColor: item.color }} />\n <span className=\"text-muted\">{config[String(name)]?.label || name}</span>\n <span className=\"text-text-positive-strong font-number ml-auto font-medium tabular-nums\">\n {name === 'revenue' ? revenueFormatter(Number(value)) : ordersFormatter(Number(value))}\n </span>\n </>\n )}\n />\n }\n />\n <Bar dataKey=\"revenue\" yAxisId=\"revenue\" fill={revenueColor} radius={[4, 4, 0, 0]} isAnimationActive={animate} />\n <Line type=\"natural\" dataKey=\"orders\" yAxisId=\"orders\" stroke={ordersColor} strokeWidth={2} dot={false} isAnimationActive={animate} />\n {showLegend && <ChartLegend content={<ChartLegendContent />} />}\n </ComposedChart>\n </ChartContainer>\n );\n};\n"],"mappings":"2cA8CA,MAAa,GAA8B,CACzC,OACA,eAAe,UACf,cAAc,SACd,eAAe,iBACf,cAAc,iBACd,mBAAmB,GAAS,EAAe,CAAK,EAChD,kBAAkB,GAAS,EAAM,eAAe,OAAO,EACvD,gBAAgB,EAChB,aAAa,GACb,WAAW,GACX,YACA,UAAU,GACV,YACqC,CACrC,IAAM,EAAS,OACN,CACL,QAAS,CAAE,MAAO,EAAc,MAAO,CAAa,EACpD,OAAQ,CAAE,MAAO,EAAa,MAAO,CAAY,CACnD,GACA,CAAC,EAAc,EAAc,EAAa,CAAW,CACvD,EAEA,OACE,EAAC,EAAD,CACE,YAAU,gCACF,SACR,UAAW,EAAG,SAAU,CAAS,EACjC,MAAO,IAAW,IAAA,GAA8C,IAAA,GAAlC,CAAE,SAAQ,YAAa,MAAO,WAE5D,EAAC,EAAD,CAAqB,OAAM,OAAQ,CAAE,IAAK,EAAG,MAAO,GAAI,OAAQ,EAAG,KAAM,EAAG,WAA5E,CACG,GAAY,EAAC,EAAD,CAAe,SAAU,EAAQ,CAAA,EAC9C,EAAC,EAAD,CAAO,QAAQ,OAAO,SAAU,GAAO,SAAU,GAAO,WAAY,EAAG,cAAe,CAAgB,CAAA,EACtG,EAAC,EAAD,CAAO,QAAQ,UAAU,SAAU,GAAO,SAAU,GAAO,WAAY,EAAG,MAAO,GAAI,cAAe,CAAmB,CAAA,EACvH,EAAC,EAAD,CACE,QAAQ,SACR,YAAY,QACZ,SAAU,GACV,SAAU,GACV,WAAY,EACZ,MAAO,GACP,cAAe,GACf,cAAe,CAChB,CAAA,EACD,EAAC,EAAD,CACE,QACE,EAAC,EAAD,CACE,gBAAiB,EAAG,IAAY,CAC9B,IAAM,EAAO,IAAU,EAAE,EAAE,SAAS,KACpC,OAAO,EAAO,EAAc,CAAI,EAAI,IACtC,EACA,WAAY,EAAO,EAAM,IACvB,EAAA,EAAA,CAAA,SAAA,CACE,EAAC,MAAD,CAAK,UAAU,kCAAkC,MAAO,CAAE,gBAAiB,EAAK,KAAM,CAAI,CAAA,EAC1F,EAAC,OAAD,CAAM,UAAU,sBAAc,EAAO,OAAO,CAAI,EAAE,EAAE,OAAS,CAAW,CAAA,EACxE,EAAC,OAAD,CAAM,UAAU,kFACb,IAAS,UAAY,EAAiB,OAAO,CAAK,CAAC,EAAI,EAAgB,OAAO,CAAK,CAAC,CACjF,CAAA,CACN,CAAA,CAAA,CAEL,CAAA,CAEJ,CAAA,EACD,EAAC,EAAD,CAAK,QAAQ,UAAU,QAAQ,UAAU,KAAM,EAAc,OAAQ,CAAC,EAAG,EAAG,EAAG,CAAC,EAAG,kBAAmB,CAAU,CAAA,EAChH,EAAC,EAAD,CAAM,KAAK,UAAU,QAAQ,SAAS,QAAQ,SAAS,OAAQ,EAAa,YAAa,EAAG,IAAK,GAAO,kBAAmB,CAAU,CAAA,EACpI,GAAc,EAAC,EAAD,CAAa,QAAS,EAAC,EAAD,CAAqB,CAAA,CAAI,CAAA,CACjD,GACD,CAAA,CAEpB"}
1
+ {"version":3,"file":"revenue-orders-composed-chart-DwkbWZSX.mjs","names":[],"sources":["../packages/components/features/charts/components/revenue-orders-composed-chart.tsx"],"sourcesContent":["'use client';\n\nimport { useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { type ChartConfig, ChartContainer, ChartLegend, ChartLegendContent, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart';\n\nimport { Bar, CartesianGrid, ComposedChart, Line, XAxis, YAxis } from 'recharts';\nimport type { BaseChartProps } from '../types';\nimport { formatCurrency, toDateLabel } from '../utils';\n\nexport type RevenueOrdersPoint = {\n date: string | Date;\n revenue: number;\n orders: number;\n};\n\nexport type RevenueOrdersComposedChartProps = BaseChartProps & {\n data: RevenueOrdersPoint[];\n revenueLabel?: string;\n ordersLabel?: string;\n revenueColor?: string;\n ordersColor?: string;\n /** Formats the left (revenue) axis and tooltip values. Defaults to compact currency. */\n revenueFormatter?: (value: number) => string;\n /** Formats the right (orders) axis and tooltip values. */\n ordersFormatter?: (value: number) => string;\n dateFormatter?: (date: string | Date) => string;\n showLegend?: boolean;\n showGrid?: boolean;\n};\n\n/**\n * A dual-axis chart combining revenue bars (left axis, currency) with an orders line\n * (right axis, count) to correlate the two metrics per period.\n *\n * @example\n * ```tsx\n * import { RevenueOrdersComposedChart } from '@customafk/lunas-ui/features/charts';\n *\n * <RevenueOrdersComposedChart\n * data={[{ date: '2026-06-01', revenue: 12400, orders: 87 }]}\n * />\n * ```\n */\nexport const RevenueOrdersComposedChart = ({\n data,\n revenueLabel = 'Revenue',\n ordersLabel = 'Orders',\n revenueColor = 'var(--chart-1)',\n ordersColor = 'var(--chart-4)',\n revenueFormatter = value => formatCurrency(value),\n ordersFormatter = value => value.toLocaleString('en-US'),\n dateFormatter = toDateLabel,\n showLegend = true,\n showGrid = true,\n className,\n animate = true,\n height,\n}: RevenueOrdersComposedChartProps) => {\n const config = useMemo<ChartConfig>(\n () => ({\n revenue: { label: revenueLabel, color: revenueColor },\n orders: { label: ordersLabel, color: ordersColor },\n }),\n [revenueLabel, revenueColor, ordersLabel, ordersColor]\n );\n\n return (\n <ChartContainer\n data-slot=\"revenue-orders-composed-chart\"\n config={config}\n className={cn('w-full', className)}\n style={height !== undefined ? { height, aspectRatio: 'auto' } : undefined}\n >\n <ComposedChart data={data} margin={{ top: 8, right: 12, bottom: 0, left: 12 }}>\n {showGrid && <CartesianGrid vertical={false} />}\n <XAxis dataKey=\"date\" tickLine={false} axisLine={false} tickMargin={8} tickFormatter={dateFormatter} />\n <YAxis yAxisId=\"revenue\" tickLine={false} axisLine={false} tickMargin={8} width={64} tickFormatter={revenueFormatter} />\n <YAxis\n yAxisId=\"orders\"\n orientation=\"right\"\n tickLine={false}\n axisLine={false}\n tickMargin={8}\n width={48}\n allowDecimals={false}\n tickFormatter={ordersFormatter}\n />\n <ChartTooltip\n content={\n <ChartTooltipContent\n labelFormatter={(_, payload) => {\n const date = payload?.[0]?.payload?.date;\n return date ? dateFormatter(date) : null;\n }}\n formatter={(value, name, item) => (\n <>\n <div className=\"size-2.5 shrink-0 rounded-[2px]\" style={{ backgroundColor: item.color }} />\n <span className=\"text-muted\">{config[String(name)]?.label || name}</span>\n <span className=\"text-text-positive-strong font-number ml-auto font-medium tabular-nums\">\n {name === 'revenue' ? revenueFormatter(Number(value)) : ordersFormatter(Number(value))}\n </span>\n </>\n )}\n />\n }\n />\n <Bar dataKey=\"revenue\" yAxisId=\"revenue\" fill={revenueColor} radius={[4, 4, 0, 0]} isAnimationActive={animate} />\n <Line type=\"natural\" dataKey=\"orders\" yAxisId=\"orders\" stroke={ordersColor} strokeWidth={2} dot={false} isAnimationActive={animate} />\n {showLegend && <ChartLegend content={<ChartLegendContent />} />}\n </ComposedChart>\n </ChartContainer>\n );\n};\n"],"mappings":"2cA8CA,MAAa,GAA8B,CACzC,OACA,eAAe,UACf,cAAc,SACd,eAAe,iBACf,cAAc,iBACd,mBAAmB,GAAS,EAAe,CAAK,EAChD,kBAAkB,GAAS,EAAM,eAAe,OAAO,EACvD,gBAAgB,EAChB,aAAa,GACb,WAAW,GACX,YACA,UAAU,GACV,YACqC,CACrC,IAAM,EAAS,OACN,CACL,QAAS,CAAE,MAAO,EAAc,MAAO,CAAa,EACpD,OAAQ,CAAE,MAAO,EAAa,MAAO,CAAY,CACnD,GACA,CAAC,EAAc,EAAc,EAAa,CAAW,CACvD,EAEA,OACE,EAAC,EAAD,CACE,YAAU,gCACF,SACR,UAAW,EAAG,SAAU,CAAS,EACjC,MAAO,IAAW,IAAA,GAA8C,IAAA,GAAlC,CAAE,SAAQ,YAAa,MAAO,EAE5D,SAAA,EAAC,EAAD,CAAqB,OAAM,OAAQ,CAAE,IAAK,EAAG,MAAO,GAAI,OAAQ,EAAG,KAAM,EAAG,EAA5E,SAAA,CACG,GAAY,EAAC,EAAD,CAAe,SAAU,EAAQ,CAAA,EAC9C,EAAC,EAAD,CAAO,QAAQ,OAAO,SAAU,GAAO,SAAU,GAAO,WAAY,EAAG,cAAe,CAAgB,CAAA,EACtG,EAAC,EAAD,CAAO,QAAQ,UAAU,SAAU,GAAO,SAAU,GAAO,WAAY,EAAG,MAAO,GAAI,cAAe,CAAmB,CAAA,EACvH,EAAC,EAAD,CACE,QAAQ,SACR,YAAY,QACZ,SAAU,GACV,SAAU,GACV,WAAY,EACZ,MAAO,GACP,cAAe,GACf,cAAe,CAChB,CAAA,EACD,EAAC,EAAD,CACE,QACE,EAAC,EAAD,CACE,gBAAiB,EAAG,IAAY,CAC9B,IAAM,EAAO,IAAU,EAAE,EAAE,SAAS,KACpC,OAAO,EAAO,EAAc,CAAI,EAAI,IACtC,EACA,WAAY,EAAO,EAAM,IACvB,EAAA,EAAA,CAAA,SAAA,CACE,EAAC,MAAD,CAAK,UAAU,kCAAkC,MAAO,CAAE,gBAAiB,EAAK,KAAM,CAAI,CAAA,EAC1F,EAAC,OAAD,CAAM,UAAU,aAAc,SAAA,EAAO,OAAO,CAAI,EAAE,EAAE,OAAS,CAAW,CAAA,EACxE,EAAC,OAAD,CAAM,UAAU,yEACb,SAAA,IAAS,UAAY,EAAiB,OAAO,CAAK,CAAC,EAAI,EAAgB,OAAO,CAAK,CAAC,CACjF,CAAA,CACN,CAAA,CAAA,CAEL,CAAA,CAEJ,CAAA,EACD,EAAC,EAAD,CAAK,QAAQ,UAAU,QAAQ,UAAU,KAAM,EAAc,OAAQ,CAAC,EAAG,EAAG,EAAG,CAAC,EAAG,kBAAmB,CAAU,CAAA,EAChH,EAAC,EAAD,CAAM,KAAK,UAAU,QAAQ,SAAS,QAAQ,SAAS,OAAQ,EAAa,YAAa,EAAG,IAAK,GAAO,kBAAmB,CAAU,CAAA,EACpI,GAAc,EAAC,EAAD,CAAa,QAAS,EAAC,EAAD,CAAqB,CAAA,CAAI,CAAA,CACjD,GACD,CAAA,CAEpB"}
@@ -1,8 +1,8 @@
1
1
  import { r as ERole } from "./types-cKvPPVBe.cjs";
2
-
3
2
  //#region packages/components/data-display/role-badge.d.ts
4
3
  type RoleBadgeProps = {
5
- /** The user role enum value that determines the badge label and colour. */status: ERole;
4
+ /** The user role enum value that determines the badge label and colour. */
5
+ status: ERole;
6
6
  };
7
7
  /**
8
8
  * Renders a colour-coded badge for a user role (e.g. Admin, Staff, User).
@@ -18,4 +18,4 @@ type RoleBadgeProps = {
18
18
  declare const RoleBadge: React.FC<RoleBadgeProps>;
19
19
  //#endregion
20
20
  export { RoleBadge as t };
21
- //# sourceMappingURL=role-badge-IdZW0tsN.d.cts.map
21
+ //# sourceMappingURL=role-badge-CojpT6hX.d.cts.map
@@ -1,8 +1,8 @@
1
1
  import { r as ERole } from "./types-cKvPPVBe.mjs";
2
-
3
2
  //#region packages/components/data-display/role-badge.d.ts
4
3
  type RoleBadgeProps = {
5
- /** The user role enum value that determines the badge label and colour. */status: ERole;
4
+ /** The user role enum value that determines the badge label and colour. */
5
+ status: ERole;
6
6
  };
7
7
  /**
8
8
  * Renders a colour-coded badge for a user role (e.g. Admin, Staff, User).
@@ -18,4 +18,4 @@ type RoleBadgeProps = {
18
18
  declare const RoleBadge: React.FC<RoleBadgeProps>;
19
19
  //#endregion
20
20
  export { RoleBadge as t };
21
- //# sourceMappingURL=role-badge-Bl4Rimpk.d.mts.map
21
+ //# sourceMappingURL=role-badge-NTpnTz8M.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sales-target-radial-chart-BFLxBT2m.mjs","names":[],"sources":["../packages/components/features/charts/components/sales-target-radial-chart.tsx"],"sourcesContent":["'use client';\n\nimport { useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { type ChartConfig, ChartContainer } from '@/components/ui/chart';\n\nimport { Label, PolarAngleAxis, PolarRadiusAxis, RadialBar, RadialBarChart } from 'recharts';\nimport type { BaseChartProps } from '../types';\nimport { formatPercent } from '../utils';\n\nexport type SalesTargetRadialChartProps = BaseChartProps & {\n /** Current progress value, e.g. revenue to date. */\n value: number;\n /** The goal the value is measured against. */\n target: number;\n /** Text under the center figure. Defaults to `'Target'`. */\n label?: string;\n /** Formats the center figure. Defaults to percent-of-target. */\n valueFormatter?: (value: number, target: number) => string;\n color?: string;\n};\n\n/**\n * A radial gauge showing progress toward a sales target with the completion figure in the center.\n *\n * @example\n * ```tsx\n * import { SalesTargetRadialChart } from '@customafk/lunas-ui/features/charts';\n *\n * <SalesTargetRadialChart value={65_000} target={100_000} label=\"Monthly target\" />\n * ```\n */\nexport const SalesTargetRadialChart = ({\n value,\n target,\n label = 'Target',\n valueFormatter = (current, goal) => formatPercent(goal === 0 ? 0 : current / goal),\n color = 'var(--chart-1)',\n className,\n animate = true,\n height,\n}: SalesTargetRadialChartProps) => {\n const chartData = useMemo(() => [{ name: 'progress', value: Math.min(Math.max(value, 0), target), fill: color }], [value, target, color]);\n\n const config = useMemo<ChartConfig>(() => ({ progress: { label, color } }), [label, color]);\n\n return (\n <ChartContainer\n data-slot=\"sales-target-radial-chart\"\n config={config}\n className={cn('mx-auto', height === undefined && 'aspect-square', className)}\n style={height !== undefined ? { height, aspectRatio: 'auto' } : undefined}\n >\n <RadialBarChart data={chartData} startAngle={90} endAngle={-270} innerRadius=\"75%\" outerRadius=\"100%\">\n <PolarAngleAxis type=\"number\" domain={[0, target]} angleAxisId={0} tick={false} />\n <RadialBar dataKey=\"value\" angleAxisId={0} background cornerRadius={10} isAnimationActive={animate} />\n <PolarRadiusAxis tick={false} tickLine={false} axisLine={false}>\n <Label\n content={({ viewBox }) => {\n if (!viewBox || !('cx' in viewBox) || !('cy' in viewBox)) return null;\n return (\n <text x={viewBox.cx} y={viewBox.cy} textAnchor=\"middle\" dominantBaseline=\"middle\">\n <tspan x={viewBox.cx} y={viewBox.cy} className=\"fill-text-positive-strong font-number text-3xl font-bold\">\n {valueFormatter(value, target)}\n </tspan>\n <tspan x={viewBox.cx} y={(viewBox.cy || 0) + 24} className=\"fill-muted text-xs\">\n {label}\n </tspan>\n </text>\n );\n }}\n />\n </PolarRadiusAxis>\n </RadialBarChart>\n </ChartContainer>\n );\n};\n"],"mappings":"+VAkCA,MAAa,GAA0B,CACrC,QACA,SACA,QAAQ,SACR,kBAAkB,EAAS,IAAS,EAAc,IAAS,EAAI,EAAI,EAAU,CAAI,EACjF,QAAQ,iBACR,YACA,UAAU,GACV,YACiC,CACjC,IAAM,EAAY,MAAc,CAAC,CAAE,KAAM,WAAY,MAAO,KAAK,IAAI,KAAK,IAAI,EAAO,CAAC,EAAG,CAAM,EAAG,KAAM,CAAM,CAAC,EAAG,CAAC,EAAO,EAAQ,CAAK,CAAC,EAIxI,OACE,EAAC,EAAD,CACE,YAAU,4BACV,OALW,OAA4B,CAAE,SAAU,CAAE,QAAO,OAAM,CAAE,GAAI,CAAC,EAAO,CAAK,CAKxE,EACb,UAAW,EAAG,UAAW,IAAW,IAAA,IAAa,gBAAiB,CAAS,EAC3E,MAAO,IAAW,IAAA,GAA8C,IAAA,GAAlC,CAAE,SAAQ,YAAa,MAAO,WAE5D,EAAC,EAAD,CAAgB,KAAM,EAAW,WAAY,GAAI,SAAU,KAAM,YAAY,MAAM,YAAY,gBAA/F,CACE,EAAC,EAAD,CAAgB,KAAK,SAAS,OAAQ,CAAC,EAAG,CAAM,EAAG,YAAa,EAAG,KAAM,EAAQ,CAAA,EACjF,EAAC,EAAD,CAAW,QAAQ,QAAQ,YAAa,EAAG,WAAA,GAAW,aAAc,GAAI,kBAAmB,CAAU,CAAA,EACrG,EAAC,EAAD,CAAiB,KAAM,GAAO,SAAU,GAAO,SAAU,YACvD,EAAC,EAAD,CACE,SAAU,CAAE,aACN,CAAC,GAAW,EAAE,OAAQ,IAAY,EAAE,OAAQ,GAAiB,KAE/D,EAAC,OAAD,CAAM,EAAG,EAAQ,GAAI,EAAG,EAAQ,GAAI,WAAW,SAAS,iBAAiB,kBAAzE,CACE,EAAC,QAAD,CAAO,EAAG,EAAQ,GAAI,EAAG,EAAQ,GAAI,UAAU,oEAC5C,EAAe,EAAO,CAAM,CACxB,CAAA,EACP,EAAC,QAAD,CAAO,EAAG,EAAQ,GAAI,GAAI,EAAQ,IAAM,GAAK,GAAI,UAAU,8BACxD,CACI,CAAA,CACH,GAGX,CAAA,CACc,CAAA,CACH,GACF,CAAA,CAEpB"}
1
+ {"version":3,"file":"sales-target-radial-chart-BFLxBT2m.mjs","names":[],"sources":["../packages/components/features/charts/components/sales-target-radial-chart.tsx"],"sourcesContent":["'use client';\n\nimport { useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { type ChartConfig, ChartContainer } from '@/components/ui/chart';\n\nimport { Label, PolarAngleAxis, PolarRadiusAxis, RadialBar, RadialBarChart } from 'recharts';\nimport type { BaseChartProps } from '../types';\nimport { formatPercent } from '../utils';\n\nexport type SalesTargetRadialChartProps = BaseChartProps & {\n /** Current progress value, e.g. revenue to date. */\n value: number;\n /** The goal the value is measured against. */\n target: number;\n /** Text under the center figure. Defaults to `'Target'`. */\n label?: string;\n /** Formats the center figure. Defaults to percent-of-target. */\n valueFormatter?: (value: number, target: number) => string;\n color?: string;\n};\n\n/**\n * A radial gauge showing progress toward a sales target with the completion figure in the center.\n *\n * @example\n * ```tsx\n * import { SalesTargetRadialChart } from '@customafk/lunas-ui/features/charts';\n *\n * <SalesTargetRadialChart value={65_000} target={100_000} label=\"Monthly target\" />\n * ```\n */\nexport const SalesTargetRadialChart = ({\n value,\n target,\n label = 'Target',\n valueFormatter = (current, goal) => formatPercent(goal === 0 ? 0 : current / goal),\n color = 'var(--chart-1)',\n className,\n animate = true,\n height,\n}: SalesTargetRadialChartProps) => {\n const chartData = useMemo(() => [{ name: 'progress', value: Math.min(Math.max(value, 0), target), fill: color }], [value, target, color]);\n\n const config = useMemo<ChartConfig>(() => ({ progress: { label, color } }), [label, color]);\n\n return (\n <ChartContainer\n data-slot=\"sales-target-radial-chart\"\n config={config}\n className={cn('mx-auto', height === undefined && 'aspect-square', className)}\n style={height !== undefined ? { height, aspectRatio: 'auto' } : undefined}\n >\n <RadialBarChart data={chartData} startAngle={90} endAngle={-270} innerRadius=\"75%\" outerRadius=\"100%\">\n <PolarAngleAxis type=\"number\" domain={[0, target]} angleAxisId={0} tick={false} />\n <RadialBar dataKey=\"value\" angleAxisId={0} background cornerRadius={10} isAnimationActive={animate} />\n <PolarRadiusAxis tick={false} tickLine={false} axisLine={false}>\n <Label\n content={({ viewBox }) => {\n if (!viewBox || !('cx' in viewBox) || !('cy' in viewBox)) return null;\n return (\n <text x={viewBox.cx} y={viewBox.cy} textAnchor=\"middle\" dominantBaseline=\"middle\">\n <tspan x={viewBox.cx} y={viewBox.cy} className=\"fill-text-positive-strong font-number text-3xl font-bold\">\n {valueFormatter(value, target)}\n </tspan>\n <tspan x={viewBox.cx} y={(viewBox.cy || 0) + 24} className=\"fill-muted text-xs\">\n {label}\n </tspan>\n </text>\n );\n }}\n />\n </PolarRadiusAxis>\n </RadialBarChart>\n </ChartContainer>\n );\n};\n"],"mappings":"+VAkCA,MAAa,GAA0B,CACrC,QACA,SACA,QAAQ,SACR,kBAAkB,EAAS,IAAS,EAAc,IAAS,EAAI,EAAI,EAAU,CAAI,EACjF,QAAQ,iBACR,YACA,UAAU,GACV,YACiC,CACjC,IAAM,EAAY,MAAc,CAAC,CAAE,KAAM,WAAY,MAAO,KAAK,IAAI,KAAK,IAAI,EAAO,CAAC,EAAG,CAAM,EAAG,KAAM,CAAM,CAAC,EAAG,CAAC,EAAO,EAAQ,CAAK,CAAC,EAIxI,OACE,EAAC,EAAD,CACE,YAAU,4BACV,OALW,OAA4B,CAAE,SAAU,CAAE,QAAO,OAAM,CAAE,GAAI,CAAC,EAAO,CAAK,CAKxE,EACb,UAAW,EAAG,UAAW,IAAW,IAAA,IAAa,gBAAiB,CAAS,EAC3E,MAAO,IAAW,IAAA,GAA8C,IAAA,GAAlC,CAAE,SAAQ,YAAa,MAAO,EAE5D,SAAA,EAAC,EAAD,CAAgB,KAAM,EAAW,WAAY,GAAI,SAAU,KAAM,YAAY,MAAM,YAAY,OAA/F,SAAA,CACE,EAAC,EAAD,CAAgB,KAAK,SAAS,OAAQ,CAAC,EAAG,CAAM,EAAG,YAAa,EAAG,KAAM,EAAQ,CAAA,EACjF,EAAC,EAAD,CAAW,QAAQ,QAAQ,YAAa,EAAG,WAAA,GAAW,aAAc,GAAI,kBAAmB,CAAU,CAAA,EACrG,EAAC,EAAD,CAAiB,KAAM,GAAO,SAAU,GAAO,SAAU,GACvD,SAAA,EAAC,EAAD,CACE,SAAU,CAAE,aACN,CAAC,GAAW,EAAE,OAAQ,IAAY,EAAE,OAAQ,GAAiB,KAE/D,EAAC,OAAD,CAAM,EAAG,EAAQ,GAAI,EAAG,EAAQ,GAAI,WAAW,SAAS,iBAAiB,SAAzE,SAAA,CACE,EAAC,QAAD,CAAO,EAAG,EAAQ,GAAI,EAAG,EAAQ,GAAI,UAAU,2DAC5C,SAAA,EAAe,EAAO,CAAM,CACxB,CAAA,EACP,EAAC,QAAD,CAAO,EAAG,EAAQ,GAAI,GAAI,EAAQ,IAAM,GAAK,GAAI,UAAU,qBACxD,SAAA,CACI,CAAA,CACH,GAGX,CAAA,CACc,CAAA,CACH,GACF,CAAA,CAEpB"}
@@ -1 +1 @@
1
- {"version":3,"file":"sales-target-radial-chart-BoxSk7hW.cjs","names":["formatPercent","ChartContainer","RadialBarChart","PolarAngleAxis","RadialBar","PolarRadiusAxis","Label"],"sources":["../packages/components/features/charts/components/sales-target-radial-chart.tsx"],"sourcesContent":["'use client';\n\nimport { useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { type ChartConfig, ChartContainer } from '@/components/ui/chart';\n\nimport { Label, PolarAngleAxis, PolarRadiusAxis, RadialBar, RadialBarChart } from 'recharts';\nimport type { BaseChartProps } from '../types';\nimport { formatPercent } from '../utils';\n\nexport type SalesTargetRadialChartProps = BaseChartProps & {\n /** Current progress value, e.g. revenue to date. */\n value: number;\n /** The goal the value is measured against. */\n target: number;\n /** Text under the center figure. Defaults to `'Target'`. */\n label?: string;\n /** Formats the center figure. Defaults to percent-of-target. */\n valueFormatter?: (value: number, target: number) => string;\n color?: string;\n};\n\n/**\n * A radial gauge showing progress toward a sales target with the completion figure in the center.\n *\n * @example\n * ```tsx\n * import { SalesTargetRadialChart } from '@customafk/lunas-ui/features/charts';\n *\n * <SalesTargetRadialChart value={65_000} target={100_000} label=\"Monthly target\" />\n * ```\n */\nexport const SalesTargetRadialChart = ({\n value,\n target,\n label = 'Target',\n valueFormatter = (current, goal) => formatPercent(goal === 0 ? 0 : current / goal),\n color = 'var(--chart-1)',\n className,\n animate = true,\n height,\n}: SalesTargetRadialChartProps) => {\n const chartData = useMemo(() => [{ name: 'progress', value: Math.min(Math.max(value, 0), target), fill: color }], [value, target, color]);\n\n const config = useMemo<ChartConfig>(() => ({ progress: { label, color } }), [label, color]);\n\n return (\n <ChartContainer\n data-slot=\"sales-target-radial-chart\"\n config={config}\n className={cn('mx-auto', height === undefined && 'aspect-square', className)}\n style={height !== undefined ? { height, aspectRatio: 'auto' } : undefined}\n >\n <RadialBarChart data={chartData} startAngle={90} endAngle={-270} innerRadius=\"75%\" outerRadius=\"100%\">\n <PolarAngleAxis type=\"number\" domain={[0, target]} angleAxisId={0} tick={false} />\n <RadialBar dataKey=\"value\" angleAxisId={0} background cornerRadius={10} isAnimationActive={animate} />\n <PolarRadiusAxis tick={false} tickLine={false} axisLine={false}>\n <Label\n content={({ viewBox }) => {\n if (!viewBox || !('cx' in viewBox) || !('cy' in viewBox)) return null;\n return (\n <text x={viewBox.cx} y={viewBox.cy} textAnchor=\"middle\" dominantBaseline=\"middle\">\n <tspan x={viewBox.cx} y={viewBox.cy} className=\"fill-text-positive-strong font-number text-3xl font-bold\">\n {valueFormatter(value, target)}\n </tspan>\n <tspan x={viewBox.cx} y={(viewBox.cy || 0) + 24} className=\"fill-muted text-xs\">\n {label}\n </tspan>\n </text>\n );\n }}\n />\n </PolarRadiusAxis>\n </RadialBarChart>\n </ChartContainer>\n );\n};\n"],"mappings":"mMAkCA,MAAa,GAA0B,CACrC,QACA,SACA,QAAQ,SACR,kBAAkB,EAAS,IAASA,EAAAA,cAAc,IAAS,EAAI,EAAI,EAAU,CAAI,EACjF,QAAQ,iBACR,YACA,UAAU,GACV,YACiC,CACjC,IAAM,GAAA,EAAA,EAAA,QAAA,KAA0B,CAAC,CAAE,KAAM,WAAY,MAAO,KAAK,IAAI,KAAK,IAAI,EAAO,CAAC,EAAG,CAAM,EAAG,KAAM,CAAM,CAAC,EAAG,CAAC,EAAO,EAAQ,CAAK,CAAC,EAIxI,OACE,EAAA,EAAA,IAAA,CAACC,EAAAA,eAAD,CACE,YAAU,4BACV,QAAA,EAAA,EAAA,QAAA,MALuC,CAAE,SAAU,CAAE,QAAO,OAAM,CAAE,GAAI,CAAC,EAAO,CAAK,CAKxE,EACb,WAAA,EAAA,EAAA,GAAA,CAAc,UAAW,IAAW,IAAA,IAAa,gBAAiB,CAAS,EAC3E,MAAO,IAAW,IAAA,GAA8C,IAAA,GAAlC,CAAE,SAAQ,YAAa,MAAO,YAE5D,EAAA,EAAA,KAAA,CAACC,EAAAA,eAAD,CAAgB,KAAM,EAAW,WAAY,GAAI,SAAU,KAAM,YAAY,MAAM,YAAY,gBAA/F,EACE,EAAA,EAAA,IAAA,CAACC,EAAAA,eAAD,CAAgB,KAAK,SAAS,OAAQ,CAAC,EAAG,CAAM,EAAG,YAAa,EAAG,KAAM,EAAQ,CAAA,GACjF,EAAA,EAAA,IAAA,CAACC,EAAAA,UAAD,CAAW,QAAQ,QAAQ,YAAa,EAAG,WAAA,GAAW,aAAc,GAAI,kBAAmB,CAAU,CAAA,GACrG,EAAA,EAAA,IAAA,CAACC,EAAAA,gBAAD,CAAiB,KAAM,GAAO,SAAU,GAAO,SAAU,aACvD,EAAA,EAAA,IAAA,CAACC,EAAAA,MAAD,CACE,SAAU,CAAE,aACN,CAAC,GAAW,EAAE,OAAQ,IAAY,EAAE,OAAQ,GAAiB,MAE/D,EAAA,EAAA,KAAA,CAAC,OAAD,CAAM,EAAG,EAAQ,GAAI,EAAG,EAAQ,GAAI,WAAW,SAAS,iBAAiB,kBAAzE,EACE,EAAA,EAAA,IAAA,CAAC,QAAD,CAAO,EAAG,EAAQ,GAAI,EAAG,EAAQ,GAAI,UAAU,oEAC5C,EAAe,EAAO,CAAM,CACxB,CAAA,GACP,EAAA,EAAA,IAAA,CAAC,QAAD,CAAO,EAAG,EAAQ,GAAI,GAAI,EAAQ,IAAM,GAAK,GAAI,UAAU,8BACxD,CACI,CAAA,CACH,GAGX,CAAA,CACc,CAAA,CACH,GACF,CAAA,CAEpB"}
1
+ {"version":3,"file":"sales-target-radial-chart-BoxSk7hW.cjs","names":["formatPercent","ChartContainer","RadialBarChart","PolarAngleAxis","RadialBar","PolarRadiusAxis","Label"],"sources":["../packages/components/features/charts/components/sales-target-radial-chart.tsx"],"sourcesContent":["'use client';\n\nimport { useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { type ChartConfig, ChartContainer } from '@/components/ui/chart';\n\nimport { Label, PolarAngleAxis, PolarRadiusAxis, RadialBar, RadialBarChart } from 'recharts';\nimport type { BaseChartProps } from '../types';\nimport { formatPercent } from '../utils';\n\nexport type SalesTargetRadialChartProps = BaseChartProps & {\n /** Current progress value, e.g. revenue to date. */\n value: number;\n /** The goal the value is measured against. */\n target: number;\n /** Text under the center figure. Defaults to `'Target'`. */\n label?: string;\n /** Formats the center figure. Defaults to percent-of-target. */\n valueFormatter?: (value: number, target: number) => string;\n color?: string;\n};\n\n/**\n * A radial gauge showing progress toward a sales target with the completion figure in the center.\n *\n * @example\n * ```tsx\n * import { SalesTargetRadialChart } from '@customafk/lunas-ui/features/charts';\n *\n * <SalesTargetRadialChart value={65_000} target={100_000} label=\"Monthly target\" />\n * ```\n */\nexport const SalesTargetRadialChart = ({\n value,\n target,\n label = 'Target',\n valueFormatter = (current, goal) => formatPercent(goal === 0 ? 0 : current / goal),\n color = 'var(--chart-1)',\n className,\n animate = true,\n height,\n}: SalesTargetRadialChartProps) => {\n const chartData = useMemo(() => [{ name: 'progress', value: Math.min(Math.max(value, 0), target), fill: color }], [value, target, color]);\n\n const config = useMemo<ChartConfig>(() => ({ progress: { label, color } }), [label, color]);\n\n return (\n <ChartContainer\n data-slot=\"sales-target-radial-chart\"\n config={config}\n className={cn('mx-auto', height === undefined && 'aspect-square', className)}\n style={height !== undefined ? { height, aspectRatio: 'auto' } : undefined}\n >\n <RadialBarChart data={chartData} startAngle={90} endAngle={-270} innerRadius=\"75%\" outerRadius=\"100%\">\n <PolarAngleAxis type=\"number\" domain={[0, target]} angleAxisId={0} tick={false} />\n <RadialBar dataKey=\"value\" angleAxisId={0} background cornerRadius={10} isAnimationActive={animate} />\n <PolarRadiusAxis tick={false} tickLine={false} axisLine={false}>\n <Label\n content={({ viewBox }) => {\n if (!viewBox || !('cx' in viewBox) || !('cy' in viewBox)) return null;\n return (\n <text x={viewBox.cx} y={viewBox.cy} textAnchor=\"middle\" dominantBaseline=\"middle\">\n <tspan x={viewBox.cx} y={viewBox.cy} className=\"fill-text-positive-strong font-number text-3xl font-bold\">\n {valueFormatter(value, target)}\n </tspan>\n <tspan x={viewBox.cx} y={(viewBox.cy || 0) + 24} className=\"fill-muted text-xs\">\n {label}\n </tspan>\n </text>\n );\n }}\n />\n </PolarRadiusAxis>\n </RadialBarChart>\n </ChartContainer>\n );\n};\n"],"mappings":"mMAkCA,MAAa,GAA0B,CACrC,QACA,SACA,QAAQ,SACR,kBAAkB,EAAS,IAASA,EAAAA,cAAc,IAAS,EAAI,EAAI,EAAU,CAAI,EACjF,QAAQ,iBACR,YACA,UAAU,GACV,YACiC,CACjC,IAAM,GAAA,EAAA,EAAA,QAAA,KAA0B,CAAC,CAAE,KAAM,WAAY,MAAO,KAAK,IAAI,KAAK,IAAI,EAAO,CAAC,EAAG,CAAM,EAAG,KAAM,CAAM,CAAC,EAAG,CAAC,EAAO,EAAQ,CAAK,CAAC,EAIxI,OACE,EAAA,EAAA,IAAA,CAACC,EAAAA,eAAD,CACE,YAAU,4BACV,QAAA,EAAA,EAAA,QAAA,MALuC,CAAE,SAAU,CAAE,QAAO,OAAM,CAAE,GAAI,CAAC,EAAO,CAAK,CAKxE,EACb,WAAA,EAAA,EAAA,GAAA,CAAc,UAAW,IAAW,IAAA,IAAa,gBAAiB,CAAS,EAC3E,MAAO,IAAW,IAAA,GAA8C,IAAA,GAAlC,CAAE,SAAQ,YAAa,MAAO,EAE5D,UAAA,EAAA,EAAA,KAAA,CAACC,EAAAA,eAAD,CAAgB,KAAM,EAAW,WAAY,GAAI,SAAU,KAAM,YAAY,MAAM,YAAY,OAA/F,SAAA,EACE,EAAA,EAAA,IAAA,CAACC,EAAAA,eAAD,CAAgB,KAAK,SAAS,OAAQ,CAAC,EAAG,CAAM,EAAG,YAAa,EAAG,KAAM,EAAQ,CAAA,GACjF,EAAA,EAAA,IAAA,CAACC,EAAAA,UAAD,CAAW,QAAQ,QAAQ,YAAa,EAAG,WAAA,GAAW,aAAc,GAAI,kBAAmB,CAAU,CAAA,GACrG,EAAA,EAAA,IAAA,CAACC,EAAAA,gBAAD,CAAiB,KAAM,GAAO,SAAU,GAAO,SAAU,GACvD,UAAA,EAAA,EAAA,IAAA,CAACC,EAAAA,MAAD,CACE,SAAU,CAAE,aACN,CAAC,GAAW,EAAE,OAAQ,IAAY,EAAE,OAAQ,GAAiB,MAE/D,EAAA,EAAA,KAAA,CAAC,OAAD,CAAM,EAAG,EAAQ,GAAI,EAAG,EAAQ,GAAI,WAAW,SAAS,iBAAiB,SAAzE,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,QAAD,CAAO,EAAG,EAAQ,GAAI,EAAG,EAAQ,GAAI,UAAU,2DAC5C,SAAA,EAAe,EAAO,CAAM,CACxB,CAAA,GACP,EAAA,EAAA,IAAA,CAAC,QAAD,CAAO,EAAG,EAAQ,GAAI,GAAI,EAAQ,IAAM,GAAK,GAAI,UAAU,qBACxD,SAAA,CACI,CAAA,CACH,GAGX,CAAA,CACc,CAAA,CACH,GACF,CAAA,CAEpB"}
@@ -1 +1 @@
1
- {"version":3,"file":"sankey-flow-chart-CDUqIRMZ.cjs","names":["getChartColor","ChartContainer","Sankey","Rectangle"],"sources":["../packages/components/features/charts/components/sankey-flow-chart.tsx"],"sourcesContent":["'use client';\n\nimport { useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { ChartContainer } from '@/components/ui/chart';\n\nimport type { SankeyLinkProps, SankeyNodeProps } from 'recharts';\nimport { Rectangle, Sankey } from 'recharts';\nimport type { BaseChartProps } from '../types';\nimport { getChartColor } from '../utils';\n\nexport type SankeyFlowNode = {\n name: string;\n color?: string;\n};\n\nexport type SankeyFlowLink = {\n /** Node name, matching an entry in `nodes`. */\n source: string;\n /** Node name, matching an entry in `nodes`. */\n target: string;\n value: number;\n};\n\nexport type SankeyFlowChartProps = BaseChartProps & {\n nodes: Array<SankeyFlowNode | string>;\n links: SankeyFlowLink[];\n valueFormatter?: (value: number) => string;\n nodeWidth?: number;\n nodePadding?: number;\n /** Minimum horizontal space reserved for node labels outside the plot area; grows to fit the longest root/leaf label. Defaults to `170`. */\n labelWidth?: number;\n};\n\n/**\n * A Sankey flow diagram — revenue/cost breakdowns, funnels with branching paths, budget\n * allocation — where band width is proportional to the flow value between named nodes.\n *\n * @example\n * ```tsx\n * import { SankeyFlowChart } from '@customafk/lunas-ui/features/charts';\n *\n * <SankeyFlowChart\n * height={500}\n * nodes={['iPhone', 'Mac', 'Net Sales', 'Cost of Sales', 'Gross Profit']}\n * links={[\n * { source: 'iPhone', target: 'Net Sales', value: 205489 },\n * { source: 'Mac', target: 'Net Sales', value: 40177 },\n * { source: 'Net Sales', target: 'Cost of Sales', value: 223546 },\n * { source: 'Net Sales', target: 'Gross Profit', value: 170782 },\n * ]}\n * />\n * ```\n */\nconst estimateLabelWidth = (label: string): number => label.length * 5.6 + 14;\n\nexport const SankeyFlowChart = ({\n nodes,\n links,\n valueFormatter = value => value.toLocaleString('en-US'),\n nodeWidth = 14,\n nodePadding = 24,\n labelWidth = 170,\n className,\n animate = true,\n height,\n}: SankeyFlowChartProps) => {\n const { data, colorByName, effectiveLabelWidth, rootNames, leafNames } = useMemo(() => {\n const nodeList = nodes.map(node => (typeof node === 'string' ? { name: node } : node));\n const nameToIndex = new Map(nodeList.map((node, index) => [node.name, index]));\n const colors = new Map(nodeList.map((node, index) => [node.name, node.color || getChartColor(index)]));\n\n const sankeyLinks = links\n .map(link => ({ source: nameToIndex.get(link.source), target: nameToIndex.get(link.target), value: link.value }))\n .filter((link): link is { source: number; target: number; value: number } => link.source !== undefined && link.target !== undefined);\n\n // Computed from our own link list rather than trusting recharts' `payload.depth`/`sourceLinks`\n // at render time — the latter don't reliably flag terminal (leaf) nodes as such.\n const hasIncoming = new Set(sankeyLinks.map(link => link.target));\n const hasOutgoing = new Set(sankeyLinks.map(link => link.source));\n const roots = new Set(nodeList.filter((_, index) => !hasIncoming.has(index)).map(node => node.name));\n const leaves = new Set(nodeList.filter((_, index) => !hasOutgoing.has(index)).map(node => node.name));\n\n // Only root/leaf nodes get side labels using this margin; widen it to fit the longest one\n // so long names don't clip past the SVG edge.\n let maxWidth = labelWidth;\n nodeList.forEach((node, index) => {\n if (hasIncoming.has(index) && hasOutgoing.has(index)) return;\n const relatedValue = sankeyLinks.filter(link => link.source === index || link.target === index).reduce((sum, link) => sum + link.value, 0);\n maxWidth = Math.max(maxWidth, estimateLabelWidth(`${node.name}: ${valueFormatter(relatedValue)}`) + 16);\n });\n\n return { data: { nodes: nodeList, links: sankeyLinks }, colorByName: colors, effectiveLabelWidth: maxWidth, rootNames: roots, leafNames: leaves };\n }, [nodes, links, labelWidth, valueFormatter]);\n\n return (\n <ChartContainer\n data-slot=\"sankey-flow-chart\"\n config={{}}\n className={cn('w-full', className)}\n style={height !== undefined ? { height, aspectRatio: 'auto' } : undefined}\n >\n <Sankey\n data={data}\n nodeWidth={nodeWidth}\n nodePadding={nodePadding}\n linkCurvature={0.45}\n margin={{ top: 28, right: effectiveLabelWidth, bottom: 8, left: effectiveLabelWidth }}\n node={(props: SankeyNodeProps) => {\n const { x, y, width, height: nodeHeight, payload } = props;\n const color = colorByName.get(payload.name) ?? 'var(--chart-1)';\n const isRoot = rootNames.has(payload.name);\n const isLeaf = leafNames.has(payload.name);\n const label = `${payload.name}: ${valueFormatter(payload.value)}`;\n const pillWidth = estimateLabelWidth(label);\n const pillHeight = 18;\n\n let textX: number;\n let textY: number;\n let textAnchor: 'start' | 'end' | 'middle';\n let pillX: number;\n let pillY: number;\n\n if (isRoot || isLeaf) {\n textAnchor = isRoot ? 'end' : 'start';\n textY = y + nodeHeight / 2;\n pillY = textY - pillHeight / 2;\n pillX = isRoot ? x - 8 - pillWidth : x + width + 8;\n textX = isRoot ? pillX + pillWidth - 6 : pillX + 6;\n } else {\n // Intermediate nodes label above the bar (not beside it) so chained, closely-spaced\n // depth columns never collide sideways. Consecutive depths are additionally staggered\n // to two alternating heights (zigzag) — when almost all of a node's value passes\n // straight through to the next depth (e.g. Operating Income -> Profit before tax),\n // both nodes land at nearly the same y, so same-height labels would still overlap.\n textAnchor = 'middle';\n textY = payload.depth % 2 === 0 ? y - 10 : y - 30;\n pillY = textY - pillHeight + 4;\n pillX = x + width / 2 - pillWidth / 2;\n textX = x + width / 2;\n }\n\n return (\n <g>\n <Rectangle\n className=\"recharts-sankey-node\"\n x={x}\n y={y}\n width={width}\n height={nodeHeight}\n fill={color}\n stroke=\"var(--background)\"\n strokeWidth={1.5}\n isAnimationActive={animate}\n />\n <rect x={pillX} y={pillY} width={pillWidth} height={pillHeight} rx={4} fill=\"var(--background)\" fillOpacity={0.92} />\n <text x={textX} y={textY} textAnchor={textAnchor} dominantBaseline=\"middle\" className=\"fill-text-positive-strong text-[11px] font-medium\">\n {label}\n </text>\n </g>\n );\n }}\n link={(props: SankeyLinkProps) => {\n const { sourceX, sourceY, sourceControlX, targetX, targetY, targetControlX, linkWidth, payload } = props;\n const sourceColor = colorByName.get(payload.source.name) ?? 'var(--chart-1)';\n const targetColor = colorByName.get(payload.target.name) ?? sourceColor;\n // Blending toward the target's color (rather than a flat source-only fill) keeps sibling\n // flows out of the same source visually distinct from each other wherever they run close\n // together or cross — a flat single hue made e.g. Gross Profit's three outgoing flows\n // (-> R&D, -> SG&A, -> Operating Income) indistinguishable from one another.\n const color = `color-mix(in oklch, ${sourceColor} 60%, ${targetColor} 40%)`;\n return (\n <path\n className=\"recharts-sankey-link\"\n d={`M${sourceX},${sourceY} C${sourceControlX},${sourceY} ${targetControlX},${targetY} ${targetX},${targetY}`}\n fill=\"none\"\n stroke={color}\n strokeWidth={linkWidth}\n strokeOpacity={0.4}\n />\n );\n }}\n />\n </ChartContainer>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"sankey-flow-chart-CDUqIRMZ.cjs","names":["getChartColor","ChartContainer","Sankey","Rectangle"],"sources":["../packages/components/features/charts/components/sankey-flow-chart.tsx"],"sourcesContent":["'use client';\n\nimport { useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { ChartContainer } from '@/components/ui/chart';\n\nimport type { SankeyLinkProps, SankeyNodeProps } from 'recharts';\nimport { Rectangle, Sankey } from 'recharts';\nimport type { BaseChartProps } from '../types';\nimport { getChartColor } from '../utils';\n\nexport type SankeyFlowNode = {\n name: string;\n color?: string;\n};\n\nexport type SankeyFlowLink = {\n /** Node name, matching an entry in `nodes`. */\n source: string;\n /** Node name, matching an entry in `nodes`. */\n target: string;\n value: number;\n};\n\nexport type SankeyFlowChartProps = BaseChartProps & {\n nodes: Array<SankeyFlowNode | string>;\n links: SankeyFlowLink[];\n valueFormatter?: (value: number) => string;\n nodeWidth?: number;\n nodePadding?: number;\n /** Minimum horizontal space reserved for node labels outside the plot area; grows to fit the longest root/leaf label. Defaults to `170`. */\n labelWidth?: number;\n};\n\n/**\n * A Sankey flow diagram — revenue/cost breakdowns, funnels with branching paths, budget\n * allocation — where band width is proportional to the flow value between named nodes.\n *\n * @example\n * ```tsx\n * import { SankeyFlowChart } from '@customafk/lunas-ui/features/charts';\n *\n * <SankeyFlowChart\n * height={500}\n * nodes={['iPhone', 'Mac', 'Net Sales', 'Cost of Sales', 'Gross Profit']}\n * links={[\n * { source: 'iPhone', target: 'Net Sales', value: 205489 },\n * { source: 'Mac', target: 'Net Sales', value: 40177 },\n * { source: 'Net Sales', target: 'Cost of Sales', value: 223546 },\n * { source: 'Net Sales', target: 'Gross Profit', value: 170782 },\n * ]}\n * />\n * ```\n */\nconst estimateLabelWidth = (label: string): number => label.length * 5.6 + 14;\n\nexport const SankeyFlowChart = ({\n nodes,\n links,\n valueFormatter = value => value.toLocaleString('en-US'),\n nodeWidth = 14,\n nodePadding = 24,\n labelWidth = 170,\n className,\n animate = true,\n height,\n}: SankeyFlowChartProps) => {\n const { data, colorByName, effectiveLabelWidth, rootNames, leafNames } = useMemo(() => {\n const nodeList = nodes.map(node => (typeof node === 'string' ? { name: node } : node));\n const nameToIndex = new Map(nodeList.map((node, index) => [node.name, index]));\n const colors = new Map(nodeList.map((node, index) => [node.name, node.color || getChartColor(index)]));\n\n const sankeyLinks = links\n .map(link => ({ source: nameToIndex.get(link.source), target: nameToIndex.get(link.target), value: link.value }))\n .filter((link): link is { source: number; target: number; value: number } => link.source !== undefined && link.target !== undefined);\n\n // Computed from our own link list rather than trusting recharts' `payload.depth`/`sourceLinks`\n // at render time — the latter don't reliably flag terminal (leaf) nodes as such.\n const hasIncoming = new Set(sankeyLinks.map(link => link.target));\n const hasOutgoing = new Set(sankeyLinks.map(link => link.source));\n const roots = new Set(nodeList.filter((_, index) => !hasIncoming.has(index)).map(node => node.name));\n const leaves = new Set(nodeList.filter((_, index) => !hasOutgoing.has(index)).map(node => node.name));\n\n // Only root/leaf nodes get side labels using this margin; widen it to fit the longest one\n // so long names don't clip past the SVG edge.\n let maxWidth = labelWidth;\n nodeList.forEach((node, index) => {\n if (hasIncoming.has(index) && hasOutgoing.has(index)) return;\n const relatedValue = sankeyLinks.filter(link => link.source === index || link.target === index).reduce((sum, link) => sum + link.value, 0);\n maxWidth = Math.max(maxWidth, estimateLabelWidth(`${node.name}: ${valueFormatter(relatedValue)}`) + 16);\n });\n\n return { data: { nodes: nodeList, links: sankeyLinks }, colorByName: colors, effectiveLabelWidth: maxWidth, rootNames: roots, leafNames: leaves };\n }, [nodes, links, labelWidth, valueFormatter]);\n\n return (\n <ChartContainer\n data-slot=\"sankey-flow-chart\"\n config={{}}\n className={cn('w-full', className)}\n style={height !== undefined ? { height, aspectRatio: 'auto' } : undefined}\n >\n <Sankey\n data={data}\n nodeWidth={nodeWidth}\n nodePadding={nodePadding}\n linkCurvature={0.45}\n margin={{ top: 28, right: effectiveLabelWidth, bottom: 8, left: effectiveLabelWidth }}\n node={(props: SankeyNodeProps) => {\n const { x, y, width, height: nodeHeight, payload } = props;\n const color = colorByName.get(payload.name) ?? 'var(--chart-1)';\n const isRoot = rootNames.has(payload.name);\n const isLeaf = leafNames.has(payload.name);\n const label = `${payload.name}: ${valueFormatter(payload.value)}`;\n const pillWidth = estimateLabelWidth(label);\n const pillHeight = 18;\n\n let textX: number;\n let textY: number;\n let textAnchor: 'start' | 'end' | 'middle';\n let pillX: number;\n let pillY: number;\n\n if (isRoot || isLeaf) {\n textAnchor = isRoot ? 'end' : 'start';\n textY = y + nodeHeight / 2;\n pillY = textY - pillHeight / 2;\n pillX = isRoot ? x - 8 - pillWidth : x + width + 8;\n textX = isRoot ? pillX + pillWidth - 6 : pillX + 6;\n } else {\n // Intermediate nodes label above the bar (not beside it) so chained, closely-spaced\n // depth columns never collide sideways. Consecutive depths are additionally staggered\n // to two alternating heights (zigzag) — when almost all of a node's value passes\n // straight through to the next depth (e.g. Operating Income -> Profit before tax),\n // both nodes land at nearly the same y, so same-height labels would still overlap.\n textAnchor = 'middle';\n textY = payload.depth % 2 === 0 ? y - 10 : y - 30;\n pillY = textY - pillHeight + 4;\n pillX = x + width / 2 - pillWidth / 2;\n textX = x + width / 2;\n }\n\n return (\n <g>\n <Rectangle\n className=\"recharts-sankey-node\"\n x={x}\n y={y}\n width={width}\n height={nodeHeight}\n fill={color}\n stroke=\"var(--background)\"\n strokeWidth={1.5}\n isAnimationActive={animate}\n />\n <rect x={pillX} y={pillY} width={pillWidth} height={pillHeight} rx={4} fill=\"var(--background)\" fillOpacity={0.92} />\n <text x={textX} y={textY} textAnchor={textAnchor} dominantBaseline=\"middle\" className=\"fill-text-positive-strong text-[11px] font-medium\">\n {label}\n </text>\n </g>\n );\n }}\n link={(props: SankeyLinkProps) => {\n const { sourceX, sourceY, sourceControlX, targetX, targetY, targetControlX, linkWidth, payload } = props;\n const sourceColor = colorByName.get(payload.source.name) ?? 'var(--chart-1)';\n const targetColor = colorByName.get(payload.target.name) ?? sourceColor;\n // Blending toward the target's color (rather than a flat source-only fill) keeps sibling\n // flows out of the same source visually distinct from each other wherever they run close\n // together or cross — a flat single hue made e.g. Gross Profit's three outgoing flows\n // (-> R&D, -> SG&A, -> Operating Income) indistinguishable from one another.\n const color = `color-mix(in oklch, ${sourceColor} 60%, ${targetColor} 40%)`;\n return (\n <path\n className=\"recharts-sankey-link\"\n d={`M${sourceX},${sourceY} C${sourceControlX},${sourceY} ${targetControlX},${targetY} ${targetX},${targetY}`}\n fill=\"none\"\n stroke={color}\n strokeWidth={linkWidth}\n strokeOpacity={0.4}\n />\n );\n }}\n />\n </ChartContainer>\n );\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"sankey-flow-chart-bQ3Dffet.mjs","names":[],"sources":["../packages/components/features/charts/components/sankey-flow-chart.tsx"],"sourcesContent":["'use client';\n\nimport { useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { ChartContainer } from '@/components/ui/chart';\n\nimport type { SankeyLinkProps, SankeyNodeProps } from 'recharts';\nimport { Rectangle, Sankey } from 'recharts';\nimport type { BaseChartProps } from '../types';\nimport { getChartColor } from '../utils';\n\nexport type SankeyFlowNode = {\n name: string;\n color?: string;\n};\n\nexport type SankeyFlowLink = {\n /** Node name, matching an entry in `nodes`. */\n source: string;\n /** Node name, matching an entry in `nodes`. */\n target: string;\n value: number;\n};\n\nexport type SankeyFlowChartProps = BaseChartProps & {\n nodes: Array<SankeyFlowNode | string>;\n links: SankeyFlowLink[];\n valueFormatter?: (value: number) => string;\n nodeWidth?: number;\n nodePadding?: number;\n /** Minimum horizontal space reserved for node labels outside the plot area; grows to fit the longest root/leaf label. Defaults to `170`. */\n labelWidth?: number;\n};\n\n/**\n * A Sankey flow diagram — revenue/cost breakdowns, funnels with branching paths, budget\n * allocation — where band width is proportional to the flow value between named nodes.\n *\n * @example\n * ```tsx\n * import { SankeyFlowChart } from '@customafk/lunas-ui/features/charts';\n *\n * <SankeyFlowChart\n * height={500}\n * nodes={['iPhone', 'Mac', 'Net Sales', 'Cost of Sales', 'Gross Profit']}\n * links={[\n * { source: 'iPhone', target: 'Net Sales', value: 205489 },\n * { source: 'Mac', target: 'Net Sales', value: 40177 },\n * { source: 'Net Sales', target: 'Cost of Sales', value: 223546 },\n * { source: 'Net Sales', target: 'Gross Profit', value: 170782 },\n * ]}\n * />\n * ```\n */\nconst estimateLabelWidth = (label: string): number => label.length * 5.6 + 14;\n\nexport const SankeyFlowChart = ({\n nodes,\n links,\n valueFormatter = value => value.toLocaleString('en-US'),\n nodeWidth = 14,\n nodePadding = 24,\n labelWidth = 170,\n className,\n animate = true,\n height,\n}: SankeyFlowChartProps) => {\n const { data, colorByName, effectiveLabelWidth, rootNames, leafNames } = useMemo(() => {\n const nodeList = nodes.map(node => (typeof node === 'string' ? { name: node } : node));\n const nameToIndex = new Map(nodeList.map((node, index) => [node.name, index]));\n const colors = new Map(nodeList.map((node, index) => [node.name, node.color || getChartColor(index)]));\n\n const sankeyLinks = links\n .map(link => ({ source: nameToIndex.get(link.source), target: nameToIndex.get(link.target), value: link.value }))\n .filter((link): link is { source: number; target: number; value: number } => link.source !== undefined && link.target !== undefined);\n\n // Computed from our own link list rather than trusting recharts' `payload.depth`/`sourceLinks`\n // at render time — the latter don't reliably flag terminal (leaf) nodes as such.\n const hasIncoming = new Set(sankeyLinks.map(link => link.target));\n const hasOutgoing = new Set(sankeyLinks.map(link => link.source));\n const roots = new Set(nodeList.filter((_, index) => !hasIncoming.has(index)).map(node => node.name));\n const leaves = new Set(nodeList.filter((_, index) => !hasOutgoing.has(index)).map(node => node.name));\n\n // Only root/leaf nodes get side labels using this margin; widen it to fit the longest one\n // so long names don't clip past the SVG edge.\n let maxWidth = labelWidth;\n nodeList.forEach((node, index) => {\n if (hasIncoming.has(index) && hasOutgoing.has(index)) return;\n const relatedValue = sankeyLinks.filter(link => link.source === index || link.target === index).reduce((sum, link) => sum + link.value, 0);\n maxWidth = Math.max(maxWidth, estimateLabelWidth(`${node.name}: ${valueFormatter(relatedValue)}`) + 16);\n });\n\n return { data: { nodes: nodeList, links: sankeyLinks }, colorByName: colors, effectiveLabelWidth: maxWidth, rootNames: roots, leafNames: leaves };\n }, [nodes, links, labelWidth, valueFormatter]);\n\n return (\n <ChartContainer\n data-slot=\"sankey-flow-chart\"\n config={{}}\n className={cn('w-full', className)}\n style={height !== undefined ? { height, aspectRatio: 'auto' } : undefined}\n >\n <Sankey\n data={data}\n nodeWidth={nodeWidth}\n nodePadding={nodePadding}\n linkCurvature={0.45}\n margin={{ top: 28, right: effectiveLabelWidth, bottom: 8, left: effectiveLabelWidth }}\n node={(props: SankeyNodeProps) => {\n const { x, y, width, height: nodeHeight, payload } = props;\n const color = colorByName.get(payload.name) ?? 'var(--chart-1)';\n const isRoot = rootNames.has(payload.name);\n const isLeaf = leafNames.has(payload.name);\n const label = `${payload.name}: ${valueFormatter(payload.value)}`;\n const pillWidth = estimateLabelWidth(label);\n const pillHeight = 18;\n\n let textX: number;\n let textY: number;\n let textAnchor: 'start' | 'end' | 'middle';\n let pillX: number;\n let pillY: number;\n\n if (isRoot || isLeaf) {\n textAnchor = isRoot ? 'end' : 'start';\n textY = y + nodeHeight / 2;\n pillY = textY - pillHeight / 2;\n pillX = isRoot ? x - 8 - pillWidth : x + width + 8;\n textX = isRoot ? pillX + pillWidth - 6 : pillX + 6;\n } else {\n // Intermediate nodes label above the bar (not beside it) so chained, closely-spaced\n // depth columns never collide sideways. Consecutive depths are additionally staggered\n // to two alternating heights (zigzag) — when almost all of a node's value passes\n // straight through to the next depth (e.g. Operating Income -> Profit before tax),\n // both nodes land at nearly the same y, so same-height labels would still overlap.\n textAnchor = 'middle';\n textY = payload.depth % 2 === 0 ? y - 10 : y - 30;\n pillY = textY - pillHeight + 4;\n pillX = x + width / 2 - pillWidth / 2;\n textX = x + width / 2;\n }\n\n return (\n <g>\n <Rectangle\n className=\"recharts-sankey-node\"\n x={x}\n y={y}\n width={width}\n height={nodeHeight}\n fill={color}\n stroke=\"var(--background)\"\n strokeWidth={1.5}\n isAnimationActive={animate}\n />\n <rect x={pillX} y={pillY} width={pillWidth} height={pillHeight} rx={4} fill=\"var(--background)\" fillOpacity={0.92} />\n <text x={textX} y={textY} textAnchor={textAnchor} dominantBaseline=\"middle\" className=\"fill-text-positive-strong text-[11px] font-medium\">\n {label}\n </text>\n </g>\n );\n }}\n link={(props: SankeyLinkProps) => {\n const { sourceX, sourceY, sourceControlX, targetX, targetY, targetControlX, linkWidth, payload } = props;\n const sourceColor = colorByName.get(payload.source.name) ?? 'var(--chart-1)';\n const targetColor = colorByName.get(payload.target.name) ?? sourceColor;\n // Blending toward the target's color (rather than a flat source-only fill) keeps sibling\n // flows out of the same source visually distinct from each other wherever they run close\n // together or cross — a flat single hue made e.g. Gross Profit's three outgoing flows\n // (-> R&D, -> SG&A, -> Operating Income) indistinguishable from one another.\n const color = `color-mix(in oklch, ${sourceColor} 60%, ${targetColor} 40%)`;\n return (\n <path\n className=\"recharts-sankey-link\"\n d={`M${sourceX},${sourceY} C${sourceControlX},${sourceY} ${targetControlX},${targetY} ${targetX},${targetY}`}\n fill=\"none\"\n stroke={color}\n strokeWidth={linkWidth}\n strokeOpacity={0.4}\n />\n );\n }}\n />\n </ChartContainer>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"sankey-flow-chart-bQ3Dffet.mjs","names":[],"sources":["../packages/components/features/charts/components/sankey-flow-chart.tsx"],"sourcesContent":["'use client';\n\nimport { useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { ChartContainer } from '@/components/ui/chart';\n\nimport type { SankeyLinkProps, SankeyNodeProps } from 'recharts';\nimport { Rectangle, Sankey } from 'recharts';\nimport type { BaseChartProps } from '../types';\nimport { getChartColor } from '../utils';\n\nexport type SankeyFlowNode = {\n name: string;\n color?: string;\n};\n\nexport type SankeyFlowLink = {\n /** Node name, matching an entry in `nodes`. */\n source: string;\n /** Node name, matching an entry in `nodes`. */\n target: string;\n value: number;\n};\n\nexport type SankeyFlowChartProps = BaseChartProps & {\n nodes: Array<SankeyFlowNode | string>;\n links: SankeyFlowLink[];\n valueFormatter?: (value: number) => string;\n nodeWidth?: number;\n nodePadding?: number;\n /** Minimum horizontal space reserved for node labels outside the plot area; grows to fit the longest root/leaf label. Defaults to `170`. */\n labelWidth?: number;\n};\n\n/**\n * A Sankey flow diagram — revenue/cost breakdowns, funnels with branching paths, budget\n * allocation — where band width is proportional to the flow value between named nodes.\n *\n * @example\n * ```tsx\n * import { SankeyFlowChart } from '@customafk/lunas-ui/features/charts';\n *\n * <SankeyFlowChart\n * height={500}\n * nodes={['iPhone', 'Mac', 'Net Sales', 'Cost of Sales', 'Gross Profit']}\n * links={[\n * { source: 'iPhone', target: 'Net Sales', value: 205489 },\n * { source: 'Mac', target: 'Net Sales', value: 40177 },\n * { source: 'Net Sales', target: 'Cost of Sales', value: 223546 },\n * { source: 'Net Sales', target: 'Gross Profit', value: 170782 },\n * ]}\n * />\n * ```\n */\nconst estimateLabelWidth = (label: string): number => label.length * 5.6 + 14;\n\nexport const SankeyFlowChart = ({\n nodes,\n links,\n valueFormatter = value => value.toLocaleString('en-US'),\n nodeWidth = 14,\n nodePadding = 24,\n labelWidth = 170,\n className,\n animate = true,\n height,\n}: SankeyFlowChartProps) => {\n const { data, colorByName, effectiveLabelWidth, rootNames, leafNames } = useMemo(() => {\n const nodeList = nodes.map(node => (typeof node === 'string' ? { name: node } : node));\n const nameToIndex = new Map(nodeList.map((node, index) => [node.name, index]));\n const colors = new Map(nodeList.map((node, index) => [node.name, node.color || getChartColor(index)]));\n\n const sankeyLinks = links\n .map(link => ({ source: nameToIndex.get(link.source), target: nameToIndex.get(link.target), value: link.value }))\n .filter((link): link is { source: number; target: number; value: number } => link.source !== undefined && link.target !== undefined);\n\n // Computed from our own link list rather than trusting recharts' `payload.depth`/`sourceLinks`\n // at render time — the latter don't reliably flag terminal (leaf) nodes as such.\n const hasIncoming = new Set(sankeyLinks.map(link => link.target));\n const hasOutgoing = new Set(sankeyLinks.map(link => link.source));\n const roots = new Set(nodeList.filter((_, index) => !hasIncoming.has(index)).map(node => node.name));\n const leaves = new Set(nodeList.filter((_, index) => !hasOutgoing.has(index)).map(node => node.name));\n\n // Only root/leaf nodes get side labels using this margin; widen it to fit the longest one\n // so long names don't clip past the SVG edge.\n let maxWidth = labelWidth;\n nodeList.forEach((node, index) => {\n if (hasIncoming.has(index) && hasOutgoing.has(index)) return;\n const relatedValue = sankeyLinks.filter(link => link.source === index || link.target === index).reduce((sum, link) => sum + link.value, 0);\n maxWidth = Math.max(maxWidth, estimateLabelWidth(`${node.name}: ${valueFormatter(relatedValue)}`) + 16);\n });\n\n return { data: { nodes: nodeList, links: sankeyLinks }, colorByName: colors, effectiveLabelWidth: maxWidth, rootNames: roots, leafNames: leaves };\n }, [nodes, links, labelWidth, valueFormatter]);\n\n return (\n <ChartContainer\n data-slot=\"sankey-flow-chart\"\n config={{}}\n className={cn('w-full', className)}\n style={height !== undefined ? { height, aspectRatio: 'auto' } : undefined}\n >\n <Sankey\n data={data}\n nodeWidth={nodeWidth}\n nodePadding={nodePadding}\n linkCurvature={0.45}\n margin={{ top: 28, right: effectiveLabelWidth, bottom: 8, left: effectiveLabelWidth }}\n node={(props: SankeyNodeProps) => {\n const { x, y, width, height: nodeHeight, payload } = props;\n const color = colorByName.get(payload.name) ?? 'var(--chart-1)';\n const isRoot = rootNames.has(payload.name);\n const isLeaf = leafNames.has(payload.name);\n const label = `${payload.name}: ${valueFormatter(payload.value)}`;\n const pillWidth = estimateLabelWidth(label);\n const pillHeight = 18;\n\n let textX: number;\n let textY: number;\n let textAnchor: 'start' | 'end' | 'middle';\n let pillX: number;\n let pillY: number;\n\n if (isRoot || isLeaf) {\n textAnchor = isRoot ? 'end' : 'start';\n textY = y + nodeHeight / 2;\n pillY = textY - pillHeight / 2;\n pillX = isRoot ? x - 8 - pillWidth : x + width + 8;\n textX = isRoot ? pillX + pillWidth - 6 : pillX + 6;\n } else {\n // Intermediate nodes label above the bar (not beside it) so chained, closely-spaced\n // depth columns never collide sideways. Consecutive depths are additionally staggered\n // to two alternating heights (zigzag) — when almost all of a node's value passes\n // straight through to the next depth (e.g. Operating Income -> Profit before tax),\n // both nodes land at nearly the same y, so same-height labels would still overlap.\n textAnchor = 'middle';\n textY = payload.depth % 2 === 0 ? y - 10 : y - 30;\n pillY = textY - pillHeight + 4;\n pillX = x + width / 2 - pillWidth / 2;\n textX = x + width / 2;\n }\n\n return (\n <g>\n <Rectangle\n className=\"recharts-sankey-node\"\n x={x}\n y={y}\n width={width}\n height={nodeHeight}\n fill={color}\n stroke=\"var(--background)\"\n strokeWidth={1.5}\n isAnimationActive={animate}\n />\n <rect x={pillX} y={pillY} width={pillWidth} height={pillHeight} rx={4} fill=\"var(--background)\" fillOpacity={0.92} />\n <text x={textX} y={textY} textAnchor={textAnchor} dominantBaseline=\"middle\" className=\"fill-text-positive-strong text-[11px] font-medium\">\n {label}\n </text>\n </g>\n );\n }}\n link={(props: SankeyLinkProps) => {\n const { sourceX, sourceY, sourceControlX, targetX, targetY, targetControlX, linkWidth, payload } = props;\n const sourceColor = colorByName.get(payload.source.name) ?? 'var(--chart-1)';\n const targetColor = colorByName.get(payload.target.name) ?? sourceColor;\n // Blending toward the target's color (rather than a flat source-only fill) keeps sibling\n // flows out of the same source visually distinct from each other wherever they run close\n // together or cross — a flat single hue made e.g. Gross Profit's three outgoing flows\n // (-> R&D, -> SG&A, -> Operating Income) indistinguishable from one another.\n const color = `color-mix(in oklch, ${sourceColor} 60%, ${targetColor} 40%)`;\n return (\n <path\n className=\"recharts-sankey-link\"\n d={`M${sourceX},${sourceY} C${sourceControlX},${sourceY} ${targetControlX},${targetY} ${targetX},${targetY}`}\n fill=\"none\"\n stroke={color}\n strokeWidth={linkWidth}\n strokeOpacity={0.4}\n />\n );\n }}\n />\n </ChartContainer>\n );\n};\n"],"mappings":"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"}
@@ -1,5 +1,4 @@
1
1
  import { ScrollArea } from "radix-ui";
2
-
3
2
  //#region packages/components/ui/scroll-area.d.ts
4
3
  /**
5
4
  * A scrollable container with a styled, custom scrollbar that overlays the content.
@@ -13,23 +12,13 @@ import { ScrollArea } from "radix-ui";
13
12
  * </ScrollArea>
14
13
  * ```
15
14
  */
16
- declare const ScrollArea$1: import("react").MemoExoticComponent<({
17
- className,
18
- children,
19
- ref,
20
- onScroll,
21
- ...props
22
- }: React.ComponentProps<typeof ScrollArea.Root>) => import("react").JSX.Element>;
15
+ declare const ScrollArea$1: import("react").MemoExoticComponent<({ className, children, ref, onScroll, ...props }: React.ComponentProps<typeof ScrollArea.Root>) => import("react").JSX.Element>;
23
16
  /**
24
17
  * The styled scrollbar track and thumb rendered inside a ScrollArea.
25
18
  *
26
19
  * @param orientation - Direction of the scrollbar: `'vertical'` (default) or `'horizontal'`.
27
20
  */
28
- declare const ScrollBar: import("react").MemoExoticComponent<({
29
- className,
30
- orientation,
31
- ...props
32
- }: React.ComponentProps<typeof ScrollArea.ScrollAreaScrollbar>) => import("react").JSX.Element>;
21
+ declare const ScrollBar: import("react").MemoExoticComponent<({ className, orientation, ...props }: React.ComponentProps<typeof ScrollArea.ScrollAreaScrollbar>) => import("react").JSX.Element>;
33
22
  //#endregion
34
23
  export { ScrollBar as n, ScrollArea$1 as t };
35
- //# sourceMappingURL=scroll-area-PbkqIAaH.d.cts.map
24
+ //# sourceMappingURL=scroll-area-BpSwutyr.d.cts.map