@customafk/lunas-ui 0.2.65 → 0.2.66
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/FeatureDeveloping-zuTTDIh_.d.cts +41 -0
- package/dist/FeatureDeveloping-zuTTDIh_.d.mts +41 -0
- package/dist/FeatureFixing-DYQlgHPk.d.cts +41 -0
- package/dist/FeatureFixing-DYQlgHPk.d.mts +41 -0
- package/dist/LoginPage-vMXvwtxf.d.cts +53 -0
- package/dist/LoginPage-vMXvwtxf.d.mts +53 -0
- package/dist/NotAuthorized-CZIQ6EaA.d.cts +41 -0
- package/dist/NotAuthorized-CZIQ6EaA.d.mts +41 -0
- package/dist/NotFound-CRSKxhV8.d.cts +41 -0
- package/dist/NotFound-CRSKxhV8.d.mts +41 -0
- package/dist/RegisterPage-BBtpEzvL.d.cts +50 -0
- package/dist/RegisterPage-BBtpEzvL.d.mts +50 -0
- package/dist/VerifyEmailPage-CsmIeYLu.d.cts +62 -0
- package/dist/VerifyEmailPage-CsmIeYLu.d.mts +62 -0
- package/dist/{action-submit-3kZ7JOop.cjs → action-submit-42PxGLsR.cjs} +2 -2
- package/dist/{action-submit-3kZ7JOop.cjs.map → action-submit-42PxGLsR.cjs.map} +1 -1
- package/dist/{action-submit-Dg5GvYz5.mjs → action-submit-SviPJW3i.mjs} +2 -2
- package/dist/{action-submit-Dg5GvYz5.mjs.map → action-submit-SviPJW3i.mjs.map} +1 -1
- package/dist/{actions-form-CE_enCgE.cjs → actions-form-Bo46j_dH.cjs} +2 -2
- package/dist/{actions-form-CE_enCgE.cjs.map → actions-form-Bo46j_dH.cjs.map} +1 -1
- package/dist/{actions-form-BL_B81Vg.mjs → actions-form-QdAsKwcQ.mjs} +2 -2
- package/dist/{actions-form-BL_B81Vg.mjs.map → actions-form-QdAsKwcQ.mjs.map} +1 -1
- package/dist/activity-heatmap-chart-DufvFndI.mjs +2 -0
- package/dist/activity-heatmap-chart-DufvFndI.mjs.map +1 -0
- package/dist/activity-heatmap-chart-gDcvIAK_.cjs +2 -0
- package/dist/activity-heatmap-chart-gDcvIAK_.cjs.map +1 -0
- package/dist/add-new-DkBwXh0Q.d.cts +16 -0
- package/dist/add-new-DkBwXh0Q.d.mts +16 -0
- package/dist/alert-dialog-Cdhz7jSj.d.cts +88 -0
- package/dist/alert-dialog-Cdhz7jSj.d.mts +88 -0
- package/dist/analysis-panel-DzsZKA9l.cjs +2 -0
- package/dist/analysis-panel-DzsZKA9l.cjs.map +1 -0
- package/dist/analysis-panel-ikcRtzG9.mjs +2 -0
- package/dist/analysis-panel-ikcRtzG9.mjs.map +1 -0
- package/dist/aspect-ratio-huscluwJ.d.cts +22 -0
- package/dist/aspect-ratio-huscluwJ.d.mts +22 -0
- package/dist/avatar-BpeFwSkQ.d.cts +33 -0
- package/dist/avatar-BpeFwSkQ.d.mts +33 -0
- package/dist/avatar-name-display-BrpnTqa_.mjs +2 -0
- package/dist/avatar-name-display-BrpnTqa_.mjs.map +1 -0
- package/dist/avatar-name-display-CLi1DJUs.cjs +2 -0
- package/dist/avatar-name-display-CLi1DJUs.cjs.map +1 -0
- package/dist/{badge-D0InQSvM.d.cts → badge-MRT40pxM.d.cts} +3 -3
- package/dist/{badge-D0InQSvM.d.mts → badge-MRT40pxM.d.mts} +3 -3
- package/dist/badge-display-9WXwgQgH.cjs +2 -0
- package/dist/badge-display-9WXwgQgH.cjs.map +1 -0
- package/dist/badge-display-Dx-dITLB.mjs +2 -0
- package/dist/badge-display-Dx-dITLB.mjs.map +1 -0
- package/dist/boolean-display-OVCtvzI1.mjs +2 -0
- package/dist/boolean-display-OVCtvzI1.mjs.map +1 -0
- package/dist/boolean-display-pmzYS-ND.cjs +2 -0
- package/dist/boolean-display-pmzYS-ND.cjs.map +1 -0
- package/dist/breadcrumb-CSpScKZm.d.cts +69 -0
- package/dist/breadcrumb-CSpScKZm.d.mts +69 -0
- package/dist/{button-DIqm3YRo.d.cts → button-Bk4Y6_9I.d.cts} +3 -3
- package/dist/{button-DIqm3YRo.d.mts → button-Bk4Y6_9I.d.mts} +3 -3
- package/dist/button-group-Cd5m5G3p.d.mts +48 -0
- package/dist/button-group-CiKhLVCg.d.cts +48 -0
- package/dist/calendar-DPKt7D3w.d.mts +43 -0
- package/dist/calendar-stv2bJv0.d.cts +43 -0
- package/dist/candlestick-chart-CiBiCU3y.mjs +2 -0
- package/dist/candlestick-chart-CiBiCU3y.mjs.map +1 -0
- package/dist/candlestick-chart-CqmRkfXj.cjs +2 -0
- package/dist/candlestick-chart-CqmRkfXj.cjs.map +1 -0
- package/dist/card-DOnx7RKz.d.cts +60 -0
- package/dist/card-DOnx7RKz.d.mts +60 -0
- package/dist/cards/grid-product-card.d.cts +2 -30
- package/dist/cards/grid-product-card.d.mts +2 -30
- package/dist/cards/product-card.d.cts +2 -30
- package/dist/cards/product-card.d.mts +2 -30
- package/dist/cards/simple-card.d.cts +2 -29
- package/dist/cards/simple-card.d.mts +2 -29
- package/dist/carousel-CV3IZ96x.d.mts +70 -0
- package/dist/carousel-c2XuzmYN.d.cts +70 -0
- package/dist/chart-sYFksFMk.d.cts +80 -0
- package/dist/chart-sYFksFMk.d.mts +80 -0
- package/dist/checkbox-XfLNnG0S.d.cts +24 -0
- package/dist/checkbox-XfLNnG0S.d.mts +24 -0
- package/dist/{checkbox-field-DdeohRmi.cjs → checkbox-field-B1vCz-Wf.cjs} +2 -2
- package/dist/{checkbox-field-DdeohRmi.cjs.map → checkbox-field-B1vCz-Wf.cjs.map} +1 -1
- package/dist/{checkbox-field-CRcfuDu1.mjs → checkbox-field-FqCe38_D.mjs} +2 -2
- package/dist/{checkbox-field-CRcfuDu1.mjs.map → checkbox-field-FqCe38_D.mjs.map} +1 -1
- package/dist/{cms-layout-SubgSF72.cjs → cms-layout-CGGJqbr0.cjs} +2 -2
- package/dist/{cms-layout-SubgSF72.cjs.map → cms-layout-CGGJqbr0.cjs.map} +1 -1
- package/dist/{cms-layout-CuF5ahpj.mjs → cms-layout-ePySxIQN.mjs} +2 -2
- package/dist/{cms-layout-CuF5ahpj.mjs.map → cms-layout-ePySxIQN.mjs.map} +1 -1
- package/dist/collapsible-liIHmFuw.d.cts +32 -0
- package/dist/collapsible-liIHmFuw.d.mts +32 -0
- package/dist/combobox-field-D6fiCcvU.mjs +2 -0
- package/dist/{combobox-field-BGChwajc.mjs.map → combobox-field-D6fiCcvU.mjs.map} +1 -1
- package/dist/{combobox-field-D9NdSih1.cjs → combobox-field-DLpH6J9H.cjs} +2 -2
- package/dist/{combobox-field-D9NdSih1.cjs.map → combobox-field-DLpH6J9H.cjs.map} +1 -1
- package/dist/command-Bb6SneVI.d.mts +87 -0
- package/dist/command-CHSJVU9o.d.cts +87 -0
- package/dist/confirm-dialog-B8Vu0z8S.d.cts +142 -0
- package/dist/confirm-dialog-B8Vu0z8S.d.mts +142 -0
- package/dist/context-menu-BOlGSuep.d.cts +123 -0
- package/dist/context-menu-BOlGSuep.d.mts +123 -0
- package/dist/conversion-funnel-chart-CW_zDfKS.mjs +2 -0
- package/dist/conversion-funnel-chart-CW_zDfKS.mjs.map +1 -0
- package/dist/conversion-funnel-chart-r2m2QbiQ.cjs +2 -0
- package/dist/conversion-funnel-chart-r2m2QbiQ.cjs.map +1 -0
- package/dist/correlation-scatter-chart-Djtt7NU7.mjs +2 -0
- package/dist/correlation-scatter-chart-Djtt7NU7.mjs.map +1 -0
- package/dist/correlation-scatter-chart-HF48YUIB.cjs +2 -0
- package/dist/correlation-scatter-chart-HF48YUIB.cjs.map +1 -0
- package/dist/country-C8QijcHF.d.mts +21 -0
- package/dist/country-CJIaO0I7.d.cts +21 -0
- package/dist/currency-display-B91H66HM.cjs +2 -0
- package/dist/currency-display-B91H66HM.cjs.map +1 -0
- package/dist/currency-display-BN1i8jnU.mjs +2 -0
- package/dist/currency-display-BN1i8jnU.mjs.map +1 -0
- package/dist/data-display/country.d.cts +2 -21
- package/dist/data-display/country.d.mts +2 -21
- package/dist/data-display/data-list.d.cts +2 -38
- package/dist/data-display/data-list.d.mts +2 -38
- package/dist/data-display/date-tooltip.d.cts +2 -18
- package/dist/data-display/date-tooltip.d.mts +2 -18
- package/dist/data-display/date.d.cts +2 -39
- package/dist/data-display/date.d.mts +2 -39
- package/dist/data-display/empty.d.cts +2 -19
- package/dist/data-display/empty.d.mts +2 -19
- package/dist/data-display/name.d.cts +2 -18
- package/dist/data-display/name.d.mts +2 -18
- package/dist/data-display/phone-number.d.cts +2 -18
- package/dist/data-display/phone-number.d.mts +2 -18
- package/dist/data-display/role-badge.d.cts +2 -21
- package/dist/data-display/role-badge.d.mts +2 -21
- package/dist/data-display/statistic.d.cts +2 -45
- package/dist/data-display/statistic.d.mts +2 -45
- package/dist/data-display/user.d.cts +2 -20
- package/dist/data-display/user.d.mts +2 -20
- package/dist/data-list-Cg510z2m.d.cts +38 -0
- package/dist/data-list-Cg510z2m.d.mts +38 -0
- package/dist/date-KANPBbN4.d.cts +39 -0
- package/dist/date-KANPBbN4.d.mts +39 -0
- package/dist/date-display-BWtvWDHK.mjs +2 -0
- package/dist/date-display-BWtvWDHK.mjs.map +1 -0
- package/dist/date-display-odcC9NcB.cjs +2 -0
- package/dist/date-display-odcC9NcB.cjs.map +1 -0
- package/dist/{date-field-Dm4ki1HS.mjs → date-field-Cxbrc0Vl.mjs} +2 -2
- package/dist/{date-field-Dm4ki1HS.mjs.map → date-field-Cxbrc0Vl.mjs.map} +1 -1
- package/dist/{date-field-BqAX4M_h.cjs → date-field-RvEB9F1r.cjs} +2 -2
- package/dist/{date-field-BqAX4M_h.cjs.map → date-field-RvEB9F1r.cjs.map} +1 -1
- package/dist/date-tooltip-DptxGOj_.d.cts +18 -0
- package/dist/date-tooltip-DptxGOj_.d.mts +18 -0
- package/dist/description-display-BubAcFan.mjs +2 -0
- package/dist/description-display-BubAcFan.mjs.map +1 -0
- package/dist/description-display-CKe0j3q-.cjs +2 -0
- package/dist/description-display-CKe0j3q-.cjs.map +1 -0
- package/dist/{dialog-form-ClWBZbUN.mjs → dialog-form-C0W5C0u9.mjs} +2 -2
- package/dist/{dialog-form-ClWBZbUN.mjs.map → dialog-form-C0W5C0u9.mjs.map} +1 -1
- package/dist/{dialog-form-DN-NlQFO.cjs → dialog-form-CkNCwzWG.cjs} +2 -2
- package/dist/{dialog-form-DN-NlQFO.cjs.map → dialog-form-CkNCwzWG.cjs.map} +1 -1
- package/dist/dialogs/confirm-dialog.d.cts +2 -142
- package/dist/dialogs/confirm-dialog.d.mts +2 -142
- package/dist/dialogs/detail-dialog/components/sidebar.cjs +1 -1
- package/dist/dialogs/detail-dialog/components/sidebar.cjs.map +1 -1
- package/dist/dialogs/detail-dialog/components/sidebar.d.cts +50 -38
- package/dist/dialogs/detail-dialog/components/sidebar.d.mts +50 -38
- package/dist/dialogs/detail-dialog/components/sidebar.mjs +1 -1
- package/dist/dialogs/detail-dialog/components/sidebar.mjs.map +1 -1
- package/dist/dialogs/detail-dialog/index.cjs +1 -1
- package/dist/dialogs/detail-dialog/index.cjs.map +1 -1
- package/dist/dialogs/detail-dialog/index.d.cts +2 -36
- package/dist/dialogs/detail-dialog/index.d.mts +2 -36
- package/dist/dialogs/detail-dialog/index.mjs +1 -1
- package/dist/dialogs/detail-dialog/index.mjs.map +1 -1
- package/dist/dialogs/error-dialog.d.cts +2 -22
- package/dist/dialogs/error-dialog.d.mts +2 -22
- package/dist/dialogs/loading-dialog.d.cts +2 -19
- package/dist/dialogs/loading-dialog.d.mts +2 -19
- package/dist/donut-chart-CsPPKy0G.cjs +2 -0
- package/dist/donut-chart-CsPPKy0G.cjs.map +1 -0
- package/dist/donut-chart-eKZjuzW0.mjs +2 -0
- package/dist/donut-chart-eKZjuzW0.mjs.map +1 -0
- package/dist/drawer-Dwx99ff3.d.cts +70 -0
- package/dist/drawer-Dwx99ff3.d.mts +70 -0
- package/dist/dropdown-menu-CcMccVns.d.cts +125 -0
- package/dist/dropdown-menu-CcMccVns.d.mts +125 -0
- package/dist/edit-button-0_FLZoT3.cjs +2 -0
- package/dist/edit-button-0_FLZoT3.cjs.map +1 -0
- package/dist/edit-button-DmMFMzG0.mjs +2 -0
- package/dist/edit-button-DmMFMzG0.mjs.map +1 -0
- package/dist/edit-qfS5kOtM.d.cts +16 -0
- package/dist/edit-qfS5kOtM.d.mts +16 -0
- package/dist/email-display-BLt60GQ1.cjs +2 -0
- package/dist/email-display-BLt60GQ1.cjs.map +1 -0
- package/dist/email-display-CMme47S9.mjs +2 -0
- package/dist/email-display-CMme47S9.mjs.map +1 -0
- package/dist/{email-field-lDd9ouFN.cjs → email-field-BErx3liY.cjs} +2 -2
- package/dist/{email-field-lDd9ouFN.cjs.map → email-field-BErx3liY.cjs.map} +1 -1
- package/dist/{email-field-DZNR_JbT.mjs → email-field-BtcdBWL4.mjs} +2 -2
- package/dist/{email-field-DZNR_JbT.mjs.map → email-field-BtcdBWL4.mjs.map} +1 -1
- package/dist/empty-CaNJjp05.d.cts +65 -0
- package/dist/empty-CaNJjp05.d.mts +65 -0
- package/dist/empty-ClQptIZH.d.cts +19 -0
- package/dist/empty-ClQptIZH.d.mts +19 -0
- package/dist/error-dialog-D4jOPhmw.d.cts +22 -0
- package/dist/error-dialog-D4jOPhmw.d.mts +22 -0
- package/dist/features/charts/index.cjs +1 -1
- package/dist/features/charts/index.cjs.map +1 -1
- package/dist/features/charts/index.d.cts +2 -904
- package/dist/features/charts/index.d.mts +2 -904
- package/dist/features/charts/index.mjs +1 -1
- package/dist/features/charts/index.mjs.map +1 -1
- package/dist/features/descriptions/index.cjs +1 -1
- package/dist/features/descriptions/index.cjs.map +1 -1
- package/dist/features/descriptions/index.d.cts +2 -231
- package/dist/features/descriptions/index.d.mts +2 -231
- package/dist/features/descriptions/index.mjs +1 -1
- package/dist/features/descriptions/index.mjs.map +1 -1
- package/dist/features/search-modal/index.d.cts +2 -14
- package/dist/features/search-modal/index.d.mts +2 -14
- package/dist/features/tables/index.cjs +1 -1
- package/dist/features/tables/index.d.cts +2 -2
- package/dist/features/tables/index.d.mts +2 -2
- package/dist/features/tables/index.mjs +1 -1
- package/dist/features/tanstack-form/index.cjs +1 -1
- package/dist/features/tanstack-form/index.mjs +1 -1
- package/dist/features/text-editor/index.cjs +1 -1
- package/dist/features/text-editor/index.d.cts +1 -1
- package/dist/features/text-editor/index.d.mts +1 -1
- package/dist/features/text-editor/index.mjs +1 -1
- package/dist/file-uploader-U64lH0zG.d.cts +101 -0
- package/dist/file-uploader-U64lH0zG.d.mts +101 -0
- package/dist/filter-CMzD5h0M.mjs +2 -0
- package/dist/filter-CMzD5h0M.mjs.map +1 -0
- package/dist/filter-Cmg6SHMu.cjs +2 -0
- package/dist/filter-Cmg6SHMu.cjs.map +1 -0
- package/dist/flex-CT71VV-I.d.cts +114 -0
- package/dist/flex-CT71VV-I.d.mts +114 -0
- package/dist/form-CMP15S4r.d.cts +109 -0
- package/dist/form-CMP15S4r.d.mts +109 -0
- package/dist/gain-loss-bar-chart-Dz1oAj8H.mjs +2 -0
- package/dist/gain-loss-bar-chart-Dz1oAj8H.mjs.map +1 -0
- package/dist/gain-loss-bar-chart-FUzN7DxF.cjs +2 -0
- package/dist/gain-loss-bar-chart-FUzN7DxF.cjs.map +1 -0
- package/dist/google-Bl-jBW8L.d.cts +48 -0
- package/dist/google-Bl-jBW8L.d.mts +48 -0
- package/dist/grid-i7Oz2Izf.d.cts +19 -0
- package/dist/grid-i7Oz2Izf.d.mts +19 -0
- package/dist/grid-product-card-bpADqDOQ.d.cts +30 -0
- package/dist/grid-product-card-bpADqDOQ.d.mts +30 -0
- package/dist/hover-card-Prwm-0Q4.d.cts +35 -0
- package/dist/hover-card-Prwm-0Q4.d.mts +35 -0
- package/dist/image-Cln0r7Eb.d.cts +27 -0
- package/dist/image-Cln0r7Eb.d.mts +27 -0
- package/dist/{index-C4isgHWG.d.cts → index-BRE7tL8d.d.cts} +121 -500
- package/dist/index-C2HFO3a9.d.mts +231 -0
- package/dist/index-C9eXmnvk.d.cts +36 -0
- package/dist/index-C9eXmnvk.d.mts +36 -0
- package/dist/index-CBntsHIg.d.cts +520 -0
- package/dist/index-CBntsHIg.d.mts +520 -0
- package/dist/{index-DOaKN0wJ.d.mts → index-D9bKlLiM.d.cts} +2 -22
- package/dist/{index-DOaKN0wJ.d.cts → index-D9bKlLiM.d.mts} +2 -22
- package/dist/index-DJiiPHPf.d.cts +59 -0
- package/dist/index-DJiiPHPf.d.mts +59 -0
- package/dist/index-DtIL69PB.d.cts +14 -0
- package/dist/index-DtIL69PB.d.mts +14 -0
- package/dist/{index-C8W56XKm.d.mts → index-DvoLzsh0.d.mts} +121 -500
- package/dist/index-fZChR7MS.d.cts +231 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +91 -91
- package/dist/index.d.mts +91 -91
- package/dist/index.mjs +1 -1
- package/dist/indexed-performance-line-chart-CT79KOM6.cjs +2 -0
- package/dist/indexed-performance-line-chart-CT79KOM6.cjs.map +1 -0
- package/dist/indexed-performance-line-chart-D7F-rIMv.mjs +2 -0
- package/dist/indexed-performance-line-chart-D7F-rIMv.mjs.map +1 -0
- package/dist/{input-go3H4EQz.d.cts → input-BieGEIDf.d.cts} +2 -2
- package/dist/{input-go3H4EQz.d.mts → input-BieGEIDf.d.mts} +2 -2
- package/dist/input-otp-6hJfhBHX.d.cts +56 -0
- package/dist/input-otp-6hJfhBHX.d.mts +56 -0
- package/dist/item-DTR2f2CX.d.cts +99 -0
- package/dist/item-cIhkI3ZI.d.mts +99 -0
- package/dist/label-DPG_GY7h.d.cts +22 -0
- package/dist/label-DPG_GY7h.d.mts +22 -0
- package/dist/layouts/cms-layout/index.cjs +1 -1
- package/dist/layouts/cms-layout/index.mjs +1 -1
- package/dist/layouts/flex.d.cts +2 -114
- package/dist/layouts/flex.d.mts +2 -114
- package/dist/layouts/grid.d.cts +2 -19
- package/dist/layouts/grid.d.mts +2 -19
- package/dist/layouts/payment-layout/index.cjs +1 -1
- package/dist/layouts/payment-layout/index.d.cts +2 -59
- package/dist/layouts/payment-layout/index.d.mts +2 -59
- package/dist/layouts/payment-layout/index.mjs +1 -1
- package/dist/list-display-BuRCso6J.mjs +2 -0
- package/dist/list-display-BuRCso6J.mjs.map +1 -0
- package/dist/list-display-DEU6yFa9.cjs +2 -0
- package/dist/list-display-DEU6yFa9.cjs.map +1 -0
- package/dist/loading-dialog-C73EJx9s.d.cts +19 -0
- package/dist/loading-dialog-C73EJx9s.d.mts +19 -0
- package/dist/menubar-CFrn3S96.d.cts +133 -0
- package/dist/menubar-CFrn3S96.d.mts +133 -0
- package/dist/metric-radar-chart-6LTGQHsL.mjs +2 -0
- package/dist/metric-radar-chart-6LTGQHsL.mjs.map +1 -0
- package/dist/metric-radar-chart-DwgbXgJX.cjs +2 -0
- package/dist/metric-radar-chart-DwgbXgJX.cjs.map +1 -0
- package/dist/mirrored-bar-chart-BT7AYPJB.mjs +2 -0
- package/dist/mirrored-bar-chart-BT7AYPJB.mjs.map +1 -0
- package/dist/mirrored-bar-chart-BwjtExjh.cjs +2 -0
- package/dist/mirrored-bar-chart-BwjtExjh.cjs.map +1 -0
- package/dist/more-button-BKBcXz6E.mjs +2 -0
- package/dist/more-button-BKBcXz6E.mjs.map +1 -0
- package/dist/more-button-RYvZgYiu.cjs +2 -0
- package/dist/more-button-RYvZgYiu.cjs.map +1 -0
- package/dist/multi-select-BbiKgAYs.d.cts +116 -0
- package/dist/multi-select-BoBHt_Z9.d.mts +116 -0
- package/dist/name-7aoM5rAW.d.cts +18 -0
- package/dist/name-7aoM5rAW.d.mts +18 -0
- package/dist/name-display-B6X52ip_.cjs +2 -0
- package/dist/name-display-B6X52ip_.cjs.map +1 -0
- package/dist/name-display-DXMZ8Lug.mjs +2 -0
- package/dist/name-display-DXMZ8Lug.mjs.map +1 -0
- package/dist/navigation-menu-B1BY9Zll.d.cts +73 -0
- package/dist/navigation-menu-B1BY9Zll.d.mts +73 -0
- package/dist/{number-field-Baj9Yhiv.mjs → number-field-BjVjf6s4.mjs} +2 -2
- package/dist/{number-field-Baj9Yhiv.mjs.map → number-field-BjVjf6s4.mjs.map} +1 -1
- package/dist/{number-field-BqeSbMvE.cjs → number-field-DmKh7bbY.cjs} +2 -2
- package/dist/{number-field-BqeSbMvE.cjs.map → number-field-DmKh7bbY.cjs.map} +1 -1
- package/dist/orders-bar-chart-9RmtP6In.cjs +2 -0
- package/dist/orders-bar-chart-9RmtP6In.cjs.map +1 -0
- package/dist/orders-bar-chart-DQhJGmwY.mjs +2 -0
- package/dist/orders-bar-chart-DQhJGmwY.mjs.map +1 -0
- package/dist/pages/FeatureDeveloping.d.cts +2 -41
- package/dist/pages/FeatureDeveloping.d.mts +2 -41
- package/dist/pages/FeatureFixing.d.cts +2 -41
- package/dist/pages/FeatureFixing.d.mts +2 -41
- package/dist/pages/LoginPage.cjs +1 -1
- package/dist/pages/LoginPage.cjs.map +1 -1
- package/dist/pages/LoginPage.d.cts +2 -53
- package/dist/pages/LoginPage.d.mts +2 -53
- package/dist/pages/LoginPage.mjs +1 -1
- package/dist/pages/LoginPage.mjs.map +1 -1
- package/dist/pages/NotAuthorized.d.cts +2 -41
- package/dist/pages/NotAuthorized.d.mts +2 -41
- package/dist/pages/NotFound.d.cts +2 -41
- package/dist/pages/NotFound.d.mts +2 -41
- package/dist/pages/RegisterPage.cjs +1 -1
- package/dist/pages/RegisterPage.cjs.map +1 -1
- package/dist/pages/RegisterPage.d.cts +2 -50
- package/dist/pages/RegisterPage.d.mts +2 -50
- package/dist/pages/RegisterPage.mjs +1 -1
- package/dist/pages/RegisterPage.mjs.map +1 -1
- package/dist/pages/VerifyEmailPage.d.cts +2 -62
- package/dist/pages/VerifyEmailPage.d.mts +2 -62
- package/dist/pagination-B2fyP0J2.d.cts +64 -0
- package/dist/pagination-DY0PBCnI.d.mts +64 -0
- package/dist/paragraph-BTmvVS1S.d.mts +46 -0
- package/dist/paragraph-DbYYv0A0.d.cts +46 -0
- package/dist/{password-field-fzpU42sV.mjs → password-field-C5FsQUa8.mjs} +2 -2
- package/dist/{password-field-fzpU42sV.mjs.map → password-field-C5FsQUa8.mjs.map} +1 -1
- package/dist/{password-field-Cq0S949S.cjs → password-field-gHYDiXWY.cjs} +2 -2
- package/dist/{password-field-Cq0S949S.cjs.map → password-field-gHYDiXWY.cjs.map} +1 -1
- package/dist/payment-layout-Cb-Q8KD2.cjs +2 -0
- package/dist/{payment-layout-BLrXT-oc.cjs.map → payment-layout-Cb-Q8KD2.cjs.map} +1 -1
- package/dist/{payment-layout-Dsz6wYT1.mjs → payment-layout-DS5CEH1h.mjs} +2 -2
- package/dist/{payment-layout-Dsz6wYT1.mjs.map → payment-layout-DS5CEH1h.mjs.map} +1 -1
- package/dist/permalink-CZ3g9daG.mjs +2 -0
- package/dist/permalink-CZ3g9daG.mjs.map +1 -0
- package/dist/permalink-DeeEKhfc.cjs +2 -0
- package/dist/permalink-DeeEKhfc.cjs.map +1 -0
- package/dist/phone-number-6b_pkGI1.d.cts +18 -0
- package/dist/phone-number-6b_pkGI1.d.mts +18 -0
- package/dist/phone-number-C43z68gT.mjs +2 -0
- package/dist/phone-number-C43z68gT.mjs.map +1 -0
- package/dist/phone-number-DhThJwd6.cjs +2 -0
- package/dist/phone-number-DhThJwd6.cjs.map +1 -0
- package/dist/popover-CdOCi0xg.d.cts +50 -0
- package/dist/popover-CdOCi0xg.d.mts +50 -0
- package/dist/{popover-form-DNbBGWVF.mjs → popover-form-B2taDBAh.mjs} +2 -2
- package/dist/{popover-form-DNbBGWVF.mjs.map → popover-form-B2taDBAh.mjs.map} +1 -1
- package/dist/{popover-form-KLmew1Vd.cjs → popover-form-_hQQpfAB.cjs} +2 -2
- package/dist/{popover-form-KLmew1Vd.cjs.map → popover-form-_hQQpfAB.cjs.map} +1 -1
- package/dist/portfolio-allocation-treemap-Bn0X4wb6.cjs +2 -0
- package/dist/portfolio-allocation-treemap-Bn0X4wb6.cjs.map +1 -0
- package/dist/portfolio-allocation-treemap-Cb9Kidrl.mjs +2 -0
- package/dist/portfolio-allocation-treemap-Cb9Kidrl.mjs.map +1 -0
- package/dist/price-range-area-chart-BW6RQb_9.cjs +2 -0
- package/dist/price-range-area-chart-BW6RQb_9.cjs.map +1 -0
- package/dist/price-range-area-chart-Dy01mhWJ.mjs +2 -0
- package/dist/price-range-area-chart-Dy01mhWJ.mjs.map +1 -0
- package/dist/product-card-CvXLXbpV.d.cts +30 -0
- package/dist/product-card-CvXLXbpV.d.mts +30 -0
- package/dist/progress-Bp-5keO8.d.cts +21 -0
- package/dist/progress-Bp-5keO8.d.mts +21 -0
- package/dist/progress-display-Bp0xVhln.cjs +2 -0
- package/dist/progress-display-Bp0xVhln.cjs.map +1 -0
- package/dist/progress-display-DYj7vAe9.mjs +2 -0
- package/dist/progress-display-DYj7vAe9.mjs.map +1 -0
- package/dist/{radio-group-field-DjzD3i-f.cjs → radio-group-field-McpjpLW-.cjs} +2 -2
- package/dist/{radio-group-field-DjzD3i-f.cjs.map → radio-group-field-McpjpLW-.cjs.map} +1 -1
- package/dist/{radio-group-field-Ps8yHpnH.mjs → radio-group-field-ZqMrf9Dx.mjs} +2 -2
- package/dist/{radio-group-field-Ps8yHpnH.mjs.map → radio-group-field-ZqMrf9Dx.mjs.map} +1 -1
- package/dist/radio-group-ycQQrPGn.d.cts +35 -0
- package/dist/radio-group-ycQQrPGn.d.mts +35 -0
- package/dist/refresh-BiyrZAXL.d.cts +16 -0
- package/dist/refresh-BiyrZAXL.d.mts +16 -0
- package/dist/remove-button-B3qFw-M5.cjs +2 -0
- package/dist/remove-button-B3qFw-M5.cjs.map +1 -0
- package/dist/remove-button-Db5oSj4h.mjs +2 -0
- package/dist/remove-button-Db5oSj4h.mjs.map +1 -0
- package/dist/{resizable-BLfxHCf4.d.cts → resizable-CAyWR1At.d.cts} +2 -2
- package/dist/{resizable-BLfxHCf4.d.mts → resizable-CAyWR1At.d.mts} +2 -2
- package/dist/revenue-area-chart-BwzeTRzD.mjs +2 -0
- package/dist/revenue-area-chart-BwzeTRzD.mjs.map +1 -0
- package/dist/revenue-area-chart-w2FZCl_7.cjs +2 -0
- package/dist/revenue-area-chart-w2FZCl_7.cjs.map +1 -0
- package/dist/revenue-orders-composed-chart-BttOWYGt.cjs +2 -0
- package/dist/revenue-orders-composed-chart-BttOWYGt.cjs.map +1 -0
- package/dist/revenue-orders-composed-chart-DwkbWZSX.mjs +2 -0
- package/dist/revenue-orders-composed-chart-DwkbWZSX.mjs.map +1 -0
- package/dist/role-badge-Bl4Rimpk.d.mts +21 -0
- package/dist/role-badge-IdZW0tsN.d.cts +21 -0
- package/dist/sales-target-radial-chart-BFLxBT2m.mjs +2 -0
- package/dist/sales-target-radial-chart-BFLxBT2m.mjs.map +1 -0
- package/dist/sales-target-radial-chart-BoxSk7hW.cjs +2 -0
- package/dist/sales-target-radial-chart-BoxSk7hW.cjs.map +1 -0
- package/dist/sankey-flow-chart-CDUqIRMZ.cjs +2 -0
- package/dist/sankey-flow-chart-CDUqIRMZ.cjs.map +1 -0
- package/dist/sankey-flow-chart-bQ3Dffet.mjs +2 -0
- package/dist/sankey-flow-chart-bQ3Dffet.mjs.map +1 -0
- package/dist/scroll-area-PbkqIAaH.d.cts +35 -0
- package/dist/scroll-area-PbkqIAaH.d.mts +35 -0
- package/dist/search-input-Bq4enQzR.d.cts +27 -0
- package/dist/search-input-D51_mAY-.d.mts +27 -0
- package/dist/select-B5j4WvPM.d.cts +74 -0
- package/dist/select-B5j4WvPM.d.mts +74 -0
- package/dist/{select-field-B4eU65OI.cjs → select-field-DG8sQ5iN.cjs} +2 -2
- package/dist/{select-field-B4eU65OI.cjs.map → select-field-DG8sQ5iN.cjs.map} +1 -1
- package/dist/{select-field-D6Dw-Jwg.mjs → select-field-Kq5iQCRQ.mjs} +2 -2
- package/dist/{select-field-D6Dw-Jwg.mjs.map → select-field-Kq5iQCRQ.mjs.map} +1 -1
- package/dist/separator-D6_fMJtM.d.cts +32 -0
- package/dist/separator-D6_fMJtM.d.mts +32 -0
- package/dist/sheet-cHLLSvvt.d.cts +66 -0
- package/dist/sheet-cHLLSvvt.d.mts +66 -0
- package/dist/sidebar-core-Bh0dZXsm.mjs +2 -0
- package/dist/sidebar-core-Bh0dZXsm.mjs.map +1 -0
- package/dist/sidebar-core-DQE6ymo4.cjs +2 -0
- package/dist/sidebar-core-DQE6ymo4.cjs.map +1 -0
- package/dist/{simple-array-field-Bcs2pHdp.cjs → simple-array-field-4paKpxXk.cjs} +2 -2
- package/dist/{simple-array-field-Bcs2pHdp.cjs.map → simple-array-field-4paKpxXk.cjs.map} +1 -1
- package/dist/{simple-array-field-9oZ-Smzp.mjs → simple-array-field-C5XdemXa.mjs} +2 -2
- package/dist/{simple-array-field-9oZ-Smzp.mjs.map → simple-array-field-C5XdemXa.mjs.map} +1 -1
- package/dist/{simple-boolean-field-C-qq6Vlt.cjs → simple-boolean-field-B9T_fHk9.cjs} +2 -2
- package/dist/{simple-boolean-field-C-qq6Vlt.cjs.map → simple-boolean-field-B9T_fHk9.cjs.map} +1 -1
- package/dist/{simple-boolean-field-CkJUMxNU.mjs → simple-boolean-field-DpJ-fSQk.mjs} +2 -2
- package/dist/{simple-boolean-field-CkJUMxNU.mjs.map → simple-boolean-field-DpJ-fSQk.mjs.map} +1 -1
- package/dist/simple-card-6P377r4A.d.cts +29 -0
- package/dist/simple-card-6P377r4A.d.mts +29 -0
- package/dist/{simple-combobox-field-5dfMd49B.mjs → simple-combobox-field-Ch4SBHCH.mjs} +2 -2
- package/dist/{simple-combobox-field-5dfMd49B.mjs.map → simple-combobox-field-Ch4SBHCH.mjs.map} +1 -1
- package/dist/{simple-combobox-field-BtmQGEo5.cjs → simple-combobox-field-ChMKk7xp.cjs} +2 -2
- package/dist/{simple-combobox-field-BtmQGEo5.cjs.map → simple-combobox-field-ChMKk7xp.cjs.map} +1 -1
- package/dist/{simple-date-field-LVfNhVJi.cjs → simple-date-field-BGGlsHzG.cjs} +2 -2
- package/dist/{simple-date-field-LVfNhVJi.cjs.map → simple-date-field-BGGlsHzG.cjs.map} +1 -1
- package/dist/{simple-date-field-BXoLb496.mjs → simple-date-field-CVKqIrEs.mjs} +2 -2
- package/dist/{simple-date-field-BXoLb496.mjs.map → simple-date-field-CVKqIrEs.mjs.map} +1 -1
- package/dist/{simple-email-field-rZZIXu7S.mjs → simple-email-field-98w0846B.mjs} +2 -2
- package/dist/{simple-email-field-rZZIXu7S.mjs.map → simple-email-field-98w0846B.mjs.map} +1 -1
- package/dist/{simple-email-field-QVUrm8f7.cjs → simple-email-field-DYqCWprP.cjs} +2 -2
- package/dist/{simple-email-field-QVUrm8f7.cjs.map → simple-email-field-DYqCWprP.cjs.map} +1 -1
- package/dist/{simple-number-field-P9PTwcs4.cjs → simple-number-field-otvv2xq-.cjs} +2 -2
- package/dist/{simple-number-field-P9PTwcs4.cjs.map → simple-number-field-otvv2xq-.cjs.map} +1 -1
- package/dist/{simple-number-field-PJAyAOMO.mjs → simple-number-field-zF3oqS8d.mjs} +2 -2
- package/dist/{simple-number-field-PJAyAOMO.mjs.map → simple-number-field-zF3oqS8d.mjs.map} +1 -1
- package/dist/{simple-password-field-BEuFXAsk.mjs → simple-password-field-CuC10c70.mjs} +2 -2
- package/dist/{simple-password-field-BEuFXAsk.mjs.map → simple-password-field-CuC10c70.mjs.map} +1 -1
- package/dist/{simple-password-field-BW6YkfSP.cjs → simple-password-field-D2UMmghM.cjs} +2 -2
- package/dist/{simple-password-field-BW6YkfSP.cjs.map → simple-password-field-D2UMmghM.cjs.map} +1 -1
- package/dist/{simple-radio-group-field-BtQHJpOz.cjs → simple-radio-group-field-C2DDfIUs.cjs} +2 -2
- package/dist/{simple-radio-group-field-BtQHJpOz.cjs.map → simple-radio-group-field-C2DDfIUs.cjs.map} +1 -1
- package/dist/{simple-radio-group-field-DiYQfgts.mjs → simple-radio-group-field-CfziNlLf.mjs} +2 -2
- package/dist/{simple-radio-group-field-DiYQfgts.mjs.map → simple-radio-group-field-CfziNlLf.mjs.map} +1 -1
- package/dist/{simple-select-field--zJMLBUY.cjs → simple-select-field-CeNnXUHN.cjs} +2 -2
- package/dist/{simple-select-field--zJMLBUY.cjs.map → simple-select-field-CeNnXUHN.cjs.map} +1 -1
- package/dist/{simple-select-field-Df4DLsbi.mjs → simple-select-field-DIaxhi1-.mjs} +2 -2
- package/dist/{simple-select-field-Df4DLsbi.mjs.map → simple-select-field-DIaxhi1-.mjs.map} +1 -1
- package/dist/{simple-text-field-zAfkmlhc.mjs → simple-text-field-D8jyznSd.mjs} +2 -2
- package/dist/{simple-text-field-zAfkmlhc.mjs.map → simple-text-field-D8jyznSd.mjs.map} +1 -1
- package/dist/{simple-text-field-DVkuHrhF.cjs → simple-text-field-LYWVIAfQ.cjs} +2 -2
- package/dist/{simple-text-field-DVkuHrhF.cjs.map → simple-text-field-LYWVIAfQ.cjs.map} +1 -1
- package/dist/{simple-textarea-field-BaMK0feA.cjs → simple-textarea-field-DcEvaizE.cjs} +2 -2
- package/dist/{simple-textarea-field-BaMK0feA.cjs.map → simple-textarea-field-DcEvaizE.cjs.map} +1 -1
- package/dist/{simple-textarea-field-q9DeFByl.mjs → simple-textarea-field-p9qX_n7m.mjs} +2 -2
- package/dist/{simple-textarea-field-q9DeFByl.mjs.map → simple-textarea-field-p9qX_n7m.mjs.map} +1 -1
- package/dist/skeleton-Ct4sYEKk.d.cts +24 -0
- package/dist/skeleton-Ct4sYEKk.d.mts +24 -0
- package/dist/slider-DwR1MhR8.d.cts +24 -0
- package/dist/slider-DwR1MhR8.d.mts +24 -0
- package/dist/sonner-B6LxJMYT.d.mts +22 -0
- package/dist/sonner-BcNgR0GP.d.cts +22 -0
- package/dist/sparkline-chart-TbGzakUl.mjs +2 -0
- package/dist/sparkline-chart-TbGzakUl.mjs.map +1 -0
- package/dist/sparkline-chart-sPqaJHep.cjs +2 -0
- package/dist/sparkline-chart-sPqaJHep.cjs.map +1 -0
- package/dist/spinner-CXuqcoB5.d.cts +22 -0
- package/dist/spinner-CXuqcoB5.d.mts +22 -0
- package/dist/stacked-area-chart-DyxY96_l.cjs +2 -0
- package/dist/stacked-area-chart-DyxY96_l.cjs.map +1 -0
- package/dist/stacked-area-chart-UIWIxTmq.mjs +2 -0
- package/dist/stacked-area-chart-UIWIxTmq.mjs.map +1 -0
- package/dist/statistic-8zBJMdRa.d.cts +45 -0
- package/dist/statistic-8zBJMdRa.d.mts +45 -0
- package/dist/statistic-BUGIRhL9.cjs +2 -0
- package/dist/statistic-BUGIRhL9.cjs.map +1 -0
- package/dist/statistic-Ug9Zgi3N.mjs +2 -0
- package/dist/statistic-Ug9Zgi3N.mjs.map +1 -0
- package/dist/status-display-B-6KKttX.mjs +2 -0
- package/dist/status-display-B-6KKttX.mjs.map +1 -0
- package/dist/status-display-DkI9UwAu.cjs +2 -0
- package/dist/status-display-DkI9UwAu.cjs.map +1 -0
- package/dist/summary-bar-CZHeAORf.mjs +2 -0
- package/dist/summary-bar-CZHeAORf.mjs.map +1 -0
- package/dist/summary-bar-DTFVpBZn.cjs +2 -0
- package/dist/summary-bar-DTFVpBZn.cjs.map +1 -0
- package/dist/switch-9v4AYqJb.d.cts +24 -0
- package/dist/switch-9v4AYqJb.d.mts +24 -0
- package/dist/{switch-field-B8HVvc2f.mjs → switch-field-CIoNsRWN.mjs} +2 -2
- package/dist/{switch-field-B8HVvc2f.mjs.map → switch-field-CIoNsRWN.mjs.map} +1 -1
- package/dist/{switch-field-C1uNuuku.cjs → switch-field-n6a5SaEM.cjs} +2 -2
- package/dist/{switch-field-C1uNuuku.cjs.map → switch-field-n6a5SaEM.cjs.map} +1 -1
- package/dist/systems/google.d.cts +2 -48
- package/dist/systems/google.d.mts +2 -48
- package/dist/table-Dg2D0v87.d.cts +70 -0
- package/dist/table-Dg2D0v87.d.mts +70 -0
- package/dist/tables-7aC9WFs9.cjs +2 -0
- package/dist/tables-7aC9WFs9.cjs.map +1 -0
- package/dist/tables-UikqnT9q.mjs +2 -0
- package/dist/tables-UikqnT9q.mjs.map +1 -0
- package/dist/tabs-CJ6qZcFU.d.cts +42 -0
- package/dist/tabs-CJ6qZcFU.d.mts +42 -0
- package/dist/tanstack-form-CNrZQZhn.cjs +2 -0
- package/dist/tanstack-form-CNrZQZhn.cjs.map +1 -0
- package/dist/tanstack-form-PC9YNeeo.mjs +2 -0
- package/dist/tanstack-form-PC9YNeeo.mjs.map +1 -0
- package/dist/text-editor-BYE2-G5K.mjs +2 -0
- package/dist/text-editor-BYE2-G5K.mjs.map +1 -0
- package/dist/text-editor-CfQk5dIx.cjs +2 -0
- package/dist/text-editor-CfQk5dIx.cjs.map +1 -0
- package/dist/{text-editor-field-CcsR48Jw.mjs → text-editor-field-fso-sw29.mjs} +2 -2
- package/dist/{text-editor-field-CcsR48Jw.mjs.map → text-editor-field-fso-sw29.mjs.map} +1 -1
- package/dist/{text-editor-field-BBDgCPuc.cjs → text-editor-field-gas5r-xy.cjs} +2 -2
- package/dist/{text-editor-field-BBDgCPuc.cjs.map → text-editor-field-gas5r-xy.cjs.map} +1 -1
- package/dist/{text-field-qhiYvQKt.mjs → text-field-B67oTV62.mjs} +2 -2
- package/dist/{text-field-qhiYvQKt.mjs.map → text-field-B67oTV62.mjs.map} +1 -1
- package/dist/{text-field-BhC_ik5w.cjs → text-field-BMo-8rsq.cjs} +2 -2
- package/dist/{text-field-BhC_ik5w.cjs.map → text-field-BMo-8rsq.cjs.map} +1 -1
- package/dist/textarea-C8ZIZh-y.d.cts +26 -0
- package/dist/textarea-C8ZIZh-y.d.mts +26 -0
- package/dist/{textarea-field-C-7ZoUMz.cjs → textarea-field-BUGcITwp.cjs} +2 -2
- package/dist/{textarea-field-C-7ZoUMz.cjs.map → textarea-field-BUGcITwp.cjs.map} +1 -1
- package/dist/{textarea-field-DqDciVSB.mjs → textarea-field-D70rGYIk.mjs} +2 -2
- package/dist/{textarea-field-DqDciVSB.mjs.map → textarea-field-D70rGYIk.mjs.map} +1 -1
- package/dist/title-BT9guhSU.d.cts +41 -0
- package/dist/title-BT9guhSU.d.mts +41 -0
- package/dist/toggle-Bh4EazxT.d.cts +30 -0
- package/dist/toggle-Bh4EazxT.d.mts +30 -0
- package/dist/toggle-button-DNLtfjJC.mjs +2 -0
- package/dist/toggle-button-DNLtfjJC.mjs.map +1 -0
- package/dist/toggle-button-Dq78v8cH.cjs +2 -0
- package/dist/toggle-button-Dq78v8cH.cjs.map +1 -0
- package/dist/toggle-group-BpqkL1ds.d.cts +37 -0
- package/dist/toggle-group-DzNE38v5.d.mts +37 -0
- package/dist/tooltip-B-yLj6pe.mjs +4 -0
- package/dist/tooltip-B-yLj6pe.mjs.map +1 -0
- package/dist/tooltip-D4U-RhIu.d.cts +53 -0
- package/dist/tooltip-D4U-RhIu.d.mts +53 -0
- package/dist/tooltip-octglTPf.cjs +4 -0
- package/dist/tooltip-octglTPf.cjs.map +1 -0
- package/dist/top-products-bar-chart-5EJFSkeo.cjs +2 -0
- package/dist/top-products-bar-chart-5EJFSkeo.cjs.map +1 -0
- package/dist/top-products-bar-chart-CKYaOGWT.mjs +2 -0
- package/dist/top-products-bar-chart-CKYaOGWT.mjs.map +1 -0
- package/dist/trash-BfWSqlL4.d.cts +16 -0
- package/dist/trash-BfWSqlL4.d.mts +16 -0
- package/dist/typography/paragraph.d.cts +2 -46
- package/dist/typography/paragraph.d.mts +2 -46
- package/dist/typography/title.d.cts +2 -41
- package/dist/typography/title.d.mts +2 -41
- package/dist/ui/alert-dialog.d.cts +2 -88
- package/dist/ui/alert-dialog.d.mts +2 -88
- package/dist/ui/aspect-ratio.d.cts +2 -22
- package/dist/ui/aspect-ratio.d.mts +2 -22
- package/dist/ui/avatar.d.cts +2 -33
- package/dist/ui/avatar.d.mts +2 -33
- package/dist/ui/badge.d.cts +1 -1
- package/dist/ui/badge.d.mts +1 -1
- package/dist/ui/breadcrumb.d.cts +2 -69
- package/dist/ui/breadcrumb.d.mts +2 -69
- package/dist/ui/button-group.d.cts +2 -48
- package/dist/ui/button-group.d.mts +2 -48
- package/dist/ui/button.d.cts +1 -1
- package/dist/ui/button.d.mts +1 -1
- package/dist/ui/buttons/add-new.d.cts +2 -16
- package/dist/ui/buttons/add-new.d.mts +2 -16
- package/dist/ui/buttons/edit.d.cts +2 -16
- package/dist/ui/buttons/edit.d.mts +2 -16
- package/dist/ui/buttons/refresh.d.cts +2 -16
- package/dist/ui/buttons/refresh.d.mts +2 -16
- package/dist/ui/buttons/trash.d.cts +2 -16
- package/dist/ui/buttons/trash.d.mts +2 -16
- package/dist/ui/buttons/upload-image.d.cts +2 -23
- package/dist/ui/buttons/upload-image.d.mts +2 -23
- package/dist/ui/calendar.d.cts +2 -43
- package/dist/ui/calendar.d.mts +2 -43
- package/dist/ui/card.d.cts +2 -60
- package/dist/ui/card.d.mts +2 -60
- package/dist/ui/carousel.d.cts +2 -70
- package/dist/ui/carousel.d.mts +2 -70
- package/dist/ui/chart.d.cts +2 -80
- package/dist/ui/chart.d.mts +2 -80
- package/dist/ui/checkbox.d.cts +2 -24
- package/dist/ui/checkbox.d.mts +2 -24
- package/dist/ui/collapsible.d.cts +2 -32
- package/dist/ui/collapsible.d.mts +2 -32
- package/dist/ui/command.d.cts +2 -87
- package/dist/ui/command.d.mts +2 -87
- package/dist/ui/context-menu.d.cts +2 -123
- package/dist/ui/context-menu.d.mts +2 -123
- package/dist/ui/drawer.d.cts +2 -70
- package/dist/ui/drawer.d.mts +2 -70
- package/dist/ui/dropdown-menu.d.cts +2 -125
- package/dist/ui/dropdown-menu.d.mts +2 -125
- package/dist/ui/empty.d.cts +2 -65
- package/dist/ui/empty.d.mts +2 -65
- package/dist/ui/field.d.cts +1 -1
- package/dist/ui/field.d.mts +1 -1
- package/dist/ui/file-uploader.d.cts +2 -101
- package/dist/ui/file-uploader.d.mts +2 -101
- package/dist/ui/form.d.cts +2 -109
- package/dist/ui/form.d.mts +2 -109
- package/dist/ui/hover-card.d.cts +2 -35
- package/dist/ui/hover-card.d.mts +2 -35
- package/dist/ui/image.d.cts +2 -27
- package/dist/ui/image.d.mts +2 -27
- package/dist/ui/input-otp.d.cts +2 -56
- package/dist/ui/input-otp.d.mts +2 -56
- package/dist/ui/input.d.cts +1 -1
- package/dist/ui/input.d.mts +1 -1
- package/dist/ui/inputs/search-input.d.cts +2 -27
- package/dist/ui/inputs/search-input.d.mts +2 -27
- package/dist/ui/item.d.cts +2 -99
- package/dist/ui/item.d.mts +2 -99
- package/dist/ui/label.d.cts +2 -22
- package/dist/ui/label.d.mts +2 -22
- package/dist/ui/menubar.d.cts +2 -133
- package/dist/ui/menubar.d.mts +2 -133
- package/dist/ui/multi-select.d.cts +2 -116
- package/dist/ui/multi-select.d.mts +2 -116
- package/dist/ui/navigation-menu.d.cts +2 -73
- package/dist/ui/navigation-menu.d.mts +2 -73
- package/dist/ui/pagination.d.cts +2 -64
- package/dist/ui/pagination.d.mts +2 -64
- package/dist/ui/popover.d.cts +2 -50
- package/dist/ui/popover.d.mts +2 -50
- package/dist/ui/progress.d.cts +2 -21
- package/dist/ui/progress.d.mts +2 -21
- package/dist/ui/radio-group.d.cts +2 -35
- package/dist/ui/radio-group.d.mts +2 -35
- package/dist/ui/resizable.d.cts +1 -1
- package/dist/ui/resizable.d.mts +1 -1
- package/dist/ui/scroll-area.d.cts +2 -35
- package/dist/ui/scroll-area.d.mts +2 -35
- package/dist/ui/select.d.cts +2 -74
- package/dist/ui/select.d.mts +2 -74
- package/dist/ui/separator.d.cts +2 -32
- package/dist/ui/separator.d.mts +2 -32
- package/dist/ui/sheet.d.cts +2 -66
- package/dist/ui/sheet.d.mts +2 -66
- package/dist/ui/skeleton.d.cts +2 -24
- package/dist/ui/skeleton.d.mts +2 -24
- package/dist/ui/slider.d.cts +2 -24
- package/dist/ui/slider.d.mts +2 -24
- package/dist/ui/sonner.d.cts +2 -22
- package/dist/ui/sonner.d.mts +2 -22
- package/dist/ui/spinner.d.cts +2 -22
- package/dist/ui/spinner.d.mts +2 -22
- package/dist/ui/switch.d.cts +2 -24
- package/dist/ui/switch.d.mts +2 -24
- package/dist/ui/table.d.cts +2 -70
- package/dist/ui/table.d.mts +2 -70
- package/dist/ui/tabs.d.cts +2 -42
- package/dist/ui/tabs.d.mts +2 -42
- package/dist/ui/textarea.d.cts +2 -26
- package/dist/ui/textarea.d.mts +2 -26
- package/dist/ui/toggle-group.d.cts +2 -37
- package/dist/ui/toggle-group.d.mts +2 -37
- package/dist/ui/toggle.d.cts +2 -30
- package/dist/ui/toggle.d.mts +2 -30
- package/dist/ui/tooltip.d.cts +2 -53
- package/dist/ui/tooltip.d.mts +2 -53
- package/dist/upload-image-D4VZU3IA.d.cts +23 -0
- package/dist/upload-image-D4VZU3IA.d.mts +23 -0
- package/dist/user-BymzvsYp.mjs +2 -0
- package/dist/user-BymzvsYp.mjs.map +1 -0
- package/dist/user-CvesQf42.d.cts +20 -0
- package/dist/user-CvesQf42.d.mts +20 -0
- package/dist/user-Dn53Fu5q.cjs +2 -0
- package/dist/user-Dn53Fu5q.cjs.map +1 -0
- package/dist/volume-bar-chart-BRpC_8-X.mjs +2 -0
- package/dist/volume-bar-chart-BRpC_8-X.mjs.map +1 -0
- package/dist/volume-bar-chart-CRxZPZIn.cjs +2 -0
- package/dist/volume-bar-chart-CRxZPZIn.cjs.map +1 -0
- package/dist/waterfall-chart-CTB2f5eh.cjs +2 -0
- package/dist/waterfall-chart-CTB2f5eh.cjs.map +1 -0
- package/dist/waterfall-chart-DwetaJFJ.mjs +2 -0
- package/dist/waterfall-chart-DwetaJFJ.mjs.map +1 -0
- package/package.json +1 -1
- package/dist/combobox-field-BGChwajc.mjs +0 -2
- package/dist/payment-layout-BLrXT-oc.cjs +0 -2
- package/dist/tables-B0Jl8Osc.cjs +0 -4
- package/dist/tables-B0Jl8Osc.cjs.map +0 -1
- package/dist/tables-Cylalxey.mjs +0 -4
- package/dist/tables-Cylalxey.mjs.map +0 -1
- package/dist/tanstack-form-CM_Hb3JT.mjs +0 -2
- package/dist/tanstack-form-CM_Hb3JT.mjs.map +0 -1
- package/dist/tanstack-form-DS_ZvRl8.cjs +0 -2
- package/dist/tanstack-form-DS_ZvRl8.cjs.map +0 -1
- package/dist/text-editor-BQtIXOpM.mjs +0 -2
- package/dist/text-editor-BQtIXOpM.mjs.map +0 -1
- package/dist/text-editor-DJYQXXtP.cjs +0 -2
- package/dist/text-editor-DJYQXXtP.cjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":["ChartContainer","ScatterChart","XAxis","YAxis","ChartTooltip","ChartTooltipContent","Scatter","point","ChartContainer","ComposedChart","CartesianGrid","XAxis","YAxis","ChartTooltip","ChartTooltipContent","Bar","ChartContainer","FunnelChart","ChartTooltip","ChartTooltipContent","Funnel","LabelList","ChartContainer","ScatterChart","CartesianGrid","XAxis","YAxis","ZAxis","ChartTooltip","ChartTooltipContent","Scatter","toKey","ChartContainer","PieChart","ChartTooltip","ChartTooltipContent","Pie","Label","ChartLegend","ChartLegendContent","ChartContainer","BarChart","CartesianGrid","XAxis","YAxis","ReferenceLine","ChartTooltip","ChartTooltipContent","Bar","Rectangle","ChartContainer","LineChart","CartesianGrid","XAxis","YAxis","ChartTooltip","ChartTooltipContent","Line","ChartLegend","ChartLegendContent","ChartContainer","RadarChart","PolarGrid","PolarAngleAxis","PolarRadiusAxis","ChartTooltip","ChartTooltipContent","Radar","ChartLegend","ChartLegendContent","ChartContainer","BarChart","CartesianGrid","XAxis","YAxis","ReferenceLine","ChartTooltip","ChartTooltipContent","Bar","ChartLegend","ChartLegendContent","ChartContainer","BarChart","CartesianGrid","XAxis","YAxis","ChartTooltip","ChartTooltipContent","Bar","ChartLegend","ChartLegendContent","ChartContainer","Treemap","ChartTooltip","ChartTooltipContent","ChartContainer","ComposedChart","CartesianGrid","XAxis","YAxis","ChartTooltip","ChartTooltipContent","Area","Line","ChartContainer","AreaChart","CartesianGrid","XAxis","YAxis","ChartTooltip","ChartTooltipContent","Area","ChartLegend","ChartLegendContent","ChartContainer","ComposedChart","CartesianGrid","XAxis","YAxis","ChartTooltip","ChartTooltipContent","Bar","Line","ChartLegend","ChartLegendContent","ChartContainer","RadialBarChart","PolarAngleAxis","RadialBar","PolarRadiusAxis","Label","ChartContainer","Sankey","Rectangle","ResponsiveContainer","LineChart","Line","AreaChart","Area","ChartContainer","AreaChart","CartesianGrid","XAxis","YAxis","ChartTooltip","ChartTooltipContent","Area","ChartLegend","ChartLegendContent","ChartContainer","BarChart","XAxis","YAxis","ChartTooltip","ChartTooltipContent","Bar","LabelList","ChartContainer","BarChart","CartesianGrid","XAxis","YAxis","ChartTooltip","ChartTooltipContent","Bar","Rectangle","ChartContainer","BarChart","CartesianGrid","XAxis","YAxis","ChartTooltip","ChartTooltipContent","Bar","Rectangle"],"sources":["../../../packages/components/features/charts/utils.ts","../../../packages/components/features/charts/components/activity-heatmap-chart.tsx","../../../packages/components/features/charts/components/candlestick-chart.tsx","../../../packages/components/features/charts/components/conversion-funnel-chart.tsx","../../../packages/components/features/charts/components/correlation-scatter-chart.tsx","../../../packages/components/features/charts/components/donut-chart.tsx","../../../packages/components/features/charts/components/gain-loss-bar-chart.tsx","../../../packages/components/features/charts/components/indexed-performance-line-chart.tsx","../../../packages/components/features/charts/components/metric-radar-chart.tsx","../../../packages/components/features/charts/components/mirrored-bar-chart.tsx","../../../packages/components/features/charts/components/orders-bar-chart.tsx","../../../packages/components/features/charts/components/portfolio-allocation-treemap.tsx","../../../packages/components/features/charts/components/price-range-area-chart.tsx","../../../packages/components/features/charts/components/revenue-area-chart.tsx","../../../packages/components/features/charts/components/revenue-orders-composed-chart.tsx","../../../packages/components/features/charts/components/sales-target-radial-chart.tsx","../../../packages/components/features/charts/components/sankey-flow-chart.tsx","../../../packages/components/features/charts/components/sparkline-chart.tsx","../../../packages/components/features/charts/components/stacked-area-chart.tsx","../../../packages/components/features/charts/components/top-products-bar-chart.tsx","../../../packages/components/features/charts/components/volume-bar-chart.tsx","../../../packages/components/features/charts/components/waterfall-chart.tsx"],"sourcesContent":["const CHART_COLOR_COUNT = 8;\n\n/** Cycles through the eight `--chart-N` theme palette variables. */\nexport const getChartColor = (index: number): string => `var(--chart-${(((index % CHART_COLOR_COUNT) + CHART_COLOR_COUNT) % CHART_COLOR_COUNT) + 1})`;\n\nexport const formatCompactNumber = (value: number, locale = 'en-US'): string =>\n new Intl.NumberFormat(locale, { notation: 'compact', maximumFractionDigits: 1 }).format(value);\n\nexport const formatCurrency = (value: number, currency = 'USD', locale = 'en-US'): string =>\n new Intl.NumberFormat(locale, {\n style: 'currency',\n currency,\n notation: Math.abs(value) >= 10_000 ? 'compact' : 'standard',\n maximumFractionDigits: Math.abs(value) >= 10_000 ? 1 : 0,\n }).format(value);\n\nexport const formatPercent = (value: number, locale = 'en-US'): string =>\n new Intl.NumberFormat(locale, { style: 'percent', maximumFractionDigits: 1 }).format(value);\n\nexport const toDateLabel = (date: string | Date, locale = 'en-US'): string => {\n const parsed = date instanceof Date ? date : new Date(date);\n if (Number.isNaN(parsed.getTime())) return String(date);\n return parsed.toLocaleDateString(locale, { month: 'short', day: 'numeric' });\n};\n\n/** Picks an up/down color by comparing `current` against `reference` (e.g. close vs. open, or vs. zero). */\nexport const getDirectionColor = (current: number, reference: number, colors?: { up?: string; down?: string }): string =>\n current >= reference ? (colors?.up ?? 'var(--success)') : (colors?.down ?? 'var(--danger)');\n\nexport const formatSignedPercent = (value: number, locale = 'en-US'): string => {\n const formatted = new Intl.NumberFormat(locale, { style: 'percent', maximumFractionDigits: 1, signDisplay: 'exceptZero' }).format(value);\n return formatted;\n};\n\n/**\n * Normalizes each of `seriesKeys` in `data` to a common `base` value at its first defined point,\n * so relative performance across series with different price scales becomes directly comparable.\n */\nexport const computeIndexedSeries = <T extends { date: string | Date } & Record<string, unknown>>(\n data: readonly T[],\n seriesKeys: readonly string[],\n base = 100\n): Array<Record<string, string | Date | number>> => {\n const baseValues: Record<string, number | undefined> = {};\n for (const key of seriesKeys) {\n const first = data.find(point => typeof point[key] === 'number')?.[key] as number | undefined;\n baseValues[key] = first;\n }\n\n return data.map(point => {\n const indexed: Record<string, number> = {};\n for (const key of seriesKeys) {\n const raw = point[key];\n const baseValue = baseValues[key];\n indexed[key] = typeof raw === 'number' && baseValue ? (raw / baseValue) * base : Number.NaN;\n }\n return { date: point.date, ...indexed };\n });\n};\n","'use client';\n\nimport { useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { type ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart';\n\nimport { Scatter, ScatterChart, XAxis, YAxis } from 'recharts';\nimport type { ActivityPoint, BaseChartProps } from '../types';\nimport { toDateLabel } from '../utils';\n\nconst WEEKDAY_LABELS = ['S', 'M', 'T', 'W', 'T', 'F', 'S'];\nconst CELL_SIZE = 13;\nconst MS_PER_DAY = 86_400_000;\n\nexport type ActivityHeatmapChartProps = BaseChartProps & {\n data: ActivityPoint[];\n /** Series label used in the theme config. Defaults to `'Activity'`. */\n label?: string;\n color?: string;\n valueFormatter?: (value: number) => string;\n};\n\n/**\n * A GitHub-style calendar heatmap for daily activity/usage intensity — logins, orders, commits\n * per day — laid out as a week-by-weekday grid with color opacity mapped to value.\n *\n * @example\n * ```tsx\n * import { ActivityHeatmapChart } from '@customafk/lunas-ui/features/charts';\n *\n * <ActivityHeatmapChart\n * data={[\n * { date: '2026-06-01', value: 4 },\n * { date: '2026-06-02', value: 12 },\n * ]}\n * />\n * ```\n */\nexport const ActivityHeatmapChart = ({\n data,\n label = 'Activity',\n color = 'var(--chart-1)',\n valueFormatter = value => value.toLocaleString('en-US'),\n className,\n height,\n}: ActivityHeatmapChartProps) => {\n const config = useMemo<ChartConfig>(() => ({ value: { label, color } }), [label, color]);\n\n const { chartData, monthTicks, maxWeek, maxValue } = useMemo(() => {\n const parsed = data\n .map(point => ({ ...point, parsedDate: point.date instanceof Date ? point.date : new Date(point.date) }))\n .sort((a, b) => a.parsedDate.getTime() - b.parsedDate.getTime());\n\n if (parsed.length === 0) return { chartData: [], monthTicks: new Map<number, string>(), maxWeek: 0, maxValue: 1 };\n\n const firstDate = parsed[0]?.parsedDate;\n const weekStart = new Date(firstDate);\n weekStart.setDate(weekStart.getDate() - weekStart.getDay());\n\n const months = new Map<number, string>();\n let lastMonth = -1;\n\n const points = parsed.map(point => {\n const weekday = point.parsedDate.getDay();\n const weekIndex = Math.floor((point.parsedDate.getTime() - weekStart.getTime()) / MS_PER_DAY / 7);\n const month = point.parsedDate.getMonth();\n if (month !== lastMonth) {\n months.set(weekIndex, point.parsedDate.toLocaleDateString('en-US', { month: 'short' }));\n lastMonth = month;\n }\n return { x: weekIndex, y: weekday, value: point.value, date: point.date };\n });\n\n return {\n chartData: points,\n monthTicks: months,\n maxWeek: Math.max(...points.map(point => point.x)),\n maxValue: Math.max(...points.map(point => point.value), 1),\n };\n }, [data]);\n\n return (\n <ChartContainer\n data-slot=\"activity-heatmap-chart\"\n config={config}\n className={cn('w-full', className)}\n style={height !== undefined ? { height, aspectRatio: 'auto' } : undefined}\n >\n <ScatterChart margin={{ top: 8, right: 12, bottom: 0, left: 0 }}>\n <XAxis\n type=\"number\"\n dataKey=\"x\"\n domain={[-0.5, maxWeek + 0.5]}\n ticks={Array.from(monthTicks.keys())}\n tickFormatter={x => monthTicks.get(x) ?? ''}\n tickLine={false}\n axisLine={false}\n tickMargin={8}\n interval={0}\n />\n <YAxis\n type=\"number\"\n dataKey=\"y\"\n domain={[-0.5, 6.5]}\n reversed\n ticks={[0, 1, 2, 3, 4, 5, 6]}\n tickFormatter={y => WEEKDAY_LABELS[y] ?? ''}\n tickLine={false}\n axisLine={false}\n width={20}\n interval={0}\n />\n <ChartTooltip\n cursor={false}\n content={\n <ChartTooltipContent\n hideLabel\n hideIndicator\n formatter={(_value, _name, item) => {\n const point = item.payload as { date: string | Date; value: number };\n return (\n <div className=\"grid gap-0.5\">\n <span className=\"font-medium text-muted-strong\">{toDateLabel(point.date)}</span>\n <span className=\"text-muted\">\n {valueFormatter(point.value)} {config.value?.label}\n </span>\n </div>\n );\n }}\n />\n }\n />\n <Scatter\n data={chartData}\n shape={props => {\n const { cx, cy, payload } = props;\n if (cx === undefined || cy === undefined) return <g />;\n const point = payload as { value: number };\n const intensity = Math.min(0.12 + 0.88 * (point.value / maxValue), 1);\n return <rect x={cx - CELL_SIZE / 2} y={cy - CELL_SIZE / 2} width={CELL_SIZE} height={CELL_SIZE} rx={3} fill={color} fillOpacity={intensity} />;\n }}\n />\n </ScatterChart>\n </ChartContainer>\n );\n};\n","'use client';\n\nimport { useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { type ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart';\n\nimport { Bar, CartesianGrid, ComposedChart, useXAxisScale, useYAxisScale, XAxis, YAxis } from 'recharts';\nimport type { BaseChartProps, OHLCPoint } from '../types';\nimport { getDirectionColor, toDateLabel } from '../utils';\n\ntype CandlestickSeriesProps = {\n data: OHLCPoint[];\n upColor: string;\n downColor: string;\n};\n\n/** Draws candle wicks + bodies directly against the chart's computed axis scales (recharts v3 pattern). */\nconst CandlestickSeries = ({ data, upColor, downColor }: CandlestickSeriesProps) => {\n const xScale = useXAxisScale();\n const yScale = useYAxisScale();\n\n if (!xScale || !yScale) return null;\n\n return (\n <g>\n {data.map(point => {\n const xStart = xScale(point.date, { position: 'start' });\n const xEnd = xScale(point.date, { position: 'end' });\n const yHigh = yScale(point.high);\n const yLow = yScale(point.low);\n const yOpen = yScale(point.open);\n const yClose = yScale(point.close);\n if (xStart === undefined || xEnd === undefined || yHigh === undefined || yLow === undefined || yOpen === undefined || yClose === undefined) {\n return null;\n }\n\n const bandWidth = xEnd - xStart;\n const bodyWidth = Math.max(bandWidth * 0.6, 2);\n const xCenter = xStart + bandWidth / 2;\n const color = getDirectionColor(point.close, point.open, { up: upColor, down: downColor });\n const bodyTop = Math.min(yOpen, yClose);\n const bodyHeight = Math.max(Math.abs(yClose - yOpen), 1);\n\n return (\n <g key={`${point.date}`}>\n <line x1={xCenter} x2={xCenter} y1={yHigh} y2={yLow} stroke={color} strokeWidth={1} />\n <rect x={xCenter - bodyWidth / 2} y={bodyTop} width={bodyWidth} height={bodyHeight} fill={color} />\n </g>\n );\n })}\n </g>\n );\n};\n\nexport type CandlestickChartProps = BaseChartProps & {\n data: OHLCPoint[];\n /** Series label used in the theme config. Defaults to `'Price'`. */\n label?: string;\n upColor?: string;\n downColor?: string;\n valueFormatter?: (value: number) => string;\n dateFormatter?: (date: string | Date) => string;\n showGrid?: boolean;\n};\n\n/**\n * A stock candlestick chart — open/high/low/close per period, green/red bodies, high-low wicks.\n * Recharts has no native candlestick type, so bodies and wicks are drawn against the chart's\n * computed axis scales via `useXAxisScale`/`useYAxisScale` (recharts v3).\n *\n * @example\n * ```tsx\n * import { CandlestickChart } from '@customafk/lunas-ui/features/charts';\n *\n * <CandlestickChart\n * data={[\n * { date: '2026-06-01', open: 140, high: 146.2, low: 138.5, close: 144.9 },\n * { date: '2026-06-02', open: 144.9, high: 145.6, low: 141.2, close: 142.1 },\n * ]}\n * />\n * ```\n */\nexport const CandlestickChart = ({\n data,\n label = 'Price',\n upColor = 'var(--success)',\n downColor = 'var(--danger)',\n valueFormatter = value => value.toLocaleString('en-US'),\n dateFormatter = toDateLabel,\n showGrid = true,\n className,\n animate = true,\n height,\n}: CandlestickChartProps) => {\n const config = useMemo<ChartConfig>(() => ({ close: { label, color: upColor } }), [label, upColor]);\n\n const yDomain = useMemo<[number, number]>(() => {\n if (data.length === 0) return [0, 1];\n const min = Math.min(...data.map(point => point.low));\n const max = Math.max(...data.map(point => point.high));\n const padding = (max - min) * 0.08 || Math.max(max, 1) * 0.08;\n return [min - padding, max + padding];\n }, [data]);\n\n return (\n <ChartContainer\n data-slot=\"candlestick-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 domain={yDomain} tickLine={false} axisLine={false} tickMargin={8} width={64} tickFormatter={valueFormatter} />\n <ChartTooltip\n cursor={false}\n content={\n <ChartTooltipContent\n hideIndicator\n labelFormatter={(_, payload) => {\n const date = payload?.[0]?.payload?.date;\n return date ? dateFormatter(date) : null;\n }}\n formatter={(_value, _name, item) => {\n const point = item.payload as OHLCPoint;\n return (\n <div className=\"grid gap-0.5\">\n <span className=\"text-muted\">\n O <span className=\"font-number text-text-positive-strong\">{valueFormatter(point.open)}</span> H{' '}\n <span className=\"font-number text-text-positive-strong\">{valueFormatter(point.high)}</span>\n </span>\n <span className=\"text-muted\">\n L <span className=\"font-number text-text-positive-strong\">{valueFormatter(point.low)}</span> C{' '}\n <span className=\"font-number text-text-positive-strong\">{valueFormatter(point.close)}</span>\n </span>\n </div>\n );\n }}\n />\n }\n />\n {/* Invisible series so the Tooltip has a graphical item to attach to; payload still carries the full OHLC row. */}\n <Bar dataKey=\"close\" fill=\"transparent\" isAnimationActive={animate} />\n <CandlestickSeries data={data} upColor={upColor} downColor={downColor} />\n </ComposedChart>\n </ChartContainer>\n );\n};\n","'use client';\n\nimport { useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { type ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart';\n\nimport { Funnel, FunnelChart, LabelList } from 'recharts';\nimport type { BaseChartProps, NamedValue } from '../types';\nimport { formatCompactNumber, formatPercent, getChartColor } from '../utils';\n\nexport type FunnelStage = NamedValue & {\n /** Config key; derived from `name` when omitted. */\n key?: string;\n color?: string;\n};\n\nexport type ConversionFunnelChartProps = BaseChartProps & {\n /** Funnel stages ordered top (widest) to bottom. */\n data: FunnelStage[];\n /** Appends each stage's percentage of the first stage. Defaults to `true`. */\n showConversionRates?: boolean;\n valueFormatter?: (value: number) => string;\n};\n\n/**\n * A conversion funnel for the ecommerce purchase journey — sessions, product views, carts,\n * checkouts, purchases — with per-stage conversion rates against the first stage.\n *\n * @example\n * ```tsx\n * import { ConversionFunnelChart } from '@customafk/lunas-ui/features/charts';\n *\n * <ConversionFunnelChart\n * data={[\n * { name: 'Sessions', value: 50000 },\n * { name: 'Product views', value: 32000 },\n * { name: 'Added to cart', value: 8400 },\n * { name: 'Purchased', value: 2900 },\n * ]}\n * />\n * ```\n */\nexport const ConversionFunnelChart = ({\n data,\n showConversionRates = true,\n valueFormatter = formatCompactNumber,\n className,\n animate = true,\n height,\n}: ConversionFunnelChartProps) => {\n const { chartData, config } = useMemo(() => {\n const first = data[0]?.value ?? 0;\n const entries = data.map((stage, index) => {\n const rate = first === 0 ? 0 : stage.value / first;\n const valueLabel = showConversionRates ? `${valueFormatter(stage.value)} (${formatPercent(rate)})` : valueFormatter(stage.value);\n return {\n ...stage,\n key: stage.key || stage.name.toLowerCase().replace(/[^a-z0-9]+/g, '-'),\n fill: stage.color || getChartColor(index),\n valueLabel,\n };\n });\n const chartConfig: ChartConfig = Object.fromEntries(entries.map(entry => [entry.key, { label: entry.name, color: entry.fill }]));\n return { chartData: entries, config: chartConfig };\n }, [data, showConversionRates, valueFormatter]);\n\n return (\n <ChartContainer\n data-slot=\"conversion-funnel-chart\"\n config={config}\n className={cn('w-full', className)}\n style={height !== undefined ? { height, aspectRatio: 'auto' } : undefined}\n >\n <FunnelChart margin={{ top: 8, right: 120, bottom: 8, left: 120 }}>\n <ChartTooltip content={<ChartTooltipContent nameKey=\"key\" hideLabel />} />\n <Funnel dataKey=\"value\" data={chartData} isAnimationActive={animate}>\n <LabelList dataKey=\"name\" position=\"left\" offset={12} className=\"fill-muted-strong\" fontSize={12} />\n <LabelList dataKey=\"valueLabel\" position=\"right\" offset={12} className=\"fill-text-positive-strong font-number\" fontSize={12} />\n </Funnel>\n </FunnelChart>\n </ChartContainer>\n );\n};\n","'use client';\n\nimport { useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { type ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart';\n\nimport { CartesianGrid, Scatter, ScatterChart, XAxis, YAxis, ZAxis } from 'recharts';\nimport type { BaseChartProps, ScatterPoint } from '../types';\n\nexport type CorrelationScatterChartProps = BaseChartProps & {\n data: ScatterPoint[];\n /** Series label used in the theme config. Defaults to `'Points'`. */\n label?: string;\n color?: string;\n xLabel?: string;\n yLabel?: string;\n xFormatter?: (value: number) => string;\n yFormatter?: (value: number) => string;\n /** Sizes each point from its `z` value. Defaults to `false`. */\n showBubbleSize?: boolean;\n showGrid?: boolean;\n};\n\n/**\n * A scatter (or bubble, with `showBubbleSize`) chart for correlating two metrics, with an\n * optional third dimension mapped to point size.\n *\n * @example\n * ```tsx\n * import { CorrelationScatterChart } from '@customafk/lunas-ui/features/charts';\n *\n * <CorrelationScatterChart\n * data={[\n * { x: 12, y: 4200, z: 40, name: 'Product A' },\n * { x: 18, y: 5100, z: 65, name: 'Product B' },\n * ]}\n * xLabel=\"Price ($)\"\n * yLabel=\"Units sold\"\n * showBubbleSize\n * />\n * ```\n */\nexport const CorrelationScatterChart = ({\n data,\n label = 'Points',\n color = 'var(--chart-1)',\n xLabel,\n yLabel,\n xFormatter = value => value.toLocaleString('en-US'),\n yFormatter = value => value.toLocaleString('en-US'),\n showBubbleSize = false,\n showGrid = true,\n className,\n animate = true,\n height,\n}: CorrelationScatterChartProps) => {\n const config = useMemo<ChartConfig>(() => ({ y: { label, color } }), [label, color]);\n\n return (\n <ChartContainer\n data-slot=\"correlation-scatter-chart\"\n config={config}\n className={cn('w-full', className)}\n style={height !== undefined ? { height, aspectRatio: 'auto' } : undefined}\n >\n <ScatterChart margin={{ top: 8, right: 12, bottom: 0, left: 12 }}>\n {showGrid && <CartesianGrid />}\n <XAxis type=\"number\" dataKey=\"x\" name={xLabel} tickLine={false} axisLine={false} tickMargin={8} tickFormatter={xFormatter} />\n <YAxis type=\"number\" dataKey=\"y\" name={yLabel} tickLine={false} axisLine={false} tickMargin={8} width={64} tickFormatter={yFormatter} />\n {showBubbleSize && <ZAxis type=\"number\" dataKey=\"z\" range={[64, 400]} />}\n <ChartTooltip\n cursor={{ strokeDasharray: '3 3' }}\n content={\n <ChartTooltipContent\n hideLabel\n formatter={(_value, _name, item) => {\n const point = item.payload as ScatterPoint;\n return (\n <div className=\"grid gap-0.5\">\n {point.name && <span className=\"font-medium text-muted-strong\">{point.name}</span>}\n <span className=\"text-muted\">\n {xLabel || 'x'}: <span className=\"font-medium font-number text-text-positive-strong\">{xFormatter(point.x)}</span>\n </span>\n <span className=\"text-muted\">\n {yLabel || 'y'}: <span className=\"font-medium font-number text-text-positive-strong\">{yFormatter(point.y)}</span>\n </span>\n </div>\n );\n }}\n />\n }\n />\n <Scatter data={data} fill={color} isAnimationActive={animate} />\n </ScatterChart>\n </ChartContainer>\n );\n};\n","'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 { Label, Pie, PieChart } from 'recharts';\nimport type { BaseChartProps, NamedValue } from '../types';\nimport { formatCompactNumber, getChartColor } from '../utils';\n\nexport type DonutChartSegment = NamedValue & {\n /** Config key; derived from `name` when omitted. */\n key?: string;\n color?: string;\n};\n\nexport type DonutChartProps = BaseChartProps & {\n data: DonutChartSegment[];\n /** Text under the center total, e.g. `'Total sales'`. */\n centerLabel?: string;\n /** Formats the center total. Defaults to compact notation. */\n centerValueFormatter?: (total: number) => string;\n /** Overrides the computed segment sum shown in the center. */\n totalValue?: number;\n showLegend?: boolean;\n showCenterTotal?: boolean;\n};\n\nconst toKey = (segment: DonutChartSegment): string => segment.key || segment.name.toLowerCase().replace(/[^a-z0-9]+/g, '-');\n\n/**\n * A donut breakdown chart with a center total — category sales, traffic sources, payment methods.\n *\n * @example\n * ```tsx\n * import { DonutChart } from '@customafk/lunas-ui/features/charts';\n *\n * <DonutChart\n * data={[\n * { name: 'Fashion', value: 12400 },\n * { name: 'Electronics', value: 8200 },\n * ]}\n * centerLabel=\"Total sales\"\n * />\n * ```\n */\nexport const DonutChart = ({\n data,\n centerLabel,\n centerValueFormatter = formatCompactNumber,\n totalValue,\n showLegend = true,\n showCenterTotal = true,\n className,\n animate = true,\n height,\n}: DonutChartProps) => {\n const { chartData, config, total } = useMemo(() => {\n const entries = data.map((segment, index) => ({\n ...segment,\n key: toKey(segment),\n fill: segment.color || getChartColor(index),\n }));\n const chartConfig: ChartConfig = Object.fromEntries(entries.map(entry => [entry.key, { label: entry.name, color: entry.fill }]));\n return {\n chartData: entries,\n config: chartConfig,\n total: totalValue ?? data.reduce((sum, segment) => sum + segment.value, 0),\n };\n }, [data, totalValue]);\n\n return (\n <ChartContainer\n data-slot=\"donut-chart\"\n config={config}\n className={cn('mx-auto', height === undefined && 'aspect-square', className)}\n style={height !== undefined ? { height, aspectRatio: 'auto' } : undefined}\n >\n <PieChart>\n <ChartTooltip cursor={false} content={<ChartTooltipContent nameKey=\"key\" hideLabel />} />\n <Pie data={chartData} dataKey=\"value\" nameKey=\"key\" innerRadius=\"60%\" strokeWidth={5} isAnimationActive={animate}>\n {showCenterTotal && (\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-2xl font-bold\">\n {centerValueFormatter(total)}\n </tspan>\n {centerLabel && (\n <tspan x={viewBox.cx} y={(viewBox.cy || 0) + 22} className=\"fill-muted text-xs\">\n {centerLabel}\n </tspan>\n )}\n </text>\n );\n }}\n />\n )}\n </Pie>\n {showLegend && <ChartLegend content={<ChartLegendContent nameKey=\"key\" />} />}\n </PieChart>\n </ChartContainer>\n );\n};\n","'use client';\n\nimport { useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { type ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart';\n\nimport { Bar, BarChart, CartesianGrid, Rectangle, ReferenceLine, XAxis, YAxis } from 'recharts';\nimport type { BaseChartProps, NamedValue } from '../types';\nimport { formatSignedPercent, getDirectionColor } from '../utils';\n\nexport type GainLossBarChartProps = BaseChartProps & {\n /** `name` is the period label (e.g. a month or quarter); `value` is the signed return. */\n data: NamedValue[];\n /** Series label. Defaults to `'Return'`. */\n label?: string;\n upColor?: string;\n downColor?: string;\n /** Formats tooltip and Y-axis values. Defaults to a signed percentage. */\n valueFormatter?: (value: number) => string;\n showGrid?: boolean;\n};\n\n/**\n * Diverging bars for period returns — bars grow up (gain) or down (loss) from a zero baseline,\n * colored accordingly. Clearer than a plain bar chart for signed data.\n *\n * @example\n * ```tsx\n * import { GainLossBarChart } from '@customafk/lunas-ui/features/charts';\n *\n * <GainLossBarChart\n * data={[\n * { name: 'Jan', value: 0.032 },\n * { name: 'Feb', value: -0.014 },\n * ]}\n * />\n * ```\n */\nexport const GainLossBarChart = ({\n data,\n label = 'Return',\n upColor = 'var(--success)',\n downColor = 'var(--danger)',\n valueFormatter = value => formatSignedPercent(value),\n showGrid = true,\n className,\n animate = true,\n height,\n}: GainLossBarChartProps) => {\n const config = useMemo<ChartConfig>(() => ({ value: { label, color: upColor } }), [label, upColor]);\n\n return (\n <ChartContainer\n data-slot=\"gain-loss-bar-chart\"\n config={config}\n className={cn('w-full', className)}\n style={height !== undefined ? { height, aspectRatio: 'auto' } : undefined}\n >\n <BarChart data={data} margin={{ top: 8, right: 12, bottom: 0, left: 12 }}>\n {showGrid && <CartesianGrid vertical={false} />}\n <XAxis dataKey=\"name\" tickLine={false} axisLine={false} tickMargin={8} />\n <YAxis tickLine={false} axisLine={false} tickMargin={8} width={56} tickFormatter={valueFormatter} />\n <ReferenceLine y={0} stroke=\"var(--border)\" />\n <ChartTooltip cursor={false} content={<ChartTooltipContent hideIndicator formatter={value => valueFormatter(Number(value))} />} />\n <Bar\n dataKey=\"value\"\n isAnimationActive={animate}\n shape={props => <Rectangle {...props} fill={getDirectionColor(Number(props.payload?.value ?? 0), 0, { up: upColor, down: downColor })} />}\n />\n </BarChart>\n </ChartContainer>\n );\n};\n","'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 { CartesianGrid, Line, LineChart, XAxis, YAxis } from 'recharts';\nimport type { BaseChartProps, ChartSeries } from '../types';\nimport { computeIndexedSeries, formatSignedPercent, getChartColor, toDateLabel } from '../utils';\n\nexport type IndexedPerformanceLineChartProps = BaseChartProps & {\n data: Array<{ date: string | Date } & Record<string, unknown>>;\n /** One entry per instrument/fund to compare. */\n series: ChartSeries[];\n /** The value every series is normalized to at its first data point. Defaults to `100`. */\n base?: number;\n /** Formats tooltip and Y-axis values. Defaults to signed % change from `base`. */\n valueFormatter?: (indexedValue: number, base: number) => string;\n dateFormatter?: (date: string | Date) => string;\n showLegend?: boolean;\n showGrid?: boolean;\n};\n\n/**\n * A multi-line chart normalizing several instruments to a common base (default 100) at the\n * start of the period, so relative performance is directly comparable regardless of price scale.\n *\n * @example\n * ```tsx\n * import { IndexedPerformanceLineChart } from '@customafk/lunas-ui/features/charts';\n *\n * <IndexedPerformanceLineChart\n * data={[\n * { date: '2026-06-01', aapl: 142.5, spy: 512.1 },\n * { date: '2026-06-02', aapl: 145.1, spy: 515.8 },\n * ]}\n * series={[\n * { key: 'aapl', label: 'AAPL' },\n * { key: 'spy', label: 'S&P 500' },\n * ]}\n * />\n * ```\n */\nexport const IndexedPerformanceLineChart = ({\n data,\n series,\n base = 100,\n valueFormatter = (indexedValue, indexBase) => formatSignedPercent(indexedValue / indexBase - 1),\n dateFormatter = toDateLabel,\n showLegend = true,\n showGrid = true,\n className,\n animate = true,\n height,\n}: IndexedPerformanceLineChartProps) => {\n const seriesKeys = useMemo(() => series.map(item => item.key), [series]);\n\n const chartData = useMemo(() => computeIndexedSeries(data, seriesKeys, base), [data, seriesKeys, base]);\n\n const config = useMemo<ChartConfig>(\n () => Object.fromEntries(series.map((item, index) => [item.key, { label: item.label, color: item.color || getChartColor(index) }])),\n [series]\n );\n\n return (\n <ChartContainer\n data-slot=\"indexed-performance-line-chart\"\n config={config}\n className={cn('w-full', className)}\n style={height !== undefined ? { height, aspectRatio: 'auto' } : undefined}\n >\n <LineChart data={chartData} 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\n tickLine={false}\n axisLine={false}\n tickMargin={8}\n width={56}\n domain={['auto', 'auto']}\n tickFormatter={value => valueFormatter(Number(value), base)}\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=\"ml-auto font-medium font-number text-text-positive-strong tabular-nums\">{valueFormatter(Number(value), base)}</span>\n </>\n )}\n />\n }\n />\n {series.map((item, index) => (\n <Line\n key={item.key}\n type=\"natural\"\n dataKey={item.key}\n stroke={item.color || getChartColor(index)}\n strokeWidth={2}\n dot={false}\n isAnimationActive={animate}\n />\n ))}\n {showLegend && <ChartLegend content={<ChartLegendContent />} />}\n </LineChart>\n </ChartContainer>\n );\n};\n","'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 { PolarAngleAxis, PolarGrid, PolarRadiusAxis, Radar, RadarChart } from 'recharts';\nimport type { BaseChartProps, ChartSeries } from '../types';\nimport { getChartColor } from '../utils';\n\nexport type MetricRadarChartProps = BaseChartProps & {\n data: Array<{ metric: string } & Record<string, unknown>>;\n /** One entry per entity being compared (e.g. a candidate, a product, a team). */\n series: ChartSeries[];\n valueFormatter?: (value: number) => string;\n /** Radius-axis domain. Defaults to `['auto', 'auto']`. */\n domain?: [number | 'auto', number | 'auto'];\n showLegend?: boolean;\n};\n\n/**\n * A radar chart comparing one or more entities across several metrics/dimensions — performance\n * review scores, feature comparisons, skill matrices.\n *\n * @example\n * ```tsx\n * import { MetricRadarChart } from '@customafk/lunas-ui/features/charts';\n *\n * <MetricRadarChart\n * data={[\n * { metric: 'Speed', teamA: 80, teamB: 65 },\n * { metric: 'Quality', teamA: 70, teamB: 90 },\n * { metric: 'Cost', teamA: 60, teamB: 75 },\n * ]}\n * series={[\n * { key: 'teamA', label: 'Team A' },\n * { key: 'teamB', label: 'Team B' },\n * ]}\n * />\n * ```\n */\nexport const MetricRadarChart = ({\n data,\n series,\n valueFormatter = value => value.toLocaleString('en-US'),\n domain = ['auto', 'auto'],\n showLegend = true,\n className,\n animate = true,\n height,\n}: MetricRadarChartProps) => {\n const config = useMemo<ChartConfig>(\n () => Object.fromEntries(series.map((item, index) => [item.key, { label: item.label, color: item.color || getChartColor(index) }])),\n [series]\n );\n\n return (\n <ChartContainer\n data-slot=\"metric-radar-chart\"\n config={config}\n className={cn('mx-auto', height === undefined && 'aspect-square', className)}\n style={height !== undefined ? { height, aspectRatio: 'auto' } : undefined}\n >\n <RadarChart data={data}>\n <PolarGrid />\n <PolarAngleAxis dataKey=\"metric\" tick={{ fontSize: 12 }} />\n <PolarRadiusAxis domain={domain} tick={false} axisLine={false} />\n <ChartTooltip content={<ChartTooltipContent formatter={value => valueFormatter(Number(value))} />} />\n {series.map((item, index) => {\n const color = item.color || getChartColor(index);\n return <Radar key={item.key} dataKey={item.key} stroke={color} fill={color} fillOpacity={0.25} isAnimationActive={animate} />;\n })}\n {showLegend && <ChartLegend content={<ChartLegendContent />} />}\n </RadarChart>\n </ChartContainer>\n );\n};\n","'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, BarChart, CartesianGrid, ReferenceLine, XAxis, YAxis } from 'recharts';\nimport type { BaseChartProps } from '../types';\n\nexport type MirroredBarRow = {\n category: string;\n left: number;\n right: number;\n};\n\nexport type MirroredBarChartProps = BaseChartProps & {\n data: MirroredBarRow[];\n leftLabel?: string;\n rightLabel?: string;\n leftColor?: string;\n rightColor?: string;\n valueFormatter?: (value: number) => string;\n showLegend?: boolean;\n showGrid?: boolean;\n};\n\n/**\n * A two-sided horizontal bar comparison (population-pyramid style) — this period vs. last\n * period, male vs. female, before vs. after — mirrored around a shared zero baseline.\n *\n * @example\n * ```tsx\n * import { MirroredBarChart } from '@customafk/lunas-ui/features/charts';\n *\n * <MirroredBarChart\n * data={[\n * { category: '18-24', left: 1200, right: 1400 },\n * { category: '25-34', left: 2600, right: 2100 },\n * ]}\n * leftLabel=\"Male\"\n * rightLabel=\"Female\"\n * />\n * ```\n */\nexport const MirroredBarChart = ({\n data,\n leftLabel = 'Left',\n rightLabel = 'Right',\n leftColor = 'var(--chart-1)',\n rightColor = 'var(--chart-4)',\n valueFormatter = value => value.toLocaleString('en-US'),\n showLegend = true,\n showGrid = true,\n className,\n animate = true,\n height,\n}: MirroredBarChartProps) => {\n const config = useMemo<ChartConfig>(\n () => ({ left: { label: leftLabel, color: leftColor }, right: { label: rightLabel, color: rightColor } }),\n [leftLabel, leftColor, rightLabel, rightColor]\n );\n\n const chartData = useMemo(() => data.map(row => ({ category: row.category, left: -row.left, right: row.right, originalLeft: row.left })), [data]);\n\n const axisFormatter = (value: number) => valueFormatter(Math.abs(value));\n\n return (\n <ChartContainer\n data-slot=\"mirrored-bar-chart\"\n config={config}\n className={cn('w-full', className)}\n style={height !== undefined ? { height, aspectRatio: 'auto' } : undefined}\n >\n <BarChart data={chartData} layout=\"vertical\" margin={{ top: 8, right: 12, bottom: 0, left: 12 }}>\n {showGrid && <CartesianGrid horizontal={false} />}\n <XAxis type=\"number\" tickLine={false} axisLine={false} tickMargin={8} tickFormatter={axisFormatter} />\n <YAxis type=\"category\" dataKey=\"category\" tickLine={false} axisLine={false} tickMargin={8} width={64} />\n <ReferenceLine x={0} stroke=\"var(--border)\" />\n <ChartTooltip\n content={\n <ChartTooltipContent\n formatter={(value, name, item) => {\n const isLeft = name === 'left';\n const rawValue = isLeft ? item.payload.originalLeft : Number(value);\n return (\n <>\n <div className=\"size-2.5 shrink-0 rounded-[2px]\" style={{ backgroundColor: item.color }} />\n <span className=\"text-muted\">{isLeft ? leftLabel : rightLabel}</span>\n <span className=\"ml-auto font-medium font-number text-text-positive-strong tabular-nums\">{valueFormatter(rawValue)}</span>\n </>\n );\n }}\n />\n }\n />\n <Bar dataKey=\"left\" fill={leftColor} radius={[4, 0, 0, 4]} isAnimationActive={animate} />\n <Bar dataKey=\"right\" fill={rightColor} radius={[0, 4, 4, 0]} isAnimationActive={animate} />\n {showLegend && <ChartLegend content={<ChartLegendContent />} />}\n </BarChart>\n </ChartContainer>\n );\n};\n","'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, BarChart, CartesianGrid, XAxis, YAxis } from 'recharts';\nimport type { BaseChartProps, ChartSeries } from '../types';\nimport { getChartColor, toDateLabel } from '../utils';\n\nexport type OrdersBarChartProps = BaseChartProps & {\n data: Array<{ date: string | Date } & Record<string, unknown>>;\n /** Simple mode: the key holding each period's count. Defaults to `'orders'`. */\n dataKey?: string;\n /** Series label in simple mode. Defaults to `'Orders'`. */\n label?: string;\n /** Stacked mode: one series per order status; each `key` indexes into the data rows. */\n statuses?: ChartSeries[];\n color?: string;\n valueFormatter?: (value: number) => string;\n dateFormatter?: (date: string | Date) => string;\n /** Defaults to `true` when `statuses` is provided. */\n showLegend?: boolean;\n showGrid?: boolean;\n};\n\n/**\n * A bar chart for order volume per period — a single series by default, or stacked by order\n * status when `statuses` is provided.\n *\n * @example\n * ```tsx\n * import { OrdersBarChart } from '@customafk/lunas-ui/features/charts';\n *\n * <OrdersBarChart\n * data={[{ date: '2026-06-01', completed: 32, pending: 6, cancelled: 2 }]}\n * statuses={[\n * { key: 'completed', label: 'Completed' },\n * { key: 'pending', label: 'Pending' },\n * { key: 'cancelled', label: 'Cancelled' },\n * ]}\n * />\n * ```\n */\nexport const OrdersBarChart = ({\n data,\n dataKey = 'orders',\n label = 'Orders',\n statuses,\n color = 'var(--chart-1)',\n valueFormatter = value => value.toLocaleString('en-US'),\n dateFormatter = toDateLabel,\n showLegend = !!statuses,\n showGrid = true,\n className,\n animate = true,\n height,\n}: OrdersBarChartProps) => {\n const config = useMemo<ChartConfig>(() => {\n if (!statuses) return { [dataKey]: { label, color } };\n return Object.fromEntries(statuses.map((status, index) => [status.key, { label: status.label, color: status.color || getChartColor(index) }]));\n }, [statuses, dataKey, label, color]);\n\n return (\n <ChartContainer\n data-slot=\"orders-bar-chart\"\n config={config}\n className={cn('w-full', className)}\n style={height !== undefined ? { height, aspectRatio: 'auto' } : undefined}\n >\n <BarChart 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 tickLine={false} axisLine={false} tickMargin={8} width={48} allowDecimals={false} tickFormatter={valueFormatter} />\n <ChartTooltip\n content={\n <ChartTooltipContent\n labelFormatter={(_, payload) => {\n const date = payload?.[0]?.payload?.date;\n return date ? dateFormatter(date) : null;\n }}\n />\n }\n />\n {statuses ? (\n statuses.map((status, index) => (\n <Bar\n key={status.key}\n dataKey={status.key}\n stackId=\"orders\"\n fill={status.color || getChartColor(index)}\n radius={index === statuses.length - 1 ? [4, 4, 0, 0] : [0, 0, 0, 0]}\n isAnimationActive={animate}\n />\n ))\n ) : (\n <Bar dataKey={dataKey} fill={color} radius={[4, 4, 0, 0]} isAnimationActive={animate} />\n )}\n {showLegend && <ChartLegend content={<ChartLegendContent />} />}\n </BarChart>\n </ChartContainer>\n );\n};\n","'use client';\n\nimport { useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { type ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart';\n\nimport type { TreemapNode } from 'recharts';\nimport { Treemap } from 'recharts';\nimport type { BaseChartProps, PortfolioHolding } from '../types';\nimport { formatCompactNumber, getChartColor } from '../utils';\n\nexport type PortfolioAllocationTreemapProps = BaseChartProps & {\n data: PortfolioHolding[];\n valueFormatter?: (value: number) => string;\n /** Shows the holding name and formatted value inside each rect when it fits. Defaults to `true`. */\n showLabels?: boolean;\n};\n\nconst toKey = (holding: PortfolioHolding): string => holding.key || holding.name.toLowerCase().replace(/[^a-z0-9]+/g, '-');\n\n/**\n * A treemap for portfolio holdings / asset allocation, sized by weight — clearer than a donut\n * once there are more than a handful of positions.\n *\n * @example\n * ```tsx\n * import { PortfolioAllocationTreemap } from '@customafk/lunas-ui/features/charts';\n *\n * <PortfolioAllocationTreemap\n * data={[\n * { name: 'AAPL', value: 24000 },\n * { name: 'MSFT', value: 18500 },\n * { name: 'Bonds', value: 12000 },\n * ]}\n * />\n * ```\n */\nexport const PortfolioAllocationTreemap = ({\n data,\n valueFormatter = formatCompactNumber,\n showLabels = true,\n className,\n animate = true,\n height,\n}: PortfolioAllocationTreemapProps) => {\n const { chartData, config } = useMemo(() => {\n const entries = data.map((holding, index) => ({\n ...holding,\n key: toKey(holding),\n fill: holding.color || getChartColor(index),\n }));\n const chartConfig: ChartConfig = Object.fromEntries(entries.map(entry => [entry.key, { label: entry.name, color: entry.fill }]));\n return { chartData: entries, config: chartConfig };\n }, [data]);\n\n const renderContent = (node: TreemapNode) => {\n if (node.depth !== 1) return <g />;\n const holding = chartData.find(entry => entry.key === node.name);\n const fitsLabel = showLabels && node.width >= 36 && node.height >= 24;\n\n return (\n <g>\n <rect x={node.x} y={node.y} width={node.width} height={node.height} fill={holding?.fill} stroke=\"var(--background)\" />\n {fitsLabel && (\n <text x={node.x + 6} y={node.y + 16} className=\"fill-white font-medium text-xs\">\n {holding?.name}\n </text>\n )}\n {fitsLabel && node.height > 40 && (\n <text x={node.x + 6} y={node.y + 32} className=\"fill-white/80 font-number text-[11px]\">\n {valueFormatter(node.value)}\n </text>\n )}\n </g>\n );\n };\n\n return (\n <ChartContainer\n data-slot=\"portfolio-allocation-treemap\"\n config={config}\n className={cn('w-full', className)}\n style={height !== undefined ? { height, aspectRatio: 'auto' } : undefined}\n >\n <Treemap data={chartData} dataKey=\"value\" nameKey=\"key\" isAnimationActive={animate} content={renderContent}>\n <ChartTooltip content={<ChartTooltipContent nameKey=\"key\" hideLabel formatter={value => valueFormatter(Number(value))} />} />\n </Treemap>\n </ChartContainer>\n );\n};\n","'use client';\n\nimport { useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { type ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart';\n\nimport { Area, CartesianGrid, ComposedChart, Line, XAxis, YAxis } from 'recharts';\nimport type { BaseChartProps, OHLCPoint } from '../types';\nimport { toDateLabel } from '../utils';\n\nexport type PriceRangeAreaChartProps = BaseChartProps & {\n /** Only `date`, `high`, `low`, and `close` are used; pass the same rows given to `CandlestickChart`. */\n data: Array<Pick<OHLCPoint, 'date' | 'high' | 'low' | 'close'>>;\n /** Close-price series label. Defaults to `'Close'`. */\n label?: string;\n /** High-low band label. Defaults to `'Range'`. */\n rangeLabel?: string;\n color?: string;\n valueFormatter?: (value: number) => string;\n dateFormatter?: (date: string | Date) => string;\n showGrid?: boolean;\n};\n\n/**\n * A shaded high-low trading-range band with the close price drawn on top — the daily range is\n * visible at a glance alongside the closing trend.\n *\n * @example\n * ```tsx\n * import { PriceRangeAreaChart } from '@customafk/lunas-ui/features/charts';\n *\n * <PriceRangeAreaChart\n * data={[{ date: '2026-06-01', high: 146.2, low: 141.8, close: 144.9 }]}\n * />\n * ```\n */\nexport const PriceRangeAreaChart = ({\n data,\n label = 'Close',\n rangeLabel = 'Range',\n color = 'var(--chart-1)',\n valueFormatter = value => value.toLocaleString('en-US'),\n dateFormatter = toDateLabel,\n showGrid = true,\n className,\n animate = true,\n height,\n}: PriceRangeAreaChartProps) => {\n const config = useMemo<ChartConfig>(() => ({ close: { label, color }, rangeSpan: { label: rangeLabel, color } }), [label, color, rangeLabel]);\n\n const chartData = useMemo(() => data.map(point => ({ ...point, rangeSpan: point.high - point.low })), [data]);\n\n return (\n <ChartContainer\n data-slot=\"price-range-area-chart\"\n config={config}\n className={cn('w-full', className)}\n style={height !== undefined ? { height, aspectRatio: 'auto' } : undefined}\n >\n <ComposedChart data={chartData} 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 domain={['auto', 'auto']} 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 if (name !== 'close') return null;\n const point = item.payload as { high: number; low: number };\n return (\n <div className=\"grid gap-0.5\">\n <span className=\"text-muted\">\n {config.close?.label} <span className=\"font-medium font-number text-text-positive-strong\">{valueFormatter(Number(value))}</span>\n </span>\n <span className=\"text-[11px] text-muted\">\n {valueFormatter(point.low)} – {valueFormatter(point.high)}\n </span>\n </div>\n );\n }}\n />\n }\n />\n <Area dataKey=\"low\" stackId=\"range\" stroke=\"none\" fill=\"transparent\" isAnimationActive={animate} />\n <Area dataKey=\"rangeSpan\" stackId=\"range\" stroke=\"none\" fill={color} fillOpacity={0.15} isAnimationActive={animate} />\n <Line type=\"natural\" dataKey=\"close\" stroke={color} strokeWidth={2} dot={false} isAnimationActive={animate} />\n </ComposedChart>\n </ChartContainer>\n );\n};\n","'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","'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","'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","'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","'use client';\n\nimport { useId, useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Area, AreaChart, Line, LineChart, ResponsiveContainer } from 'recharts';\nimport type { ChartTrend } from '../types';\n\nconst TREND_COLORS: Record<ChartTrend, string> = {\n up: 'var(--success)',\n down: 'var(--danger)',\n neutral: 'var(--chart-1)',\n};\n\nexport type SparklineChartProps = {\n data: number[] | Array<{ value: number }>;\n /** Render style. Defaults to `'area'`. */\n type?: 'line' | 'area';\n /** Colors the series like the `Statistic` trend prop. Defaults to `'neutral'`. */\n trend?: ChartTrend;\n /** Explicit series color; overrides `trend`. */\n color?: string;\n /** Fixed height in px. Defaults to `40`. */\n height?: number;\n animate?: boolean;\n className?: string;\n};\n\n/**\n * A tiny, axis-less trend chart for KPI cards; pairs with the `Statistic` display component.\n *\n * @example\n * ```tsx\n * import { SparklineChart } from '@customafk/lunas-ui/features/charts';\n *\n * <SparklineChart data={[12, 18, 14, 26, 22, 31]} trend=\"up\" />\n * ```\n */\nexport const SparklineChart = ({ data, type = 'area', trend = 'neutral', color, height = 40, animate = true, className }: SparklineChartProps) => {\n const gradientId = useId();\n const seriesColor = color || TREND_COLORS[trend];\n\n const chartData = useMemo(() => data.map(point => (typeof point === 'number' ? { value: point } : point)), [data]);\n\n const margin = { top: 2, right: 0, bottom: 2, left: 0 };\n\n return (\n <div data-slot=\"sparkline-chart\" className={cn('w-full', className)} style={{ height }}>\n <ResponsiveContainer>\n {type === 'line' ? (\n <LineChart data={chartData} margin={margin}>\n <Line type=\"natural\" dataKey=\"value\" stroke={seriesColor} strokeWidth={2} dot={false} isAnimationActive={animate} />\n </LineChart>\n ) : (\n <AreaChart data={chartData} margin={margin}>\n <defs>\n <linearGradient id={gradientId} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"5%\" stopColor={seriesColor} stopOpacity={0.4} />\n <stop offset=\"95%\" stopColor={seriesColor} stopOpacity={0.05} />\n </linearGradient>\n </defs>\n <Area type=\"natural\" dataKey=\"value\" stroke={seriesColor} strokeWidth={2} fill={`url(#${gradientId})`} isAnimationActive={animate} />\n </AreaChart>\n )}\n </ResponsiveContainer>\n </div>\n );\n};\n","'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 { Area, AreaChart, CartesianGrid, XAxis, YAxis } from 'recharts';\nimport type { BaseChartProps, ChartSeries } from '../types';\nimport { getChartColor, toDateLabel } from '../utils';\n\nexport type StackedAreaChartProps = BaseChartProps & {\n data: Array<{ date: string | Date } & Record<string, unknown>>;\n /** One entry per stacked category. */\n series: ChartSeries[];\n valueFormatter?: (value: number) => string;\n dateFormatter?: (date: string | Date) => string;\n showLegend?: boolean;\n showGrid?: boolean;\n};\n\n/**\n * A stacked area chart for cumulative composition over time — e.g. revenue by channel, traffic\n * by source. Unlike `RevenueAreaChart` (a single series plus one comparison overlay), every\n * series here stacks to show the total alongside each category's contribution.\n *\n * @example\n * ```tsx\n * import { StackedAreaChart } from '@customafk/lunas-ui/features/charts';\n *\n * <StackedAreaChart\n * data={[{ date: '2026-06-01', direct: 4200, organic: 3100, paid: 1800 }]}\n * series={[\n * { key: 'direct', label: 'Direct' },\n * { key: 'organic', label: 'Organic' },\n * { key: 'paid', label: 'Paid' },\n * ]}\n * />\n * ```\n */\nexport const StackedAreaChart = ({\n data,\n series,\n valueFormatter = value => value.toLocaleString('en-US'),\n dateFormatter = toDateLabel,\n showLegend = true,\n showGrid = true,\n className,\n animate = true,\n height,\n}: StackedAreaChartProps) => {\n const config = useMemo<ChartConfig>(\n () => Object.fromEntries(series.map((item, index) => [item.key, { label: item.label, color: item.color || getChartColor(index) }])),\n [series]\n );\n\n return (\n <ChartContainer\n data-slot=\"stacked-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 {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 content={\n <ChartTooltipContent\n labelFormatter={(_, payload) => {\n const date = payload?.[0]?.payload?.date;\n return date ? dateFormatter(date) : null;\n }}\n formatter={value => valueFormatter(Number(value))}\n />\n }\n />\n {series.map((item, index) => {\n const color = item.color || getChartColor(index);\n return (\n <Area key={item.key} type=\"natural\" dataKey={item.key} stackId=\"stack\" stroke={color} fill={color} fillOpacity={0.35} isAnimationActive={animate} />\n );\n })}\n {showLegend && <ChartLegend content={<ChartLegendContent />} />}\n </AreaChart>\n </ChartContainer>\n );\n};\n","'use client';\n\nimport { useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { type ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart';\n\nimport { Bar, BarChart, LabelList, XAxis, YAxis } from 'recharts';\nimport type { BaseChartProps, NamedValue } from '../types';\nimport { formatCompactNumber } from '../utils';\n\nexport type TopProductsBarChartProps = BaseChartProps & {\n data: NamedValue[];\n /** Series label. Defaults to `'Sales'`. */\n label?: string;\n /** Number of items shown after sorting descending. Defaults to `8`. */\n maxItems?: number;\n color?: string;\n valueFormatter?: (value: number) => string;\n /** Value labels at the end of each bar. Defaults to `true`. */\n showValueLabels?: boolean;\n};\n\n/**\n * A horizontal bar ranking chart — top products, best categories, top customers.\n *\n * @example\n * ```tsx\n * import { TopProductsBarChart } from '@customafk/lunas-ui/features/charts';\n *\n * <TopProductsBarChart\n * data={[\n * { name: 'Wireless Earbuds', value: 1245 },\n * { name: 'Smart Watch', value: 986 },\n * ]}\n * />\n * ```\n */\nexport const TopProductsBarChart = ({\n data,\n label = 'Sales',\n maxItems = 8,\n color = 'var(--chart-1)',\n valueFormatter = formatCompactNumber,\n showValueLabels = true,\n className,\n animate = true,\n height,\n}: TopProductsBarChartProps) => {\n const chartData = useMemo(() => [...data].sort((a, b) => b.value - a.value).slice(0, maxItems), [data, maxItems]);\n\n const config = useMemo<ChartConfig>(() => ({ value: { label, color } }), [label, color]);\n\n return (\n <ChartContainer\n data-slot=\"top-products-bar-chart\"\n config={config}\n className={cn('w-full', className)}\n style={height !== undefined ? { height, aspectRatio: 'auto' } : undefined}\n >\n <BarChart data={chartData} layout=\"vertical\" margin={{ top: 0, right: showValueLabels ? 48 : 12, bottom: 0, left: 12 }}>\n <XAxis type=\"number\" dataKey=\"value\" hide />\n <YAxis type=\"category\" dataKey=\"name\" tickLine={false} axisLine={false} tickMargin={8} width={120} />\n <ChartTooltip cursor={false} content={<ChartTooltipContent hideLabel />} />\n <Bar dataKey=\"value\" fill={color} radius={4} isAnimationActive={animate}>\n {showValueLabels && (\n <LabelList\n dataKey=\"value\"\n position=\"right\"\n offset={8}\n className=\"fill-muted-strong\"\n fontSize={12}\n formatter={(value: React.ReactNode) => valueFormatter(Number(value))}\n />\n )}\n </Bar>\n </BarChart>\n </ChartContainer>\n );\n};\n","'use client';\n\nimport { useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { type ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart';\n\nimport { Bar, BarChart, CartesianGrid, Rectangle, XAxis, YAxis } from 'recharts';\nimport type { BaseChartProps, OHLCPoint } from '../types';\nimport { formatCompactNumber, getDirectionColor, toDateLabel } from '../utils';\n\nexport type VolumeBarChartProps = BaseChartProps & {\n /** Only `date`, `close`, and `volume` are used; pass the same rows given to `CandlestickChart`. */\n data: Array<Pick<OHLCPoint, 'date' | 'close' | 'volume'>>;\n /** Series label. Defaults to `'Volume'`. */\n label?: string;\n upColor?: string;\n downColor?: string;\n valueFormatter?: (value: number) => string;\n dateFormatter?: (date: string | Date) => string;\n showGrid?: boolean;\n};\n\n/**\n * Volume bars colored by day direction (close vs. previous close), meant to sit under a\n * `CandlestickChart` on a shared time axis.\n *\n * @example\n * ```tsx\n * import { VolumeBarChart } from '@customafk/lunas-ui/features/charts';\n *\n * <VolumeBarChart\n * data={[\n * { date: '2026-06-01', close: 142.5, volume: 2_400_000 },\n * { date: '2026-06-02', close: 145.1, volume: 3_100_000 },\n * ]}\n * />\n * ```\n */\nexport const VolumeBarChart = ({\n data,\n label = 'Volume',\n upColor = 'var(--success)',\n downColor = 'var(--danger)',\n valueFormatter = formatCompactNumber,\n dateFormatter = toDateLabel,\n showGrid = true,\n className,\n animate = true,\n height,\n}: VolumeBarChartProps) => {\n const config = useMemo<ChartConfig>(() => ({ volume: { label, color: upColor } }), [label, upColor]);\n\n const chartData = useMemo(() => data.map((point, index) => ({ ...point, previousClose: index > 0 ? data[index - 1]?.close : point.close })), [data]);\n\n return (\n <ChartContainer\n data-slot=\"volume-bar-chart\"\n config={config}\n className={cn('w-full', className)}\n style={height !== undefined ? { height, aspectRatio: 'auto' } : undefined}\n >\n <BarChart data={chartData} 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 tickLine={false} axisLine={false} tickMargin={8} width={56} tickFormatter={valueFormatter} />\n <ChartTooltip\n cursor={false}\n content={\n <ChartTooltipContent\n hideIndicator\n labelFormatter={(_, payload) => {\n const date = payload?.[0]?.payload?.date;\n return date ? dateFormatter(date) : null;\n }}\n formatter={value => valueFormatter(Number(value))}\n />\n }\n />\n <Bar\n dataKey=\"volume\"\n isAnimationActive={animate}\n shape={props => {\n const point = props.payload as { close?: number; previousClose?: number } | undefined;\n const color = getDirectionColor(point?.close ?? 0, point?.previousClose ?? 0, { up: upColor, down: downColor });\n return <Rectangle {...props} fill={color} />;\n }}\n />\n </BarChart>\n </ChartContainer>\n );\n};\n","'use client';\n\nimport { useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { type ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart';\n\nimport { Bar, BarChart, CartesianGrid, Rectangle, XAxis, YAxis } from 'recharts';\nimport type { BaseChartProps, WaterfallPoint } from '../types';\nimport { getDirectionColor } from '../utils';\n\nexport type WaterfallChartProps = BaseChartProps & {\n data: WaterfallPoint[];\n /** Color for `isTotal` bars. Defaults to `'var(--chart-1)'`. */\n totalColor?: string;\n upColor?: string;\n downColor?: string;\n valueFormatter?: (value: number) => string;\n showGrid?: boolean;\n};\n\n/**\n * A waterfall/bridge chart — an incremental sequence of positive/negative steps between totals\n * (e.g. starting balance → revenue → costs → ending balance). Built as stacked bars: an\n * invisible \"base\" bar positions each floating step at its running total.\n *\n * @example\n * ```tsx\n * import { WaterfallChart } from '@customafk/lunas-ui/features/charts';\n *\n * <WaterfallChart\n * data={[\n * { label: 'Starting cash', value: 50000, isTotal: true },\n * { label: 'Revenue', value: 32000 },\n * { label: 'COGS', value: -18000 },\n * { label: 'Opex', value: -9000 },\n * { label: 'Ending cash', value: 55000, isTotal: true },\n * ]}\n * />\n * ```\n */\nexport const WaterfallChart = ({\n data,\n totalColor = 'var(--chart-1)',\n upColor = 'var(--success)',\n downColor = 'var(--danger)',\n valueFormatter = value => value.toLocaleString('en-US'),\n showGrid = true,\n className,\n animate = true,\n height,\n}: WaterfallChartProps) => {\n const config = useMemo<ChartConfig>(() => ({ size: { label: 'Amount', color: totalColor } }), [totalColor]);\n\n const chartData = useMemo(() => {\n let cumulative = 0;\n return data.map(point => {\n if (point.isTotal) {\n const base = 0;\n cumulative = point.value;\n return { ...point, base, size: point.value, color: totalColor, runningTotal: cumulative };\n }\n const previous = cumulative;\n cumulative += point.value;\n const base = Math.min(previous, cumulative);\n return {\n ...point,\n base,\n size: Math.abs(point.value),\n color: getDirectionColor(point.value, 0, { up: upColor, down: downColor }),\n runningTotal: cumulative,\n };\n });\n }, [data, totalColor, upColor, downColor]);\n\n return (\n <ChartContainer\n data-slot=\"waterfall-chart\"\n config={config}\n className={cn('w-full', className)}\n style={height !== undefined ? { height, aspectRatio: 'auto' } : undefined}\n >\n <BarChart data={chartData} margin={{ top: 8, right: 12, bottom: 0, left: 12 }}>\n {showGrid && <CartesianGrid vertical={false} />}\n <XAxis dataKey=\"label\" tickLine={false} axisLine={false} tickMargin={8} />\n <YAxis tickLine={false} axisLine={false} tickMargin={8} width={64} tickFormatter={valueFormatter} />\n <ChartTooltip\n cursor={false}\n content={\n <ChartTooltipContent\n hideIndicator\n formatter={(_value, _name, item) => {\n const point = item.payload as (typeof chartData)[number];\n return (\n <div className=\"grid gap-0.5\">\n <span className=\"text-muted\">\n {point.isTotal ? 'Total' : point.value >= 0 ? 'Increase' : 'Decrease'}{' '}\n <span className=\"font-medium font-number text-text-positive-strong\">{valueFormatter(point.value)}</span>\n </span>\n <span className=\"text-[11px] text-muted\">Running total {valueFormatter(point.runningTotal)}</span>\n </div>\n );\n }}\n />\n }\n />\n <Bar dataKey=\"base\" stackId=\"waterfall\" fill=\"transparent\" isAnimationActive={false} />\n <Bar\n dataKey=\"size\"\n stackId=\"waterfall\"\n isAnimationActive={animate}\n shape={props => <Rectangle {...props} fill={(props.payload as { color: string }).color} radius={2} />}\n />\n </BarChart>\n </ChartContainer>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["Skeleton","Suspense"],"sources":["../../../packages/components/features/charts/utils.ts","../../../packages/components/features/charts/index.tsx"],"sourcesContent":["const CHART_COLOR_COUNT = 8;\n\n/** Cycles through the eight `--chart-N` theme palette variables. */\nexport const getChartColor = (index: number): string => `var(--chart-${(((index % CHART_COLOR_COUNT) + CHART_COLOR_COUNT) % CHART_COLOR_COUNT) + 1})`;\n\nexport const formatCompactNumber = (value: number, locale = 'en-US'): string =>\n new Intl.NumberFormat(locale, { notation: 'compact', maximumFractionDigits: 1 }).format(value);\n\nexport const formatCurrency = (value: number, currency = 'USD', locale = 'en-US'): string =>\n new Intl.NumberFormat(locale, {\n style: 'currency',\n currency,\n notation: Math.abs(value) >= 10_000 ? 'compact' : 'standard',\n maximumFractionDigits: Math.abs(value) >= 10_000 ? 1 : 0,\n }).format(value);\n\nexport const formatPercent = (value: number, locale = 'en-US'): string =>\n new Intl.NumberFormat(locale, { style: 'percent', maximumFractionDigits: 1 }).format(value);\n\nexport const toDateLabel = (date: string | Date, locale = 'en-US'): string => {\n const parsed = date instanceof Date ? date : new Date(date);\n if (Number.isNaN(parsed.getTime())) return String(date);\n return parsed.toLocaleDateString(locale, { month: 'short', day: 'numeric' });\n};\n\n/** Picks an up/down color by comparing `current` against `reference` (e.g. close vs. open, or vs. zero). */\nexport const getDirectionColor = (current: number, reference: number, colors?: { up?: string; down?: string }): string =>\n current >= reference ? (colors?.up ?? 'var(--success)') : (colors?.down ?? 'var(--danger)');\n\nexport const formatSignedPercent = (value: number, locale = 'en-US'): string => {\n const formatted = new Intl.NumberFormat(locale, { style: 'percent', maximumFractionDigits: 1, signDisplay: 'exceptZero' }).format(value);\n return formatted;\n};\n\n/**\n * Normalizes each of `seriesKeys` in `data` to a common `base` value at its first defined point,\n * so relative performance across series with different price scales becomes directly comparable.\n */\nexport const computeIndexedSeries = <T extends { date: string | Date } & Record<string, unknown>>(\n data: readonly T[],\n seriesKeys: readonly string[],\n base = 100\n): Array<Record<string, string | Date | number>> => {\n const baseValues: Record<string, number | undefined> = {};\n for (const key of seriesKeys) {\n const first = data.find(point => typeof point[key] === 'number')?.[key] as number | undefined;\n baseValues[key] = first;\n }\n\n return data.map(point => {\n const indexed: Record<string, number> = {};\n for (const key of seriesKeys) {\n const raw = point[key];\n const baseValue = baseValues[key];\n indexed[key] = typeof raw === 'number' && baseValue ? (raw / baseValue) * base : Number.NaN;\n }\n return { date: point.date, ...indexed };\n });\n};\n","'use client';\n\n/**\n * @module @customafk/lunas-ui/features/charts\n *\n * Prebuilt Recharts-based dashboard charts for ecommerce, finance/stock, and general analytics\n * CMS screens — revenue trends, order volumes, product rankings, category breakdowns, conversion\n * funnels, sales targets, KPI sparklines, candlesticks, trading volume, portfolio allocation,\n * indexed performance comparison, gain/loss bars, waterfalls, stacked composition, radar\n * comparisons, correlation/bubble scatter, activity heatmaps, mirrored comparisons, and Sankey\n * flow diagrams. Built on the `@customafk/lunas-ui/ui/chart` primitives.\n *\n * Each chart is loaded on demand behind `React.lazy` — a page that renders only a couple of\n * these only pays for the recharts sub-tree those specific charts need, not all twenty.\n *\n * Requires the `recharts` peer dependency.\n *\n * @example\n * ```tsx\n * import {\n * ActivityHeatmapChart,\n * CandlestickChart,\n * ConversionFunnelChart,\n * CorrelationScatterChart,\n * DonutChart,\n * GainLossBarChart,\n * IndexedPerformanceLineChart,\n * MetricRadarChart,\n * MirroredBarChart,\n * OrdersBarChart,\n * PortfolioAllocationTreemap,\n * PriceRangeAreaChart,\n * RevenueAreaChart,\n * RevenueOrdersComposedChart,\n * SalesTargetRadialChart,\n * SankeyFlowChart,\n * SparklineChart,\n * StackedAreaChart,\n * TopProductsBarChart,\n * VolumeBarChart,\n * WaterfallChart,\n * } from '@customafk/lunas-ui/features/charts';\n * ```\n */\nimport type { ComponentProps, ComponentType } from 'react';\nimport { lazy, Suspense } from 'react';\n\nimport { Skeleton } from '@/components/ui/skeleton';\n\nexport * from './types';\nexport * from './utils';\n\nimport type { ActivityHeatmapChart as ActivityHeatmapChartType } from './components/activity-heatmap-chart';\nimport type { CandlestickChart as CandlestickChartType } from './components/candlestick-chart';\nimport type { ConversionFunnelChart as ConversionFunnelChartType } from './components/conversion-funnel-chart';\nimport type { CorrelationScatterChart as CorrelationScatterChartType } from './components/correlation-scatter-chart';\nimport type { DonutChart as DonutChartType } from './components/donut-chart';\nimport type { GainLossBarChart as GainLossBarChartType } from './components/gain-loss-bar-chart';\nimport type { IndexedPerformanceLineChart as IndexedPerformanceLineChartType } from './components/indexed-performance-line-chart';\nimport type { MetricRadarChart as MetricRadarChartType } from './components/metric-radar-chart';\nimport type { MirroredBarChart as MirroredBarChartType } from './components/mirrored-bar-chart';\nimport type { OrdersBarChart as OrdersBarChartType } from './components/orders-bar-chart';\nimport type { PortfolioAllocationTreemap as PortfolioAllocationTreemapType } from './components/portfolio-allocation-treemap';\nimport type { PriceRangeAreaChart as PriceRangeAreaChartType } from './components/price-range-area-chart';\nimport type { RevenueAreaChart as RevenueAreaChartType } from './components/revenue-area-chart';\nimport type { RevenueOrdersComposedChart as RevenueOrdersComposedChartType } from './components/revenue-orders-composed-chart';\nimport type { SalesTargetRadialChart as SalesTargetRadialChartType } from './components/sales-target-radial-chart';\nimport type { SankeyFlowChart as SankeyFlowChartType } from './components/sankey-flow-chart';\nimport type { SparklineChart as SparklineChartType } from './components/sparkline-chart';\nimport type { StackedAreaChart as StackedAreaChartType } from './components/stacked-area-chart';\nimport type { TopProductsBarChart as TopProductsBarChartType } from './components/top-products-bar-chart';\nimport type { VolumeBarChart as VolumeBarChartType } from './components/volume-bar-chart';\nimport type { WaterfallChart as WaterfallChartType } from './components/waterfall-chart';\n\nexport type { ActivityHeatmapChartProps } from './components/activity-heatmap-chart';\nexport type { CandlestickChartProps } from './components/candlestick-chart';\nexport type { ConversionFunnelChartProps, FunnelStage } from './components/conversion-funnel-chart';\nexport type { CorrelationScatterChartProps } from './components/correlation-scatter-chart';\n// Named types beyond each component's own `XChartProps`, re-exported for consumers.\nexport type { DonutChartProps, DonutChartSegment } from './components/donut-chart';\nexport type { GainLossBarChartProps } from './components/gain-loss-bar-chart';\nexport type { IndexedPerformanceLineChartProps } from './components/indexed-performance-line-chart';\nexport type { MetricRadarChartProps } from './components/metric-radar-chart';\nexport type { MirroredBarChartProps, MirroredBarRow } from './components/mirrored-bar-chart';\nexport type { OrdersBarChartProps } from './components/orders-bar-chart';\nexport type { PortfolioAllocationTreemapProps } from './components/portfolio-allocation-treemap';\nexport type { PriceRangeAreaChartProps } from './components/price-range-area-chart';\nexport type { RevenueAreaChartProps } from './components/revenue-area-chart';\nexport type { RevenueOrdersComposedChartProps, RevenueOrdersPoint } from './components/revenue-orders-composed-chart';\nexport type { SalesTargetRadialChartProps } from './components/sales-target-radial-chart';\nexport type { SankeyFlowChartProps, SankeyFlowLink, SankeyFlowNode } from './components/sankey-flow-chart';\nexport type { SparklineChartProps } from './components/sparkline-chart';\nexport type { StackedAreaChartProps } from './components/stacked-area-chart';\nexport type { TopProductsBarChartProps } from './components/top-products-bar-chart';\nexport type { VolumeBarChartProps } from './components/volume-bar-chart';\nexport type { WaterfallChartProps } from './components/waterfall-chart';\n\n/** Aspect-video-shaped pulse placeholder shown while a lazy chart chunk is still loading. */\nfunction ChartSkeleton() {\n return <Skeleton data-slot=\"chart-skeleton\" className=\"aspect-video w-full rounded\" />;\n}\n\n/**\n * Wraps a `lazy()`-loaded chart in its own `Suspense` boundary so it can be dropped anywhere\n * without callers needing to set up Suspense themselves. Keeps this file itself small — each\n * chart's `recharts` sub-tree only loads when a page actually renders that chart type.\n */\nfunction lazyChart<P extends object>(loader: () => Promise<{ default: ComponentType<P> }>): ComponentType<P> {\n const LazyComponent = lazy(loader);\n return (props: P) => (\n <Suspense fallback={<ChartSkeleton />}>\n <LazyComponent {...props} />\n </Suspense>\n );\n}\n\nconst ActivityHeatmapChart = lazyChart<ComponentProps<typeof ActivityHeatmapChartType>>(() =>\n import('./components/activity-heatmap-chart').then(m => ({ default: m.ActivityHeatmapChart }))\n);\nconst CandlestickChart = lazyChart<ComponentProps<typeof CandlestickChartType>>(() =>\n import('./components/candlestick-chart').then(m => ({ default: m.CandlestickChart }))\n);\nconst ConversionFunnelChart = lazyChart<ComponentProps<typeof ConversionFunnelChartType>>(() =>\n import('./components/conversion-funnel-chart').then(m => ({ default: m.ConversionFunnelChart }))\n);\nconst CorrelationScatterChart = lazyChart<ComponentProps<typeof CorrelationScatterChartType>>(() =>\n import('./components/correlation-scatter-chart').then(m => ({ default: m.CorrelationScatterChart }))\n);\nconst DonutChart = lazyChart<ComponentProps<typeof DonutChartType>>(() => import('./components/donut-chart').then(m => ({ default: m.DonutChart })));\nconst GainLossBarChart = lazyChart<ComponentProps<typeof GainLossBarChartType>>(() =>\n import('./components/gain-loss-bar-chart').then(m => ({ default: m.GainLossBarChart }))\n);\nconst IndexedPerformanceLineChart = lazyChart<ComponentProps<typeof IndexedPerformanceLineChartType>>(() =>\n import('./components/indexed-performance-line-chart').then(m => ({ default: m.IndexedPerformanceLineChart }))\n);\nconst MetricRadarChart = lazyChart<ComponentProps<typeof MetricRadarChartType>>(() =>\n import('./components/metric-radar-chart').then(m => ({ default: m.MetricRadarChart }))\n);\nconst MirroredBarChart = lazyChart<ComponentProps<typeof MirroredBarChartType>>(() =>\n import('./components/mirrored-bar-chart').then(m => ({ default: m.MirroredBarChart }))\n);\nconst OrdersBarChart = lazyChart<ComponentProps<typeof OrdersBarChartType>>(() =>\n import('./components/orders-bar-chart').then(m => ({ default: m.OrdersBarChart }))\n);\nconst PortfolioAllocationTreemap = lazyChart<ComponentProps<typeof PortfolioAllocationTreemapType>>(() =>\n import('./components/portfolio-allocation-treemap').then(m => ({ default: m.PortfolioAllocationTreemap }))\n);\nconst PriceRangeAreaChart = lazyChart<ComponentProps<typeof PriceRangeAreaChartType>>(() =>\n import('./components/price-range-area-chart').then(m => ({ default: m.PriceRangeAreaChart }))\n);\nconst RevenueAreaChart = lazyChart<ComponentProps<typeof RevenueAreaChartType>>(() =>\n import('./components/revenue-area-chart').then(m => ({ default: m.RevenueAreaChart }))\n);\nconst RevenueOrdersComposedChart = lazyChart<ComponentProps<typeof RevenueOrdersComposedChartType>>(() =>\n import('./components/revenue-orders-composed-chart').then(m => ({ default: m.RevenueOrdersComposedChart }))\n);\nconst SalesTargetRadialChart = lazyChart<ComponentProps<typeof SalesTargetRadialChartType>>(() =>\n import('./components/sales-target-radial-chart').then(m => ({ default: m.SalesTargetRadialChart }))\n);\nconst SankeyFlowChart = lazyChart<ComponentProps<typeof SankeyFlowChartType>>(() =>\n import('./components/sankey-flow-chart').then(m => ({ default: m.SankeyFlowChart }))\n);\nconst SparklineChart = lazyChart<ComponentProps<typeof SparklineChartType>>(() =>\n import('./components/sparkline-chart').then(m => ({ default: m.SparklineChart }))\n);\nconst StackedAreaChart = lazyChart<ComponentProps<typeof StackedAreaChartType>>(() =>\n import('./components/stacked-area-chart').then(m => ({ default: m.StackedAreaChart }))\n);\nconst TopProductsBarChart = lazyChart<ComponentProps<typeof TopProductsBarChartType>>(() =>\n import('./components/top-products-bar-chart').then(m => ({ default: m.TopProductsBarChart }))\n);\nconst VolumeBarChart = lazyChart<ComponentProps<typeof VolumeBarChartType>>(() =>\n import('./components/volume-bar-chart').then(m => ({ default: m.VolumeBarChart }))\n);\nconst WaterfallChart = lazyChart<ComponentProps<typeof WaterfallChartType>>(() =>\n import('./components/waterfall-chart').then(m => ({ default: m.WaterfallChart }))\n);\n\nexport {\n ActivityHeatmapChart,\n CandlestickChart,\n ConversionFunnelChart,\n CorrelationScatterChart,\n DonutChart,\n GainLossBarChart,\n IndexedPerformanceLineChart,\n MetricRadarChart,\n MirroredBarChart,\n OrdersBarChart,\n PortfolioAllocationTreemap,\n PriceRangeAreaChart,\n RevenueAreaChart,\n RevenueOrdersComposedChart,\n SalesTargetRadialChart,\n SankeyFlowChart,\n SparklineChart,\n StackedAreaChart,\n TopProductsBarChart,\n VolumeBarChart,\n WaterfallChart,\n};\n"],"mappings":"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"}
|