erp-pro-ui 0.2.5 → 0.2.7
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/accordion.cjs +1 -1
- package/dist/accordion.mjs +1 -1
- package/dist/alert.cjs +1 -1
- package/dist/alert.mjs +1 -1
- package/dist/animated-content.cjs +1 -1
- package/dist/animated-content.mjs +1 -1
- package/dist/ascii-text.cjs +1 -1
- package/dist/ascii-text.mjs +1 -1
- package/dist/background-gradient-animation.cjs +1 -1
- package/dist/background-gradient-animation.mjs +1 -1
- package/dist/button-hover-border-gradient.cjs +1 -1
- package/dist/button-hover-border-gradient.mjs +1 -1
- package/dist/button.cjs +1 -1
- package/dist/button.mjs +1 -1
- package/dist/calendar.cjs +1 -1
- package/dist/calendar.mjs +1 -1
- package/dist/card.cjs +1 -1
- package/dist/card.mjs +1 -1
- package/dist/carousel.cjs +1 -1
- package/dist/carousel.mjs +1 -1
- package/dist/catalog.cjs +21 -0
- package/dist/catalog.cjs.map +1 -1
- package/dist/catalog.d.ts +37 -1
- package/dist/catalog.d.ts.map +1 -1
- package/dist/catalog.mjs +21 -0
- package/dist/catalog.mjs.map +1 -1
- package/dist/charts.cjs +1 -1
- package/dist/charts.mjs +1 -1
- package/dist/checkbox.cjs +1 -1
- package/dist/checkbox.mjs +1 -1
- package/dist/chip.cjs +1 -1
- package/dist/chip.mjs +1 -1
- package/dist/chroma-grid.cjs +1 -1
- package/dist/chroma-grid.mjs +1 -1
- package/dist/chunks/{drawer-DaoAXL-w.mjs → Drawer-BhTTQV8Q.mjs} +2 -2
- package/dist/chunks/{drawer-DaoAXL-w.mjs.map → Drawer-BhTTQV8Q.mjs.map} +1 -1
- package/dist/chunks/{drawer-D07dGN6R.cjs → Drawer-C_DLqrus.cjs} +2 -3
- package/dist/chunks/{drawer-D07dGN6R.cjs.map → Drawer-C_DLqrus.cjs.map} +1 -1
- package/dist/chunks/{DropdownMenu-BtTOri-A.mjs → DropdownMenu-B18BI5l7.mjs} +2 -2
- package/dist/chunks/{DropdownMenu-BtTOri-A.mjs.map → DropdownMenu-B18BI5l7.mjs.map} +1 -1
- package/dist/chunks/{DropdownMenu-BDrNYO-D.cjs → DropdownMenu-CEmlmX7P.cjs} +2 -3
- package/dist/chunks/{DropdownMenu-BDrNYO-D.cjs.map → DropdownMenu-CEmlmX7P.cjs.map} +1 -1
- package/dist/chunks/{HoverBorderGradient-NbdXeLgC.mjs → HoverBorderGradient-CGKcviEd.mjs} +2 -2
- package/dist/chunks/{HoverBorderGradient-NbdXeLgC.mjs.map → HoverBorderGradient-CGKcviEd.mjs.map} +1 -1
- package/dist/chunks/{HoverBorderGradient-9pfvBoHR.cjs → HoverBorderGradient-DTKasFZO.cjs} +2 -3
- package/dist/chunks/{HoverBorderGradient-9pfvBoHR.cjs.map → HoverBorderGradient-DTKasFZO.cjs.map} +1 -1
- package/dist/chunks/{SunToMoonButton-BkEfkElJ.mjs → SunToMoonButton-DIMK53fW.mjs} +2 -2
- package/dist/chunks/{SunToMoonButton-BkEfkElJ.mjs.map → SunToMoonButton-DIMK53fW.mjs.map} +1 -1
- package/dist/chunks/{SunToMoonButton-jS4BJD9q.cjs → SunToMoonButton-DUuIqw22.cjs} +2 -3
- package/dist/chunks/{SunToMoonButton-jS4BJD9q.cjs.map → SunToMoonButton-DUuIqw22.cjs.map} +1 -1
- package/dist/chunks/{Tooltip-DD30yj3A.cjs → Tooltip-1yPGRJ2Q.cjs} +10 -8
- package/dist/chunks/Tooltip-1yPGRJ2Q.cjs.map +1 -0
- package/dist/chunks/{Tooltip-DK3B879v.mjs → Tooltip-CEj-I4JO.mjs} +10 -7
- package/dist/chunks/Tooltip-CEj-I4JO.mjs.map +1 -0
- package/dist/chunks/{accordion-6zxJUYXr.mjs → accordion-Cf-Q3rec.mjs} +2 -2
- package/dist/chunks/{accordion-6zxJUYXr.mjs.map → accordion-Cf-Q3rec.mjs.map} +1 -1
- package/dist/chunks/{accordion-CmB6EidC.cjs → accordion-X4PNqWkW.cjs} +2 -3
- package/dist/chunks/{accordion-CmB6EidC.cjs.map → accordion-X4PNqWkW.cjs.map} +1 -1
- package/dist/chunks/{alert-C5KEeQqh.cjs → alert-BEMULPIi.cjs} +2 -3
- package/dist/chunks/{alert-C5KEeQqh.cjs.map → alert-BEMULPIi.cjs.map} +1 -1
- package/dist/chunks/{alert-XVmYJgds.mjs → alert-GImBqaCY.mjs} +2 -2
- package/dist/chunks/{alert-XVmYJgds.mjs.map → alert-GImBqaCY.mjs.map} +1 -1
- package/dist/chunks/{animated-content-bK6xp-vc.mjs → animated-content-Bp-Yt0_7.mjs} +1 -1
- package/dist/chunks/{animated-content-bK6xp-vc.mjs.map → animated-content-Bp-Yt0_7.mjs.map} +1 -1
- package/dist/chunks/{animated-content-CLsFnjgr.cjs → animated-content-tSHXDZq2.cjs} +1 -2
- package/dist/chunks/{animated-content-CLsFnjgr.cjs.map → animated-content-tSHXDZq2.cjs.map} +1 -1
- package/dist/chunks/{ascii-text-BFnpVur6.cjs → ascii-text-Ctua6ucZ.cjs} +2 -2
- package/dist/chunks/{ascii-text-BFnpVur6.cjs.map → ascii-text-Ctua6ucZ.cjs.map} +1 -1
- package/dist/chunks/{ascii-text-Bdy4C5rU.mjs → ascii-text-QyP7JU7g.mjs} +1 -1
- package/dist/chunks/{ascii-text-Bdy4C5rU.mjs.map → ascii-text-QyP7JU7g.mjs.map} +1 -1
- package/dist/chunks/{background-gradient-animation-BR9wx6Z8.mjs → background-gradient-animation-CZUD_aq2.mjs} +2 -2
- package/dist/chunks/{background-gradient-animation-BR9wx6Z8.mjs.map → background-gradient-animation-CZUD_aq2.mjs.map} +1 -1
- package/dist/chunks/{background-gradient-animation-CiNdmA61.cjs → background-gradient-animation-PvM0i88k.cjs} +2 -3
- package/dist/chunks/{background-gradient-animation-CiNdmA61.cjs.map → background-gradient-animation-PvM0i88k.cjs.map} +1 -1
- package/dist/chunks/{button-A6UTvrOu.mjs → button-CAU9ej3h.mjs} +3 -2
- package/dist/chunks/button-CAU9ej3h.mjs.map +1 -0
- package/dist/chunks/{button-C4MXPxsC.cjs → button-D2ZYmVda.cjs} +3 -3
- package/dist/chunks/button-D2ZYmVda.cjs.map +1 -0
- package/dist/chunks/{button-hover-border-gradient-ssmwU5-U.cjs → button-hover-border-gradient-D12Zjmd3.cjs} +2 -3
- package/dist/chunks/{button-hover-border-gradient-ssmwU5-U.cjs.map → button-hover-border-gradient-D12Zjmd3.cjs.map} +1 -1
- package/dist/chunks/{button-hover-border-gradient-DnFvjNNw.mjs → button-hover-border-gradient-VNEg4V0o.mjs} +2 -2
- package/dist/chunks/{button-hover-border-gradient-DnFvjNNw.mjs.map → button-hover-border-gradient-VNEg4V0o.mjs.map} +1 -1
- package/dist/chunks/calendar-BlUhssD4.mjs +203 -0
- package/dist/chunks/calendar-BlUhssD4.mjs.map +1 -0
- package/dist/chunks/calendar-CdKKhdx5.cjs +208 -0
- package/dist/chunks/calendar-CdKKhdx5.cjs.map +1 -0
- package/dist/chunks/{card-RrT68nvu.cjs → card-C_Qr7E6E.cjs} +1 -2
- package/dist/chunks/{card-RrT68nvu.cjs.map → card-C_Qr7E6E.cjs.map} +1 -1
- package/dist/chunks/{card-BId1_zHw.mjs → card-DYHDNCPK.mjs} +1 -1
- package/dist/chunks/{card-BId1_zHw.mjs.map → card-DYHDNCPK.mjs.map} +1 -1
- package/dist/chunks/{carousel-Cv0m1Pp5.cjs → carousel-DtOJEbEU.cjs} +4 -5
- package/dist/chunks/{carousel-Cv0m1Pp5.cjs.map → carousel-DtOJEbEU.cjs.map} +1 -1
- package/dist/chunks/{carousel-Dd4rp-jr.mjs → carousel-eeqWZZHE.mjs} +4 -4
- package/dist/chunks/{carousel-Dd4rp-jr.mjs.map → carousel-eeqWZZHE.mjs.map} +1 -1
- package/dist/chunks/chartStyles-2mTluDoo.cjs +108 -0
- package/dist/chunks/chartStyles-2mTluDoo.cjs.map +1 -0
- package/dist/chunks/chartStyles-DrHVYS5N.mjs +55 -0
- package/dist/chunks/chartStyles-DrHVYS5N.mjs.map +1 -0
- package/dist/chunks/{charts-BmIV-mJy.cjs → charts-DMu4zp8j.cjs} +43 -94
- package/dist/chunks/charts-DMu4zp8j.cjs.map +1 -0
- package/dist/chunks/{charts-DkVu0rFc.mjs → charts-DlskmT1J.mjs} +3 -54
- package/dist/chunks/charts-DlskmT1J.mjs.map +1 -0
- package/dist/chunks/{checkbox-3aB7XC9_.mjs → checkbox-D7EJQbqC.mjs} +1 -1
- package/dist/chunks/{checkbox-3aB7XC9_.mjs.map → checkbox-D7EJQbqC.mjs.map} +1 -1
- package/dist/chunks/{checkbox-D8ivRZ1x.cjs → checkbox-Lw2UqyNE.cjs} +1 -2
- package/dist/chunks/{checkbox-D8ivRZ1x.cjs.map → checkbox-Lw2UqyNE.cjs.map} +1 -1
- package/dist/chunks/{chip-B0YzBwkz.cjs → chip-D5i9VT9O.cjs} +4 -5
- package/dist/chunks/{chip-B0YzBwkz.cjs.map → chip-D5i9VT9O.cjs.map} +1 -1
- package/dist/chunks/{chip-CqcdcSs2.mjs → chip-DBlSQcqR.mjs} +4 -4
- package/dist/chunks/{chip-CqcdcSs2.mjs.map → chip-DBlSQcqR.mjs.map} +1 -1
- package/dist/chunks/{chroma-grid-DcZ9f4Ui.cjs → chroma-grid-CTDtdFUm.cjs} +2 -3
- package/dist/chunks/{chroma-grid-DcZ9f4Ui.cjs.map → chroma-grid-CTDtdFUm.cjs.map} +1 -1
- package/dist/chunks/{chroma-grid-opB2DBtS.mjs → chroma-grid-DuLTfGVP.mjs} +2 -2
- package/dist/chunks/{chroma-grid-opB2DBtS.mjs.map → chroma-grid-DuLTfGVP.mjs.map} +1 -1
- package/dist/chunks/{color-palette-pLh6En3n.cjs → color-palette-DQQ9UV0N.cjs} +2 -2
- package/dist/chunks/{color-palette-pLh6En3n.cjs.map → color-palette-DQQ9UV0N.cjs.map} +1 -1
- package/dist/chunks/{color-palette-C3lesasJ.mjs → color-palette-G1HUXWJP.mjs} +1 -1
- package/dist/chunks/{color-palette-C3lesasJ.mjs.map → color-palette-G1HUXWJP.mjs.map} +1 -1
- package/dist/chunks/{combobox-CtNrGmuR.cjs → combobox-CkNzH1YV.cjs} +6 -6
- package/dist/chunks/{combobox-CtNrGmuR.cjs.map → combobox-CkNzH1YV.cjs.map} +1 -1
- package/dist/chunks/{combobox-B6yk5U82.mjs → combobox-xNmFFHd6.mjs} +5 -5
- package/dist/chunks/{combobox-B6yk5U82.mjs.map → combobox-xNmFFHd6.mjs.map} +1 -1
- package/dist/chunks/dashboard-cards-Bww66_5K.cjs +6570 -0
- package/dist/chunks/dashboard-cards-Bww66_5K.cjs.map +1 -0
- package/dist/chunks/dashboard-cards-lnifLEyj.mjs +6385 -0
- package/dist/chunks/dashboard-cards-lnifLEyj.mjs.map +1 -0
- package/dist/chunks/{data-table-fAEuevPn.cjs → data-table-BCVbzkLo.cjs} +48 -37
- package/dist/chunks/data-table-BCVbzkLo.cjs.map +1 -0
- package/dist/chunks/{data-table-Dtf6lKpp.mjs → data-table-C25KHEn4.mjs} +47 -36
- package/dist/chunks/data-table-C25KHEn4.mjs.map +1 -0
- package/dist/chunks/date-picker--cqsgsIV.mjs +587 -0
- package/dist/chunks/date-picker--cqsgsIV.mjs.map +1 -0
- package/dist/chunks/date-picker-BJQdFyqr.cjs +592 -0
- package/dist/chunks/date-picker-BJQdFyqr.cjs.map +1 -0
- package/dist/chunks/{dialog-DSyq6MS3.mjs → dialog-BHIeG3Sg.mjs} +3 -3
- package/dist/chunks/{dialog-DSyq6MS3.mjs.map → dialog-BHIeG3Sg.mjs.map} +1 -1
- package/dist/chunks/{dialog-J2ZTSTpL.cjs → dialog-CLKU0cXX.cjs} +3 -4
- package/dist/chunks/{dialog-J2ZTSTpL.cjs.map → dialog-CLKU0cXX.cjs.map} +1 -1
- package/dist/chunks/draggable-grid-2L_eHKfp.cjs +245 -0
- package/dist/chunks/draggable-grid-2L_eHKfp.cjs.map +1 -0
- package/dist/chunks/draggable-grid-IuCMSOsE.mjs +240 -0
- package/dist/chunks/draggable-grid-IuCMSOsE.mjs.map +1 -0
- package/dist/chunks/event-calendar-CO2doGJW.mjs +1191 -0
- package/dist/chunks/event-calendar-CO2doGJW.mjs.map +1 -0
- package/dist/chunks/event-calendar-CvficOuV.cjs +1208 -0
- package/dist/chunks/event-calendar-CvficOuV.cjs.map +1 -0
- package/dist/chunks/{form-X6Vyaavl.cjs → form-DARN6jtX.cjs} +1 -2
- package/dist/chunks/{form-X6Vyaavl.cjs.map → form-DARN6jtX.cjs.map} +1 -1
- package/dist/chunks/{form-CtZ6U-_B.mjs → form-DNuFklNR.mjs} +1 -1
- package/dist/chunks/{form-CtZ6U-_B.mjs.map → form-DNuFklNR.mjs.map} +1 -1
- package/dist/chunks/{gradual-blur-C6NOnjTw.cjs → gradual-blur-BBLbpXD4.cjs} +2 -3
- package/dist/chunks/{gradual-blur-C6NOnjTw.cjs.map → gradual-blur-BBLbpXD4.cjs.map} +1 -1
- package/dist/chunks/{gradual-blur-DXfxpCdB.mjs → gradual-blur-BPx2MSWI.mjs} +2 -2
- package/dist/chunks/{gradual-blur-DXfxpCdB.mjs.map → gradual-blur-BPx2MSWI.mjs.map} +1 -1
- package/dist/chunks/{hover-card-C88rU-nW.mjs → hover-card-BkVHGXz6.mjs} +1 -1
- package/dist/chunks/{hover-card-C88rU-nW.mjs.map → hover-card-BkVHGXz6.mjs.map} +1 -1
- package/dist/chunks/{hover-card--rplmsA_.cjs → hover-card-DwZFtu8w.cjs} +1 -2
- package/dist/chunks/{hover-card--rplmsA_.cjs.map → hover-card-DwZFtu8w.cjs.map} +1 -1
- package/dist/chunks/{icons-CRanVZB1.cjs → icons-Ci8yEvvF.cjs} +1 -2
- package/dist/chunks/{icons-CRanVZB1.cjs.map → icons-Ci8yEvvF.cjs.map} +1 -1
- package/dist/chunks/{icons-bx3nrxNv.mjs → icons-CkVHNbbN.mjs} +1 -1
- package/dist/chunks/{icons-bx3nrxNv.mjs.map → icons-CkVHNbbN.mjs.map} +1 -1
- package/dist/chunks/{input-Bqo9Q5zF.mjs → input-B-XSdnfh.mjs} +4 -4
- package/dist/chunks/{input-Bqo9Q5zF.mjs.map → input-B-XSdnfh.mjs.map} +1 -1
- package/dist/chunks/{input-DkCPyWXi.cjs → input-EH7x0pQY.cjs} +4 -5
- package/dist/chunks/{input-DkCPyWXi.cjs.map → input-EH7x0pQY.cjs.map} +1 -1
- package/dist/chunks/{label-Drxg0cG2.mjs → label-CcsncrKQ.mjs} +1 -1
- package/dist/chunks/{label-Drxg0cG2.mjs.map → label-CcsncrKQ.mjs.map} +1 -1
- package/dist/chunks/{label-BKzqfAAq.cjs → label-Du-5H7wd.cjs} +1 -2
- package/dist/chunks/{label-BKzqfAAq.cjs.map → label-Du-5H7wd.cjs.map} +1 -1
- package/dist/chunks/{loading-Dtosnb4A.mjs → loading-2Lh_355V.mjs} +2 -2
- package/dist/chunks/{loading-Dtosnb4A.mjs.map → loading-2Lh_355V.mjs.map} +1 -1
- package/dist/chunks/{loading-BiM4mKh6.cjs → loading-DeGHTDO2.cjs} +2 -3
- package/dist/chunks/{loading-BiM4mKh6.cjs.map → loading-DeGHTDO2.cjs.map} +1 -1
- package/dist/chunks/{multi-select-combobox-Do23ZfOQ.mjs → multi-select-combobox-BOdKmPj2.mjs} +4 -4
- package/dist/chunks/{multi-select-combobox-Do23ZfOQ.mjs.map → multi-select-combobox-BOdKmPj2.mjs.map} +1 -1
- package/dist/chunks/{multi-select-combobox-C0DoDzxQ.cjs → multi-select-combobox-PPYRcaPg.cjs} +5 -5
- package/dist/chunks/{multi-select-combobox-C0DoDzxQ.cjs.map → multi-select-combobox-PPYRcaPg.cjs.map} +1 -1
- package/dist/chunks/{otp-input-JOysxKfD.mjs → otp-input--_itTXaL.mjs} +1 -1
- package/dist/chunks/{otp-input-JOysxKfD.mjs.map → otp-input--_itTXaL.mjs.map} +1 -1
- package/dist/chunks/{otp-input-CkhV-sGl.cjs → otp-input-Dgw_47Z7.cjs} +1 -2
- package/dist/chunks/{otp-input-CkhV-sGl.cjs.map → otp-input-Dgw_47Z7.cjs.map} +1 -1
- package/dist/chunks/{overlay-DNnZywyR.cjs → overlay-15EzdrIu.cjs} +1 -2
- package/dist/chunks/{overlay-DNnZywyR.cjs.map → overlay-15EzdrIu.cjs.map} +1 -1
- package/dist/chunks/{overlay-BzkUmjQ-.mjs → overlay-BMbhF-EC.mjs} +1 -1
- package/dist/chunks/{overlay-BzkUmjQ-.mjs.map → overlay-BMbhF-EC.mjs.map} +1 -1
- package/dist/chunks/{password-strength-meter-DCi_BP7e.cjs → password-strength-meter-Be1c-dnK.cjs} +2 -3
- package/dist/chunks/{password-strength-meter-DCi_BP7e.cjs.map → password-strength-meter-Be1c-dnK.cjs.map} +1 -1
- package/dist/chunks/{password-strength-meter-BsvqQBAg.mjs → password-strength-meter-Q1Qr-4tz.mjs} +2 -2
- package/dist/chunks/{password-strength-meter-BsvqQBAg.mjs.map → password-strength-meter-Q1Qr-4tz.mjs.map} +1 -1
- package/dist/chunks/{progress-bar-CYaBO_lS.cjs → progress-bar-BsnX079N.cjs} +3 -3
- package/dist/chunks/{progress-bar-CYaBO_lS.cjs.map → progress-bar-BsnX079N.cjs.map} +1 -1
- package/dist/chunks/{progress-bar-DQ5ZKk2Y.mjs → progress-bar-l5WpbpZf.mjs} +2 -2
- package/dist/chunks/{progress-bar-DQ5ZKk2Y.mjs.map → progress-bar-l5WpbpZf.mjs.map} +1 -1
- package/dist/chunks/{radio-CuiM_gDv.mjs → radio-B94_TGtz.mjs} +2 -2
- package/dist/chunks/{radio-CuiM_gDv.mjs.map → radio-B94_TGtz.mjs.map} +1 -1
- package/dist/chunks/{radio-zx9xEW_C.cjs → radio-W_NiS_dO.cjs} +2 -3
- package/dist/chunks/{radio-zx9xEW_C.cjs.map → radio-W_NiS_dO.cjs.map} +1 -1
- package/dist/chunks/{select-bZ9WqLOc.cjs → select-C5lkcrSB.cjs} +5 -6
- package/dist/chunks/{select-bZ9WqLOc.cjs.map → select-C5lkcrSB.cjs.map} +1 -1
- package/dist/chunks/{select-CUaSNR09.mjs → select-DnSSxddm.mjs} +5 -5
- package/dist/chunks/{select-CUaSNR09.mjs.map → select-DnSSxddm.mjs.map} +1 -1
- package/dist/chunks/{sidebar-Dhf_Arae.mjs → sidebar-C3Sx87wD.mjs} +10 -11
- package/dist/chunks/{sidebar-Dhf_Arae.mjs.map → sidebar-C3Sx87wD.mjs.map} +1 -1
- package/dist/chunks/{sidebar-3i4mGE6T.cjs → sidebar-DDRWkz5k.cjs} +10 -12
- package/dist/chunks/{sidebar-3i4mGE6T.cjs.map → sidebar-DDRWkz5k.cjs.map} +1 -1
- package/dist/chunks/{skeleton-DCBGLNAZ.cjs → skeleton-B2u9c1xJ.cjs} +2 -3
- package/dist/chunks/{skeleton-DCBGLNAZ.cjs.map → skeleton-B2u9c1xJ.cjs.map} +1 -1
- package/dist/chunks/{skeleton-nH1eAN96.mjs → skeleton-DVAlrOq2.mjs} +2 -2
- package/dist/chunks/{skeleton-nH1eAN96.mjs.map → skeleton-DVAlrOq2.mjs.map} +1 -1
- package/dist/chunks/{spinners-g6_Up5Rb.mjs → spinners-BQtIp2ov.mjs} +2 -2
- package/dist/chunks/{spinners-g6_Up5Rb.mjs.map → spinners-BQtIp2ov.mjs.map} +1 -1
- package/dist/chunks/{spinners-C9acUulz.cjs → spinners-BiebALzS.cjs} +2 -3
- package/dist/chunks/{spinners-C9acUulz.cjs.map → spinners-BiebALzS.cjs.map} +1 -1
- package/dist/chunks/{splash-cursor-BqG7ClsJ.cjs → splash-cursor-8b7ORB2k.cjs} +2 -3
- package/dist/chunks/{splash-cursor-BqG7ClsJ.cjs.map → splash-cursor-8b7ORB2k.cjs.map} +1 -1
- package/dist/chunks/{splash-cursor-N4FdnkOa.mjs → splash-cursor-CeZffMed.mjs} +2 -2
- package/dist/chunks/{splash-cursor-N4FdnkOa.mjs.map → splash-cursor-CeZffMed.mjs.map} +1 -1
- package/dist/chunks/{spotlight-card-BmsqC7wm.cjs → spotlight-card-BQjp7hO1.cjs} +2 -3
- package/dist/chunks/{spotlight-card-BmsqC7wm.cjs.map → spotlight-card-BQjp7hO1.cjs.map} +1 -1
- package/dist/chunks/{spotlight-card-D9Z3nTmb.mjs → spotlight-card-DiPtBCAK.mjs} +2 -2
- package/dist/chunks/{spotlight-card-D9Z3nTmb.mjs.map → spotlight-card-DiPtBCAK.mjs.map} +1 -1
- package/dist/chunks/{stepper-DepvEGfr.cjs → stepper-BuhQfQTH.cjs} +5 -6
- package/dist/chunks/{stepper-DepvEGfr.cjs.map → stepper-BuhQfQTH.cjs.map} +1 -1
- package/dist/chunks/{stepper-Jv5OS1nY.mjs → stepper-CVNcexxq.mjs} +5 -5
- package/dist/chunks/{stepper-Jv5OS1nY.mjs.map → stepper-CVNcexxq.mjs.map} +1 -1
- package/dist/chunks/{sun-to-moon-button-PwgTPsTW.cjs → sun-to-moon-button-BzYGFhrg.cjs} +4 -5
- package/dist/chunks/{sun-to-moon-button-PwgTPsTW.cjs.map → sun-to-moon-button-BzYGFhrg.cjs.map} +1 -1
- package/dist/chunks/{sun-to-moon-button-BJtBEaa3.mjs → sun-to-moon-button-CRXBMFZb.mjs} +4 -4
- package/dist/chunks/{sun-to-moon-button-BJtBEaa3.mjs.map → sun-to-moon-button-CRXBMFZb.mjs.map} +1 -1
- package/dist/chunks/{switch-X3l8xnle.cjs → switch-CEoT3MgX.cjs} +1 -2
- package/dist/chunks/{switch-X3l8xnle.cjs.map → switch-CEoT3MgX.cjs.map} +1 -1
- package/dist/chunks/{switch-iPsN1NS2.mjs → switch-DUnNe4xP.mjs} +1 -1
- package/dist/chunks/{switch-iPsN1NS2.mjs.map → switch-DUnNe4xP.mjs.map} +1 -1
- package/dist/chunks/{textarea-CGRl2hrM.cjs → textarea-Bschfj24.cjs} +2 -3
- package/dist/chunks/{textarea-CGRl2hrM.cjs.map → textarea-Bschfj24.cjs.map} +1 -1
- package/dist/chunks/{textarea-Bdo-Trvi.mjs → textarea-CfeKo5HA.mjs} +2 -2
- package/dist/chunks/{textarea-Bdo-Trvi.mjs.map → textarea-CfeKo5HA.mjs.map} +1 -1
- package/dist/chunks/{theme-koPrLKQv.mjs → theme-BXML6jHE.mjs} +1 -1
- package/dist/chunks/{theme-koPrLKQv.mjs.map → theme-BXML6jHE.mjs.map} +1 -1
- package/dist/chunks/{theme-D6B-FaoE.cjs → theme-BzTaXYZ8.cjs} +1 -2
- package/dist/chunks/{theme-D6B-FaoE.cjs.map → theme-BzTaXYZ8.cjs.map} +1 -1
- package/dist/chunks/{toast-BcBidy5n.mjs → toast-D1W0BvoH.mjs} +2 -2
- package/dist/chunks/{toast-BcBidy5n.mjs.map → toast-D1W0BvoH.mjs.map} +1 -1
- package/dist/chunks/{toast-DiFgv3IL.cjs → toast-DL8svc6q.cjs} +2 -3
- package/dist/chunks/{toast-DiFgv3IL.cjs.map → toast-DL8svc6q.cjs.map} +1 -1
- package/dist/chunks/{truncated-text-BIXqNfOL.cjs → truncated-text-D0t4atw5.cjs} +3 -3
- package/dist/chunks/{truncated-text-BIXqNfOL.cjs.map → truncated-text-D0t4atw5.cjs.map} +1 -1
- package/dist/chunks/{truncated-text-C9t9o9IA.mjs → truncated-text-DIkg-8Vo.mjs} +2 -2
- package/dist/chunks/{truncated-text-C9t9o9IA.mjs.map → truncated-text-DIkg-8Vo.mjs.map} +1 -1
- package/dist/chunks/{typography-LwwY_MOy.cjs → typography-C5fYwhp2.cjs} +3 -3
- package/dist/chunks/{typography-LwwY_MOy.cjs.map → typography-C5fYwhp2.cjs.map} +1 -1
- package/dist/chunks/{typography-Ct-jDJP3.mjs → typography-Czi7t5y4.mjs} +2 -2
- package/dist/chunks/{typography-Ct-jDJP3.mjs.map → typography-Czi7t5y4.mjs.map} +1 -1
- package/dist/chunks/{utils-LRbEQHYs.cjs → utils-CoA0q63n.cjs} +84 -4
- package/dist/chunks/utils-CoA0q63n.cjs.map +1 -0
- package/dist/chunks/{utils-7S0u48mU.mjs → utils-Dc7j29ec.mjs} +84 -4
- package/dist/chunks/utils-Dc7j29ec.mjs.map +1 -0
- package/dist/color-palette.cjs +1 -1
- package/dist/color-palette.mjs +1 -1
- package/dist/combobox.cjs +1 -1
- package/dist/combobox.mjs +1 -1
- package/dist/components/data-display/charts/chartPalette.d.ts +1 -1
- package/dist/components/data-display/dashboard-cards/AIFeatureAdoptionCard.d.ts +26 -0
- package/dist/components/data-display/dashboard-cards/AIFeatureAdoptionCard.d.ts.map +1 -0
- package/dist/components/data-display/dashboard-cards/AIInsightsCard.d.ts +30 -0
- package/dist/components/data-display/dashboard-cards/AIInsightsCard.d.ts.map +1 -0
- package/dist/components/data-display/dashboard-cards/AcquisitionChannelCard.d.ts +24 -0
- package/dist/components/data-display/dashboard-cards/AcquisitionChannelCard.d.ts.map +1 -0
- package/dist/components/data-display/dashboard-cards/BarBreakdownCard.d.ts +49 -0
- package/dist/components/data-display/dashboard-cards/BarBreakdownCard.d.ts.map +1 -0
- package/dist/components/data-display/dashboard-cards/CustomerLifecycleCard.d.ts +24 -0
- package/dist/components/data-display/dashboard-cards/CustomerLifecycleCard.d.ts.map +1 -0
- package/dist/components/data-display/dashboard-cards/DeviceSalesCard.d.ts +25 -0
- package/dist/components/data-display/dashboard-cards/DeviceSalesCard.d.ts.map +1 -0
- package/dist/components/data-display/dashboard-cards/EarningReportsTabsCard.d.ts +143 -0
- package/dist/components/data-display/dashboard-cards/EarningReportsTabsCard.d.ts.map +1 -0
- package/dist/components/data-display/dashboard-cards/EarningsCard.d.ts +43 -0
- package/dist/components/data-display/dashboard-cards/EarningsCard.d.ts.map +1 -0
- package/dist/components/data-display/dashboard-cards/ExpensesCard.d.ts +26 -0
- package/dist/components/data-display/dashboard-cards/ExpensesCard.d.ts.map +1 -0
- package/dist/components/data-display/dashboard-cards/FinancialPLCard.d.ts +78 -0
- package/dist/components/data-display/dashboard-cards/FinancialPLCard.d.ts.map +1 -0
- package/dist/components/data-display/dashboard-cards/IncomeExpenseCard.d.ts +30 -0
- package/dist/components/data-display/dashboard-cards/IncomeExpenseCard.d.ts.map +1 -0
- package/dist/components/data-display/dashboard-cards/InventoryCards.d.ts +44 -0
- package/dist/components/data-display/dashboard-cards/InventoryCards.d.ts.map +1 -0
- package/dist/components/data-display/dashboard-cards/PaymentSummaryCard.d.ts +45 -0
- package/dist/components/data-display/dashboard-cards/PaymentSummaryCard.d.ts.map +1 -0
- package/dist/components/data-display/dashboard-cards/RevenueGrowthCard.d.ts +26 -0
- package/dist/components/data-display/dashboard-cards/RevenueGrowthCard.d.ts.map +1 -0
- package/dist/components/data-display/dashboard-cards/SalesHeatmapCard.d.ts +36 -0
- package/dist/components/data-display/dashboard-cards/SalesHeatmapCard.d.ts.map +1 -0
- package/dist/components/data-display/dashboard-cards/SalesOverviewCard.d.ts +33 -0
- package/dist/components/data-display/dashboard-cards/SalesOverviewCard.d.ts.map +1 -0
- package/dist/components/data-display/dashboard-cards/SeatUtilizationCard.d.ts +22 -0
- package/dist/components/data-display/dashboard-cards/SeatUtilizationCard.d.ts.map +1 -0
- package/dist/components/data-display/dashboard-cards/ShipmentStatisticsCard.d.ts +33 -0
- package/dist/components/data-display/dashboard-cards/ShipmentStatisticsCard.d.ts.map +1 -0
- package/dist/components/data-display/dashboard-cards/StockAvailabilityCard.d.ts +24 -0
- package/dist/components/data-display/dashboard-cards/StockAvailabilityCard.d.ts.map +1 -0
- package/dist/components/data-display/dashboard-cards/SubscriptionHealthCard.d.ts +23 -0
- package/dist/components/data-display/dashboard-cards/SubscriptionHealthCard.d.ts.map +1 -0
- package/dist/components/data-display/dashboard-cards/SupportTrackerCard.d.ts +25 -0
- package/dist/components/data-display/dashboard-cards/SupportTrackerCard.d.ts.map +1 -0
- package/dist/components/data-display/dashboard-cards/ToolUsageOverviewCard.d.ts +22 -0
- package/dist/components/data-display/dashboard-cards/ToolUsageOverviewCard.d.ts.map +1 -0
- package/dist/components/data-display/dashboard-cards/TopPlansCard.d.ts +23 -0
- package/dist/components/data-display/dashboard-cards/TopPlansCard.d.ts.map +1 -0
- package/dist/components/data-display/dashboard-cards/TopSellingItemsCard.d.ts +42 -0
- package/dist/components/data-display/dashboard-cards/TopSellingItemsCard.d.ts.map +1 -0
- package/dist/components/data-display/dashboard-cards/TopToolsCard.d.ts +22 -0
- package/dist/components/data-display/dashboard-cards/TopToolsCard.d.ts.map +1 -0
- package/dist/components/data-display/dashboard-cards/TopicsCard.d.ts +18 -0
- package/dist/components/data-display/dashboard-cards/TopicsCard.d.ts.map +1 -0
- package/dist/components/data-display/dashboard-cards/VehicleConditionCard.d.ts +20 -0
- package/dist/components/data-display/dashboard-cards/VehicleConditionCard.d.ts.map +1 -0
- package/dist/components/data-display/dashboard-cards/VehiclesOverviewCard.d.ts +21 -0
- package/dist/components/data-display/dashboard-cards/VehiclesOverviewCard.d.ts.map +1 -0
- package/dist/components/data-display/dashboard-cards/_PLCardHeader.d.ts +63 -0
- package/dist/components/data-display/dashboard-cards/_PLCardHeader.d.ts.map +1 -0
- package/dist/components/data-display/dashboard-cards/_PLCharts.d.ts +33 -0
- package/dist/components/data-display/dashboard-cards/_PLCharts.d.ts.map +1 -0
- package/dist/components/data-display/dashboard-cards/_PLKpiStrip.d.ts +11 -0
- package/dist/components/data-display/dashboard-cards/_PLKpiStrip.d.ts.map +1 -0
- package/dist/components/data-display/dashboard-cards/_PLOverview.d.ts +9 -0
- package/dist/components/data-display/dashboard-cards/_PLOverview.d.ts.map +1 -0
- package/dist/components/data-display/dashboard-cards/_TabTooltip.d.ts +8 -0
- package/dist/components/data-display/dashboard-cards/_TabTooltip.d.ts.map +1 -0
- package/dist/components/data-display/dashboard-cards/index.d.ts +57 -0
- package/dist/components/data-display/dashboard-cards/index.d.ts.map +1 -1
- package/dist/components/data-display/data-table/DataTable.d.ts.map +1 -1
- package/dist/components/data-display/data-table/DataTableControls.d.ts.map +1 -1
- package/dist/components/data-display/event-calendar/AddEventPanel.d.ts +11 -0
- package/dist/components/data-display/event-calendar/AddEventPanel.d.ts.map +1 -0
- package/dist/components/data-display/event-calendar/CalendarHeader.d.ts +13 -0
- package/dist/components/data-display/event-calendar/CalendarHeader.d.ts.map +1 -0
- package/dist/components/data-display/event-calendar/CalendarSidebar.d.ts +13 -0
- package/dist/components/data-display/event-calendar/CalendarSidebar.d.ts.map +1 -0
- package/dist/components/data-display/event-calendar/EventCalendar.d.ts +3 -0
- package/dist/components/data-display/event-calendar/EventCalendar.d.ts.map +1 -0
- package/dist/components/data-display/event-calendar/EventDetailDrawer.d.ts +10 -0
- package/dist/components/data-display/event-calendar/EventDetailDrawer.d.ts.map +1 -0
- package/dist/components/data-display/event-calendar/EventFilterList.d.ts +9 -0
- package/dist/components/data-display/event-calendar/EventFilterList.d.ts.map +1 -0
- package/dist/components/data-display/event-calendar/EventPill.d.ts +10 -0
- package/dist/components/data-display/event-calendar/EventPill.d.ts.map +1 -0
- package/dist/components/data-display/event-calendar/MiniCalendarPicker.d.ts +9 -0
- package/dist/components/data-display/event-calendar/MiniCalendarPicker.d.ts.map +1 -0
- package/dist/components/data-display/event-calendar/calendarUtils.d.ts +27 -0
- package/dist/components/data-display/event-calendar/calendarUtils.d.ts.map +1 -0
- package/dist/components/data-display/event-calendar/index.d.ts +4 -0
- package/dist/components/data-display/event-calendar/index.d.ts.map +1 -0
- package/dist/components/data-display/event-calendar/types.d.ts +52 -0
- package/dist/components/data-display/event-calendar/types.d.ts.map +1 -0
- package/dist/components/data-display/event-calendar/views/DayView.d.ts +10 -0
- package/dist/components/data-display/event-calendar/views/DayView.d.ts.map +1 -0
- package/dist/components/data-display/event-calendar/views/ListView.d.ts +10 -0
- package/dist/components/data-display/event-calendar/views/ListView.d.ts.map +1 -0
- package/dist/components/data-display/event-calendar/views/MonthView.d.ts +11 -0
- package/dist/components/data-display/event-calendar/views/MonthView.d.ts.map +1 -0
- package/dist/components/data-display/event-calendar/views/WeekView.d.ts +10 -0
- package/dist/components/data-display/event-calendar/views/WeekView.d.ts.map +1 -0
- package/dist/components/forms/button/Button.d.ts.map +1 -1
- package/dist/components/forms/calendar/Calendar.d.ts +1 -1
- package/dist/components/forms/calendar/Calendar.d.ts.map +1 -1
- package/dist/components/forms/calendar/types.d.ts +6 -0
- package/dist/components/forms/calendar/types.d.ts.map +1 -1
- package/dist/components/forms/date-picker/DatePicker.d.ts.map +1 -1
- package/dist/components/layout/draggable-grid/DraggableGrid.d.ts +20 -0
- package/dist/components/layout/draggable-grid/DraggableGrid.d.ts.map +1 -0
- package/dist/components/layout/draggable-grid/index.d.ts +3 -0
- package/dist/components/layout/draggable-grid/index.d.ts.map +1 -0
- package/dist/components/navigation/sidebar/DashboardSidebarShell.d.ts.map +1 -1
- package/dist/components/overlays/tooltip/Tooltip.d.ts +3 -1
- package/dist/components/overlays/tooltip/Tooltip.d.ts.map +1 -1
- package/dist/dashboard-cards.cjs +33 -0
- package/dist/dashboard-cards.d.ts +2 -0
- package/dist/dashboard-cards.mjs +2 -0
- package/dist/data-table.cjs +1 -1
- package/dist/data-table.mjs +1 -1
- package/dist/date-picker.cjs +1 -1
- package/dist/date-picker.mjs +1 -1
- package/dist/dialog.cjs +1 -1
- package/dist/dialog.mjs +1 -1
- package/dist/docs.cjs +44 -0
- package/dist/docs.cjs.map +1 -1
- package/dist/docs.d.ts.map +1 -1
- package/dist/docs.mjs +44 -0
- package/dist/docs.mjs.map +1 -1
- package/dist/draggable-grid.cjs +3 -0
- package/dist/draggable-grid.d.ts +2 -0
- package/dist/draggable-grid.mjs +2 -0
- package/dist/drawer.cjs +2 -2
- package/dist/drawer.mjs +1 -1
- package/dist/event-calendar.cjs +5 -0
- package/dist/event-calendar.d.ts +2 -0
- package/dist/event-calendar.mjs +2 -0
- package/dist/form.cjs +1 -1
- package/dist/form.mjs +1 -1
- package/dist/gradual-blur.cjs +1 -1
- package/dist/gradual-blur.mjs +1 -1
- package/dist/hover-border-gradient.cjs +1 -1
- package/dist/hover-border-gradient.mjs +1 -1
- package/dist/hover-card.cjs +1 -1
- package/dist/hover-card.mjs +1 -1
- package/dist/icons.cjs +1 -1
- package/dist/icons.mjs +1 -1
- package/dist/index.cjs +91 -332
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +10 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +57 -329
- package/dist/index.mjs.map +1 -1
- package/dist/input.cjs +1 -1
- package/dist/input.mjs +1 -1
- package/dist/label.cjs +1 -1
- package/dist/label.mjs +1 -1
- package/dist/loading.cjs +1 -1
- package/dist/loading.mjs +1 -1
- package/dist/multi-select-combobox.cjs +1 -1
- package/dist/multi-select-combobox.mjs +1 -1
- package/dist/otp-input.cjs +1 -1
- package/dist/otp-input.mjs +1 -1
- package/dist/password-strength-meter.cjs +1 -1
- package/dist/password-strength-meter.mjs +1 -1
- package/dist/progress-bar.cjs +1 -1
- package/dist/progress-bar.mjs +1 -1
- package/dist/radio.cjs +1 -1
- package/dist/radio.mjs +1 -1
- package/dist/select.cjs +1 -1
- package/dist/select.mjs +1 -1
- package/dist/sidebar.cjs +1 -1
- package/dist/sidebar.mjs +1 -1
- package/dist/skeleton.cjs +1 -1
- package/dist/skeleton.mjs +1 -1
- package/dist/spinners.cjs +1 -1
- package/dist/spinners.mjs +1 -1
- package/dist/splash-cursor.cjs +1 -1
- package/dist/splash-cursor.mjs +1 -1
- package/dist/spotlight-card.cjs +1 -1
- package/dist/spotlight-card.mjs +1 -1
- package/dist/stepper.cjs +1 -1
- package/dist/stepper.mjs +1 -1
- package/dist/sun-to-moon-button.cjs +2 -2
- package/dist/sun-to-moon-button.mjs +2 -2
- package/dist/switch.cjs +1 -1
- package/dist/switch.mjs +1 -1
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.mjs +1 -1
- package/dist/theme.cjs +1 -1
- package/dist/theme.mjs +1 -1
- package/dist/toast.cjs +1 -1
- package/dist/toast.mjs +1 -1
- package/dist/tooltip.cjs +1 -1
- package/dist/tooltip.mjs +1 -1
- package/dist/truncated-text.cjs +1 -1
- package/dist/truncated-text.mjs +1 -1
- package/dist/typography.cjs +1 -1
- package/dist/typography.mjs +1 -1
- package/dist/utils.cjs +1 -1
- package/dist/utils.mjs +1 -1
- package/package.json +44 -11
- package/dist/chunks/Tooltip-DD30yj3A.cjs.map +0 -1
- package/dist/chunks/Tooltip-DK3B879v.mjs.map +0 -1
- package/dist/chunks/button-A6UTvrOu.mjs.map +0 -1
- package/dist/chunks/button-C4MXPxsC.cjs.map +0 -1
- package/dist/chunks/calendar-5XzPqKbE.mjs +0 -178
- package/dist/chunks/calendar-5XzPqKbE.mjs.map +0 -1
- package/dist/chunks/calendar-CQJgQ5H_.cjs +0 -184
- package/dist/chunks/calendar-CQJgQ5H_.cjs.map +0 -1
- package/dist/chunks/charts-BmIV-mJy.cjs.map +0 -1
- package/dist/chunks/charts-DkVu0rFc.mjs.map +0 -1
- package/dist/chunks/data-table-Dtf6lKpp.mjs.map +0 -1
- package/dist/chunks/data-table-fAEuevPn.cjs.map +0 -1
- package/dist/chunks/date-picker-BmQ0rgwH.mjs +0 -228
- package/dist/chunks/date-picker-BmQ0rgwH.mjs.map +0 -1
- package/dist/chunks/date-picker-qpUZMtZC.cjs +0 -234
- package/dist/chunks/date-picker-qpUZMtZC.cjs.map +0 -1
- package/dist/chunks/utils-7S0u48mU.mjs.map +0 -1
- package/dist/chunks/utils-LRbEQHYs.cjs.map +0 -1
- /package/dist/chunks/{chunk-B_GkZjkl.cjs → chunk-D6vf50IK.cjs} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"charts-DMu4zp8j.cjs","names":[],"sources":["../../src/components/data-display/charts/chartPalette.ts","../../src/components/data-display/charts/NeonLineChart.tsx","../../src/components/data-display/charts/MiniNeonSparkline.tsx","../../src/components/data-display/charts/StackedBarChart.tsx","../../src/components/data-display/charts/ThinBreakdownBar.tsx","../../src/components/data-display/charts/AreaChart.tsx","../../src/components/data-display/charts/BarChart.tsx","../../src/components/data-display/charts/PositiveNegativeBarChart.tsx","../../src/components/data-display/charts/PieChart.tsx"],"sourcesContent":["const chartColorSlots = [\n 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n] as const;\n\nexport type ChartColorSlot = (typeof chartColorSlots)[number];\nexport type ChartColorToken = `chart-${ChartColorSlot}`;\n\nexport const chartColorTokens = chartColorSlots.map(\n (slot) => `chart-${slot}` as ChartColorToken,\n);\n\nconst chartPalette = chartColorSlots.map((slot) => `var(--ds-chart-${slot})`);\n\ntype RgbColor = {\n r: number;\n g: number;\n b: number;\n};\n\nconst resolvedColorCache = new Map<string, RgbColor | null>();\n\nconst chartTokenPattern = /^chart-(\\d+)$/i;\nconst chartVariablePattern = /^--((?:ds|color)-chart-(\\d+))$/i;\n\nconst getChartSlotValue = (slot: ChartColorSlot | ChartColorToken): number =>\n typeof slot === \"number\" ? slot : Number(slot.replace(\"chart-\", \"\"));\n\nexport const getChartColorVar = (\n slot: ChartColorSlot | ChartColorToken,\n namespace: \"ds\" | \"color\" = \"ds\",\n): string => `var(--${namespace}-chart-${getChartSlotValue(slot)})`;\n\nexport const normalizeChartColorValue = (\n value?: string,\n): string | undefined => {\n const normalizedValue = value?.trim();\n\n if (!normalizedValue) {\n return undefined;\n }\n\n const tokenMatch = normalizedValue.match(chartTokenPattern);\n if (tokenMatch) {\n return `var(--ds-chart-${tokenMatch[1]})`;\n }\n\n const variableMatch = normalizedValue.match(chartVariablePattern);\n if (variableMatch) {\n return `var(--${variableMatch[1]})`;\n }\n\n return normalizedValue;\n};\n\nconst getThemeSignature = (): string => {\n if (typeof document === \"undefined\") return \"\";\n\n const root = document.documentElement;\n return [\n root.getAttribute(\"data-brand\") ?? \"\",\n root.getAttribute(\"data-mode\") ?? \"\",\n root.getAttribute(\"data-theme\") ?? \"\",\n ].join(\"|\");\n};\n\nconst resolveColor = (value: string): RgbColor | null => {\n if (typeof document === \"undefined\") return null;\n\n const cacheKey = `${getThemeSignature()}::${value}`;\n const cached = resolvedColorCache.get(cacheKey);\n if (cached !== undefined) {\n return cached;\n }\n\n const probe = document.createElement(\"span\");\n probe.style.color = value;\n probe.style.position = \"fixed\";\n probe.style.opacity = \"0\";\n probe.style.pointerEvents = \"none\";\n document.body.appendChild(probe);\n\n const computedColor = getComputedStyle(probe).color;\n document.body.removeChild(probe);\n\n const match = computedColor.match(/rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)/i);\n\n const resolved = match\n ? {\n r: Number(match[1]),\n g: Number(match[2]),\n b: Number(match[3]),\n }\n : null;\n\n resolvedColorCache.set(cacheKey, resolved);\n return resolved;\n};\n\nconst getColorDistance = (left: RgbColor, right: RgbColor): number => {\n const deltaR = left.r - right.r;\n const deltaG = left.g - right.g;\n const deltaB = left.b - right.b;\n\n return Math.sqrt(deltaR ** 2 + deltaG ** 2 + deltaB ** 2);\n};\n\nconst isTooSimilar = (\n candidate: string,\n usedColors: readonly string[],\n minDistance = 84,\n): boolean => {\n if (usedColors.includes(candidate)) {\n return true;\n }\n\n const candidateRgb = resolveColor(candidate);\n if (!candidateRgb) {\n return false;\n }\n\n return usedColors.some((usedColor) => {\n const usedRgb = resolveColor(usedColor);\n return usedRgb\n ? getColorDistance(candidateRgb, usedRgb) < minDistance\n : false;\n });\n};\n\nexport const getChartPalette = (count = chartPalette.length): string[] =>\n Array.from(\n { length: count },\n (_, index) => chartPalette[index % chartPalette.length],\n );\n\nexport const normalizeChartColors = (\n requestedColors: readonly (string | undefined)[],\n): string[] => {\n const usedColors: string[] = [];\n let paletteIndex = 0;\n\n const getNextDistinctPaletteColor = (): string => {\n for (let attempt = 0; attempt < chartPalette.length; attempt++) {\n const candidate =\n chartPalette[(paletteIndex + attempt) % chartPalette.length];\n\n if (!isTooSimilar(candidate, usedColors)) {\n paletteIndex = (paletteIndex + attempt + 1) % chartPalette.length;\n return candidate;\n }\n }\n\n const fallback = chartPalette[paletteIndex % chartPalette.length];\n paletteIndex = (paletteIndex + 1) % chartPalette.length;\n return fallback;\n };\n\n return requestedColors.map((requestedColor) => {\n const normalizedRequestedColor = normalizeChartColorValue(requestedColor);\n const resolvedColor =\n normalizedRequestedColor &&\n !isTooSimilar(normalizedRequestedColor, usedColors)\n ? normalizedRequestedColor\n : getNextDistinctPaletteColor();\n\n usedColors.push(resolvedColor);\n return resolvedColor;\n });\n};\n","\"use client\";\n\nimport React from \"react\";\nimport {\n LineChart,\n Line,\n XAxis,\n YAxis,\n CartesianGrid,\n Tooltip,\n ResponsiveContainer,\n} from \"recharts\";\n\nimport {\n getChartColorVar,\n normalizeChartColorValue,\n normalizeChartColors,\n} from \"./chartPalette\";\nimport {\n chartLineHoverCursorStyle,\n chartTooltipContentStyle,\n chartTooltipItemStyle,\n chartTooltipLabelStyle,\n chartTooltipWrapperStyle,\n getChartActiveDotStyle,\n} from \"./chartStyles\";\n\ninterface DataPoint {\n name: string;\n value: number;\n}\n\ninterface NeonLineChartProps {\n data: DataPoint[];\n height?: number | string;\n lineColorStop1?: string;\n lineColorStop2?: string;\n className?: string;\n glowColor?: string;\n}\n\nexport const NeonLineChart: React.FC<NeonLineChartProps> = ({\n data,\n height = 300,\n lineColorStop1 = getChartColorVar(2),\n lineColorStop2 = getChartColorVar(1),\n glowColor = getChartColorVar(1),\n className = \"\",\n}) => {\n const [normalizedStop1, normalizedStop2] = React.useMemo(\n () => normalizeChartColors([lineColorStop1, lineColorStop2]),\n [lineColorStop1, lineColorStop2],\n );\n const normalizedGlowColor = React.useMemo(\n () => normalizeChartColorValue(glowColor) ?? getChartColorVar(1),\n [glowColor],\n );\n\n return (\n <div className={`w-full relative ${className}`} style={{ height }}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <LineChart\n data={data}\n margin={{ top: 20, right: 30, left: 10, bottom: 20 }}\n >\n <defs>\n {/* Linear Gradient for the Line */}\n <linearGradient id=\"neonGradient\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"0\">\n <stop offset=\"0%\" stopColor={normalizedStop1} />\n <stop offset=\"100%\" stopColor={normalizedStop2} />\n </linearGradient>\n\n {/* Glowing Drop Shadow Filter */}\n <filter id=\"neonGlow\" x=\"-20%\" y=\"-20%\" width=\"140%\" height=\"140%\">\n <feDropShadow\n dx=\"0\"\n dy=\"6\"\n stdDeviation=\"8\"\n floodColor={normalizedGlowColor}\n floodOpacity=\"0.8\"\n />\n <feDropShadow\n dx=\"0\"\n dy=\"0\"\n stdDeviation=\"15\"\n floodColor={normalizedStop1}\n floodOpacity=\"0.3\"\n />\n </filter>\n </defs>\n\n {/* Minimal Grid */}\n <CartesianGrid\n strokeDasharray=\"3 3\"\n vertical={false}\n stroke=\"var(--ds-color-border)\"\n opacity={0.5}\n />\n\n <XAxis\n dataKey=\"name\"\n axisLine={false}\n tickLine={false}\n tick={{ fill: \"var(--ds-color-fg-muted)\", fontSize: 12 }}\n dy={10}\n />\n\n <YAxis\n axisLine={false}\n tickLine={false}\n tick={{ fill: \"var(--ds-color-fg-muted)\", fontSize: 12 }}\n dx={-10}\n />\n\n <Tooltip\n contentStyle={chartTooltipContentStyle}\n cursor={chartLineHoverCursorStyle}\n itemStyle={chartTooltipItemStyle}\n labelStyle={chartTooltipLabelStyle}\n wrapperStyle={chartTooltipWrapperStyle}\n />\n\n {/* The Neon Line */}\n <Line\n type=\"monotone\"\n dataKey=\"value\"\n stroke=\"url(#neonGradient)\"\n strokeWidth={3}\n dot={false}\n activeDot={getChartActiveDotStyle(normalizedStop2)}\n filter=\"url(#neonGlow)\"\n />\n </LineChart>\n </ResponsiveContainer>\n </div>\n );\n};\n","\"use client\";\n\nimport React from \"react\";\nimport { Area, AreaChart, Line, ResponsiveContainer, Tooltip } from \"recharts\";\n\nimport { getChartColorVar, normalizeChartColorValue } from \"./chartPalette\";\n\nexport interface MiniNeonSparklinePoint {\n label: string;\n value: number;\n}\n\nexport type MiniNeonSparklineTone =\n | \"default\"\n | \"success\"\n | \"warning\"\n | \"danger\"\n | \"info\";\n\nexport interface MiniNeonSparklineProps {\n data: MiniNeonSparklinePoint[];\n height?: number;\n strokeWidth?: number;\n className?: string;\n showArea?: boolean;\n showTooltip?: boolean;\n tone?: MiniNeonSparklineTone;\n}\n\nconst toneColorMap: Record<MiniNeonSparklineTone, string> = {\n default: getChartColorVar(1),\n success: \"var(--ds-color-success)\",\n warning: \"var(--ds-color-warning)\",\n danger: \"var(--ds-color-danger)\",\n info: \"var(--ds-color-info)\",\n};\n\nconst tooltipContentStyle: React.CSSProperties = {\n borderRadius: \"12px\",\n border: \"1px solid var(--ds-border-2)\",\n background: \"var(--ds-surface-1)\",\n color: \"var(--ds-text-1)\",\n fontSize: \"12px\",\n};\n\nexport const MiniNeonSparkline: React.FC<MiniNeonSparklineProps> = ({\n data,\n height = 46,\n strokeWidth = 2,\n className = \"\",\n showArea = true,\n showTooltip = true,\n tone = \"default\",\n}) => {\n const resolvedTone = React.useMemo(\n () => normalizeChartColorValue(toneColorMap[tone]) ?? toneColorMap.default,\n [tone],\n );\n\n const chartGradientId = React.useId();\n const chartGlowId = React.useId();\n\n return (\n <div className={`ui:relative ui:w-full ${className}`} style={{ height }}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <AreaChart\n data={data}\n margin={{ top: 4, right: 2, left: 2, bottom: 4 }}\n >\n <defs>\n <linearGradient id={chartGradientId} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stopColor={resolvedTone} stopOpacity={0.35} />\n <stop offset=\"100%\" stopColor={resolvedTone} stopOpacity={0.02} />\n </linearGradient>\n <filter\n id={chartGlowId}\n x=\"-20%\"\n y=\"-20%\"\n width=\"140%\"\n height=\"140%\"\n >\n <feDropShadow\n dx=\"0\"\n dy=\"2\"\n stdDeviation=\"3\"\n floodColor={resolvedTone}\n floodOpacity=\"0.45\"\n />\n </filter>\n </defs>\n\n {showArea ? (\n <Area\n type=\"monotone\"\n dataKey=\"value\"\n stroke=\"none\"\n fill={`url(#${chartGradientId})`}\n />\n ) : null}\n\n <Line\n type=\"monotone\"\n dataKey=\"value\"\n stroke={resolvedTone}\n strokeWidth={strokeWidth}\n dot={false}\n isAnimationActive={false}\n filter={`url(#${chartGlowId})`}\n />\n\n {showTooltip ? (\n <Tooltip\n contentStyle={tooltipContentStyle}\n labelStyle={{ color: \"var(--ds-text-2)\", marginBottom: \"4px\" }}\n itemStyle={{ color: \"var(--ds-text-1)\", fontWeight: 600 }}\n formatter={(value) => [String(value ?? \"\"), \"Value\"]}\n />\n ) : null}\n </AreaChart>\n </ResponsiveContainer>\n </div>\n );\n};\n","\"use client\";\n\nimport React from \"react\";\nimport {\n BarChart as RechartsBarChart,\n Bar,\n XAxis,\n YAxis,\n CartesianGrid,\n Tooltip,\n Legend,\n ResponsiveContainer,\n} from \"recharts\";\n\nimport { normalizeChartColors } from \"./chartPalette\";\nimport {\n chartBandHoverCursorStyle,\n chartLegendTextStyle,\n chartTooltipContentStyle,\n chartTooltipItemStyle,\n chartTooltipLabelStyle,\n chartTooltipWrapperStyle,\n} from \"./chartStyles\";\n\nexport interface StackedBarData {\n name: string;\n [key: string]: string | number;\n}\n\ninterface StackedBarChartProps {\n data: StackedBarData[];\n categories: { key: string; color: string; label: string }[];\n height?: number | string;\n yAxisDomain?: [number, number];\n className?: string;\n}\n\nexport const StackedBarChart: React.FC<StackedBarChartProps> = ({\n data,\n categories,\n height = 300,\n yAxisDomain,\n className = \"\",\n}) => {\n const normalizedCategories = React.useMemo(() => {\n const normalizedColors = normalizeChartColors(\n categories.map((category) => category.color),\n );\n\n return categories.map((category, index) => ({\n ...category,\n color: normalizedColors[index] ?? category.color,\n }));\n }, [categories]);\n\n return (\n <div className={`w-full ${className}`} style={{ height }}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <RechartsBarChart\n data={data}\n margin={{ top: 20, right: 30, left: 20, bottom: 5 }}\n >\n <CartesianGrid\n strokeDasharray=\"3 3\"\n vertical={false}\n stroke=\"var(--ds-color-border)\"\n opacity={0.4}\n />\n <XAxis\n dataKey=\"name\"\n axisLine={false}\n tickLine={false}\n tick={{ fill: \"var(--ds-color-fg-muted)\", fontSize: 12 }}\n dy={10}\n />\n <YAxis\n axisLine={false}\n tickLine={false}\n tick={{ fill: \"var(--ds-color-fg-muted)\", fontSize: 12 }}\n dx={-10}\n domain={yAxisDomain}\n />\n <Tooltip\n contentStyle={chartTooltipContentStyle}\n cursor={chartBandHoverCursorStyle}\n itemStyle={chartTooltipItemStyle}\n labelStyle={chartTooltipLabelStyle}\n wrapperStyle={chartTooltipWrapperStyle}\n />\n <Legend\n iconType=\"circle\"\n wrapperStyle={{\n ...chartLegendTextStyle,\n paddingTop: \"20px\",\n }}\n />\n\n {normalizedCategories.map((cat, index) => {\n // Apply rounded radius only to the top bar in the stack\n const isTop = index === normalizedCategories.length - 1;\n const radius: [number, number, number, number] = isTop\n ? [6, 6, 0, 0]\n : [0, 0, 0, 0];\n\n return (\n <Bar\n key={cat.key}\n dataKey={cat.key}\n name={cat.label}\n stackId=\"a\"\n fill={cat.color}\n radius={radius}\n barSize={32}\n />\n );\n })}\n </RechartsBarChart>\n </ResponsiveContainer>\n </div>\n );\n};\n","\"use client\";\n\nimport React from \"react\";\n\nimport { TruncatedText } from \"../../typography/truncated-text\";\nimport { normalizeChartColors } from \"./chartPalette\";\nimport { chartPillTooltipStyle } from \"./chartStyles\";\n\nexport interface BreakdownSegment {\n id?: string;\n label: string;\n value: number; // The absolute value or percentage\n color: string;\n}\n\ninterface ThinBreakdownBarProps {\n data: BreakdownSegment[];\n className?: string;\n showLabels?: boolean;\n showSummary?: boolean;\n summaryLabel?: string;\n valueFormatter?: (value: number) => string;\n}\n\nconst defaultValueFormatter = (value: number): string =>\n new Intl.NumberFormat().format(value);\n\nexport const ThinBreakdownBar: React.FC<ThinBreakdownBarProps> = ({\n data: segments,\n className = \"\",\n showLabels = true,\n showSummary = false,\n summaryLabel = \"Total\",\n valueFormatter = defaultValueFormatter,\n}) => {\n const [activeSegmentKey, setActiveSegmentKey] = React.useState<string | null>(\n null,\n );\n\n const normalizedSegments = React.useMemo(() => {\n const normalizedColors = normalizeChartColors(\n segments.map((segment) => segment.color),\n );\n\n const totalValue = segments.reduce((sum, item) => sum + item.value, 0);\n\n return segments.map((segment, index) => ({\n ...segment,\n key: segment.id || `segment-${index}`,\n color: normalizedColors[index] ?? segment.color,\n widthPercent:\n totalValue > 0 ? Math.max((segment.value / totalValue) * 100, 0) : 0,\n }));\n }, [segments]);\n\n const segmentsWithMetrics = React.useMemo(() => {\n let runningPercent = 0;\n\n return normalizedSegments.map((segment) => {\n const nextSegment = {\n ...segment,\n centerPercent: runningPercent + segment.widthPercent / 2,\n };\n\n runningPercent += segment.widthPercent;\n return nextSegment;\n });\n }, [normalizedSegments]);\n\n const activeSegment = React.useMemo(\n () =>\n segmentsWithMetrics.find((segment) => segment.key === activeSegmentKey) ??\n null,\n [activeSegmentKey, segmentsWithMetrics],\n );\n const totalValue = React.useMemo(\n () => segments.reduce((sum, item) => sum + item.value, 0),\n [segments],\n );\n const summaryTitle = activeSegment?.label ?? summaryLabel;\n const summaryValue = activeSegment?.value ?? totalValue;\n const summaryMeta = activeSegment\n ? `${Math.round(activeSegment.widthPercent)}% of total`\n : `${segments.length} segments`;\n\n return (\n <div className={`w-full flex flex-col gap-3 ${className}`}>\n {showSummary && (activeSegment || totalValue > 0) ? (\n <div className=\"flex items-start justify-between gap-4 rounded-xl border border-ds-border-2/70 bg-ds-canvas/70 px-4 py-3 backdrop-blur-md\">\n <div className=\"min-w-0\">\n <TruncatedText\n as=\"p\"\n showTitleOnHover\n className=\"truncate text-[11px] font-medium tracking-[0.16em] text-ds-2 uppercase transition-colors duration-200\"\n style={activeSegment ? { color: activeSegment.color } : undefined}\n >\n {summaryTitle}\n </TruncatedText>\n <p className=\"mt-1 text-xs text-ds-2\">{summaryMeta}</p>\n </div>\n <p\n className=\"text-right text-lg font-semibold leading-none text-ds-1 transition-colors duration-200\"\n style={activeSegment ? { color: activeSegment.color } : undefined}\n >\n {valueFormatter(summaryValue)}\n </p>\n </div>\n ) : null}\n\n <div className=\"relative\">\n {activeSegment && !showSummary && (\n <div\n className=\"pointer-events-none absolute -top-10 z-10 -translate-x-1/2 rounded-full px-2.5 py-1 text-[11px] font-medium text-ds-1\"\n style={{\n ...chartPillTooltipStyle,\n left: `${activeSegment.centerPercent}%`,\n }}\n >\n <span>{activeSegment.label}</span>\n <span className=\"mx-1 text-ds-2\">•</span>\n <span style={{ color: activeSegment.color }}>\n {activeSegment.value}\n </span>\n </div>\n )}\n\n <div className=\"rounded-full bg-ds-surface-2/80 p-0.5\">\n <div\n className=\"flex w-full gap-1\"\n onMouseLeave={() => setActiveSegmentKey(null)}\n >\n {segmentsWithMetrics.map((segment) => {\n const isActive = activeSegmentKey === segment.key;\n\n return (\n <div\n key={segment.key}\n className=\"relative flex h-2.5 min-w-0 items-center\"\n style={{ width: `${segment.widthPercent}%` }}\n onMouseEnter={() => setActiveSegmentKey(segment.key)}\n >\n <div\n className=\"h-full w-full rounded-full transition-[transform,filter,box-shadow,opacity] duration-200 ease-out\"\n style={{\n backgroundColor: segment.color,\n opacity: activeSegmentKey && !isActive ? 0.72 : 1,\n transform: isActive ? \"scaleY(1.3)\" : \"scaleY(1)\",\n filter: isActive\n ? \"saturate(1.1) brightness(1.05)\"\n : \"none\",\n boxShadow: isActive\n ? `inset 0 1px 1px rgba(255,255,255,0.28), 0 0 0 1px color-mix(in srgb, ${segment.color} 35%, transparent), 0 0 14px color-mix(in srgb, ${segment.color} 45%, transparent)`\n : `inset 0 1px 1px rgba(255,255,255,0.2), 0 0 8px color-mix(in srgb, ${segment.color} 30%, transparent)`,\n }}\n title={`${segment.label}: ${segment.value}`}\n />\n </div>\n );\n })}\n </div>\n </div>\n </div>\n\n {showLabels && (\n <div className=\"flex w-full items-start gap-1 px-0.5\">\n {segmentsWithMetrics.map((segment) => {\n const isActive = activeSegmentKey === segment.key;\n\n return (\n <div\n key={`label-${segment.key}`}\n className=\"flex min-w-0 justify-center\"\n style={{ width: `${segment.widthPercent}%` }}\n >\n <span\n className=\"whitespace-nowrap px-1 text-center text-[11px] font-medium tracking-wide text-ds-2 transition-colors duration-200\"\n style={isActive ? { color: segment.color } : undefined}\n >\n {segment.label}\n </span>\n </div>\n );\n })}\n </div>\n )}\n </div>\n );\n};\n","\"use client\";\n\nimport React from \"react\";\nimport {\n AreaChart as RechartsAreaChart,\n Area,\n XAxis,\n YAxis,\n CartesianGrid,\n Tooltip,\n ResponsiveContainer,\n} from \"recharts\";\n\nimport { normalizeChartColors } from \"./chartPalette\";\nimport {\n chartLineHoverCursorStyle,\n chartTooltipContentStyle,\n chartTooltipItemStyle,\n chartTooltipLabelStyle,\n chartTooltipWrapperStyle,\n getChartActiveDotStyle,\n} from \"./chartStyles\";\n\nexport interface AreaChartData {\n name: string;\n [key: string]: string | number;\n}\n\ninterface AreaChartProps {\n data: AreaChartData[];\n categories: { key: string; color: string }[];\n height?: number | string;\n className?: string;\n showGrid?: boolean;\n}\n\nexport const AreaChart: React.FC<AreaChartProps> = ({\n data,\n categories,\n height = 300,\n className = \"\",\n showGrid = true,\n}) => {\n const normalizedCategories = React.useMemo(() => {\n const normalizedColors = normalizeChartColors(\n categories.map((category) => category.color),\n );\n\n return categories.map((category, index) => ({\n ...category,\n color: normalizedColors[index] ?? category.color,\n }));\n }, [categories]);\n\n return (\n <div className={`w-full ${className}`} style={{ height }}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <RechartsAreaChart\n data={data}\n margin={{ top: 10, right: 30, left: 0, bottom: 0 }}\n >\n <defs>\n {normalizedCategories.map((cat) => (\n <linearGradient\n key={`gradient-${cat.key}`}\n id={`color-${cat.key}`}\n x1=\"0\"\n y1=\"0\"\n x2=\"0\"\n y2=\"1\"\n >\n <stop offset=\"5%\" stopColor={cat.color} stopOpacity={0.3} />\n <stop offset=\"95%\" stopColor={cat.color} stopOpacity={0} />\n </linearGradient>\n ))}\n </defs>\n\n {showGrid && (\n <CartesianGrid\n strokeDasharray=\"3 3\"\n vertical={false}\n stroke=\"var(--ds-color-border)\"\n opacity={0.5}\n />\n )}\n\n <XAxis\n dataKey=\"name\"\n axisLine={false}\n tickLine={false}\n tick={{ fill: \"var(--ds-color-fg-muted)\", fontSize: 12 }}\n dy={10}\n />\n\n <YAxis\n axisLine={false}\n tickLine={false}\n tick={{ fill: \"var(--ds-color-fg-muted)\", fontSize: 12 }}\n dx={-10}\n />\n\n <Tooltip\n contentStyle={chartTooltipContentStyle}\n cursor={chartLineHoverCursorStyle}\n itemStyle={chartTooltipItemStyle}\n labelStyle={chartTooltipLabelStyle}\n wrapperStyle={chartTooltipWrapperStyle}\n />\n\n {normalizedCategories.map((cat) => (\n <Area\n key={cat.key}\n activeDot={getChartActiveDotStyle(cat.color)}\n type=\"monotone\"\n dataKey={cat.key}\n stroke={cat.color}\n strokeWidth={2}\n fillOpacity={1}\n fill={`url(#color-${cat.key})`}\n />\n ))}\n </RechartsAreaChart>\n </ResponsiveContainer>\n </div>\n );\n};\n","\"use client\";\n\nimport React from \"react\";\nimport {\n BarChart as RechartsBarChart,\n Bar,\n XAxis,\n YAxis,\n CartesianGrid,\n Tooltip,\n ResponsiveContainer,\n} from \"recharts\";\n\nimport { normalizeChartColors } from \"./chartPalette\";\nimport {\n chartBandHoverCursorStyle,\n chartTooltipContentStyle,\n chartTooltipItemStyle,\n chartTooltipLabelStyle,\n chartTooltipWrapperStyle,\n} from \"./chartStyles\";\n\nexport interface BarChartData {\n name: string;\n [key: string]: string | number;\n}\n\ninterface BarChartProps {\n data: BarChartData[];\n categories: { key: string; color: string }[];\n height?: number | string;\n className?: string;\n layout?: \"horizontal\" | \"vertical\";\n maxBarSize?: number;\n /**\n * Compact mode — strips axes, grid, tooltip, and margins.\n * Designed for small sparkline-style zones (e.g. StatCard md, ~130×68 px).\n */\n compact?: boolean;\n}\n\nexport const BarChart: React.FC<BarChartProps> = ({\n data,\n categories,\n height = 300,\n className = \"\",\n layout = \"horizontal\",\n maxBarSize,\n compact = false,\n}) => {\n const resolvedMaxBarSize = maxBarSize ?? (compact ? 8 : layout === \"horizontal\" ? 40 : 22);\n\n const normalizedCategories = React.useMemo(() => {\n const normalizedColors = normalizeChartColors(\n categories.map((category) => category.color),\n );\n\n return categories.map((category, index) => ({\n ...category,\n color: normalizedColors[index] ?? category.color,\n }));\n }, [categories]);\n\n if (compact) {\n return (\n <div className={`w-full h-full ${className}`} style={{ height }}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <RechartsBarChart\n data={data}\n layout={layout}\n barCategoryGap=\"20%\"\n margin={{ top: 2, right: 2, left: 2, bottom: 2 }}\n >\n <Tooltip\n contentStyle={chartTooltipContentStyle}\n cursor={chartBandHoverCursorStyle}\n itemStyle={chartTooltipItemStyle}\n labelStyle={chartTooltipLabelStyle}\n wrapperStyle={chartTooltipWrapperStyle}\n />\n {normalizedCategories.map((cat) => (\n <Bar\n key={cat.key}\n dataKey={cat.key}\n fill={cat.color}\n maxBarSize={resolvedMaxBarSize}\n radius={[3, 3, 0, 0]}\n />\n ))}\n </RechartsBarChart>\n </ResponsiveContainer>\n </div>\n );\n }\n\n return (\n <div className={`w-full ${className}`} style={{ height }}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <RechartsBarChart\n data={data}\n layout={layout}\n barCategoryGap={data.length <= 4 ? \"28%\" : \"18%\"}\n margin={{ top: 20, right: 30, left: 20, bottom: 5 }}\n >\n <CartesianGrid\n strokeDasharray=\"3 3\"\n horizontal={layout === \"horizontal\"}\n vertical={layout === \"vertical\"}\n stroke=\"var(--ds-color-border)\"\n opacity={0.4}\n />\n\n {layout === \"horizontal\" ? (\n <>\n <XAxis\n dataKey=\"name\"\n axisLine={false}\n tickLine={false}\n tick={{ fill: \"var(--ds-color-fg-muted)\", fontSize: 12 }}\n dy={10}\n />\n <YAxis\n axisLine={false}\n tickLine={false}\n tick={{ fill: \"var(--ds-color-fg-muted)\", fontSize: 12 }}\n dx={-10}\n />\n </>\n ) : (\n <>\n <XAxis\n type=\"number\"\n axisLine={false}\n tickLine={false}\n tick={{ fill: \"var(--ds-color-fg-muted)\", fontSize: 12 }}\n dy={10}\n />\n <YAxis\n dataKey=\"name\"\n type=\"category\"\n axisLine={false}\n tickLine={false}\n tick={{ fill: \"var(--ds-color-fg-muted)\", fontSize: 12 }}\n dx={-10}\n />\n </>\n )}\n\n <Tooltip\n contentStyle={chartTooltipContentStyle}\n cursor={chartBandHoverCursorStyle}\n itemStyle={chartTooltipItemStyle}\n labelStyle={chartTooltipLabelStyle}\n wrapperStyle={chartTooltipWrapperStyle}\n />\n\n {normalizedCategories.map((cat) => (\n <Bar\n key={cat.key}\n dataKey={cat.key}\n fill={cat.color}\n maxBarSize={resolvedMaxBarSize}\n radius={layout === \"horizontal\" ? [4, 4, 0, 0] : [0, 4, 4, 0]}\n />\n ))}\n </RechartsBarChart>\n </ResponsiveContainer>\n </div>\n );\n};\n","\"use client\";\n\nimport React from \"react\";\nimport {\n Bar,\n BarChart as RechartsBarChart,\n CartesianGrid,\n Cell,\n Rectangle,\n ReferenceLine,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from \"recharts\";\n\nimport { getChartColorVar, normalizeChartColorValue } from \"./chartPalette\";\nimport {\n chartBandHoverCursorStyle,\n chartTooltipContentStyle,\n chartTooltipItemStyle,\n chartTooltipLabelStyle,\n chartTooltipWrapperStyle,\n} from \"./chartStyles\";\n\nexport interface PositiveNegativeBarChartData {\n name: string;\n value: number;\n}\n\ninterface PositiveNegativeBarChartProps {\n data: PositiveNegativeBarChartData[];\n height?: number | string;\n className?: string;\n layout?: \"horizontal\" | \"vertical\";\n positiveColor?: string;\n negativeColor?: string;\n neutralColor?: string;\n showGrid?: boolean;\n seriesLabel?: string;\n valueFormatter?: (value: number) => string;\n tickFormatter?: (value: number) => string;\n}\n\nconst defaultValueFormatter = (value: number): string =>\n new Intl.NumberFormat().format(value);\n\nconst getBarRadius = (\n value: number,\n layout: \"horizontal\" | \"vertical\",\n): [number, number, number, number] => {\n if (value === 0) {\n return [6, 6, 6, 6];\n }\n\n if (layout === \"horizontal\") {\n return [6, 6, 0, 0];\n }\n\n return value > 0 ? [0, 6, 6, 0] : [6, 0, 0, 6];\n};\n\nexport const PositiveNegativeBarChart: React.FC<\n PositiveNegativeBarChartProps\n> = ({\n data,\n height = 320,\n className = \"\",\n layout = \"horizontal\",\n positiveColor = getChartColorVar(3),\n negativeColor = getChartColorVar(5),\n neutralColor = getChartColorVar(15),\n showGrid = true,\n seriesLabel = \"Variance\",\n valueFormatter = defaultValueFormatter,\n tickFormatter,\n}) => {\n const resolvedPositiveColor = React.useMemo(\n () => normalizeChartColorValue(positiveColor) ?? getChartColorVar(3),\n [positiveColor],\n );\n const resolvedNegativeColor = React.useMemo(\n () => normalizeChartColorValue(negativeColor) ?? getChartColorVar(5),\n [negativeColor],\n );\n const resolvedNeutralColor = React.useMemo(\n () => normalizeChartColorValue(neutralColor) ?? getChartColorVar(15),\n [neutralColor],\n );\n\n const resolvedTickFormatter = React.useCallback(\n (value: number) => tickFormatter?.(value) ?? valueFormatter(value),\n [tickFormatter, valueFormatter],\n );\n\n const getBarFill = React.useCallback(\n (value: number) => {\n if (value > 0) {\n return resolvedPositiveColor;\n }\n\n if (value < 0) {\n return resolvedNegativeColor;\n }\n\n return resolvedNeutralColor;\n },\n [resolvedNegativeColor, resolvedNeutralColor, resolvedPositiveColor],\n );\n\n return (\n <div className={`w-full ${className}`} style={{ height }}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <RechartsBarChart\n data={data}\n layout={layout}\n margin={{ top: 20, right: 30, left: 20, bottom: 5 }}\n >\n {showGrid ? (\n <CartesianGrid\n strokeDasharray=\"3 3\"\n horizontal={layout === \"horizontal\"}\n vertical={layout === \"vertical\"}\n stroke=\"var(--ds-color-border)\"\n opacity={0.35}\n />\n ) : null}\n\n {layout === \"horizontal\" ? (\n <>\n <XAxis\n dataKey=\"name\"\n axisLine={false}\n tickLine={false}\n tick={{ fill: \"var(--ds-color-fg-muted)\", fontSize: 12 }}\n dy={10}\n />\n <YAxis\n axisLine={false}\n tickLine={false}\n tick={{ fill: \"var(--ds-color-fg-muted)\", fontSize: 12 }}\n tickFormatter={resolvedTickFormatter}\n dx={-10}\n />\n <ReferenceLine\n y={0}\n stroke=\"var(--ds-color-border-strong)\"\n strokeOpacity={0.95}\n />\n </>\n ) : (\n <>\n <XAxis\n type=\"number\"\n axisLine={false}\n tickLine={false}\n tick={{ fill: \"var(--ds-color-fg-muted)\", fontSize: 12 }}\n tickFormatter={resolvedTickFormatter}\n dy={10}\n />\n <YAxis\n dataKey=\"name\"\n type=\"category\"\n axisLine={false}\n tickLine={false}\n tick={{ fill: \"var(--ds-color-fg-muted)\", fontSize: 12 }}\n width={96}\n dx={-6}\n />\n <ReferenceLine\n x={0}\n stroke=\"var(--ds-color-border-strong)\"\n strokeOpacity={0.95}\n />\n </>\n )}\n\n <Tooltip\n contentStyle={chartTooltipContentStyle}\n cursor={chartBandHoverCursorStyle}\n itemStyle={chartTooltipItemStyle}\n labelStyle={chartTooltipLabelStyle}\n wrapperStyle={chartTooltipWrapperStyle}\n formatter={(value) => [\n valueFormatter(Number(value ?? 0)),\n seriesLabel,\n ]}\n />\n\n <Bar\n dataKey=\"value\"\n radius={6}\n barSize={layout === \"horizontal\" ? 30 : 22}\n shape={(props) => {\n const barValue = Array.isArray(props.value)\n ? props.value[1] - props.value[0]\n : props.value;\n\n return (\n <Rectangle {...props} radius={getBarRadius(barValue, layout)} />\n );\n }}\n >\n {data.map((entry) => (\n <Cell\n key={`${entry.name}-${entry.value}`}\n fill={getBarFill(entry.value)}\n />\n ))}\n </Bar>\n </RechartsBarChart>\n </ResponsiveContainer>\n </div>\n );\n};\n","\"use client\";\n\nimport React from \"react\";\nimport {\n PieChart as RechartsPieChart,\n Pie,\n Cell,\n Tooltip,\n Legend,\n ResponsiveContainer,\n} from \"recharts\";\n\nimport { normalizeChartColors } from \"./chartPalette\";\nimport {\n chartLegendTextStyle,\n chartTooltipContentStyle,\n chartTooltipItemStyle,\n chartTooltipLabelStyle,\n chartTooltipWrapperStyle,\n} from \"./chartStyles\";\n\nexport interface PieChartData {\n name: string;\n value: number;\n}\n\nexport interface PieChartCenterContentContext {\n activeColor?: string;\n activeIndex: number | null;\n activeSlice: PieChartData | null;\n data: PieChartData[];\n displayLabel: string;\n displayPercentageLabel: string;\n displayValue: number;\n normalizedColors: string[];\n totalValue: number;\n valueFormatter: (value: number) => string;\n variant: \"pie\" | \"donut\";\n}\n\nexport interface PieChartProps {\n data: PieChartData[];\n colors: string[];\n height?: number | string;\n className?: string;\n variant?: \"pie\" | \"donut\";\n showCenterSummary?: boolean;\n centerLabel?: string;\n valueFormatter?: (value: number) => string;\n renderCenterContent?: (\n context: PieChartCenterContentContext,\n ) => React.ReactNode;\n}\n\nconst defaultValueFormatter = (value: number): string =>\n new Intl.NumberFormat().format(value);\n\nexport const PieChart: React.FC<PieChartProps> = ({\n data,\n colors,\n height = 300,\n className = \"\",\n variant = \"donut\",\n showCenterSummary = variant === \"donut\",\n centerLabel = \"Total\",\n valueFormatter = defaultValueFormatter,\n renderCenterContent,\n}) => {\n const [activeIndex, setActiveIndex] = React.useState<number | null>(null);\n const innerRadius = variant === \"donut\" ? \"60%\" : 0;\n const normalizedColors = React.useMemo(\n () => normalizeChartColors(colors),\n [colors],\n );\n const totalValue = React.useMemo(\n () => data.reduce((sum, item) => sum + item.value, 0),\n [data],\n );\n const activeSlice =\n activeIndex !== null && activeIndex >= 0 && activeIndex < data.length\n ? data[activeIndex]\n : null;\n const activePercentage =\n activeSlice && totalValue > 0\n ? `${Math.round((activeSlice.value / totalValue) * 100)}% of total`\n : `${data.length} categories`;\n const displayLabel = activeSlice?.name ?? centerLabel;\n const displayValue = activeSlice?.value ?? totalValue;\n const activeColor =\n activeIndex !== null\n ? normalizedColors[activeIndex % normalizedColors.length]\n : undefined;\n const centerContentContext: PieChartCenterContentContext = {\n activeColor,\n activeIndex,\n activeSlice,\n data,\n displayLabel,\n displayPercentageLabel: activePercentage,\n displayValue,\n normalizedColors,\n totalValue,\n valueFormatter,\n variant,\n };\n const shouldRenderCenterContent =\n variant === \"donut\" && (showCenterSummary || Boolean(renderCenterContent));\n\n return (\n <div className={`relative w-full ${className}`} style={{ height }}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <RechartsPieChart>\n <Pie\n data={data}\n cx=\"50%\"\n cy=\"50%\"\n innerRadius={innerRadius}\n outerRadius=\"80%\"\n paddingAngle={variant === \"donut\" ? 2 : 0}\n dataKey=\"value\"\n stroke=\"none\"\n onMouseEnter={(_data: unknown, index: number) =>\n setActiveIndex(index)\n }\n onMouseLeave={() => setActiveIndex(null)}\n >\n {data.map((entry, index) => (\n <Cell\n key={`cell-${index}`}\n fill={normalizedColors[index % normalizedColors.length]}\n />\n ))}\n </Pie>\n\n <Tooltip\n contentStyle={chartTooltipContentStyle}\n itemStyle={chartTooltipItemStyle}\n labelStyle={chartTooltipLabelStyle}\n wrapperStyle={chartTooltipWrapperStyle}\n />\n\n <Legend iconType=\"circle\" wrapperStyle={chartLegendTextStyle} />\n </RechartsPieChart>\n </ResponsiveContainer>\n\n {shouldRenderCenterContent ? (\n <div className=\"pointer-events-none absolute inset-0 flex items-center justify-center\">\n {renderCenterContent ? (\n renderCenterContent(centerContentContext)\n ) : (\n <div className=\"flex max-w-[42%] flex-col items-center text-center\">\n <p className=\"text-[11px] font-medium tracking-[0.16em] text-ds-2 uppercase\">\n {displayLabel}\n </p>\n <p className=\"mt-1 text-2xl font-semibold leading-none text-ds-1 sm:text-3xl\">\n {valueFormatter(displayValue)}\n </p>\n <p className=\"mt-2 text-xs leading-tight text-ds-2\">\n {activePercentage}\n </p>\n </div>\n )}\n </div>\n ) : null}\n </div>\n );\n};\n"],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { t as
|
|
1
|
+
import { a as chartTooltipContentStyle, c as chartTooltipWrapperStyle, i as chartPillTooltipStyle, l as getChartActiveDotStyle, n as chartLegendTextStyle, o as chartTooltipItemStyle, r as chartLineHoverCursorStyle, s as chartTooltipLabelStyle, t as chartBandHoverCursorStyle } from "./chartStyles-DrHVYS5N.mjs";
|
|
2
|
+
import { t as TruncatedText } from "./truncated-text-DIkg-8Vo.mjs";
|
|
2
3
|
import React from "react";
|
|
3
4
|
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
4
5
|
import { Area, AreaChart, Bar, BarChart, CartesianGrid, Cell, Legend, Line, LineChart, Pie, PieChart, Rectangle, ReferenceLine, ResponsiveContainer, Tooltip, XAxis, YAxis } from "recharts";
|
|
@@ -106,58 +107,6 @@ var normalizeChartColors = (requestedColors) => {
|
|
|
106
107
|
});
|
|
107
108
|
};
|
|
108
109
|
//#endregion
|
|
109
|
-
//#region src/components/data-display/charts/chartStyles.ts
|
|
110
|
-
var chartTooltipContentStyle = {
|
|
111
|
-
background: "linear-gradient(135deg, color-mix(in srgb, var(--ds-color-bg-surface) 88%, transparent), color-mix(in srgb, var(--ds-color-bg-elevated) 74%, transparent))",
|
|
112
|
-
border: "1px solid color-mix(in srgb, var(--ds-color-border-strong) 72%, transparent)",
|
|
113
|
-
borderRadius: "12px",
|
|
114
|
-
backdropFilter: "blur(18px) saturate(180%)",
|
|
115
|
-
WebkitBackdropFilter: "blur(18px) saturate(180%)",
|
|
116
|
-
boxShadow: "0 18px 40px color-mix(in srgb, var(--ds-color-fg) 14%, transparent), inset 0 1px 0 color-mix(in srgb, var(--ds-color-bg-surface) 36%, transparent)",
|
|
117
|
-
color: "var(--ds-color-fg)",
|
|
118
|
-
padding: "0.75rem 0.875rem"
|
|
119
|
-
};
|
|
120
|
-
var chartTooltipLabelStyle = {
|
|
121
|
-
color: "var(--ds-color-fg)",
|
|
122
|
-
fontSize: "0.8125rem",
|
|
123
|
-
fontWeight: 600,
|
|
124
|
-
marginBottom: "0.375rem"
|
|
125
|
-
};
|
|
126
|
-
var chartTooltipItemStyle = {
|
|
127
|
-
color: "var(--ds-color-fg)",
|
|
128
|
-
fontSize: "0.8125rem",
|
|
129
|
-
fontWeight: 500,
|
|
130
|
-
padding: 0
|
|
131
|
-
};
|
|
132
|
-
var chartTooltipWrapperStyle = { outline: "none" };
|
|
133
|
-
var chartLegendTextStyle = {
|
|
134
|
-
fontSize: "12px",
|
|
135
|
-
color: "var(--ds-color-fg-muted)"
|
|
136
|
-
};
|
|
137
|
-
var chartBandHoverCursorStyle = {
|
|
138
|
-
fill: "color-mix(in srgb, var(--ds-color-accent) 12%, transparent)",
|
|
139
|
-
stroke: "color-mix(in srgb, var(--ds-color-accent) 34%, var(--ds-color-border-strong))",
|
|
140
|
-
strokeWidth: 1
|
|
141
|
-
};
|
|
142
|
-
var chartLineHoverCursorStyle = {
|
|
143
|
-
stroke: "color-mix(in srgb, var(--ds-color-accent) 42%, var(--ds-color-border-strong))",
|
|
144
|
-
strokeWidth: 1.25,
|
|
145
|
-
strokeDasharray: "4 4"
|
|
146
|
-
};
|
|
147
|
-
var getChartActiveDotStyle = (strokeColor) => ({
|
|
148
|
-
r: 6,
|
|
149
|
-
fill: "color-mix(in srgb, var(--ds-color-bg-surface) 90%, transparent)",
|
|
150
|
-
stroke: strokeColor,
|
|
151
|
-
strokeWidth: 2.5
|
|
152
|
-
});
|
|
153
|
-
var chartPillTooltipStyle = {
|
|
154
|
-
background: "linear-gradient(135deg, color-mix(in srgb, var(--ds-color-bg-surface) 90%, transparent), color-mix(in srgb, var(--ds-color-bg-elevated) 76%, transparent))",
|
|
155
|
-
border: "1px solid color-mix(in srgb, var(--ds-color-border-strong) 70%, transparent)",
|
|
156
|
-
boxShadow: "0 14px 32px color-mix(in srgb, var(--ds-color-fg) 14%, transparent), inset 0 1px 0 color-mix(in srgb, var(--ds-color-bg-surface) 34%, transparent)",
|
|
157
|
-
backdropFilter: "blur(16px) saturate(170%)",
|
|
158
|
-
WebkitBackdropFilter: "blur(16px) saturate(170%)"
|
|
159
|
-
};
|
|
160
|
-
//#endregion
|
|
161
110
|
//#region src/components/data-display/charts/NeonLineChart.tsx
|
|
162
111
|
var NeonLineChart = ({ data, height = 300, lineColorStop1 = getChartColorVar(2), lineColorStop2 = getChartColorVar(1), glowColor = getChartColorVar(1), className = "" }) => {
|
|
163
112
|
const [normalizedStop1, normalizedStop2] = React.useMemo(() => normalizeChartColors([lineColorStop1, lineColorStop2]), [lineColorStop1, lineColorStop2]);
|
|
@@ -1013,4 +962,4 @@ var PieChart$1 = ({ data, colors, height = 300, className = "", variant = "donut
|
|
|
1013
962
|
//#endregion
|
|
1014
963
|
export { ThinBreakdownBar as a, NeonLineChart as c, getChartPalette as d, AreaChart$1 as i, chartColorTokens as l, PositiveNegativeBarChart as n, StackedBarChart as o, BarChart$1 as r, MiniNeonSparkline as s, PieChart$1 as t, getChartColorVar as u };
|
|
1015
964
|
|
|
1016
|
-
//# sourceMappingURL=charts-
|
|
965
|
+
//# sourceMappingURL=charts-DlskmT1J.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"charts-DlskmT1J.mjs","names":[],"sources":["../../src/components/data-display/charts/chartPalette.ts","../../src/components/data-display/charts/NeonLineChart.tsx","../../src/components/data-display/charts/MiniNeonSparkline.tsx","../../src/components/data-display/charts/StackedBarChart.tsx","../../src/components/data-display/charts/ThinBreakdownBar.tsx","../../src/components/data-display/charts/AreaChart.tsx","../../src/components/data-display/charts/BarChart.tsx","../../src/components/data-display/charts/PositiveNegativeBarChart.tsx","../../src/components/data-display/charts/PieChart.tsx"],"sourcesContent":["const chartColorSlots = [\n 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n] as const;\n\nexport type ChartColorSlot = (typeof chartColorSlots)[number];\nexport type ChartColorToken = `chart-${ChartColorSlot}`;\n\nexport const chartColorTokens = chartColorSlots.map(\n (slot) => `chart-${slot}` as ChartColorToken,\n);\n\nconst chartPalette = chartColorSlots.map((slot) => `var(--ds-chart-${slot})`);\n\ntype RgbColor = {\n r: number;\n g: number;\n b: number;\n};\n\nconst resolvedColorCache = new Map<string, RgbColor | null>();\n\nconst chartTokenPattern = /^chart-(\\d+)$/i;\nconst chartVariablePattern = /^--((?:ds|color)-chart-(\\d+))$/i;\n\nconst getChartSlotValue = (slot: ChartColorSlot | ChartColorToken): number =>\n typeof slot === \"number\" ? slot : Number(slot.replace(\"chart-\", \"\"));\n\nexport const getChartColorVar = (\n slot: ChartColorSlot | ChartColorToken,\n namespace: \"ds\" | \"color\" = \"ds\",\n): string => `var(--${namespace}-chart-${getChartSlotValue(slot)})`;\n\nexport const normalizeChartColorValue = (\n value?: string,\n): string | undefined => {\n const normalizedValue = value?.trim();\n\n if (!normalizedValue) {\n return undefined;\n }\n\n const tokenMatch = normalizedValue.match(chartTokenPattern);\n if (tokenMatch) {\n return `var(--ds-chart-${tokenMatch[1]})`;\n }\n\n const variableMatch = normalizedValue.match(chartVariablePattern);\n if (variableMatch) {\n return `var(--${variableMatch[1]})`;\n }\n\n return normalizedValue;\n};\n\nconst getThemeSignature = (): string => {\n if (typeof document === \"undefined\") return \"\";\n\n const root = document.documentElement;\n return [\n root.getAttribute(\"data-brand\") ?? \"\",\n root.getAttribute(\"data-mode\") ?? \"\",\n root.getAttribute(\"data-theme\") ?? \"\",\n ].join(\"|\");\n};\n\nconst resolveColor = (value: string): RgbColor | null => {\n if (typeof document === \"undefined\") return null;\n\n const cacheKey = `${getThemeSignature()}::${value}`;\n const cached = resolvedColorCache.get(cacheKey);\n if (cached !== undefined) {\n return cached;\n }\n\n const probe = document.createElement(\"span\");\n probe.style.color = value;\n probe.style.position = \"fixed\";\n probe.style.opacity = \"0\";\n probe.style.pointerEvents = \"none\";\n document.body.appendChild(probe);\n\n const computedColor = getComputedStyle(probe).color;\n document.body.removeChild(probe);\n\n const match = computedColor.match(/rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)/i);\n\n const resolved = match\n ? {\n r: Number(match[1]),\n g: Number(match[2]),\n b: Number(match[3]),\n }\n : null;\n\n resolvedColorCache.set(cacheKey, resolved);\n return resolved;\n};\n\nconst getColorDistance = (left: RgbColor, right: RgbColor): number => {\n const deltaR = left.r - right.r;\n const deltaG = left.g - right.g;\n const deltaB = left.b - right.b;\n\n return Math.sqrt(deltaR ** 2 + deltaG ** 2 + deltaB ** 2);\n};\n\nconst isTooSimilar = (\n candidate: string,\n usedColors: readonly string[],\n minDistance = 84,\n): boolean => {\n if (usedColors.includes(candidate)) {\n return true;\n }\n\n const candidateRgb = resolveColor(candidate);\n if (!candidateRgb) {\n return false;\n }\n\n return usedColors.some((usedColor) => {\n const usedRgb = resolveColor(usedColor);\n return usedRgb\n ? getColorDistance(candidateRgb, usedRgb) < minDistance\n : false;\n });\n};\n\nexport const getChartPalette = (count = chartPalette.length): string[] =>\n Array.from(\n { length: count },\n (_, index) => chartPalette[index % chartPalette.length],\n );\n\nexport const normalizeChartColors = (\n requestedColors: readonly (string | undefined)[],\n): string[] => {\n const usedColors: string[] = [];\n let paletteIndex = 0;\n\n const getNextDistinctPaletteColor = (): string => {\n for (let attempt = 0; attempt < chartPalette.length; attempt++) {\n const candidate =\n chartPalette[(paletteIndex + attempt) % chartPalette.length];\n\n if (!isTooSimilar(candidate, usedColors)) {\n paletteIndex = (paletteIndex + attempt + 1) % chartPalette.length;\n return candidate;\n }\n }\n\n const fallback = chartPalette[paletteIndex % chartPalette.length];\n paletteIndex = (paletteIndex + 1) % chartPalette.length;\n return fallback;\n };\n\n return requestedColors.map((requestedColor) => {\n const normalizedRequestedColor = normalizeChartColorValue(requestedColor);\n const resolvedColor =\n normalizedRequestedColor &&\n !isTooSimilar(normalizedRequestedColor, usedColors)\n ? normalizedRequestedColor\n : getNextDistinctPaletteColor();\n\n usedColors.push(resolvedColor);\n return resolvedColor;\n });\n};\n","\"use client\";\n\nimport React from \"react\";\nimport {\n LineChart,\n Line,\n XAxis,\n YAxis,\n CartesianGrid,\n Tooltip,\n ResponsiveContainer,\n} from \"recharts\";\n\nimport {\n getChartColorVar,\n normalizeChartColorValue,\n normalizeChartColors,\n} from \"./chartPalette\";\nimport {\n chartLineHoverCursorStyle,\n chartTooltipContentStyle,\n chartTooltipItemStyle,\n chartTooltipLabelStyle,\n chartTooltipWrapperStyle,\n getChartActiveDotStyle,\n} from \"./chartStyles\";\n\ninterface DataPoint {\n name: string;\n value: number;\n}\n\ninterface NeonLineChartProps {\n data: DataPoint[];\n height?: number | string;\n lineColorStop1?: string;\n lineColorStop2?: string;\n className?: string;\n glowColor?: string;\n}\n\nexport const NeonLineChart: React.FC<NeonLineChartProps> = ({\n data,\n height = 300,\n lineColorStop1 = getChartColorVar(2),\n lineColorStop2 = getChartColorVar(1),\n glowColor = getChartColorVar(1),\n className = \"\",\n}) => {\n const [normalizedStop1, normalizedStop2] = React.useMemo(\n () => normalizeChartColors([lineColorStop1, lineColorStop2]),\n [lineColorStop1, lineColorStop2],\n );\n const normalizedGlowColor = React.useMemo(\n () => normalizeChartColorValue(glowColor) ?? getChartColorVar(1),\n [glowColor],\n );\n\n return (\n <div className={`w-full relative ${className}`} style={{ height }}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <LineChart\n data={data}\n margin={{ top: 20, right: 30, left: 10, bottom: 20 }}\n >\n <defs>\n {/* Linear Gradient for the Line */}\n <linearGradient id=\"neonGradient\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"0\">\n <stop offset=\"0%\" stopColor={normalizedStop1} />\n <stop offset=\"100%\" stopColor={normalizedStop2} />\n </linearGradient>\n\n {/* Glowing Drop Shadow Filter */}\n <filter id=\"neonGlow\" x=\"-20%\" y=\"-20%\" width=\"140%\" height=\"140%\">\n <feDropShadow\n dx=\"0\"\n dy=\"6\"\n stdDeviation=\"8\"\n floodColor={normalizedGlowColor}\n floodOpacity=\"0.8\"\n />\n <feDropShadow\n dx=\"0\"\n dy=\"0\"\n stdDeviation=\"15\"\n floodColor={normalizedStop1}\n floodOpacity=\"0.3\"\n />\n </filter>\n </defs>\n\n {/* Minimal Grid */}\n <CartesianGrid\n strokeDasharray=\"3 3\"\n vertical={false}\n stroke=\"var(--ds-color-border)\"\n opacity={0.5}\n />\n\n <XAxis\n dataKey=\"name\"\n axisLine={false}\n tickLine={false}\n tick={{ fill: \"var(--ds-color-fg-muted)\", fontSize: 12 }}\n dy={10}\n />\n\n <YAxis\n axisLine={false}\n tickLine={false}\n tick={{ fill: \"var(--ds-color-fg-muted)\", fontSize: 12 }}\n dx={-10}\n />\n\n <Tooltip\n contentStyle={chartTooltipContentStyle}\n cursor={chartLineHoverCursorStyle}\n itemStyle={chartTooltipItemStyle}\n labelStyle={chartTooltipLabelStyle}\n wrapperStyle={chartTooltipWrapperStyle}\n />\n\n {/* The Neon Line */}\n <Line\n type=\"monotone\"\n dataKey=\"value\"\n stroke=\"url(#neonGradient)\"\n strokeWidth={3}\n dot={false}\n activeDot={getChartActiveDotStyle(normalizedStop2)}\n filter=\"url(#neonGlow)\"\n />\n </LineChart>\n </ResponsiveContainer>\n </div>\n );\n};\n","\"use client\";\n\nimport React from \"react\";\nimport { Area, AreaChart, Line, ResponsiveContainer, Tooltip } from \"recharts\";\n\nimport { getChartColorVar, normalizeChartColorValue } from \"./chartPalette\";\n\nexport interface MiniNeonSparklinePoint {\n label: string;\n value: number;\n}\n\nexport type MiniNeonSparklineTone =\n | \"default\"\n | \"success\"\n | \"warning\"\n | \"danger\"\n | \"info\";\n\nexport interface MiniNeonSparklineProps {\n data: MiniNeonSparklinePoint[];\n height?: number;\n strokeWidth?: number;\n className?: string;\n showArea?: boolean;\n showTooltip?: boolean;\n tone?: MiniNeonSparklineTone;\n}\n\nconst toneColorMap: Record<MiniNeonSparklineTone, string> = {\n default: getChartColorVar(1),\n success: \"var(--ds-color-success)\",\n warning: \"var(--ds-color-warning)\",\n danger: \"var(--ds-color-danger)\",\n info: \"var(--ds-color-info)\",\n};\n\nconst tooltipContentStyle: React.CSSProperties = {\n borderRadius: \"12px\",\n border: \"1px solid var(--ds-border-2)\",\n background: \"var(--ds-surface-1)\",\n color: \"var(--ds-text-1)\",\n fontSize: \"12px\",\n};\n\nexport const MiniNeonSparkline: React.FC<MiniNeonSparklineProps> = ({\n data,\n height = 46,\n strokeWidth = 2,\n className = \"\",\n showArea = true,\n showTooltip = true,\n tone = \"default\",\n}) => {\n const resolvedTone = React.useMemo(\n () => normalizeChartColorValue(toneColorMap[tone]) ?? toneColorMap.default,\n [tone],\n );\n\n const chartGradientId = React.useId();\n const chartGlowId = React.useId();\n\n return (\n <div className={`ui:relative ui:w-full ${className}`} style={{ height }}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <AreaChart\n data={data}\n margin={{ top: 4, right: 2, left: 2, bottom: 4 }}\n >\n <defs>\n <linearGradient id={chartGradientId} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stopColor={resolvedTone} stopOpacity={0.35} />\n <stop offset=\"100%\" stopColor={resolvedTone} stopOpacity={0.02} />\n </linearGradient>\n <filter\n id={chartGlowId}\n x=\"-20%\"\n y=\"-20%\"\n width=\"140%\"\n height=\"140%\"\n >\n <feDropShadow\n dx=\"0\"\n dy=\"2\"\n stdDeviation=\"3\"\n floodColor={resolvedTone}\n floodOpacity=\"0.45\"\n />\n </filter>\n </defs>\n\n {showArea ? (\n <Area\n type=\"monotone\"\n dataKey=\"value\"\n stroke=\"none\"\n fill={`url(#${chartGradientId})`}\n />\n ) : null}\n\n <Line\n type=\"monotone\"\n dataKey=\"value\"\n stroke={resolvedTone}\n strokeWidth={strokeWidth}\n dot={false}\n isAnimationActive={false}\n filter={`url(#${chartGlowId})`}\n />\n\n {showTooltip ? (\n <Tooltip\n contentStyle={tooltipContentStyle}\n labelStyle={{ color: \"var(--ds-text-2)\", marginBottom: \"4px\" }}\n itemStyle={{ color: \"var(--ds-text-1)\", fontWeight: 600 }}\n formatter={(value) => [String(value ?? \"\"), \"Value\"]}\n />\n ) : null}\n </AreaChart>\n </ResponsiveContainer>\n </div>\n );\n};\n","\"use client\";\n\nimport React from \"react\";\nimport {\n BarChart as RechartsBarChart,\n Bar,\n XAxis,\n YAxis,\n CartesianGrid,\n Tooltip,\n Legend,\n ResponsiveContainer,\n} from \"recharts\";\n\nimport { normalizeChartColors } from \"./chartPalette\";\nimport {\n chartBandHoverCursorStyle,\n chartLegendTextStyle,\n chartTooltipContentStyle,\n chartTooltipItemStyle,\n chartTooltipLabelStyle,\n chartTooltipWrapperStyle,\n} from \"./chartStyles\";\n\nexport interface StackedBarData {\n name: string;\n [key: string]: string | number;\n}\n\ninterface StackedBarChartProps {\n data: StackedBarData[];\n categories: { key: string; color: string; label: string }[];\n height?: number | string;\n yAxisDomain?: [number, number];\n className?: string;\n}\n\nexport const StackedBarChart: React.FC<StackedBarChartProps> = ({\n data,\n categories,\n height = 300,\n yAxisDomain,\n className = \"\",\n}) => {\n const normalizedCategories = React.useMemo(() => {\n const normalizedColors = normalizeChartColors(\n categories.map((category) => category.color),\n );\n\n return categories.map((category, index) => ({\n ...category,\n color: normalizedColors[index] ?? category.color,\n }));\n }, [categories]);\n\n return (\n <div className={`w-full ${className}`} style={{ height }}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <RechartsBarChart\n data={data}\n margin={{ top: 20, right: 30, left: 20, bottom: 5 }}\n >\n <CartesianGrid\n strokeDasharray=\"3 3\"\n vertical={false}\n stroke=\"var(--ds-color-border)\"\n opacity={0.4}\n />\n <XAxis\n dataKey=\"name\"\n axisLine={false}\n tickLine={false}\n tick={{ fill: \"var(--ds-color-fg-muted)\", fontSize: 12 }}\n dy={10}\n />\n <YAxis\n axisLine={false}\n tickLine={false}\n tick={{ fill: \"var(--ds-color-fg-muted)\", fontSize: 12 }}\n dx={-10}\n domain={yAxisDomain}\n />\n <Tooltip\n contentStyle={chartTooltipContentStyle}\n cursor={chartBandHoverCursorStyle}\n itemStyle={chartTooltipItemStyle}\n labelStyle={chartTooltipLabelStyle}\n wrapperStyle={chartTooltipWrapperStyle}\n />\n <Legend\n iconType=\"circle\"\n wrapperStyle={{\n ...chartLegendTextStyle,\n paddingTop: \"20px\",\n }}\n />\n\n {normalizedCategories.map((cat, index) => {\n // Apply rounded radius only to the top bar in the stack\n const isTop = index === normalizedCategories.length - 1;\n const radius: [number, number, number, number] = isTop\n ? [6, 6, 0, 0]\n : [0, 0, 0, 0];\n\n return (\n <Bar\n key={cat.key}\n dataKey={cat.key}\n name={cat.label}\n stackId=\"a\"\n fill={cat.color}\n radius={radius}\n barSize={32}\n />\n );\n })}\n </RechartsBarChart>\n </ResponsiveContainer>\n </div>\n );\n};\n","\"use client\";\n\nimport React from \"react\";\n\nimport { TruncatedText } from \"../../typography/truncated-text\";\nimport { normalizeChartColors } from \"./chartPalette\";\nimport { chartPillTooltipStyle } from \"./chartStyles\";\n\nexport interface BreakdownSegment {\n id?: string;\n label: string;\n value: number; // The absolute value or percentage\n color: string;\n}\n\ninterface ThinBreakdownBarProps {\n data: BreakdownSegment[];\n className?: string;\n showLabels?: boolean;\n showSummary?: boolean;\n summaryLabel?: string;\n valueFormatter?: (value: number) => string;\n}\n\nconst defaultValueFormatter = (value: number): string =>\n new Intl.NumberFormat().format(value);\n\nexport const ThinBreakdownBar: React.FC<ThinBreakdownBarProps> = ({\n data: segments,\n className = \"\",\n showLabels = true,\n showSummary = false,\n summaryLabel = \"Total\",\n valueFormatter = defaultValueFormatter,\n}) => {\n const [activeSegmentKey, setActiveSegmentKey] = React.useState<string | null>(\n null,\n );\n\n const normalizedSegments = React.useMemo(() => {\n const normalizedColors = normalizeChartColors(\n segments.map((segment) => segment.color),\n );\n\n const totalValue = segments.reduce((sum, item) => sum + item.value, 0);\n\n return segments.map((segment, index) => ({\n ...segment,\n key: segment.id || `segment-${index}`,\n color: normalizedColors[index] ?? segment.color,\n widthPercent:\n totalValue > 0 ? Math.max((segment.value / totalValue) * 100, 0) : 0,\n }));\n }, [segments]);\n\n const segmentsWithMetrics = React.useMemo(() => {\n let runningPercent = 0;\n\n return normalizedSegments.map((segment) => {\n const nextSegment = {\n ...segment,\n centerPercent: runningPercent + segment.widthPercent / 2,\n };\n\n runningPercent += segment.widthPercent;\n return nextSegment;\n });\n }, [normalizedSegments]);\n\n const activeSegment = React.useMemo(\n () =>\n segmentsWithMetrics.find((segment) => segment.key === activeSegmentKey) ??\n null,\n [activeSegmentKey, segmentsWithMetrics],\n );\n const totalValue = React.useMemo(\n () => segments.reduce((sum, item) => sum + item.value, 0),\n [segments],\n );\n const summaryTitle = activeSegment?.label ?? summaryLabel;\n const summaryValue = activeSegment?.value ?? totalValue;\n const summaryMeta = activeSegment\n ? `${Math.round(activeSegment.widthPercent)}% of total`\n : `${segments.length} segments`;\n\n return (\n <div className={`w-full flex flex-col gap-3 ${className}`}>\n {showSummary && (activeSegment || totalValue > 0) ? (\n <div className=\"flex items-start justify-between gap-4 rounded-xl border border-ds-border-2/70 bg-ds-canvas/70 px-4 py-3 backdrop-blur-md\">\n <div className=\"min-w-0\">\n <TruncatedText\n as=\"p\"\n showTitleOnHover\n className=\"truncate text-[11px] font-medium tracking-[0.16em] text-ds-2 uppercase transition-colors duration-200\"\n style={activeSegment ? { color: activeSegment.color } : undefined}\n >\n {summaryTitle}\n </TruncatedText>\n <p className=\"mt-1 text-xs text-ds-2\">{summaryMeta}</p>\n </div>\n <p\n className=\"text-right text-lg font-semibold leading-none text-ds-1 transition-colors duration-200\"\n style={activeSegment ? { color: activeSegment.color } : undefined}\n >\n {valueFormatter(summaryValue)}\n </p>\n </div>\n ) : null}\n\n <div className=\"relative\">\n {activeSegment && !showSummary && (\n <div\n className=\"pointer-events-none absolute -top-10 z-10 -translate-x-1/2 rounded-full px-2.5 py-1 text-[11px] font-medium text-ds-1\"\n style={{\n ...chartPillTooltipStyle,\n left: `${activeSegment.centerPercent}%`,\n }}\n >\n <span>{activeSegment.label}</span>\n <span className=\"mx-1 text-ds-2\">•</span>\n <span style={{ color: activeSegment.color }}>\n {activeSegment.value}\n </span>\n </div>\n )}\n\n <div className=\"rounded-full bg-ds-surface-2/80 p-0.5\">\n <div\n className=\"flex w-full gap-1\"\n onMouseLeave={() => setActiveSegmentKey(null)}\n >\n {segmentsWithMetrics.map((segment) => {\n const isActive = activeSegmentKey === segment.key;\n\n return (\n <div\n key={segment.key}\n className=\"relative flex h-2.5 min-w-0 items-center\"\n style={{ width: `${segment.widthPercent}%` }}\n onMouseEnter={() => setActiveSegmentKey(segment.key)}\n >\n <div\n className=\"h-full w-full rounded-full transition-[transform,filter,box-shadow,opacity] duration-200 ease-out\"\n style={{\n backgroundColor: segment.color,\n opacity: activeSegmentKey && !isActive ? 0.72 : 1,\n transform: isActive ? \"scaleY(1.3)\" : \"scaleY(1)\",\n filter: isActive\n ? \"saturate(1.1) brightness(1.05)\"\n : \"none\",\n boxShadow: isActive\n ? `inset 0 1px 1px rgba(255,255,255,0.28), 0 0 0 1px color-mix(in srgb, ${segment.color} 35%, transparent), 0 0 14px color-mix(in srgb, ${segment.color} 45%, transparent)`\n : `inset 0 1px 1px rgba(255,255,255,0.2), 0 0 8px color-mix(in srgb, ${segment.color} 30%, transparent)`,\n }}\n title={`${segment.label}: ${segment.value}`}\n />\n </div>\n );\n })}\n </div>\n </div>\n </div>\n\n {showLabels && (\n <div className=\"flex w-full items-start gap-1 px-0.5\">\n {segmentsWithMetrics.map((segment) => {\n const isActive = activeSegmentKey === segment.key;\n\n return (\n <div\n key={`label-${segment.key}`}\n className=\"flex min-w-0 justify-center\"\n style={{ width: `${segment.widthPercent}%` }}\n >\n <span\n className=\"whitespace-nowrap px-1 text-center text-[11px] font-medium tracking-wide text-ds-2 transition-colors duration-200\"\n style={isActive ? { color: segment.color } : undefined}\n >\n {segment.label}\n </span>\n </div>\n );\n })}\n </div>\n )}\n </div>\n );\n};\n","\"use client\";\n\nimport React from \"react\";\nimport {\n AreaChart as RechartsAreaChart,\n Area,\n XAxis,\n YAxis,\n CartesianGrid,\n Tooltip,\n ResponsiveContainer,\n} from \"recharts\";\n\nimport { normalizeChartColors } from \"./chartPalette\";\nimport {\n chartLineHoverCursorStyle,\n chartTooltipContentStyle,\n chartTooltipItemStyle,\n chartTooltipLabelStyle,\n chartTooltipWrapperStyle,\n getChartActiveDotStyle,\n} from \"./chartStyles\";\n\nexport interface AreaChartData {\n name: string;\n [key: string]: string | number;\n}\n\ninterface AreaChartProps {\n data: AreaChartData[];\n categories: { key: string; color: string }[];\n height?: number | string;\n className?: string;\n showGrid?: boolean;\n}\n\nexport const AreaChart: React.FC<AreaChartProps> = ({\n data,\n categories,\n height = 300,\n className = \"\",\n showGrid = true,\n}) => {\n const normalizedCategories = React.useMemo(() => {\n const normalizedColors = normalizeChartColors(\n categories.map((category) => category.color),\n );\n\n return categories.map((category, index) => ({\n ...category,\n color: normalizedColors[index] ?? category.color,\n }));\n }, [categories]);\n\n return (\n <div className={`w-full ${className}`} style={{ height }}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <RechartsAreaChart\n data={data}\n margin={{ top: 10, right: 30, left: 0, bottom: 0 }}\n >\n <defs>\n {normalizedCategories.map((cat) => (\n <linearGradient\n key={`gradient-${cat.key}`}\n id={`color-${cat.key}`}\n x1=\"0\"\n y1=\"0\"\n x2=\"0\"\n y2=\"1\"\n >\n <stop offset=\"5%\" stopColor={cat.color} stopOpacity={0.3} />\n <stop offset=\"95%\" stopColor={cat.color} stopOpacity={0} />\n </linearGradient>\n ))}\n </defs>\n\n {showGrid && (\n <CartesianGrid\n strokeDasharray=\"3 3\"\n vertical={false}\n stroke=\"var(--ds-color-border)\"\n opacity={0.5}\n />\n )}\n\n <XAxis\n dataKey=\"name\"\n axisLine={false}\n tickLine={false}\n tick={{ fill: \"var(--ds-color-fg-muted)\", fontSize: 12 }}\n dy={10}\n />\n\n <YAxis\n axisLine={false}\n tickLine={false}\n tick={{ fill: \"var(--ds-color-fg-muted)\", fontSize: 12 }}\n dx={-10}\n />\n\n <Tooltip\n contentStyle={chartTooltipContentStyle}\n cursor={chartLineHoverCursorStyle}\n itemStyle={chartTooltipItemStyle}\n labelStyle={chartTooltipLabelStyle}\n wrapperStyle={chartTooltipWrapperStyle}\n />\n\n {normalizedCategories.map((cat) => (\n <Area\n key={cat.key}\n activeDot={getChartActiveDotStyle(cat.color)}\n type=\"monotone\"\n dataKey={cat.key}\n stroke={cat.color}\n strokeWidth={2}\n fillOpacity={1}\n fill={`url(#color-${cat.key})`}\n />\n ))}\n </RechartsAreaChart>\n </ResponsiveContainer>\n </div>\n );\n};\n","\"use client\";\n\nimport React from \"react\";\nimport {\n BarChart as RechartsBarChart,\n Bar,\n XAxis,\n YAxis,\n CartesianGrid,\n Tooltip,\n ResponsiveContainer,\n} from \"recharts\";\n\nimport { normalizeChartColors } from \"./chartPalette\";\nimport {\n chartBandHoverCursorStyle,\n chartTooltipContentStyle,\n chartTooltipItemStyle,\n chartTooltipLabelStyle,\n chartTooltipWrapperStyle,\n} from \"./chartStyles\";\n\nexport interface BarChartData {\n name: string;\n [key: string]: string | number;\n}\n\ninterface BarChartProps {\n data: BarChartData[];\n categories: { key: string; color: string }[];\n height?: number | string;\n className?: string;\n layout?: \"horizontal\" | \"vertical\";\n maxBarSize?: number;\n /**\n * Compact mode — strips axes, grid, tooltip, and margins.\n * Designed for small sparkline-style zones (e.g. StatCard md, ~130×68 px).\n */\n compact?: boolean;\n}\n\nexport const BarChart: React.FC<BarChartProps> = ({\n data,\n categories,\n height = 300,\n className = \"\",\n layout = \"horizontal\",\n maxBarSize,\n compact = false,\n}) => {\n const resolvedMaxBarSize = maxBarSize ?? (compact ? 8 : layout === \"horizontal\" ? 40 : 22);\n\n const normalizedCategories = React.useMemo(() => {\n const normalizedColors = normalizeChartColors(\n categories.map((category) => category.color),\n );\n\n return categories.map((category, index) => ({\n ...category,\n color: normalizedColors[index] ?? category.color,\n }));\n }, [categories]);\n\n if (compact) {\n return (\n <div className={`w-full h-full ${className}`} style={{ height }}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <RechartsBarChart\n data={data}\n layout={layout}\n barCategoryGap=\"20%\"\n margin={{ top: 2, right: 2, left: 2, bottom: 2 }}\n >\n <Tooltip\n contentStyle={chartTooltipContentStyle}\n cursor={chartBandHoverCursorStyle}\n itemStyle={chartTooltipItemStyle}\n labelStyle={chartTooltipLabelStyle}\n wrapperStyle={chartTooltipWrapperStyle}\n />\n {normalizedCategories.map((cat) => (\n <Bar\n key={cat.key}\n dataKey={cat.key}\n fill={cat.color}\n maxBarSize={resolvedMaxBarSize}\n radius={[3, 3, 0, 0]}\n />\n ))}\n </RechartsBarChart>\n </ResponsiveContainer>\n </div>\n );\n }\n\n return (\n <div className={`w-full ${className}`} style={{ height }}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <RechartsBarChart\n data={data}\n layout={layout}\n barCategoryGap={data.length <= 4 ? \"28%\" : \"18%\"}\n margin={{ top: 20, right: 30, left: 20, bottom: 5 }}\n >\n <CartesianGrid\n strokeDasharray=\"3 3\"\n horizontal={layout === \"horizontal\"}\n vertical={layout === \"vertical\"}\n stroke=\"var(--ds-color-border)\"\n opacity={0.4}\n />\n\n {layout === \"horizontal\" ? (\n <>\n <XAxis\n dataKey=\"name\"\n axisLine={false}\n tickLine={false}\n tick={{ fill: \"var(--ds-color-fg-muted)\", fontSize: 12 }}\n dy={10}\n />\n <YAxis\n axisLine={false}\n tickLine={false}\n tick={{ fill: \"var(--ds-color-fg-muted)\", fontSize: 12 }}\n dx={-10}\n />\n </>\n ) : (\n <>\n <XAxis\n type=\"number\"\n axisLine={false}\n tickLine={false}\n tick={{ fill: \"var(--ds-color-fg-muted)\", fontSize: 12 }}\n dy={10}\n />\n <YAxis\n dataKey=\"name\"\n type=\"category\"\n axisLine={false}\n tickLine={false}\n tick={{ fill: \"var(--ds-color-fg-muted)\", fontSize: 12 }}\n dx={-10}\n />\n </>\n )}\n\n <Tooltip\n contentStyle={chartTooltipContentStyle}\n cursor={chartBandHoverCursorStyle}\n itemStyle={chartTooltipItemStyle}\n labelStyle={chartTooltipLabelStyle}\n wrapperStyle={chartTooltipWrapperStyle}\n />\n\n {normalizedCategories.map((cat) => (\n <Bar\n key={cat.key}\n dataKey={cat.key}\n fill={cat.color}\n maxBarSize={resolvedMaxBarSize}\n radius={layout === \"horizontal\" ? [4, 4, 0, 0] : [0, 4, 4, 0]}\n />\n ))}\n </RechartsBarChart>\n </ResponsiveContainer>\n </div>\n );\n};\n","\"use client\";\n\nimport React from \"react\";\nimport {\n Bar,\n BarChart as RechartsBarChart,\n CartesianGrid,\n Cell,\n Rectangle,\n ReferenceLine,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from \"recharts\";\n\nimport { getChartColorVar, normalizeChartColorValue } from \"./chartPalette\";\nimport {\n chartBandHoverCursorStyle,\n chartTooltipContentStyle,\n chartTooltipItemStyle,\n chartTooltipLabelStyle,\n chartTooltipWrapperStyle,\n} from \"./chartStyles\";\n\nexport interface PositiveNegativeBarChartData {\n name: string;\n value: number;\n}\n\ninterface PositiveNegativeBarChartProps {\n data: PositiveNegativeBarChartData[];\n height?: number | string;\n className?: string;\n layout?: \"horizontal\" | \"vertical\";\n positiveColor?: string;\n negativeColor?: string;\n neutralColor?: string;\n showGrid?: boolean;\n seriesLabel?: string;\n valueFormatter?: (value: number) => string;\n tickFormatter?: (value: number) => string;\n}\n\nconst defaultValueFormatter = (value: number): string =>\n new Intl.NumberFormat().format(value);\n\nconst getBarRadius = (\n value: number,\n layout: \"horizontal\" | \"vertical\",\n): [number, number, number, number] => {\n if (value === 0) {\n return [6, 6, 6, 6];\n }\n\n if (layout === \"horizontal\") {\n return [6, 6, 0, 0];\n }\n\n return value > 0 ? [0, 6, 6, 0] : [6, 0, 0, 6];\n};\n\nexport const PositiveNegativeBarChart: React.FC<\n PositiveNegativeBarChartProps\n> = ({\n data,\n height = 320,\n className = \"\",\n layout = \"horizontal\",\n positiveColor = getChartColorVar(3),\n negativeColor = getChartColorVar(5),\n neutralColor = getChartColorVar(15),\n showGrid = true,\n seriesLabel = \"Variance\",\n valueFormatter = defaultValueFormatter,\n tickFormatter,\n}) => {\n const resolvedPositiveColor = React.useMemo(\n () => normalizeChartColorValue(positiveColor) ?? getChartColorVar(3),\n [positiveColor],\n );\n const resolvedNegativeColor = React.useMemo(\n () => normalizeChartColorValue(negativeColor) ?? getChartColorVar(5),\n [negativeColor],\n );\n const resolvedNeutralColor = React.useMemo(\n () => normalizeChartColorValue(neutralColor) ?? getChartColorVar(15),\n [neutralColor],\n );\n\n const resolvedTickFormatter = React.useCallback(\n (value: number) => tickFormatter?.(value) ?? valueFormatter(value),\n [tickFormatter, valueFormatter],\n );\n\n const getBarFill = React.useCallback(\n (value: number) => {\n if (value > 0) {\n return resolvedPositiveColor;\n }\n\n if (value < 0) {\n return resolvedNegativeColor;\n }\n\n return resolvedNeutralColor;\n },\n [resolvedNegativeColor, resolvedNeutralColor, resolvedPositiveColor],\n );\n\n return (\n <div className={`w-full ${className}`} style={{ height }}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <RechartsBarChart\n data={data}\n layout={layout}\n margin={{ top: 20, right: 30, left: 20, bottom: 5 }}\n >\n {showGrid ? (\n <CartesianGrid\n strokeDasharray=\"3 3\"\n horizontal={layout === \"horizontal\"}\n vertical={layout === \"vertical\"}\n stroke=\"var(--ds-color-border)\"\n opacity={0.35}\n />\n ) : null}\n\n {layout === \"horizontal\" ? (\n <>\n <XAxis\n dataKey=\"name\"\n axisLine={false}\n tickLine={false}\n tick={{ fill: \"var(--ds-color-fg-muted)\", fontSize: 12 }}\n dy={10}\n />\n <YAxis\n axisLine={false}\n tickLine={false}\n tick={{ fill: \"var(--ds-color-fg-muted)\", fontSize: 12 }}\n tickFormatter={resolvedTickFormatter}\n dx={-10}\n />\n <ReferenceLine\n y={0}\n stroke=\"var(--ds-color-border-strong)\"\n strokeOpacity={0.95}\n />\n </>\n ) : (\n <>\n <XAxis\n type=\"number\"\n axisLine={false}\n tickLine={false}\n tick={{ fill: \"var(--ds-color-fg-muted)\", fontSize: 12 }}\n tickFormatter={resolvedTickFormatter}\n dy={10}\n />\n <YAxis\n dataKey=\"name\"\n type=\"category\"\n axisLine={false}\n tickLine={false}\n tick={{ fill: \"var(--ds-color-fg-muted)\", fontSize: 12 }}\n width={96}\n dx={-6}\n />\n <ReferenceLine\n x={0}\n stroke=\"var(--ds-color-border-strong)\"\n strokeOpacity={0.95}\n />\n </>\n )}\n\n <Tooltip\n contentStyle={chartTooltipContentStyle}\n cursor={chartBandHoverCursorStyle}\n itemStyle={chartTooltipItemStyle}\n labelStyle={chartTooltipLabelStyle}\n wrapperStyle={chartTooltipWrapperStyle}\n formatter={(value) => [\n valueFormatter(Number(value ?? 0)),\n seriesLabel,\n ]}\n />\n\n <Bar\n dataKey=\"value\"\n radius={6}\n barSize={layout === \"horizontal\" ? 30 : 22}\n shape={(props) => {\n const barValue = Array.isArray(props.value)\n ? props.value[1] - props.value[0]\n : props.value;\n\n return (\n <Rectangle {...props} radius={getBarRadius(barValue, layout)} />\n );\n }}\n >\n {data.map((entry) => (\n <Cell\n key={`${entry.name}-${entry.value}`}\n fill={getBarFill(entry.value)}\n />\n ))}\n </Bar>\n </RechartsBarChart>\n </ResponsiveContainer>\n </div>\n );\n};\n","\"use client\";\n\nimport React from \"react\";\nimport {\n PieChart as RechartsPieChart,\n Pie,\n Cell,\n Tooltip,\n Legend,\n ResponsiveContainer,\n} from \"recharts\";\n\nimport { normalizeChartColors } from \"./chartPalette\";\nimport {\n chartLegendTextStyle,\n chartTooltipContentStyle,\n chartTooltipItemStyle,\n chartTooltipLabelStyle,\n chartTooltipWrapperStyle,\n} from \"./chartStyles\";\n\nexport interface PieChartData {\n name: string;\n value: number;\n}\n\nexport interface PieChartCenterContentContext {\n activeColor?: string;\n activeIndex: number | null;\n activeSlice: PieChartData | null;\n data: PieChartData[];\n displayLabel: string;\n displayPercentageLabel: string;\n displayValue: number;\n normalizedColors: string[];\n totalValue: number;\n valueFormatter: (value: number) => string;\n variant: \"pie\" | \"donut\";\n}\n\nexport interface PieChartProps {\n data: PieChartData[];\n colors: string[];\n height?: number | string;\n className?: string;\n variant?: \"pie\" | \"donut\";\n showCenterSummary?: boolean;\n centerLabel?: string;\n valueFormatter?: (value: number) => string;\n renderCenterContent?: (\n context: PieChartCenterContentContext,\n ) => React.ReactNode;\n}\n\nconst defaultValueFormatter = (value: number): string =>\n new Intl.NumberFormat().format(value);\n\nexport const PieChart: React.FC<PieChartProps> = ({\n data,\n colors,\n height = 300,\n className = \"\",\n variant = \"donut\",\n showCenterSummary = variant === \"donut\",\n centerLabel = \"Total\",\n valueFormatter = defaultValueFormatter,\n renderCenterContent,\n}) => {\n const [activeIndex, setActiveIndex] = React.useState<number | null>(null);\n const innerRadius = variant === \"donut\" ? \"60%\" : 0;\n const normalizedColors = React.useMemo(\n () => normalizeChartColors(colors),\n [colors],\n );\n const totalValue = React.useMemo(\n () => data.reduce((sum, item) => sum + item.value, 0),\n [data],\n );\n const activeSlice =\n activeIndex !== null && activeIndex >= 0 && activeIndex < data.length\n ? data[activeIndex]\n : null;\n const activePercentage =\n activeSlice && totalValue > 0\n ? `${Math.round((activeSlice.value / totalValue) * 100)}% of total`\n : `${data.length} categories`;\n const displayLabel = activeSlice?.name ?? centerLabel;\n const displayValue = activeSlice?.value ?? totalValue;\n const activeColor =\n activeIndex !== null\n ? normalizedColors[activeIndex % normalizedColors.length]\n : undefined;\n const centerContentContext: PieChartCenterContentContext = {\n activeColor,\n activeIndex,\n activeSlice,\n data,\n displayLabel,\n displayPercentageLabel: activePercentage,\n displayValue,\n normalizedColors,\n totalValue,\n valueFormatter,\n variant,\n };\n const shouldRenderCenterContent =\n variant === \"donut\" && (showCenterSummary || Boolean(renderCenterContent));\n\n return (\n <div className={`relative w-full ${className}`} style={{ height }}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <RechartsPieChart>\n <Pie\n data={data}\n cx=\"50%\"\n cy=\"50%\"\n innerRadius={innerRadius}\n outerRadius=\"80%\"\n paddingAngle={variant === \"donut\" ? 2 : 0}\n dataKey=\"value\"\n stroke=\"none\"\n onMouseEnter={(_data: unknown, index: number) =>\n setActiveIndex(index)\n }\n onMouseLeave={() => setActiveIndex(null)}\n >\n {data.map((entry, index) => (\n <Cell\n key={`cell-${index}`}\n fill={normalizedColors[index % normalizedColors.length]}\n />\n ))}\n </Pie>\n\n <Tooltip\n contentStyle={chartTooltipContentStyle}\n itemStyle={chartTooltipItemStyle}\n labelStyle={chartTooltipLabelStyle}\n wrapperStyle={chartTooltipWrapperStyle}\n />\n\n <Legend iconType=\"circle\" wrapperStyle={chartLegendTextStyle} />\n </RechartsPieChart>\n </ResponsiveContainer>\n\n {shouldRenderCenterContent ? (\n <div className=\"pointer-events-none absolute inset-0 flex items-center justify-center\">\n {renderCenterContent ? (\n renderCenterContent(centerContentContext)\n ) : (\n <div className=\"flex max-w-[42%] flex-col items-center text-center\">\n <p className=\"text-[11px] font-medium tracking-[0.16em] text-ds-2 uppercase\">\n {displayLabel}\n </p>\n <p className=\"mt-1 text-2xl font-semibold leading-none text-ds-1 sm:text-3xl\">\n {valueFormatter(displayValue)}\n </p>\n <p className=\"mt-2 text-xs leading-tight text-ds-2\">\n {activePercentage}\n </p>\n </div>\n )}\n </div>\n ) : null}\n </div>\n );\n};\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkbox-
|
|
1
|
+
{"version":3,"file":"checkbox-D7EJQbqC.mjs","names":[],"sources":["../../src/components/forms/checkbox/Checkbox.tsx"],"sourcesContent":["import type { CheckboxProps } from \"./types\";\nimport { forwardRef, useId } from \"react\";\n\nconst sanitizeId = (value: string) => value.replace(/[^a-zA-Z0-9_-]/g, \"-\");\n\nconst colorClasses: Record<NonNullable<CheckboxProps[\"color\"]>, string> = {\n red: \"checked:bg-ds-state-danger\",\n blue: \"checked:bg-ds-state-info\",\n green: \"checked:bg-ds-state-success\",\n yellow: \"checked:bg-ds-state-warning\",\n teal: \"checked:bg-ds-brand-teal\",\n primary: \"checked:bg-ds-accent\",\n};\n\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(\n (\n {\n className = \"\",\n label,\n error,\n id,\n extra = \"\",\n color = \"primary\",\n ...props\n },\n ref,\n ) => {\n const generatedId = useId();\n const checkboxId = id || `checkbox-${sanitizeId(generatedId)}`;\n\n // Custom CheckIcon SVG (stroke-based design)\n const checkmarkIcon = `url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='M5 13l4 4L19 7'/%3e%3c/svg%3e\")`;\n\n // Check if color is a predefined color name or a custom value\n const isPredefinedColor = color in colorClasses;\n const customColorStyle = !isPredefinedColor ? color : undefined;\n\n return (\n <>\n <style>{`\n .checkbox-custom-${checkboxId}:checked {\n background-image: ${checkmarkIcon};\n background-size: 70%;\n background-position: center;\n background-repeat: no-repeat;\n ${customColorStyle ? `background-color: ${customColorStyle} !important;` : \"\"}\n }\n `}</style>\n <div className=\"flex items-center gap-2\">\n <input\n ref={ref}\n type=\"checkbox\"\n id={checkboxId}\n className={`checkbox-custom-${checkboxId} peer relative flex h-5 min-h-[20px] w-5 min-w-[20px] appearance-none items-center justify-center rounded-md border border-ds-border-field transition duration-200 outline-none checked:border-none checked:text-ds-on-accent hover:cursor-pointer ${\n isPredefinedColor\n ? colorClasses[color as keyof typeof colorClasses]\n : \"\"\n } ${error ? \"border-ds-state-error-border\" : \"\"} ${extra} ${className}`}\n {...props}\n />\n {label && (\n <label\n htmlFor={checkboxId}\n className=\"text-sm font-medium leading-none text-ds-1 peer-disabled:cursor-not-allowed peer-disabled:opacity-70 cursor-pointer\"\n >\n {label}\n </label>\n )}\n {error && (\n <p className=\"mt-1 text-sm font-medium text-ds-state-error-text\">\n {error}\n </p>\n )}\n </div>\n </>\n );\n },\n);\n\nCheckbox.displayName = \"Checkbox\";\n"],"mappings":";;;AAGA,IAAM,cAAc,UAAkB,MAAM,QAAQ,mBAAmB,GAAG;AAE1E,IAAM,eAAoE;CACxE,KAAK;CACL,MAAM;CACN,OAAO;CACP,QAAQ;CACR,MAAM;CACN,SAAS;AACX;AAEA,IAAa,WAAW,YAEpB,EACE,YAAY,IACZ,OACA,OACA,IACA,QAAQ,IACR,QAAQ,WACR,GAAG,SAEL,QACG;CACH,MAAM,cAAc,MAAM;CAC1B,MAAM,aAAa,MAAM,YAAY,WAAW,WAAW;CAG3D,MAAM,gBAAgB;CAGtB,MAAM,oBAAoB,SAAS;CACnC,MAAM,mBAAmB,CAAC,oBAAoB,QAAQ,KAAA;CAEtD,OACE,qBAAA,YAAA,EAAA,UAAA,CACE,oBAAC,SAAD,EAAA,UAAQ;6BACa,WAAW;gCACR,cAAc;;;;cAIhC,mBAAmB,qBAAqB,iBAAiB,gBAAgB,GAAG;;UAEzE,CAAA,GACT,qBAAC,OAAD;EAAK,WAAU;YAAf;GACE,oBAAC,SAAD;IACO;IACL,MAAK;IACL,IAAI;IACJ,WAAW,mBAAmB,WAAW,qPACvC,oBACI,aAAa,SACb,GACL,GAAG,QAAQ,iCAAiC,GAAG,GAAG,MAAM,GAAG;IAC5D,GAAI;GACL,CAAA;GACA,SACC,oBAAC,SAAD;IACE,SAAS;IACT,WAAU;cAET;GACI,CAAA;GAER,SACC,oBAAC,KAAD;IAAG,WAAU;cACV;GACA,CAAA;EAEF;GACL,EAAA,CAAA;AAEN,CACF;AAEA,SAAS,cAAc"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
require("./chunk-B_GkZjkl.cjs");
|
|
2
1
|
let react = require("react");
|
|
3
2
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
4
3
|
//#region src/components/forms/checkbox/Checkbox.tsx
|
|
@@ -56,4 +55,4 @@ Object.defineProperty(exports, "Checkbox", {
|
|
|
56
55
|
}
|
|
57
56
|
});
|
|
58
57
|
|
|
59
|
-
//# sourceMappingURL=checkbox-
|
|
58
|
+
//# sourceMappingURL=checkbox-Lw2UqyNE.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkbox-
|
|
1
|
+
{"version":3,"file":"checkbox-Lw2UqyNE.cjs","names":[],"sources":["../../src/components/forms/checkbox/Checkbox.tsx"],"sourcesContent":["import type { CheckboxProps } from \"./types\";\nimport { forwardRef, useId } from \"react\";\n\nconst sanitizeId = (value: string) => value.replace(/[^a-zA-Z0-9_-]/g, \"-\");\n\nconst colorClasses: Record<NonNullable<CheckboxProps[\"color\"]>, string> = {\n red: \"checked:bg-ds-state-danger\",\n blue: \"checked:bg-ds-state-info\",\n green: \"checked:bg-ds-state-success\",\n yellow: \"checked:bg-ds-state-warning\",\n teal: \"checked:bg-ds-brand-teal\",\n primary: \"checked:bg-ds-accent\",\n};\n\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(\n (\n {\n className = \"\",\n label,\n error,\n id,\n extra = \"\",\n color = \"primary\",\n ...props\n },\n ref,\n ) => {\n const generatedId = useId();\n const checkboxId = id || `checkbox-${sanitizeId(generatedId)}`;\n\n // Custom CheckIcon SVG (stroke-based design)\n const checkmarkIcon = `url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='M5 13l4 4L19 7'/%3e%3c/svg%3e\")`;\n\n // Check if color is a predefined color name or a custom value\n const isPredefinedColor = color in colorClasses;\n const customColorStyle = !isPredefinedColor ? color : undefined;\n\n return (\n <>\n <style>{`\n .checkbox-custom-${checkboxId}:checked {\n background-image: ${checkmarkIcon};\n background-size: 70%;\n background-position: center;\n background-repeat: no-repeat;\n ${customColorStyle ? `background-color: ${customColorStyle} !important;` : \"\"}\n }\n `}</style>\n <div className=\"flex items-center gap-2\">\n <input\n ref={ref}\n type=\"checkbox\"\n id={checkboxId}\n className={`checkbox-custom-${checkboxId} peer relative flex h-5 min-h-[20px] w-5 min-w-[20px] appearance-none items-center justify-center rounded-md border border-ds-border-field transition duration-200 outline-none checked:border-none checked:text-ds-on-accent hover:cursor-pointer ${\n isPredefinedColor\n ? colorClasses[color as keyof typeof colorClasses]\n : \"\"\n } ${error ? \"border-ds-state-error-border\" : \"\"} ${extra} ${className}`}\n {...props}\n />\n {label && (\n <label\n htmlFor={checkboxId}\n className=\"text-sm font-medium leading-none text-ds-1 peer-disabled:cursor-not-allowed peer-disabled:opacity-70 cursor-pointer\"\n >\n {label}\n </label>\n )}\n {error && (\n <p className=\"mt-1 text-sm font-medium text-ds-state-error-text\">\n {error}\n </p>\n )}\n </div>\n </>\n );\n },\n);\n\nCheckbox.displayName = \"Checkbox\";\n"],"mappings":";;;AAGA,IAAM,cAAc,UAAkB,MAAM,QAAQ,mBAAmB,GAAG;AAE1E,IAAM,eAAoE;CACxE,KAAK;CACL,MAAM;CACN,OAAO;CACP,QAAQ;CACR,MAAM;CACN,SAAS;AACX;AAEA,IAAa,YAAA,GAAA,MAAA,aAET,EACE,YAAY,IACZ,OACA,OACA,IACA,QAAQ,IACR,QAAQ,WACR,GAAG,SAEL,QACG;CACH,MAAM,eAAA,GAAA,MAAA,OAAoB;CAC1B,MAAM,aAAa,MAAM,YAAY,WAAW,WAAW;CAG3D,MAAM,gBAAgB;CAGtB,MAAM,oBAAoB,SAAS;CACnC,MAAM,mBAAmB,CAAC,oBAAoB,QAAQ,KAAA;CAEtD,OACE,iBAAA,GAAA,kBAAA,MAAA,kBAAA,UAAA,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAC,SAAD,EAAA,UAAQ;6BACa,WAAW;gCACR,cAAc;;;;cAIhC,mBAAmB,qBAAqB,iBAAiB,gBAAgB,GAAG;;UAEzE,CAAA,GACT,iBAAA,GAAA,kBAAA,MAAC,OAAD;EAAK,WAAU;YAAf;GACE,iBAAA,GAAA,kBAAA,KAAC,SAAD;IACO;IACL,MAAK;IACL,IAAI;IACJ,WAAW,mBAAmB,WAAW,qPACvC,oBACI,aAAa,SACb,GACL,GAAG,QAAQ,iCAAiC,GAAG,GAAG,MAAM,GAAG;IAC5D,GAAI;GACL,CAAA;GACA,SACC,iBAAA,GAAA,kBAAA,KAAC,SAAD;IACE,SAAS;IACT,WAAU;cAET;GACI,CAAA;GAER,SACC,iBAAA,GAAA,kBAAA,KAAC,KAAD;IAAG,WAAU;cACV;GACA,CAAA;EAEF;GACL,EAAA,CAAA;AAEN,CACF;AAEA,SAAS,cAAc"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
require("./
|
|
2
|
-
const
|
|
3
|
-
const
|
|
4
|
-
const require_icons = require("./icons-CRanVZB1.cjs");
|
|
1
|
+
const require_utils = require("./utils-CoA0q63n.cjs");
|
|
2
|
+
const require_truncated_text = require("./truncated-text-D0t4atw5.cjs");
|
|
3
|
+
const require_icons = require("./icons-Ci8yEvvF.cjs");
|
|
5
4
|
let react = require("react");
|
|
6
5
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
7
6
|
//#region src/components/data-display/chip/Chip.tsx
|
|
@@ -203,4 +202,4 @@ Object.defineProperty(exports, "StatusDotChip", {
|
|
|
203
202
|
}
|
|
204
203
|
});
|
|
205
204
|
|
|
206
|
-
//# sourceMappingURL=chip-
|
|
205
|
+
//# sourceMappingURL=chip-D5i9VT9O.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chip-B0YzBwkz.cjs","names":[],"sources":["../../src/components/data-display/chip/Chip.tsx","../../src/components/data-display/chip/SpecialChip.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\n\nimport { CloseIcon } from \"../../icons\";\nimport { TruncatedText } from \"../../typography/truncated-text\";\n\nexport type ChipVariant = \"filled\" | \"outlined\" | \"soft\" | \"glass\";\nexport type ChipColor =\n | \"default\"\n | \"primary\"\n | \"secondary\"\n | \"success\"\n | \"warning\"\n | \"error\"\n | \"info\";\nexport type ChipSize = \"xs\" |\"sm\" | \"md\" | \"lg\";\n\nexport interface ChipProps {\n /** The content of the chip */\n children: React.ReactNode;\n /** The variant style of the chip */\n variant?: ChipVariant;\n /** The color scheme of the chip */\n color?: ChipColor;\n /** The size of the chip */\n size?: ChipSize;\n /** Icon or element to display at the start */\n startIcon?: React.ReactNode;\n /** Icon or element to display at the end */\n endIcon?: React.ReactNode;\n /** Makes the chip removable with an X button */\n onRemove?: () => void;\n /** Makes the chip clickable */\n onClick?: () => void;\n /** Whether the chip is disabled */\n disabled?: boolean;\n /** Custom className */\n className?: string;\n /** Whether the chip should have a dot indicator */\n dot?: boolean;\n /** Dot color (uses chip color by default) */\n dotColor?: string;\n /** Maximum width for the chip - text will truncate with ellipsis if exceeded */\n maxWidth?: number | string;\n}\n\nconst sizeStyles: Record<ChipSize, string> = {\n xs: \"px-1.5 py-0.5 text-xs gap-1\",\n sm: \"px-2.5 py-1 text-xs gap-1.5\",\n md: \"px-3 py-1.5 text-sm gap-2\",\n lg: \"px-4 py-2 text-base gap-2.5\",\n};\n\nconst dotSizeStyles: Record<ChipSize, string> = {\n xs: \"w-1 h-1\",\n sm: \"w-1.5 h-1.5\",\n md: \"w-2 h-2\",\n lg: \"w-2.5 h-2.5\",\n};\n\nconst iconSizeStyles: Record<ChipSize, string> = {\n xs: \"w-2 h-2\",\n sm: \"w-3.5 h-3.5\",\n md: \"w-4 h-4\",\n lg: \"w-5 h-5\",\n};\n\nconst colorStyles: Record<ChipVariant, Record<ChipColor, string>> = {\n filled: {\n default: \"bg-ds-surface-2 text-ds-1 shadow-sm border border-ds-border-2\",\n primary:\n \"bg-ds-accent text-ds-on-accent shadow-md shadow-ds-accent/25 border border-ds-border-accent\",\n secondary:\n \"bg-ds-accent-subtle text-ds-1 shadow-sm border border-ds-border-accent\",\n success:\n \"bg-ds-state-success-surface text-ds-state-success-text shadow-sm border border-ds-state-success-border\",\n warning:\n \"bg-ds-state-warning-surface text-ds-state-warning-text shadow-sm border border-ds-state-warning-border\",\n error:\n \"bg-ds-state-error-surface text-ds-state-error-text shadow-sm border border-ds-state-error-border\",\n info: \"bg-ds-state-info-surface text-ds-state-info-text shadow-sm border border-ds-state-info-border\",\n },\n outlined: {\n default:\n \"border-2 border-ds-border-3 text-ds-2 bg-transparent hover:bg-ds-surface-2\",\n primary:\n \"border-2 border-ds-border-accent bg-transparent text-ds-accent hover:bg-ds-accent-subtle\",\n secondary:\n \"border-2 border-ds-border-3 text-ds-1 bg-transparent hover:bg-ds-surface-2\",\n success:\n \"border-2 border-ds-state-success-border text-ds-state-success-text bg-transparent hover:bg-ds-state-success-surface\",\n warning:\n \"border-2 border-ds-state-warning-border text-ds-state-warning-text bg-transparent hover:bg-ds-state-warning-surface\",\n error:\n \"border-2 border-ds-state-error-border text-ds-state-error-text bg-transparent hover:bg-ds-state-error-surface\",\n info: \"border-2 border-ds-state-info-border text-ds-state-info-text bg-transparent hover:bg-ds-state-info-surface\",\n },\n soft: {\n default:\n \"bg-ds-surface-2 text-ds-1 backdrop-blur-sm border border-ds-border-2\",\n primary:\n \"border border-ds-border-accent/20 bg-ds-accent-subtle text-ds-1 backdrop-blur-sm\",\n secondary:\n \"bg-ds-surface-3/30 text-ds-1 backdrop-blur-sm border border-ds-border-3/50\",\n success:\n \"bg-ds-state-success-surface text-ds-state-success-text backdrop-blur-sm border border-ds-state-success-border/70\",\n warning:\n \"bg-ds-state-warning-surface text-ds-state-warning-text backdrop-blur-sm border border-ds-state-warning-border/70\",\n error:\n \"bg-ds-state-error-surface text-ds-state-error-text backdrop-blur-sm border border-ds-state-error-border/70\",\n info: \"bg-ds-state-info-surface text-ds-state-info-text backdrop-blur-sm border border-ds-state-info-border/70\",\n },\n glass: {\n default:\n \"bg-ds-surface-1/70 text-ds-1 backdrop-blur-xl border border-ds-border-2/40 shadow-lg\",\n primary:\n \"border border-ds-border-accent/20 bg-ds-accent/15 text-ds-1 backdrop-blur-xl shadow-lg shadow-ds-accent/10\",\n secondary:\n \"bg-ds-surface-3/45 text-ds-1 backdrop-blur-xl border border-ds-border-3/50 shadow-lg\",\n success:\n \"bg-ds-state-success-surface/65 text-ds-state-success-text backdrop-blur-xl border border-ds-state-success-border/60 shadow-lg\",\n warning:\n \"bg-ds-state-warning-surface/65 text-ds-state-warning-text backdrop-blur-xl border border-ds-state-warning-border/60 shadow-lg\",\n error:\n \"bg-ds-state-error-surface/65 text-ds-state-error-text backdrop-blur-xl border border-ds-state-error-border/60 shadow-lg\",\n info: \"bg-ds-state-info-surface/65 text-ds-state-info-text backdrop-blur-xl border border-ds-state-info-border/60 shadow-lg\",\n },\n};\n\nconst dotColorStyles: Record<ChipColor, string> = {\n default: \"bg-ds-3\",\n primary: \"bg-ds-accent\",\n secondary: \"bg-ds-border-3\",\n success: \"bg-ds-state-success\",\n warning: \"bg-ds-state-warning\",\n error: \"bg-ds-state-danger\",\n info: \"bg-ds-state-info\",\n};\n\nconst Chip = forwardRef<HTMLSpanElement, ChipProps>(\n (\n {\n children,\n variant = \"soft\",\n color = \"default\",\n size = \"xs\",\n startIcon,\n endIcon,\n onRemove,\n onClick,\n disabled = false,\n className = \"\",\n dot = false,\n dotColor,\n maxWidth,\n },\n ref,\n ) => {\n const isClickable = onClick !== undefined;\n const isRemovable = onRemove !== undefined;\n\n const baseStyles = `\n inline-flex items-center font-medium rounded-md transition-all duration-200\n ${sizeStyles[size]}\n ${colorStyles[variant][color]}\n ${\n isClickable && !disabled\n ? \"cursor-pointer hover:scale-105 hover:shadow-lg active:scale-95\"\n : \"\"\n }\n ${disabled ? \"opacity-50 cursor-not-allowed grayscale\" : \"\"}\n ${maxWidth ? \"max-w-full\" : \"\"}\n ${className}\n `;\n\n const handleClick = () => {\n if (!disabled && onClick) {\n onClick();\n }\n };\n\n const handleRemove = (e: React.MouseEvent) => {\n e.stopPropagation();\n if (!disabled && onRemove) {\n onRemove();\n }\n };\n\n return (\n <span\n ref={ref}\n className={baseStyles}\n onClick={handleClick}\n role={isClickable ? \"button\" : undefined}\n tabIndex={isClickable && !disabled ? 0 : undefined}\n style={\n maxWidth\n ? {\n maxWidth:\n typeof maxWidth === \"number\" ? `${maxWidth}px` : maxWidth,\n }\n : undefined\n }\n onKeyDown={(e) => {\n if (\n isClickable &&\n !disabled &&\n (e.key === \"Enter\" || e.key === \" \")\n ) {\n e.preventDefault();\n onClick?.();\n }\n }}\n >\n {dot && (\n <span\n className={`rounded-full shrink-0 animate-pulse ${\n dotSizeStyles[size]\n } ${dotColor ? \"\" : dotColorStyles[color]}`}\n style={dotColor ? { backgroundColor: dotColor } : undefined}\n />\n )}\n {startIcon && (\n <span className={`inline-flex shrink-0 items-center justify-center ${iconSizeStyles[size]}`}>\n {startIcon}\n </span>\n )}\n <TruncatedText\n as=\"span\"\n showTitleOnHover\n className=\"max-w-full font-semibold\"\n >\n {children}\n </TruncatedText>\n {endIcon && !isRemovable && (\n <span className={`inline-flex shrink-0 items-center justify-center ${iconSizeStyles[size]}`}>{endIcon}</span>\n )}\n {isRemovable && (\n <button\n type=\"button\"\n onClick={handleRemove}\n disabled={disabled}\n className={`\n shrink-0 rounded-full p-0.5 ml-1 transition-all duration-200\n hover:bg-ds-surface-3/35 hover:scale-110\n focus:outline-none focus:ring-2 focus:ring-current focus:ring-offset-1\n ${disabled ? \"cursor-not-allowed\" : \"cursor-pointer\"}\n `}\n aria-label=\"Remove\"\n >\n <CloseIcon className={iconSizeStyles[size]} aria-hidden=\"true\" />\n </button>\n )}\n </span>\n );\n },\n);\n\nChip.displayName = \"Chip\";\n\nexport default Chip;\nexport { Chip };\n","import type { ReactNode } from \"react\";\n\nimport { TruncatedText } from \"../../typography/truncated-text\";\nimport { mergeClassNames } from \"../../../utils\";\n\nexport type SplitChipDirection = \"auto\" | \"ltr\" | \"rtl\";\n\nexport interface SplitChipProps {\n leftLabel: ReactNode;\n rightLabel: ReactNode;\n dir?: SplitChipDirection;\n rightLabelDir?: SplitChipDirection;\n truncateRight?: boolean;\n rightMaxWidth?: string | number;\n showRightTitleOnHover?: boolean;\n className?: string;\n leftClassName?: string;\n rightClassName?: string;\n}\n\nexport function SplitChip({\n leftLabel,\n rightLabel,\n dir = \"auto\",\n rightLabelDir = \"ltr\",\n truncateRight = false,\n rightMaxWidth = \"10rem\",\n showRightTitleOnHover = true,\n className,\n leftClassName,\n rightClassName,\n}: SplitChipProps) {\n const isRtl = dir === \"rtl\";\n\n return (\n <span\n dir={dir}\n className={mergeClassNames(\n \"inline-flex items-center overflow-hidden rounded-md border border-ds-border-2 bg-ds-surface-2\",\n className,\n )}\n >\n <span\n className={mergeClassNames(\n \"bg-ds-surface-3 px-2 py-1 text-xs font-medium uppercase tracking-[0.05em] text-ds-2\",\n isRtl ? \"border-l border-ds-border-2\" : \"border-r border-ds-border-2\",\n leftClassName,\n )}\n >\n {leftLabel}\n </span>\n <span\n dir={rightLabelDir}\n className={mergeClassNames(\n \"min-w-0 px-2 py-1 text-xs font-medium text-ds-1\",\n rightClassName,\n )}\n >\n {truncateRight ? (\n <TruncatedText\n maxWidth={rightMaxWidth}\n showTitleOnHover={showRightTitleOnHover}\n >\n {rightLabel}\n </TruncatedText>\n ) : (\n rightLabel\n )}\n </span>\n </span>\n );\n}\n\nexport type StatusDotChipTone = \"success\" | \"warning\" | \"danger\" | \"info\";\n\nexport interface StatusDotChipProps {\n label: string;\n tone?: StatusDotChipTone;\n className?: string;\n}\n\nconst toneClasses: Record<StatusDotChipTone, string> = {\n success:\n \"bg-ds-state-success-surface text-ds-state-success-text border-ds-state-success-border\",\n warning:\n \"bg-ds-state-warning-surface text-ds-state-warning-text border-ds-state-warning-border\",\n danger:\n \"bg-ds-state-error-surface text-ds-state-error-text border-ds-state-error-border\",\n info: \"bg-ds-state-info-surface text-ds-state-info-text border-ds-state-info-border\",\n};\n\nconst dotToneClasses: Record<StatusDotChipTone, string> = {\n success: \"bg-ds-state-success\",\n warning: \"bg-ds-state-warning\",\n danger: \"bg-ds-state-danger\",\n info: \"bg-ds-state-info\",\n};\n\nexport function StatusDotChip({\n label,\n tone = \"info\",\n className,\n}: StatusDotChipProps) {\n return (\n <span\n className={mergeClassNames(\n \"inline-flex items-center gap-2 rounded-md border px-3 py-1 text-sm font-medium\",\n toneClasses[tone],\n className,\n )}\n >\n <span\n aria-hidden=\"true\"\n className={mergeClassNames(\n \"h-2.5 w-2.5 rounded-full\",\n dotToneClasses[tone],\n )}\n />\n <span>{label}</span>\n </span>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"chip-D5i9VT9O.cjs","names":[],"sources":["../../src/components/data-display/chip/Chip.tsx","../../src/components/data-display/chip/SpecialChip.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\n\nimport { CloseIcon } from \"../../icons\";\nimport { TruncatedText } from \"../../typography/truncated-text\";\n\nexport type ChipVariant = \"filled\" | \"outlined\" | \"soft\" | \"glass\";\nexport type ChipColor =\n | \"default\"\n | \"primary\"\n | \"secondary\"\n | \"success\"\n | \"warning\"\n | \"error\"\n | \"info\";\nexport type ChipSize = \"xs\" |\"sm\" | \"md\" | \"lg\";\n\nexport interface ChipProps {\n /** The content of the chip */\n children: React.ReactNode;\n /** The variant style of the chip */\n variant?: ChipVariant;\n /** The color scheme of the chip */\n color?: ChipColor;\n /** The size of the chip */\n size?: ChipSize;\n /** Icon or element to display at the start */\n startIcon?: React.ReactNode;\n /** Icon or element to display at the end */\n endIcon?: React.ReactNode;\n /** Makes the chip removable with an X button */\n onRemove?: () => void;\n /** Makes the chip clickable */\n onClick?: () => void;\n /** Whether the chip is disabled */\n disabled?: boolean;\n /** Custom className */\n className?: string;\n /** Whether the chip should have a dot indicator */\n dot?: boolean;\n /** Dot color (uses chip color by default) */\n dotColor?: string;\n /** Maximum width for the chip - text will truncate with ellipsis if exceeded */\n maxWidth?: number | string;\n}\n\nconst sizeStyles: Record<ChipSize, string> = {\n xs: \"px-1.5 py-0.5 text-xs gap-1\",\n sm: \"px-2.5 py-1 text-xs gap-1.5\",\n md: \"px-3 py-1.5 text-sm gap-2\",\n lg: \"px-4 py-2 text-base gap-2.5\",\n};\n\nconst dotSizeStyles: Record<ChipSize, string> = {\n xs: \"w-1 h-1\",\n sm: \"w-1.5 h-1.5\",\n md: \"w-2 h-2\",\n lg: \"w-2.5 h-2.5\",\n};\n\nconst iconSizeStyles: Record<ChipSize, string> = {\n xs: \"w-2 h-2\",\n sm: \"w-3.5 h-3.5\",\n md: \"w-4 h-4\",\n lg: \"w-5 h-5\",\n};\n\nconst colorStyles: Record<ChipVariant, Record<ChipColor, string>> = {\n filled: {\n default: \"bg-ds-surface-2 text-ds-1 shadow-sm border border-ds-border-2\",\n primary:\n \"bg-ds-accent text-ds-on-accent shadow-md shadow-ds-accent/25 border border-ds-border-accent\",\n secondary:\n \"bg-ds-accent-subtle text-ds-1 shadow-sm border border-ds-border-accent\",\n success:\n \"bg-ds-state-success-surface text-ds-state-success-text shadow-sm border border-ds-state-success-border\",\n warning:\n \"bg-ds-state-warning-surface text-ds-state-warning-text shadow-sm border border-ds-state-warning-border\",\n error:\n \"bg-ds-state-error-surface text-ds-state-error-text shadow-sm border border-ds-state-error-border\",\n info: \"bg-ds-state-info-surface text-ds-state-info-text shadow-sm border border-ds-state-info-border\",\n },\n outlined: {\n default:\n \"border-2 border-ds-border-3 text-ds-2 bg-transparent hover:bg-ds-surface-2\",\n primary:\n \"border-2 border-ds-border-accent bg-transparent text-ds-accent hover:bg-ds-accent-subtle\",\n secondary:\n \"border-2 border-ds-border-3 text-ds-1 bg-transparent hover:bg-ds-surface-2\",\n success:\n \"border-2 border-ds-state-success-border text-ds-state-success-text bg-transparent hover:bg-ds-state-success-surface\",\n warning:\n \"border-2 border-ds-state-warning-border text-ds-state-warning-text bg-transparent hover:bg-ds-state-warning-surface\",\n error:\n \"border-2 border-ds-state-error-border text-ds-state-error-text bg-transparent hover:bg-ds-state-error-surface\",\n info: \"border-2 border-ds-state-info-border text-ds-state-info-text bg-transparent hover:bg-ds-state-info-surface\",\n },\n soft: {\n default:\n \"bg-ds-surface-2 text-ds-1 backdrop-blur-sm border border-ds-border-2\",\n primary:\n \"border border-ds-border-accent/20 bg-ds-accent-subtle text-ds-1 backdrop-blur-sm\",\n secondary:\n \"bg-ds-surface-3/30 text-ds-1 backdrop-blur-sm border border-ds-border-3/50\",\n success:\n \"bg-ds-state-success-surface text-ds-state-success-text backdrop-blur-sm border border-ds-state-success-border/70\",\n warning:\n \"bg-ds-state-warning-surface text-ds-state-warning-text backdrop-blur-sm border border-ds-state-warning-border/70\",\n error:\n \"bg-ds-state-error-surface text-ds-state-error-text backdrop-blur-sm border border-ds-state-error-border/70\",\n info: \"bg-ds-state-info-surface text-ds-state-info-text backdrop-blur-sm border border-ds-state-info-border/70\",\n },\n glass: {\n default:\n \"bg-ds-surface-1/70 text-ds-1 backdrop-blur-xl border border-ds-border-2/40 shadow-lg\",\n primary:\n \"border border-ds-border-accent/20 bg-ds-accent/15 text-ds-1 backdrop-blur-xl shadow-lg shadow-ds-accent/10\",\n secondary:\n \"bg-ds-surface-3/45 text-ds-1 backdrop-blur-xl border border-ds-border-3/50 shadow-lg\",\n success:\n \"bg-ds-state-success-surface/65 text-ds-state-success-text backdrop-blur-xl border border-ds-state-success-border/60 shadow-lg\",\n warning:\n \"bg-ds-state-warning-surface/65 text-ds-state-warning-text backdrop-blur-xl border border-ds-state-warning-border/60 shadow-lg\",\n error:\n \"bg-ds-state-error-surface/65 text-ds-state-error-text backdrop-blur-xl border border-ds-state-error-border/60 shadow-lg\",\n info: \"bg-ds-state-info-surface/65 text-ds-state-info-text backdrop-blur-xl border border-ds-state-info-border/60 shadow-lg\",\n },\n};\n\nconst dotColorStyles: Record<ChipColor, string> = {\n default: \"bg-ds-3\",\n primary: \"bg-ds-accent\",\n secondary: \"bg-ds-border-3\",\n success: \"bg-ds-state-success\",\n warning: \"bg-ds-state-warning\",\n error: \"bg-ds-state-danger\",\n info: \"bg-ds-state-info\",\n};\n\nconst Chip = forwardRef<HTMLSpanElement, ChipProps>(\n (\n {\n children,\n variant = \"soft\",\n color = \"default\",\n size = \"xs\",\n startIcon,\n endIcon,\n onRemove,\n onClick,\n disabled = false,\n className = \"\",\n dot = false,\n dotColor,\n maxWidth,\n },\n ref,\n ) => {\n const isClickable = onClick !== undefined;\n const isRemovable = onRemove !== undefined;\n\n const baseStyles = `\n inline-flex items-center font-medium rounded-md transition-all duration-200\n ${sizeStyles[size]}\n ${colorStyles[variant][color]}\n ${\n isClickable && !disabled\n ? \"cursor-pointer hover:scale-105 hover:shadow-lg active:scale-95\"\n : \"\"\n }\n ${disabled ? \"opacity-50 cursor-not-allowed grayscale\" : \"\"}\n ${maxWidth ? \"max-w-full\" : \"\"}\n ${className}\n `;\n\n const handleClick = () => {\n if (!disabled && onClick) {\n onClick();\n }\n };\n\n const handleRemove = (e: React.MouseEvent) => {\n e.stopPropagation();\n if (!disabled && onRemove) {\n onRemove();\n }\n };\n\n return (\n <span\n ref={ref}\n className={baseStyles}\n onClick={handleClick}\n role={isClickable ? \"button\" : undefined}\n tabIndex={isClickable && !disabled ? 0 : undefined}\n style={\n maxWidth\n ? {\n maxWidth:\n typeof maxWidth === \"number\" ? `${maxWidth}px` : maxWidth,\n }\n : undefined\n }\n onKeyDown={(e) => {\n if (\n isClickable &&\n !disabled &&\n (e.key === \"Enter\" || e.key === \" \")\n ) {\n e.preventDefault();\n onClick?.();\n }\n }}\n >\n {dot && (\n <span\n className={`rounded-full shrink-0 animate-pulse ${\n dotSizeStyles[size]\n } ${dotColor ? \"\" : dotColorStyles[color]}`}\n style={dotColor ? { backgroundColor: dotColor } : undefined}\n />\n )}\n {startIcon && (\n <span className={`inline-flex shrink-0 items-center justify-center ${iconSizeStyles[size]}`}>\n {startIcon}\n </span>\n )}\n <TruncatedText\n as=\"span\"\n showTitleOnHover\n className=\"max-w-full font-semibold\"\n >\n {children}\n </TruncatedText>\n {endIcon && !isRemovable && (\n <span className={`inline-flex shrink-0 items-center justify-center ${iconSizeStyles[size]}`}>{endIcon}</span>\n )}\n {isRemovable && (\n <button\n type=\"button\"\n onClick={handleRemove}\n disabled={disabled}\n className={`\n shrink-0 rounded-full p-0.5 ml-1 transition-all duration-200\n hover:bg-ds-surface-3/35 hover:scale-110\n focus:outline-none focus:ring-2 focus:ring-current focus:ring-offset-1\n ${disabled ? \"cursor-not-allowed\" : \"cursor-pointer\"}\n `}\n aria-label=\"Remove\"\n >\n <CloseIcon className={iconSizeStyles[size]} aria-hidden=\"true\" />\n </button>\n )}\n </span>\n );\n },\n);\n\nChip.displayName = \"Chip\";\n\nexport default Chip;\nexport { Chip };\n","import type { ReactNode } from \"react\";\n\nimport { TruncatedText } from \"../../typography/truncated-text\";\nimport { mergeClassNames } from \"../../../utils\";\n\nexport type SplitChipDirection = \"auto\" | \"ltr\" | \"rtl\";\n\nexport interface SplitChipProps {\n leftLabel: ReactNode;\n rightLabel: ReactNode;\n dir?: SplitChipDirection;\n rightLabelDir?: SplitChipDirection;\n truncateRight?: boolean;\n rightMaxWidth?: string | number;\n showRightTitleOnHover?: boolean;\n className?: string;\n leftClassName?: string;\n rightClassName?: string;\n}\n\nexport function SplitChip({\n leftLabel,\n rightLabel,\n dir = \"auto\",\n rightLabelDir = \"ltr\",\n truncateRight = false,\n rightMaxWidth = \"10rem\",\n showRightTitleOnHover = true,\n className,\n leftClassName,\n rightClassName,\n}: SplitChipProps) {\n const isRtl = dir === \"rtl\";\n\n return (\n <span\n dir={dir}\n className={mergeClassNames(\n \"inline-flex items-center overflow-hidden rounded-md border border-ds-border-2 bg-ds-surface-2\",\n className,\n )}\n >\n <span\n className={mergeClassNames(\n \"bg-ds-surface-3 px-2 py-1 text-xs font-medium uppercase tracking-[0.05em] text-ds-2\",\n isRtl ? \"border-l border-ds-border-2\" : \"border-r border-ds-border-2\",\n leftClassName,\n )}\n >\n {leftLabel}\n </span>\n <span\n dir={rightLabelDir}\n className={mergeClassNames(\n \"min-w-0 px-2 py-1 text-xs font-medium text-ds-1\",\n rightClassName,\n )}\n >\n {truncateRight ? (\n <TruncatedText\n maxWidth={rightMaxWidth}\n showTitleOnHover={showRightTitleOnHover}\n >\n {rightLabel}\n </TruncatedText>\n ) : (\n rightLabel\n )}\n </span>\n </span>\n );\n}\n\nexport type StatusDotChipTone = \"success\" | \"warning\" | \"danger\" | \"info\";\n\nexport interface StatusDotChipProps {\n label: string;\n tone?: StatusDotChipTone;\n className?: string;\n}\n\nconst toneClasses: Record<StatusDotChipTone, string> = {\n success:\n \"bg-ds-state-success-surface text-ds-state-success-text border-ds-state-success-border\",\n warning:\n \"bg-ds-state-warning-surface text-ds-state-warning-text border-ds-state-warning-border\",\n danger:\n \"bg-ds-state-error-surface text-ds-state-error-text border-ds-state-error-border\",\n info: \"bg-ds-state-info-surface text-ds-state-info-text border-ds-state-info-border\",\n};\n\nconst dotToneClasses: Record<StatusDotChipTone, string> = {\n success: \"bg-ds-state-success\",\n warning: \"bg-ds-state-warning\",\n danger: \"bg-ds-state-danger\",\n info: \"bg-ds-state-info\",\n};\n\nexport function StatusDotChip({\n label,\n tone = \"info\",\n className,\n}: StatusDotChipProps) {\n return (\n <span\n className={mergeClassNames(\n \"inline-flex items-center gap-2 rounded-md border px-3 py-1 text-sm font-medium\",\n toneClasses[tone],\n className,\n )}\n >\n <span\n aria-hidden=\"true\"\n className={mergeClassNames(\n \"h-2.5 w-2.5 rounded-full\",\n dotToneClasses[tone],\n )}\n />\n <span>{label}</span>\n </span>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { n as mergeClassNames } from "./utils-
|
|
2
|
-
import { t as TruncatedText } from "./truncated-text-
|
|
3
|
-
import { q as CloseIcon } from "./icons-
|
|
1
|
+
import { n as mergeClassNames } from "./utils-Dc7j29ec.mjs";
|
|
2
|
+
import { t as TruncatedText } from "./truncated-text-DIkg-8Vo.mjs";
|
|
3
|
+
import { q as CloseIcon } from "./icons-CkVHNbbN.mjs";
|
|
4
4
|
import { forwardRef } from "react";
|
|
5
5
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
6
|
//#region src/components/data-display/chip/Chip.tsx
|
|
@@ -185,4 +185,4 @@ function StatusDotChip({ label, tone = "info", className }) {
|
|
|
185
185
|
//#endregion
|
|
186
186
|
export { StatusDotChip as n, Chip as r, SplitChip as t };
|
|
187
187
|
|
|
188
|
-
//# sourceMappingURL=chip-
|
|
188
|
+
//# sourceMappingURL=chip-DBlSQcqR.mjs.map
|