@techzyapp/ui-library 1.0.43 → 1.0.44
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/README.md +15 -14
- package/dist/{Accordion-B4vdZXIu.cjs → Accordion-CFyeLfPT.cjs} +2 -2
- package/dist/{Accordion-B4vdZXIu.cjs.map → Accordion-CFyeLfPT.cjs.map} +1 -1
- package/dist/{Accordion-DhFZ25KV.js → Accordion-DOrTQJB9.js} +2 -2
- package/dist/{Accordion-DhFZ25KV.js.map → Accordion-DOrTQJB9.js.map} +1 -1
- package/dist/{AdminRoot-BLHvXCvL.js → AdminRoot-9KE3ll-D.js} +8 -8
- package/dist/{AdminRoot-BLHvXCvL.js.map → AdminRoot-9KE3ll-D.js.map} +1 -1
- package/dist/{AdminRoot-D_g_TW30.cjs → AdminRoot-BMzHo0n7.cjs} +2 -2
- package/dist/{AdminRoot-D_g_TW30.cjs.map → AdminRoot-BMzHo0n7.cjs.map} +1 -1
- package/dist/Alert-BFfzpPNd.js +70 -0
- package/dist/{Alert-D5E1PLkV.js.map → Alert-BFfzpPNd.js.map} +1 -1
- package/dist/Alert-DS8TzpIS.cjs +2 -0
- package/dist/{Alert-B4XZDk16.cjs.map → Alert-DS8TzpIS.cjs.map} +1 -1
- package/dist/{AuthLayout-q8pbCGdt.js → AuthLayout-BI1wLuDl.js} +2 -2
- package/dist/{AuthLayout-q8pbCGdt.js.map → AuthLayout-BI1wLuDl.js.map} +1 -1
- package/dist/{AuthLayout-exuNQicH.cjs → AuthLayout-Bzlsvicf.cjs} +2 -2
- package/dist/{AuthLayout-exuNQicH.cjs.map → AuthLayout-Bzlsvicf.cjs.map} +1 -1
- package/dist/{Avatar-l48Ice6t.cjs → Avatar-BBqX1732.cjs} +2 -2
- package/dist/{Avatar-l48Ice6t.cjs.map → Avatar-BBqX1732.cjs.map} +1 -1
- package/dist/{Avatar-ClcmN0ba.js → Avatar-CaYyv5wk.js} +2 -2
- package/dist/{Avatar-ClcmN0ba.js.map → Avatar-CaYyv5wk.js.map} +1 -1
- package/dist/{AvatarGroup-l-KV3wdl.js → AvatarGroup-6fhm-van.js} +2 -2
- package/dist/{AvatarGroup-l-KV3wdl.js.map → AvatarGroup-6fhm-van.js.map} +1 -1
- package/dist/{AvatarGroup-CuvFX4di.cjs → AvatarGroup-DrkzAt1-.cjs} +2 -2
- package/dist/{AvatarGroup-CuvFX4di.cjs.map → AvatarGroup-DrkzAt1-.cjs.map} +1 -1
- package/dist/Breadcrumbs-CloqFpp1.js +34 -0
- package/dist/{Breadcrumbs-M31xyok8.js.map → Breadcrumbs-CloqFpp1.js.map} +1 -1
- package/dist/Breadcrumbs-N2-sZWW5.cjs +2 -0
- package/dist/{Breadcrumbs-DSUxcp6u.cjs.map → Breadcrumbs-N2-sZWW5.cjs.map} +1 -1
- package/dist/Button-5LQtDA9d.js +72 -0
- package/dist/{Button-CtADzomU.js.map → Button-5LQtDA9d.js.map} +1 -1
- package/dist/Button-Bxztlybi.cjs +2 -0
- package/dist/{Button-Q_5uA-zc.cjs.map → Button-Bxztlybi.cjs.map} +1 -1
- package/dist/{Calendar-CHLCv2s9.js → Calendar-BIKo_aus.js} +5 -5
- package/dist/{Calendar-CHLCv2s9.js.map → Calendar-BIKo_aus.js.map} +1 -1
- package/dist/{Calendar-BbbtMsZs.cjs → Calendar-CsBgaKZ-.cjs} +2 -2
- package/dist/{Calendar-BbbtMsZs.cjs.map → Calendar-CsBgaKZ-.cjs.map} +1 -1
- package/dist/{Card-CntRsQfm.cjs → Card-Csn3FaMl.cjs} +2 -2
- package/dist/{Card-CntRsQfm.cjs.map → Card-Csn3FaMl.cjs.map} +1 -1
- package/dist/{Card-Br9IB0yM.js → Card-DMwQ7rMk.js} +4 -4
- package/dist/{Card-Br9IB0yM.js.map → Card-DMwQ7rMk.js.map} +1 -1
- package/dist/Chip-BdCZ44I8.cjs +2 -0
- package/dist/{Chip-CrBizrvG.cjs.map → Chip-BdCZ44I8.cjs.map} +1 -1
- package/dist/Chip-C7IkFuM1.js +92 -0
- package/dist/{Chip-DYZ5w7VM.js.map → Chip-C7IkFuM1.js.map} +1 -1
- package/dist/ChoiceCardGroup-Cj_YFj6C.cjs +2 -0
- package/dist/{ChoiceCardGroup-C7Eengyd.cjs.map → ChoiceCardGroup-Cj_YFj6C.cjs.map} +1 -1
- package/dist/ChoiceCardGroup-D37XREKV.js +180 -0
- package/dist/{ChoiceCardGroup-q0yN-TeQ.js.map → ChoiceCardGroup-D37XREKV.js.map} +1 -1
- package/dist/CodeBlock-BnXxxqAW.cjs +2 -0
- package/dist/{CodeBlock-DW4uaZXM.cjs.map → CodeBlock-BnXxxqAW.cjs.map} +1 -1
- package/dist/CodeBlock-C10JN6DR.js +96 -0
- package/dist/{CodeBlock-B6Eqc4HR.js.map → CodeBlock-C10JN6DR.js.map} +1 -1
- package/dist/{ColorPicker-nhWd_nOW.cjs → ColorPicker-CVddGc-n.cjs} +2 -2
- package/dist/{ColorPicker-nhWd_nOW.cjs.map → ColorPicker-CVddGc-n.cjs.map} +1 -1
- package/dist/{ColorPicker-GsKIqJu8.js → ColorPicker-z8_-77LO.js} +3 -3
- package/dist/{ColorPicker-GsKIqJu8.js.map → ColorPicker-z8_-77LO.js.map} +1 -1
- package/dist/{ColorPickerPanel-BeAu83S6.cjs → ColorPickerPanel-DJY6-EqO.cjs} +2 -2
- package/dist/{ColorPickerPanel-BeAu83S6.cjs.map → ColorPickerPanel-DJY6-EqO.cjs.map} +1 -1
- package/dist/{ColorPickerPanel-BEcZePcT.js → ColorPickerPanel-y4A2LLLf.js} +3 -3
- package/dist/{ColorPickerPanel-BEcZePcT.js.map → ColorPickerPanel-y4A2LLLf.js.map} +1 -1
- package/dist/{ColorRamp-C-zRPhHj.cjs → ColorRamp-DvRsdOWy.cjs} +2 -2
- package/dist/{ColorRamp-C-zRPhHj.cjs.map → ColorRamp-DvRsdOWy.cjs.map} +1 -1
- package/dist/{ColorRamp-CeNgd8wF.js → ColorRamp-Dvit8yoP.js} +2 -2
- package/dist/{ColorRamp-CeNgd8wF.js.map → ColorRamp-Dvit8yoP.js.map} +1 -1
- package/dist/{ConfigProvider-Dqfu7UBU.js → ConfigProvider-CYgmMH4j.js} +2 -2
- package/dist/{ConfigProvider-Dqfu7UBU.js.map → ConfigProvider-CYgmMH4j.js.map} +1 -1
- package/dist/{ConfigProvider-Ci9Q2HLF.cjs → ConfigProvider-Cf-awvZs.cjs} +2 -2
- package/dist/{ConfigProvider-Ci9Q2HLF.cjs.map → ConfigProvider-Cf-awvZs.cjs.map} +1 -1
- package/dist/{CopyButton-Chr7SP5i.cjs → CopyButton-BOp7waEt.cjs} +2 -2
- package/dist/{CopyButton-Chr7SP5i.cjs.map → CopyButton-BOp7waEt.cjs.map} +1 -1
- package/dist/{CopyButton-Bidt2Vgp.js → CopyButton-_iMBE4q_.js} +4 -4
- package/dist/{CopyButton-Bidt2Vgp.js.map → CopyButton-_iMBE4q_.js.map} +1 -1
- package/dist/DashedButton-BX8hfY1x.cjs +2 -0
- package/dist/{DashedButton-Dw7xHgIp.cjs.map → DashedButton-BX8hfY1x.cjs.map} +1 -1
- package/dist/DashedButton-wcmXTYBw.js +58 -0
- package/dist/{DashedButton-csz6Jt_K.js.map → DashedButton-wcmXTYBw.js.map} +1 -1
- package/dist/{DatePicker-4rb34nPR.cjs → DatePicker-UQwpH-rw.cjs} +2 -2
- package/dist/{DatePicker-4rb34nPR.cjs.map → DatePicker-UQwpH-rw.cjs.map} +1 -1
- package/dist/{DatePicker-D7ZMOhWn.js → DatePicker-X5hZVSW6.js} +6 -6
- package/dist/{DatePicker-D7ZMOhWn.js.map → DatePicker-X5hZVSW6.js.map} +1 -1
- package/dist/DatePicker.module-BaQyKOUM.cjs +2 -0
- package/dist/{DatePicker.module-BDtTsg8M.cjs.map → DatePicker.module-BaQyKOUM.cjs.map} +1 -1
- package/dist/DatePicker.module-DoywSvLu.js +138 -0
- package/dist/{DatePicker.module-CMMQyEhG.js.map → DatePicker.module-DoywSvLu.js.map} +1 -1
- package/dist/{DateTimePicker-gDxM2CGy.js → DateTimePicker-Ch1kUHEb.js} +9 -9
- package/dist/{DateTimePicker-gDxM2CGy.js.map → DateTimePicker-Ch1kUHEb.js.map} +1 -1
- package/dist/{DateTimePicker-CVFzKzyA.cjs → DateTimePicker-ClTZGMON.cjs} +2 -2
- package/dist/{DateTimePicker-CVFzKzyA.cjs.map → DateTimePicker-ClTZGMON.cjs.map} +1 -1
- package/dist/{DescriptionList-Die3lRBW.js → DescriptionList-Cque-iYk.js} +69 -69
- package/dist/{DescriptionList-Die3lRBW.js.map → DescriptionList-Cque-iYk.js.map} +1 -1
- package/dist/DescriptionList-IVAvgpEL.cjs +2 -0
- package/dist/{DescriptionList-BBvfABps.cjs.map → DescriptionList-IVAvgpEL.cjs.map} +1 -1
- package/dist/Dropdown-C_y9_dVn.cjs +2 -0
- package/dist/Dropdown-C_y9_dVn.cjs.map +1 -0
- package/dist/Dropdown-D-D_Z1Jo.js +154 -0
- package/dist/Dropdown-D-D_Z1Jo.js.map +1 -0
- package/dist/{EmptyState-D5EKQjX1.cjs → EmptyState-C84B-E8a.cjs} +2 -2
- package/dist/{EmptyState-D5EKQjX1.cjs.map → EmptyState-C84B-E8a.cjs.map} +1 -1
- package/dist/{EmptyState-DRgER10x.js → EmptyState-Yts_p-jZ.js} +3 -3
- package/dist/{EmptyState-DRgER10x.js.map → EmptyState-Yts_p-jZ.js.map} +1 -1
- package/dist/{ErrorBoundary-CLfE2NjU.js → ErrorBoundary-BgMOPle0.js} +3 -3
- package/dist/{ErrorBoundary-CLfE2NjU.js.map → ErrorBoundary-BgMOPle0.js.map} +1 -1
- package/dist/{ErrorBoundary-DVcGWZd8.cjs → ErrorBoundary-DtYswKp3.cjs} +2 -2
- package/dist/{ErrorBoundary-DVcGWZd8.cjs.map → ErrorBoundary-DtYswKp3.cjs.map} +1 -1
- package/dist/{ErrorState-DJDQbHZY.cjs → ErrorState-Aa8LVjkl.cjs} +2 -2
- package/dist/{ErrorState-DJDQbHZY.cjs.map → ErrorState-Aa8LVjkl.cjs.map} +1 -1
- package/dist/{ErrorState-Dqw0AvmB.js → ErrorState-BE9Rcmht.js} +8 -8
- package/dist/{ErrorState-Dqw0AvmB.js.map → ErrorState-BE9Rcmht.js.map} +1 -1
- package/dist/FileCard-Chfx0QdF.cjs +2 -0
- package/dist/{FileCard-BqMproT9.cjs.map → FileCard-Chfx0QdF.cjs.map} +1 -1
- package/dist/{FileCard-kVnjcSlk.js → FileCard-m3i_8yKR.js} +33 -33
- package/dist/{FileCard-kVnjcSlk.js.map → FileCard-m3i_8yKR.js.map} +1 -1
- package/dist/FileUploader-B27Y4rak.js +706 -0
- package/dist/FileUploader-B27Y4rak.js.map +1 -0
- package/dist/FileUploader-DkvFO0N_.cjs +2 -0
- package/dist/FileUploader-DkvFO0N_.cjs.map +1 -0
- package/dist/{Flag-B1ZvZVXi.cjs → Flag-BvZB3295.cjs} +2 -2
- package/dist/{Flag-B1ZvZVXi.cjs.map → Flag-BvZB3295.cjs.map} +1 -1
- package/dist/{Flag-BEIqYQZg.js → Flag-C1HwnZXJ.js} +2 -2
- package/dist/{Flag-BEIqYQZg.js.map → Flag-C1HwnZXJ.js.map} +1 -1
- package/dist/{FullscreenToggle-BuQonKW8.js → FullscreenToggle-B4ynXdCP.js} +4 -4
- package/dist/{FullscreenToggle-BuQonKW8.js.map → FullscreenToggle-B4ynXdCP.js.map} +1 -1
- package/dist/{FullscreenToggle-CWlOXLss.cjs → FullscreenToggle-CEFZQ5OC.cjs} +2 -2
- package/dist/{FullscreenToggle-CWlOXLss.cjs.map → FullscreenToggle-CEFZQ5OC.cjs.map} +1 -1
- package/dist/Icon-B7DJn8Tw.js +5418 -0
- package/dist/Icon-B7DJn8Tw.js.map +1 -0
- package/dist/Icon-CBg21lKA.cjs +2 -0
- package/dist/Icon-CBg21lKA.cjs.map +1 -0
- package/dist/IconButton-EaExCXRq.js +68 -0
- package/dist/{IconButton-BoURJOUD.js.map → IconButton-EaExCXRq.js.map} +1 -1
- package/dist/IconButton-wW1o4HHw.cjs +2 -0
- package/dist/{IconButton-CiDPeKM4.cjs.map → IconButton-wW1o4HHw.cjs.map} +1 -1
- package/dist/ImageEditor-DTFQZ6ON.js +2709 -0
- package/dist/ImageEditor-DTFQZ6ON.js.map +1 -0
- package/dist/ImageEditor-D_HKfDbx.cjs +60 -0
- package/dist/ImageEditor-D_HKfDbx.cjs.map +1 -0
- package/dist/Link-BZjolIAF.js +48 -0
- package/dist/{Link-BQlvsu9V.js.map → Link-BZjolIAF.js.map} +1 -1
- package/dist/Link-CtttVM6w.cjs +2 -0
- package/dist/{Link-GZT51mKx.cjs.map → Link-CtttVM6w.cjs.map} +1 -1
- package/dist/{List-CKoNx21F.cjs → List-CLUXeaXS.cjs} +2 -2
- package/dist/{List-CKoNx21F.cjs.map → List-CLUXeaXS.cjs.map} +1 -1
- package/dist/{List-2Y3ktTcF.js → List-DS91CZUt.js} +2 -2
- package/dist/{List-2Y3ktTcF.js.map → List-DS91CZUt.js.map} +1 -1
- package/dist/ListItem-CguNjf-u.cjs +2 -0
- package/dist/{ListItem-DkCYXucd.cjs.map → ListItem-CguNjf-u.cjs.map} +1 -1
- package/dist/ListItem-Ezmdk7q-.js +76 -0
- package/dist/{ListItem-2Lr5_NRY.js.map → ListItem-Ezmdk7q-.js.map} +1 -1
- package/dist/{Loader-CAmRn8Oj.cjs → Loader-DNR2_YHm.cjs} +2 -2
- package/dist/{Loader-CAmRn8Oj.cjs.map → Loader-DNR2_YHm.cjs.map} +1 -1
- package/dist/{Loader-CnTuddK7.js → Loader-D_Foo6Hj.js} +2 -2
- package/dist/{Loader-CnTuddK7.js.map → Loader-D_Foo6Hj.js.map} +1 -1
- package/dist/{LocationPicker-BwQ6ULMF.cjs → LocationPicker-CdO37PKg.cjs} +2 -2
- package/dist/{LocationPicker-BwQ6ULMF.cjs.map → LocationPicker-CdO37PKg.cjs.map} +1 -1
- package/dist/{LocationPicker-Cns3fkYI.js → LocationPicker-DGbnbTW9.js} +8 -8
- package/dist/{LocationPicker-Cns3fkYI.js.map → LocationPicker-DGbnbTW9.js.map} +1 -1
- package/dist/Modal-1rIBMvKH.js +154 -0
- package/dist/Modal-1rIBMvKH.js.map +1 -0
- package/dist/Modal-Du-uVpYw.cjs +2 -0
- package/dist/Modal-Du-uVpYw.cjs.map +1 -0
- package/dist/MultiSelect-BoqunsM9.js +219 -0
- package/dist/{MultiSelect-svEVZNbp.js.map → MultiSelect-BoqunsM9.js.map} +1 -1
- package/dist/MultiSelect-lAAaD0uL.cjs +2 -0
- package/dist/{MultiSelect-DJ6tRseY.cjs.map → MultiSelect-lAAaD0uL.cjs.map} +1 -1
- package/dist/{NumberField-sokUuuBR.cjs → NumberField-CyUA6eob.cjs} +2 -2
- package/dist/{NumberField-sokUuuBR.cjs.map → NumberField-CyUA6eob.cjs.map} +1 -1
- package/dist/{NumberField-9ekoB1wS.js → NumberField-DHFGNQjZ.js} +4 -4
- package/dist/{NumberField-9ekoB1wS.js.map → NumberField-DHFGNQjZ.js.map} +1 -1
- package/dist/OtpField-CIy5OtXI.cjs +2 -0
- package/dist/{OtpField-DlkGju72.cjs.map → OtpField-CIy5OtXI.cjs.map} +1 -1
- package/dist/{OtpField-DA7zJwy9.js → OtpField-pL9nj4AW.js} +61 -61
- package/dist/{OtpField-DA7zJwy9.js.map → OtpField-pL9nj4AW.js.map} +1 -1
- package/dist/Overlay-CywFQfjm.cjs +2 -0
- package/dist/Overlay-CywFQfjm.cjs.map +1 -0
- package/dist/Overlay-DiL0ZARH.js +60 -0
- package/dist/Overlay-DiL0ZARH.js.map +1 -0
- package/dist/{PageError-vD8Dpfns.js → PageError-C5SO0mVJ.js} +5 -5
- package/dist/{PageError-vD8Dpfns.js.map → PageError-C5SO0mVJ.js.map} +1 -1
- package/dist/{PageError-DUN5PzDF.cjs → PageError-DbokLmOY.cjs} +2 -2
- package/dist/{PageError-DUN5PzDF.cjs.map → PageError-DbokLmOY.cjs.map} +1 -1
- package/dist/{PageLayout-BesuKuX6.cjs → PageLayout-B7ZDiNq8.cjs} +2 -2
- package/dist/{PageLayout-BesuKuX6.cjs.map → PageLayout-B7ZDiNq8.cjs.map} +1 -1
- package/dist/{PageLayout-CdObvxt7.js → PageLayout-Du-D6Pd4.js} +5 -5
- package/dist/{PageLayout-CdObvxt7.js.map → PageLayout-Du-D6Pd4.js.map} +1 -1
- package/dist/{PageNotFound-Cc5eZ6w3.js → PageNotFound-DSkoMfed.js} +5 -5
- package/dist/{PageNotFound-Cc5eZ6w3.js.map → PageNotFound-DSkoMfed.js.map} +1 -1
- package/dist/{PageNotFound-CfOAhmJ-.cjs → PageNotFound-DfNwdtgJ.cjs} +2 -2
- package/dist/{PageNotFound-CfOAhmJ-.cjs.map → PageNotFound-DfNwdtgJ.cjs.map} +1 -1
- package/dist/Pagination-BH8ACaAC.js +139 -0
- package/dist/{Pagination-CX0S1RrF.js.map → Pagination-BH8ACaAC.js.map} +1 -1
- package/dist/Pagination-DO2Os4an.cjs +2 -0
- package/dist/{Pagination-CAD9_Nr_.cjs.map → Pagination-DO2Os4an.cjs.map} +1 -1
- package/dist/{PaletteField-CVIwl2nV.js → PaletteField-BFb0PQ-S.js} +3 -3
- package/dist/{PaletteField-CVIwl2nV.js.map → PaletteField-BFb0PQ-S.js.map} +1 -1
- package/dist/{PaletteField-CpiEkXcB.cjs → PaletteField-BfvcJvGM.cjs} +2 -2
- package/dist/{PaletteField-CpiEkXcB.cjs.map → PaletteField-BfvcJvGM.cjs.map} +1 -1
- package/dist/PhoneField-C-wOm7g5.cjs +2 -0
- package/dist/{PhoneField-Dlnnv4DU.cjs.map → PhoneField-C-wOm7g5.cjs.map} +1 -1
- package/dist/{PhoneField-xHLTU-o5.js → PhoneField-DFhGWgbK.js} +106 -106
- package/dist/{PhoneField-xHLTU-o5.js.map → PhoneField-DFhGWgbK.js.map} +1 -1
- package/dist/{Popconfirm-Chlm_M5T.cjs → Popconfirm-_53vtMI0.cjs} +2 -2
- package/dist/{Popconfirm-Chlm_M5T.cjs.map → Popconfirm-_53vtMI0.cjs.map} +1 -1
- package/dist/{Popconfirm-DIlygJY8.js → Popconfirm-o5da44ra.js} +4 -4
- package/dist/{Popconfirm-DIlygJY8.js.map → Popconfirm-o5da44ra.js.map} +1 -1
- package/dist/{Progress-DqvKmyQW.cjs → Progress-BSinoQ8t.cjs} +2 -2
- package/dist/{Progress-DqvKmyQW.cjs.map → Progress-BSinoQ8t.cjs.map} +1 -1
- package/dist/{Progress-BAEhawtj.js → Progress-CHzNwegP.js} +2 -2
- package/dist/{Progress-BAEhawtj.js.map → Progress-CHzNwegP.js.map} +1 -1
- package/dist/{QrCode-D7BTYcW2.js → QrCode-C3hAfNP6.js} +2 -2
- package/dist/{QrCode-D7BTYcW2.js.map → QrCode-C3hAfNP6.js.map} +1 -1
- package/dist/{QrCode-Dqsk49vX.cjs → QrCode-tNNnsbHM.cjs} +2 -2
- package/dist/{QrCode-Dqsk49vX.cjs.map → QrCode-tNNnsbHM.cjs.map} +1 -1
- package/dist/{RemoveDialog-CQIm9GTH.js → RemoveDialog-CXy-PY-G.js} +6 -6
- package/dist/{RemoveDialog-CQIm9GTH.js.map → RemoveDialog-CXy-PY-G.js.map} +1 -1
- package/dist/{RemoveDialog-DZ-EqIfS.cjs → RemoveDialog-Hi_gV-8A.cjs} +2 -2
- package/dist/{RemoveDialog-DZ-EqIfS.cjs.map → RemoveDialog-Hi_gV-8A.cjs.map} +1 -1
- package/dist/RichTextEditor-BhVE1q4U.cjs +2 -0
- package/dist/RichTextEditor-BhVE1q4U.cjs.map +1 -0
- package/dist/RichTextEditor-DQz9jGD3.js +1011 -0
- package/dist/RichTextEditor-DQz9jGD3.js.map +1 -0
- package/dist/{RootLayout-Cl98ghy1.js → RootLayout-CjT5uHlt.js} +21 -21
- package/dist/{RootLayout-Cl98ghy1.js.map → RootLayout-CjT5uHlt.js.map} +1 -1
- package/dist/{RootLayout-s_Q_kSoS.cjs → RootLayout-iSGY4MsS.cjs} +2 -2
- package/dist/{RootLayout-s_Q_kSoS.cjs.map → RootLayout-iSGY4MsS.cjs.map} +1 -1
- package/dist/Select-DVoL547R.cjs +2 -0
- package/dist/{Select-BrjXCXtl.cjs.map → Select-DVoL547R.cjs.map} +1 -1
- package/dist/{Select-CG8UJL9R.js → Select-DuLDLnnb.js} +47 -47
- package/dist/{Select-CG8UJL9R.js.map → Select-DuLDLnnb.js.map} +1 -1
- package/dist/Sidebar-DRQo4zAF.cjs +2 -0
- package/dist/{Sidebar-DLlqHvQJ.cjs.map → Sidebar-DRQo4zAF.cjs.map} +1 -1
- package/dist/{Sidebar-CbPr34jd.js → Sidebar-DvQmuBNK.js} +59 -59
- package/dist/{Sidebar-CbPr34jd.js.map → Sidebar-DvQmuBNK.js.map} +1 -1
- package/dist/{Slider-B5iG-HSw.js → Slider-D-QjclQJ.js} +2 -2
- package/dist/{Slider-B5iG-HSw.js.map → Slider-D-QjclQJ.js.map} +1 -1
- package/dist/{Slider-DTnui01g.cjs → Slider-DxnCQRSH.cjs} +2 -2
- package/dist/{Slider-DTnui01g.cjs.map → Slider-DxnCQRSH.cjs.map} +1 -1
- package/dist/{SpeedDial-i5kxikmt.cjs → SpeedDial-37OMwj9C.cjs} +2 -2
- package/dist/{SpeedDial-i5kxikmt.cjs.map → SpeedDial-37OMwj9C.cjs.map} +1 -1
- package/dist/{SpeedDial-Be3SHkzw.js → SpeedDial-BBQ9y6lm.js} +3 -3
- package/dist/{SpeedDial-Be3SHkzw.js.map → SpeedDial-BBQ9y6lm.js.map} +1 -1
- package/dist/Stepper-CU5Y0kfj.js +168 -0
- package/dist/{Stepper-BDQt-oVG.js.map → Stepper-CU5Y0kfj.js.map} +1 -1
- package/dist/Stepper-WqkfGPnQ.cjs +2 -0
- package/dist/{Stepper-e8qBsKYW.cjs.map → Stepper-WqkfGPnQ.cjs.map} +1 -1
- package/dist/{SwatchPicker-0gnOvv7U.cjs → SwatchPicker-DCjE0T80.cjs} +2 -2
- package/dist/{SwatchPicker-0gnOvv7U.cjs.map → SwatchPicker-DCjE0T80.cjs.map} +1 -1
- package/dist/{SwatchPicker-BZHRELA-.js → SwatchPicker-DS4WY2eM.js} +2 -2
- package/dist/{SwatchPicker-BZHRELA-.js.map → SwatchPicker-DS4WY2eM.js.map} +1 -1
- package/dist/{Table-ChdM_vyi.js → Table-BECUUZtf.js} +346 -346
- package/dist/Table-BECUUZtf.js.map +1 -0
- package/dist/Table-BnlvrRMr.cjs +2 -0
- package/dist/Table-BnlvrRMr.cjs.map +1 -0
- package/dist/Tabs-BXAHddi7.js +193 -0
- package/dist/{Tabs-BxZrgozI.js.map → Tabs-BXAHddi7.js.map} +1 -1
- package/dist/Tabs-DiL1vNW3.cjs +2 -0
- package/dist/{Tabs-C4kB1yfG.cjs.map → Tabs-DiL1vNW3.cjs.map} +1 -1
- package/dist/{TagsField-Bg5BcQU-.cjs → TagsField-BsV_6dff.cjs} +2 -2
- package/dist/{TagsField-Bg5BcQU-.cjs.map → TagsField-BsV_6dff.cjs.map} +1 -1
- package/dist/{TagsField-DWlIt7XO.js → TagsField-C1SgykAj.js} +5 -5
- package/dist/{TagsField-DWlIt7XO.js.map → TagsField-C1SgykAj.js.map} +1 -1
- package/dist/{TextField-B-xqoDZR.cjs → TextField-DUv689u2.cjs} +2 -2
- package/dist/{TextField-B-xqoDZR.cjs.map → TextField-DUv689u2.cjs.map} +1 -1
- package/dist/{TextField-Dwx5GPxz.js → TextField-oZI7thoU.js} +4 -4
- package/dist/{TextField-Dwx5GPxz.js.map → TextField-oZI7thoU.js.map} +1 -1
- package/dist/{ThemeToggle-CK2USfgx.js → ThemeToggle-5uHCUsX7.js} +4 -4
- package/dist/{ThemeToggle-CK2USfgx.js.map → ThemeToggle-5uHCUsX7.js.map} +1 -1
- package/dist/{ThemeToggle-DFgv1bsh.cjs → ThemeToggle-xn3roH0u.cjs} +2 -2
- package/dist/{ThemeToggle-DFgv1bsh.cjs.map → ThemeToggle-xn3roH0u.cjs.map} +1 -1
- package/dist/TimeColumns-By23LHZw.cjs +2 -0
- package/dist/{TimeColumns-B8KTj-tc.cjs.map → TimeColumns-By23LHZw.cjs.map} +1 -1
- package/dist/TimeColumns-lO33mhX7.js +147 -0
- package/dist/{TimeColumns-BWcuu3l7.js.map → TimeColumns-lO33mhX7.js.map} +1 -1
- package/dist/{TimePicker-DjL15hz1.cjs → TimePicker-BHFNH8LR.cjs} +2 -2
- package/dist/{TimePicker-DjL15hz1.cjs.map → TimePicker-BHFNH8LR.cjs.map} +1 -1
- package/dist/{TimePicker-YMVHevpZ.js → TimePicker-Dl5p833O.js} +7 -7
- package/dist/{TimePicker-YMVHevpZ.js.map → TimePicker-Dl5p833O.js.map} +1 -1
- package/dist/Timeline-DOojNvLG.cjs +2 -0
- package/dist/Timeline-DOojNvLG.cjs.map +1 -0
- package/dist/Timeline-Dg03dwTN.js +87 -0
- package/dist/Timeline-Dg03dwTN.js.map +1 -0
- package/dist/{Toaster-pHN2pxrU.js → Toaster-BPBFZiTr.js} +3 -3
- package/dist/{Toaster-pHN2pxrU.js.map → Toaster-BPBFZiTr.js.map} +1 -1
- package/dist/{Toaster-9hZ5MuW7.cjs → Toaster-D4T89N1S.cjs} +2 -2
- package/dist/{Toaster-9hZ5MuW7.cjs.map → Toaster-D4T89N1S.cjs.map} +1 -1
- package/dist/ToggleButtonGroup-CGNRLxjg.cjs +2 -0
- package/dist/{ToggleButtonGroup-Ci_DFvdt.cjs.map → ToggleButtonGroup-CGNRLxjg.cjs.map} +1 -1
- package/dist/{ToggleButtonGroup-Mdskkjdh.js → ToggleButtonGroup-K6ZcrTZT.js} +37 -37
- package/dist/{ToggleButtonGroup-Mdskkjdh.js.map → ToggleButtonGroup-K6ZcrTZT.js.map} +1 -1
- package/dist/{TranslatedFields-BpWU5ZcG.js → TranslatedFields-Clsr84XC.js} +5 -5
- package/dist/{TranslatedFields-BpWU5ZcG.js.map → TranslatedFields-Clsr84XC.js.map} +1 -1
- package/dist/{TranslatedFields-SvS37hab.cjs → TranslatedFields-LdeJeHEp.cjs} +2 -2
- package/dist/{TranslatedFields-SvS37hab.cjs.map → TranslatedFields-LdeJeHEp.cjs.map} +1 -1
- package/dist/{UserCard-VPaexedS.cjs → UserCard-CQOiWppq.cjs} +2 -2
- package/dist/{UserCard-VPaexedS.cjs.map → UserCard-CQOiWppq.cjs.map} +1 -1
- package/dist/{UserCard-cmZrMvwL.js → UserCard-Cr75RwZb.js} +5 -5
- package/dist/{UserCard-cmZrMvwL.js.map → UserCard-Cr75RwZb.js.map} +1 -1
- package/dist/chunks/icons/{25-knEB8mSp.js → 25-BMMPtr_E.js} +4 -5
- package/dist/chunks/icons/{25-Dho_3EHD.cjs → 25-uATZNfXE.cjs} +1 -1
- package/dist/chunks/icons/{2b-CQJdcF1h.js → 2b-Brkug4c-.js} +10 -11
- package/dist/chunks/icons/{2b-C2_97u16.cjs → 2b-CIVRGp1R.cjs} +1 -1
- package/dist/chunks/icons/57-BLoIUlhF.js +27 -0
- package/dist/chunks/icons/57-D4zLdDZ1.cjs +1 -0
- package/dist/chunks/icons/{75-DqLkMUyj.cjs → 75-C2eJ2Tvr.cjs} +1 -1
- package/dist/chunks/icons/{75-D5RQw6IJ.js → 75-D16WojvG.js} +6 -7
- package/dist/chunks/icons/{7c-DpnA_JOJ.js → 7c-0j5Sno5_.js} +6 -7
- package/dist/chunks/icons/{7c-DEaFwltT.cjs → 7c-LUfAyp72.cjs} +1 -1
- package/dist/chunks/icons/8a-BJ_LOjmW.js +26 -0
- package/dist/chunks/icons/8a-CYkhOibI.cjs +1 -0
- package/dist/chunks/icons/97-Bx7FkkGJ.js +12 -0
- package/dist/chunks/icons/97-D7pUHrOX.cjs +1 -0
- package/dist/chunks/icons/{b7-BtHkI92Y.js → b7-DmmkevXf.js} +17 -18
- package/dist/chunks/icons/{b7-B-dB5jrV.cjs → b7-rI1GpsxW.cjs} +1 -1
- package/dist/chunks/icons/b8-De0yKEKv.js +28 -0
- package/dist/chunks/icons/b8-eR814BVJ.cjs +1 -0
- package/dist/chunks/icons/{b9-Bw942fE3.js → b9-CJO6ZdSw.js} +10 -11
- package/dist/chunks/icons/{b9-Be-J4RIp.cjs → b9-DZdWz9qg.cjs} +1 -1
- package/dist/chunks/icons/d5-BAPeb6B0.cjs +1 -0
- package/dist/chunks/icons/d5-BJJanOLe.js +21 -0
- package/dist/chunks/icons/d8--vRkIVal.js +19 -0
- package/dist/chunks/icons/d8-BfMys92X.cjs +1 -0
- package/dist/chunks/icons/dd-CARhkHmU.js +21 -0
- package/dist/chunks/icons/dd-D61yllMP.cjs +1 -0
- package/dist/components/Accordion/index.cjs +1 -1
- package/dist/components/Accordion/index.js +1 -1
- package/dist/components/Alert/index.cjs +1 -1
- package/dist/components/Alert/index.js +1 -1
- package/dist/components/AuthLayout/index.cjs +1 -1
- package/dist/components/AuthLayout/index.js +1 -1
- package/dist/components/Avatar/index.cjs +1 -1
- package/dist/components/Avatar/index.js +2 -2
- package/dist/components/Breadcrumbs/index.cjs +1 -1
- package/dist/components/Breadcrumbs/index.js +1 -1
- package/dist/components/Button/index.cjs +1 -1
- package/dist/components/Button/index.js +1 -1
- package/dist/components/Card/index.cjs +1 -1
- package/dist/components/Card/index.js +1 -1
- package/dist/components/Chip/index.cjs +1 -1
- package/dist/components/Chip/index.js +1 -1
- package/dist/components/ChoiceCard/index.cjs +1 -1
- package/dist/components/ChoiceCard/index.js +1 -1
- package/dist/components/CodeBlock/index.cjs +1 -1
- package/dist/components/CodeBlock/index.js +1 -1
- package/dist/components/ColorPicker/index.cjs +1 -1
- package/dist/components/ColorPicker/index.js +1 -1
- package/dist/components/ColorRamp/index.cjs +1 -1
- package/dist/components/ColorRamp/index.js +1 -1
- package/dist/components/CopyButton/index.cjs +1 -1
- package/dist/components/CopyButton/index.js +1 -1
- package/dist/components/DashedButton/index.cjs +1 -1
- package/dist/components/DashedButton/index.js +1 -1
- package/dist/components/DatePicker/index.cjs +1 -1
- package/dist/components/DatePicker/index.js +1 -1
- package/dist/components/DateTimePicker/index.cjs +1 -1
- package/dist/components/DateTimePicker/index.js +1 -1
- package/dist/components/DescriptionList/index.cjs +1 -1
- package/dist/components/DescriptionList/index.js +1 -1
- package/dist/components/Dropdown/index.cjs +1 -1
- package/dist/components/Dropdown/index.js +1 -1
- package/dist/components/EmptyState/index.cjs +1 -1
- package/dist/components/EmptyState/index.js +1 -1
- package/dist/components/ErrorState/index.cjs +1 -1
- package/dist/components/ErrorState/index.js +2 -2
- package/dist/components/FileCard/index.cjs +1 -1
- package/dist/components/FileCard/index.js +1 -1
- package/dist/components/FileUploader/FileUploader.d.cts +33 -5
- package/dist/components/FileUploader/FileUploader.d.ts +33 -5
- package/dist/components/FileUploader/FileUploaderEditDialog.d.cts +8 -18
- package/dist/components/FileUploader/FileUploaderEditDialog.d.ts +8 -18
- package/dist/components/FileUploader/index.cjs +1 -1
- package/dist/components/FileUploader/index.js +1 -1
- package/dist/components/Flag/index.cjs +1 -1
- package/dist/components/Flag/index.js +1 -1
- package/dist/components/FullscreenToggle/index.cjs +1 -1
- package/dist/components/FullscreenToggle/index.js +1 -1
- package/dist/components/Icon/index.cjs +1 -1
- package/dist/components/Icon/index.js +1 -1
- package/dist/components/IconButton/index.cjs +1 -1
- package/dist/components/IconButton/index.js +1 -1
- package/dist/components/ImageEditor/CropShapeMenu.d.cts +17 -0
- package/dist/components/ImageEditor/CropShapeMenu.d.ts +17 -0
- package/dist/components/ImageEditor/EditorStage.d.cts +27 -0
- package/dist/components/ImageEditor/EditorStage.d.ts +27 -0
- package/dist/components/ImageEditor/FilterStrip.d.cts +14 -0
- package/dist/components/ImageEditor/FilterStrip.d.ts +14 -0
- package/dist/components/ImageEditor/ImageEditor.d.cts +30 -0
- package/dist/components/ImageEditor/ImageEditor.d.ts +30 -0
- package/dist/components/ImageEditor/ResizePanel.d.cts +19 -0
- package/dist/components/ImageEditor/ResizePanel.d.ts +19 -0
- package/dist/components/ImageEditor/RulerSlider.d.cts +37 -0
- package/dist/components/ImageEditor/RulerSlider.d.ts +37 -0
- package/dist/components/ImageEditor/core/affine.d.cts +11 -0
- package/dist/components/ImageEditor/core/affine.d.ts +11 -0
- package/dist/components/ImageEditor/core/editor.d.cts +69 -0
- package/dist/components/ImageEditor/core/editor.d.ts +69 -0
- package/dist/components/ImageEditor/core/geometry.d.cts +112 -0
- package/dist/components/ImageEditor/core/geometry.d.ts +112 -0
- package/dist/components/ImageEditor/core/load.d.cts +26 -0
- package/dist/components/ImageEditor/core/load.d.ts +26 -0
- package/dist/components/ImageEditor/core/matrix.d.cts +55 -0
- package/dist/components/ImageEditor/core/matrix.d.ts +55 -0
- package/dist/components/ImageEditor/core/pixels.d.cts +24 -0
- package/dist/components/ImageEditor/core/pixels.d.ts +24 -0
- package/dist/components/ImageEditor/core/redact.d.cts +37 -0
- package/dist/components/ImageEditor/core/redact.d.ts +37 -0
- package/dist/components/ImageEditor/core/render.d.cts +19 -0
- package/dist/components/ImageEditor/core/render.d.ts +19 -0
- package/dist/components/ImageEditor/core/scene.d.cts +47 -0
- package/dist/components/ImageEditor/core/scene.d.ts +47 -0
- package/dist/components/ImageEditor/core/spring.d.cts +17 -0
- package/dist/components/ImageEditor/core/spring.d.ts +17 -0
- package/dist/components/ImageEditor/core/types.d.cts +104 -0
- package/dist/components/ImageEditor/core/types.d.ts +104 -0
- package/dist/components/ImageEditor/core/webgl.d.cts +55 -0
- package/dist/components/ImageEditor/core/webgl.d.ts +55 -0
- package/dist/components/ImageEditor/index.cjs +2 -0
- package/dist/components/ImageEditor/index.cjs.map +1 -0
- package/dist/components/ImageEditor/index.d.cts +6 -0
- package/dist/components/ImageEditor/index.d.ts +6 -0
- package/dist/components/ImageEditor/index.js +9 -0
- package/dist/components/ImageEditor/index.js.map +1 -0
- package/dist/components/Link/index.cjs +1 -1
- package/dist/components/Link/index.js +1 -1
- package/dist/components/List/index.cjs +1 -1
- package/dist/components/List/index.js +2 -2
- package/dist/components/Loader/index.cjs +1 -1
- package/dist/components/Loader/index.js +1 -1
- package/dist/components/LocationPicker/index.cjs +1 -1
- package/dist/components/LocationPicker/index.js +1 -1
- package/dist/components/Modal/index.cjs +1 -1
- package/dist/components/Modal/index.js +1 -1
- package/dist/components/MultiSelect/index.cjs +1 -1
- package/dist/components/MultiSelect/index.js +1 -1
- package/dist/components/NumberField/index.cjs +1 -1
- package/dist/components/NumberField/index.js +1 -1
- package/dist/components/OtpField/index.cjs +1 -1
- package/dist/components/OtpField/index.js +1 -1
- package/dist/components/PageError/index.cjs +1 -1
- package/dist/components/PageError/index.js +1 -1
- package/dist/components/PageLayout/index.cjs +1 -1
- package/dist/components/PageLayout/index.js +1 -1
- package/dist/components/PageNotFound/index.cjs +1 -1
- package/dist/components/PageNotFound/index.js +1 -1
- package/dist/components/Pagination/index.cjs +1 -1
- package/dist/components/Pagination/index.js +1 -1
- package/dist/components/PaletteField/index.cjs +1 -1
- package/dist/components/PaletteField/index.js +1 -1
- package/dist/components/PhoneField/index.cjs +1 -1
- package/dist/components/PhoneField/index.js +1 -1
- package/dist/components/Popconfirm/index.cjs +1 -1
- package/dist/components/Popconfirm/index.js +1 -1
- package/dist/components/Progress/index.cjs +1 -1
- package/dist/components/Progress/index.js +1 -1
- package/dist/components/QrCode/index.cjs +1 -1
- package/dist/components/QrCode/index.js +1 -1
- package/dist/components/RemoveDialog/index.cjs +1 -1
- package/dist/components/RemoveDialog/index.js +1 -1
- package/dist/components/RichTextEditor/RichTextEditor.d.cts +3 -2
- package/dist/components/RichTextEditor/RichTextEditor.d.ts +3 -2
- package/dist/components/RichTextEditor/index.cjs +1 -1
- package/dist/components/RichTextEditor/index.js +1 -1
- package/dist/components/RichTextEditor/nodes/ImageNode.d.cts +8 -5
- package/dist/components/RichTextEditor/nodes/ImageNode.d.ts +8 -5
- package/dist/components/RichTextEditor/nodes/VideoNode.d.cts +4 -4
- package/dist/components/RichTextEditor/nodes/VideoNode.d.ts +4 -4
- package/dist/components/RootLayout/index.cjs +1 -1
- package/dist/components/RootLayout/index.js +1 -1
- package/dist/components/Select/index.cjs +1 -1
- package/dist/components/Select/index.js +1 -1
- package/dist/components/Sidebar/index.cjs +1 -1
- package/dist/components/Sidebar/index.js +1 -1
- package/dist/components/Slider/index.cjs +1 -1
- package/dist/components/Slider/index.js +1 -1
- package/dist/components/SpeedDial/index.cjs +1 -1
- package/dist/components/SpeedDial/index.js +1 -1
- package/dist/components/Stepper/index.cjs +1 -1
- package/dist/components/Stepper/index.js +1 -1
- package/dist/components/SwatchPicker/index.cjs +1 -1
- package/dist/components/SwatchPicker/index.js +1 -1
- package/dist/components/Table/index.cjs +1 -1
- package/dist/components/Table/index.js +1 -1
- package/dist/components/Tabs/index.cjs +1 -1
- package/dist/components/Tabs/index.js +1 -1
- package/dist/components/TagsField/index.cjs +1 -1
- package/dist/components/TagsField/index.js +1 -1
- package/dist/components/TextField/index.cjs +1 -1
- package/dist/components/TextField/index.js +1 -1
- package/dist/components/ThemeToggle/index.cjs +1 -1
- package/dist/components/ThemeToggle/index.js +1 -1
- package/dist/components/TimePicker/index.cjs +1 -1
- package/dist/components/TimePicker/index.js +1 -1
- package/dist/components/Timeline/Timeline.d.cts +16 -4
- package/dist/components/Timeline/Timeline.d.ts +16 -4
- package/dist/components/Timeline/TimelineItem.d.cts +12 -6
- package/dist/components/Timeline/TimelineItem.d.ts +12 -6
- package/dist/components/Timeline/index.cjs +1 -1
- package/dist/components/Timeline/index.d.cts +1 -1
- package/dist/components/Timeline/index.d.ts +1 -1
- package/dist/components/Timeline/index.js +1 -1
- package/dist/components/Timeline/timelineContext.d.cts +3 -2
- package/dist/components/Timeline/timelineContext.d.ts +3 -2
- package/dist/components/Toast/index.cjs +1 -1
- package/dist/components/Toast/index.js +1 -1
- package/dist/components/ToggleButton/index.cjs +1 -1
- package/dist/components/ToggleButton/index.js +1 -1
- package/dist/components/TranslatedFields/index.cjs +1 -1
- package/dist/components/TranslatedFields/index.js +1 -1
- package/dist/components/UserCard/index.cjs +1 -1
- package/dist/components/UserCard/index.js +1 -1
- package/dist/components/index.d.cts +1 -0
- package/dist/components/index.d.ts +1 -0
- package/dist/entries/app.cjs +1 -1
- package/dist/entries/app.js +1 -1
- package/dist/entries/components.cjs +1 -1
- package/dist/entries/components.js +164 -159
- package/dist/entries/components.js.map +1 -1
- package/dist/entries/i18n.cjs +1 -1
- package/dist/entries/i18n.js +2 -2
- package/dist/entries/icons.cjs +1 -1
- package/dist/entries/icons.js +1 -1
- package/dist/entries/theme.cjs +1 -1
- package/dist/entries/theme.js +1 -1
- package/dist/i18n/messages.d.cts +61 -4
- package/dist/i18n/messages.d.ts +61 -4
- package/dist/icons/names.d.cts +3 -3
- package/dist/icons/names.d.ts +3 -3
- package/dist/index.cjs +1 -1
- package/dist/index.css +1 -1
- package/dist/index.js +161 -156
- package/dist/index.js.map +1 -1
- package/dist/{messages-BiRLMy1E.js → messages-BZYBZ3GR.js} +101 -44
- package/dist/messages-BZYBZ3GR.js.map +1 -0
- package/dist/{messages-C_fRRCg6.cjs → messages-CTHjpVJq.cjs} +9 -9
- package/dist/messages-CTHjpVJq.cjs.map +1 -0
- package/dist/{useHomeTo-DdmOGy09.js → useHomeTo-Biyc-Un8.js} +2 -2
- package/dist/{useHomeTo-DdmOGy09.js.map → useHomeTo-Biyc-Un8.js.map} +1 -1
- package/dist/{useHomeTo-HCkVzGTu.cjs → useHomeTo-D7wcH6aw.cjs} +2 -2
- package/dist/{useHomeTo-HCkVzGTu.cjs.map → useHomeTo-D7wcH6aw.cjs.map} +1 -1
- package/dist/{useOptionMenu-BqCj10_a.cjs → useOptionMenu-B40OOVsO.cjs} +2 -2
- package/dist/{useOptionMenu-BqCj10_a.cjs.map → useOptionMenu-B40OOVsO.cjs.map} +1 -1
- package/dist/{useOptionMenu-EiyIkC3E.js → useOptionMenu-BTt8t9SM.js} +6 -6
- package/dist/{useOptionMenu-EiyIkC3E.js.map → useOptionMenu-BTt8t9SM.js.map} +1 -1
- package/package.json +1 -6
- package/dist/Alert-B4XZDk16.cjs +0 -2
- package/dist/Alert-D5E1PLkV.js +0 -70
- package/dist/Breadcrumbs-DSUxcp6u.cjs +0 -2
- package/dist/Breadcrumbs-M31xyok8.js +0 -34
- package/dist/Button-CtADzomU.js +0 -72
- package/dist/Button-Q_5uA-zc.cjs +0 -2
- package/dist/Chip-CrBizrvG.cjs +0 -2
- package/dist/Chip-DYZ5w7VM.js +0 -92
- package/dist/ChoiceCardGroup-C7Eengyd.cjs +0 -2
- package/dist/ChoiceCardGroup-q0yN-TeQ.js +0 -180
- package/dist/CodeBlock-B6Eqc4HR.js +0 -96
- package/dist/CodeBlock-DW4uaZXM.cjs +0 -2
- package/dist/DashedButton-Dw7xHgIp.cjs +0 -2
- package/dist/DashedButton-csz6Jt_K.js +0 -58
- package/dist/DatePicker.module-BDtTsg8M.cjs +0 -2
- package/dist/DatePicker.module-CMMQyEhG.js +0 -138
- package/dist/DescriptionList-BBvfABps.cjs +0 -2
- package/dist/Dropdown-CMjURWYd.cjs +0 -2
- package/dist/Dropdown-CMjURWYd.cjs.map +0 -1
- package/dist/Dropdown-CnDBlB02.js +0 -146
- package/dist/Dropdown-CnDBlB02.js.map +0 -1
- package/dist/FileCard-BqMproT9.cjs +0 -2
- package/dist/FileUploader-BimFH5d8.cjs +0 -2
- package/dist/FileUploader-BimFH5d8.cjs.map +0 -1
- package/dist/FileUploader-LJIMh5_b.js +0 -707
- package/dist/FileUploader-LJIMh5_b.js.map +0 -1
- package/dist/Icon-B6lz-V0A.cjs +0 -2
- package/dist/Icon-B6lz-V0A.cjs.map +0 -1
- package/dist/Icon-D5TxgfCc.js +0 -5404
- package/dist/Icon-D5TxgfCc.js.map +0 -1
- package/dist/IconButton-BoURJOUD.js +0 -68
- package/dist/IconButton-CiDPeKM4.cjs +0 -2
- package/dist/Link-BQlvsu9V.js +0 -48
- package/dist/Link-GZT51mKx.cjs +0 -2
- package/dist/ListItem-2Lr5_NRY.js +0 -76
- package/dist/ListItem-DkCYXucd.cjs +0 -2
- package/dist/Modal-CYcVOzID.js +0 -206
- package/dist/Modal-CYcVOzID.js.map +0 -1
- package/dist/Modal-DwY3jGHE.cjs +0 -2
- package/dist/Modal-DwY3jGHE.cjs.map +0 -1
- package/dist/MultiSelect-DJ6tRseY.cjs +0 -2
- package/dist/MultiSelect-svEVZNbp.js +0 -219
- package/dist/OtpField-DlkGju72.cjs +0 -2
- package/dist/Pagination-CAD9_Nr_.cjs +0 -2
- package/dist/Pagination-CX0S1RrF.js +0 -139
- package/dist/PhoneField-Dlnnv4DU.cjs +0 -2
- package/dist/RichTextEditor-Ba1G_qXu.cjs +0 -2
- package/dist/RichTextEditor-Ba1G_qXu.cjs.map +0 -1
- package/dist/RichTextEditor-CJcbxQ6H.js +0 -916
- package/dist/RichTextEditor-CJcbxQ6H.js.map +0 -1
- package/dist/Select-BrjXCXtl.cjs +0 -2
- package/dist/Sidebar-DLlqHvQJ.cjs +0 -2
- package/dist/Stepper-BDQt-oVG.js +0 -168
- package/dist/Stepper-e8qBsKYW.cjs +0 -2
- package/dist/Table-C14fRX1U.cjs +0 -2
- package/dist/Table-C14fRX1U.cjs.map +0 -1
- package/dist/Table-ChdM_vyi.js.map +0 -1
- package/dist/Tabs-BxZrgozI.js +0 -193
- package/dist/Tabs-C4kB1yfG.cjs +0 -2
- package/dist/TimeColumns-B8KTj-tc.cjs +0 -2
- package/dist/TimeColumns-BWcuu3l7.js +0 -147
- package/dist/Timeline-Cb1krSlo.js +0 -70
- package/dist/Timeline-Cb1krSlo.js.map +0 -1
- package/dist/Timeline-CmluHBIT.cjs +0 -2
- package/dist/Timeline-CmluHBIT.cjs.map +0 -1
- package/dist/ToggleButtonGroup-Ci_DFvdt.cjs +0 -2
- package/dist/chunks/icons/57-Bxh2lSz-.cjs +0 -1
- package/dist/chunks/icons/57-CkmrDM9A.js +0 -28
- package/dist/chunks/icons/8a-CThAqelS.js +0 -27
- package/dist/chunks/icons/8a-DRBAtpxY.cjs +0 -1
- package/dist/chunks/icons/97-J9NBhX2o.js +0 -14
- package/dist/chunks/icons/97-r2YXIQ_T.cjs +0 -1
- package/dist/chunks/icons/b8-CyIivk3C.cjs +0 -1
- package/dist/chunks/icons/b8-DcK0w8WM.js +0 -29
- package/dist/chunks/icons/d5-3fWtNlXW.js +0 -20
- package/dist/chunks/icons/d5-CoG_Hfw9.cjs +0 -1
- package/dist/chunks/icons/d8-DsebfeMy.cjs +0 -1
- package/dist/chunks/icons/d8-DtOvDDrr.js +0 -20
- package/dist/chunks/icons/dd-BXVES9Ib.js +0 -22
- package/dist/chunks/icons/dd-beaqCKss.cjs +0 -1
- package/dist/messages-BiRLMy1E.js.map +0 -1
- package/dist/messages-C_fRRCg6.cjs.map +0 -1
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";const t=require("react/jsx-runtime"),i=require("react"),$=require("clsx"),V=require("./formContext-bTWrqdEV.cjs"),P=require("./Typography-d97DdbNd.cjs"),w=require("./Icon-CBg21lKA.cjs"),R=i.createContext(null);function H(){return i.useContext(R)}const J="_group_7s2td_2",K="_groupLabel_7s2td_8",Q="_required_7s2td_13",U="_grid_7s2td_17",W="_card_7s2td_24",X="_disabled_7s2td_43",Y="_selected_7s2td_43",Z="_input_7s2td_53",ee="_error_7s2td_57",se="_left_7s2td_69",te="_text_7s2td_73",re="_sm_7s2td_79",oe="_md_7s2td_87",ce="_lg_7s2td_95",de="_indicator_7s2td_119",le="_radioDot_7s2td_164",ne="_iconBox_7s2td_187",ie="_label_7s2td_214",ae="_description_7s2td_221",s={group:J,groupLabel:K,required:Q,grid:U,card:W,disabled:X,selected:Y,input:Z,error:ee,left:se,text:te,sm:re,md:oe,lg:ce,indicator:de,radioDot:le,iconBox:ne,label:ie,description:ae},_e=new Set(w.ICON_NAMES),T=i.forwardRef(function({value:c,label:a,description:_,icon:o,align:d,color:p,size:C,error:q,checked:u,onChange:x,name:S,disabled:I,className:z,style:A,...B},D){const e=H(),v=p??(e==null?void 0:e.color)??"primary",N=C??(e==null?void 0:e.size)??"md",j=q??(e==null?void 0:e.error)??!1,f=I??(e==null?void 0:e.disabled)??!1,n=S??(e==null?void 0:e.name),y=d??(e==null?void 0:e.align)??(o==null?"left":"center"),[m,g]=i.useState(!1),h=e?e.isSelected(c):u!==void 0?u:m,E=l=>{if(!f){if(e){e.toggle(c);return}u===void 0&&g(l.target.checked),x==null||x(l.target.checked)}},G=typeof o=="string"&&_e.has(o)?t.jsx(w.Icon,{name:o,size:N}):o;return t.jsxs("label",{className:$.clsx(s.card,s[N],y==="left"&&s.left,h&&s.selected,j&&s.error,f&&s.disabled,z),style:{"--tz-btn-rgb":`var(--tz-color-${v}-rgb)`,"--tz-btn-on":`var(--tz-color-${v}-contrast, #fff)`,...A},children:[t.jsx("input",{ref:D,type:e!=null&&e.exclusive?"radio":"checkbox",className:s.input,name:n,value:c,checked:h,onChange:E,disabled:f,"aria-invalid":j||void 0,...B}),t.jsx("span",{className:$.clsx(s.indicator,(e==null?void 0:e.exclusive)&&s.radioDot),"aria-hidden":"true"}),o!=null&&t.jsx("span",{className:s.iconBox,"aria-hidden":"true",children:G}),(a!=null||_!=null)&&t.jsxs("span",{className:s.text,children:[a!=null&&t.jsx("span",{className:s.label,children:a}),_!=null&&t.jsx("span",{className:s.description,children:_})]})]})}),ue=i.forwardRef(function({exclusive:c=!1,value:a,defaultValue:_,onChange:o,name:d,options:p,label:C,minCardWidth:q=160,align:u,size:x="md",color:S="primary",error:I,required:z=!1,disabled:A=!1,children:B,className:D,style:e,...v},N){const j=i.useId(),f=d??`choice-${j}`,n=V.useFormContext(),y=!!(n&&d),m=n&&d?n.field(d):void 0,g=a!==void 0?a:y?n.values[d]:void 0,h=g!==void 0,[E,G]=i.useState(_),l=h?g:E,k=I??(m==null?void 0:m.error)??!1,M={name:f,exclusive:c,isSelected:r=>c?l===r:Array.isArray(l)&&l.includes(r),toggle:r=>{let b;if(c)b=r;else{const L=Array.isArray(l)?l:[];b=L.includes(r)?L.filter(O=>O!==r):[...L,r]}h||G(b),y&&n.setValue(d,b),o==null||o(b)},size:x,align:u,color:S,disabled:A,error:k};return t.jsxs("div",{ref:N,role:c?"radiogroup":"group","aria-invalid":k||void 0,className:$.clsx(s.group,D),style:e,...v,children:[C!=null&&t.jsxs("span",{className:s.groupLabel,children:[t.jsx(P.Typography,{as:"span",variant:"bodySmall",color:"muted",children:C}),z&&t.jsx("span",{className:s.required,"aria-hidden":"true",children:"*"})]}),t.jsx("div",{className:s.grid,style:{"--cc-min":`${q}px`},children:t.jsx(R.Provider,{value:M,children:p?p.map(r=>t.jsx(T,{value:r.value,label:r.label,description:r.description,icon:r.icon,disabled:r.disabled},r.value)):B})})]})});exports.ChoiceCard=T;exports.ChoiceCardGroup=ue;
|
|
2
|
+
//# sourceMappingURL=ChoiceCardGroup-Cj_YFj6C.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChoiceCardGroup-C7Eengyd.cjs","sources":["../src/components/ChoiceCard/choiceCardContext.ts","../src/components/ChoiceCard/ChoiceCard.tsx","../src/components/ChoiceCard/ChoiceCardGroup.tsx"],"sourcesContent":["import { createContext, useContext } from 'react'\nimport type { ThemeColor } from '../../theme'\nimport type { ChoiceCardAlign, ChoiceCardSize } from './ChoiceCard'\n\n/** Shared state a `<ChoiceCardGroup>` hands down to its `<ChoiceCard>` children via context. */\nexport interface ChoiceCardGroupContextValue {\n /** Shared input `name` — in `exclusive` mode the cards are native radios and must share one. */\n name?: string\n /** Single-selection (radio semantics) vs multiple (checkbox semantics). */\n exclusive: boolean\n /** Whether a card's value is currently selected. */\n isSelected: (value: string) => boolean\n /** Select / toggle a value — called by a child `<ChoiceCard>` on change. */\n toggle: (value: string) => void\n size?: ChoiceCardSize\n align?: ChoiceCardAlign\n color?: ThemeColor\n disabled?: boolean\n error?: boolean\n}\n\nexport const ChoiceCardGroupContext = createContext<ChoiceCardGroupContextValue | null>(null)\n\n/** Read the surrounding `<ChoiceCardGroup>` so a `<ChoiceCard>` can wire itself in (or `null` when standalone). */\nexport function useChoiceCardGroupContext(): ChoiceCardGroupContextValue | null {\n return useContext(ChoiceCardGroupContext)\n}\n","import {\n forwardRef,\n useState,\n type ChangeEvent,\n type CSSProperties,\n type InputHTMLAttributes,\n type ReactNode,\n} from 'react'\nimport { clsx } from 'clsx'\nimport type { ThemeColor } from '../../theme'\nimport { ICON_NAMES, type IconName } from '../../icons/names'\nimport { Icon } from '../Icon'\nimport { useChoiceCardGroupContext } from './choiceCardContext'\nimport styles from './ChoiceCard.module.css'\n\nconst ICON_NAME_SET = new Set<string>(ICON_NAMES)\n\nexport type ChoiceCardSize = 'sm' | 'md' | 'lg'\nexport type ChoiceCardAlign = 'left' | 'center'\n\nexport interface ChoiceCardProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'size' | 'color' | 'type' | 'onChange' | 'value'\n> {\n /** This card's value — selected when the surrounding `ChoiceCardGroup`'s value holds it. */\n value: string\n /** Card title. */\n label?: ReactNode\n /** Muted description line under the title. */\n description?: ReactNode\n /** Leading icon in a tinted circle — a known `IconName` or any node. Optional. */\n icon?: IconName | ReactNode\n /**\n * Content alignment. `center` centers the icon + text stack; `left` anchors the same stack to the\n * left edge (icon above left-aligned text). Defaults to the group's `align`, else `center` with an\n * icon and `left` without one.\n */\n align?: ChoiceCardAlign\n /** Theme palette token for the selected tint. Defaults to `primary` (inherits the group's `color`). */\n color?: ThemeColor\n /** Preset size — padding, icon circle and fonts. Inherits the group's `size` when omitted. */\n size?: ChoiceCardSize\n /** Marks the card invalid — reddens the border + indicator. Inherits the group's `error`. */\n error?: boolean\n /** Controlled selected state for standalone use (inside a `ChoiceCardGroup` the group drives this). */\n checked?: boolean\n /** Fires with the next selected state (standalone use). */\n onChange?: (checked: boolean) => void\n}\n\n/**\n * A selectable card — a rich checkbox/radio with an icon, title and description. The native input is\n * visually hidden but fully accessible (Space toggles; in an `exclusive` group the cards are real\n * radios, so Arrow keys rove between them); the card shows the state with a `color` border + soft halo,\n * a top-right tick indicator, and an icon circle that fills with the color while selected. Designed to\n * live inside a `<ChoiceCardGroup>` (which supplies the selection, `exclusive` mode and\n * `size`/`color`/`disabled`/`error` via context), but also works standalone as a single fancy checkbox\n * (`checked` + `onChange`). Styling uses `--tz-*` tokens via the shared `--tz-btn-rgb` pattern.\n */\nexport const ChoiceCard = forwardRef<HTMLInputElement, ChoiceCardProps>(function ChoiceCard(\n {\n value,\n label,\n description,\n icon,\n align,\n color,\n size,\n error,\n checked,\n onChange,\n name,\n disabled,\n className,\n style,\n ...props\n },\n ref,\n) {\n const group = useChoiceCardGroupContext()\n\n const resolvedColor = color ?? group?.color ?? 'primary'\n const resolvedSize = size ?? group?.size ?? 'md'\n const resolvedError = error ?? group?.error ?? false\n const resolvedDisabled = disabled ?? group?.disabled ?? false\n const resolvedName = name ?? group?.name\n // explicit prop → group's align → smart default (an icon centers the card, no icon reads as a row)\n const resolvedAlign = align ?? group?.align ?? (icon == null ? 'left' : 'center')\n\n // In a group the selection comes from context; standalone it's controlled (`checked`) or local.\n const [internal, setInternal] = useState(false)\n const isChecked = group ? group.isSelected(value) : checked !== undefined ? checked : internal\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n if (resolvedDisabled) return\n if (group) {\n group.toggle(value)\n return\n }\n if (checked === undefined) setInternal(event.target.checked)\n onChange?.(event.target.checked)\n }\n\n const iconNode =\n typeof icon === 'string' && ICON_NAME_SET.has(icon) ? (\n <Icon name={icon as IconName} size={resolvedSize} />\n ) : (\n icon\n )\n\n return (\n <label\n className={clsx(\n styles.card,\n styles[resolvedSize],\n resolvedAlign === 'left' && styles.left,\n isChecked && styles.selected,\n resolvedError && styles.error,\n resolvedDisabled && styles.disabled,\n className,\n )}\n style={\n {\n '--tz-btn-rgb': `var(--tz-color-${resolvedColor}-rgb)`,\n '--tz-btn-on': `var(--tz-color-${resolvedColor}-contrast, #fff)`,\n ...style,\n } as CSSProperties\n }\n >\n <input\n ref={ref}\n type={group?.exclusive ? 'radio' : 'checkbox'}\n className={styles.input}\n name={resolvedName}\n value={value}\n checked={isChecked}\n onChange={handleChange}\n disabled={resolvedDisabled}\n aria-invalid={resolvedError || undefined}\n {...props}\n />\n {/* top-right selection indicator — radio-style ring + dot in exclusive groups (mirrors Radio),\n else a circle that fills with the theme color + a CSS tick (checkbox semantics) */}\n <span\n className={clsx(styles.indicator, group?.exclusive && styles.radioDot)}\n aria-hidden=\"true\"\n />\n {icon != null && (\n <span className={styles.iconBox} aria-hidden=\"true\">\n {iconNode}\n </span>\n )}\n {(label != null || description != null) && (\n <span className={styles.text}>\n {label != null && <span className={styles.label}>{label}</span>}\n {description != null && <span className={styles.description}>{description}</span>}\n </span>\n )}\n </label>\n )\n})\n","import {\n forwardRef,\n useId,\n useState,\n type CSSProperties,\n type HTMLAttributes,\n type ReactNode,\n} from 'react'\nimport { clsx } from 'clsx'\nimport { useFormContext } from '../../form/formContext'\nimport type { ThemeColor } from '../../theme'\nimport type { IconName } from '../../icons/names'\nimport { Typography } from '../Typography'\nimport { ChoiceCard, type ChoiceCardAlign, type ChoiceCardSize } from './ChoiceCard'\nimport { ChoiceCardGroupContext, type ChoiceCardGroupContextValue } from './choiceCardContext'\nimport styles from './ChoiceCard.module.css'\n\n/** A single card for the data-driven `options` prop. */\nexport interface ChoiceCardOption {\n value: string\n /** Card title. */\n label?: ReactNode\n /** Muted description line under the title. */\n description?: ReactNode\n /** Leading icon in a tinted circle — a known `IconName` or any node. */\n icon?: IconName | ReactNode\n disabled?: boolean\n}\n\nexport interface ChoiceCardGroupProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n 'color' | 'onChange' | 'defaultValue'\n> {\n /**\n * Single-selection (radio semantics — the cards are native radios, `value` is a `string | null`,\n * clicking the selected card keeps it selected) vs multiple (checkbox semantics — `value` is a\n * `string[]`). Defaults to `false` (multiple).\n */\n exclusive?: boolean\n /** Controlled value — a `string | null` when `exclusive`, else a `string[]`. */\n value?: string | string[] | null\n /** Initial value for uncontrolled use (same shape as `value`). */\n defaultValue?: string | string[] | null\n /** Fires with the next value (matches the `exclusive` shape). */\n onChange?: (value: string | string[] | null) => void\n /**\n * Input `name` — shared by the radios in `exclusive` mode, and the `<Form>` binding key (form value:\n * `string` when `exclusive`, else `string[]`). Auto-generated when omitted.\n */\n name?: string\n /** Data-driven cards — an alternative to passing `<ChoiceCard>` children. */\n options?: ChoiceCardOption[]\n /** Group label rendered above the cards. */\n label?: ReactNode\n /** Minimum card width in px — the grid fits as many per row as this allows. Defaults to `160`. */\n minCardWidth?: number\n /**\n * Content alignment for every card. `center` centers the icon + text stack; `left` anchors the same\n * stack to the left edge (icon above left-aligned text). Omit for the smart default — cards with an\n * icon center, icon-less cards left-align. A card's own `align` wins.\n */\n align?: ChoiceCardAlign\n /** Preset size for every card. Defaults to `md`. */\n size?: ChoiceCardSize\n /** Theme palette token for the selected tint. Defaults to `primary`. */\n color?: ThemeColor\n /** Marks the group invalid — reddens the card borders (no message text, like `RadioGroup`). */\n error?: boolean\n /** Adds a red asterisk after the label. */\n required?: boolean\n /** Disables every card in the group. */\n disabled?: boolean\n /** `<ChoiceCard>` children (used when `options` is not given). */\n children?: ReactNode\n}\n\n/**\n * A group of selectable cards — rich checkboxes/radios with icons, titles and descriptions (role\n * pickers, plan choices, permission sets). **`exclusive`** picks single-selection (radio semantics —\n * `value` is a `string | null` and Arrow keys rove between the cards) vs multiple (checkbox semantics —\n * `value` is a `string[]`); defaults to `false` (multiple). Controlled (`value` + `onChange`) or\n * uncontrolled (`defaultValue`); supply the cards via the data-driven `options` prop (`{ value, label,\n * description?, icon?, disabled? }[]`) or as `<ChoiceCard>` children. The cards lay out on a\n * **responsive grid** (`minCardWidth`, default `160` — as many per row as fit, wrapping below). Binds\n * to a surrounding `<Form>` by **`name`** — the form value is a `string` when `exclusive` (validate\n * with e.g. `z.string().min(1)`), else a `string[]` (`z.array(z.string()).min(1)`); the form's `error`\n * reddens the card borders (no message text, like `RadioGroup`). `role=\"radiogroup\"` / `\"group\"`;\n * styling uses `--tz-*` tokens via the shared `--tz-btn-rgb` pattern.\n */\nexport const ChoiceCardGroup = forwardRef<HTMLDivElement, ChoiceCardGroupProps>(\n function ChoiceCardGroup(\n {\n exclusive = false,\n value,\n defaultValue,\n onChange,\n name,\n options,\n label,\n minCardWidth = 160,\n align,\n size = 'md',\n color = 'primary',\n error,\n required = false,\n disabled = false,\n children,\n className,\n style,\n ...props\n },\n ref,\n ) {\n // exclusive cards are native radios — they need a shared input name even without a form\n const reactId = useId()\n const resolvedName = name ?? `choice-${reactId}`\n\n // Auto-bind to a surrounding <Form> by `name` — the form value mirrors the `exclusive` shape.\n const form = useFormContext()\n const isFormBound = Boolean(form && name)\n const bound = form && name ? form.field(name) : undefined\n\n const externalValue: string | string[] | null | undefined =\n value !== undefined\n ? value\n : isFormBound\n ? (form!.values[name!] as string | string[] | null | undefined)\n : undefined\n const isControlled = externalValue !== undefined\n const [internal, setInternal] = useState<string | string[] | null | undefined>(defaultValue)\n const current = isControlled ? externalValue : internal\n\n const resolvedError = error ?? bound?.error ?? false\n\n const isSelected = (v: string) =>\n exclusive ? current === v : Array.isArray(current) && current.includes(v)\n\n const toggle = (v: string) => {\n let next: string | string[] | null\n if (exclusive) {\n next = v // radio semantics — selecting again keeps it selected\n } else {\n const arr = Array.isArray(current) ? current : []\n next = arr.includes(v) ? arr.filter((x) => x !== v) : [...arr, v]\n }\n if (!isControlled) setInternal(next)\n if (isFormBound) form!.setValue(name!, next)\n onChange?.(next)\n }\n\n const ctx: ChoiceCardGroupContextValue = {\n name: resolvedName,\n exclusive,\n isSelected,\n toggle,\n size,\n align,\n color,\n disabled,\n error: resolvedError,\n }\n\n return (\n <div\n ref={ref}\n role={exclusive ? 'radiogroup' : 'group'}\n aria-invalid={resolvedError || undefined}\n className={clsx(styles.group, className)}\n style={style as CSSProperties}\n {...props}\n >\n {label != null && (\n <span className={styles.groupLabel}>\n <Typography as=\"span\" variant=\"bodySmall\" color=\"muted\">\n {label}\n </Typography>\n {required && (\n <span className={styles.required} aria-hidden=\"true\">\n *\n </span>\n )}\n </span>\n )}\n\n <div className={styles.grid} style={{ '--cc-min': `${minCardWidth}px` } as CSSProperties}>\n <ChoiceCardGroupContext.Provider value={ctx}>\n {options\n ? options.map((option) => (\n <ChoiceCard\n key={option.value}\n value={option.value}\n label={option.label}\n description={option.description}\n icon={option.icon}\n disabled={option.disabled}\n />\n ))\n : children}\n </ChoiceCardGroupContext.Provider>\n </div>\n </div>\n )\n },\n)\n"],"names":["ChoiceCardGroupContext","createContext","useChoiceCardGroupContext","useContext","ICON_NAME_SET","ICON_NAMES","ChoiceCard","forwardRef","value","label","description","icon","align","color","size","error","checked","onChange","name","disabled","className","style","props","ref","group","resolvedColor","resolvedSize","resolvedError","resolvedDisabled","resolvedName","resolvedAlign","internal","setInternal","useState","isChecked","handleChange","event","iconNode","jsx","Icon","jsxs","clsx","styles","ChoiceCardGroup","exclusive","defaultValue","options","minCardWidth","required","children","reactId","useId","form","useFormContext","isFormBound","bound","externalValue","isControlled","current","ctx","v","next","arr","x","Typography","option"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ChoiceCardGroup-Cj_YFj6C.cjs","sources":["../src/components/ChoiceCard/choiceCardContext.ts","../src/components/ChoiceCard/ChoiceCard.tsx","../src/components/ChoiceCard/ChoiceCardGroup.tsx"],"sourcesContent":["import { createContext, useContext } from 'react'\nimport type { ThemeColor } from '../../theme'\nimport type { ChoiceCardAlign, ChoiceCardSize } from './ChoiceCard'\n\n/** Shared state a `<ChoiceCardGroup>` hands down to its `<ChoiceCard>` children via context. */\nexport interface ChoiceCardGroupContextValue {\n /** Shared input `name` — in `exclusive` mode the cards are native radios and must share one. */\n name?: string\n /** Single-selection (radio semantics) vs multiple (checkbox semantics). */\n exclusive: boolean\n /** Whether a card's value is currently selected. */\n isSelected: (value: string) => boolean\n /** Select / toggle a value — called by a child `<ChoiceCard>` on change. */\n toggle: (value: string) => void\n size?: ChoiceCardSize\n align?: ChoiceCardAlign\n color?: ThemeColor\n disabled?: boolean\n error?: boolean\n}\n\nexport const ChoiceCardGroupContext = createContext<ChoiceCardGroupContextValue | null>(null)\n\n/** Read the surrounding `<ChoiceCardGroup>` so a `<ChoiceCard>` can wire itself in (or `null` when standalone). */\nexport function useChoiceCardGroupContext(): ChoiceCardGroupContextValue | null {\n return useContext(ChoiceCardGroupContext)\n}\n","import {\n forwardRef,\n useState,\n type ChangeEvent,\n type CSSProperties,\n type InputHTMLAttributes,\n type ReactNode,\n} from 'react'\nimport { clsx } from 'clsx'\nimport type { ThemeColor } from '../../theme'\nimport { ICON_NAMES, type IconName } from '../../icons/names'\nimport { Icon } from '../Icon'\nimport { useChoiceCardGroupContext } from './choiceCardContext'\nimport styles from './ChoiceCard.module.css'\n\nconst ICON_NAME_SET = new Set<string>(ICON_NAMES)\n\nexport type ChoiceCardSize = 'sm' | 'md' | 'lg'\nexport type ChoiceCardAlign = 'left' | 'center'\n\nexport interface ChoiceCardProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'size' | 'color' | 'type' | 'onChange' | 'value'\n> {\n /** This card's value — selected when the surrounding `ChoiceCardGroup`'s value holds it. */\n value: string\n /** Card title. */\n label?: ReactNode\n /** Muted description line under the title. */\n description?: ReactNode\n /** Leading icon in a tinted circle — a known `IconName` or any node. Optional. */\n icon?: IconName | ReactNode\n /**\n * Content alignment. `center` centers the icon + text stack; `left` anchors the same stack to the\n * left edge (icon above left-aligned text). Defaults to the group's `align`, else `center` with an\n * icon and `left` without one.\n */\n align?: ChoiceCardAlign\n /** Theme palette token for the selected tint. Defaults to `primary` (inherits the group's `color`). */\n color?: ThemeColor\n /** Preset size — padding, icon circle and fonts. Inherits the group's `size` when omitted. */\n size?: ChoiceCardSize\n /** Marks the card invalid — reddens the border + indicator. Inherits the group's `error`. */\n error?: boolean\n /** Controlled selected state for standalone use (inside a `ChoiceCardGroup` the group drives this). */\n checked?: boolean\n /** Fires with the next selected state (standalone use). */\n onChange?: (checked: boolean) => void\n}\n\n/**\n * A selectable card — a rich checkbox/radio with an icon, title and description. The native input is\n * visually hidden but fully accessible (Space toggles; in an `exclusive` group the cards are real\n * radios, so Arrow keys rove between them); the card shows the state with a `color` border + soft halo,\n * a top-right tick indicator, and an icon circle that fills with the color while selected. Designed to\n * live inside a `<ChoiceCardGroup>` (which supplies the selection, `exclusive` mode and\n * `size`/`color`/`disabled`/`error` via context), but also works standalone as a single fancy checkbox\n * (`checked` + `onChange`). Styling uses `--tz-*` tokens via the shared `--tz-btn-rgb` pattern.\n */\nexport const ChoiceCard = forwardRef<HTMLInputElement, ChoiceCardProps>(function ChoiceCard(\n {\n value,\n label,\n description,\n icon,\n align,\n color,\n size,\n error,\n checked,\n onChange,\n name,\n disabled,\n className,\n style,\n ...props\n },\n ref,\n) {\n const group = useChoiceCardGroupContext()\n\n const resolvedColor = color ?? group?.color ?? 'primary'\n const resolvedSize = size ?? group?.size ?? 'md'\n const resolvedError = error ?? group?.error ?? false\n const resolvedDisabled = disabled ?? group?.disabled ?? false\n const resolvedName = name ?? group?.name\n // explicit prop → group's align → smart default (an icon centers the card, no icon reads as a row)\n const resolvedAlign = align ?? group?.align ?? (icon == null ? 'left' : 'center')\n\n // In a group the selection comes from context; standalone it's controlled (`checked`) or local.\n const [internal, setInternal] = useState(false)\n const isChecked = group ? group.isSelected(value) : checked !== undefined ? checked : internal\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n if (resolvedDisabled) return\n if (group) {\n group.toggle(value)\n return\n }\n if (checked === undefined) setInternal(event.target.checked)\n onChange?.(event.target.checked)\n }\n\n const iconNode =\n typeof icon === 'string' && ICON_NAME_SET.has(icon) ? (\n <Icon name={icon as IconName} size={resolvedSize} />\n ) : (\n icon\n )\n\n return (\n <label\n className={clsx(\n styles.card,\n styles[resolvedSize],\n resolvedAlign === 'left' && styles.left,\n isChecked && styles.selected,\n resolvedError && styles.error,\n resolvedDisabled && styles.disabled,\n className,\n )}\n style={\n {\n '--tz-btn-rgb': `var(--tz-color-${resolvedColor}-rgb)`,\n '--tz-btn-on': `var(--tz-color-${resolvedColor}-contrast, #fff)`,\n ...style,\n } as CSSProperties\n }\n >\n <input\n ref={ref}\n type={group?.exclusive ? 'radio' : 'checkbox'}\n className={styles.input}\n name={resolvedName}\n value={value}\n checked={isChecked}\n onChange={handleChange}\n disabled={resolvedDisabled}\n aria-invalid={resolvedError || undefined}\n {...props}\n />\n {/* top-right selection indicator — radio-style ring + dot in exclusive groups (mirrors Radio),\n else a circle that fills with the theme color + a CSS tick (checkbox semantics) */}\n <span\n className={clsx(styles.indicator, group?.exclusive && styles.radioDot)}\n aria-hidden=\"true\"\n />\n {icon != null && (\n <span className={styles.iconBox} aria-hidden=\"true\">\n {iconNode}\n </span>\n )}\n {(label != null || description != null) && (\n <span className={styles.text}>\n {label != null && <span className={styles.label}>{label}</span>}\n {description != null && <span className={styles.description}>{description}</span>}\n </span>\n )}\n </label>\n )\n})\n","import {\n forwardRef,\n useId,\n useState,\n type CSSProperties,\n type HTMLAttributes,\n type ReactNode,\n} from 'react'\nimport { clsx } from 'clsx'\nimport { useFormContext } from '../../form/formContext'\nimport type { ThemeColor } from '../../theme'\nimport type { IconName } from '../../icons/names'\nimport { Typography } from '../Typography'\nimport { ChoiceCard, type ChoiceCardAlign, type ChoiceCardSize } from './ChoiceCard'\nimport { ChoiceCardGroupContext, type ChoiceCardGroupContextValue } from './choiceCardContext'\nimport styles from './ChoiceCard.module.css'\n\n/** A single card for the data-driven `options` prop. */\nexport interface ChoiceCardOption {\n value: string\n /** Card title. */\n label?: ReactNode\n /** Muted description line under the title. */\n description?: ReactNode\n /** Leading icon in a tinted circle — a known `IconName` or any node. */\n icon?: IconName | ReactNode\n disabled?: boolean\n}\n\nexport interface ChoiceCardGroupProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n 'color' | 'onChange' | 'defaultValue'\n> {\n /**\n * Single-selection (radio semantics — the cards are native radios, `value` is a `string | null`,\n * clicking the selected card keeps it selected) vs multiple (checkbox semantics — `value` is a\n * `string[]`). Defaults to `false` (multiple).\n */\n exclusive?: boolean\n /** Controlled value — a `string | null` when `exclusive`, else a `string[]`. */\n value?: string | string[] | null\n /** Initial value for uncontrolled use (same shape as `value`). */\n defaultValue?: string | string[] | null\n /** Fires with the next value (matches the `exclusive` shape). */\n onChange?: (value: string | string[] | null) => void\n /**\n * Input `name` — shared by the radios in `exclusive` mode, and the `<Form>` binding key (form value:\n * `string` when `exclusive`, else `string[]`). Auto-generated when omitted.\n */\n name?: string\n /** Data-driven cards — an alternative to passing `<ChoiceCard>` children. */\n options?: ChoiceCardOption[]\n /** Group label rendered above the cards. */\n label?: ReactNode\n /** Minimum card width in px — the grid fits as many per row as this allows. Defaults to `160`. */\n minCardWidth?: number\n /**\n * Content alignment for every card. `center` centers the icon + text stack; `left` anchors the same\n * stack to the left edge (icon above left-aligned text). Omit for the smart default — cards with an\n * icon center, icon-less cards left-align. A card's own `align` wins.\n */\n align?: ChoiceCardAlign\n /** Preset size for every card. Defaults to `md`. */\n size?: ChoiceCardSize\n /** Theme palette token for the selected tint. Defaults to `primary`. */\n color?: ThemeColor\n /** Marks the group invalid — reddens the card borders (no message text, like `RadioGroup`). */\n error?: boolean\n /** Adds a red asterisk after the label. */\n required?: boolean\n /** Disables every card in the group. */\n disabled?: boolean\n /** `<ChoiceCard>` children (used when `options` is not given). */\n children?: ReactNode\n}\n\n/**\n * A group of selectable cards — rich checkboxes/radios with icons, titles and descriptions (role\n * pickers, plan choices, permission sets). **`exclusive`** picks single-selection (radio semantics —\n * `value` is a `string | null` and Arrow keys rove between the cards) vs multiple (checkbox semantics —\n * `value` is a `string[]`); defaults to `false` (multiple). Controlled (`value` + `onChange`) or\n * uncontrolled (`defaultValue`); supply the cards via the data-driven `options` prop (`{ value, label,\n * description?, icon?, disabled? }[]`) or as `<ChoiceCard>` children. The cards lay out on a\n * **responsive grid** (`minCardWidth`, default `160` — as many per row as fit, wrapping below). Binds\n * to a surrounding `<Form>` by **`name`** — the form value is a `string` when `exclusive` (validate\n * with e.g. `z.string().min(1)`), else a `string[]` (`z.array(z.string()).min(1)`); the form's `error`\n * reddens the card borders (no message text, like `RadioGroup`). `role=\"radiogroup\"` / `\"group\"`;\n * styling uses `--tz-*` tokens via the shared `--tz-btn-rgb` pattern.\n */\nexport const ChoiceCardGroup = forwardRef<HTMLDivElement, ChoiceCardGroupProps>(\n function ChoiceCardGroup(\n {\n exclusive = false,\n value,\n defaultValue,\n onChange,\n name,\n options,\n label,\n minCardWidth = 160,\n align,\n size = 'md',\n color = 'primary',\n error,\n required = false,\n disabled = false,\n children,\n className,\n style,\n ...props\n },\n ref,\n ) {\n // exclusive cards are native radios — they need a shared input name even without a form\n const reactId = useId()\n const resolvedName = name ?? `choice-${reactId}`\n\n // Auto-bind to a surrounding <Form> by `name` — the form value mirrors the `exclusive` shape.\n const form = useFormContext()\n const isFormBound = Boolean(form && name)\n const bound = form && name ? form.field(name) : undefined\n\n const externalValue: string | string[] | null | undefined =\n value !== undefined\n ? value\n : isFormBound\n ? (form!.values[name!] as string | string[] | null | undefined)\n : undefined\n const isControlled = externalValue !== undefined\n const [internal, setInternal] = useState<string | string[] | null | undefined>(defaultValue)\n const current = isControlled ? externalValue : internal\n\n const resolvedError = error ?? bound?.error ?? false\n\n const isSelected = (v: string) =>\n exclusive ? current === v : Array.isArray(current) && current.includes(v)\n\n const toggle = (v: string) => {\n let next: string | string[] | null\n if (exclusive) {\n next = v // radio semantics — selecting again keeps it selected\n } else {\n const arr = Array.isArray(current) ? current : []\n next = arr.includes(v) ? arr.filter((x) => x !== v) : [...arr, v]\n }\n if (!isControlled) setInternal(next)\n if (isFormBound) form!.setValue(name!, next)\n onChange?.(next)\n }\n\n const ctx: ChoiceCardGroupContextValue = {\n name: resolvedName,\n exclusive,\n isSelected,\n toggle,\n size,\n align,\n color,\n disabled,\n error: resolvedError,\n }\n\n return (\n <div\n ref={ref}\n role={exclusive ? 'radiogroup' : 'group'}\n aria-invalid={resolvedError || undefined}\n className={clsx(styles.group, className)}\n style={style as CSSProperties}\n {...props}\n >\n {label != null && (\n <span className={styles.groupLabel}>\n <Typography as=\"span\" variant=\"bodySmall\" color=\"muted\">\n {label}\n </Typography>\n {required && (\n <span className={styles.required} aria-hidden=\"true\">\n *\n </span>\n )}\n </span>\n )}\n\n <div className={styles.grid} style={{ '--cc-min': `${minCardWidth}px` } as CSSProperties}>\n <ChoiceCardGroupContext.Provider value={ctx}>\n {options\n ? options.map((option) => (\n <ChoiceCard\n key={option.value}\n value={option.value}\n label={option.label}\n description={option.description}\n icon={option.icon}\n disabled={option.disabled}\n />\n ))\n : children}\n </ChoiceCardGroupContext.Provider>\n </div>\n </div>\n )\n },\n)\n"],"names":["ChoiceCardGroupContext","createContext","useChoiceCardGroupContext","useContext","ICON_NAME_SET","ICON_NAMES","ChoiceCard","forwardRef","value","label","description","icon","align","color","size","error","checked","onChange","name","disabled","className","style","props","ref","group","resolvedColor","resolvedSize","resolvedError","resolvedDisabled","resolvedName","resolvedAlign","internal","setInternal","useState","isChecked","handleChange","event","iconNode","jsx","Icon","jsxs","clsx","styles","ChoiceCardGroup","exclusive","defaultValue","options","minCardWidth","required","children","reactId","useId","form","useFormContext","isFormBound","bound","externalValue","isControlled","current","ctx","v","next","arr","x","Typography","option"],"mappings":"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"}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { jsx as r, jsxs as S } from "react/jsx-runtime";
|
|
2
|
+
import { useContext as P, createContext as R, forwardRef as j, useState as w, useId as H } from "react";
|
|
3
|
+
import { clsx as k } from "clsx";
|
|
4
|
+
import { u as J } from "./formContext-B7ln1Miy.js";
|
|
5
|
+
import { T as K } from "./Typography-ChSuxgkc.js";
|
|
6
|
+
import { b as Q, a as U } from "./Icon-B7DJn8Tw.js";
|
|
7
|
+
const F = R(null);
|
|
8
|
+
function W() {
|
|
9
|
+
return P(F);
|
|
10
|
+
}
|
|
11
|
+
const X = "_group_7s2td_2", Y = "_groupLabel_7s2td_8", Z = "_required_7s2td_13", ee = "_grid_7s2td_17", se = "_card_7s2td_24", te = "_disabled_7s2td_43", re = "_selected_7s2td_43", oe = "_input_7s2td_53", de = "_error_7s2td_57", le = "_left_7s2td_69", ae = "_text_7s2td_73", ce = "_sm_7s2td_79", ie = "_md_7s2td_87", ne = "_lg_7s2td_95", _e = "_indicator_7s2td_119", me = "_radioDot_7s2td_164", ue = "_iconBox_7s2td_187", fe = "_label_7s2td_214", pe = "_description_7s2td_221", s = {
|
|
12
|
+
group: X,
|
|
13
|
+
groupLabel: Y,
|
|
14
|
+
required: Z,
|
|
15
|
+
grid: ee,
|
|
16
|
+
card: se,
|
|
17
|
+
disabled: te,
|
|
18
|
+
selected: re,
|
|
19
|
+
input: oe,
|
|
20
|
+
error: de,
|
|
21
|
+
left: le,
|
|
22
|
+
text: ae,
|
|
23
|
+
sm: ce,
|
|
24
|
+
md: ie,
|
|
25
|
+
lg: ne,
|
|
26
|
+
indicator: _e,
|
|
27
|
+
radioDot: me,
|
|
28
|
+
iconBox: ue,
|
|
29
|
+
label: fe,
|
|
30
|
+
description: pe
|
|
31
|
+
}, be = new Set(U), he = j(function({
|
|
32
|
+
value: d,
|
|
33
|
+
label: i,
|
|
34
|
+
description: n,
|
|
35
|
+
icon: o,
|
|
36
|
+
align: l,
|
|
37
|
+
color: h,
|
|
38
|
+
size: x,
|
|
39
|
+
error: z,
|
|
40
|
+
checked: _,
|
|
41
|
+
onChange: m,
|
|
42
|
+
name: A,
|
|
43
|
+
disabled: I,
|
|
44
|
+
className: B,
|
|
45
|
+
style: D,
|
|
46
|
+
...E
|
|
47
|
+
}, q) {
|
|
48
|
+
const e = W(), v = h ?? (e == null ? void 0 : e.color) ?? "primary", N = x ?? (e == null ? void 0 : e.size) ?? "md", C = z ?? (e == null ? void 0 : e.error) ?? !1, u = I ?? (e == null ? void 0 : e.disabled) ?? !1, c = A ?? (e == null ? void 0 : e.name), y = l ?? (e == null ? void 0 : e.align) ?? (o == null ? "left" : "center"), [f, g] = w(!1), p = e ? e.isSelected(d) : _ !== void 0 ? _ : f, G = (a) => {
|
|
49
|
+
if (!u) {
|
|
50
|
+
if (e) {
|
|
51
|
+
e.toggle(d);
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
_ === void 0 && g(a.target.checked), m == null || m(a.target.checked);
|
|
55
|
+
}
|
|
56
|
+
}, L = typeof o == "string" && be.has(o) ? /* @__PURE__ */ r(Q, { name: o, size: N }) : o;
|
|
57
|
+
return /* @__PURE__ */ S(
|
|
58
|
+
"label",
|
|
59
|
+
{
|
|
60
|
+
className: k(
|
|
61
|
+
s.card,
|
|
62
|
+
s[N],
|
|
63
|
+
y === "left" && s.left,
|
|
64
|
+
p && s.selected,
|
|
65
|
+
C && s.error,
|
|
66
|
+
u && s.disabled,
|
|
67
|
+
B
|
|
68
|
+
),
|
|
69
|
+
style: {
|
|
70
|
+
"--tz-btn-rgb": `var(--tz-color-${v}-rgb)`,
|
|
71
|
+
"--tz-btn-on": `var(--tz-color-${v}-contrast, #fff)`,
|
|
72
|
+
...D
|
|
73
|
+
},
|
|
74
|
+
children: [
|
|
75
|
+
/* @__PURE__ */ r(
|
|
76
|
+
"input",
|
|
77
|
+
{
|
|
78
|
+
ref: q,
|
|
79
|
+
type: e != null && e.exclusive ? "radio" : "checkbox",
|
|
80
|
+
className: s.input,
|
|
81
|
+
name: c,
|
|
82
|
+
value: d,
|
|
83
|
+
checked: p,
|
|
84
|
+
onChange: G,
|
|
85
|
+
disabled: u,
|
|
86
|
+
"aria-invalid": C || void 0,
|
|
87
|
+
...E
|
|
88
|
+
}
|
|
89
|
+
),
|
|
90
|
+
/* @__PURE__ */ r(
|
|
91
|
+
"span",
|
|
92
|
+
{
|
|
93
|
+
className: k(s.indicator, (e == null ? void 0 : e.exclusive) && s.radioDot),
|
|
94
|
+
"aria-hidden": "true"
|
|
95
|
+
}
|
|
96
|
+
),
|
|
97
|
+
o != null && /* @__PURE__ */ r("span", { className: s.iconBox, "aria-hidden": "true", children: L }),
|
|
98
|
+
(i != null || n != null) && /* @__PURE__ */ S("span", { className: s.text, children: [
|
|
99
|
+
i != null && /* @__PURE__ */ r("span", { className: s.label, children: i }),
|
|
100
|
+
n != null && /* @__PURE__ */ r("span", { className: s.description, children: n })
|
|
101
|
+
] })
|
|
102
|
+
]
|
|
103
|
+
}
|
|
104
|
+
);
|
|
105
|
+
}), Ae = j(
|
|
106
|
+
function({
|
|
107
|
+
exclusive: d = !1,
|
|
108
|
+
value: i,
|
|
109
|
+
defaultValue: n,
|
|
110
|
+
onChange: o,
|
|
111
|
+
name: l,
|
|
112
|
+
options: h,
|
|
113
|
+
label: x,
|
|
114
|
+
minCardWidth: z = 160,
|
|
115
|
+
align: _,
|
|
116
|
+
size: m = "md",
|
|
117
|
+
color: A = "primary",
|
|
118
|
+
error: I,
|
|
119
|
+
required: B = !1,
|
|
120
|
+
disabled: D = !1,
|
|
121
|
+
children: E,
|
|
122
|
+
className: q,
|
|
123
|
+
style: e,
|
|
124
|
+
...v
|
|
125
|
+
}, N) {
|
|
126
|
+
const C = H(), u = l ?? `choice-${C}`, c = J(), y = !!(c && l), f = c && l ? c.field(l) : void 0, g = i !== void 0 ? i : y ? c.values[l] : void 0, p = g !== void 0, [G, L] = w(n), a = p ? g : G, T = I ?? (f == null ? void 0 : f.error) ?? !1, O = {
|
|
127
|
+
name: u,
|
|
128
|
+
exclusive: d,
|
|
129
|
+
isSelected: (t) => d ? a === t : Array.isArray(a) && a.includes(t),
|
|
130
|
+
toggle: (t) => {
|
|
131
|
+
let b;
|
|
132
|
+
if (d)
|
|
133
|
+
b = t;
|
|
134
|
+
else {
|
|
135
|
+
const $ = Array.isArray(a) ? a : [];
|
|
136
|
+
b = $.includes(t) ? $.filter((V) => V !== t) : [...$, t];
|
|
137
|
+
}
|
|
138
|
+
p || L(b), y && c.setValue(l, b), o == null || o(b);
|
|
139
|
+
},
|
|
140
|
+
size: m,
|
|
141
|
+
align: _,
|
|
142
|
+
color: A,
|
|
143
|
+
disabled: D,
|
|
144
|
+
error: T
|
|
145
|
+
};
|
|
146
|
+
return /* @__PURE__ */ S(
|
|
147
|
+
"div",
|
|
148
|
+
{
|
|
149
|
+
ref: N,
|
|
150
|
+
role: d ? "radiogroup" : "group",
|
|
151
|
+
"aria-invalid": T || void 0,
|
|
152
|
+
className: k(s.group, q),
|
|
153
|
+
style: e,
|
|
154
|
+
...v,
|
|
155
|
+
children: [
|
|
156
|
+
x != null && /* @__PURE__ */ S("span", { className: s.groupLabel, children: [
|
|
157
|
+
/* @__PURE__ */ r(K, { as: "span", variant: "bodySmall", color: "muted", children: x }),
|
|
158
|
+
B && /* @__PURE__ */ r("span", { className: s.required, "aria-hidden": "true", children: "*" })
|
|
159
|
+
] }),
|
|
160
|
+
/* @__PURE__ */ r("div", { className: s.grid, style: { "--cc-min": `${z}px` }, children: /* @__PURE__ */ r(F.Provider, { value: O, children: h ? h.map((t) => /* @__PURE__ */ r(
|
|
161
|
+
he,
|
|
162
|
+
{
|
|
163
|
+
value: t.value,
|
|
164
|
+
label: t.label,
|
|
165
|
+
description: t.description,
|
|
166
|
+
icon: t.icon,
|
|
167
|
+
disabled: t.disabled
|
|
168
|
+
},
|
|
169
|
+
t.value
|
|
170
|
+
)) : E }) })
|
|
171
|
+
]
|
|
172
|
+
}
|
|
173
|
+
);
|
|
174
|
+
}
|
|
175
|
+
);
|
|
176
|
+
export {
|
|
177
|
+
he as C,
|
|
178
|
+
Ae as a
|
|
179
|
+
};
|
|
180
|
+
//# sourceMappingURL=ChoiceCardGroup-D37XREKV.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChoiceCardGroup-q0yN-TeQ.js","sources":["../src/components/ChoiceCard/choiceCardContext.ts","../src/components/ChoiceCard/ChoiceCard.tsx","../src/components/ChoiceCard/ChoiceCardGroup.tsx"],"sourcesContent":["import { createContext, useContext } from 'react'\nimport type { ThemeColor } from '../../theme'\nimport type { ChoiceCardAlign, ChoiceCardSize } from './ChoiceCard'\n\n/** Shared state a `<ChoiceCardGroup>` hands down to its `<ChoiceCard>` children via context. */\nexport interface ChoiceCardGroupContextValue {\n /** Shared input `name` — in `exclusive` mode the cards are native radios and must share one. */\n name?: string\n /** Single-selection (radio semantics) vs multiple (checkbox semantics). */\n exclusive: boolean\n /** Whether a card's value is currently selected. */\n isSelected: (value: string) => boolean\n /** Select / toggle a value — called by a child `<ChoiceCard>` on change. */\n toggle: (value: string) => void\n size?: ChoiceCardSize\n align?: ChoiceCardAlign\n color?: ThemeColor\n disabled?: boolean\n error?: boolean\n}\n\nexport const ChoiceCardGroupContext = createContext<ChoiceCardGroupContextValue | null>(null)\n\n/** Read the surrounding `<ChoiceCardGroup>` so a `<ChoiceCard>` can wire itself in (or `null` when standalone). */\nexport function useChoiceCardGroupContext(): ChoiceCardGroupContextValue | null {\n return useContext(ChoiceCardGroupContext)\n}\n","import {\n forwardRef,\n useState,\n type ChangeEvent,\n type CSSProperties,\n type InputHTMLAttributes,\n type ReactNode,\n} from 'react'\nimport { clsx } from 'clsx'\nimport type { ThemeColor } from '../../theme'\nimport { ICON_NAMES, type IconName } from '../../icons/names'\nimport { Icon } from '../Icon'\nimport { useChoiceCardGroupContext } from './choiceCardContext'\nimport styles from './ChoiceCard.module.css'\n\nconst ICON_NAME_SET = new Set<string>(ICON_NAMES)\n\nexport type ChoiceCardSize = 'sm' | 'md' | 'lg'\nexport type ChoiceCardAlign = 'left' | 'center'\n\nexport interface ChoiceCardProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'size' | 'color' | 'type' | 'onChange' | 'value'\n> {\n /** This card's value — selected when the surrounding `ChoiceCardGroup`'s value holds it. */\n value: string\n /** Card title. */\n label?: ReactNode\n /** Muted description line under the title. */\n description?: ReactNode\n /** Leading icon in a tinted circle — a known `IconName` or any node. Optional. */\n icon?: IconName | ReactNode\n /**\n * Content alignment. `center` centers the icon + text stack; `left` anchors the same stack to the\n * left edge (icon above left-aligned text). Defaults to the group's `align`, else `center` with an\n * icon and `left` without one.\n */\n align?: ChoiceCardAlign\n /** Theme palette token for the selected tint. Defaults to `primary` (inherits the group's `color`). */\n color?: ThemeColor\n /** Preset size — padding, icon circle and fonts. Inherits the group's `size` when omitted. */\n size?: ChoiceCardSize\n /** Marks the card invalid — reddens the border + indicator. Inherits the group's `error`. */\n error?: boolean\n /** Controlled selected state for standalone use (inside a `ChoiceCardGroup` the group drives this). */\n checked?: boolean\n /** Fires with the next selected state (standalone use). */\n onChange?: (checked: boolean) => void\n}\n\n/**\n * A selectable card — a rich checkbox/radio with an icon, title and description. The native input is\n * visually hidden but fully accessible (Space toggles; in an `exclusive` group the cards are real\n * radios, so Arrow keys rove between them); the card shows the state with a `color` border + soft halo,\n * a top-right tick indicator, and an icon circle that fills with the color while selected. Designed to\n * live inside a `<ChoiceCardGroup>` (which supplies the selection, `exclusive` mode and\n * `size`/`color`/`disabled`/`error` via context), but also works standalone as a single fancy checkbox\n * (`checked` + `onChange`). Styling uses `--tz-*` tokens via the shared `--tz-btn-rgb` pattern.\n */\nexport const ChoiceCard = forwardRef<HTMLInputElement, ChoiceCardProps>(function ChoiceCard(\n {\n value,\n label,\n description,\n icon,\n align,\n color,\n size,\n error,\n checked,\n onChange,\n name,\n disabled,\n className,\n style,\n ...props\n },\n ref,\n) {\n const group = useChoiceCardGroupContext()\n\n const resolvedColor = color ?? group?.color ?? 'primary'\n const resolvedSize = size ?? group?.size ?? 'md'\n const resolvedError = error ?? group?.error ?? false\n const resolvedDisabled = disabled ?? group?.disabled ?? false\n const resolvedName = name ?? group?.name\n // explicit prop → group's align → smart default (an icon centers the card, no icon reads as a row)\n const resolvedAlign = align ?? group?.align ?? (icon == null ? 'left' : 'center')\n\n // In a group the selection comes from context; standalone it's controlled (`checked`) or local.\n const [internal, setInternal] = useState(false)\n const isChecked = group ? group.isSelected(value) : checked !== undefined ? checked : internal\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n if (resolvedDisabled) return\n if (group) {\n group.toggle(value)\n return\n }\n if (checked === undefined) setInternal(event.target.checked)\n onChange?.(event.target.checked)\n }\n\n const iconNode =\n typeof icon === 'string' && ICON_NAME_SET.has(icon) ? (\n <Icon name={icon as IconName} size={resolvedSize} />\n ) : (\n icon\n )\n\n return (\n <label\n className={clsx(\n styles.card,\n styles[resolvedSize],\n resolvedAlign === 'left' && styles.left,\n isChecked && styles.selected,\n resolvedError && styles.error,\n resolvedDisabled && styles.disabled,\n className,\n )}\n style={\n {\n '--tz-btn-rgb': `var(--tz-color-${resolvedColor}-rgb)`,\n '--tz-btn-on': `var(--tz-color-${resolvedColor}-contrast, #fff)`,\n ...style,\n } as CSSProperties\n }\n >\n <input\n ref={ref}\n type={group?.exclusive ? 'radio' : 'checkbox'}\n className={styles.input}\n name={resolvedName}\n value={value}\n checked={isChecked}\n onChange={handleChange}\n disabled={resolvedDisabled}\n aria-invalid={resolvedError || undefined}\n {...props}\n />\n {/* top-right selection indicator — radio-style ring + dot in exclusive groups (mirrors Radio),\n else a circle that fills with the theme color + a CSS tick (checkbox semantics) */}\n <span\n className={clsx(styles.indicator, group?.exclusive && styles.radioDot)}\n aria-hidden=\"true\"\n />\n {icon != null && (\n <span className={styles.iconBox} aria-hidden=\"true\">\n {iconNode}\n </span>\n )}\n {(label != null || description != null) && (\n <span className={styles.text}>\n {label != null && <span className={styles.label}>{label}</span>}\n {description != null && <span className={styles.description}>{description}</span>}\n </span>\n )}\n </label>\n )\n})\n","import {\n forwardRef,\n useId,\n useState,\n type CSSProperties,\n type HTMLAttributes,\n type ReactNode,\n} from 'react'\nimport { clsx } from 'clsx'\nimport { useFormContext } from '../../form/formContext'\nimport type { ThemeColor } from '../../theme'\nimport type { IconName } from '../../icons/names'\nimport { Typography } from '../Typography'\nimport { ChoiceCard, type ChoiceCardAlign, type ChoiceCardSize } from './ChoiceCard'\nimport { ChoiceCardGroupContext, type ChoiceCardGroupContextValue } from './choiceCardContext'\nimport styles from './ChoiceCard.module.css'\n\n/** A single card for the data-driven `options` prop. */\nexport interface ChoiceCardOption {\n value: string\n /** Card title. */\n label?: ReactNode\n /** Muted description line under the title. */\n description?: ReactNode\n /** Leading icon in a tinted circle — a known `IconName` or any node. */\n icon?: IconName | ReactNode\n disabled?: boolean\n}\n\nexport interface ChoiceCardGroupProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n 'color' | 'onChange' | 'defaultValue'\n> {\n /**\n * Single-selection (radio semantics — the cards are native radios, `value` is a `string | null`,\n * clicking the selected card keeps it selected) vs multiple (checkbox semantics — `value` is a\n * `string[]`). Defaults to `false` (multiple).\n */\n exclusive?: boolean\n /** Controlled value — a `string | null` when `exclusive`, else a `string[]`. */\n value?: string | string[] | null\n /** Initial value for uncontrolled use (same shape as `value`). */\n defaultValue?: string | string[] | null\n /** Fires with the next value (matches the `exclusive` shape). */\n onChange?: (value: string | string[] | null) => void\n /**\n * Input `name` — shared by the radios in `exclusive` mode, and the `<Form>` binding key (form value:\n * `string` when `exclusive`, else `string[]`). Auto-generated when omitted.\n */\n name?: string\n /** Data-driven cards — an alternative to passing `<ChoiceCard>` children. */\n options?: ChoiceCardOption[]\n /** Group label rendered above the cards. */\n label?: ReactNode\n /** Minimum card width in px — the grid fits as many per row as this allows. Defaults to `160`. */\n minCardWidth?: number\n /**\n * Content alignment for every card. `center` centers the icon + text stack; `left` anchors the same\n * stack to the left edge (icon above left-aligned text). Omit for the smart default — cards with an\n * icon center, icon-less cards left-align. A card's own `align` wins.\n */\n align?: ChoiceCardAlign\n /** Preset size for every card. Defaults to `md`. */\n size?: ChoiceCardSize\n /** Theme palette token for the selected tint. Defaults to `primary`. */\n color?: ThemeColor\n /** Marks the group invalid — reddens the card borders (no message text, like `RadioGroup`). */\n error?: boolean\n /** Adds a red asterisk after the label. */\n required?: boolean\n /** Disables every card in the group. */\n disabled?: boolean\n /** `<ChoiceCard>` children (used when `options` is not given). */\n children?: ReactNode\n}\n\n/**\n * A group of selectable cards — rich checkboxes/radios with icons, titles and descriptions (role\n * pickers, plan choices, permission sets). **`exclusive`** picks single-selection (radio semantics —\n * `value` is a `string | null` and Arrow keys rove between the cards) vs multiple (checkbox semantics —\n * `value` is a `string[]`); defaults to `false` (multiple). Controlled (`value` + `onChange`) or\n * uncontrolled (`defaultValue`); supply the cards via the data-driven `options` prop (`{ value, label,\n * description?, icon?, disabled? }[]`) or as `<ChoiceCard>` children. The cards lay out on a\n * **responsive grid** (`minCardWidth`, default `160` — as many per row as fit, wrapping below). Binds\n * to a surrounding `<Form>` by **`name`** — the form value is a `string` when `exclusive` (validate\n * with e.g. `z.string().min(1)`), else a `string[]` (`z.array(z.string()).min(1)`); the form's `error`\n * reddens the card borders (no message text, like `RadioGroup`). `role=\"radiogroup\"` / `\"group\"`;\n * styling uses `--tz-*` tokens via the shared `--tz-btn-rgb` pattern.\n */\nexport const ChoiceCardGroup = forwardRef<HTMLDivElement, ChoiceCardGroupProps>(\n function ChoiceCardGroup(\n {\n exclusive = false,\n value,\n defaultValue,\n onChange,\n name,\n options,\n label,\n minCardWidth = 160,\n align,\n size = 'md',\n color = 'primary',\n error,\n required = false,\n disabled = false,\n children,\n className,\n style,\n ...props\n },\n ref,\n ) {\n // exclusive cards are native radios — they need a shared input name even without a form\n const reactId = useId()\n const resolvedName = name ?? `choice-${reactId}`\n\n // Auto-bind to a surrounding <Form> by `name` — the form value mirrors the `exclusive` shape.\n const form = useFormContext()\n const isFormBound = Boolean(form && name)\n const bound = form && name ? form.field(name) : undefined\n\n const externalValue: string | string[] | null | undefined =\n value !== undefined\n ? value\n : isFormBound\n ? (form!.values[name!] as string | string[] | null | undefined)\n : undefined\n const isControlled = externalValue !== undefined\n const [internal, setInternal] = useState<string | string[] | null | undefined>(defaultValue)\n const current = isControlled ? externalValue : internal\n\n const resolvedError = error ?? bound?.error ?? false\n\n const isSelected = (v: string) =>\n exclusive ? current === v : Array.isArray(current) && current.includes(v)\n\n const toggle = (v: string) => {\n let next: string | string[] | null\n if (exclusive) {\n next = v // radio semantics — selecting again keeps it selected\n } else {\n const arr = Array.isArray(current) ? current : []\n next = arr.includes(v) ? arr.filter((x) => x !== v) : [...arr, v]\n }\n if (!isControlled) setInternal(next)\n if (isFormBound) form!.setValue(name!, next)\n onChange?.(next)\n }\n\n const ctx: ChoiceCardGroupContextValue = {\n name: resolvedName,\n exclusive,\n isSelected,\n toggle,\n size,\n align,\n color,\n disabled,\n error: resolvedError,\n }\n\n return (\n <div\n ref={ref}\n role={exclusive ? 'radiogroup' : 'group'}\n aria-invalid={resolvedError || undefined}\n className={clsx(styles.group, className)}\n style={style as CSSProperties}\n {...props}\n >\n {label != null && (\n <span className={styles.groupLabel}>\n <Typography as=\"span\" variant=\"bodySmall\" color=\"muted\">\n {label}\n </Typography>\n {required && (\n <span className={styles.required} aria-hidden=\"true\">\n *\n </span>\n )}\n </span>\n )}\n\n <div className={styles.grid} style={{ '--cc-min': `${minCardWidth}px` } as CSSProperties}>\n <ChoiceCardGroupContext.Provider value={ctx}>\n {options\n ? options.map((option) => (\n <ChoiceCard\n key={option.value}\n value={option.value}\n label={option.label}\n description={option.description}\n icon={option.icon}\n disabled={option.disabled}\n />\n ))\n : children}\n </ChoiceCardGroupContext.Provider>\n </div>\n </div>\n )\n },\n)\n"],"names":["ChoiceCardGroupContext","createContext","useChoiceCardGroupContext","useContext","ICON_NAME_SET","ICON_NAMES","ChoiceCard","forwardRef","value","label","description","icon","align","color","size","error","checked","onChange","name","disabled","className","style","props","ref","group","resolvedColor","resolvedSize","resolvedError","resolvedDisabled","resolvedName","resolvedAlign","internal","setInternal","useState","isChecked","handleChange","event","iconNode","jsx","Icon","jsxs","clsx","styles","ChoiceCardGroup","exclusive","defaultValue","options","minCardWidth","required","children","reactId","useId","form","useFormContext","isFormBound","bound","externalValue","isControlled","current","ctx","v","next","arr","x","Typography","option"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ChoiceCardGroup-D37XREKV.js","sources":["../src/components/ChoiceCard/choiceCardContext.ts","../src/components/ChoiceCard/ChoiceCard.tsx","../src/components/ChoiceCard/ChoiceCardGroup.tsx"],"sourcesContent":["import { createContext, useContext } from 'react'\nimport type { ThemeColor } from '../../theme'\nimport type { ChoiceCardAlign, ChoiceCardSize } from './ChoiceCard'\n\n/** Shared state a `<ChoiceCardGroup>` hands down to its `<ChoiceCard>` children via context. */\nexport interface ChoiceCardGroupContextValue {\n /** Shared input `name` — in `exclusive` mode the cards are native radios and must share one. */\n name?: string\n /** Single-selection (radio semantics) vs multiple (checkbox semantics). */\n exclusive: boolean\n /** Whether a card's value is currently selected. */\n isSelected: (value: string) => boolean\n /** Select / toggle a value — called by a child `<ChoiceCard>` on change. */\n toggle: (value: string) => void\n size?: ChoiceCardSize\n align?: ChoiceCardAlign\n color?: ThemeColor\n disabled?: boolean\n error?: boolean\n}\n\nexport const ChoiceCardGroupContext = createContext<ChoiceCardGroupContextValue | null>(null)\n\n/** Read the surrounding `<ChoiceCardGroup>` so a `<ChoiceCard>` can wire itself in (or `null` when standalone). */\nexport function useChoiceCardGroupContext(): ChoiceCardGroupContextValue | null {\n return useContext(ChoiceCardGroupContext)\n}\n","import {\n forwardRef,\n useState,\n type ChangeEvent,\n type CSSProperties,\n type InputHTMLAttributes,\n type ReactNode,\n} from 'react'\nimport { clsx } from 'clsx'\nimport type { ThemeColor } from '../../theme'\nimport { ICON_NAMES, type IconName } from '../../icons/names'\nimport { Icon } from '../Icon'\nimport { useChoiceCardGroupContext } from './choiceCardContext'\nimport styles from './ChoiceCard.module.css'\n\nconst ICON_NAME_SET = new Set<string>(ICON_NAMES)\n\nexport type ChoiceCardSize = 'sm' | 'md' | 'lg'\nexport type ChoiceCardAlign = 'left' | 'center'\n\nexport interface ChoiceCardProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'size' | 'color' | 'type' | 'onChange' | 'value'\n> {\n /** This card's value — selected when the surrounding `ChoiceCardGroup`'s value holds it. */\n value: string\n /** Card title. */\n label?: ReactNode\n /** Muted description line under the title. */\n description?: ReactNode\n /** Leading icon in a tinted circle — a known `IconName` or any node. Optional. */\n icon?: IconName | ReactNode\n /**\n * Content alignment. `center` centers the icon + text stack; `left` anchors the same stack to the\n * left edge (icon above left-aligned text). Defaults to the group's `align`, else `center` with an\n * icon and `left` without one.\n */\n align?: ChoiceCardAlign\n /** Theme palette token for the selected tint. Defaults to `primary` (inherits the group's `color`). */\n color?: ThemeColor\n /** Preset size — padding, icon circle and fonts. Inherits the group's `size` when omitted. */\n size?: ChoiceCardSize\n /** Marks the card invalid — reddens the border + indicator. Inherits the group's `error`. */\n error?: boolean\n /** Controlled selected state for standalone use (inside a `ChoiceCardGroup` the group drives this). */\n checked?: boolean\n /** Fires with the next selected state (standalone use). */\n onChange?: (checked: boolean) => void\n}\n\n/**\n * A selectable card — a rich checkbox/radio with an icon, title and description. The native input is\n * visually hidden but fully accessible (Space toggles; in an `exclusive` group the cards are real\n * radios, so Arrow keys rove between them); the card shows the state with a `color` border + soft halo,\n * a top-right tick indicator, and an icon circle that fills with the color while selected. Designed to\n * live inside a `<ChoiceCardGroup>` (which supplies the selection, `exclusive` mode and\n * `size`/`color`/`disabled`/`error` via context), but also works standalone as a single fancy checkbox\n * (`checked` + `onChange`). Styling uses `--tz-*` tokens via the shared `--tz-btn-rgb` pattern.\n */\nexport const ChoiceCard = forwardRef<HTMLInputElement, ChoiceCardProps>(function ChoiceCard(\n {\n value,\n label,\n description,\n icon,\n align,\n color,\n size,\n error,\n checked,\n onChange,\n name,\n disabled,\n className,\n style,\n ...props\n },\n ref,\n) {\n const group = useChoiceCardGroupContext()\n\n const resolvedColor = color ?? group?.color ?? 'primary'\n const resolvedSize = size ?? group?.size ?? 'md'\n const resolvedError = error ?? group?.error ?? false\n const resolvedDisabled = disabled ?? group?.disabled ?? false\n const resolvedName = name ?? group?.name\n // explicit prop → group's align → smart default (an icon centers the card, no icon reads as a row)\n const resolvedAlign = align ?? group?.align ?? (icon == null ? 'left' : 'center')\n\n // In a group the selection comes from context; standalone it's controlled (`checked`) or local.\n const [internal, setInternal] = useState(false)\n const isChecked = group ? group.isSelected(value) : checked !== undefined ? checked : internal\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n if (resolvedDisabled) return\n if (group) {\n group.toggle(value)\n return\n }\n if (checked === undefined) setInternal(event.target.checked)\n onChange?.(event.target.checked)\n }\n\n const iconNode =\n typeof icon === 'string' && ICON_NAME_SET.has(icon) ? (\n <Icon name={icon as IconName} size={resolvedSize} />\n ) : (\n icon\n )\n\n return (\n <label\n className={clsx(\n styles.card,\n styles[resolvedSize],\n resolvedAlign === 'left' && styles.left,\n isChecked && styles.selected,\n resolvedError && styles.error,\n resolvedDisabled && styles.disabled,\n className,\n )}\n style={\n {\n '--tz-btn-rgb': `var(--tz-color-${resolvedColor}-rgb)`,\n '--tz-btn-on': `var(--tz-color-${resolvedColor}-contrast, #fff)`,\n ...style,\n } as CSSProperties\n }\n >\n <input\n ref={ref}\n type={group?.exclusive ? 'radio' : 'checkbox'}\n className={styles.input}\n name={resolvedName}\n value={value}\n checked={isChecked}\n onChange={handleChange}\n disabled={resolvedDisabled}\n aria-invalid={resolvedError || undefined}\n {...props}\n />\n {/* top-right selection indicator — radio-style ring + dot in exclusive groups (mirrors Radio),\n else a circle that fills with the theme color + a CSS tick (checkbox semantics) */}\n <span\n className={clsx(styles.indicator, group?.exclusive && styles.radioDot)}\n aria-hidden=\"true\"\n />\n {icon != null && (\n <span className={styles.iconBox} aria-hidden=\"true\">\n {iconNode}\n </span>\n )}\n {(label != null || description != null) && (\n <span className={styles.text}>\n {label != null && <span className={styles.label}>{label}</span>}\n {description != null && <span className={styles.description}>{description}</span>}\n </span>\n )}\n </label>\n )\n})\n","import {\n forwardRef,\n useId,\n useState,\n type CSSProperties,\n type HTMLAttributes,\n type ReactNode,\n} from 'react'\nimport { clsx } from 'clsx'\nimport { useFormContext } from '../../form/formContext'\nimport type { ThemeColor } from '../../theme'\nimport type { IconName } from '../../icons/names'\nimport { Typography } from '../Typography'\nimport { ChoiceCard, type ChoiceCardAlign, type ChoiceCardSize } from './ChoiceCard'\nimport { ChoiceCardGroupContext, type ChoiceCardGroupContextValue } from './choiceCardContext'\nimport styles from './ChoiceCard.module.css'\n\n/** A single card for the data-driven `options` prop. */\nexport interface ChoiceCardOption {\n value: string\n /** Card title. */\n label?: ReactNode\n /** Muted description line under the title. */\n description?: ReactNode\n /** Leading icon in a tinted circle — a known `IconName` or any node. */\n icon?: IconName | ReactNode\n disabled?: boolean\n}\n\nexport interface ChoiceCardGroupProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n 'color' | 'onChange' | 'defaultValue'\n> {\n /**\n * Single-selection (radio semantics — the cards are native radios, `value` is a `string | null`,\n * clicking the selected card keeps it selected) vs multiple (checkbox semantics — `value` is a\n * `string[]`). Defaults to `false` (multiple).\n */\n exclusive?: boolean\n /** Controlled value — a `string | null` when `exclusive`, else a `string[]`. */\n value?: string | string[] | null\n /** Initial value for uncontrolled use (same shape as `value`). */\n defaultValue?: string | string[] | null\n /** Fires with the next value (matches the `exclusive` shape). */\n onChange?: (value: string | string[] | null) => void\n /**\n * Input `name` — shared by the radios in `exclusive` mode, and the `<Form>` binding key (form value:\n * `string` when `exclusive`, else `string[]`). Auto-generated when omitted.\n */\n name?: string\n /** Data-driven cards — an alternative to passing `<ChoiceCard>` children. */\n options?: ChoiceCardOption[]\n /** Group label rendered above the cards. */\n label?: ReactNode\n /** Minimum card width in px — the grid fits as many per row as this allows. Defaults to `160`. */\n minCardWidth?: number\n /**\n * Content alignment for every card. `center` centers the icon + text stack; `left` anchors the same\n * stack to the left edge (icon above left-aligned text). Omit for the smart default — cards with an\n * icon center, icon-less cards left-align. A card's own `align` wins.\n */\n align?: ChoiceCardAlign\n /** Preset size for every card. Defaults to `md`. */\n size?: ChoiceCardSize\n /** Theme palette token for the selected tint. Defaults to `primary`. */\n color?: ThemeColor\n /** Marks the group invalid — reddens the card borders (no message text, like `RadioGroup`). */\n error?: boolean\n /** Adds a red asterisk after the label. */\n required?: boolean\n /** Disables every card in the group. */\n disabled?: boolean\n /** `<ChoiceCard>` children (used when `options` is not given). */\n children?: ReactNode\n}\n\n/**\n * A group of selectable cards — rich checkboxes/radios with icons, titles and descriptions (role\n * pickers, plan choices, permission sets). **`exclusive`** picks single-selection (radio semantics —\n * `value` is a `string | null` and Arrow keys rove between the cards) vs multiple (checkbox semantics —\n * `value` is a `string[]`); defaults to `false` (multiple). Controlled (`value` + `onChange`) or\n * uncontrolled (`defaultValue`); supply the cards via the data-driven `options` prop (`{ value, label,\n * description?, icon?, disabled? }[]`) or as `<ChoiceCard>` children. The cards lay out on a\n * **responsive grid** (`minCardWidth`, default `160` — as many per row as fit, wrapping below). Binds\n * to a surrounding `<Form>` by **`name`** — the form value is a `string` when `exclusive` (validate\n * with e.g. `z.string().min(1)`), else a `string[]` (`z.array(z.string()).min(1)`); the form's `error`\n * reddens the card borders (no message text, like `RadioGroup`). `role=\"radiogroup\"` / `\"group\"`;\n * styling uses `--tz-*` tokens via the shared `--tz-btn-rgb` pattern.\n */\nexport const ChoiceCardGroup = forwardRef<HTMLDivElement, ChoiceCardGroupProps>(\n function ChoiceCardGroup(\n {\n exclusive = false,\n value,\n defaultValue,\n onChange,\n name,\n options,\n label,\n minCardWidth = 160,\n align,\n size = 'md',\n color = 'primary',\n error,\n required = false,\n disabled = false,\n children,\n className,\n style,\n ...props\n },\n ref,\n ) {\n // exclusive cards are native radios — they need a shared input name even without a form\n const reactId = useId()\n const resolvedName = name ?? `choice-${reactId}`\n\n // Auto-bind to a surrounding <Form> by `name` — the form value mirrors the `exclusive` shape.\n const form = useFormContext()\n const isFormBound = Boolean(form && name)\n const bound = form && name ? form.field(name) : undefined\n\n const externalValue: string | string[] | null | undefined =\n value !== undefined\n ? value\n : isFormBound\n ? (form!.values[name!] as string | string[] | null | undefined)\n : undefined\n const isControlled = externalValue !== undefined\n const [internal, setInternal] = useState<string | string[] | null | undefined>(defaultValue)\n const current = isControlled ? externalValue : internal\n\n const resolvedError = error ?? bound?.error ?? false\n\n const isSelected = (v: string) =>\n exclusive ? current === v : Array.isArray(current) && current.includes(v)\n\n const toggle = (v: string) => {\n let next: string | string[] | null\n if (exclusive) {\n next = v // radio semantics — selecting again keeps it selected\n } else {\n const arr = Array.isArray(current) ? current : []\n next = arr.includes(v) ? arr.filter((x) => x !== v) : [...arr, v]\n }\n if (!isControlled) setInternal(next)\n if (isFormBound) form!.setValue(name!, next)\n onChange?.(next)\n }\n\n const ctx: ChoiceCardGroupContextValue = {\n name: resolvedName,\n exclusive,\n isSelected,\n toggle,\n size,\n align,\n color,\n disabled,\n error: resolvedError,\n }\n\n return (\n <div\n ref={ref}\n role={exclusive ? 'radiogroup' : 'group'}\n aria-invalid={resolvedError || undefined}\n className={clsx(styles.group, className)}\n style={style as CSSProperties}\n {...props}\n >\n {label != null && (\n <span className={styles.groupLabel}>\n <Typography as=\"span\" variant=\"bodySmall\" color=\"muted\">\n {label}\n </Typography>\n {required && (\n <span className={styles.required} aria-hidden=\"true\">\n *\n </span>\n )}\n </span>\n )}\n\n <div className={styles.grid} style={{ '--cc-min': `${minCardWidth}px` } as CSSProperties}>\n <ChoiceCardGroupContext.Provider value={ctx}>\n {options\n ? options.map((option) => (\n <ChoiceCard\n key={option.value}\n value={option.value}\n label={option.label}\n description={option.description}\n icon={option.icon}\n disabled={option.disabled}\n />\n ))\n : children}\n </ChoiceCardGroupContext.Provider>\n </div>\n </div>\n )\n },\n)\n"],"names":["ChoiceCardGroupContext","createContext","useChoiceCardGroupContext","useContext","ICON_NAME_SET","ICON_NAMES","ChoiceCard","forwardRef","value","label","description","icon","align","color","size","error","checked","onChange","name","disabled","className","style","props","ref","group","resolvedColor","resolvedSize","resolvedError","resolvedDisabled","resolvedName","resolvedAlign","internal","setInternal","useState","isChecked","handleChange","event","iconNode","jsx","Icon","jsxs","clsx","styles","ChoiceCardGroup","exclusive","defaultValue","options","minCardWidth","required","children","reactId","useId","form","useFormContext","isFormBound","bound","externalValue","isControlled","current","ctx","v","next","arr","x","Typography","option"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var k=Object.create;var b=Object.defineProperty;var q=Object.getOwnPropertyDescriptor;var I=Object.getOwnPropertyNames;var S=Object.getPrototypeOf,g=Object.prototype.hasOwnProperty;var E=(t,e,s,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of I(e))!g.call(t,n)&&n!==s&&b(t,n,{get:()=>e[n],enumerable:!(i=q(e,n))||i.enumerable});return t};var z=(t,e,s)=>(s=t!=null?k(S(t)):{},E(e||!t||!t.__esModule?b(s,"default",{value:t,enumerable:!0}):s,t));const o=require("react/jsx-runtime"),r=require("react"),j=require("clsx"),R=require("./IconButton-wW1o4HHw.cjs"),M=require("./Icon-CBg21lKA.cjs"),P=require("./Tooltip-DmMq5R1x.cjs"),D=require("./ConfigProvider-Cf-awvZs.cjs"),H="_root_wvbjf_4",L="_header_wvbjf_15",O="_title_wvbjf_24",A="_code_wvbjf_34",F="_plain_wvbjf_50",G="_wrap_wvbjf_56",J="_lineNumbers_wvbjf_62",K="_copy_wvbjf_77",c={root:H,header:L,title:O,code:A,plain:F,wrap:G,lineNumbers:J,copy:K},Q=1600,U=r.forwardRef(function({code:e,language:s="tsx",title:i,copyable:n=!0,showLineNumbers:v=!0,maxHeight:_,wrap:x=!1,className:y,style:N,...B},C){const a=D.useT(),[f,h]=r.useState(null),[d,m]=r.useState(!1),u=r.useRef(void 0);r.useEffect(()=>{let l=!1;return import("shiki").then(({codeToHtml:p})=>p(e,{lang:s,theme:"dark-plus"})).then(p=>{l||h(p)}).catch(()=>{l||h(null)}),()=>{l=!0}},[e,s]),r.useEffect(()=>()=>window.clearTimeout(u.current),[]);const T=()=>{var l;(l=navigator.clipboard)==null||l.writeText(e).then(()=>{m(!0),window.clearTimeout(u.current),u.current=window.setTimeout(()=>m(!1),Q)}).catch(()=>{})},w=n&&o.jsx(P.Tooltip,{content:a(d?"codeBlock.copied":"codeBlock.copy"),placement:"left",style:{"--tz-btn-rgb":"255, 255, 255","--tz-btn-on":"#1e1e1e"},children:o.jsx(R.IconButton,{variant:"text",size:"sm",className:c.copy,style:{"--tz-btn-rgb":"255, 255, 255"},"aria-label":a(d?"codeBlock.copied":"codeBlock.copy"),onClick:T,children:o.jsx(M.Icon,{name:d?"CopySuccess":"Copy"})})});return o.jsxs("div",{ref:C,className:j.clsx(c.root,y),style:N,...B,children:[(i!=null||w)&&o.jsxs("div",{className:c.header,children:[o.jsx("span",{className:c.title,children:i}),w]}),o.jsx("div",{className:j.clsx(c.code,x&&c.wrap,v&&c.lineNumbers),style:_!=null?{maxHeight:_}:void 0,children:f!=null?o.jsx("div",{className:c.highlighted,dangerouslySetInnerHTML:{__html:f}}):o.jsx("pre",{className:c.plain,children:o.jsx("code",{children:e})})})]})});exports.CodeBlock=U;
|
|
2
|
+
//# sourceMappingURL=CodeBlock-BnXxxqAW.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CodeBlock-
|
|
1
|
+
{"version":3,"file":"CodeBlock-BnXxxqAW.cjs","sources":["../src/components/CodeBlock/CodeBlock.tsx"],"sourcesContent":["import {\n forwardRef,\n useEffect,\n useRef,\n useState,\n type CSSProperties,\n type HTMLAttributes,\n type ReactNode,\n} from 'react'\nimport { clsx } from 'clsx'\nimport { useT } from '../../theme'\nimport { IconButton } from '../IconButton'\nimport { Icon } from '../Icon'\nimport { Tooltip } from '../Tooltip'\nimport styles from './CodeBlock.module.css'\n\n// how long the copy button shows the \"copied\" tick before reverting\nconst COPIED_RESET_MS = 1600\n\nexport interface CodeBlockProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'title'> {\n /** The source code to render. */\n code: string\n /** Shiki language id (`'tsx'`, `'json'`, `'bash'`, `'css'`, …). Defaults to `'tsx'`. */\n language?: string\n /**\n * Optional label shown on the left of the header bar (e.g. a filename). The header bar itself always\n * renders (whenever `copyable`), so the copy button lives in it with or without a `title`.\n */\n title?: ReactNode\n /** Show a copy-to-clipboard button (in the header bar). Defaults to `true`. */\n copyable?: boolean\n /** Show line numbers. Defaults to `true`. */\n showLineNumbers?: boolean\n /** Cap the block height in px — taller code scrolls inside. */\n maxHeight?: number\n /** Soft-wrap long lines instead of scrolling horizontally. Defaults to `false`. */\n wrap?: boolean\n}\n\n/**\n * A syntax-highlighted code block with **VS Code colors** — powered by **Shiki** (an optional peer,\n * `npm i shiki`), the actual VS Code highlighting engine, using its **`dark-plus`** theme. The block\n * is **always dark** (in both app modes) — code reads best on a dark surface, and the deep background\n * anchors it regardless of the surrounding light/dark theme. Highlighting is **async and lazy**\n * (`import('shiki')` on first render); until it lands — or if `shiki` isn't installed / the language\n * is unknown — the block shows the plain code (on the same dark surface), so nothing breaks. A header\n * bar always renders (whenever `copyable`, default `true`) and holds the copy button — which flips to a\n * tick on click — with an optional `title` (e.g. a filename) on its left; `showLineNumbers` (default\n * `true`), `maxHeight` (scrolls inside) and `wrap` shape the body. The whole block\n * keeps VS Code's own dark colors (a deliberate literal-color exception, like the Modal scrim); only\n * the outer radius uses a `--tz-*` token (the border is a literal white-alpha hairline).\n */\nexport const CodeBlock = forwardRef<HTMLDivElement, CodeBlockProps>(function CodeBlock(\n {\n code,\n language = 'tsx',\n title,\n copyable = true,\n showLineNumbers = true,\n maxHeight,\n wrap = false,\n className,\n style,\n ...props\n },\n ref,\n) {\n const t = useT()\n const [html, setHtml] = useState<string | null>(null)\n const [copied, setCopied] = useState(false)\n const copyTimer = useRef<number | undefined>(undefined)\n\n // highlight asynchronously — shiki is an optional peer, loaded lazily on first use; a missing\n // package or an unknown language just leaves the plain (unhighlighted) fallback in place\n useEffect(() => {\n let cancelled = false\n import('shiki')\n .then(({ codeToHtml }) =>\n codeToHtml(code, {\n lang: language,\n // always VS Code's dark theme — the block stays dark in both app modes\n theme: 'dark-plus',\n }),\n )\n .then((out) => {\n if (!cancelled) setHtml(out)\n })\n .catch(() => {\n if (!cancelled) setHtml(null)\n })\n return () => {\n cancelled = true\n }\n }, [code, language])\n\n useEffect(() => () => window.clearTimeout(copyTimer.current), [])\n\n const handleCopy = () => {\n navigator.clipboard\n ?.writeText(code)\n .then(() => {\n setCopied(true)\n window.clearTimeout(copyTimer.current)\n copyTimer.current = window.setTimeout(() => setCopied(false), COPIED_RESET_MS)\n })\n .catch(() => {})\n }\n\n const copyButton = copyable && (\n // the tooltip is hover/focus-driven; clicking flips `copied`, so its content updates to \"Copied!\"\n // while it's still open (the pointer is on the button). `left` keeps it inside the block's\n // `overflow: hidden` bounds.\n <Tooltip\n content={copied ? t('codeBlock.copied') : t('codeBlock.copy')}\n placement=\"left\"\n // always a white pill with dark text over the (always-dark) block — set via `style` so it beats\n // Tooltip's own color-derived --tz-btn-rgb (which is spread before the consumer `style`)\n style={{ '--tz-btn-rgb': '255, 255, 255', '--tz-btn-on': '#1e1e1e' } as CSSProperties}\n >\n <IconButton\n variant=\"text\"\n size=\"sm\"\n className={styles.copy}\n // force the button light over the dark surface — passed via `style` so it beats IconButton's\n // own inline `--tz-btn-rgb` (which is spread before the consumer `style`, so this wins)\n style={{ '--tz-btn-rgb': '255, 255, 255' } as CSSProperties}\n aria-label={copied ? t('codeBlock.copied') : t('codeBlock.copy')}\n onClick={handleCopy}\n >\n <Icon name={copied ? 'CopySuccess' : 'Copy'} />\n </IconButton>\n </Tooltip>\n )\n\n return (\n <div ref={ref} className={clsx(styles.root, className)} style={style} {...props}>\n {/* the header bar always renders whenever there's a title or a copy button — so the copy icon\n lives in the bar (top-right), never floating over the code */}\n {(title != null || copyButton) && (\n <div className={styles.header}>\n <span className={styles.title}>{title}</span>\n {copyButton}\n </div>\n )}\n <div\n className={clsx(styles.code, wrap && styles.wrap, showLineNumbers && styles.lineNumbers)}\n style={maxHeight != null ? ({ maxHeight } as CSSProperties) : undefined}\n >\n {html != null ? (\n // shiki output is trusted markup — it escapes the source code itself\n <div className={styles.highlighted} dangerouslySetInnerHTML={{ __html: html }} />\n ) : (\n <pre className={styles.plain}>\n <code>{code}</code>\n </pre>\n )}\n </div>\n </div>\n )\n})\n"],"names":["COPIED_RESET_MS","CodeBlock","forwardRef","code","language","title","copyable","showLineNumbers","maxHeight","wrap","className","style","props","ref","t","useT","html","setHtml","useState","copied","setCopied","copyTimer","useRef","useEffect","cancelled","codeToHtml","out","handleCopy","_a","copyButton","jsx","Tooltip","IconButton","styles","Icon","jsxs","clsx"],"mappings":"k6BAiBMA,EAAkB,KAmCXC,EAAYC,EAAAA,WAA2C,SAClE,CACE,KAAAC,EACA,SAAAC,EAAW,MACX,MAAAC,EACA,SAAAC,EAAW,GACX,gBAAAC,EAAkB,GAClB,UAAAC,EACA,KAAAC,EAAO,GACP,UAAAC,EACA,MAAAC,EACA,GAAGC,CACL,EACAC,EACA,CACA,MAAMC,EAAIC,EAAAA,KAAA,EACJ,CAACC,EAAMC,CAAO,EAAIC,EAAAA,SAAwB,IAAI,EAC9C,CAACC,EAAQC,CAAS,EAAIF,EAAAA,SAAS,EAAK,EACpCG,EAAYC,EAAAA,OAA2B,MAAS,EAItDC,EAAAA,UAAU,IAAM,CACd,IAAIC,EAAY,GAChB,cAAO,OAAO,EACX,KAAK,CAAC,CAAE,WAAAC,CAAA,IACPA,EAAWtB,EAAM,CACf,KAAMC,EAEN,MAAO,WAAA,CACR,CAAA,EAEF,KAAMsB,GAAQ,CACRF,GAAWP,EAAQS,CAAG,CAC7B,CAAC,EACA,MAAM,IAAM,CACNF,GAAWP,EAAQ,IAAI,CAC9B,CAAC,EACI,IAAM,CACXO,EAAY,EACd,CACF,EAAG,CAACrB,EAAMC,CAAQ,CAAC,EAEnBmB,EAAAA,UAAU,IAAM,IAAM,OAAO,aAAaF,EAAU,OAAO,EAAG,EAAE,EAEhE,MAAMM,EAAa,IAAM,QACvBC,EAAA,UAAU,YAAV,MAAAA,EACI,UAAUzB,GACX,KAAK,IAAM,CACViB,EAAU,EAAI,EACd,OAAO,aAAaC,EAAU,OAAO,EACrCA,EAAU,QAAU,OAAO,WAAW,IAAMD,EAAU,EAAK,EAAGpB,CAAe,CAC/E,GACC,MAAM,IAAM,CAAC,EAClB,EAEM6B,EAAavB,GAIjBwB,EAAAA,IAACC,EAAAA,QAAA,CACC,QAAkBjB,EAATK,EAAW,mBAAwB,gBAAN,EACtC,UAAU,OAGV,MAAO,CAAE,eAAgB,gBAAiB,cAAe,SAAA,EAEzD,SAAAW,EAAAA,IAACE,EAAAA,WAAA,CACC,QAAQ,OACR,KAAK,KACL,UAAWC,EAAO,KAGlB,MAAO,CAAE,eAAgB,eAAA,EACzB,aAAqBnB,EAATK,EAAW,mBAAwB,gBAAN,EACzC,QAASQ,EAET,SAAAG,EAAAA,IAACI,OAAA,CAAK,KAAMf,EAAS,cAAgB,MAAA,CAAQ,CAAA,CAAA,CAC/C,CAAA,EAIJ,OACEgB,EAAAA,KAAC,MAAA,CAAI,IAAAtB,EAAU,UAAWuB,EAAAA,KAAKH,EAAO,KAAMvB,CAAS,EAAG,MAAAC,EAAe,GAAGC,EAGtE,SAAA,EAAAP,GAAS,MAAQwB,IACjBM,EAAAA,KAAC,MAAA,CAAI,UAAWF,EAAO,OACrB,SAAA,CAAAH,EAAAA,IAAC,OAAA,CAAK,UAAWG,EAAO,MAAQ,SAAA5B,EAAM,EACrCwB,CAAA,EACH,EAEFC,EAAAA,IAAC,MAAA,CACC,UAAWM,EAAAA,KAAKH,EAAO,KAAMxB,GAAQwB,EAAO,KAAM1B,GAAmB0B,EAAO,WAAW,EACvF,MAAOzB,GAAa,KAAQ,CAAE,UAAAA,GAAgC,OAE7D,SAAAQ,GAAQ,KAEPc,MAAC,OAAI,UAAWG,EAAO,YAAa,wBAAyB,CAAE,OAAQjB,EAAK,CAAG,EAE/Ec,EAAAA,IAAC,OAAI,UAAWG,EAAO,MACrB,SAAAH,EAAAA,IAAC,OAAA,CAAM,WAAK,CAAA,CACd,CAAA,CAAA,CAEJ,EACF,CAEJ,CAAC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { jsx as t, jsxs as _ } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef as x, useState as h, useRef as I, useEffect as b } from "react";
|
|
3
|
+
import { clsx as w } from "clsx";
|
|
4
|
+
import { I as S } from "./IconButton-EaExCXRq.js";
|
|
5
|
+
import { b as g } from "./Icon-B7DJn8Tw.js";
|
|
6
|
+
import { T as z } from "./Tooltip-BbT0uNzy.js";
|
|
7
|
+
import { a as E } from "./ConfigProvider-CYgmMH4j.js";
|
|
8
|
+
const R = "_root_wvbjf_4", M = "_header_wvbjf_15", D = "_title_wvbjf_24", H = "_code_wvbjf_34", L = "_plain_wvbjf_50", O = "_wrap_wvbjf_56", P = "_lineNumbers_wvbjf_62", q = "_copy_wvbjf_77", e = {
|
|
9
|
+
root: R,
|
|
10
|
+
header: M,
|
|
11
|
+
title: D,
|
|
12
|
+
code: H,
|
|
13
|
+
plain: L,
|
|
14
|
+
wrap: O,
|
|
15
|
+
lineNumbers: P,
|
|
16
|
+
copy: q
|
|
17
|
+
}, A = 1600, X = x(function({
|
|
18
|
+
code: c,
|
|
19
|
+
language: i = "tsx",
|
|
20
|
+
title: a,
|
|
21
|
+
copyable: v = !0,
|
|
22
|
+
showLineNumbers: y = !0,
|
|
23
|
+
maxHeight: d,
|
|
24
|
+
wrap: N = !1,
|
|
25
|
+
className: j,
|
|
26
|
+
style: T,
|
|
27
|
+
...C
|
|
28
|
+
}, k) {
|
|
29
|
+
const n = E(), [p, m] = h(null), [l, u] = h(!1), r = I(void 0);
|
|
30
|
+
b(() => {
|
|
31
|
+
let o = !1;
|
|
32
|
+
return import("shiki").then(
|
|
33
|
+
({ codeToHtml: s }) => s(c, {
|
|
34
|
+
lang: i,
|
|
35
|
+
// always VS Code's dark theme — the block stays dark in both app modes
|
|
36
|
+
theme: "dark-plus"
|
|
37
|
+
})
|
|
38
|
+
).then((s) => {
|
|
39
|
+
o || m(s);
|
|
40
|
+
}).catch(() => {
|
|
41
|
+
o || m(null);
|
|
42
|
+
}), () => {
|
|
43
|
+
o = !0;
|
|
44
|
+
};
|
|
45
|
+
}, [c, i]), b(() => () => window.clearTimeout(r.current), []);
|
|
46
|
+
const B = () => {
|
|
47
|
+
var o;
|
|
48
|
+
(o = navigator.clipboard) == null || o.writeText(c).then(() => {
|
|
49
|
+
u(!0), window.clearTimeout(r.current), r.current = window.setTimeout(() => u(!1), A);
|
|
50
|
+
}).catch(() => {
|
|
51
|
+
});
|
|
52
|
+
}, f = v && // the tooltip is hover/focus-driven; clicking flips `copied`, so its content updates to "Copied!"
|
|
53
|
+
// while it's still open (the pointer is on the button). `left` keeps it inside the block's
|
|
54
|
+
// `overflow: hidden` bounds.
|
|
55
|
+
/* @__PURE__ */ t(
|
|
56
|
+
z,
|
|
57
|
+
{
|
|
58
|
+
content: n(l ? "codeBlock.copied" : "codeBlock.copy"),
|
|
59
|
+
placement: "left",
|
|
60
|
+
style: { "--tz-btn-rgb": "255, 255, 255", "--tz-btn-on": "#1e1e1e" },
|
|
61
|
+
children: /* @__PURE__ */ t(
|
|
62
|
+
S,
|
|
63
|
+
{
|
|
64
|
+
variant: "text",
|
|
65
|
+
size: "sm",
|
|
66
|
+
className: e.copy,
|
|
67
|
+
style: { "--tz-btn-rgb": "255, 255, 255" },
|
|
68
|
+
"aria-label": n(l ? "codeBlock.copied" : "codeBlock.copy"),
|
|
69
|
+
onClick: B,
|
|
70
|
+
children: /* @__PURE__ */ t(g, { name: l ? "CopySuccess" : "Copy" })
|
|
71
|
+
}
|
|
72
|
+
)
|
|
73
|
+
}
|
|
74
|
+
);
|
|
75
|
+
return /* @__PURE__ */ _("div", { ref: k, className: w(e.root, j), style: T, ...C, children: [
|
|
76
|
+
(a != null || f) && /* @__PURE__ */ _("div", { className: e.header, children: [
|
|
77
|
+
/* @__PURE__ */ t("span", { className: e.title, children: a }),
|
|
78
|
+
f
|
|
79
|
+
] }),
|
|
80
|
+
/* @__PURE__ */ t(
|
|
81
|
+
"div",
|
|
82
|
+
{
|
|
83
|
+
className: w(e.code, N && e.wrap, y && e.lineNumbers),
|
|
84
|
+
style: d != null ? { maxHeight: d } : void 0,
|
|
85
|
+
children: p != null ? (
|
|
86
|
+
// shiki output is trusted markup — it escapes the source code itself
|
|
87
|
+
/* @__PURE__ */ t("div", { className: e.highlighted, dangerouslySetInnerHTML: { __html: p } })
|
|
88
|
+
) : /* @__PURE__ */ t("pre", { className: e.plain, children: /* @__PURE__ */ t("code", { children: c }) })
|
|
89
|
+
}
|
|
90
|
+
)
|
|
91
|
+
] });
|
|
92
|
+
});
|
|
93
|
+
export {
|
|
94
|
+
X as C
|
|
95
|
+
};
|
|
96
|
+
//# sourceMappingURL=CodeBlock-C10JN6DR.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CodeBlock-
|
|
1
|
+
{"version":3,"file":"CodeBlock-C10JN6DR.js","sources":["../src/components/CodeBlock/CodeBlock.tsx"],"sourcesContent":["import {\n forwardRef,\n useEffect,\n useRef,\n useState,\n type CSSProperties,\n type HTMLAttributes,\n type ReactNode,\n} from 'react'\nimport { clsx } from 'clsx'\nimport { useT } from '../../theme'\nimport { IconButton } from '../IconButton'\nimport { Icon } from '../Icon'\nimport { Tooltip } from '../Tooltip'\nimport styles from './CodeBlock.module.css'\n\n// how long the copy button shows the \"copied\" tick before reverting\nconst COPIED_RESET_MS = 1600\n\nexport interface CodeBlockProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'title'> {\n /** The source code to render. */\n code: string\n /** Shiki language id (`'tsx'`, `'json'`, `'bash'`, `'css'`, …). Defaults to `'tsx'`. */\n language?: string\n /**\n * Optional label shown on the left of the header bar (e.g. a filename). The header bar itself always\n * renders (whenever `copyable`), so the copy button lives in it with or without a `title`.\n */\n title?: ReactNode\n /** Show a copy-to-clipboard button (in the header bar). Defaults to `true`. */\n copyable?: boolean\n /** Show line numbers. Defaults to `true`. */\n showLineNumbers?: boolean\n /** Cap the block height in px — taller code scrolls inside. */\n maxHeight?: number\n /** Soft-wrap long lines instead of scrolling horizontally. Defaults to `false`. */\n wrap?: boolean\n}\n\n/**\n * A syntax-highlighted code block with **VS Code colors** — powered by **Shiki** (an optional peer,\n * `npm i shiki`), the actual VS Code highlighting engine, using its **`dark-plus`** theme. The block\n * is **always dark** (in both app modes) — code reads best on a dark surface, and the deep background\n * anchors it regardless of the surrounding light/dark theme. Highlighting is **async and lazy**\n * (`import('shiki')` on first render); until it lands — or if `shiki` isn't installed / the language\n * is unknown — the block shows the plain code (on the same dark surface), so nothing breaks. A header\n * bar always renders (whenever `copyable`, default `true`) and holds the copy button — which flips to a\n * tick on click — with an optional `title` (e.g. a filename) on its left; `showLineNumbers` (default\n * `true`), `maxHeight` (scrolls inside) and `wrap` shape the body. The whole block\n * keeps VS Code's own dark colors (a deliberate literal-color exception, like the Modal scrim); only\n * the outer radius uses a `--tz-*` token (the border is a literal white-alpha hairline).\n */\nexport const CodeBlock = forwardRef<HTMLDivElement, CodeBlockProps>(function CodeBlock(\n {\n code,\n language = 'tsx',\n title,\n copyable = true,\n showLineNumbers = true,\n maxHeight,\n wrap = false,\n className,\n style,\n ...props\n },\n ref,\n) {\n const t = useT()\n const [html, setHtml] = useState<string | null>(null)\n const [copied, setCopied] = useState(false)\n const copyTimer = useRef<number | undefined>(undefined)\n\n // highlight asynchronously — shiki is an optional peer, loaded lazily on first use; a missing\n // package or an unknown language just leaves the plain (unhighlighted) fallback in place\n useEffect(() => {\n let cancelled = false\n import('shiki')\n .then(({ codeToHtml }) =>\n codeToHtml(code, {\n lang: language,\n // always VS Code's dark theme — the block stays dark in both app modes\n theme: 'dark-plus',\n }),\n )\n .then((out) => {\n if (!cancelled) setHtml(out)\n })\n .catch(() => {\n if (!cancelled) setHtml(null)\n })\n return () => {\n cancelled = true\n }\n }, [code, language])\n\n useEffect(() => () => window.clearTimeout(copyTimer.current), [])\n\n const handleCopy = () => {\n navigator.clipboard\n ?.writeText(code)\n .then(() => {\n setCopied(true)\n window.clearTimeout(copyTimer.current)\n copyTimer.current = window.setTimeout(() => setCopied(false), COPIED_RESET_MS)\n })\n .catch(() => {})\n }\n\n const copyButton = copyable && (\n // the tooltip is hover/focus-driven; clicking flips `copied`, so its content updates to \"Copied!\"\n // while it's still open (the pointer is on the button). `left` keeps it inside the block's\n // `overflow: hidden` bounds.\n <Tooltip\n content={copied ? t('codeBlock.copied') : t('codeBlock.copy')}\n placement=\"left\"\n // always a white pill with dark text over the (always-dark) block — set via `style` so it beats\n // Tooltip's own color-derived --tz-btn-rgb (which is spread before the consumer `style`)\n style={{ '--tz-btn-rgb': '255, 255, 255', '--tz-btn-on': '#1e1e1e' } as CSSProperties}\n >\n <IconButton\n variant=\"text\"\n size=\"sm\"\n className={styles.copy}\n // force the button light over the dark surface — passed via `style` so it beats IconButton's\n // own inline `--tz-btn-rgb` (which is spread before the consumer `style`, so this wins)\n style={{ '--tz-btn-rgb': '255, 255, 255' } as CSSProperties}\n aria-label={copied ? t('codeBlock.copied') : t('codeBlock.copy')}\n onClick={handleCopy}\n >\n <Icon name={copied ? 'CopySuccess' : 'Copy'} />\n </IconButton>\n </Tooltip>\n )\n\n return (\n <div ref={ref} className={clsx(styles.root, className)} style={style} {...props}>\n {/* the header bar always renders whenever there's a title or a copy button — so the copy icon\n lives in the bar (top-right), never floating over the code */}\n {(title != null || copyButton) && (\n <div className={styles.header}>\n <span className={styles.title}>{title}</span>\n {copyButton}\n </div>\n )}\n <div\n className={clsx(styles.code, wrap && styles.wrap, showLineNumbers && styles.lineNumbers)}\n style={maxHeight != null ? ({ maxHeight } as CSSProperties) : undefined}\n >\n {html != null ? (\n // shiki output is trusted markup — it escapes the source code itself\n <div className={styles.highlighted} dangerouslySetInnerHTML={{ __html: html }} />\n ) : (\n <pre className={styles.plain}>\n <code>{code}</code>\n </pre>\n )}\n </div>\n </div>\n )\n})\n"],"names":["COPIED_RESET_MS","CodeBlock","forwardRef","code","language","title","copyable","showLineNumbers","maxHeight","wrap","className","style","props","ref","t","useT","html","setHtml","useState","copied","setCopied","copyTimer","useRef","useEffect","cancelled","codeToHtml","out","handleCopy","_a","copyButton","jsx","Tooltip","IconButton","styles","Icon","jsxs","clsx"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";const r=require("react/jsx-runtime"),t=require("react"),p=require("clsx"),Y=require("./formContext-bTWrqdEV.cjs"),Z=require("./FloatingPanel-tGCG2nhA.cjs"),w=require("./Typography-d97DdbNd.cjs"),e=require("./ColorPickerPanel-
|
|
2
|
-
//# sourceMappingURL=ColorPicker-
|
|
1
|
+
"use strict";const r=require("react/jsx-runtime"),t=require("react"),p=require("clsx"),Y=require("./formContext-bTWrqdEV.cjs"),Z=require("./FloatingPanel-tGCG2nhA.cjs"),w=require("./Typography-d97DdbNd.cjs"),e=require("./ColorPickerPanel-DJY6-EqO.cjs"),ee=require("./ConfigProvider-Cf-awvZs.cjs"),se=232,re=t.forwardRef(function({label:y,size:S="md",error:V,helperText:E,required:O=!1,fullWidth:H=!0,disabled:P=!1,value:C,defaultValue:W,onChange:f,swatches:D,alpha:L=!0,name:o,placeholder:g,id:U,className:_,style:$},a){const j=ee.useT(),z=t.useId(),x=U??z,k=`${x}-helper`,c=Y.useFormContext(),T=!!(c&&o),l=c&&o?c.field(o):void 0,q=C!==void 0?C:T?c.values[o]??"":void 0,R=q!==void 0,[A,G]=t.useState(W??""),N=R?q:A,i=e.parseColor(N||""),u=i?e.formatColor(i):null,J=u?u[0]==="#"?u.toUpperCase():u:null,v=V??(l==null?void 0:l.error)??!1,h=E??(l==null?void 0:l.helperText),K=s=>{R||G(s),T&&c.setValue(o,s),f==null||f(s)},d=t.useRef(null),b=t.useRef(null),[m,B]=t.useState(!1),M=t.useCallback(s=>{d.current=s,typeof a=="function"?a(s):a&&(a.current=s)},[a]),Q=t.useCallback(s=>{var n;B(!1),s&&((n=d.current)==null||n.focus())},[]),X=s=>{var F,I;const n=s.relatedTarget;n&&((F=b.current)!=null&&F.contains(n)||(I=d.current)!=null&&I.contains(n))||l==null||l.onBlur(s)};return r.jsxs("div",{className:p.clsx(e.styles.field,e.styles[S],H&&e.styles.fullWidth,v&&e.styles.error,P&&e.styles.disabled,_),style:$,children:[y!=null&&r.jsxs("label",{htmlFor:x,className:e.styles.label,children:[r.jsx(w.Typography,{as:"span",variant:"bodySmall",color:"muted",children:y}),O&&r.jsx("span",{className:e.styles.required,"aria-hidden":"true",children:"*"})]}),r.jsxs("button",{ref:M,id:x,name:o,type:"button",className:p.clsx(e.styles.control,m&&e.styles.open),disabled:P,"aria-haspopup":"dialog","aria-expanded":m,"aria-invalid":v||void 0,"aria-describedby":h!=null?k:void 0,"aria-label":y||i||g?void 0:j("colorPicker.pick"),onClick:()=>B(s=>!s),onBlur:X,children:[r.jsx("span",{className:p.clsx(e.styles.value,!i&&e.styles.placeholder),children:J??g}),r.jsx("span",{className:p.clsx(e.styles.preview,!i&&e.styles.previewEmpty),style:i?{"--cp-fill":u}:void 0,"aria-hidden":"true"})]}),r.jsx(Z.FloatingPanel,{ref:b,open:m,triggerRef:d,onClose:Q,role:"dialog",ariaLabel:j("colorPicker.dialog"),width:se,children:r.jsx(e.ColorPickerPanel,{value:N,onChange:K,swatches:D,alpha:L})}),h!=null&&r.jsx(w.Typography,{as:"span",id:k,variant:"bodySmall",color:v?"error":"muted",className:e.styles.helper,children:h})]})});exports.ColorPicker=re;
|
|
2
|
+
//# sourceMappingURL=ColorPicker-CVddGc-n.cjs.map
|