@banzamel/mineralui 2.0.0 → 2.1.1
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 +1 -1
- package/dist/{MAvatar-CIvYzQV4.js → MAvatar-BcO8hMnU.js} +2 -2
- package/dist/{MAvatar-CIvYzQV4.js.map → MAvatar-BcO8hMnU.js.map} +1 -1
- package/dist/{MAvatar-BElYyQXH.cjs → MAvatar-C4N2ztLf.cjs} +2 -2
- package/dist/{MAvatar-BElYyQXH.cjs.map → MAvatar-C4N2ztLf.cjs.map} +1 -1
- package/dist/{MButton-ouB6903s.cjs → MButton-B8kFTOPJ.cjs} +2 -2
- package/dist/{MButton-ouB6903s.cjs.map → MButton-B8kFTOPJ.cjs.map} +1 -1
- package/dist/{MButton-C94fZ3l9.js → MButton-C1pnL4_j.js} +1 -1
- package/dist/{MButton-C94fZ3l9.js.map → MButton-C1pnL4_j.js.map} +1 -1
- package/dist/{MButtonGroup-BhGt-Yy1.js → MButtonGroup-BkNf7fzo.js} +2 -2
- package/dist/{MButtonGroup-BhGt-Yy1.js.map → MButtonGroup-BkNf7fzo.js.map} +1 -1
- package/dist/{MButtonGroup-yumQneDa.cjs → MButtonGroup-C3Ar0gfk.cjs} +2 -2
- package/dist/{MButtonGroup-yumQneDa.cjs.map → MButtonGroup-C3Ar0gfk.cjs.map} +1 -1
- package/dist/{MCard-9ucghJJs.js → MCard-dLMQQ97e.js} +2 -2
- package/dist/{MCard-9ucghJJs.js.map → MCard-dLMQQ97e.js.map} +1 -1
- package/dist/{MCard-Bg_R86Gr.cjs → MCard-szs5kIek.cjs} +2 -2
- package/dist/{MCard-Bg_R86Gr.cjs.map → MCard-szs5kIek.cjs.map} +1 -1
- package/dist/{MCheckbox-B-nT2OBE.js → MCheckbox-B7SpcD4H.js} +1 -1
- package/dist/{MCheckbox-B-nT2OBE.js.map → MCheckbox-B7SpcD4H.js.map} +1 -1
- package/dist/{MCheckbox-Cbk5hwzJ.cjs → MCheckbox-CATWU11D.cjs} +2 -2
- package/dist/{MCheckbox-Cbk5hwzJ.cjs.map → MCheckbox-CATWU11D.cjs.map} +1 -1
- package/dist/{MConflictIllustration-DfNfvv7Q.cjs → MConflictIllustration-Mnz1q7Ey.cjs} +2 -2
- package/dist/{MConflictIllustration-DfNfvv7Q.cjs.map → MConflictIllustration-Mnz1q7Ey.cjs.map} +1 -1
- package/dist/{MDetailList-t0ixZflO.cjs → MDetailList-BBgUaSDJ.cjs} +2 -2
- package/dist/{MDetailList-t0ixZflO.cjs.map → MDetailList-BBgUaSDJ.cjs.map} +1 -1
- package/dist/{MDetailList-CELXTmJw.js → MDetailList-zlwdeA-r.js} +2 -2
- package/dist/{MDetailList-CELXTmJw.js.map → MDetailList-zlwdeA-r.js.map} +1 -1
- package/dist/{MDropdownMenu-Coy-0Wee.cjs → MDropdownMenu-1RqWjxHp.cjs} +2 -2
- package/dist/{MDropdownMenu-Coy-0Wee.cjs.map → MDropdownMenu-1RqWjxHp.cjs.map} +1 -1
- package/dist/{MDropdownMenu-BgEtrL-T.js → MDropdownMenu-omTEUh4V.js} +1 -1
- package/dist/{MDropdownMenu-BgEtrL-T.js.map → MDropdownMenu-omTEUh4V.js.map} +1 -1
- package/dist/{MGrid-Di7laCq4.cjs → MGrid-B2qzYD6S.cjs} +2 -2
- package/dist/{MGrid-Di7laCq4.cjs.map → MGrid-B2qzYD6S.cjs.map} +1 -1
- package/dist/{MGrid-yLmEteNw.js → MGrid-Cy44dWyC.js} +1 -1
- package/dist/{MGrid-yLmEteNw.js.map → MGrid-Cy44dWyC.js.map} +1 -1
- package/dist/{MHeading-TJ5yvklz.cjs → MHeading-CyuxSnhl.cjs} +2 -2
- package/dist/{MHeading-TJ5yvklz.cjs.map → MHeading-CyuxSnhl.cjs.map} +1 -1
- package/dist/{MI18nProvider-bf1G7lTP.cjs → MI18nProvider-C90EVyFz.cjs} +2 -2
- package/dist/{MI18nProvider-bf1G7lTP.cjs.map → MI18nProvider-C90EVyFz.cjs.map} +1 -1
- package/dist/{MInput-CkbgK8eU.js → MInput-Baokf17V.js} +2 -2
- package/dist/{MInput-CkbgK8eU.js.map → MInput-Baokf17V.js.map} +1 -1
- package/dist/{MInput-ClHpIrDG.cjs → MInput-Cw9ZVcNO.cjs} +2 -2
- package/dist/{MInput-ClHpIrDG.cjs.map → MInput-Cw9ZVcNO.cjs.map} +1 -1
- package/dist/{MInputCVC-D1rSjwXj.cjs → MInputCVC-Bqcp5Uu3.cjs} +2 -2
- package/dist/{MInputCVC-D1rSjwXj.cjs.map → MInputCVC-Bqcp5Uu3.cjs.map} +1 -1
- package/dist/{MInputCVC-DFtAStrY.js → MInputCVC-DNzDAbfU.js} +3 -3
- package/dist/{MInputCVC-DFtAStrY.js.map → MInputCVC-DNzDAbfU.js.map} +1 -1
- package/dist/{MInputSearch-Dj55a3oO.js → MInputSearch-Bswi-Kj0.js} +2 -2
- package/dist/{MInputSearch-Dj55a3oO.js.map → MInputSearch-Bswi-Kj0.js.map} +1 -1
- package/dist/{MInputSearch-D2Fr_34s.cjs → MInputSearch-D9bp1QAz.cjs} +2 -2
- package/dist/{MInputSearch-D2Fr_34s.cjs.map → MInputSearch-D9bp1QAz.cjs.map} +1 -1
- package/dist/{MKbd-CGkzxJhi.cjs → MKbd-CiwDwFwA.cjs} +2 -2
- package/dist/{MKbd-CGkzxJhi.cjs.map → MKbd-CiwDwFwA.cjs.map} +1 -1
- package/dist/{MKbd-I4xDtsqc.js → MKbd-v6-tJ9sP.js} +1 -1
- package/dist/{MKbd-I4xDtsqc.js.map → MKbd-v6-tJ9sP.js.map} +1 -1
- package/dist/{MLink-CZ2FfQ0N.cjs → MLink-B7gXA8qY.cjs} +2 -2
- package/dist/{MLink-CZ2FfQ0N.cjs.map → MLink-B7gXA8qY.cjs.map} +1 -1
- package/dist/{MPagination-CAzIIP2o.cjs → MPagination-C2GmGkVA.cjs} +2 -2
- package/dist/{MPagination-CAzIIP2o.cjs.map → MPagination-C2GmGkVA.cjs.map} +1 -1
- package/dist/{MPagination-CnFI794t.js → MPagination-DpUtB6t6.js} +2 -2
- package/dist/{MPagination-CnFI794t.js.map → MPagination-DpUtB6t6.js.map} +1 -1
- package/dist/{MPopover-BbgAAM5Z.cjs → MPopover-BVBN5SJi.cjs} +2 -2
- package/dist/{MPopover-BbgAAM5Z.cjs.map → MPopover-BVBN5SJi.cjs.map} +1 -1
- package/dist/{MPortal-DokH9TfY.cjs → MPortal-Djrw2WhD.cjs} +2 -2
- package/dist/{MPortal-DokH9TfY.cjs.map → MPortal-Djrw2WhD.cjs.map} +1 -1
- package/dist/{MSimpleGrid-B6Uh1XJY.cjs → MSimpleGrid-BR352NiK.cjs} +2 -2
- package/dist/{MSimpleGrid-B6Uh1XJY.cjs.map → MSimpleGrid-BR352NiK.cjs.map} +1 -1
- package/dist/{MSimpleGrid-Ds14eBrD.js → MSimpleGrid-BVeCK9Ci.js} +1 -1
- package/dist/{MSimpleGrid-Ds14eBrD.js.map → MSimpleGrid-BVeCK9Ci.js.map} +1 -1
- package/dist/{MSkeleton-BpylRABV.js → MSkeleton-C5uD4Axo.js} +1 -1
- package/dist/{MSkeleton-BpylRABV.js.map → MSkeleton-C5uD4Axo.js.map} +1 -1
- package/dist/{MSkeleton-JMkJFzu9.cjs → MSkeleton-DyQBeuVT.cjs} +2 -2
- package/dist/{MSkeleton-JMkJFzu9.cjs.map → MSkeleton-DyQBeuVT.cjs.map} +1 -1
- package/dist/{MSlider-5141rKeH.js → MSlider-CqrusKJQ.js} +1 -1
- package/dist/{MSlider-5141rKeH.js.map → MSlider-CqrusKJQ.js.map} +1 -1
- package/dist/{MSlider-PyXLKckL.cjs → MSlider-Ds2Fls86.cjs} +2 -2
- package/dist/{MSlider-PyXLKckL.cjs.map → MSlider-Ds2Fls86.cjs.map} +1 -1
- package/dist/{MStack-DDn2bYBQ.cjs → MStack-BdVvJN5S.cjs} +2 -2
- package/dist/{MStack-DDn2bYBQ.cjs.map → MStack-BdVvJN5S.cjs.map} +1 -1
- package/dist/{MStack-B8JtyM10.js → MStack-h11pHEmc.js} +1 -1
- package/dist/{MStack-B8JtyM10.js.map → MStack-h11pHEmc.js.map} +1 -1
- package/dist/MSubText-C-N15d4Z.js +17 -0
- package/dist/MSubText-C-N15d4Z.js.map +1 -0
- package/dist/MSubText-DWNMJupD.cjs +2 -0
- package/dist/MSubText-DWNMJupD.cjs.map +1 -0
- package/dist/{MSurface-WsYGNGX5.cjs → MSurface-BS9l7GDH.cjs} +2 -2
- package/dist/{MSurface-WsYGNGX5.cjs.map → MSurface-BS9l7GDH.cjs.map} +1 -1
- package/dist/{MTag-CKM8lXD6.js → MTag-BF6htPr-.js} +2 -2
- package/dist/{MTag-CKM8lXD6.js.map → MTag-BF6htPr-.js.map} +1 -1
- package/dist/{MTag-Dez1GOX0.cjs → MTag-BwQbycZO.cjs} +2 -2
- package/dist/{MTag-Dez1GOX0.cjs.map → MTag-BwQbycZO.cjs.map} +1 -1
- package/dist/{MText-CAbqC2qZ.cjs → MText-Cjt1oTPr.cjs} +2 -2
- package/dist/{MText-CAbqC2qZ.cjs.map → MText-Cjt1oTPr.cjs.map} +1 -1
- package/dist/{MTooltip-Cbj80F3o.js → MTooltip-Ctyjwxv-.js} +1 -1
- package/dist/{MTooltip-Cbj80F3o.js.map → MTooltip-Ctyjwxv-.js.map} +1 -1
- package/dist/{MTooltip-C-x_SqMx.cjs → MTooltip-gpvKWQzD.cjs} +2 -2
- package/dist/{MTooltip-C-x_SqMx.cjs.map → MTooltip-gpvKWQzD.cjs.map} +1 -1
- package/dist/{MTreeView-B7IWHmGc.cjs → MTreeView-BS60bIj7.cjs} +2 -2
- package/dist/{MTreeView-B7IWHmGc.cjs.map → MTreeView-BS60bIj7.cjs.map} +1 -1
- package/dist/{MTreeView-DMTzRk6c.js → MTreeView-DTsi4bye.js} +2 -2
- package/dist/{MTreeView-DMTzRk6c.js.map → MTreeView-DTsi4bye.js.map} +1 -1
- package/dist/{arduino-CFZS94LP.cjs → arduino-CA8n1Qq3.cjs} +1 -1
- package/dist/{arduino-CFZS94LP.cjs.map → arduino-CA8n1Qq3.cjs.map} +1 -1
- package/dist/{arduino-DWEBiENP.js → arduino-WKgN2ikT.js} +1 -1
- package/dist/{arduino-DWEBiENP.js.map → arduino-WKgN2ikT.js.map} +1 -1
- package/dist/{bash-Dl1TvWHd.cjs → bash-DObE5DDq.cjs} +1 -1
- package/dist/{bash-Dl1TvWHd.cjs.map → bash-DObE5DDq.cjs.map} +1 -1
- package/dist/{bash-DQsQM8so.js → bash-vBtVVub9.js} +1 -1
- package/dist/{bash-DQsQM8so.js.map → bash-vBtVVub9.js.map} +1 -1
- package/dist/{c-BgkSGJWN.js → c-7RiNX--m.js} +1 -1
- package/dist/{c-BgkSGJWN.js.map → c-7RiNX--m.js.map} +1 -1
- package/dist/{c-PUMyVGnz.cjs → c-Bb-MtVny.cjs} +1 -1
- package/dist/{c-PUMyVGnz.cjs.map → c-Bb-MtVny.cjs.map} +1 -1
- package/dist/{cards-C2t-pM0r.js → cards-BkRqUJ2V.js} +14 -14
- package/dist/{cards-C2t-pM0r.js.map → cards-BkRqUJ2V.js.map} +1 -1
- package/dist/{cards-D7_hH3Q8.cjs → cards-DK7j03NN.cjs} +2 -2
- package/dist/{cards-D7_hH3Q8.cjs.map → cards-DK7j03NN.cjs.map} +1 -1
- package/dist/cards.cjs +1 -1
- package/dist/cards.js +2 -2
- package/dist/components/data/MWeekGrid/MWeekGrid.d.ts +8 -0
- package/dist/components/data/MWeekGrid/MWeekGrid.types.d.ts +74 -0
- package/dist/components/data/MWeekGrid/index.d.ts +2 -0
- package/dist/components/data/index.d.ts +2 -0
- package/dist/{controls-DwWfqfDX.cjs → controls-BopaNWb_.cjs} +2 -2
- package/dist/{controls-DwWfqfDX.cjs.map → controls-BopaNWb_.cjs.map} +1 -1
- package/dist/{controls-B3P4zKoA.js → controls-CSTIosnc.js} +4 -4
- package/dist/{controls-B3P4zKoA.js.map → controls-CSTIosnc.js.map} +1 -1
- package/dist/controls.cjs +1 -1
- package/dist/controls.js +5 -5
- package/dist/{core-BdOw9NlN.js → core-DC6zSfZo.js} +1 -1
- package/dist/{core-BdOw9NlN.js.map → core-DC6zSfZo.js.map} +1 -1
- package/dist/{core-B2klLGki.cjs → core-o3cw16Db.cjs} +1 -1
- package/dist/{core-B2klLGki.cjs.map → core-o3cw16Db.cjs.map} +1 -1
- package/dist/{cpp-C_DS-imi.cjs → cpp-BVKrJvso.cjs} +1 -1
- package/dist/{cpp-C_DS-imi.cjs.map → cpp-BVKrJvso.cjs.map} +1 -1
- package/dist/{cpp-ChrqJwqu.js → cpp-CaNnFjgy.js} +1 -1
- package/dist/{cpp-ChrqJwqu.js.map → cpp-CaNnFjgy.js.map} +1 -1
- package/dist/{css-Brdthutg.cjs → css-C2sjPfLl.cjs} +1 -1
- package/dist/{css-Brdthutg.cjs.map → css-C2sjPfLl.cjs.map} +1 -1
- package/dist/{css-DL_ID0lZ.js → css-NqBDP7ZC.js} +1 -1
- package/dist/{css-DL_ID0lZ.js.map → css-NqBDP7ZC.js.map} +1 -1
- package/dist/data-CjVcevdT.js +654 -0
- package/dist/data-CjVcevdT.js.map +1 -0
- package/dist/data-D8qUIvWv.cjs +2 -0
- package/dist/data-D8qUIvWv.cjs.map +1 -0
- package/dist/data.cjs +1 -1
- package/dist/data.js +3 -3
- package/dist/{display-ChhvaSPc.js → display-B7Wh5nnM.js} +17 -17
- package/dist/{display-ChhvaSPc.js.map → display-B7Wh5nnM.js.map} +1 -1
- package/dist/{display-2Vak-RyH.cjs → display-BgZbdTDd.cjs} +2 -2
- package/dist/{display-2Vak-RyH.cjs.map → display-BgZbdTDd.cjs.map} +1 -1
- package/dist/display.cjs +1 -1
- package/dist/display.js +2 -2
- package/dist/{dropdowns-BLd4lyr6.cjs → dropdowns-Befc3lmC.cjs} +2 -2
- package/dist/{dropdowns-BLd4lyr6.cjs.map → dropdowns-Befc3lmC.cjs.map} +1 -1
- package/dist/{dropdowns-BJ8s18h2.js → dropdowns-DGvRs-VE.js} +6 -6
- package/dist/{dropdowns-BJ8s18h2.js.map → dropdowns-DGvRs-VE.js.map} +1 -1
- package/dist/dropdowns.cjs +1 -1
- package/dist/dropdowns.js +1 -1
- package/dist/{feedback-urwS5wps.js → feedback-C445FEHb.js} +3 -3
- package/dist/{feedback-urwS5wps.js.map → feedback-C445FEHb.js.map} +1 -1
- package/dist/{feedback-DnuJtYUI.cjs → feedback-C8RfsfYJ.cjs} +2 -2
- package/dist/{feedback-DnuJtYUI.cjs.map → feedback-C8RfsfYJ.cjs.map} +1 -1
- package/dist/feedback.cjs +1 -1
- package/dist/feedback.js +4 -4
- package/dist/{form-CFhDAU18.js → form-BWWLNji0.js} +1 -1
- package/dist/{form-CFhDAU18.js.map → form-BWWLNji0.js.map} +1 -1
- package/dist/{form-Bni0Gf_s.cjs → form-DSlAmTT1.cjs} +2 -2
- package/dist/{form-Bni0Gf_s.cjs.map → form-DSlAmTT1.cjs.map} +1 -1
- package/dist/form.cjs +1 -1
- package/dist/form.js +1 -1
- package/dist/i18n.cjs +1 -1
- package/dist/{icons-BHFwX7ri.cjs → icons-DX_cScBq.cjs} +2 -2
- package/dist/{icons-BHFwX7ri.cjs.map → icons-DX_cScBq.cjs.map} +1 -1
- package/dist/icons.cjs +1 -1
- package/dist/illustrations.cjs +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +34 -33
- package/dist/{inputs-CyDoEfL3.js → inputs-BZxorlLv.js} +5 -5
- package/dist/{inputs-CyDoEfL3.js.map → inputs-BZxorlLv.js.map} +1 -1
- package/dist/{inputs-BpdfT9Hp.cjs → inputs-BiZXyZSE.cjs} +2 -2
- package/dist/{inputs-BpdfT9Hp.cjs.map → inputs-BiZXyZSE.cjs.map} +1 -1
- package/dist/inputs.cjs +1 -1
- package/dist/inputs.js +4 -4
- package/dist/{javascript-DFYAIwfO.cjs → javascript-BgwyrBZi.cjs} +1 -1
- package/dist/{javascript-DFYAIwfO.cjs.map → javascript-BgwyrBZi.cjs.map} +1 -1
- package/dist/{javascript-B5hepBcv.js → javascript-BltQGQAn.js} +1 -1
- package/dist/{javascript-B5hepBcv.js.map → javascript-BltQGQAn.js.map} +1 -1
- package/dist/{json-BTHMevf2.cjs → json-DWmLrT_r.cjs} +1 -1
- package/dist/{json-BTHMevf2.cjs.map → json-DWmLrT_r.cjs.map} +1 -1
- package/dist/{json-DTBnkegk.js → json-DbCISZXi.js} +1 -1
- package/dist/{json-DTBnkegk.js.map → json-DbCISZXi.js.map} +1 -1
- package/dist/{layout-BT7KtJVE.js → layout-CnEOTJnJ.js} +6 -6
- package/dist/{layout-BT7KtJVE.js.map → layout-CnEOTJnJ.js.map} +1 -1
- package/dist/{layout-C0WsXFln.cjs → layout-Ct6ViwDQ.cjs} +2 -2
- package/dist/{layout-C0WsXFln.cjs.map → layout-Ct6ViwDQ.cjs.map} +1 -1
- package/dist/layout.cjs +1 -1
- package/dist/layout.js +5 -5
- package/dist/{licensing-sRHTvX0B.cjs → licensing-hMT26Vnv.cjs} +2 -2
- package/dist/{licensing-sRHTvX0B.cjs.map → licensing-hMT26Vnv.cjs.map} +1 -1
- package/dist/{locale-JX_gX03k.js → locale-BNyzqXAU.js} +1 -1
- package/dist/{locale-JX_gX03k.js.map → locale-BNyzqXAU.js.map} +1 -1
- package/dist/{locale-CJWWjFm-.cjs → locale-C5ik0c3d.cjs} +2 -2
- package/dist/{locale-CJWWjFm-.cjs.map → locale-C5ik0c3d.cjs.map} +1 -1
- package/dist/{media-CnjA4Ruo.cjs → media-DZaGKh5V.cjs} +2 -2
- package/dist/{media-CnjA4Ruo.cjs.map → media-DZaGKh5V.cjs.map} +1 -1
- package/dist/{media-CM-uEUrV.js → media-DxnELIZO.js} +3 -3
- package/dist/{media-CM-uEUrV.js.map → media-DxnELIZO.js.map} +1 -1
- package/dist/media.cjs +1 -1
- package/dist/media.js +2 -2
- package/dist/{overlays-NwVsvmlb.js → overlays-BfIrSHDo.js} +9 -9
- package/dist/{overlays-NwVsvmlb.js.map → overlays-BfIrSHDo.js.map} +1 -1
- package/dist/{overlays-BpDz9ddf.cjs → overlays-WsQqxqk1.cjs} +2 -2
- package/dist/{overlays-BpDz9ddf.cjs.map → overlays-WsQqxqk1.cjs.map} +1 -1
- package/dist/overlays.cjs +1 -1
- package/dist/overlays.js +3 -3
- package/dist/{php-ClxZCTCr.cjs → php-CssmZWrI.cjs} +1 -1
- package/dist/{php-ClxZCTCr.cjs.map → php-CssmZWrI.cjs.map} +1 -1
- package/dist/{php-DwgDg57J.js → php-dSXzrC_Z.js} +1 -1
- package/dist/{php-DwgDg57J.js.map → php-dSXzrC_Z.js.map} +1 -1
- package/dist/primitives.cjs +1 -1
- package/dist/style-runtime.cjs +1 -1
- package/dist/style-runtime.js +1 -1
- package/dist/styles.css +1 -1
- package/dist/{theme-yQQAPTkp.cjs → theme-DltOEniv.cjs} +2 -2
- package/dist/{theme-yQQAPTkp.cjs.map → theme-DltOEniv.cjs.map} +1 -1
- package/dist/theme.cjs +1 -1
- package/dist/{typescript-MSi2XC0t.js → typescript-CxKdKTKz.js} +1 -1
- package/dist/{typescript-MSi2XC0t.js.map → typescript-CxKdKTKz.js.map} +1 -1
- package/dist/{typescript-C8NJZXwD.cjs → typescript-DeaMWtYF.cjs} +1 -1
- package/dist/{typescript-C8NJZXwD.cjs.map → typescript-DeaMWtYF.cjs.map} +1 -1
- package/dist/typography-CAW17MDj.js +31 -0
- package/dist/typography-CAW17MDj.js.map +1 -0
- package/dist/typography-vZwd5E5h.cjs +2 -0
- package/dist/typography-vZwd5E5h.cjs.map +1 -0
- package/dist/typography.cjs +1 -1
- package/dist/typography.js +4 -3
- package/dist/{useGhostText-BFaUUKid.cjs → useGhostText-Nw9XCpWS.cjs} +2 -2
- package/dist/{useGhostText-BFaUUKid.cjs.map → useGhostText-Nw9XCpWS.cjs.map} +1 -1
- package/dist/{useInteractionEffect-BH2dgQla.cjs → useInteractionEffect-Gs9HBi2T.cjs} +2 -2
- package/dist/{useInteractionEffect-BH2dgQla.cjs.map → useInteractionEffect-Gs9HBi2T.cjs.map} +1 -1
- package/dist/{useKeyboardNav-CtGPfQX7.cjs → useKeyboardNav-DDN-oeqd.cjs} +2 -2
- package/dist/{useKeyboardNav-CtGPfQX7.cjs.map → useKeyboardNav-DDN-oeqd.cjs.map} +1 -1
- package/dist/utils.cjs +1 -1
- package/dist/{xml-CnKYdLjT.js → xml-BPoVPJlJ.js} +1 -1
- package/dist/{xml-CnKYdLjT.js.map → xml-BPoVPJlJ.js.map} +1 -1
- package/dist/{xml-jypnnWFn.cjs → xml-BUuYcpx2.cjs} +1 -1
- package/dist/{xml-jypnnWFn.cjs.map → xml-BUuYcpx2.cjs.map} +1 -1
- package/package.json +1 -1
- package/dist/data-0_KXny56.cjs +0 -2
- package/dist/data-0_KXny56.cjs.map +0 -1
- package/dist/data-9Ej9tlwW.js +0 -463
- package/dist/data-9Ej9tlwW.js.map +0 -1
- package/dist/typography-BHhyTO1V.js +0 -42
- package/dist/typography-BHhyTO1V.js.map +0 -1
- package/dist/typography-Qb1U4eiY.cjs +0 -2
- package/dist/typography-Qb1U4eiY.cjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout-BT7KtJVE.js","names":[],"sources":["../src/components/layout/MContainer/MContainer.tsx","../src/components/layout/MHeader/MHeader.tsx","../src/components/layout/MFooter/MFooter.tsx","../src/components/layout/MNavs/MNavs.tsx","../src/components/layout/MNavbar/MNavbar.tsx","../src/components/layout/MSection/MSection.tsx","../src/components/layout/MStatGrid/MStatGrid.tsx","../src/components/layout/MDivider/MDivider.tsx","../src/components/layout/MSidebar/MSidebar.tsx","../src/components/layout/MBreadcrumb/MBreadcrumb.tsx","../src/components/layout/MAppShell/MAppShell.tsx","../src/components/layout/MCanvasGrid/ScaleToFit.tsx","../src/components/layout/MCanvasGrid/MCanvasGrid.tsx","../src/components/layout/MStickyPanel/MStickyPanel.tsx"],"sourcesContent":["import type {MContainerProps} from './MContainer.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {getLayoutUtilityClassNames, getLayoutUtilityStyles} from '../../../utils/layoutProps'\nimport './MContainer.css'\n\n// Constrain page content widths and apply shared spacing utilities.\nexport function MContainer({\n size = 'content',\n padded = true,\n hidden,\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n className,\n style,\n children,\n ...rest\n}: MContainerProps) {\n const utilityStyle = getLayoutUtilityStyles({fsize})\n\n return (\n <div\n className={cn(\n 'container',\n size,\n padded && 'padded',\n ...getLayoutUtilityClassNames({\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n }),\n className\n )}\n style={{...utilityStyle, ...style}}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n {children}\n </div>\n )\n}\n","import type {MHeaderProps} from './MHeader.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {MContainer} from '../MContainer'\nimport './MHeader.css'\n\n// Render a reusable page header shell aligned to a shared container.\nexport function MHeader({\n container = 'wide',\n padded = true,\n bordered = true,\n sticky = false,\n tone = 'surface',\n layout = 'split',\n hidden,\n className,\n children,\n ...rest\n}: MHeaderProps) {\n return (\n <header\n className={cn('header', tone, bordered && 'bordered', sticky && 'sticky', className)}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n <MContainer size={container} padded={padded} className={cn('inner', `layout-${layout}`)}>\n {children}\n </MContainer>\n </header>\n )\n}\n","import type {MFooterProps} from './MFooter.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {getLayoutUtilityClassNames, getLayoutUtilityStyles} from '../../../utils/layoutProps'\nimport {MContainer} from '../MContainer'\nimport './MFooter.css'\n\n// Render a reusable page footer shell with shared spacing utilities.\nexport function MFooter({\n container = 'wide',\n padded = true,\n bordered = true,\n tone = 'surface',\n hidden,\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n className,\n style,\n children,\n ...rest\n}: MFooterProps) {\n const utilityStyle = getLayoutUtilityStyles({fsize})\n\n return (\n <footer\n className={cn(\n 'footer',\n tone,\n bordered && 'bordered',\n ...getLayoutUtilityClassNames({\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n }),\n className\n )}\n style={{...utilityStyle, ...style}}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n <MContainer size={container} padded={padded} className=\"inner\" fullWidth>\n {children}\n </MContainer>\n </footer>\n )\n}\n","import type {MNavsProps} from './MNavs.types'\nimport {cn} from '../../../utils/cn'\nimport {MLink} from '../../typography'\nimport './MNavs.css'\n\n// Render a lightweight navigation list from data or custom children.\nexport function MNavs({items, orientation = 'horizontal', wrap = false, className, children, ...rest}: MNavsProps) {\n return (\n <div className={cn('navs', orientation, wrap && 'wrap', className)} {...rest}>\n {items\n ? items.map((item) => {\n const Icon = item.icon\n const hideLabel = item.iconOnly === true && Icon != null\n const labelAsString = typeof item.label === 'string' ? item.label : undefined\n const ariaLabel = hideLabel ? labelAsString : undefined\n const linkTitle = item.title ?? (hideLabel ? labelAsString : undefined)\n\n return (\n <MLink\n key={item.key ?? item.href ?? item.title?.toString() ?? labelAsString ?? ''}\n component={item.component}\n href={item.href}\n to={item.to}\n target={item.target}\n rel={item.rel}\n title={linkTitle}\n current={item.current}\n disabled={item.disabled}\n className={cn('link', hideLabel && 'icon-only', item.className)}\n aria-label={ariaLabel}\n >\n {Icon ? (\n <span className=\"icon\" aria-hidden={!hideLabel || undefined}>\n <Icon size={item.iconSize} />\n </span>\n ) : null}\n {!hideLabel ? item.label : null}\n </MLink>\n )\n })\n : children}\n </div>\n )\n}\n","import {Children, cloneElement, isValidElement, useEffect, useId, useRef, useState} from 'react'\nimport type {MouseEvent as ReactMouseEvent, ReactElement, ReactNode} from 'react'\nimport type {MNavbarProps} from './MNavbar.types'\nimport {getHiddenProps, MShellBreakpoints, useMaxWidth} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {MContainer} from '../MContainer'\nimport {MInline} from '../MInline'\nimport type {MInlineProps} from '../MInline'\nimport {MNavs} from '../MNavs'\nimport {MButton} from '../../controls/MButton'\nimport {MMenuIcon} from '../../../icons'\nimport './MNavbar.css'\n\ntype NavLikeElement = ReactElement<{children?: ReactNode; orientation?: 'horizontal' | 'vertical'}>\n\n// Walks the children tree (any depth) looking for MNavs instances so the navbar\n// can pull them into the mobile menu even when wrapped in MInline / MStack.\nfunction findNavLikeChildren(children: ReactNode, found: NavLikeElement[] = []): NavLikeElement[] {\n Children.forEach(children, (child) => {\n if (!isValidElement(child)) {\n return\n }\n if (child.type === MNavs) {\n found.push(child as NavLikeElement)\n return\n }\n const nestedChildren = (child.props as {children?: ReactNode} | null)?.children\n if (nestedChildren !== undefined) {\n findNavLikeChildren(nestedChildren, found)\n }\n })\n return found\n}\n\n// Render a horizontal app or site navigation shell with container alignment.\n// Below the md breakpoint MNavs children are collapsed behind a hamburger toggle\n// that opens either a dropdown panel or a side drawer with the navigation items.\nexport function MNavbar({\n container = 'content',\n padded = true,\n bordered = true,\n sticky = false,\n tone = 'surface',\n justify = 'between',\n wrap = false,\n mobileMenu = 'dropdown',\n mobileMenuContent,\n mobileMenuFooter,\n collapseActions = false,\n mobileMenuLabel = 'Open navigation',\n mobileBreakpoint = MShellBreakpoints.compact,\n hidden,\n className,\n children,\n ...rest\n}: MNavbarProps) {\n const [open, setOpen] = useState(false)\n const rootRef = useRef<HTMLElement | null>(null)\n const menuId = useId()\n const mobile = useMaxWidth(mobileBreakpoint)\n\n const childArray = Children.toArray(children)\n\n const mobileNavs = findNavLikeChildren(children).map((element, index) =>\n cloneElement(element, {\n key: `mnavbar-mobile-navs-${index}`,\n orientation: 'vertical',\n })\n )\n\n const toggleButton = (\n <MButton\n key=\"mnavbar-toggle\"\n type=\"button\"\n variant=\"ghost\"\n size=\"md\"\n shape=\"circle\"\n iconOnly\n className=\"navbar-toggle\"\n aria-label={mobileMenuLabel}\n aria-expanded={open}\n aria-controls={menuId}\n onClick={handleToggleClick}\n >\n <MMenuIcon />\n </MButton>\n )\n\n let lastInlineIndex = -1\n for (let index = childArray.length - 1; index >= 0; index -= 1) {\n const child = childArray[index]\n if (isValidElement(child) && child.type === MInline) {\n lastInlineIndex = index\n break\n }\n }\n\n // When collapseActions is on and we're below the breakpoint, the last inline\n // (usually theme / lang / search) is pulled out of the bar and rendered in\n // the mobile menu footer. The burger toggle then attaches to the previous\n // inline (typically primary actions) — or sits on its own when none exists.\n const shouldCollapseLastInline = collapseActions && mobile && lastInlineIndex !== -1\n let collapsedActionsInline: ReactElement<MInlineProps> | null = null\n let workingChildren = childArray\n let toggleHostIndex = lastInlineIndex\n if (shouldCollapseLastInline) {\n collapsedActionsInline = childArray[lastInlineIndex] as ReactElement<MInlineProps>\n workingChildren = childArray.filter((_, index) => index !== lastInlineIndex)\n toggleHostIndex = -1\n for (let index = workingChildren.length - 1; index >= 0; index -= 1) {\n const child = workingChildren[index]\n if (isValidElement(child) && child.type === MInline) {\n toggleHostIndex = index\n break\n }\n }\n }\n\n const renderedChildren =\n toggleHostIndex === -1\n ? [...workingChildren, toggleButton]\n : workingChildren.map((child, index) => {\n if (index !== toggleHostIndex) return child\n const inlineChild = child as ReactElement<MInlineProps>\n const inlineChildren = Children.toArray(inlineChild.props.children)\n return cloneElement(inlineChild, {\n key: inlineChild.key ?? `mnavbar-inline-${index}`,\n children: [...inlineChildren, toggleButton],\n })\n })\n\n useEffect(() => {\n if (!open) return\n\n function handlePointerDown(event: PointerEvent) {\n const root = rootRef.current\n if (!root) return\n if (event.target instanceof Node && root.contains(event.target)) return\n setOpen(false)\n }\n\n function handleKeydown(event: KeyboardEvent) {\n if (event.key === 'Escape') setOpen(false)\n }\n\n document.addEventListener('pointerdown', handlePointerDown)\n document.addEventListener('keydown', handleKeydown)\n return () => {\n document.removeEventListener('pointerdown', handlePointerDown)\n document.removeEventListener('keydown', handleKeydown)\n }\n }, [open])\n\n useEffect(() => {\n if (!mobile) {\n setOpen(false)\n }\n }, [mobile])\n\n function handleToggleClick() {\n setOpen((previous) => !previous)\n }\n\n function handleMenuClick(event: ReactMouseEvent<HTMLDivElement>) {\n const target = event.target as HTMLElement | null\n if (!target) return\n if (target.closest('a, [role=\"menuitem\"]')) {\n setOpen(false)\n }\n }\n\n return (\n <nav\n ref={rootRef}\n className={cn(\n 'navbar',\n tone,\n bordered && 'bordered',\n sticky && 'sticky',\n mobile && 'mobile-view',\n open && 'mobile-open',\n `mobile-${mobileMenu}`,\n className\n )}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n <MContainer size={container} padded={padded} className=\"container\">\n <div className={cn('inner', justify, wrap && 'wrap')}>{renderedChildren}</div>\n </MContainer>\n\n {mobileMenu === 'drawer' && <div className={cn('mobile-backdrop', open && 'visible')} aria-hidden />}\n\n <div\n id={menuId}\n className={cn('mobile-menu', mobileMenu, open && 'open')}\n role=\"menu\"\n aria-hidden={!open || undefined}\n onClick={handleMenuClick}\n >\n {mobileNavs}\n {mobileMenuContent}\n {collapsedActionsInline ? (\n <div className=\"mobile-menu-footer\">\n {cloneElement(collapsedActionsInline, {\n key: 'mnavbar-collapsed-actions',\n })}\n </div>\n ) : null}\n {mobileMenuFooter ? <div className=\"mobile-menu-footer\">{mobileMenuFooter}</div> : null}\n </div>\n </nav>\n )\n}\n","import type React from 'react'\nimport type {MSectionProps} from './MSection.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport './MSection.css'\n\n// Render a semantic page section with predefined spacing and tone.\nexport function MSection({\n as = 'section',\n spacing = 'lg',\n tone = 'default',\n hidden,\n className,\n style,\n children,\n ...rest\n}: MSectionProps) {\n const Component = as\n\n return (\n <Component\n className={cn('section', spacing, tone, className)}\n style={style}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n {children}\n </Component>\n )\n}\n","import type {MStatGridProps} from './MStatGrid.types'\nimport {MSimpleGrid} from '../MSimpleGrid'\n\nexport function MStatGrid<T>({\n items,\n renderItem,\n children,\n columns = 4,\n minItemWidth = '15rem',\n ...rest\n}: MStatGridProps<T>) {\n return (\n <MSimpleGrid columns={columns} minItemWidth={minItemWidth} {...rest}>\n {items && renderItem ? items.map((item, index) => renderItem(item, index)) : children}\n </MSimpleGrid>\n )\n}\n","import type {MDividerProps} from './MDivider.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {getLayoutUtilityClassNames, getLayoutUtilityStyles} from '../../../utils/layoutProps'\nimport './MDivider.css'\n\n// Render a semantic divider line between related content blocks.\nexport function MDivider({\n orientation = 'horizontal',\n variant = 'solid',\n hidden,\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n className,\n style,\n ...rest\n}: MDividerProps) {\n const utilityStyle = getLayoutUtilityStyles({fsize})\n\n return (\n <div\n role=\"separator\"\n aria-orientation={orientation}\n className={cn(\n 'divider',\n orientation,\n variant,\n ...getLayoutUtilityClassNames({\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n }),\n className\n )}\n style={{...utilityStyle, ...style}}\n {...getHiddenProps(hidden)}\n {...rest}\n />\n )\n}\n","import {createContext, useContext, useState, useEffect, useCallback, useMemo} from 'react'\nimport {cn} from '../../../utils/cn'\nimport {MButton} from '../../controls'\nimport {MChevronRightIcon, MMenuIcon} from '../../../icons'\nimport {MDropdownMenu, MTooltip} from '../../overlays'\nimport {MShellBreakpoints, useMaxWidth} from '../../../theme'\nimport type {\n MSidebarProps,\n MSidebarHeaderProps,\n MSidebarBodyProps,\n MSidebarNavProps,\n MSidebarItemProps,\n MSidebarGroupProps,\n MSidebarFooterProps,\n MSidebarDividerProps,\n MSidebarMode,\n} from './MSidebar.types'\nimport './MSidebar.css'\n\nconst STORAGE_KEY = 'mineralui-sidebar'\n\ninterface SidebarContextValue {\n mode: MSidebarMode\n mobile: boolean\n mobileOpen: boolean\n canToggle: boolean\n toggleMode: () => void\n}\n\nconst SidebarCtx = createContext<SidebarContextValue>({\n mode: 'expanded',\n mobile: false,\n mobileOpen: false,\n canToggle: false,\n toggleMode: () => {},\n})\n\n// Read shared sidebar state inside slot components.\nfunction useSidebar() {\n return useContext(SidebarCtx)\n}\n\n// Render the sidebar shell and coordinate desktop and mobile behavior.\nexport function MSidebar({\n mode: modeProp = 'auto',\n defaultMode = 'expanded',\n onModeChange,\n persist = false,\n side = 'left',\n tone = 'subtle',\n bordered = true,\n mobileBreakpoint = MShellBreakpoints.mobile,\n compactBreakpoint = MShellBreakpoints.compact,\n className,\n style,\n children,\n}: MSidebarProps) {\n const resolvedCompactBreakpoint = Math.max(compactBreakpoint, mobileBreakpoint)\n const mobile = useMaxWidth(mobileBreakpoint)\n const compactViewport = useMaxWidth(resolvedCompactBreakpoint)\n const compact = !mobile && compactViewport\n const [mobileOpen, setMobileOpen] = useState(false)\n\n const [internalMode, setInternalMode] = useState<MSidebarMode>(() => {\n if (persist) {\n try {\n const v = localStorage.getItem(STORAGE_KEY)\n if (v === 'expanded' || v === 'collapsed') return v\n } catch {\n /* noop */\n }\n }\n\n return defaultMode\n })\n\n const resolvedMode: MSidebarMode = mobile\n ? 'expanded'\n : compact\n ? 'collapsed'\n : modeProp === 'auto'\n ? internalMode\n : modeProp === 'collapsed'\n ? 'collapsed'\n : 'expanded'\n\n // MToggle only the desktop width state. Mobile uses its own overlay flow.\n const toggleMode = useCallback(() => {\n const next: MSidebarMode = resolvedMode === 'expanded' ? 'collapsed' : 'expanded'\n\n setInternalMode(next)\n onModeChange?.(next)\n\n if (persist) {\n try {\n localStorage.setItem(STORAGE_KEY, next)\n } catch {\n /* noop */\n }\n }\n }, [resolvedMode, onModeChange, persist])\n\n const closeMobile = useCallback(() => setMobileOpen(false), [])\n\n // Let Escape close the temporary mobile drawer.\n useEffect(() => {\n if (!mobileOpen) return\n\n const handler = (e: KeyboardEvent) => {\n if (e.key === 'Escape') setMobileOpen(false)\n }\n\n document.addEventListener('keydown', handler)\n return () => document.removeEventListener('keydown', handler)\n }, [mobileOpen])\n\n useEffect(() => {\n if (!mobile) {\n setMobileOpen(false)\n }\n }, [mobile])\n\n const canToggle = !mobile && !compact && modeProp === 'auto'\n\n const ctx = useMemo<SidebarContextValue>(\n () => ({mode: resolvedMode, mobile, mobileOpen, canToggle, toggleMode}),\n [resolvedMode, mobile, mobileOpen, canToggle, toggleMode]\n )\n\n const isCollapsed = !mobile && resolvedMode === 'collapsed'\n\n const sidebarCls = cn(\n 'sidebar',\n tone,\n side,\n isCollapsed && 'collapsed',\n compact && 'compact',\n bordered && 'bordered',\n mobile && 'mobile',\n mobile && mobileOpen && 'mobile-open',\n className\n )\n\n return (\n <SidebarCtx.Provider value={ctx}>\n {mobile && mobileOpen && <div className=\"sidebar-backdrop\" onClick={closeMobile} />}\n\n <aside className={sidebarCls} style={style}>\n {children}\n </aside>\n\n {mobile && !mobileOpen && (\n <button\n className={cn('sidebar-hamburger', side)}\n onClick={() => setMobileOpen(true)}\n aria-label=\"Open menu\"\n >\n <span className=\"sidebar-hamburger-icon\" aria-hidden=\"true\">\n <MMenuIcon />\n </span>\n </button>\n )}\n </SidebarCtx.Provider>\n )\n}\n\n// Render the top area with branding and an optional collapse toggle.\nexport function MSidebarHeader({bordered = false, className, children}: MSidebarHeaderProps) {\n const {mode, mobile, canToggle, toggleMode} = useSidebar()\n const isCollapsed = !mobile && mode === 'collapsed'\n\n return (\n <div className={cn('sidebar-header', bordered && 'bordered', className)}>\n <div className=\"sidebar-header-content\">{children}</div>\n {canToggle && (\n <MButton\n variant=\"outlined\"\n color=\"neutral\"\n iconOnly\n size=\"sm\"\n onClick={toggleMode}\n aria-label={isCollapsed ? 'Expand sidebar' : 'Collapse sidebar'}\n className=\"sidebar-toggle\"\n >\n <span className={cn('sidebar-chevron', isCollapsed && 'flipped')}>\n <MChevronRightIcon />\n </span>\n </MButton>\n )}\n </div>\n )\n}\n\n// Wrap the scrollable middle area between header and footer.\nexport function MSidebarBody({className, children}: MSidebarBodyProps) {\n return <div className={cn('sidebar-body', className)}>{children}</div>\n}\n\n// Wrap sidebar links in a navigation landmark.\nexport function MSidebarNav({className, children}: MSidebarNavProps) {\n return <nav className={cn('sidebar-nav', className)}>{children}</nav>\n}\n\n// Render one clickable sidebar row as a link, button or custom component.\nexport function MSidebarItem({\n icon,\n label,\n description,\n href,\n to,\n onClick,\n active = false,\n disabled = false,\n badge,\n color,\n component,\n className,\n}: MSidebarItemProps) {\n const {mode, mobile} = useSidebar()\n const isCollapsed = !mobile && mode === 'collapsed'\n\n // ONE tooltip per row: prefer description, fall back to label. The HTML\n // title attribute used in collapsed mode mirrors the same priority but is\n // limited to strings (browsers can't render ReactNodes).\n const tooltipContent = description ?? label\n const titleAttr = typeof description === 'string'\n ? description\n : typeof label === 'string'\n ? label\n : undefined\n\n const Tag = component ?? (href || to ? 'a' : 'button')\n const linkProps = component ? (to ? {to} : href ? {href} : {}) : href ? {href} : to ? {href: to} : {}\n const cls = cn('sidebar-item', active && 'active', disabled && 'disabled', color, className)\n\n return (\n <Tag\n className={cls}\n onClick={disabled ? undefined : onClick}\n aria-disabled={disabled || undefined}\n title={isCollapsed ? titleAttr : undefined}\n {...linkProps}\n >\n {icon && <span className=\"sidebar-item-icon\">{icon}</span>}\n {!isCollapsed && (\n <MTooltip content={tooltipContent} placement=\"top\" className=\"sidebar-item-label-tooltip\">\n <span className=\"sidebar-item-label\">{label}</span>\n </MTooltip>\n )}\n {!isCollapsed && badge && <span className=\"sidebar-item-badge\">{badge}</span>}\n </Tag>\n )\n}\n\n// Group related sidebar items and swap to a dropdown when collapsed.\nexport function MSidebarGroup({\n label,\n icon,\n active = false,\n defaultOpen = true,\n collapsible = true,\n children,\n className,\n}: MSidebarGroupProps) {\n const sidebarCtx = useSidebar()\n const {mode, mobile} = sidebarCtx\n const isCollapsed = !mobile && mode === 'collapsed'\n const [open, setOpen] = useState(defaultOpen)\n\n const expandedCtx = useMemo<SidebarContextValue>(() => ({...sidebarCtx, mode: 'expanded'}), [sidebarCtx])\n\n // Keep expand/collapse local to this group.\n const toggle = () => {\n if (collapsible) setOpen((o) => !o)\n }\n\n if (isCollapsed) {\n const trigger = (\n <span className={cn('sidebar-group-icon collapsed', active && 'active')} title={label}>\n {icon}\n </span>\n )\n\n return (\n <div className={cn('sidebar-group', className)}>\n <MDropdownMenu trigger={trigger} placement=\"right-start\" closeOnSelect openOn=\"hover\">\n <SidebarCtx.Provider value={expandedCtx}>{children}</SidebarCtx.Provider>\n </MDropdownMenu>\n </div>\n )\n }\n\n return (\n <div className={cn('sidebar-group', className)}>\n <button className={cn('sidebar-group-header', active && 'active')} onClick={toggle} aria-expanded={open}>\n {icon && <span className=\"sidebar-group-icon\">{icon}</span>}\n <span className=\"sidebar-group-label\">{label}</span>\n {collapsible && (\n <span className={cn('sidebar-group-arrow', open && 'open')}>\n <MChevronRightIcon />\n </span>\n )}\n </button>\n {open && <div className=\"sidebar-group-items\">{children}</div>}\n </div>\n )\n}\n\n// Render the bottom slot for version info or quick actions.\nexport function MSidebarFooter({bordered = false, className, children}: MSidebarFooterProps) {\n return <div className={cn('sidebar-footer', bordered && 'bordered', className)}>{children}</div>\n}\n\n// Render a spacing-aware divider between sidebar regions.\nexport function MSidebarDivider({className, spacing = 'md'}: MSidebarDividerProps) {\n return <hr className={cn('sidebar-divider', spacing, className)} />\n}\n","import {useMemo} from 'react'\nimport {cn} from '../../../utils/cn'\nimport type {MBreadcrumbProps} from './MBreadcrumb.types'\nimport './MBreadcrumb.css'\n\n// Render a compact path and collapse the middle when needed.\nexport function MBreadcrumb({items, separator = '/', maxItems, className, ...rest}: MBreadcrumbProps) {\n // Keep the current page visible while shortening deep paths.\n const visible = useMemo(() => {\n if (!maxItems || maxItems >= items.length) return items\n if (maxItems < 2) return [items[items.length - 1]]\n const head = items.slice(0, 1)\n const tail = items.slice(-(maxItems - 1))\n return [...head, null, ...tail]\n }, [items, maxItems])\n\n return (\n <nav aria-label=\"breadcrumb\" className={cn('breadcrumb', className)} {...rest}>\n <ol className=\"trail\">\n {visible.map((item, i) => {\n if (item === null) {\n return (\n <li key=\"ellipsis\" className=\"crumb dots\">\n <span className=\"sep\">{separator}</span>\n <span>…</span>\n </li>\n )\n }\n\n const isLast = i === visible.length - 1\n\n return (\n <li key={i} className={cn('crumb', isLast && 'active')}>\n {i > 0 && <span className=\"sep\">{separator}</span>}\n {item.href && !isLast ? (\n <a href={item.href} className=\"link\" onClick={item.onClick}>\n {item.label}\n </a>\n ) : item.onClick && !isLast ? (\n <button type=\"button\" className=\"link btn\" onClick={item.onClick}>\n {item.label}\n </button>\n ) : (\n <span className=\"current\" aria-current={isLast ? 'page' : undefined}>\n {item.label}\n </span>\n )}\n </li>\n )\n })}\n </ol>\n </nav>\n )\n}\n","import {forwardRef, Children, isValidElement} from 'react'\nimport type * as React from 'react'\nimport type {MAppShellProps, MBodyProps} from './MAppShell.types'\nimport {cn} from '../../../utils/cn'\nimport {MSidebar} from '../MSidebar'\nimport './MAppShell.css'\n\nexport const MAppShell = forwardRef<HTMLDivElement, MAppShellProps>(function MAppShell(\n {className, children, ...rest},\n ref\n) {\n const sidebarElements: React.ReactNode[] = []\n const otherElements: React.ReactNode[] = []\n\n Children.forEach(children, (child) => {\n if (isValidElement(child) && child.type === MSidebar) {\n sidebarElements.push(child)\n } else {\n otherElements.push(child)\n }\n })\n\n return (\n <div ref={ref} className={cn('app-shell', className)} {...rest}>\n {sidebarElements}\n <div className=\"app-main\">{otherElements}</div>\n </div>\n )\n})\n\nexport const MBody = forwardRef<HTMLDivElement, MBodyProps>(function MBody({className, children, ...rest}, ref) {\n return (\n <div ref={ref} className={cn('app-body', className)} {...rest}>\n {children}\n </div>\n )\n})\n","import {useEffect, useRef, useState, type ReactNode} from 'react'\n\ninterface ScaleToFitProps {\n /**\n * Minimum render width (in CSS px). When the parent is narrower, content\n * is rendered at this width and scaled down. When the parent is wider,\n * content is rendered at the parent's width (no scale-up, no padding).\n */\n baseWidth?: number\n children: ReactNode\n}\n\n/**\n * Renders `children` at `max(baseWidth, parentWidth)`, then applies\n * `transform: scale(...)` so the rendered block fits the parent box without\n * scrollbars. Scale never exceeds 1 (no blurry up-scaling). When the parent\n * is wider than baseWidth, render width tracks the parent so content fills\n * the available space natively (no horizontal padding).\n */\nexport function ScaleToFit({baseWidth = 480, children}: ScaleToFitProps) {\n const wrapperRef = useRef<HTMLDivElement>(null)\n const contentRef = useRef<HTMLDivElement>(null)\n const [scale, setScale] = useState(1)\n const [renderWidth, setRenderWidth] = useState<number>(baseWidth)\n\n useEffect(() => {\n const wrap = wrapperRef.current\n const content = contentRef.current\n if (!wrap || !content) return\n\n let frame = 0\n const recompute = () => {\n cancelAnimationFrame(frame)\n frame = requestAnimationFrame(() => {\n const wW = wrap.clientWidth\n const wH = wrap.clientHeight\n if (wW === 0 || wH === 0) return\n const cW = Math.max(baseWidth, wW)\n const cH = content.offsetHeight\n if (cW === 0 || cH === 0) return\n const sW = wW / cW\n const sH = wH / cH\n const next = Math.min(sW, sH, 1)\n if (next > 0 && Number.isFinite(next)) {\n setRenderWidth(cW)\n setScale(next)\n }\n })\n }\n\n const ro = new ResizeObserver(recompute)\n ro.observe(wrap)\n ro.observe(content)\n recompute()\n return () => {\n cancelAnimationFrame(frame)\n ro.disconnect()\n }\n }, [baseWidth])\n\n return (\n <div ref={wrapperRef} className=\"canvas-grid-scale-wrapper\">\n <div\n ref={contentRef}\n className=\"canvas-grid-scale-content\"\n style={{width: `${renderWidth}px`, transform: `scale(${scale})`}}\n >\n {children}\n </div>\n </div>\n )\n}\n","import {forwardRef, useCallback, useEffect, useRef, useState} from 'react'\nimport type {CSSProperties, ForwardedRef, PointerEvent as ReactPointerEvent, ReactElement, Ref} from 'react'\nimport type {MCanvasGridItem, MCanvasGridPosition, MCanvasGridProps} from './MCanvasGrid.types'\nimport {cn} from '../../../utils/cn'\nimport {MShellBreakpoints, useMaxWidth} from '../../../theme'\nimport {MEditIcon, MMoveIcon, MTrashIcon, MZoomInIcon} from '../../../icons'\nimport {MButton} from '../../controls/MButton'\nimport {MButtonGroup} from '../../controls/MButtonGroup'\nimport {ScaleToFit} from './ScaleToFit'\nimport './MCanvasGrid.css'\n\ninterface DragState {\n itemId: string\n mode: 'drag' | 'resize'\n startClientX: number\n startClientY: number\n original: MCanvasGridPosition\n}\n\nfunction clamp(value: number, min: number, max: number) {\n return Math.max(min, Math.min(max, value))\n}\n\nfunction MCanvasGridInner<T extends MCanvasGridItem>(\n {\n columns = 24,\n rows = 24,\n snap = 4,\n items,\n renderItem,\n minItemSize,\n maxItemSize: _maxItemSize,\n editable = false,\n onItemMove,\n onItemResize,\n onItemRemove,\n onItemEdit,\n onItemExpand,\n guides = 'always',\n compactBreakpoint = MShellBreakpoints.compact,\n mobileBreakpoint = MShellBreakpoints.mobile,\n height,\n fitContent = 'scroll',\n fitContentBaseWidth = 480,\n className,\n style,\n }: MCanvasGridProps<T>,\n ref: ForwardedRef<HTMLDivElement>\n) {\n const innerRef = useRef<HTMLDivElement | null>(null)\n const [size, setSize] = useState({width: 0, height: 0})\n const [drag, setDrag] = useState<DragState | null>(null)\n const [preview, setPreview] = useState<MCanvasGridPosition | null>(null)\n const [touchOrder, setTouchOrder] = useState<Record<string, number>>({})\n const touchCounterRef = useRef(0)\n\n function bringToFront(itemId: string) {\n touchCounterRef.current += 1\n setTouchOrder((prev) => ({...prev, [itemId]: touchCounterRef.current}))\n }\n\n function suppressNextClick() {\n let armed = true\n const stopper = (ev: MouseEvent) => {\n if (!armed) return\n armed = false\n ev.stopPropagation()\n ev.preventDefault()\n window.removeEventListener('click', stopper, true)\n }\n window.addEventListener('click', stopper, true)\n window.setTimeout(() => {\n if (!armed) return\n armed = false\n window.removeEventListener('click', stopper, true)\n }, 60)\n }\n\n const isMobile = useMaxWidth(mobileBreakpoint)\n const isCompact = useMaxWidth(compactBreakpoint) && !isMobile\n\n const totalCols = columns * snap\n const totalRows = rows * snap\n const effectiveCols = isCompact ? Math.max(1, Math.round(totalCols / 2)) : totalCols\n const effectiveRows = isCompact ? Math.max(1, Math.round(totalRows / 2)) : totalRows\n const effectiveCells = isCompact ? Math.max(1, Math.round(columns / 2)) : columns\n const effectiveRowCells = isCompact ? Math.max(1, Math.round(rows / 2)) : rows\n\n const interactive = editable && !isMobile\n\n useEffect(() => {\n const node = innerRef.current\n if (!node || typeof ResizeObserver === 'undefined') return\n const update = () => setSize({width: node.clientWidth, height: node.clientHeight})\n update()\n const observer = new ResizeObserver(update)\n observer.observe(node)\n return () => observer.disconnect()\n }, [])\n\n const setRefs = useCallback(\n (node: HTMLDivElement | null) => {\n innerRef.current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) (ref as {current: HTMLDivElement | null}).current = node\n },\n [ref]\n )\n\n function getMin(item: T) {\n const m = minItemSize?.(item)\n if (!m) return {w: snap, h: snap}\n return {w: Math.max(snap, m.w * snap), h: Math.max(snap, m.h * snap)}\n }\n\n function startResize(e: ReactPointerEvent<HTMLDivElement>, item: T) {\n if (!interactive) return\n e.stopPropagation()\n e.preventDefault()\n ;(e.currentTarget as Element).setPointerCapture(e.pointerId)\n bringToFront(item.id)\n setDrag({\n itemId: item.id,\n mode: 'resize',\n startClientX: e.clientX,\n startClientY: e.clientY,\n original: {...item.position},\n })\n setPreview({...item.position})\n }\n\n function startDragFromHeader(e: ReactPointerEvent<HTMLDivElement>, item: T) {\n if (!interactive) return\n if ((e.target as Element).closest('button, [role=\"button\"]')) return\n e.stopPropagation()\n e.preventDefault()\n ;(e.currentTarget as Element).setPointerCapture(e.pointerId)\n bringToFront(item.id)\n setDrag({\n itemId: item.id,\n mode: 'drag',\n startClientX: e.clientX,\n startClientY: e.clientY,\n original: {...item.position},\n })\n setPreview({...item.position})\n }\n\n function handlePointerMove(e: ReactPointerEvent<HTMLDivElement>) {\n if (!drag || size.width === 0 || size.height === 0) return\n const cellPxX = size.width / effectiveCols\n const cellPxY = size.height / effectiveRows\n const dx = Math.round((e.clientX - drag.startClientX) / cellPxX)\n const dy = Math.round((e.clientY - drag.startClientY) / cellPxY)\n const original = drag.original\n\n const targetItem = items.find((it) => it.id === drag.itemId)\n const min = targetItem ? getMin(targetItem) : {w: snap, h: snap}\n\n if (drag.mode === 'drag') {\n const x = clamp(original.x + dx, 0, effectiveCols - original.w)\n const y = clamp(original.y + dy, 0, effectiveRows - original.h)\n setPreview({x, y, w: original.w, h: original.h})\n } else {\n const w = clamp(original.w + dx, min.w, effectiveCols - original.x)\n const h = clamp(original.h + dy, min.h, effectiveRows - original.y)\n setPreview({x: original.x, y: original.y, w, h})\n }\n }\n\n function handlePointerUp(e: ReactPointerEvent<HTMLDivElement>) {\n if (!drag) return\n try {\n ;(e.currentTarget as Element).releasePointerCapture(e.pointerId)\n } catch {\n // pointer may have already been released\n }\n if (preview) {\n if (drag.mode === 'drag') onItemMove?.(drag.itemId, preview)\n else onItemResize?.(drag.itemId, preview)\n }\n setDrag(null)\n setPreview(null)\n }\n\n function handleHeaderPointerUp(e: ReactPointerEvent<HTMLDivElement>) {\n if (drag) {\n suppressNextClick()\n handlePointerUp(e)\n }\n }\n\n const guidesOn =\n guides === 'always' ||\n (guides === 'on-edit' && interactive) ||\n (guides === 'on-drag' && drag !== null)\n\n const heightStyle: CSSProperties | undefined =\n height !== undefined ? {height: typeof height === 'number' ? `${height}px` : height} : undefined\n\n if (isMobile) {\n const ordered = [...items].sort((a, b) => a.position.y - b.position.y)\n return (\n <div\n ref={setRefs}\n className={cn('canvas-grid', 'mobile', className)}\n data-guides=\"off\"\n style={{...heightStyle, ...style}}\n >\n {ordered.map((item) => (\n <div key={item.id} className=\"canvas-grid-item\">\n {renderItem(item)}\n </div>\n ))}\n </div>\n )\n }\n\n const gridStyle: CSSProperties = {\n ...heightStyle,\n ...style,\n gridTemplateColumns: `repeat(${effectiveCols}, 1fr)`,\n gridTemplateRows: `repeat(${effectiveRows}, 1fr)`,\n ['--canvas-grid-cells' as string]: String(effectiveCells),\n ['--canvas-grid-row-cells' as string]: String(effectiveRowCells),\n }\n\n const overlayCells = effectiveCells * effectiveRowCells\n\n return (\n <div\n ref={setRefs}\n className={cn('canvas-grid', isCompact && 'compact', interactive && 'editable', className)}\n data-guides={guidesOn ? 'on' : 'off'}\n style={gridStyle}\n >\n <div className=\"canvas-grid-overlay\" aria-hidden>\n {Array.from({length: overlayCells}, (_, idx) => {\n const isLastCol = (idx + 1) % effectiveCells === 0\n const isLastRow = idx >= overlayCells - effectiveCells\n return (\n <div\n key={idx}\n className={cn('canvas-grid-cell', isLastCol && 'no-right', isLastRow && 'no-bottom')}\n />\n )\n })}\n </div>\n\n {items.map((item) => {\n const isDragging = drag?.itemId === item.id\n const live = isDragging && preview ? preview : item.position\n // half-precision math for compact viewport\n const x = isCompact ? Math.round(live.x / 2) : live.x\n const y = isCompact ? Math.round(live.y / 2) : live.y\n const w = Math.max(1, isCompact ? Math.round(live.w / 2) : live.w)\n const h = Math.max(1, isCompact ? Math.round(live.h / 2) : live.h)\n\n const baseZ = 1 + (touchOrder[item.id] ?? 0)\n const itemStyle: CSSProperties = {\n gridColumn: `${x + 1} / span ${w}`,\n gridRow: `${y + 1} / span ${h}`,\n zIndex: isDragging ? baseZ + 100 : baseZ,\n }\n\n return (\n <div\n key={item.id}\n className={cn('canvas-grid-item', isDragging && 'dragging')}\n style={itemStyle}\n >\n <div\n className=\"canvas-grid-item-header\"\n onPointerDown={(e) => startDragFromHeader(e, item)}\n onPointerMove={handlePointerMove}\n onPointerUp={handleHeaderPointerUp}\n onPointerCancel={handlePointerUp}\n >\n <MButtonGroup variant=\"ghost\" size=\"xs\">\n {interactive && onItemEdit && (\n <MButton\n color=\"primary\"\n iconOnly\n aria-label=\"Edit tile\"\n startIcon={<MEditIcon />}\n onPointerDown={(e) => e.stopPropagation()}\n onClick={(e) => {\n e.stopPropagation()\n onItemEdit(item.id)\n }}\n />\n )}\n {onItemExpand && (\n <MButton\n color=\"primary\"\n iconOnly\n aria-label=\"Expand tile\"\n startIcon={<MZoomInIcon />}\n onPointerDown={(e) => e.stopPropagation()}\n onClick={(e) => {\n e.stopPropagation()\n onItemExpand(item.id)\n }}\n />\n )}\n {interactive && onItemRemove && (\n <MButton\n color=\"error\"\n iconOnly\n aria-label=\"Remove tile\"\n startIcon={<MTrashIcon />}\n onPointerDown={(e) => e.stopPropagation()}\n onClick={(e) => {\n e.stopPropagation()\n onItemRemove(item.id)\n }}\n />\n )}\n </MButtonGroup>\n </div>\n <div className=\"canvas-grid-item-body\">\n {fitContent === 'scale' ? (\n <ScaleToFit baseWidth={fitContentBaseWidth}>{renderItem(item)}</ScaleToFit>\n ) : (\n renderItem(item)\n )}\n </div>\n {!interactive && onItemExpand && (\n <MButton\n className=\"canvas-grid-view-expand-handle\"\n variant=\"filled\"\n shape=\"circle\"\n size=\"sm\"\n color=\"primary\"\n iconOnly\n aria-label=\"Expand tile\"\n startIcon={<MZoomInIcon />}\n onClick={(e) => {\n e.stopPropagation()\n onItemExpand(item.id)\n }}\n />\n )}\n {interactive && isDragging && (\n <div className=\"canvas-grid-item-glass\" aria-hidden>\n <MMoveIcon size={28} />\n </div>\n )}\n {interactive && (\n <div\n className=\"canvas-grid-resize-handle\"\n aria-hidden\n onPointerDown={(e) => startResize(e, item)}\n onPointerMove={handlePointerMove}\n onPointerUp={(e) => {\n if (drag) suppressNextClick()\n handlePointerUp(e)\n }}\n onPointerCancel={handlePointerUp}\n />\n )}\n </div>\n )\n })}\n </div>\n )\n}\n\nexport const MCanvasGrid = forwardRef(MCanvasGridInner) as <T extends MCanvasGridItem>(\n props: MCanvasGridProps<T> & {ref?: Ref<HTMLDivElement>}\n) => ReactElement | null\n","import {forwardRef, useEffect, useImperativeHandle, useRef, useState} from 'react'\nimport type * as React from 'react'\nimport type {MStickyPanelProps} from './MStickyPanel.types'\nimport {cn} from '../../../utils/cn'\nimport './MStickyPanel.css'\n\nconst INTERACTIVE_SELECTOR = 'button, a, [role=\"button\"]'\n\n// Sticky side-rail panel: sticks to the viewport at `top`, fills viewport-relative height,\n// scrolls internally with an optional hidden scrollbar and click-and-drag scrolling.\nexport const MStickyPanel = forwardRef<HTMLDivElement, MStickyPanelProps>(function MStickyPanel(\n {\n children,\n top = 16,\n bottomGap = 16,\n hideScrollbar = true,\n draggable = true,\n className,\n style,\n ...rest\n },\n forwardedRef\n) {\n const panelRef = useRef<HTMLDivElement>(null)\n useImperativeHandle(forwardedRef, () => panelRef.current as HTMLDivElement)\n const dragState = useRef<{startY: number; startScrollTop: number} | null>(null)\n const [dragging, setDragging] = useState(false)\n\n useEffect(() => {\n if (!draggable) return\n\n const handleMouseMove = (event: MouseEvent) => {\n const drag = dragState.current\n const panel = panelRef.current\n if (!drag || !panel) return\n panel.scrollTop = drag.startScrollTop - (event.clientY - drag.startY)\n }\n\n const handleMouseUp = () => {\n if (!dragState.current) return\n dragState.current = null\n setDragging(false)\n }\n\n window.addEventListener('mousemove', handleMouseMove)\n window.addEventListener('mouseup', handleMouseUp)\n return () => {\n window.removeEventListener('mousemove', handleMouseMove)\n window.removeEventListener('mouseup', handleMouseUp)\n }\n }, [draggable])\n\n const handleMouseDown = (event: React.MouseEvent<HTMLDivElement>) => {\n if (!draggable) return\n // Skip drag start when the click originated on an interactive descendant\n // (button, link, role=button) so triggers like MDropdownMenu, MButton or\n // <Link> stay clickable inside the panel.\n const target = event.target as HTMLElement | null\n if (target && target.closest(INTERACTIVE_SELECTOR)) return\n\n const panel = panelRef.current\n if (!panel) return\n\n dragState.current = {startY: event.clientY, startScrollTop: panel.scrollTop}\n setDragging(true)\n event.preventDefault()\n }\n\n const mergedStyle: React.CSSProperties = {\n top,\n height: `calc(100vh - ${top + bottomGap}px)`,\n ...style,\n }\n\n return (\n <div\n ref={panelRef}\n className={cn(\n 'm-sticky-panel',\n draggable && 'draggable',\n dragging && 'is-dragging',\n hideScrollbar && 'hide-scrollbar',\n className\n )}\n style={mergedStyle}\n onMouseDown={handleMouseDown}\n {...rest}\n >\n {children}\n </div>\n )\n})\n"],"mappings":";;;;;;;;;;;;;;AAOA,SAAgB,EAAW,EACvB,UAAO,WACP,YAAS,IACT,WACA,YACA,YACA,UACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,cACA,cACA,UACA,aACA,GAAG,KACa;CAChB,IAAM,IAAe,EAAuB,EAAC,UAAM,CAAC;AAEpD,QACI,kBAAC,OAAD;EACI,WAAW,EACP,aACA,GACA,KAAU,UACV,GAAG,EAA2B;GAC1B;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACH,CAAC,EACF,EACH;EACD,OAAO;GAAC,GAAG;GAAc,GAAG;GAAM;EAClC,GAAI,EAAe,EAAO;EAC1B,GAAI;EAEH;EACC,CAAA;;;;AC1Dd,SAAgB,EAAQ,EACpB,eAAY,QACZ,YAAS,IACT,cAAW,IACX,YAAS,IACT,UAAO,WACP,YAAS,SACT,WACA,cACA,aACA,GAAG,KACU;AACb,QACI,kBAAC,UAAD;EACI,WAAW,EAAG,UAAU,GAAM,KAAY,YAAY,KAAU,UAAU,EAAU;EACpF,GAAI,EAAe,EAAO;EAC1B,GAAI;YAEJ,kBAAC,GAAD;GAAY,MAAM;GAAmB;GAAQ,WAAW,EAAG,SAAS,UAAU,IAAS;GAClF;GACQ,CAAA;EACR,CAAA;;;;ACpBjB,SAAgB,EAAQ,EACpB,eAAY,QACZ,YAAS,IACT,cAAW,IACX,UAAO,WACP,WACA,YACA,YACA,UACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,cACA,cACA,UACA,aACA,GAAG,KACU;CACb,IAAM,IAAe,EAAuB,EAAC,UAAM,CAAC;AAEpD,QACI,kBAAC,UAAD;EACI,WAAW,EACP,UACA,GACA,KAAY,YACZ,GAAG,EAA2B;GAC1B;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACH,CAAC,EACF,EACH;EACD,OAAO;GAAC,GAAG;GAAc,GAAG;GAAM;EAClC,GAAI,EAAe,EAAO;EAC1B,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"}
|
|
1
|
+
{"version":3,"file":"layout-CnEOTJnJ.js","names":[],"sources":["../src/components/layout/MContainer/MContainer.tsx","../src/components/layout/MHeader/MHeader.tsx","../src/components/layout/MFooter/MFooter.tsx","../src/components/layout/MNavs/MNavs.tsx","../src/components/layout/MNavbar/MNavbar.tsx","../src/components/layout/MSection/MSection.tsx","../src/components/layout/MStatGrid/MStatGrid.tsx","../src/components/layout/MDivider/MDivider.tsx","../src/components/layout/MSidebar/MSidebar.tsx","../src/components/layout/MBreadcrumb/MBreadcrumb.tsx","../src/components/layout/MAppShell/MAppShell.tsx","../src/components/layout/MCanvasGrid/ScaleToFit.tsx","../src/components/layout/MCanvasGrid/MCanvasGrid.tsx","../src/components/layout/MStickyPanel/MStickyPanel.tsx"],"sourcesContent":["import type {MContainerProps} from './MContainer.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {getLayoutUtilityClassNames, getLayoutUtilityStyles} from '../../../utils/layoutProps'\nimport './MContainer.css'\n\n// Constrain page content widths and apply shared spacing utilities.\nexport function MContainer({\n size = 'content',\n padded = true,\n hidden,\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n className,\n style,\n children,\n ...rest\n}: MContainerProps) {\n const utilityStyle = getLayoutUtilityStyles({fsize})\n\n return (\n <div\n className={cn(\n 'container',\n size,\n padded && 'padded',\n ...getLayoutUtilityClassNames({\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n }),\n className\n )}\n style={{...utilityStyle, ...style}}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n {children}\n </div>\n )\n}\n","import type {MHeaderProps} from './MHeader.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {MContainer} from '../MContainer'\nimport './MHeader.css'\n\n// Render a reusable page header shell aligned to a shared container.\nexport function MHeader({\n container = 'wide',\n padded = true,\n bordered = true,\n sticky = false,\n tone = 'surface',\n layout = 'split',\n hidden,\n className,\n children,\n ...rest\n}: MHeaderProps) {\n return (\n <header\n className={cn('header', tone, bordered && 'bordered', sticky && 'sticky', className)}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n <MContainer size={container} padded={padded} className={cn('inner', `layout-${layout}`)}>\n {children}\n </MContainer>\n </header>\n )\n}\n","import type {MFooterProps} from './MFooter.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {getLayoutUtilityClassNames, getLayoutUtilityStyles} from '../../../utils/layoutProps'\nimport {MContainer} from '../MContainer'\nimport './MFooter.css'\n\n// Render a reusable page footer shell with shared spacing utilities.\nexport function MFooter({\n container = 'wide',\n padded = true,\n bordered = true,\n tone = 'surface',\n hidden,\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n className,\n style,\n children,\n ...rest\n}: MFooterProps) {\n const utilityStyle = getLayoutUtilityStyles({fsize})\n\n return (\n <footer\n className={cn(\n 'footer',\n tone,\n bordered && 'bordered',\n ...getLayoutUtilityClassNames({\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n }),\n className\n )}\n style={{...utilityStyle, ...style}}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n <MContainer size={container} padded={padded} className=\"inner\" fullWidth>\n {children}\n </MContainer>\n </footer>\n )\n}\n","import type {MNavsProps} from './MNavs.types'\nimport {cn} from '../../../utils/cn'\nimport {MLink} from '../../typography'\nimport './MNavs.css'\n\n// Render a lightweight navigation list from data or custom children.\nexport function MNavs({items, orientation = 'horizontal', wrap = false, className, children, ...rest}: MNavsProps) {\n return (\n <div className={cn('navs', orientation, wrap && 'wrap', className)} {...rest}>\n {items\n ? items.map((item) => {\n const Icon = item.icon\n const hideLabel = item.iconOnly === true && Icon != null\n const labelAsString = typeof item.label === 'string' ? item.label : undefined\n const ariaLabel = hideLabel ? labelAsString : undefined\n const linkTitle = item.title ?? (hideLabel ? labelAsString : undefined)\n\n return (\n <MLink\n key={item.key ?? item.href ?? item.title?.toString() ?? labelAsString ?? ''}\n component={item.component}\n href={item.href}\n to={item.to}\n target={item.target}\n rel={item.rel}\n title={linkTitle}\n current={item.current}\n disabled={item.disabled}\n className={cn('link', hideLabel && 'icon-only', item.className)}\n aria-label={ariaLabel}\n >\n {Icon ? (\n <span className=\"icon\" aria-hidden={!hideLabel || undefined}>\n <Icon size={item.iconSize} />\n </span>\n ) : null}\n {!hideLabel ? item.label : null}\n </MLink>\n )\n })\n : children}\n </div>\n )\n}\n","import {Children, cloneElement, isValidElement, useEffect, useId, useRef, useState} from 'react'\nimport type {MouseEvent as ReactMouseEvent, ReactElement, ReactNode} from 'react'\nimport type {MNavbarProps} from './MNavbar.types'\nimport {getHiddenProps, MShellBreakpoints, useMaxWidth} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {MContainer} from '../MContainer'\nimport {MInline} from '../MInline'\nimport type {MInlineProps} from '../MInline'\nimport {MNavs} from '../MNavs'\nimport {MButton} from '../../controls/MButton'\nimport {MMenuIcon} from '../../../icons'\nimport './MNavbar.css'\n\ntype NavLikeElement = ReactElement<{children?: ReactNode; orientation?: 'horizontal' | 'vertical'}>\n\n// Walks the children tree (any depth) looking for MNavs instances so the navbar\n// can pull them into the mobile menu even when wrapped in MInline / MStack.\nfunction findNavLikeChildren(children: ReactNode, found: NavLikeElement[] = []): NavLikeElement[] {\n Children.forEach(children, (child) => {\n if (!isValidElement(child)) {\n return\n }\n if (child.type === MNavs) {\n found.push(child as NavLikeElement)\n return\n }\n const nestedChildren = (child.props as {children?: ReactNode} | null)?.children\n if (nestedChildren !== undefined) {\n findNavLikeChildren(nestedChildren, found)\n }\n })\n return found\n}\n\n// Render a horizontal app or site navigation shell with container alignment.\n// Below the md breakpoint MNavs children are collapsed behind a hamburger toggle\n// that opens either a dropdown panel or a side drawer with the navigation items.\nexport function MNavbar({\n container = 'content',\n padded = true,\n bordered = true,\n sticky = false,\n tone = 'surface',\n justify = 'between',\n wrap = false,\n mobileMenu = 'dropdown',\n mobileMenuContent,\n mobileMenuFooter,\n collapseActions = false,\n mobileMenuLabel = 'Open navigation',\n mobileBreakpoint = MShellBreakpoints.compact,\n hidden,\n className,\n children,\n ...rest\n}: MNavbarProps) {\n const [open, setOpen] = useState(false)\n const rootRef = useRef<HTMLElement | null>(null)\n const menuId = useId()\n const mobile = useMaxWidth(mobileBreakpoint)\n\n const childArray = Children.toArray(children)\n\n const mobileNavs = findNavLikeChildren(children).map((element, index) =>\n cloneElement(element, {\n key: `mnavbar-mobile-navs-${index}`,\n orientation: 'vertical',\n })\n )\n\n const toggleButton = (\n <MButton\n key=\"mnavbar-toggle\"\n type=\"button\"\n variant=\"ghost\"\n size=\"md\"\n shape=\"circle\"\n iconOnly\n className=\"navbar-toggle\"\n aria-label={mobileMenuLabel}\n aria-expanded={open}\n aria-controls={menuId}\n onClick={handleToggleClick}\n >\n <MMenuIcon />\n </MButton>\n )\n\n let lastInlineIndex = -1\n for (let index = childArray.length - 1; index >= 0; index -= 1) {\n const child = childArray[index]\n if (isValidElement(child) && child.type === MInline) {\n lastInlineIndex = index\n break\n }\n }\n\n // When collapseActions is on and we're below the breakpoint, the last inline\n // (usually theme / lang / search) is pulled out of the bar and rendered in\n // the mobile menu footer. The burger toggle then attaches to the previous\n // inline (typically primary actions) — or sits on its own when none exists.\n const shouldCollapseLastInline = collapseActions && mobile && lastInlineIndex !== -1\n let collapsedActionsInline: ReactElement<MInlineProps> | null = null\n let workingChildren = childArray\n let toggleHostIndex = lastInlineIndex\n if (shouldCollapseLastInline) {\n collapsedActionsInline = childArray[lastInlineIndex] as ReactElement<MInlineProps>\n workingChildren = childArray.filter((_, index) => index !== lastInlineIndex)\n toggleHostIndex = -1\n for (let index = workingChildren.length - 1; index >= 0; index -= 1) {\n const child = workingChildren[index]\n if (isValidElement(child) && child.type === MInline) {\n toggleHostIndex = index\n break\n }\n }\n }\n\n const renderedChildren =\n toggleHostIndex === -1\n ? [...workingChildren, toggleButton]\n : workingChildren.map((child, index) => {\n if (index !== toggleHostIndex) return child\n const inlineChild = child as ReactElement<MInlineProps>\n const inlineChildren = Children.toArray(inlineChild.props.children)\n return cloneElement(inlineChild, {\n key: inlineChild.key ?? `mnavbar-inline-${index}`,\n children: [...inlineChildren, toggleButton],\n })\n })\n\n useEffect(() => {\n if (!open) return\n\n function handlePointerDown(event: PointerEvent) {\n const root = rootRef.current\n if (!root) return\n if (event.target instanceof Node && root.contains(event.target)) return\n setOpen(false)\n }\n\n function handleKeydown(event: KeyboardEvent) {\n if (event.key === 'Escape') setOpen(false)\n }\n\n document.addEventListener('pointerdown', handlePointerDown)\n document.addEventListener('keydown', handleKeydown)\n return () => {\n document.removeEventListener('pointerdown', handlePointerDown)\n document.removeEventListener('keydown', handleKeydown)\n }\n }, [open])\n\n useEffect(() => {\n if (!mobile) {\n setOpen(false)\n }\n }, [mobile])\n\n function handleToggleClick() {\n setOpen((previous) => !previous)\n }\n\n function handleMenuClick(event: ReactMouseEvent<HTMLDivElement>) {\n const target = event.target as HTMLElement | null\n if (!target) return\n if (target.closest('a, [role=\"menuitem\"]')) {\n setOpen(false)\n }\n }\n\n return (\n <nav\n ref={rootRef}\n className={cn(\n 'navbar',\n tone,\n bordered && 'bordered',\n sticky && 'sticky',\n mobile && 'mobile-view',\n open && 'mobile-open',\n `mobile-${mobileMenu}`,\n className\n )}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n <MContainer size={container} padded={padded} className=\"container\">\n <div className={cn('inner', justify, wrap && 'wrap')}>{renderedChildren}</div>\n </MContainer>\n\n {mobileMenu === 'drawer' && <div className={cn('mobile-backdrop', open && 'visible')} aria-hidden />}\n\n <div\n id={menuId}\n className={cn('mobile-menu', mobileMenu, open && 'open')}\n role=\"menu\"\n aria-hidden={!open || undefined}\n onClick={handleMenuClick}\n >\n {mobileNavs}\n {mobileMenuContent}\n {collapsedActionsInline ? (\n <div className=\"mobile-menu-footer\">\n {cloneElement(collapsedActionsInline, {\n key: 'mnavbar-collapsed-actions',\n })}\n </div>\n ) : null}\n {mobileMenuFooter ? <div className=\"mobile-menu-footer\">{mobileMenuFooter}</div> : null}\n </div>\n </nav>\n )\n}\n","import type React from 'react'\nimport type {MSectionProps} from './MSection.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport './MSection.css'\n\n// Render a semantic page section with predefined spacing and tone.\nexport function MSection({\n as = 'section',\n spacing = 'lg',\n tone = 'default',\n hidden,\n className,\n style,\n children,\n ...rest\n}: MSectionProps) {\n const Component = as\n\n return (\n <Component\n className={cn('section', spacing, tone, className)}\n style={style}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n {children}\n </Component>\n )\n}\n","import type {MStatGridProps} from './MStatGrid.types'\nimport {MSimpleGrid} from '../MSimpleGrid'\n\nexport function MStatGrid<T>({\n items,\n renderItem,\n children,\n columns = 4,\n minItemWidth = '15rem',\n ...rest\n}: MStatGridProps<T>) {\n return (\n <MSimpleGrid columns={columns} minItemWidth={minItemWidth} {...rest}>\n {items && renderItem ? items.map((item, index) => renderItem(item, index)) : children}\n </MSimpleGrid>\n )\n}\n","import type {MDividerProps} from './MDivider.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {getLayoutUtilityClassNames, getLayoutUtilityStyles} from '../../../utils/layoutProps'\nimport './MDivider.css'\n\n// Render a semantic divider line between related content blocks.\nexport function MDivider({\n orientation = 'horizontal',\n variant = 'solid',\n hidden,\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n className,\n style,\n ...rest\n}: MDividerProps) {\n const utilityStyle = getLayoutUtilityStyles({fsize})\n\n return (\n <div\n role=\"separator\"\n aria-orientation={orientation}\n className={cn(\n 'divider',\n orientation,\n variant,\n ...getLayoutUtilityClassNames({\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n }),\n className\n )}\n style={{...utilityStyle, ...style}}\n {...getHiddenProps(hidden)}\n {...rest}\n />\n )\n}\n","import {createContext, useContext, useState, useEffect, useCallback, useMemo} from 'react'\nimport {cn} from '../../../utils/cn'\nimport {MButton} from '../../controls'\nimport {MChevronRightIcon, MMenuIcon} from '../../../icons'\nimport {MDropdownMenu, MTooltip} from '../../overlays'\nimport {MShellBreakpoints, useMaxWidth} from '../../../theme'\nimport type {\n MSidebarProps,\n MSidebarHeaderProps,\n MSidebarBodyProps,\n MSidebarNavProps,\n MSidebarItemProps,\n MSidebarGroupProps,\n MSidebarFooterProps,\n MSidebarDividerProps,\n MSidebarMode,\n} from './MSidebar.types'\nimport './MSidebar.css'\n\nconst STORAGE_KEY = 'mineralui-sidebar'\n\ninterface SidebarContextValue {\n mode: MSidebarMode\n mobile: boolean\n mobileOpen: boolean\n canToggle: boolean\n toggleMode: () => void\n}\n\nconst SidebarCtx = createContext<SidebarContextValue>({\n mode: 'expanded',\n mobile: false,\n mobileOpen: false,\n canToggle: false,\n toggleMode: () => {},\n})\n\n// Read shared sidebar state inside slot components.\nfunction useSidebar() {\n return useContext(SidebarCtx)\n}\n\n// Render the sidebar shell and coordinate desktop and mobile behavior.\nexport function MSidebar({\n mode: modeProp = 'auto',\n defaultMode = 'expanded',\n onModeChange,\n persist = false,\n side = 'left',\n tone = 'subtle',\n bordered = true,\n mobileBreakpoint = MShellBreakpoints.mobile,\n compactBreakpoint = MShellBreakpoints.compact,\n className,\n style,\n children,\n}: MSidebarProps) {\n const resolvedCompactBreakpoint = Math.max(compactBreakpoint, mobileBreakpoint)\n const mobile = useMaxWidth(mobileBreakpoint)\n const compactViewport = useMaxWidth(resolvedCompactBreakpoint)\n const compact = !mobile && compactViewport\n const [mobileOpen, setMobileOpen] = useState(false)\n\n const [internalMode, setInternalMode] = useState<MSidebarMode>(() => {\n if (persist) {\n try {\n const v = localStorage.getItem(STORAGE_KEY)\n if (v === 'expanded' || v === 'collapsed') return v\n } catch {\n /* noop */\n }\n }\n\n return defaultMode\n })\n\n const resolvedMode: MSidebarMode = mobile\n ? 'expanded'\n : compact\n ? 'collapsed'\n : modeProp === 'auto'\n ? internalMode\n : modeProp === 'collapsed'\n ? 'collapsed'\n : 'expanded'\n\n // MToggle only the desktop width state. Mobile uses its own overlay flow.\n const toggleMode = useCallback(() => {\n const next: MSidebarMode = resolvedMode === 'expanded' ? 'collapsed' : 'expanded'\n\n setInternalMode(next)\n onModeChange?.(next)\n\n if (persist) {\n try {\n localStorage.setItem(STORAGE_KEY, next)\n } catch {\n /* noop */\n }\n }\n }, [resolvedMode, onModeChange, persist])\n\n const closeMobile = useCallback(() => setMobileOpen(false), [])\n\n // Let Escape close the temporary mobile drawer.\n useEffect(() => {\n if (!mobileOpen) return\n\n const handler = (e: KeyboardEvent) => {\n if (e.key === 'Escape') setMobileOpen(false)\n }\n\n document.addEventListener('keydown', handler)\n return () => document.removeEventListener('keydown', handler)\n }, [mobileOpen])\n\n useEffect(() => {\n if (!mobile) {\n setMobileOpen(false)\n }\n }, [mobile])\n\n const canToggle = !mobile && !compact && modeProp === 'auto'\n\n const ctx = useMemo<SidebarContextValue>(\n () => ({mode: resolvedMode, mobile, mobileOpen, canToggle, toggleMode}),\n [resolvedMode, mobile, mobileOpen, canToggle, toggleMode]\n )\n\n const isCollapsed = !mobile && resolvedMode === 'collapsed'\n\n const sidebarCls = cn(\n 'sidebar',\n tone,\n side,\n isCollapsed && 'collapsed',\n compact && 'compact',\n bordered && 'bordered',\n mobile && 'mobile',\n mobile && mobileOpen && 'mobile-open',\n className\n )\n\n return (\n <SidebarCtx.Provider value={ctx}>\n {mobile && mobileOpen && <div className=\"sidebar-backdrop\" onClick={closeMobile} />}\n\n <aside className={sidebarCls} style={style}>\n {children}\n </aside>\n\n {mobile && !mobileOpen && (\n <button\n className={cn('sidebar-hamburger', side)}\n onClick={() => setMobileOpen(true)}\n aria-label=\"Open menu\"\n >\n <span className=\"sidebar-hamburger-icon\" aria-hidden=\"true\">\n <MMenuIcon />\n </span>\n </button>\n )}\n </SidebarCtx.Provider>\n )\n}\n\n// Render the top area with branding and an optional collapse toggle.\nexport function MSidebarHeader({bordered = false, className, children}: MSidebarHeaderProps) {\n const {mode, mobile, canToggle, toggleMode} = useSidebar()\n const isCollapsed = !mobile && mode === 'collapsed'\n\n return (\n <div className={cn('sidebar-header', bordered && 'bordered', className)}>\n <div className=\"sidebar-header-content\">{children}</div>\n {canToggle && (\n <MButton\n variant=\"outlined\"\n color=\"neutral\"\n iconOnly\n size=\"sm\"\n onClick={toggleMode}\n aria-label={isCollapsed ? 'Expand sidebar' : 'Collapse sidebar'}\n className=\"sidebar-toggle\"\n >\n <span className={cn('sidebar-chevron', isCollapsed && 'flipped')}>\n <MChevronRightIcon />\n </span>\n </MButton>\n )}\n </div>\n )\n}\n\n// Wrap the scrollable middle area between header and footer.\nexport function MSidebarBody({className, children}: MSidebarBodyProps) {\n return <div className={cn('sidebar-body', className)}>{children}</div>\n}\n\n// Wrap sidebar links in a navigation landmark.\nexport function MSidebarNav({className, children}: MSidebarNavProps) {\n return <nav className={cn('sidebar-nav', className)}>{children}</nav>\n}\n\n// Render one clickable sidebar row as a link, button or custom component.\nexport function MSidebarItem({\n icon,\n label,\n description,\n href,\n to,\n onClick,\n active = false,\n disabled = false,\n badge,\n color,\n component,\n className,\n}: MSidebarItemProps) {\n const {mode, mobile} = useSidebar()\n const isCollapsed = !mobile && mode === 'collapsed'\n\n // ONE tooltip per row: prefer description, fall back to label. The HTML\n // title attribute used in collapsed mode mirrors the same priority but is\n // limited to strings (browsers can't render ReactNodes).\n const tooltipContent = description ?? label\n const titleAttr = typeof description === 'string'\n ? description\n : typeof label === 'string'\n ? label\n : undefined\n\n const Tag = component ?? (href || to ? 'a' : 'button')\n const linkProps = component ? (to ? {to} : href ? {href} : {}) : href ? {href} : to ? {href: to} : {}\n const cls = cn('sidebar-item', active && 'active', disabled && 'disabled', color, className)\n\n return (\n <Tag\n className={cls}\n onClick={disabled ? undefined : onClick}\n aria-disabled={disabled || undefined}\n title={isCollapsed ? titleAttr : undefined}\n {...linkProps}\n >\n {icon && <span className=\"sidebar-item-icon\">{icon}</span>}\n {!isCollapsed && (\n <MTooltip content={tooltipContent} placement=\"top\" className=\"sidebar-item-label-tooltip\">\n <span className=\"sidebar-item-label\">{label}</span>\n </MTooltip>\n )}\n {!isCollapsed && badge && <span className=\"sidebar-item-badge\">{badge}</span>}\n </Tag>\n )\n}\n\n// Group related sidebar items and swap to a dropdown when collapsed.\nexport function MSidebarGroup({\n label,\n icon,\n active = false,\n defaultOpen = true,\n collapsible = true,\n children,\n className,\n}: MSidebarGroupProps) {\n const sidebarCtx = useSidebar()\n const {mode, mobile} = sidebarCtx\n const isCollapsed = !mobile && mode === 'collapsed'\n const [open, setOpen] = useState(defaultOpen)\n\n const expandedCtx = useMemo<SidebarContextValue>(() => ({...sidebarCtx, mode: 'expanded'}), [sidebarCtx])\n\n // Keep expand/collapse local to this group.\n const toggle = () => {\n if (collapsible) setOpen((o) => !o)\n }\n\n if (isCollapsed) {\n const trigger = (\n <span className={cn('sidebar-group-icon collapsed', active && 'active')} title={label}>\n {icon}\n </span>\n )\n\n return (\n <div className={cn('sidebar-group', className)}>\n <MDropdownMenu trigger={trigger} placement=\"right-start\" closeOnSelect openOn=\"hover\">\n <SidebarCtx.Provider value={expandedCtx}>{children}</SidebarCtx.Provider>\n </MDropdownMenu>\n </div>\n )\n }\n\n return (\n <div className={cn('sidebar-group', className)}>\n <button className={cn('sidebar-group-header', active && 'active')} onClick={toggle} aria-expanded={open}>\n {icon && <span className=\"sidebar-group-icon\">{icon}</span>}\n <span className=\"sidebar-group-label\">{label}</span>\n {collapsible && (\n <span className={cn('sidebar-group-arrow', open && 'open')}>\n <MChevronRightIcon />\n </span>\n )}\n </button>\n {open && <div className=\"sidebar-group-items\">{children}</div>}\n </div>\n )\n}\n\n// Render the bottom slot for version info or quick actions.\nexport function MSidebarFooter({bordered = false, className, children}: MSidebarFooterProps) {\n return <div className={cn('sidebar-footer', bordered && 'bordered', className)}>{children}</div>\n}\n\n// Render a spacing-aware divider between sidebar regions.\nexport function MSidebarDivider({className, spacing = 'md'}: MSidebarDividerProps) {\n return <hr className={cn('sidebar-divider', spacing, className)} />\n}\n","import {useMemo} from 'react'\nimport {cn} from '../../../utils/cn'\nimport type {MBreadcrumbProps} from './MBreadcrumb.types'\nimport './MBreadcrumb.css'\n\n// Render a compact path and collapse the middle when needed.\nexport function MBreadcrumb({items, separator = '/', maxItems, className, ...rest}: MBreadcrumbProps) {\n // Keep the current page visible while shortening deep paths.\n const visible = useMemo(() => {\n if (!maxItems || maxItems >= items.length) return items\n if (maxItems < 2) return [items[items.length - 1]]\n const head = items.slice(0, 1)\n const tail = items.slice(-(maxItems - 1))\n return [...head, null, ...tail]\n }, [items, maxItems])\n\n return (\n <nav aria-label=\"breadcrumb\" className={cn('breadcrumb', className)} {...rest}>\n <ol className=\"trail\">\n {visible.map((item, i) => {\n if (item === null) {\n return (\n <li key=\"ellipsis\" className=\"crumb dots\">\n <span className=\"sep\">{separator}</span>\n <span>…</span>\n </li>\n )\n }\n\n const isLast = i === visible.length - 1\n\n return (\n <li key={i} className={cn('crumb', isLast && 'active')}>\n {i > 0 && <span className=\"sep\">{separator}</span>}\n {item.href && !isLast ? (\n <a href={item.href} className=\"link\" onClick={item.onClick}>\n {item.label}\n </a>\n ) : item.onClick && !isLast ? (\n <button type=\"button\" className=\"link btn\" onClick={item.onClick}>\n {item.label}\n </button>\n ) : (\n <span className=\"current\" aria-current={isLast ? 'page' : undefined}>\n {item.label}\n </span>\n )}\n </li>\n )\n })}\n </ol>\n </nav>\n )\n}\n","import {forwardRef, Children, isValidElement} from 'react'\nimport type * as React from 'react'\nimport type {MAppShellProps, MBodyProps} from './MAppShell.types'\nimport {cn} from '../../../utils/cn'\nimport {MSidebar} from '../MSidebar'\nimport './MAppShell.css'\n\nexport const MAppShell = forwardRef<HTMLDivElement, MAppShellProps>(function MAppShell(\n {className, children, ...rest},\n ref\n) {\n const sidebarElements: React.ReactNode[] = []\n const otherElements: React.ReactNode[] = []\n\n Children.forEach(children, (child) => {\n if (isValidElement(child) && child.type === MSidebar) {\n sidebarElements.push(child)\n } else {\n otherElements.push(child)\n }\n })\n\n return (\n <div ref={ref} className={cn('app-shell', className)} {...rest}>\n {sidebarElements}\n <div className=\"app-main\">{otherElements}</div>\n </div>\n )\n})\n\nexport const MBody = forwardRef<HTMLDivElement, MBodyProps>(function MBody({className, children, ...rest}, ref) {\n return (\n <div ref={ref} className={cn('app-body', className)} {...rest}>\n {children}\n </div>\n )\n})\n","import {useEffect, useRef, useState, type ReactNode} from 'react'\n\ninterface ScaleToFitProps {\n /**\n * Minimum render width (in CSS px). When the parent is narrower, content\n * is rendered at this width and scaled down. When the parent is wider,\n * content is rendered at the parent's width (no scale-up, no padding).\n */\n baseWidth?: number\n children: ReactNode\n}\n\n/**\n * Renders `children` at `max(baseWidth, parentWidth)`, then applies\n * `transform: scale(...)` so the rendered block fits the parent box without\n * scrollbars. Scale never exceeds 1 (no blurry up-scaling). When the parent\n * is wider than baseWidth, render width tracks the parent so content fills\n * the available space natively (no horizontal padding).\n */\nexport function ScaleToFit({baseWidth = 480, children}: ScaleToFitProps) {\n const wrapperRef = useRef<HTMLDivElement>(null)\n const contentRef = useRef<HTMLDivElement>(null)\n const [scale, setScale] = useState(1)\n const [renderWidth, setRenderWidth] = useState<number>(baseWidth)\n\n useEffect(() => {\n const wrap = wrapperRef.current\n const content = contentRef.current\n if (!wrap || !content) return\n\n let frame = 0\n const recompute = () => {\n cancelAnimationFrame(frame)\n frame = requestAnimationFrame(() => {\n const wW = wrap.clientWidth\n const wH = wrap.clientHeight\n if (wW === 0 || wH === 0) return\n const cW = Math.max(baseWidth, wW)\n const cH = content.offsetHeight\n if (cW === 0 || cH === 0) return\n const sW = wW / cW\n const sH = wH / cH\n const next = Math.min(sW, sH, 1)\n if (next > 0 && Number.isFinite(next)) {\n setRenderWidth(cW)\n setScale(next)\n }\n })\n }\n\n const ro = new ResizeObserver(recompute)\n ro.observe(wrap)\n ro.observe(content)\n recompute()\n return () => {\n cancelAnimationFrame(frame)\n ro.disconnect()\n }\n }, [baseWidth])\n\n return (\n <div ref={wrapperRef} className=\"canvas-grid-scale-wrapper\">\n <div\n ref={contentRef}\n className=\"canvas-grid-scale-content\"\n style={{width: `${renderWidth}px`, transform: `scale(${scale})`}}\n >\n {children}\n </div>\n </div>\n )\n}\n","import {forwardRef, useCallback, useEffect, useRef, useState} from 'react'\nimport type {CSSProperties, ForwardedRef, PointerEvent as ReactPointerEvent, ReactElement, Ref} from 'react'\nimport type {MCanvasGridItem, MCanvasGridPosition, MCanvasGridProps} from './MCanvasGrid.types'\nimport {cn} from '../../../utils/cn'\nimport {MShellBreakpoints, useMaxWidth} from '../../../theme'\nimport {MEditIcon, MMoveIcon, MTrashIcon, MZoomInIcon} from '../../../icons'\nimport {MButton} from '../../controls/MButton'\nimport {MButtonGroup} from '../../controls/MButtonGroup'\nimport {ScaleToFit} from './ScaleToFit'\nimport './MCanvasGrid.css'\n\ninterface DragState {\n itemId: string\n mode: 'drag' | 'resize'\n startClientX: number\n startClientY: number\n original: MCanvasGridPosition\n}\n\nfunction clamp(value: number, min: number, max: number) {\n return Math.max(min, Math.min(max, value))\n}\n\nfunction MCanvasGridInner<T extends MCanvasGridItem>(\n {\n columns = 24,\n rows = 24,\n snap = 4,\n items,\n renderItem,\n minItemSize,\n maxItemSize: _maxItemSize,\n editable = false,\n onItemMove,\n onItemResize,\n onItemRemove,\n onItemEdit,\n onItemExpand,\n guides = 'always',\n compactBreakpoint = MShellBreakpoints.compact,\n mobileBreakpoint = MShellBreakpoints.mobile,\n height,\n fitContent = 'scroll',\n fitContentBaseWidth = 480,\n className,\n style,\n }: MCanvasGridProps<T>,\n ref: ForwardedRef<HTMLDivElement>\n) {\n const innerRef = useRef<HTMLDivElement | null>(null)\n const [size, setSize] = useState({width: 0, height: 0})\n const [drag, setDrag] = useState<DragState | null>(null)\n const [preview, setPreview] = useState<MCanvasGridPosition | null>(null)\n const [touchOrder, setTouchOrder] = useState<Record<string, number>>({})\n const touchCounterRef = useRef(0)\n\n function bringToFront(itemId: string) {\n touchCounterRef.current += 1\n setTouchOrder((prev) => ({...prev, [itemId]: touchCounterRef.current}))\n }\n\n function suppressNextClick() {\n let armed = true\n const stopper = (ev: MouseEvent) => {\n if (!armed) return\n armed = false\n ev.stopPropagation()\n ev.preventDefault()\n window.removeEventListener('click', stopper, true)\n }\n window.addEventListener('click', stopper, true)\n window.setTimeout(() => {\n if (!armed) return\n armed = false\n window.removeEventListener('click', stopper, true)\n }, 60)\n }\n\n const isMobile = useMaxWidth(mobileBreakpoint)\n const isCompact = useMaxWidth(compactBreakpoint) && !isMobile\n\n const totalCols = columns * snap\n const totalRows = rows * snap\n const effectiveCols = isCompact ? Math.max(1, Math.round(totalCols / 2)) : totalCols\n const effectiveRows = isCompact ? Math.max(1, Math.round(totalRows / 2)) : totalRows\n const effectiveCells = isCompact ? Math.max(1, Math.round(columns / 2)) : columns\n const effectiveRowCells = isCompact ? Math.max(1, Math.round(rows / 2)) : rows\n\n const interactive = editable && !isMobile\n\n useEffect(() => {\n const node = innerRef.current\n if (!node || typeof ResizeObserver === 'undefined') return\n const update = () => setSize({width: node.clientWidth, height: node.clientHeight})\n update()\n const observer = new ResizeObserver(update)\n observer.observe(node)\n return () => observer.disconnect()\n }, [])\n\n const setRefs = useCallback(\n (node: HTMLDivElement | null) => {\n innerRef.current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) (ref as {current: HTMLDivElement | null}).current = node\n },\n [ref]\n )\n\n function getMin(item: T) {\n const m = minItemSize?.(item)\n if (!m) return {w: snap, h: snap}\n return {w: Math.max(snap, m.w * snap), h: Math.max(snap, m.h * snap)}\n }\n\n function startResize(e: ReactPointerEvent<HTMLDivElement>, item: T) {\n if (!interactive) return\n e.stopPropagation()\n e.preventDefault()\n ;(e.currentTarget as Element).setPointerCapture(e.pointerId)\n bringToFront(item.id)\n setDrag({\n itemId: item.id,\n mode: 'resize',\n startClientX: e.clientX,\n startClientY: e.clientY,\n original: {...item.position},\n })\n setPreview({...item.position})\n }\n\n function startDragFromHeader(e: ReactPointerEvent<HTMLDivElement>, item: T) {\n if (!interactive) return\n if ((e.target as Element).closest('button, [role=\"button\"]')) return\n e.stopPropagation()\n e.preventDefault()\n ;(e.currentTarget as Element).setPointerCapture(e.pointerId)\n bringToFront(item.id)\n setDrag({\n itemId: item.id,\n mode: 'drag',\n startClientX: e.clientX,\n startClientY: e.clientY,\n original: {...item.position},\n })\n setPreview({...item.position})\n }\n\n function handlePointerMove(e: ReactPointerEvent<HTMLDivElement>) {\n if (!drag || size.width === 0 || size.height === 0) return\n const cellPxX = size.width / effectiveCols\n const cellPxY = size.height / effectiveRows\n const dx = Math.round((e.clientX - drag.startClientX) / cellPxX)\n const dy = Math.round((e.clientY - drag.startClientY) / cellPxY)\n const original = drag.original\n\n const targetItem = items.find((it) => it.id === drag.itemId)\n const min = targetItem ? getMin(targetItem) : {w: snap, h: snap}\n\n if (drag.mode === 'drag') {\n const x = clamp(original.x + dx, 0, effectiveCols - original.w)\n const y = clamp(original.y + dy, 0, effectiveRows - original.h)\n setPreview({x, y, w: original.w, h: original.h})\n } else {\n const w = clamp(original.w + dx, min.w, effectiveCols - original.x)\n const h = clamp(original.h + dy, min.h, effectiveRows - original.y)\n setPreview({x: original.x, y: original.y, w, h})\n }\n }\n\n function handlePointerUp(e: ReactPointerEvent<HTMLDivElement>) {\n if (!drag) return\n try {\n ;(e.currentTarget as Element).releasePointerCapture(e.pointerId)\n } catch {\n // pointer may have already been released\n }\n if (preview) {\n if (drag.mode === 'drag') onItemMove?.(drag.itemId, preview)\n else onItemResize?.(drag.itemId, preview)\n }\n setDrag(null)\n setPreview(null)\n }\n\n function handleHeaderPointerUp(e: ReactPointerEvent<HTMLDivElement>) {\n if (drag) {\n suppressNextClick()\n handlePointerUp(e)\n }\n }\n\n const guidesOn =\n guides === 'always' ||\n (guides === 'on-edit' && interactive) ||\n (guides === 'on-drag' && drag !== null)\n\n const heightStyle: CSSProperties | undefined =\n height !== undefined ? {height: typeof height === 'number' ? `${height}px` : height} : undefined\n\n if (isMobile) {\n const ordered = [...items].sort((a, b) => a.position.y - b.position.y)\n return (\n <div\n ref={setRefs}\n className={cn('canvas-grid', 'mobile', className)}\n data-guides=\"off\"\n style={{...heightStyle, ...style}}\n >\n {ordered.map((item) => (\n <div key={item.id} className=\"canvas-grid-item\">\n {renderItem(item)}\n </div>\n ))}\n </div>\n )\n }\n\n const gridStyle: CSSProperties = {\n ...heightStyle,\n ...style,\n gridTemplateColumns: `repeat(${effectiveCols}, 1fr)`,\n gridTemplateRows: `repeat(${effectiveRows}, 1fr)`,\n ['--canvas-grid-cells' as string]: String(effectiveCells),\n ['--canvas-grid-row-cells' as string]: String(effectiveRowCells),\n }\n\n const overlayCells = effectiveCells * effectiveRowCells\n\n return (\n <div\n ref={setRefs}\n className={cn('canvas-grid', isCompact && 'compact', interactive && 'editable', className)}\n data-guides={guidesOn ? 'on' : 'off'}\n style={gridStyle}\n >\n <div className=\"canvas-grid-overlay\" aria-hidden>\n {Array.from({length: overlayCells}, (_, idx) => {\n const isLastCol = (idx + 1) % effectiveCells === 0\n const isLastRow = idx >= overlayCells - effectiveCells\n return (\n <div\n key={idx}\n className={cn('canvas-grid-cell', isLastCol && 'no-right', isLastRow && 'no-bottom')}\n />\n )\n })}\n </div>\n\n {items.map((item) => {\n const isDragging = drag?.itemId === item.id\n const live = isDragging && preview ? preview : item.position\n // half-precision math for compact viewport\n const x = isCompact ? Math.round(live.x / 2) : live.x\n const y = isCompact ? Math.round(live.y / 2) : live.y\n const w = Math.max(1, isCompact ? Math.round(live.w / 2) : live.w)\n const h = Math.max(1, isCompact ? Math.round(live.h / 2) : live.h)\n\n const baseZ = 1 + (touchOrder[item.id] ?? 0)\n const itemStyle: CSSProperties = {\n gridColumn: `${x + 1} / span ${w}`,\n gridRow: `${y + 1} / span ${h}`,\n zIndex: isDragging ? baseZ + 100 : baseZ,\n }\n\n return (\n <div\n key={item.id}\n className={cn('canvas-grid-item', isDragging && 'dragging')}\n style={itemStyle}\n >\n <div\n className=\"canvas-grid-item-header\"\n onPointerDown={(e) => startDragFromHeader(e, item)}\n onPointerMove={handlePointerMove}\n onPointerUp={handleHeaderPointerUp}\n onPointerCancel={handlePointerUp}\n >\n <MButtonGroup variant=\"ghost\" size=\"xs\">\n {interactive && onItemEdit && (\n <MButton\n color=\"primary\"\n iconOnly\n aria-label=\"Edit tile\"\n startIcon={<MEditIcon />}\n onPointerDown={(e) => e.stopPropagation()}\n onClick={(e) => {\n e.stopPropagation()\n onItemEdit(item.id)\n }}\n />\n )}\n {onItemExpand && (\n <MButton\n color=\"primary\"\n iconOnly\n aria-label=\"Expand tile\"\n startIcon={<MZoomInIcon />}\n onPointerDown={(e) => e.stopPropagation()}\n onClick={(e) => {\n e.stopPropagation()\n onItemExpand(item.id)\n }}\n />\n )}\n {interactive && onItemRemove && (\n <MButton\n color=\"error\"\n iconOnly\n aria-label=\"Remove tile\"\n startIcon={<MTrashIcon />}\n onPointerDown={(e) => e.stopPropagation()}\n onClick={(e) => {\n e.stopPropagation()\n onItemRemove(item.id)\n }}\n />\n )}\n </MButtonGroup>\n </div>\n <div className=\"canvas-grid-item-body\">\n {fitContent === 'scale' ? (\n <ScaleToFit baseWidth={fitContentBaseWidth}>{renderItem(item)}</ScaleToFit>\n ) : (\n renderItem(item)\n )}\n </div>\n {!interactive && onItemExpand && (\n <MButton\n className=\"canvas-grid-view-expand-handle\"\n variant=\"filled\"\n shape=\"circle\"\n size=\"sm\"\n color=\"primary\"\n iconOnly\n aria-label=\"Expand tile\"\n startIcon={<MZoomInIcon />}\n onClick={(e) => {\n e.stopPropagation()\n onItemExpand(item.id)\n }}\n />\n )}\n {interactive && isDragging && (\n <div className=\"canvas-grid-item-glass\" aria-hidden>\n <MMoveIcon size={28} />\n </div>\n )}\n {interactive && (\n <div\n className=\"canvas-grid-resize-handle\"\n aria-hidden\n onPointerDown={(e) => startResize(e, item)}\n onPointerMove={handlePointerMove}\n onPointerUp={(e) => {\n if (drag) suppressNextClick()\n handlePointerUp(e)\n }}\n onPointerCancel={handlePointerUp}\n />\n )}\n </div>\n )\n })}\n </div>\n )\n}\n\nexport const MCanvasGrid = forwardRef(MCanvasGridInner) as <T extends MCanvasGridItem>(\n props: MCanvasGridProps<T> & {ref?: Ref<HTMLDivElement>}\n) => ReactElement | null\n","import {forwardRef, useEffect, useImperativeHandle, useRef, useState} from 'react'\nimport type * as React from 'react'\nimport type {MStickyPanelProps} from './MStickyPanel.types'\nimport {cn} from '../../../utils/cn'\nimport './MStickyPanel.css'\n\nconst INTERACTIVE_SELECTOR = 'button, a, [role=\"button\"]'\n\n// Sticky side-rail panel: sticks to the viewport at `top`, fills viewport-relative height,\n// scrolls internally with an optional hidden scrollbar and click-and-drag scrolling.\nexport const MStickyPanel = forwardRef<HTMLDivElement, MStickyPanelProps>(function MStickyPanel(\n {\n children,\n top = 16,\n bottomGap = 16,\n hideScrollbar = true,\n draggable = true,\n className,\n style,\n ...rest\n },\n forwardedRef\n) {\n const panelRef = useRef<HTMLDivElement>(null)\n useImperativeHandle(forwardedRef, () => panelRef.current as HTMLDivElement)\n const dragState = useRef<{startY: number; startScrollTop: number} | null>(null)\n const [dragging, setDragging] = useState(false)\n\n useEffect(() => {\n if (!draggable) return\n\n const handleMouseMove = (event: MouseEvent) => {\n const drag = dragState.current\n const panel = panelRef.current\n if (!drag || !panel) return\n panel.scrollTop = drag.startScrollTop - (event.clientY - drag.startY)\n }\n\n const handleMouseUp = () => {\n if (!dragState.current) return\n dragState.current = null\n setDragging(false)\n }\n\n window.addEventListener('mousemove', handleMouseMove)\n window.addEventListener('mouseup', handleMouseUp)\n return () => {\n window.removeEventListener('mousemove', handleMouseMove)\n window.removeEventListener('mouseup', handleMouseUp)\n }\n }, [draggable])\n\n const handleMouseDown = (event: React.MouseEvent<HTMLDivElement>) => {\n if (!draggable) return\n // Skip drag start when the click originated on an interactive descendant\n // (button, link, role=button) so triggers like MDropdownMenu, MButton or\n // <Link> stay clickable inside the panel.\n const target = event.target as HTMLElement | null\n if (target && target.closest(INTERACTIVE_SELECTOR)) return\n\n const panel = panelRef.current\n if (!panel) return\n\n dragState.current = {startY: event.clientY, startScrollTop: panel.scrollTop}\n setDragging(true)\n event.preventDefault()\n }\n\n const mergedStyle: React.CSSProperties = {\n top,\n height: `calc(100vh - ${top + bottomGap}px)`,\n ...style,\n }\n\n return (\n <div\n ref={panelRef}\n className={cn(\n 'm-sticky-panel',\n draggable && 'draggable',\n dragging && 'is-dragging',\n hideScrollbar && 'hide-scrollbar',\n className\n )}\n style={mergedStyle}\n onMouseDown={handleMouseDown}\n {...rest}\n >\n {children}\n </div>\n )\n})\n"],"mappings":";;;;;;;;;;;;;;AAOA,SAAgB,EAAW,EACvB,UAAO,WACP,YAAS,IACT,WACA,YACA,YACA,UACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,cACA,cACA,UACA,aACA,GAAG,KACa;CAChB,IAAM,IAAe,EAAuB,EAAC,UAAM,CAAC;AAEpD,QACI,kBAAC,OAAD;EACI,WAAW,EACP,aACA,GACA,KAAU,UACV,GAAG,EAA2B;GAC1B;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACH,CAAC,EACF,EACH;EACD,OAAO;GAAC,GAAG;GAAc,GAAG;GAAM;EAClC,GAAI,EAAe,EAAO;EAC1B,GAAI;EAEH;EACC,CAAA;;;;AC1Dd,SAAgB,EAAQ,EACpB,eAAY,QACZ,YAAS,IACT,cAAW,IACX,YAAS,IACT,UAAO,WACP,YAAS,SACT,WACA,cACA,aACA,GAAG,KACU;AACb,QACI,kBAAC,UAAD;EACI,WAAW,EAAG,UAAU,GAAM,KAAY,YAAY,KAAU,UAAU,EAAU;EACpF,GAAI,EAAe,EAAO;EAC1B,GAAI;YAEJ,kBAAC,GAAD;GAAY,MAAM;GAAmB;GAAQ,WAAW,EAAG,SAAS,UAAU,IAAS;GAClF;GACQ,CAAA;EACR,CAAA;;;;ACpBjB,SAAgB,EAAQ,EACpB,eAAY,QACZ,YAAS,IACT,cAAW,IACX,UAAO,WACP,WACA,YACA,YACA,UACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,cACA,cACA,UACA,aACA,GAAG,KACU;CACb,IAAM,IAAe,EAAuB,EAAC,UAAM,CAAC;AAEpD,QACI,kBAAC,UAAD;EACI,WAAW,EACP,UACA,GACA,KAAY,YACZ,GAAG,EAA2B;GAC1B;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACH,CAAC,EACF,EACH;EACD,OAAO;GAAC,GAAG;GAAc,GAAG;GAAM;EAClC,GAAI,EAAe,EAAO;EAC1B,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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require(`./theme-yQQAPTkp.cjs`),t=require(`./icons-BHFwX7ri.cjs`),n=require(`./cn-CU5TNITO.cjs`),r=require(`./layoutProps-B8y2XwHy.cjs`),i=require(`./MSurface-WsYGNGX5.cjs`),a=require(`./MLink-CZ2FfQ0N.cjs`),o=require(`./MButton-ouB6903s.cjs`),s=require(`./MButtonGroup-yumQneDa.cjs`),c=require(`./MSimpleGrid-B6Uh1XJY.cjs`),l=require(`./MTooltip-C-x_SqMx.cjs`),u=require(`./MDropdownMenu-Coy-0Wee.cjs`);require(`./core-B2klLGki.cjs`);let d=require(`react`),f=require(`react/jsx-runtime`);function p({size:t=`content`,padded:i=!0,hidden:a,spacing:o,padding:s,fsize:c,mt:l,mb:u,ml:d,mr:p,mx:m,my:h,pt:g,pb:_,pl:v,pr:y,px:b,py:x,fullWidth:S,className:C,style:w,children:T,...E}){let D=r.n({fsize:c});return(0,f.jsx)(`div`,{className:n.t(`container`,t,i&&`padded`,...r.t({spacing:o,padding:s,fsize:c,mt:l,mb:u,ml:d,mr:p,mx:m,my:h,pt:g,pb:_,pl:v,pr:y,px:b,py:x,fullWidth:S}),C),style:{...D,...w},...e.r(a),...E,children:T})}function m({container:t=`wide`,padded:r=!0,bordered:i=!0,sticky:a=!1,tone:o=`surface`,layout:s=`split`,hidden:c,className:l,children:u,...d}){return(0,f.jsx)(`header`,{className:n.t(`header`,o,i&&`bordered`,a&&`sticky`,l),...e.r(c),...d,children:(0,f.jsx)(p,{size:t,padded:r,className:n.t(`inner`,`layout-${s}`),children:u})})}function h({container:t=`wide`,padded:i=!0,bordered:a=!0,tone:o=`surface`,hidden:s,spacing:c,padding:l,fsize:u,mt:d,mb:m,ml:h,mr:g,mx:_,my:v,pt:y,pb:b,pl:x,pr:S,px:C,py:w,fullWidth:T,className:E,style:D,children:O,...k}){let A=r.n({fsize:u});return(0,f.jsx)(`footer`,{className:n.t(`footer`,o,a&&`bordered`,...r.t({spacing:c,padding:l,fsize:u,mt:d,mb:m,ml:h,mr:g,mx:_,my:v,pt:y,pb:b,pl:x,pr:S,px:C,py:w,fullWidth:T}),E),style:{...A,...D},...e.r(s),...k,children:(0,f.jsx)(p,{size:t,padded:i,className:`inner`,fullWidth:!0,children:O})})}function g({items:e,orientation:t=`horizontal`,wrap:r=!1,className:i,children:o,...s}){return(0,f.jsx)(`div`,{className:n.t(`navs`,t,r&&`wrap`,i),...s,children:e?e.map(e=>{let t=e.icon,r=e.iconOnly===!0&&t!=null,i=typeof e.label==`string`?e.label:void 0,o=r?i:void 0,s=e.title??(r?i:void 0);return(0,f.jsxs)(a.t,{component:e.component,href:e.href,to:e.to,target:e.target,rel:e.rel,title:s,current:e.current,disabled:e.disabled,className:n.t(`link`,r&&`icon-only`,e.className),"aria-label":o,children:[t?(0,f.jsx)(`span`,{className:`icon`,"aria-hidden":!r||void 0,children:(0,f.jsx)(t,{size:e.iconSize})}):null,r?null:e.label]},e.key??e.href??e.title?.toString()??i??``)}):o})}function _(e,t=[]){return d.Children.forEach(e,e=>{if(!(0,d.isValidElement)(e))return;if(e.type===g){t.push(e);return}let n=e.props?.children;n!==void 0&&_(n,t)}),t}function v({container:r=`content`,padded:a=!0,bordered:s=!0,sticky:c=!1,tone:l=`surface`,justify:u=`between`,wrap:m=!1,mobileMenu:h=`dropdown`,mobileMenuContent:g,mobileMenuFooter:v,collapseActions:y=!1,mobileMenuLabel:b=`Open navigation`,mobileBreakpoint:x=e.n.compact,hidden:S,className:C,children:w,...T}){let[E,D]=(0,d.useState)(!1),O=(0,d.useRef)(null),k=(0,d.useId)(),A=e.i(x),j=d.Children.toArray(w),M=_(w).map((e,t)=>(0,d.cloneElement)(e,{key:`mnavbar-mobile-navs-${t}`,orientation:`vertical`})),N=(0,f.jsx)(o.t,{type:`button`,variant:`ghost`,size:`md`,shape:`circle`,iconOnly:!0,className:`navbar-toggle`,"aria-label":b,"aria-expanded":E,"aria-controls":k,onClick:B,children:(0,f.jsx)(t.Zn,{})},`mnavbar-toggle`),P=-1;for(let e=j.length-1;e>=0;--e){let t=j[e];if((0,d.isValidElement)(t)&&t.type===i.n){P=e;break}}let F=y&&A&&P!==-1,I=null,L=j,R=P;if(F){I=j[P],L=j.filter((e,t)=>t!==P),R=-1;for(let e=L.length-1;e>=0;--e){let t=L[e];if((0,d.isValidElement)(t)&&t.type===i.n){R=e;break}}}let z=R===-1?[...L,N]:L.map((e,t)=>{if(t!==R)return e;let n=e,r=d.Children.toArray(n.props.children);return(0,d.cloneElement)(n,{key:n.key??`mnavbar-inline-${t}`,children:[...r,N]})});(0,d.useEffect)(()=>{if(!E)return;function e(e){let t=O.current;t&&(e.target instanceof Node&&t.contains(e.target)||D(!1))}function t(e){e.key===`Escape`&&D(!1)}return document.addEventListener(`pointerdown`,e),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`pointerdown`,e),document.removeEventListener(`keydown`,t)}},[E]),(0,d.useEffect)(()=>{A||D(!1)},[A]);function B(){D(e=>!e)}function V(e){let t=e.target;t&&t.closest(`a, [role="menuitem"]`)&&D(!1)}return(0,f.jsxs)(`nav`,{ref:O,className:n.t(`navbar`,l,s&&`bordered`,c&&`sticky`,A&&`mobile-view`,E&&`mobile-open`,`mobile-${h}`,C),...e.r(S),...T,children:[(0,f.jsx)(p,{size:r,padded:a,className:`container`,children:(0,f.jsx)(`div`,{className:n.t(`inner`,u,m&&`wrap`),children:z})}),h===`drawer`&&(0,f.jsx)(`div`,{className:n.t(`mobile-backdrop`,E&&`visible`),"aria-hidden":!0}),(0,f.jsxs)(`div`,{id:k,className:n.t(`mobile-menu`,h,E&&`open`),role:`menu`,"aria-hidden":!E||void 0,onClick:V,children:[M,g,I?(0,f.jsx)(`div`,{className:`mobile-menu-footer`,children:(0,d.cloneElement)(I,{key:`mnavbar-collapsed-actions`})}):null,v?(0,f.jsx)(`div`,{className:`mobile-menu-footer`,children:v}):null]})]})}function y({as:t=`section`,spacing:r=`lg`,tone:i=`default`,hidden:a,className:o,style:s,children:c,...l}){return(0,f.jsx)(t,{className:n.t(`section`,r,i,o),style:s,...e.r(a),...l,children:c})}function b({items:e,renderItem:t,children:n,columns:r=4,minItemWidth:i=`15rem`,...a}){return(0,f.jsx)(c.t,{columns:r,minItemWidth:i,...a,children:e&&t?e.map((e,n)=>t(e,n)):n})}function x({orientation:t=`horizontal`,variant:i=`solid`,hidden:a,spacing:o,padding:s,fsize:c,mt:l,mb:u,ml:d,mr:p,mx:m,my:h,pt:g,pb:_,pl:v,pr:y,px:b,py:x,fullWidth:S,className:C,style:w,...T}){let E=r.n({fsize:c});return(0,f.jsx)(`div`,{role:`separator`,"aria-orientation":t,className:n.t(`divider`,t,i,...r.t({spacing:o,padding:s,fsize:c,mt:l,mb:u,ml:d,mr:p,mx:m,my:h,pt:g,pb:_,pl:v,pr:y,px:b,py:x,fullWidth:S}),C),style:{...E,...w},...e.r(a),...T})}var S=`mineralui-sidebar`,C=(0,d.createContext)({mode:`expanded`,mobile:!1,mobileOpen:!1,canToggle:!1,toggleMode:()=>{}});function w(){return(0,d.useContext)(C)}function T({mode:r=`auto`,defaultMode:i=`expanded`,onModeChange:a,persist:o=!1,side:s=`left`,tone:c=`subtle`,bordered:l=!0,mobileBreakpoint:u=e.n.mobile,compactBreakpoint:p=e.n.compact,className:m,style:h,children:g}){let _=Math.max(p,u),v=e.i(u),y=e.i(_),b=!v&&y,[x,w]=(0,d.useState)(!1),[T,E]=(0,d.useState)(()=>{if(o)try{let e=localStorage.getItem(S);if(e===`expanded`||e===`collapsed`)return e}catch{}return i}),D=v?`expanded`:b?`collapsed`:r===`auto`?T:r===`collapsed`?`collapsed`:`expanded`,O=(0,d.useCallback)(()=>{let e=D===`expanded`?`collapsed`:`expanded`;if(E(e),a?.(e),o)try{localStorage.setItem(S,e)}catch{}},[D,a,o]),k=(0,d.useCallback)(()=>w(!1),[]);(0,d.useEffect)(()=>{if(!x)return;let e=e=>{e.key===`Escape`&&w(!1)};return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[x]),(0,d.useEffect)(()=>{v||w(!1)},[v]);let A=!v&&!b&&r===`auto`,j=(0,d.useMemo)(()=>({mode:D,mobile:v,mobileOpen:x,canToggle:A,toggleMode:O}),[D,v,x,A,O]),M=n.t(`sidebar`,c,s,!v&&D===`collapsed`&&`collapsed`,b&&`compact`,l&&`bordered`,v&&`mobile`,v&&x&&`mobile-open`,m);return(0,f.jsxs)(C.Provider,{value:j,children:[v&&x&&(0,f.jsx)(`div`,{className:`sidebar-backdrop`,onClick:k}),(0,f.jsx)(`aside`,{className:M,style:h,children:g}),v&&!x&&(0,f.jsx)(`button`,{className:n.t(`sidebar-hamburger`,s),onClick:()=>w(!0),"aria-label":`Open menu`,children:(0,f.jsx)(`span`,{className:`sidebar-hamburger-icon`,"aria-hidden":`true`,children:(0,f.jsx)(t.Zn,{})})})]})}function E({bordered:e=!1,className:r,children:i}){let{mode:a,mobile:s,canToggle:c,toggleMode:l}=w(),u=!s&&a===`collapsed`;return(0,f.jsxs)(`div`,{className:n.t(`sidebar-header`,e&&`bordered`,r),children:[(0,f.jsx)(`div`,{className:`sidebar-header-content`,children:i}),c&&(0,f.jsx)(o.t,{variant:`outlined`,color:`neutral`,iconOnly:!0,size:`sm`,onClick:l,"aria-label":u?`Expand sidebar`:`Collapse sidebar`,className:`sidebar-toggle`,children:(0,f.jsx)(`span`,{className:n.t(`sidebar-chevron`,u&&`flipped`),children:(0,f.jsx)(t.Ui,{})})})]})}function D({className:e,children:t}){return(0,f.jsx)(`div`,{className:n.t(`sidebar-body`,e),children:t})}function O({className:e,children:t}){return(0,f.jsx)(`nav`,{className:n.t(`sidebar-nav`,e),children:t})}function k({icon:e,label:t,description:r,href:i,to:a,onClick:o,active:s=!1,disabled:c=!1,badge:u,color:d,component:p,className:m}){let{mode:h,mobile:g}=w(),_=!g&&h===`collapsed`,v=r??t,y=typeof r==`string`?r:typeof t==`string`?t:void 0,b=p??(i||a?`a`:`button`),x=p?a?{to:a}:i?{href:i}:{}:i?{href:i}:a?{href:a}:{};return(0,f.jsxs)(b,{className:n.t(`sidebar-item`,s&&`active`,c&&`disabled`,d,m),onClick:c?void 0:o,"aria-disabled":c||void 0,title:_?y:void 0,...x,children:[e&&(0,f.jsx)(`span`,{className:`sidebar-item-icon`,children:e}),!_&&(0,f.jsx)(l.t,{content:v,placement:`top`,className:`sidebar-item-label-tooltip`,children:(0,f.jsx)(`span`,{className:`sidebar-item-label`,children:t})}),!_&&u&&(0,f.jsx)(`span`,{className:`sidebar-item-badge`,children:u})]})}function A({label:e,icon:r,active:i=!1,defaultOpen:a=!0,collapsible:o=!0,children:s,className:c}){let l=w(),{mode:p,mobile:m}=l,h=!m&&p===`collapsed`,[g,_]=(0,d.useState)(a),v=(0,d.useMemo)(()=>({...l,mode:`expanded`}),[l]),y=()=>{o&&_(e=>!e)};if(h){let t=(0,f.jsx)(`span`,{className:n.t(`sidebar-group-icon collapsed`,i&&`active`),title:e,children:r});return(0,f.jsx)(`div`,{className:n.t(`sidebar-group`,c),children:(0,f.jsx)(u.i,{trigger:t,placement:`right-start`,closeOnSelect:!0,openOn:`hover`,children:(0,f.jsx)(C.Provider,{value:v,children:s})})})}return(0,f.jsxs)(`div`,{className:n.t(`sidebar-group`,c),children:[(0,f.jsxs)(`button`,{className:n.t(`sidebar-group-header`,i&&`active`),onClick:y,"aria-expanded":g,children:[r&&(0,f.jsx)(`span`,{className:`sidebar-group-icon`,children:r}),(0,f.jsx)(`span`,{className:`sidebar-group-label`,children:e}),o&&(0,f.jsx)(`span`,{className:n.t(`sidebar-group-arrow`,g&&`open`),children:(0,f.jsx)(t.Ui,{})})]}),g&&(0,f.jsx)(`div`,{className:`sidebar-group-items`,children:s})]})}function j({bordered:e=!1,className:t,children:r}){return(0,f.jsx)(`div`,{className:n.t(`sidebar-footer`,e&&`bordered`,t),children:r})}function M({className:e,spacing:t=`md`}){return(0,f.jsx)(`hr`,{className:n.t(`sidebar-divider`,t,e)})}function N({items:e,separator:t=`/`,maxItems:r,className:i,...a}){let o=(0,d.useMemo)(()=>{if(!r||r>=e.length)return e;if(r<2)return[e[e.length-1]];let t=e.slice(0,1),n=e.slice(-(r-1));return[...t,null,...n]},[e,r]);return(0,f.jsx)(`nav`,{"aria-label":`breadcrumb`,className:n.t(`breadcrumb`,i),...a,children:(0,f.jsx)(`ol`,{className:`trail`,children:o.map((e,r)=>{if(e===null)return(0,f.jsxs)(`li`,{className:`crumb dots`,children:[(0,f.jsx)(`span`,{className:`sep`,children:t}),(0,f.jsx)(`span`,{children:`…`})]},`ellipsis`);let i=r===o.length-1;return(0,f.jsxs)(`li`,{className:n.t(`crumb`,i&&`active`),children:[r>0&&(0,f.jsx)(`span`,{className:`sep`,children:t}),e.href&&!i?(0,f.jsx)(`a`,{href:e.href,className:`link`,onClick:e.onClick,children:e.label}):e.onClick&&!i?(0,f.jsx)(`button`,{type:`button`,className:`link btn`,onClick:e.onClick,children:e.label}):(0,f.jsx)(`span`,{className:`current`,"aria-current":i?`page`:void 0,children:e.label})]},r)})})})}var P=(0,d.forwardRef)(function({className:e,children:t,...r},i){let a=[],o=[];return d.Children.forEach(t,e=>{(0,d.isValidElement)(e)&&e.type===T?a.push(e):o.push(e)}),(0,f.jsxs)(`div`,{ref:i,className:n.t(`app-shell`,e),...r,children:[a,(0,f.jsx)(`div`,{className:`app-main`,children:o})]})}),F=(0,d.forwardRef)(function({className:e,children:t,...r},i){return(0,f.jsx)(`div`,{ref:i,className:n.t(`app-body`,e),...r,children:t})});function I({baseWidth:e=480,children:t}){let n=(0,d.useRef)(null),r=(0,d.useRef)(null),[i,a]=(0,d.useState)(1),[o,s]=(0,d.useState)(e);return(0,d.useEffect)(()=>{let t=n.current,i=r.current;if(!t||!i)return;let o=0,c=()=>{cancelAnimationFrame(o),o=requestAnimationFrame(()=>{let n=t.clientWidth,r=t.clientHeight;if(n===0||r===0)return;let o=Math.max(e,n),c=i.offsetHeight;if(o===0||c===0)return;let l=n/o,u=r/c,d=Math.min(l,u,1);d>0&&Number.isFinite(d)&&(s(o),a(d))})},l=new ResizeObserver(c);return l.observe(t),l.observe(i),c(),()=>{cancelAnimationFrame(o),l.disconnect()}},[e]),(0,f.jsx)(`div`,{ref:n,className:`canvas-grid-scale-wrapper`,children:(0,f.jsx)(`div`,{ref:r,className:`canvas-grid-scale-content`,style:{width:`${o}px`,transform:`scale(${i})`},children:t})})}function L(e,t,n){return Math.max(t,Math.min(n,e))}function R({columns:r=24,rows:i=24,snap:a=4,items:c,renderItem:l,minItemSize:u,maxItemSize:p,editable:m=!1,onItemMove:h,onItemResize:g,onItemRemove:_,onItemEdit:v,onItemExpand:y,guides:b=`always`,compactBreakpoint:x=e.n.compact,mobileBreakpoint:S=e.n.mobile,height:C,fitContent:w=`scroll`,fitContentBaseWidth:T=480,className:E,style:D},O){let k=(0,d.useRef)(null),[A,j]=(0,d.useState)({width:0,height:0}),[M,N]=(0,d.useState)(null),[P,F]=(0,d.useState)(null),[R,z]=(0,d.useState)({}),B=(0,d.useRef)(0);function V(e){B.current+=1,z(t=>({...t,[e]:B.current}))}function H(){let e=!0,t=n=>{e&&(e=!1,n.stopPropagation(),n.preventDefault(),window.removeEventListener(`click`,t,!0))};window.addEventListener(`click`,t,!0),window.setTimeout(()=>{e&&(e=!1,window.removeEventListener(`click`,t,!0))},60)}let U=e.i(S),W=e.i(x)&&!U,G=r*a,K=i*a,q=W?Math.max(1,Math.round(G/2)):G,J=W?Math.max(1,Math.round(K/2)):K,Y=W?Math.max(1,Math.round(r/2)):r,X=W?Math.max(1,Math.round(i/2)):i,Z=m&&!U;(0,d.useEffect)(()=>{let e=k.current;if(!e||typeof ResizeObserver>`u`)return;let t=()=>j({width:e.clientWidth,height:e.clientHeight});t();let n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},[]);let Q=(0,d.useCallback)(e=>{k.current=e,typeof O==`function`?O(e):O&&(O.current=e)},[O]);function ee(e){let t=u?.(e);return t?{w:Math.max(a,t.w*a),h:Math.max(a,t.h*a)}:{w:a,h:a}}function te(e,t){Z&&(e.stopPropagation(),e.preventDefault(),e.currentTarget.setPointerCapture(e.pointerId),V(t.id),N({itemId:t.id,mode:`resize`,startClientX:e.clientX,startClientY:e.clientY,original:{...t.position}}),F({...t.position}))}function ne(e,t){Z&&(e.target.closest(`button, [role="button"]`)||(e.stopPropagation(),e.preventDefault(),e.currentTarget.setPointerCapture(e.pointerId),V(t.id),N({itemId:t.id,mode:`drag`,startClientX:e.clientX,startClientY:e.clientY,original:{...t.position}}),F({...t.position})))}function re(e){if(!M||A.width===0||A.height===0)return;let t=A.width/q,n=A.height/J,r=Math.round((e.clientX-M.startClientX)/t),i=Math.round((e.clientY-M.startClientY)/n),o=M.original,s=c.find(e=>e.id===M.itemId),l=s?ee(s):{w:a,h:a};if(M.mode===`drag`)F({x:L(o.x+r,0,q-o.w),y:L(o.y+i,0,J-o.h),w:o.w,h:o.h});else{let e=L(o.w+r,l.w,q-o.x),t=L(o.h+i,l.h,J-o.y);F({x:o.x,y:o.y,w:e,h:t})}}function $(e){if(M){try{e.currentTarget.releasePointerCapture(e.pointerId)}catch{}P&&(M.mode===`drag`?h?.(M.itemId,P):g?.(M.itemId,P)),N(null),F(null)}}function ie(e){M&&(H(),$(e))}let ae=b===`always`||b===`on-edit`&&Z||b===`on-drag`&&M!==null,oe=C===void 0?void 0:{height:typeof C==`number`?`${C}px`:C};if(U){let e=[...c].sort((e,t)=>e.position.y-t.position.y);return(0,f.jsx)(`div`,{ref:Q,className:n.t(`canvas-grid`,`mobile`,E),"data-guides":`off`,style:{...oe,...D},children:e.map(e=>(0,f.jsx)(`div`,{className:`canvas-grid-item`,children:l(e)},e.id))})}let se={...oe,...D,gridTemplateColumns:`repeat(${q}, 1fr)`,gridTemplateRows:`repeat(${J}, 1fr)`,"--canvas-grid-cells":String(Y),"--canvas-grid-row-cells":String(X)},ce=Y*X;return(0,f.jsxs)(`div`,{ref:Q,className:n.t(`canvas-grid`,W&&`compact`,Z&&`editable`,E),"data-guides":ae?`on`:`off`,style:se,children:[(0,f.jsx)(`div`,{className:`canvas-grid-overlay`,"aria-hidden":!0,children:Array.from({length:ce},(e,t)=>{let r=(t+1)%Y===0,i=t>=ce-Y;return(0,f.jsx)(`div`,{className:n.t(`canvas-grid-cell`,r&&`no-right`,i&&`no-bottom`)},t)})}),c.map(e=>{let r=M?.itemId===e.id,i=r&&P?P:e.position,a=W?Math.round(i.x/2):i.x,c=W?Math.round(i.y/2):i.y,u=Math.max(1,W?Math.round(i.w/2):i.w),d=Math.max(1,W?Math.round(i.h/2):i.h),p=1+(R[e.id]??0),m={gridColumn:`${a+1} / span ${u}`,gridRow:`${c+1} / span ${d}`,zIndex:r?p+100:p};return(0,f.jsxs)(`div`,{className:n.t(`canvas-grid-item`,r&&`dragging`),style:m,children:[(0,f.jsx)(`div`,{className:`canvas-grid-item-header`,onPointerDown:t=>ne(t,e),onPointerMove:re,onPointerUp:ie,onPointerCancel:$,children:(0,f.jsxs)(s.t,{variant:`ghost`,size:`xs`,children:[Z&&v&&(0,f.jsx)(o.t,{color:`primary`,iconOnly:!0,"aria-label":`Edit tile`,startIcon:(0,f.jsx)(t.Gn,{}),onPointerDown:e=>e.stopPropagation(),onClick:t=>{t.stopPropagation(),v(e.id)}}),y&&(0,f.jsx)(o.t,{color:`primary`,iconOnly:!0,"aria-label":`Expand tile`,startIcon:(0,f.jsx)(t.$n,{}),onPointerDown:e=>e.stopPropagation(),onClick:t=>{t.stopPropagation(),y(e.id)}}),Z&&_&&(0,f.jsx)(o.t,{color:`error`,iconOnly:!0,"aria-label":`Remove tile`,startIcon:(0,f.jsx)(t.er,{}),onPointerDown:e=>e.stopPropagation(),onClick:t=>{t.stopPropagation(),_(e.id)}})]})}),(0,f.jsx)(`div`,{className:`canvas-grid-item-body`,children:w===`scale`?(0,f.jsx)(I,{baseWidth:T,children:l(e)}):l(e)}),!Z&&y&&(0,f.jsx)(o.t,{className:`canvas-grid-view-expand-handle`,variant:`filled`,shape:`circle`,size:`sm`,color:`primary`,iconOnly:!0,"aria-label":`Expand tile`,startIcon:(0,f.jsx)(t.$n,{}),onClick:t=>{t.stopPropagation(),y(e.id)}}),Z&&r&&(0,f.jsx)(`div`,{className:`canvas-grid-item-glass`,"aria-hidden":!0,children:(0,f.jsx)(t.vr,{size:28})}),Z&&(0,f.jsx)(`div`,{className:`canvas-grid-resize-handle`,"aria-hidden":!0,onPointerDown:t=>te(t,e),onPointerMove:re,onPointerUp:e=>{M&&H(),$(e)},onPointerCancel:$})]},e.id)})]})}var z=(0,d.forwardRef)(R),B=`button, a, [role="button"]`,V=(0,d.forwardRef)(function({children:e,top:t=16,bottomGap:r=16,hideScrollbar:i=!0,draggable:a=!0,className:o,style:s,...c},l){let u=(0,d.useRef)(null);(0,d.useImperativeHandle)(l,()=>u.current);let p=(0,d.useRef)(null),[m,h]=(0,d.useState)(!1);(0,d.useEffect)(()=>{if(!a)return;let e=e=>{let t=p.current,n=u.current;!t||!n||(n.scrollTop=t.startScrollTop-(e.clientY-t.startY))},t=()=>{p.current&&(p.current=null,h(!1))};return window.addEventListener(`mousemove`,e),window.addEventListener(`mouseup`,t),()=>{window.removeEventListener(`mousemove`,e),window.removeEventListener(`mouseup`,t)}},[a]);let g=e=>{if(!a)return;let t=e.target;if(t&&t.closest(B))return;let n=u.current;n&&(p.current={startY:e.clientY,startScrollTop:n.scrollTop},h(!0),e.preventDefault())},_={top:t,height:`calc(100vh - ${t+r}px)`,...s};return(0,f.jsx)(`div`,{ref:u,className:n.t(`m-sticky-panel`,a&&`draggable`,m&&`is-dragging`,i&&`hide-scrollbar`,o),style:_,onMouseDown:g,...c,children:e})});Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return N}}),Object.defineProperty(exports,`b`,{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return M}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return z}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return P}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return D}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return V}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,`x`,{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return h}});
|
|
2
|
-
//# sourceMappingURL=layout-
|
|
1
|
+
const e=require(`./theme-DltOEniv.cjs`),t=require(`./icons-DX_cScBq.cjs`),n=require(`./cn-CU5TNITO.cjs`),r=require(`./layoutProps-B8y2XwHy.cjs`),i=require(`./MSurface-BS9l7GDH.cjs`),a=require(`./MLink-B7gXA8qY.cjs`),o=require(`./MButton-B8kFTOPJ.cjs`),s=require(`./MButtonGroup-C3Ar0gfk.cjs`),c=require(`./MSimpleGrid-BR352NiK.cjs`),l=require(`./MTooltip-gpvKWQzD.cjs`),u=require(`./MDropdownMenu-1RqWjxHp.cjs`);require(`./core-o3cw16Db.cjs`);let d=require(`react`),f=require(`react/jsx-runtime`);function p({size:t=`content`,padded:i=!0,hidden:a,spacing:o,padding:s,fsize:c,mt:l,mb:u,ml:d,mr:p,mx:m,my:h,pt:g,pb:_,pl:v,pr:y,px:b,py:x,fullWidth:S,className:C,style:w,children:T,...E}){let D=r.n({fsize:c});return(0,f.jsx)(`div`,{className:n.t(`container`,t,i&&`padded`,...r.t({spacing:o,padding:s,fsize:c,mt:l,mb:u,ml:d,mr:p,mx:m,my:h,pt:g,pb:_,pl:v,pr:y,px:b,py:x,fullWidth:S}),C),style:{...D,...w},...e.r(a),...E,children:T})}function m({container:t=`wide`,padded:r=!0,bordered:i=!0,sticky:a=!1,tone:o=`surface`,layout:s=`split`,hidden:c,className:l,children:u,...d}){return(0,f.jsx)(`header`,{className:n.t(`header`,o,i&&`bordered`,a&&`sticky`,l),...e.r(c),...d,children:(0,f.jsx)(p,{size:t,padded:r,className:n.t(`inner`,`layout-${s}`),children:u})})}function h({container:t=`wide`,padded:i=!0,bordered:a=!0,tone:o=`surface`,hidden:s,spacing:c,padding:l,fsize:u,mt:d,mb:m,ml:h,mr:g,mx:_,my:v,pt:y,pb:b,pl:x,pr:S,px:C,py:w,fullWidth:T,className:E,style:D,children:O,...k}){let A=r.n({fsize:u});return(0,f.jsx)(`footer`,{className:n.t(`footer`,o,a&&`bordered`,...r.t({spacing:c,padding:l,fsize:u,mt:d,mb:m,ml:h,mr:g,mx:_,my:v,pt:y,pb:b,pl:x,pr:S,px:C,py:w,fullWidth:T}),E),style:{...A,...D},...e.r(s),...k,children:(0,f.jsx)(p,{size:t,padded:i,className:`inner`,fullWidth:!0,children:O})})}function g({items:e,orientation:t=`horizontal`,wrap:r=!1,className:i,children:o,...s}){return(0,f.jsx)(`div`,{className:n.t(`navs`,t,r&&`wrap`,i),...s,children:e?e.map(e=>{let t=e.icon,r=e.iconOnly===!0&&t!=null,i=typeof e.label==`string`?e.label:void 0,o=r?i:void 0,s=e.title??(r?i:void 0);return(0,f.jsxs)(a.t,{component:e.component,href:e.href,to:e.to,target:e.target,rel:e.rel,title:s,current:e.current,disabled:e.disabled,className:n.t(`link`,r&&`icon-only`,e.className),"aria-label":o,children:[t?(0,f.jsx)(`span`,{className:`icon`,"aria-hidden":!r||void 0,children:(0,f.jsx)(t,{size:e.iconSize})}):null,r?null:e.label]},e.key??e.href??e.title?.toString()??i??``)}):o})}function _(e,t=[]){return d.Children.forEach(e,e=>{if(!(0,d.isValidElement)(e))return;if(e.type===g){t.push(e);return}let n=e.props?.children;n!==void 0&&_(n,t)}),t}function v({container:r=`content`,padded:a=!0,bordered:s=!0,sticky:c=!1,tone:l=`surface`,justify:u=`between`,wrap:m=!1,mobileMenu:h=`dropdown`,mobileMenuContent:g,mobileMenuFooter:v,collapseActions:y=!1,mobileMenuLabel:b=`Open navigation`,mobileBreakpoint:x=e.n.compact,hidden:S,className:C,children:w,...T}){let[E,D]=(0,d.useState)(!1),O=(0,d.useRef)(null),k=(0,d.useId)(),A=e.i(x),j=d.Children.toArray(w),M=_(w).map((e,t)=>(0,d.cloneElement)(e,{key:`mnavbar-mobile-navs-${t}`,orientation:`vertical`})),N=(0,f.jsx)(o.t,{type:`button`,variant:`ghost`,size:`md`,shape:`circle`,iconOnly:!0,className:`navbar-toggle`,"aria-label":b,"aria-expanded":E,"aria-controls":k,onClick:B,children:(0,f.jsx)(t.Zn,{})},`mnavbar-toggle`),P=-1;for(let e=j.length-1;e>=0;--e){let t=j[e];if((0,d.isValidElement)(t)&&t.type===i.n){P=e;break}}let F=y&&A&&P!==-1,I=null,L=j,R=P;if(F){I=j[P],L=j.filter((e,t)=>t!==P),R=-1;for(let e=L.length-1;e>=0;--e){let t=L[e];if((0,d.isValidElement)(t)&&t.type===i.n){R=e;break}}}let z=R===-1?[...L,N]:L.map((e,t)=>{if(t!==R)return e;let n=e,r=d.Children.toArray(n.props.children);return(0,d.cloneElement)(n,{key:n.key??`mnavbar-inline-${t}`,children:[...r,N]})});(0,d.useEffect)(()=>{if(!E)return;function e(e){let t=O.current;t&&(e.target instanceof Node&&t.contains(e.target)||D(!1))}function t(e){e.key===`Escape`&&D(!1)}return document.addEventListener(`pointerdown`,e),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`pointerdown`,e),document.removeEventListener(`keydown`,t)}},[E]),(0,d.useEffect)(()=>{A||D(!1)},[A]);function B(){D(e=>!e)}function V(e){let t=e.target;t&&t.closest(`a, [role="menuitem"]`)&&D(!1)}return(0,f.jsxs)(`nav`,{ref:O,className:n.t(`navbar`,l,s&&`bordered`,c&&`sticky`,A&&`mobile-view`,E&&`mobile-open`,`mobile-${h}`,C),...e.r(S),...T,children:[(0,f.jsx)(p,{size:r,padded:a,className:`container`,children:(0,f.jsx)(`div`,{className:n.t(`inner`,u,m&&`wrap`),children:z})}),h===`drawer`&&(0,f.jsx)(`div`,{className:n.t(`mobile-backdrop`,E&&`visible`),"aria-hidden":!0}),(0,f.jsxs)(`div`,{id:k,className:n.t(`mobile-menu`,h,E&&`open`),role:`menu`,"aria-hidden":!E||void 0,onClick:V,children:[M,g,I?(0,f.jsx)(`div`,{className:`mobile-menu-footer`,children:(0,d.cloneElement)(I,{key:`mnavbar-collapsed-actions`})}):null,v?(0,f.jsx)(`div`,{className:`mobile-menu-footer`,children:v}):null]})]})}function y({as:t=`section`,spacing:r=`lg`,tone:i=`default`,hidden:a,className:o,style:s,children:c,...l}){return(0,f.jsx)(t,{className:n.t(`section`,r,i,o),style:s,...e.r(a),...l,children:c})}function b({items:e,renderItem:t,children:n,columns:r=4,minItemWidth:i=`15rem`,...a}){return(0,f.jsx)(c.t,{columns:r,minItemWidth:i,...a,children:e&&t?e.map((e,n)=>t(e,n)):n})}function x({orientation:t=`horizontal`,variant:i=`solid`,hidden:a,spacing:o,padding:s,fsize:c,mt:l,mb:u,ml:d,mr:p,mx:m,my:h,pt:g,pb:_,pl:v,pr:y,px:b,py:x,fullWidth:S,className:C,style:w,...T}){let E=r.n({fsize:c});return(0,f.jsx)(`div`,{role:`separator`,"aria-orientation":t,className:n.t(`divider`,t,i,...r.t({spacing:o,padding:s,fsize:c,mt:l,mb:u,ml:d,mr:p,mx:m,my:h,pt:g,pb:_,pl:v,pr:y,px:b,py:x,fullWidth:S}),C),style:{...E,...w},...e.r(a),...T})}var S=`mineralui-sidebar`,C=(0,d.createContext)({mode:`expanded`,mobile:!1,mobileOpen:!1,canToggle:!1,toggleMode:()=>{}});function w(){return(0,d.useContext)(C)}function T({mode:r=`auto`,defaultMode:i=`expanded`,onModeChange:a,persist:o=!1,side:s=`left`,tone:c=`subtle`,bordered:l=!0,mobileBreakpoint:u=e.n.mobile,compactBreakpoint:p=e.n.compact,className:m,style:h,children:g}){let _=Math.max(p,u),v=e.i(u),y=e.i(_),b=!v&&y,[x,w]=(0,d.useState)(!1),[T,E]=(0,d.useState)(()=>{if(o)try{let e=localStorage.getItem(S);if(e===`expanded`||e===`collapsed`)return e}catch{}return i}),D=v?`expanded`:b?`collapsed`:r===`auto`?T:r===`collapsed`?`collapsed`:`expanded`,O=(0,d.useCallback)(()=>{let e=D===`expanded`?`collapsed`:`expanded`;if(E(e),a?.(e),o)try{localStorage.setItem(S,e)}catch{}},[D,a,o]),k=(0,d.useCallback)(()=>w(!1),[]);(0,d.useEffect)(()=>{if(!x)return;let e=e=>{e.key===`Escape`&&w(!1)};return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[x]),(0,d.useEffect)(()=>{v||w(!1)},[v]);let A=!v&&!b&&r===`auto`,j=(0,d.useMemo)(()=>({mode:D,mobile:v,mobileOpen:x,canToggle:A,toggleMode:O}),[D,v,x,A,O]),M=n.t(`sidebar`,c,s,!v&&D===`collapsed`&&`collapsed`,b&&`compact`,l&&`bordered`,v&&`mobile`,v&&x&&`mobile-open`,m);return(0,f.jsxs)(C.Provider,{value:j,children:[v&&x&&(0,f.jsx)(`div`,{className:`sidebar-backdrop`,onClick:k}),(0,f.jsx)(`aside`,{className:M,style:h,children:g}),v&&!x&&(0,f.jsx)(`button`,{className:n.t(`sidebar-hamburger`,s),onClick:()=>w(!0),"aria-label":`Open menu`,children:(0,f.jsx)(`span`,{className:`sidebar-hamburger-icon`,"aria-hidden":`true`,children:(0,f.jsx)(t.Zn,{})})})]})}function E({bordered:e=!1,className:r,children:i}){let{mode:a,mobile:s,canToggle:c,toggleMode:l}=w(),u=!s&&a===`collapsed`;return(0,f.jsxs)(`div`,{className:n.t(`sidebar-header`,e&&`bordered`,r),children:[(0,f.jsx)(`div`,{className:`sidebar-header-content`,children:i}),c&&(0,f.jsx)(o.t,{variant:`outlined`,color:`neutral`,iconOnly:!0,size:`sm`,onClick:l,"aria-label":u?`Expand sidebar`:`Collapse sidebar`,className:`sidebar-toggle`,children:(0,f.jsx)(`span`,{className:n.t(`sidebar-chevron`,u&&`flipped`),children:(0,f.jsx)(t.Ui,{})})})]})}function D({className:e,children:t}){return(0,f.jsx)(`div`,{className:n.t(`sidebar-body`,e),children:t})}function O({className:e,children:t}){return(0,f.jsx)(`nav`,{className:n.t(`sidebar-nav`,e),children:t})}function k({icon:e,label:t,description:r,href:i,to:a,onClick:o,active:s=!1,disabled:c=!1,badge:u,color:d,component:p,className:m}){let{mode:h,mobile:g}=w(),_=!g&&h===`collapsed`,v=r??t,y=typeof r==`string`?r:typeof t==`string`?t:void 0,b=p??(i||a?`a`:`button`),x=p?a?{to:a}:i?{href:i}:{}:i?{href:i}:a?{href:a}:{};return(0,f.jsxs)(b,{className:n.t(`sidebar-item`,s&&`active`,c&&`disabled`,d,m),onClick:c?void 0:o,"aria-disabled":c||void 0,title:_?y:void 0,...x,children:[e&&(0,f.jsx)(`span`,{className:`sidebar-item-icon`,children:e}),!_&&(0,f.jsx)(l.t,{content:v,placement:`top`,className:`sidebar-item-label-tooltip`,children:(0,f.jsx)(`span`,{className:`sidebar-item-label`,children:t})}),!_&&u&&(0,f.jsx)(`span`,{className:`sidebar-item-badge`,children:u})]})}function A({label:e,icon:r,active:i=!1,defaultOpen:a=!0,collapsible:o=!0,children:s,className:c}){let l=w(),{mode:p,mobile:m}=l,h=!m&&p===`collapsed`,[g,_]=(0,d.useState)(a),v=(0,d.useMemo)(()=>({...l,mode:`expanded`}),[l]),y=()=>{o&&_(e=>!e)};if(h){let t=(0,f.jsx)(`span`,{className:n.t(`sidebar-group-icon collapsed`,i&&`active`),title:e,children:r});return(0,f.jsx)(`div`,{className:n.t(`sidebar-group`,c),children:(0,f.jsx)(u.i,{trigger:t,placement:`right-start`,closeOnSelect:!0,openOn:`hover`,children:(0,f.jsx)(C.Provider,{value:v,children:s})})})}return(0,f.jsxs)(`div`,{className:n.t(`sidebar-group`,c),children:[(0,f.jsxs)(`button`,{className:n.t(`sidebar-group-header`,i&&`active`),onClick:y,"aria-expanded":g,children:[r&&(0,f.jsx)(`span`,{className:`sidebar-group-icon`,children:r}),(0,f.jsx)(`span`,{className:`sidebar-group-label`,children:e}),o&&(0,f.jsx)(`span`,{className:n.t(`sidebar-group-arrow`,g&&`open`),children:(0,f.jsx)(t.Ui,{})})]}),g&&(0,f.jsx)(`div`,{className:`sidebar-group-items`,children:s})]})}function j({bordered:e=!1,className:t,children:r}){return(0,f.jsx)(`div`,{className:n.t(`sidebar-footer`,e&&`bordered`,t),children:r})}function M({className:e,spacing:t=`md`}){return(0,f.jsx)(`hr`,{className:n.t(`sidebar-divider`,t,e)})}function N({items:e,separator:t=`/`,maxItems:r,className:i,...a}){let o=(0,d.useMemo)(()=>{if(!r||r>=e.length)return e;if(r<2)return[e[e.length-1]];let t=e.slice(0,1),n=e.slice(-(r-1));return[...t,null,...n]},[e,r]);return(0,f.jsx)(`nav`,{"aria-label":`breadcrumb`,className:n.t(`breadcrumb`,i),...a,children:(0,f.jsx)(`ol`,{className:`trail`,children:o.map((e,r)=>{if(e===null)return(0,f.jsxs)(`li`,{className:`crumb dots`,children:[(0,f.jsx)(`span`,{className:`sep`,children:t}),(0,f.jsx)(`span`,{children:`…`})]},`ellipsis`);let i=r===o.length-1;return(0,f.jsxs)(`li`,{className:n.t(`crumb`,i&&`active`),children:[r>0&&(0,f.jsx)(`span`,{className:`sep`,children:t}),e.href&&!i?(0,f.jsx)(`a`,{href:e.href,className:`link`,onClick:e.onClick,children:e.label}):e.onClick&&!i?(0,f.jsx)(`button`,{type:`button`,className:`link btn`,onClick:e.onClick,children:e.label}):(0,f.jsx)(`span`,{className:`current`,"aria-current":i?`page`:void 0,children:e.label})]},r)})})})}var P=(0,d.forwardRef)(function({className:e,children:t,...r},i){let a=[],o=[];return d.Children.forEach(t,e=>{(0,d.isValidElement)(e)&&e.type===T?a.push(e):o.push(e)}),(0,f.jsxs)(`div`,{ref:i,className:n.t(`app-shell`,e),...r,children:[a,(0,f.jsx)(`div`,{className:`app-main`,children:o})]})}),F=(0,d.forwardRef)(function({className:e,children:t,...r},i){return(0,f.jsx)(`div`,{ref:i,className:n.t(`app-body`,e),...r,children:t})});function I({baseWidth:e=480,children:t}){let n=(0,d.useRef)(null),r=(0,d.useRef)(null),[i,a]=(0,d.useState)(1),[o,s]=(0,d.useState)(e);return(0,d.useEffect)(()=>{let t=n.current,i=r.current;if(!t||!i)return;let o=0,c=()=>{cancelAnimationFrame(o),o=requestAnimationFrame(()=>{let n=t.clientWidth,r=t.clientHeight;if(n===0||r===0)return;let o=Math.max(e,n),c=i.offsetHeight;if(o===0||c===0)return;let l=n/o,u=r/c,d=Math.min(l,u,1);d>0&&Number.isFinite(d)&&(s(o),a(d))})},l=new ResizeObserver(c);return l.observe(t),l.observe(i),c(),()=>{cancelAnimationFrame(o),l.disconnect()}},[e]),(0,f.jsx)(`div`,{ref:n,className:`canvas-grid-scale-wrapper`,children:(0,f.jsx)(`div`,{ref:r,className:`canvas-grid-scale-content`,style:{width:`${o}px`,transform:`scale(${i})`},children:t})})}function L(e,t,n){return Math.max(t,Math.min(n,e))}function R({columns:r=24,rows:i=24,snap:a=4,items:c,renderItem:l,minItemSize:u,maxItemSize:p,editable:m=!1,onItemMove:h,onItemResize:g,onItemRemove:_,onItemEdit:v,onItemExpand:y,guides:b=`always`,compactBreakpoint:x=e.n.compact,mobileBreakpoint:S=e.n.mobile,height:C,fitContent:w=`scroll`,fitContentBaseWidth:T=480,className:E,style:D},O){let k=(0,d.useRef)(null),[A,j]=(0,d.useState)({width:0,height:0}),[M,N]=(0,d.useState)(null),[P,F]=(0,d.useState)(null),[R,z]=(0,d.useState)({}),B=(0,d.useRef)(0);function V(e){B.current+=1,z(t=>({...t,[e]:B.current}))}function H(){let e=!0,t=n=>{e&&(e=!1,n.stopPropagation(),n.preventDefault(),window.removeEventListener(`click`,t,!0))};window.addEventListener(`click`,t,!0),window.setTimeout(()=>{e&&(e=!1,window.removeEventListener(`click`,t,!0))},60)}let U=e.i(S),W=e.i(x)&&!U,G=r*a,K=i*a,q=W?Math.max(1,Math.round(G/2)):G,J=W?Math.max(1,Math.round(K/2)):K,Y=W?Math.max(1,Math.round(r/2)):r,X=W?Math.max(1,Math.round(i/2)):i,Z=m&&!U;(0,d.useEffect)(()=>{let e=k.current;if(!e||typeof ResizeObserver>`u`)return;let t=()=>j({width:e.clientWidth,height:e.clientHeight});t();let n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},[]);let Q=(0,d.useCallback)(e=>{k.current=e,typeof O==`function`?O(e):O&&(O.current=e)},[O]);function ee(e){let t=u?.(e);return t?{w:Math.max(a,t.w*a),h:Math.max(a,t.h*a)}:{w:a,h:a}}function te(e,t){Z&&(e.stopPropagation(),e.preventDefault(),e.currentTarget.setPointerCapture(e.pointerId),V(t.id),N({itemId:t.id,mode:`resize`,startClientX:e.clientX,startClientY:e.clientY,original:{...t.position}}),F({...t.position}))}function ne(e,t){Z&&(e.target.closest(`button, [role="button"]`)||(e.stopPropagation(),e.preventDefault(),e.currentTarget.setPointerCapture(e.pointerId),V(t.id),N({itemId:t.id,mode:`drag`,startClientX:e.clientX,startClientY:e.clientY,original:{...t.position}}),F({...t.position})))}function re(e){if(!M||A.width===0||A.height===0)return;let t=A.width/q,n=A.height/J,r=Math.round((e.clientX-M.startClientX)/t),i=Math.round((e.clientY-M.startClientY)/n),o=M.original,s=c.find(e=>e.id===M.itemId),l=s?ee(s):{w:a,h:a};if(M.mode===`drag`)F({x:L(o.x+r,0,q-o.w),y:L(o.y+i,0,J-o.h),w:o.w,h:o.h});else{let e=L(o.w+r,l.w,q-o.x),t=L(o.h+i,l.h,J-o.y);F({x:o.x,y:o.y,w:e,h:t})}}function $(e){if(M){try{e.currentTarget.releasePointerCapture(e.pointerId)}catch{}P&&(M.mode===`drag`?h?.(M.itemId,P):g?.(M.itemId,P)),N(null),F(null)}}function ie(e){M&&(H(),$(e))}let ae=b===`always`||b===`on-edit`&&Z||b===`on-drag`&&M!==null,oe=C===void 0?void 0:{height:typeof C==`number`?`${C}px`:C};if(U){let e=[...c].sort((e,t)=>e.position.y-t.position.y);return(0,f.jsx)(`div`,{ref:Q,className:n.t(`canvas-grid`,`mobile`,E),"data-guides":`off`,style:{...oe,...D},children:e.map(e=>(0,f.jsx)(`div`,{className:`canvas-grid-item`,children:l(e)},e.id))})}let se={...oe,...D,gridTemplateColumns:`repeat(${q}, 1fr)`,gridTemplateRows:`repeat(${J}, 1fr)`,"--canvas-grid-cells":String(Y),"--canvas-grid-row-cells":String(X)},ce=Y*X;return(0,f.jsxs)(`div`,{ref:Q,className:n.t(`canvas-grid`,W&&`compact`,Z&&`editable`,E),"data-guides":ae?`on`:`off`,style:se,children:[(0,f.jsx)(`div`,{className:`canvas-grid-overlay`,"aria-hidden":!0,children:Array.from({length:ce},(e,t)=>{let r=(t+1)%Y===0,i=t>=ce-Y;return(0,f.jsx)(`div`,{className:n.t(`canvas-grid-cell`,r&&`no-right`,i&&`no-bottom`)},t)})}),c.map(e=>{let r=M?.itemId===e.id,i=r&&P?P:e.position,a=W?Math.round(i.x/2):i.x,c=W?Math.round(i.y/2):i.y,u=Math.max(1,W?Math.round(i.w/2):i.w),d=Math.max(1,W?Math.round(i.h/2):i.h),p=1+(R[e.id]??0),m={gridColumn:`${a+1} / span ${u}`,gridRow:`${c+1} / span ${d}`,zIndex:r?p+100:p};return(0,f.jsxs)(`div`,{className:n.t(`canvas-grid-item`,r&&`dragging`),style:m,children:[(0,f.jsx)(`div`,{className:`canvas-grid-item-header`,onPointerDown:t=>ne(t,e),onPointerMove:re,onPointerUp:ie,onPointerCancel:$,children:(0,f.jsxs)(s.t,{variant:`ghost`,size:`xs`,children:[Z&&v&&(0,f.jsx)(o.t,{color:`primary`,iconOnly:!0,"aria-label":`Edit tile`,startIcon:(0,f.jsx)(t.Gn,{}),onPointerDown:e=>e.stopPropagation(),onClick:t=>{t.stopPropagation(),v(e.id)}}),y&&(0,f.jsx)(o.t,{color:`primary`,iconOnly:!0,"aria-label":`Expand tile`,startIcon:(0,f.jsx)(t.$n,{}),onPointerDown:e=>e.stopPropagation(),onClick:t=>{t.stopPropagation(),y(e.id)}}),Z&&_&&(0,f.jsx)(o.t,{color:`error`,iconOnly:!0,"aria-label":`Remove tile`,startIcon:(0,f.jsx)(t.er,{}),onPointerDown:e=>e.stopPropagation(),onClick:t=>{t.stopPropagation(),_(e.id)}})]})}),(0,f.jsx)(`div`,{className:`canvas-grid-item-body`,children:w===`scale`?(0,f.jsx)(I,{baseWidth:T,children:l(e)}):l(e)}),!Z&&y&&(0,f.jsx)(o.t,{className:`canvas-grid-view-expand-handle`,variant:`filled`,shape:`circle`,size:`sm`,color:`primary`,iconOnly:!0,"aria-label":`Expand tile`,startIcon:(0,f.jsx)(t.$n,{}),onClick:t=>{t.stopPropagation(),y(e.id)}}),Z&&r&&(0,f.jsx)(`div`,{className:`canvas-grid-item-glass`,"aria-hidden":!0,children:(0,f.jsx)(t.vr,{size:28})}),Z&&(0,f.jsx)(`div`,{className:`canvas-grid-resize-handle`,"aria-hidden":!0,onPointerDown:t=>te(t,e),onPointerMove:re,onPointerUp:e=>{M&&H(),$(e)},onPointerCancel:$})]},e.id)})]})}var z=(0,d.forwardRef)(R),B=`button, a, [role="button"]`,V=(0,d.forwardRef)(function({children:e,top:t=16,bottomGap:r=16,hideScrollbar:i=!0,draggable:a=!0,className:o,style:s,...c},l){let u=(0,d.useRef)(null);(0,d.useImperativeHandle)(l,()=>u.current);let p=(0,d.useRef)(null),[m,h]=(0,d.useState)(!1);(0,d.useEffect)(()=>{if(!a)return;let e=e=>{let t=p.current,n=u.current;!t||!n||(n.scrollTop=t.startScrollTop-(e.clientY-t.startY))},t=()=>{p.current&&(p.current=null,h(!1))};return window.addEventListener(`mousemove`,e),window.addEventListener(`mouseup`,t),()=>{window.removeEventListener(`mousemove`,e),window.removeEventListener(`mouseup`,t)}},[a]);let g=e=>{if(!a)return;let t=e.target;if(t&&t.closest(B))return;let n=u.current;n&&(p.current={startY:e.clientY,startScrollTop:n.scrollTop},h(!0),e.preventDefault())},_={top:t,height:`calc(100vh - ${t+r}px)`,...s};return(0,f.jsx)(`div`,{ref:u,className:n.t(`m-sticky-panel`,a&&`draggable`,m&&`is-dragging`,i&&`hide-scrollbar`,o),style:_,onMouseDown:g,...c,children:e})});Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return N}}),Object.defineProperty(exports,`b`,{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return M}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return z}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return P}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return D}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return V}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,`x`,{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return h}});
|
|
2
|
+
//# sourceMappingURL=layout-Ct6ViwDQ.cjs.map
|