@banzamel/mineralui 1.9.1 → 1.10.2
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 +22 -55
- package/dist/MAvatar-BElYyQXH.cjs +2 -0
- package/dist/MAvatar-BElYyQXH.cjs.map +1 -0
- package/dist/MAvatar-CIvYzQV4.js +63 -0
- package/dist/MAvatar-CIvYzQV4.js.map +1 -0
- package/dist/{MButton-C1pnL4_j.js → MButton-C94fZ3l9.js} +1 -1
- package/dist/{MButton-C1pnL4_j.js.map → MButton-C94fZ3l9.js.map} +1 -1
- package/dist/{MButton-DFRHWHzh.cjs → MButton-ouB6903s.cjs} +2 -2
- package/dist/{MButton-DFRHWHzh.cjs.map → MButton-ouB6903s.cjs.map} +1 -1
- package/dist/MButtonGroup-BhGt-Yy1.js +30 -0
- package/dist/MButtonGroup-BhGt-Yy1.js.map +1 -0
- package/dist/MButtonGroup-yumQneDa.cjs +2 -0
- package/dist/MButtonGroup-yumQneDa.cjs.map +1 -0
- package/dist/MCard-9ucghJJs.js +89 -0
- package/dist/MCard-9ucghJJs.js.map +1 -0
- package/dist/MCard-Bg_R86Gr.cjs +2 -0
- package/dist/MCard-Bg_R86Gr.cjs.map +1 -0
- package/dist/{MCheckbox-B7SpcD4H.js → MCheckbox-B-nT2OBE.js} +1 -1
- package/dist/{MCheckbox-B7SpcD4H.js.map → MCheckbox-B-nT2OBE.js.map} +1 -1
- package/dist/{MCheckbox-Dn3p_9-1.cjs → MCheckbox-Cbk5hwzJ.cjs} +2 -2
- package/dist/{MCheckbox-Dn3p_9-1.cjs.map → MCheckbox-Cbk5hwzJ.cjs.map} +1 -1
- package/dist/MDetailList-CpwrF22b.cjs +2 -0
- package/dist/MDetailList-CpwrF22b.cjs.map +1 -0
- package/dist/MDetailList-Gh5Y0UOx.js +89 -0
- package/dist/MDetailList-Gh5Y0UOx.js.map +1 -0
- package/dist/{MDropdownMenu-c9U3sEcl.cjs → MDropdownMenu-BT3u-ZJj.cjs} +2 -2
- package/dist/{MDropdownMenu-c9U3sEcl.cjs.map → MDropdownMenu-BT3u-ZJj.cjs.map} +1 -1
- package/dist/{MDropdownMenu-CeiC1tz3.js → MDropdownMenu-CAwSTZ1h.js} +2 -2
- package/dist/{MDropdownMenu-CeiC1tz3.js.map → MDropdownMenu-CAwSTZ1h.js.map} +1 -1
- package/dist/{MGalleryIllustration-Dglx_Ckc.cjs → MGalleryIllustration-D1givjFR.cjs} +2 -2
- package/dist/{MGalleryIllustration-Dglx_Ckc.cjs.map → MGalleryIllustration-D1givjFR.cjs.map} +1 -1
- package/dist/MGrid-Di7laCq4.cjs +2 -0
- package/dist/MGrid-Di7laCq4.cjs.map +1 -0
- package/dist/MGrid-yLmEteNw.js +265 -0
- package/dist/MGrid-yLmEteNw.js.map +1 -0
- package/dist/{MHeading-f3hwkW3r.cjs → MHeading-TJ5yvklz.cjs} +2 -2
- package/dist/{MHeading-f3hwkW3r.cjs.map → MHeading-TJ5yvklz.cjs.map} +1 -1
- package/dist/{MI18nProvider-DOh5xexz.cjs → MI18nProvider-bf1G7lTP.cjs} +2 -2
- package/dist/{MI18nProvider-DOh5xexz.cjs.map → MI18nProvider-bf1G7lTP.cjs.map} +1 -1
- package/dist/{MInput-IsUELgN2.js → MInput-CkbgK8eU.js} +3 -3
- package/dist/{MInput-IsUELgN2.js.map → MInput-CkbgK8eU.js.map} +1 -1
- package/dist/{MInput-BLGduKL_.cjs → MInput-ClHpIrDG.cjs} +2 -2
- package/dist/{MInput-BLGduKL_.cjs.map → MInput-ClHpIrDG.cjs.map} +1 -1
- package/dist/MInputCVC-B353PyVi.cjs +2 -0
- package/dist/MInputCVC-B353PyVi.cjs.map +1 -0
- package/dist/{MInputExpDate-CeCmw6fj.js → MInputCVC-BSHrWcEh.js} +101 -101
- package/dist/MInputCVC-BSHrWcEh.js.map +1 -0
- package/dist/{MInputSearch-_7jfFGr1.cjs → MInputSearch-D2Fr_34s.cjs} +2 -2
- package/dist/{MInputSearch-_7jfFGr1.cjs.map → MInputSearch-D2Fr_34s.cjs.map} +1 -1
- package/dist/{MInputSearch-BBxUF5pw.js → MInputSearch-Dj55a3oO.js} +3 -3
- package/dist/{MInputSearch-BBxUF5pw.js.map → MInputSearch-Dj55a3oO.js.map} +1 -1
- package/dist/{MKbd-DWTS3iS5.cjs → MKbd-CGkzxJhi.cjs} +2 -2
- package/dist/{MKbd-DWTS3iS5.cjs.map → MKbd-CGkzxJhi.cjs.map} +1 -1
- package/dist/{MKbd-v6-tJ9sP.js → MKbd-I4xDtsqc.js} +1 -1
- package/dist/{MKbd-v6-tJ9sP.js.map → MKbd-I4xDtsqc.js.map} +1 -1
- package/dist/{MLink-CRK8YvR4.cjs → MLink-CZ2FfQ0N.cjs} +2 -2
- package/dist/{MLink-CRK8YvR4.cjs.map → MLink-CZ2FfQ0N.cjs.map} +1 -1
- package/dist/{MPagination-D1hYqLDb.cjs → MPagination-CAzIIP2o.cjs} +2 -2
- package/dist/{MPagination-D1hYqLDb.cjs.map → MPagination-CAzIIP2o.cjs.map} +1 -1
- package/dist/{MPagination-DvToi2cs.js → MPagination-CnFI794t.js} +7 -7
- package/dist/{MPagination-DvToi2cs.js.map → MPagination-CnFI794t.js.map} +1 -1
- package/dist/{MPopover-Cqz5TsHg.js → MPopover-BRuwva-c.js} +2 -2
- package/dist/MPopover-BRuwva-c.js.map +1 -0
- package/dist/MPopover-BbgAAM5Z.cjs +2 -0
- package/dist/MPopover-BbgAAM5Z.cjs.map +1 -0
- package/dist/{MPortal-BIxPtFYd.cjs → MPortal-DokH9TfY.cjs} +2 -2
- package/dist/{MPortal-BIxPtFYd.cjs.map → MPortal-DokH9TfY.cjs.map} +1 -1
- package/dist/{MSimpleGrid-CyLf-9R2.cjs → MSimpleGrid-B6Uh1XJY.cjs} +2 -2
- package/dist/{MSimpleGrid-CyLf-9R2.cjs.map → MSimpleGrid-B6Uh1XJY.cjs.map} +1 -1
- package/dist/{MSimpleGrid-Bojj4xKH.js → MSimpleGrid-Ds14eBrD.js} +1 -1
- package/dist/{MSimpleGrid-Bojj4xKH.js.map → MSimpleGrid-Ds14eBrD.js.map} +1 -1
- package/dist/MSkeleton-BpylRABV.js +53 -0
- package/dist/MSkeleton-BpylRABV.js.map +1 -0
- package/dist/MSkeleton-JMkJFzu9.cjs +2 -0
- package/dist/MSkeleton-JMkJFzu9.cjs.map +1 -0
- package/dist/{MSlider-CqrusKJQ.js → MSlider-5141rKeH.js} +1 -1
- package/dist/{MSlider-CqrusKJQ.js.map → MSlider-5141rKeH.js.map} +1 -1
- package/dist/{MSlider-qCGmD4UA.cjs → MSlider-PyXLKckL.cjs} +2 -2
- package/dist/{MSlider-qCGmD4UA.cjs.map → MSlider-PyXLKckL.cjs.map} +1 -1
- package/dist/MStack-B8JtyM10.js +39 -0
- package/dist/MStack-B8JtyM10.js.map +1 -0
- package/dist/MStack-DDn2bYBQ.cjs +2 -0
- package/dist/MStack-DDn2bYBQ.cjs.map +1 -0
- package/dist/{MSurface-odrvQXkb.js → MSurface-B-sjyczH.js} +34 -3
- package/dist/MSurface-B-sjyczH.js.map +1 -0
- package/dist/MSurface-WsYGNGX5.cjs +2 -0
- package/dist/MSurface-WsYGNGX5.cjs.map +1 -0
- package/dist/{MTag-DgB6ukFJ.js → MTag-CKM8lXD6.js} +3 -3
- package/dist/{MTag-DgB6ukFJ.js.map → MTag-CKM8lXD6.js.map} +1 -1
- package/dist/{MTag-DZqV4S13.cjs → MTag-Dez1GOX0.cjs} +2 -2
- package/dist/{MTag-DZqV4S13.cjs.map → MTag-Dez1GOX0.cjs.map} +1 -1
- package/dist/{MText-BHbI7KJO.cjs → MText-CAbqC2qZ.cjs} +2 -2
- package/dist/{MText-BHbI7KJO.cjs.map → MText-CAbqC2qZ.cjs.map} +1 -1
- package/dist/{MTooltip-Dq2vYf3G.cjs → MTooltip-C-x_SqMx.cjs} +2 -2
- package/dist/{MTooltip-Dq2vYf3G.cjs.map → MTooltip-C-x_SqMx.cjs.map} +1 -1
- package/dist/{MTooltip-jSf4VBtB.js → MTooltip-Cbj80F3o.js} +1 -1
- package/dist/{MTooltip-jSf4VBtB.js.map → MTooltip-Cbj80F3o.js.map} +1 -1
- package/dist/MTreeView-B7IWHmGc.cjs +2 -0
- package/dist/MTreeView-B7IWHmGc.cjs.map +1 -0
- package/dist/MTreeView-DMTzRk6c.js +315 -0
- package/dist/MTreeView-DMTzRk6c.js.map +1 -0
- package/dist/{arduino-Bm509TuR.cjs → arduino-CFZS94LP.cjs} +1 -1
- package/dist/arduino-CFZS94LP.cjs.map +1 -0
- package/dist/{arduino-C5s1z3P1.js → arduino-DWEBiENP.js} +2 -2
- package/dist/arduino-DWEBiENP.js.map +1 -0
- package/dist/{bash-RIFbRcCe.js → bash-DQsQM8so.js} +2 -2
- package/dist/bash-DQsQM8so.js.map +1 -0
- package/dist/{bash-CyBbinAU.cjs → bash-Dl1TvWHd.cjs} +1 -1
- package/dist/bash-Dl1TvWHd.cjs.map +1 -0
- package/dist/{c-DAywn1DE.js → c-BgkSGJWN.js} +2 -2
- package/dist/c-BgkSGJWN.js.map +1 -0
- package/dist/{c-DGOxo0dj.cjs → c-PUMyVGnz.cjs} +1 -1
- package/dist/c-PUMyVGnz.cjs.map +1 -0
- package/dist/cards-23tpYjxc.js +1207 -0
- package/dist/cards-23tpYjxc.js.map +1 -0
- package/dist/cards-CK6RnNZi.cjs +2 -0
- package/dist/cards-CK6RnNZi.cjs.map +1 -0
- package/dist/cards.cjs +1 -1
- package/dist/cards.js +3 -3
- package/dist/components/cards/MCardGrid/index.d.ts +1 -1
- package/dist/components/cards/index.d.ts +1 -9
- package/dist/components/data/index.d.ts +4 -24
- package/dist/components/data/useMCardGrid.d.ts +36 -0
- package/dist/components/data/useMTable.d.ts +69 -0
- package/dist/components/display/index.d.ts +0 -8
- package/dist/components/feedback/MProgressRing/MProgressRing.d.ts +8 -0
- package/dist/components/feedback/MProgressRing/MProgressRing.types.d.ts +21 -0
- package/dist/components/feedback/MProgressRing/index.d.ts +2 -0
- package/dist/components/feedback/index.d.ts +2 -1
- package/dist/components/layout/MCanvasGrid/MCanvasGrid.d.ts +5 -0
- package/dist/components/layout/MCanvasGrid/MCanvasGrid.types.d.ts +43 -0
- package/dist/components/layout/MCanvasGrid/ScaleToFit.d.ts +19 -0
- package/dist/components/layout/MCanvasGrid/index.d.ts +2 -0
- package/dist/components/layout/index.d.ts +2 -4
- package/dist/components/media/MAvatar/MAvatar.d.ts +1 -1
- package/dist/components/media/MAvatar/MAvatar.types.d.ts +9 -0
- package/dist/components/media/MAvatar/index.d.ts +1 -1
- package/dist/components/media/index.d.ts +1 -17
- package/dist/components/typography/MHeading/MHeading.d.ts +1 -1
- package/dist/{controls-CcbEqqWo.js → controls-B3P4zKoA.js} +85 -63
- package/dist/controls-B3P4zKoA.js.map +1 -0
- package/dist/controls-DwWfqfDX.cjs +2 -0
- package/dist/controls-DwWfqfDX.cjs.map +1 -0
- package/dist/controls.cjs +1 -1
- package/dist/controls.js +6 -6
- package/dist/{core-DAox0BHy.cjs → core-B2klLGki.cjs} +1 -1
- package/dist/core-B2klLGki.cjs.map +1 -0
- package/dist/{core-BUYr52VU.js → core-BdOw9NlN.js} +1 -1
- package/dist/core-BdOw9NlN.js.map +1 -0
- package/dist/{cpp-D-FtdQo9.cjs → cpp-C_DS-imi.cjs} +1 -1
- package/dist/cpp-C_DS-imi.cjs.map +1 -0
- package/dist/{cpp-Y9cHXDal.js → cpp-ChrqJwqu.js} +2 -2
- package/dist/cpp-ChrqJwqu.js.map +1 -0
- package/dist/{css-DCYZ-Rs6.cjs → css-Brdthutg.cjs} +1 -1
- package/dist/css-Brdthutg.cjs.map +1 -0
- package/dist/{css-C__ffGj6.js → css-DL_ID0lZ.js} +2 -2
- package/dist/css-DL_ID0lZ.js.map +1 -0
- package/dist/data-B5KYb0SW.js +463 -0
- package/dist/data-B5KYb0SW.js.map +1 -0
- package/dist/data-CDZvakQ8.cjs +2 -0
- package/dist/data-CDZvakQ8.cjs.map +1 -0
- package/dist/data.cjs +1 -1
- package/dist/data.js +3 -4
- package/dist/display-2Vak-RyH.cjs +3 -0
- package/dist/display-2Vak-RyH.cjs.map +1 -0
- package/dist/{display-C7YRf4Ze.js → display-ChhvaSPc.js} +288 -241
- package/dist/display-ChhvaSPc.js.map +1 -0
- package/dist/display.cjs +1 -1
- package/dist/display.js +3 -4
- package/dist/dropdowns-BP2HBR-x.cjs +2 -0
- package/dist/dropdowns-BP2HBR-x.cjs.map +1 -0
- package/dist/dropdowns-C9jREjLg.js +1752 -0
- package/dist/dropdowns-C9jREjLg.js.map +1 -0
- package/dist/dropdowns.cjs +1 -1
- package/dist/dropdowns.js +1 -1
- package/dist/feedback-DnuJtYUI.cjs +2 -0
- package/dist/feedback-DnuJtYUI.cjs.map +1 -0
- package/dist/feedback-urwS5wps.js +290 -0
- package/dist/feedback-urwS5wps.js.map +1 -0
- package/dist/feedback.cjs +1 -1
- package/dist/feedback.js +5 -6
- package/dist/{form-BiPQ8SRK.js → form-CWoOQ_qo.js} +1 -1
- package/dist/{form-BiPQ8SRK.js.map → form-CWoOQ_qo.js.map} +1 -1
- package/dist/{form-DlXWN2ul.cjs → form-D5F1kTIA.cjs} +2 -2
- package/dist/{form-DlXWN2ul.cjs.map → form-D5F1kTIA.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/MIcon.types.d.ts +6 -0
- package/dist/icons/glyphs/MAirplaneFillIcon.d.ts +2 -0
- package/dist/icons/glyphs/{MBrandIconsV2.d.ts → MAirplaneIcon.d.ts} +1 -1
- package/dist/icons/glyphs/MApartmentIcon.d.ts +2 -0
- package/dist/icons/glyphs/{MChartIconV2.d.ts → MArchiveIcon.d.ts} +1 -1
- package/dist/icons/glyphs/MBookIcon.d.ts +2 -0
- package/dist/icons/glyphs/MBookOpenFillIcon.d.ts +2 -0
- package/dist/icons/glyphs/{MSearchIconV2.d.ts → MBookOpenIcon.d.ts} +1 -1
- package/dist/icons/glyphs/MBookmarkFillIcon.d.ts +2 -0
- package/dist/icons/glyphs/MBookmarkIcon.d.ts +2 -0
- package/dist/icons/glyphs/MBooksIcon.d.ts +2 -0
- package/dist/icons/glyphs/MCarFillIcon.d.ts +2 -0
- package/dist/icons/glyphs/MCarIcon.d.ts +2 -0
- package/dist/icons/glyphs/MClassroomIcon.d.ts +2 -0
- package/dist/icons/glyphs/MColumnsIcon.d.ts +2 -0
- package/dist/icons/glyphs/{MUserIconV2.d.ts → MFlagAtIcon.d.ts} +1 -1
- package/dist/icons/glyphs/{MHomeIconV2.d.ts → MFlagAuIcon.d.ts} +1 -1
- package/dist/icons/glyphs/MFlagChIcon.d.ts +2 -0
- package/dist/icons/glyphs/MFlagIeIcon.d.ts +2 -0
- package/dist/icons/glyphs/MFlagKrIcon.d.ts +2 -0
- package/dist/icons/glyphs/MFlagNlIcon.d.ts +2 -0
- package/dist/icons/glyphs/MFlagNoIcon.d.ts +2 -0
- package/dist/icons/glyphs/MFlagPtIcon.d.ts +2 -0
- package/dist/icons/glyphs/MFlagSeIcon.d.ts +2 -0
- package/dist/icons/glyphs/MFlagTrIcon.d.ts +2 -0
- package/dist/icons/glyphs/MFlatIcon.d.ts +2 -0
- package/dist/icons/glyphs/MHistoryIcon.d.ts +2 -0
- package/dist/icons/glyphs/MHouseIcon.d.ts +2 -0
- package/dist/icons/glyphs/MKeyIcon.d.ts +2 -0
- package/dist/icons/glyphs/MLessonIcon.d.ts +2 -0
- package/dist/icons/glyphs/MListIcon.d.ts +2 -0
- package/dist/icons/glyphs/MMakeupIcon.d.ts +2 -0
- package/dist/icons/glyphs/MMoveIcon.d.ts +2 -0
- package/dist/icons/glyphs/MPlayIcon.d.ts +2 -0
- package/dist/icons/glyphs/MPrinterIcon.d.ts +2 -0
- package/dist/icons/glyphs/MRedoIcon.d.ts +2 -0
- package/dist/icons/glyphs/MResizeIcon.d.ts +2 -0
- package/dist/icons/glyphs/MRoomIcon.d.ts +2 -0
- package/dist/icons/glyphs/MShareIcon.d.ts +2 -0
- package/dist/icons/glyphs/MShipIcon.d.ts +2 -0
- package/dist/icons/glyphs/MShopIcon.d.ts +2 -0
- package/dist/icons/glyphs/MStopIcon.d.ts +2 -0
- package/dist/icons/glyphs/MTaskIcon.d.ts +2 -0
- package/dist/icons/glyphs/MUndoIcon.d.ts +2 -0
- package/dist/icons/glyphs/MUrgentIcon.d.ts +2 -0
- package/dist/icons/glyphs/MUserCheckIcon.d.ts +2 -0
- package/dist/icons/glyphs/MUserMinusIcon.d.ts +2 -0
- package/dist/icons/glyphs/MUserPlusIcon.d.ts +2 -0
- package/dist/icons/index.d.ts +48 -13
- package/dist/icons-BHFwX7ri.cjs +2 -0
- package/dist/icons-BHFwX7ri.cjs.map +1 -0
- package/dist/{icons-CfpYxnfg.js → icons-DLP-Rs6z.js} +1325 -1925
- package/dist/icons-DLP-Rs6z.js.map +1 -0
- package/dist/icons.cjs +1 -1
- package/dist/icons.js +2 -2
- package/dist/illustrations.cjs +1 -1
- package/dist/index.cjs +1 -2
- package/dist/index.d.ts +0 -2
- package/dist/index.js +53 -93
- package/dist/{inputs-BJMmyEdL.cjs → inputs-D38ib0gM.cjs} +2 -2
- package/dist/{inputs-BJMmyEdL.cjs.map → inputs-D38ib0gM.cjs.map} +1 -1
- package/dist/{inputs-CNPeF6gb.js → inputs-bbwdb6m3.js} +181 -181
- package/dist/{inputs-CNPeF6gb.js.map → inputs-bbwdb6m3.js.map} +1 -1
- package/dist/inputs.cjs +1 -1
- package/dist/inputs.js +5 -5
- package/dist/{javascript-ClV78Svx.js → javascript-B5hepBcv.js} +2 -2
- package/dist/javascript-B5hepBcv.js.map +1 -0
- package/dist/{javascript-_Sr9cnsG.cjs → javascript-DFYAIwfO.cjs} +1 -1
- package/dist/javascript-DFYAIwfO.cjs.map +1 -0
- package/dist/{json-BFetU4Pi.cjs → json-BTHMevf2.cjs} +1 -1
- package/dist/json-BTHMevf2.cjs.map +1 -0
- package/dist/{json-Dz6EkGZR.js → json-DTBnkegk.js} +2 -2
- package/dist/json-DTBnkegk.js.map +1 -0
- package/dist/layout-BgfQpVOU.js +823 -0
- package/dist/layout-BgfQpVOU.js.map +1 -0
- package/dist/layout-D9LAqtZp.cjs +2 -0
- package/dist/layout-D9LAqtZp.cjs.map +1 -0
- package/dist/layout.cjs +1 -1
- package/dist/layout.js +7 -8
- package/dist/licensing-f5KYVz7D.js +28 -0
- package/dist/licensing-f5KYVz7D.js.map +1 -0
- package/dist/licensing-sRHTvX0B.cjs +2 -0
- package/dist/licensing-sRHTvX0B.cjs.map +1 -0
- package/dist/{locale-Bz2JXxDZ.cjs → locale-CJWWjFm-.cjs} +2 -2
- package/dist/{locale-Bz2JXxDZ.cjs.map → locale-CJWWjFm-.cjs.map} +1 -1
- package/dist/{locale-CS1-IY_I.js → locale-JX_gX03k.js} +1 -1
- package/dist/{locale-CS1-IY_I.js.map → locale-JX_gX03k.js.map} +1 -1
- package/dist/media-CM-uEUrV.js +402 -0
- package/dist/media-CM-uEUrV.js.map +1 -0
- package/dist/media-CnjA4Ruo.cjs +2 -0
- package/dist/media-CnjA4Ruo.cjs.map +1 -0
- package/dist/media.cjs +1 -1
- package/dist/media.js +3 -4
- package/dist/overlays-BpDz9ddf.cjs +2 -0
- package/dist/overlays-BpDz9ddf.cjs.map +1 -0
- package/dist/overlays-NwVsvmlb.js +568 -0
- package/dist/overlays-NwVsvmlb.js.map +1 -0
- package/dist/overlays.cjs +1 -1
- package/dist/overlays.js +4 -6
- package/dist/{php-jOdR0XS8.cjs → php-ClxZCTCr.cjs} +1 -1
- package/dist/php-ClxZCTCr.cjs.map +1 -0
- package/dist/{php-5Erp5xxI.js → php-DwgDg57J.js} +2 -2
- package/dist/php-DwgDg57J.js.map +1 -0
- package/dist/primitives.cjs +1 -1
- package/dist/primitives.js +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-DsTDooyX.cjs → theme-yQQAPTkp.cjs} +2 -2
- package/dist/{theme-DsTDooyX.cjs.map → theme-yQQAPTkp.cjs.map} +1 -1
- package/dist/theme.cjs +1 -1
- package/dist/{typescript-C65sNL5w.cjs → typescript-C8NJZXwD.cjs} +1 -1
- package/dist/typescript-C8NJZXwD.cjs.map +1 -0
- package/dist/{typescript-wdQKWfxO.js → typescript-MSi2XC0t.js} +2 -2
- package/dist/typescript-MSi2XC0t.js.map +1 -0
- package/dist/typography-BHhyTO1V.js +42 -0
- package/dist/typography-BHhyTO1V.js.map +1 -0
- package/dist/typography-Qb1U4eiY.cjs +2 -0
- package/dist/typography-Qb1U4eiY.cjs.map +1 -0
- package/dist/typography.cjs +1 -1
- package/dist/typography.js +3 -4
- package/dist/{useGhostText-Dg4P606B.cjs → useGhostText-BFaUUKid.cjs} +2 -2
- package/dist/{useGhostText-Dg4P606B.cjs.map → useGhostText-BFaUUKid.cjs.map} +1 -1
- package/dist/{useInteractionEffect-Bo8285cg.cjs → useInteractionEffect-BH2dgQla.cjs} +2 -2
- package/dist/{useInteractionEffect-Bo8285cg.cjs.map → useInteractionEffect-BH2dgQla.cjs.map} +1 -1
- package/dist/{useKeyboardNav-CyeQtqF8.cjs → useKeyboardNav-CtGPfQX7.cjs} +2 -2
- package/dist/{useKeyboardNav-CyeQtqF8.cjs.map → useKeyboardNav-CtGPfQX7.cjs.map} +1 -1
- package/dist/utils/licensing.d.ts +1 -82
- package/dist/utils.cjs +1 -1
- package/dist/utils.js +1 -1
- package/dist/{xml-a3b-XevT.js → xml-CnKYdLjT.js} +2 -2
- package/dist/xml-CnKYdLjT.js.map +1 -0
- package/dist/{xml-B2okahIr.cjs → xml-jypnnWFn.cjs} +1 -1
- package/dist/xml-jypnnWFn.cjs.map +1 -0
- package/package.json +6 -29
- package/dist/MAvatar-D_dVAPaR.js +0 -57
- package/dist/MAvatar-D_dVAPaR.js.map +0 -1
- package/dist/MAvatar-DzZPRbot.cjs +0 -2
- package/dist/MAvatar-DzZPRbot.cjs.map +0 -1
- package/dist/MAvatarStack-CrhkO_SO.js +0 -330
- package/dist/MAvatarStack-CrhkO_SO.js.map +0 -1
- package/dist/MAvatarStack-DN79aJo1.cjs +0 -2
- package/dist/MAvatarStack-DN79aJo1.cjs.map +0 -1
- package/dist/MCookieBootstrap-BUqtJO3m.cjs +0 -2
- package/dist/MCookieBootstrap-BUqtJO3m.cjs.map +0 -1
- package/dist/MCookieBootstrap-Btt49Iuq.js +0 -436
- package/dist/MCookieBootstrap-Btt49Iuq.js.map +0 -1
- package/dist/MDataTable-7nJuwzJR.cjs +0 -2
- package/dist/MDataTable-7nJuwzJR.cjs.map +0 -1
- package/dist/MDataTable-CQt_pINO.js +0 -297
- package/dist/MDataTable-CQt_pINO.js.map +0 -1
- package/dist/MDrawer-B83--EVv.js +0 -122
- package/dist/MDrawer-B83--EVv.js.map +0 -1
- package/dist/MDrawer-D6cy9K7J.cjs +0 -2
- package/dist/MDrawer-D6cy9K7J.cjs.map +0 -1
- package/dist/MGrid-B-fP4GME.cjs +0 -2
- package/dist/MGrid-B-fP4GME.cjs.map +0 -1
- package/dist/MGrid-DVluuula.js +0 -182
- package/dist/MGrid-DVluuula.js.map +0 -1
- package/dist/MInputExpDate-CeCmw6fj.js.map +0 -1
- package/dist/MInputExpDate-DZ8JtSjs.cjs +0 -2
- package/dist/MInputExpDate-DZ8JtSjs.cjs.map +0 -1
- package/dist/MModal-DiTjBO8B.js +0 -69
- package/dist/MModal-DiTjBO8B.js.map +0 -1
- package/dist/MModal-eJDG6riB.cjs +0 -2
- package/dist/MModal-eJDG6riB.cjs.map +0 -1
- package/dist/MPopover-Cqz5TsHg.js.map +0 -1
- package/dist/MPopover-CxxaY9kr.cjs +0 -2
- package/dist/MPopover-CxxaY9kr.cjs.map +0 -1
- package/dist/MQrCode-HO2YIC7e.cjs +0 -2
- package/dist/MQrCode-HO2YIC7e.cjs.map +0 -1
- package/dist/MQrCode-Kb997gaE.js +0 -465
- package/dist/MQrCode-Kb997gaE.js.map +0 -1
- package/dist/MSkeleton-CVofhuDp.js +0 -136
- package/dist/MSkeleton-CVofhuDp.js.map +0 -1
- package/dist/MSkeleton-CuYA8eN3.cjs +0 -2
- package/dist/MSkeleton-CuYA8eN3.cjs.map +0 -1
- package/dist/MStack-C4Eocfb5.js +0 -70
- package/dist/MStack-C4Eocfb5.js.map +0 -1
- package/dist/MStack-w8XcuIJK.cjs +0 -2
- package/dist/MStack-w8XcuIJK.cjs.map +0 -1
- package/dist/MSubText-C-N15d4Z.js +0 -17
- package/dist/MSubText-C-N15d4Z.js.map +0 -1
- package/dist/MSubText-CIMKPb8o.cjs +0 -2
- package/dist/MSubText-CIMKPb8o.cjs.map +0 -1
- package/dist/MSurface-KvAS2hkl.cjs +0 -2
- package/dist/MSurface-KvAS2hkl.cjs.map +0 -1
- package/dist/MSurface-odrvQXkb.js.map +0 -1
- package/dist/MTabs-BQZ--mMq.js +0 -89
- package/dist/MTabs-BQZ--mMq.js.map +0 -1
- package/dist/MTabs-DeUn6bIp.cjs +0 -2
- package/dist/MTabs-DeUn6bIp.cjs.map +0 -1
- package/dist/MTimeAgo-DI3DF7bD.cjs +0 -2
- package/dist/MTimeAgo-DI3DF7bD.cjs.map +0 -1
- package/dist/MTimeAgo-Db8gOade.js +0 -51
- package/dist/MTimeAgo-Db8gOade.js.map +0 -1
- package/dist/MToggle-B6emKoKq.js +0 -48
- package/dist/MToggle-B6emKoKq.js.map +0 -1
- package/dist/MToggle-BVJm5Bdk.cjs +0 -2
- package/dist/MToggle-BVJm5Bdk.cjs.map +0 -1
- package/dist/MTreeView-AqH8XMPz.js +0 -516
- package/dist/MTreeView-AqH8XMPz.js.map +0 -1
- package/dist/MTreeView-Dp9qbqQh.cjs +0 -2
- package/dist/MTreeView-Dp9qbqQh.cjs.map +0 -1
- package/dist/arduino-Bm509TuR.cjs.map +0 -1
- package/dist/arduino-C5s1z3P1.js.map +0 -1
- package/dist/bash-CyBbinAU.cjs.map +0 -1
- package/dist/bash-RIFbRcCe.js.map +0 -1
- package/dist/c-DAywn1DE.js.map +0 -1
- package/dist/c-DGOxo0dj.cjs.map +0 -1
- package/dist/cards-C50fpYud.js +0 -1539
- package/dist/cards-C50fpYud.js.map +0 -1
- package/dist/cards-Ci1FoV9C.cjs +0 -2
- package/dist/cards-Ci1FoV9C.cjs.map +0 -1
- package/dist/components/cards/MCardBusiness/MCardBusiness.d.ts +0 -2
- package/dist/components/cards/MCardBusiness/MCardBusiness.types.d.ts +0 -37
- package/dist/components/cards/MCardBusiness/index.d.ts +0 -4
- package/dist/components/cards/MCardFinance/MCardFinance.d.ts +0 -2
- package/dist/components/cards/MCardFinance/MCardFinance.types.d.ts +0 -17
- package/dist/components/cards/MCardFinance/index.d.ts +0 -4
- package/dist/components/data/MCalendarBoard/MCalendarBoard.d.ts +0 -8
- package/dist/components/data/MCalendarBoard/MCalendarBoard.types.d.ts +0 -186
- package/dist/components/data/MCalendarBoard/index.d.ts +0 -4
- package/dist/components/data/MChart/MAreaChart.d.ts +0 -2
- package/dist/components/data/MChart/MBarChart.d.ts +0 -2
- package/dist/components/data/MChart/MChart.d.ts +0 -2
- package/dist/components/data/MChart/MChart.types.d.ts +0 -95
- package/dist/components/data/MChart/MLineChart.d.ts +0 -2
- package/dist/components/data/MChart/MPieChart.d.ts +0 -2
- package/dist/components/data/MChart/charts/MAreaChart.d.ts +0 -27
- package/dist/components/data/MChart/charts/MBarChart.d.ts +0 -26
- package/dist/components/data/MChart/charts/MLineChart.d.ts +0 -26
- package/dist/components/data/MChart/charts/MPieChart.d.ts +0 -19
- package/dist/components/data/MChart/index.d.ts +0 -5
- package/dist/components/data/MChart/parts/ChartAxis.d.ts +0 -13
- package/dist/components/data/MChart/parts/ChartDefs.d.ts +0 -1
- package/dist/components/data/MChart/parts/ChartGrid.d.ts +0 -10
- package/dist/components/data/MChart/parts/ChartLegend.d.ts +0 -9
- package/dist/components/data/MChart/parts/ChartTooltip.d.ts +0 -7
- package/dist/components/data/MChart/utils/formats.d.ts +0 -3
- package/dist/components/data/MChart/utils/paths.d.ts +0 -10
- package/dist/components/data/MChart/utils/scales.d.ts +0 -7
- package/dist/components/data/MChat/MChat.d.ts +0 -2
- package/dist/components/data/MChat/MChat.types.d.ts +0 -77
- package/dist/components/data/MChat/MChatBody.d.ts +0 -2
- package/dist/components/data/MChat/MChatContext.d.ts +0 -6
- package/dist/components/data/MChat/MChatConversationItem.d.ts +0 -2
- package/dist/components/data/MChat/MChatConversationList.d.ts +0 -2
- package/dist/components/data/MChat/MChatHeader.d.ts +0 -2
- package/dist/components/data/MChat/MChatInput.d.ts +0 -2
- package/dist/components/data/MChat/MChatMessage.d.ts +0 -2
- package/dist/components/data/MChat/MChatTypingIndicator.d.ts +0 -2
- package/dist/components/data/MChat/emojis.d.ts +0 -2
- package/dist/components/data/MChat/index.d.ts +0 -9
- package/dist/components/data/MFileManager/MFileManager.d.ts +0 -2
- package/dist/components/data/MFileManager/MFileManager.types.d.ts +0 -70
- package/dist/components/data/MFileManager/index.d.ts +0 -4
- package/dist/components/data/MSparkline/MSparkline.d.ts +0 -2
- package/dist/components/data/MSparkline/MSparkline.types.d.ts +0 -15
- package/dist/components/data/MSparkline/index.d.ts +0 -2
- package/dist/components/data/MTimelineCalendar/DayStrip.d.ts +0 -11
- package/dist/components/data/MTimelineCalendar/EventPopover.d.ts +0 -18
- package/dist/components/data/MTimelineCalendar/MTimelineCalendar.d.ts +0 -2
- package/dist/components/data/MTimelineCalendar/MTimelineCalendar.helpers.d.ts +0 -55
- package/dist/components/data/MTimelineCalendar/MTimelineCalendar.types.d.ts +0 -89
- package/dist/components/data/MTimelineCalendar/index.d.ts +0 -2
- package/dist/components/display/MQrCode/MQrCode.d.ts +0 -2
- package/dist/components/display/MQrCode/MQrCode.types.d.ts +0 -11
- package/dist/components/display/MQrCode/index.d.ts +0 -4
- package/dist/components/feedback/MCookie/MCookieBanner/MCookieBanner.d.ts +0 -3
- package/dist/components/feedback/MCookie/MCookieBanner/MCookieBanner.types.d.ts +0 -27
- package/dist/components/feedback/MCookie/MCookieBanner/index.d.ts +0 -2
- package/dist/components/feedback/MCookie/MCookieBootstrap/MCookieBootstrap.d.ts +0 -6
- package/dist/components/feedback/MCookie/MCookieBootstrap/MCookieBootstrap.script.d.ts +0 -4
- package/dist/components/feedback/MCookie/MCookieBootstrap/MCookieBootstrap.types.d.ts +0 -90
- package/dist/components/feedback/MCookie/MCookieBootstrap/index.d.ts +0 -3
- package/dist/components/feedback/MCookie/MCookieConsent/MCookieConsent.d.ts +0 -2
- package/dist/components/feedback/MCookie/MCookieConsent/MCookieConsent.types.d.ts +0 -11
- package/dist/components/feedback/MCookie/MCookieConsent/index.d.ts +0 -2
- package/dist/components/feedback/MCookie/MCookieConsentProvider/MCookieConsent.defaults.d.ts +0 -9
- package/dist/components/feedback/MCookie/MCookieConsentProvider/MCookieConsent.inventory.d.ts +0 -6
- package/dist/components/feedback/MCookie/MCookieConsentProvider/MCookieConsent.storage.d.ts +0 -11
- package/dist/components/feedback/MCookie/MCookieConsentProvider/MCookieConsent.types.d.ts +0 -95
- package/dist/components/feedback/MCookie/MCookieConsentProvider/MCookieConsentContext.d.ts +0 -4
- package/dist/components/feedback/MCookie/MCookieConsentProvider/MCookieConsentProvider.d.ts +0 -2
- package/dist/components/feedback/MCookie/MCookieConsentProvider/index.d.ts +0 -3
- package/dist/components/feedback/MCookie/MCookieDeclaration/MCookieDeclaration.d.ts +0 -2
- package/dist/components/feedback/MCookie/MCookieDeclaration/MCookieDeclaration.types.d.ts +0 -18
- package/dist/components/feedback/MCookie/MCookieDeclaration/index.d.ts +0 -2
- package/dist/components/feedback/MCookie/MCookiePreferences/MCookiePreferences.d.ts +0 -2
- package/dist/components/feedback/MCookie/MCookiePreferences/MCookiePreferences.types.d.ts +0 -25
- package/dist/components/feedback/MCookie/MCookiePreferences/index.d.ts +0 -2
- package/dist/components/feedback/MCookie/MCookieTrigger/MCookieTrigger.d.ts +0 -2
- package/dist/components/feedback/MCookie/MCookieTrigger/MCookieTrigger.types.d.ts +0 -7
- package/dist/components/feedback/MCookie/MCookieTrigger/index.d.ts +0 -2
- package/dist/components/feedback/MCookie/index.d.ts +0 -16
- package/dist/components/layout/MTopbar/MTopbar.d.ts +0 -2
- package/dist/components/layout/MTopbar/MTopbar.types.d.ts +0 -37
- package/dist/components/layout/MTopbar/index.d.ts +0 -2
- package/dist/components/media/MAvatarStack/MAvatarStack.d.ts +0 -2
- package/dist/components/media/MAvatarStack/MAvatarStack.types.d.ts +0 -27
- package/dist/components/media/MAvatarStack/index.d.ts +0 -2
- package/dist/components/media/MMasonry/MMasonry.d.ts +0 -2
- package/dist/components/media/MMasonry/MMasonry.types.d.ts +0 -7
- package/dist/components/media/MMasonry/index.d.ts +0 -2
- package/dist/components/media/MMasonryItem/MMasonryItem.d.ts +0 -2
- package/dist/components/media/MMasonryItem/MMasonryItem.types.d.ts +0 -14
- package/dist/components/media/MMasonryItem/index.d.ts +0 -2
- package/dist/components/media/MShowcaseCarousel/MShowcaseCarousel.d.ts +0 -2
- package/dist/components/media/MShowcaseCarousel/MShowcaseCarousel.types.d.ts +0 -19
- package/dist/components/media/MShowcaseCarousel/index.d.ts +0 -2
- package/dist/components/media/MShowcaseCarouselItem/MShowcaseCarouselItem.d.ts +0 -2
- package/dist/components/media/MShowcaseCarouselItem/MShowcaseCarouselItem.types.d.ts +0 -18
- package/dist/components/media/MShowcaseCarouselItem/index.d.ts +0 -2
- package/dist/controls-CYQxPd4U.cjs +0 -2
- package/dist/controls-CYQxPd4U.cjs.map +0 -1
- package/dist/controls-CcbEqqWo.js.map +0 -1
- package/dist/cookie-consent-bootstrap.cjs +0 -2
- package/dist/cookie-consent-bootstrap.cjs.map +0 -1
- package/dist/cookie-consent-bootstrap.d.ts +0 -1
- package/dist/cookie-consent-bootstrap.js +0 -106
- package/dist/cookie-consent-bootstrap.js.map +0 -1
- package/dist/core-BUYr52VU.js.map +0 -1
- package/dist/core-DAox0BHy.cjs.map +0 -1
- package/dist/cpp-D-FtdQo9.cjs.map +0 -1
- package/dist/cpp-Y9cHXDal.js.map +0 -1
- package/dist/css-C__ffGj6.js.map +0 -1
- package/dist/css-DCYZ-Rs6.cjs.map +0 -1
- package/dist/data-DtShJEic.cjs +0 -2
- package/dist/data-DtShJEic.cjs.map +0 -1
- package/dist/data-RXuvb9VI.js +0 -3454
- package/dist/data-RXuvb9VI.js.map +0 -1
- package/dist/display-96-TEGmZ.cjs +0 -3
- package/dist/display-96-TEGmZ.cjs.map +0 -1
- package/dist/display-C7YRf4Ze.js.map +0 -1
- package/dist/dropdowns-Ce3Pb2JM.cjs +0 -2
- package/dist/dropdowns-Ce3Pb2JM.cjs.map +0 -1
- package/dist/dropdowns-DfXhVlWQ.js +0 -1712
- package/dist/dropdowns-DfXhVlWQ.js.map +0 -1
- package/dist/feedback-DGT28-Zx.js +0 -1058
- package/dist/feedback-DGT28-Zx.js.map +0 -1
- package/dist/feedback-Dr7G3K_R.cjs +0 -2
- package/dist/feedback-Dr7G3K_R.cjs.map +0 -1
- package/dist/frameworkTexts-BLJcGUXz.cjs +0 -2
- package/dist/frameworkTexts-BLJcGUXz.cjs.map +0 -1
- package/dist/frameworkTexts-BTFyhWFD.js +0 -117
- package/dist/frameworkTexts-BTFyhWFD.js.map +0 -1
- package/dist/icons/MIconV2.d.ts +0 -7
- package/dist/icons/MIconV2Glyph.d.ts +0 -11
- package/dist/icons/MIconV2Scenes.d.ts +0 -41
- package/dist/icons/glyphs/MCalendarIconV2.d.ts +0 -2
- package/dist/icons/glyphs/MFlagIconsV2.d.ts +0 -19
- package/dist/icons/glyphs/MNavigationIconsV2.d.ts +0 -14
- package/dist/icons/glyphs/MSettingsIconV2.d.ts +0 -2
- package/dist/icons-CfpYxnfg.js.map +0 -1
- package/dist/icons-qCoE70hn.cjs +0 -2
- package/dist/icons-qCoE70hn.cjs.map +0 -1
- package/dist/index.cjs.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/javascript-ClV78Svx.js.map +0 -1
- package/dist/javascript-_Sr9cnsG.cjs.map +0 -1
- package/dist/json-BFetU4Pi.cjs.map +0 -1
- package/dist/json-Dz6EkGZR.js.map +0 -1
- package/dist/layout-dUrQeGc2.cjs +0 -2
- package/dist/layout-dUrQeGc2.cjs.map +0 -1
- package/dist/layout-tIq6BGQK.js +0 -711
- package/dist/layout-tIq6BGQK.js.map +0 -1
- package/dist/licensing-9sZ43Cif.cjs +0 -2
- package/dist/licensing-9sZ43Cif.cjs.map +0 -1
- package/dist/licensing-Bq78CLC_.js +0 -109
- package/dist/licensing-Bq78CLC_.js.map +0 -1
- package/dist/media-BySr5LGc.cjs +0 -2
- package/dist/media-BySr5LGc.cjs.map +0 -1
- package/dist/media-IQ4iYTs-.js +0 -391
- package/dist/media-IQ4iYTs-.js.map +0 -1
- package/dist/overlays-BabXGLEM.js +0 -392
- package/dist/overlays-BabXGLEM.js.map +0 -1
- package/dist/overlays-CTR3n21O.cjs +0 -2
- package/dist/overlays-CTR3n21O.cjs.map +0 -1
- package/dist/php-5Erp5xxI.js.map +0 -1
- package/dist/php-jOdR0XS8.cjs.map +0 -1
- package/dist/typescript-C65sNL5w.cjs.map +0 -1
- package/dist/typescript-wdQKWfxO.js.map +0 -1
- package/dist/typography-CAW17MDj.js +0 -31
- package/dist/typography-CAW17MDj.js.map +0 -1
- package/dist/typography-sbLuXqFn.cjs +0 -2
- package/dist/typography-sbLuXqFn.cjs.map +0 -1
- package/dist/utils/commandPaletteFromNavGroups.d.ts +0 -74
- package/dist/xml-B2okahIr.cjs.map +0 -1
- package/dist/xml-a3b-XevT.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"data-RXuvb9VI.js","names":[],"sources":["../src/components/data/MChat/MChatContext.ts","../src/components/data/MChat/MChat.tsx","../src/components/data/MChat/MChatHeader.tsx","../src/components/data/MChat/MChatMessage.tsx","../src/components/data/MChat/MChatBody.tsx","../src/components/data/MChat/emojis.ts","../src/components/data/MChat/MChatInput.tsx","../src/components/data/MChat/MChatTypingIndicator.tsx","../src/components/data/MChat/MChatConversationList.tsx","../src/components/data/MChat/MChatConversationItem.tsx","../src/components/data/MTaskList/MTaskList.tsx","../src/components/data/MTimelineCalendar/MTimelineCalendar.helpers.ts","../src/components/data/MTimelineCalendar/DayStrip.tsx","../src/components/data/MTimelineCalendar/EventPopover.tsx","../src/components/data/MTimelineCalendar/MTimelineCalendar.tsx","../src/components/data/MFileManager/MFileManager.tsx","../src/components/data/MCalendarBoard/MCalendarBoard.tsx","../src/components/data/MChart/MChart.types.ts","../src/components/data/MChart/utils/formats.ts","../src/components/data/MChart/parts/ChartGrid.tsx","../src/components/data/MChart/parts/ChartAxis.tsx","../src/components/data/MChart/charts/MLineChart.tsx","../src/components/data/MChart/charts/MBarChart.tsx","../src/components/data/MChart/charts/MAreaChart.tsx","../src/components/data/MChart/charts/MPieChart.tsx","../src/components/data/MChart/parts/ChartDefs.tsx","../src/components/data/MChart/parts/ChartTooltip.tsx","../src/components/data/MChart/parts/ChartLegend.tsx","../src/components/data/MChart/MChart.tsx","../src/components/data/MChart/MLineChart.tsx","../src/components/data/MChart/MBarChart.tsx","../src/components/data/MChart/MAreaChart.tsx","../src/components/data/MChart/MPieChart.tsx"],"sourcesContent":["import {createContext, useContext} from 'react'\nimport type {MColor} from '../../../theme'\n\nexport interface MChatContextValue {\n color?: MColor\n}\n\nexport const MChatContext = createContext<MChatContextValue>({})\n\nexport function useMChatContext() {\n return useContext(MChatContext)\n}\n","import {Children, isValidElement, useMemo} from 'react'\nimport type {ReactNode} from 'react'\nimport type {MChatProps} from './MChat.types'\nimport {MChatContext} from './MChatContext'\nimport {MPortal} from '../../primitives'\nimport {MButton} from '../../controls'\nimport {MChatIcon} from '../../../icons'\nimport {cn} from '../../../utils/cn'\nimport './MChat.css'\n\nfunction isChatSlot(child: ReactNode, flag: string): boolean {\n return isValidElement(child) && !!(child.type as any)[flag]\n}\n\nexport function MChat({\n variant = 'inline',\n open,\n onToggle,\n unreadCount,\n color = 'primary',\n className,\n children,\n ...rest\n}: MChatProps) {\n let header: ReactNode = null\n let conversationList: ReactNode = null\n const body: ReactNode[] = []\n\n Children.forEach(children, (child) => {\n if (isChatSlot(child, '__chatHeader')) {\n header = child\n return\n }\n if (isChatSlot(child, '__chatConversationList')) {\n conversationList = child\n return\n }\n body.push(child)\n })\n\n const ctx = useMemo(() => ({color}), [color])\n\n const chatContent = (\n <MChatContext.Provider value={ctx}>\n <div\n className={cn('chat', variant, `color-${color}`, variant === 'floating' && open && 'open', className)}\n {...rest}\n >\n {conversationList && <div className=\"chat-sidebar\">{conversationList}</div>}\n <div className=\"chat-main\">\n {header}\n {body}\n </div>\n </div>\n </MChatContext.Provider>\n )\n\n if (variant === 'floating') {\n return (\n <MPortal>\n <div className={cn('chat-floating-wrapper', open && 'open')}>\n {open && chatContent}\n <MButton\n variant=\"filled\"\n color={color}\n shape=\"circle\"\n size=\"lg\"\n className=\"chat-floating-trigger\"\n onClick={onToggle}\n aria-label={open ? 'Close chat' : 'Open chat'}\n badge={!open && unreadCount ? unreadCount : undefined}\n badgeColor=\"error\"\n badgePulsing={!open && !!unreadCount}\n >\n <MChatIcon />\n </MButton>\n </div>\n </MPortal>\n )\n }\n\n return chatContent\n}\n","import type {MChatHeaderProps} from './MChat.types'\nimport {cn} from '../../../utils/cn'\n\nexport function MChatHeader({bordered = false, className, children, ...rest}: MChatHeaderProps) {\n return (\n <div className={cn('chat-header', bordered && 'bordered', className)} {...rest}>\n {children}\n </div>\n )\n}\n;(MChatHeader as any).__chatHeader = true\n","import type {MChatMessageProps} from './MChat.types'\nimport {MAvatar} from '../../media'\nimport {MImage} from '../../media'\nimport {MText, MSubText} from '../../typography'\nimport {MTimeAgo} from '../../display'\nimport {cn} from '../../../utils/cn'\n\nfunction StatusIcon({status}: {status?: string}) {\n if (!status) return null\n\n const double = status === 'delivered' || status === 'read'\n const colorClass = status === 'read' ? 'chat-status-read' : ''\n\n return (\n <span className={cn('chat-status', colorClass)} aria-label={status}>\n {double ? '✓✓' : '✓'}\n </span>\n )\n}\n\nexport function MChatMessage({\n message,\n showAvatar = true,\n showTimestamp = true,\n color,\n className,\n ...rest\n}: MChatMessageProps) {\n const {content, sender, timestamp, status, isOwn, images} = message\n const colorClass = color ? color : undefined\n\n return (\n <div className={cn('chat-message', isOwn && 'own', colorClass, className)} {...rest}>\n {showAvatar && !isOwn && (\n <MAvatar\n src={sender.avatar}\n name={sender.name}\n size=\"sm\"\n color={color}\n className=\"chat-message-avatar\"\n />\n )}\n <div className=\"chat-message-content\">\n {!isOwn && (\n <MText className=\"chat-message-sender\" color=\"neutral\">\n {sender.name}\n </MText>\n )}\n <div className=\"chat-message-bubble\">\n {content && <MText>{content}</MText>}\n {images && images.length > 0 && (\n <div className={cn('chat-message-images', images.length > 1 && 'grid')}>\n {images.map((src, i) => (\n <MImage key={i} src={src} alt=\"\" fit=\"cover\" rounded className=\"chat-message-image\" />\n ))}\n </div>\n )}\n </div>\n <div className=\"chat-message-meta\">\n {isOwn && <StatusIcon status={status} />}\n {showTimestamp && (\n <MSubText className=\"chat-message-time\">\n <MTimeAgo value={timestamp} />\n </MSubText>\n )}\n </div>\n </div>\n </div>\n )\n}\n","import {useRef, useEffect, useCallback} from 'react'\nimport type {MChatBodyProps} from './MChat.types'\nimport {useMChatContext} from './MChatContext'\nimport {MChatMessage} from './MChatMessage'\nimport {MSpinner} from '../../feedback'\nimport {cn} from '../../../utils/cn'\n\nexport function MChatBody({\n messages,\n onScrollTop,\n loading = false,\n color: colorProp,\n className,\n children,\n ...rest\n}: MChatBodyProps) {\n const {color: ctxColor} = useMChatContext()\n const color = colorProp ?? ctxColor\n\n const containerRef = useRef<HTMLDivElement>(null)\n const stickToBottom = useRef(true)\n const prevMessageCount = useRef(0)\n\n const scrollToBottom = useCallback(() => {\n const el = containerRef.current\n if (el) el.scrollTop = el.scrollHeight\n }, [])\n\n useEffect(() => {\n const count = messages?.length ?? 0\n if (count > prevMessageCount.current && stickToBottom.current) {\n scrollToBottom()\n }\n prevMessageCount.current = count\n }, [messages?.length, scrollToBottom])\n\n useEffect(() => {\n scrollToBottom()\n }, [scrollToBottom])\n\n const handleScroll = () => {\n const el = containerRef.current\n if (!el) return\n\n const atBottom = el.scrollHeight - el.scrollTop - el.clientHeight < 40\n stickToBottom.current = atBottom\n\n if (el.scrollTop < 40 && onScrollTop && !loading) {\n onScrollTop()\n }\n }\n\n return (\n <div ref={containerRef} className={cn('chat-body', className)} onScroll={handleScroll} {...rest}>\n {loading && (\n <div className=\"chat-body-loader\">\n <MSpinner size=\"sm\" />\n </div>\n )}\n {messages?.map((msg) => (\n <MChatMessage key={msg.id} message={msg} color={color} />\n ))}\n {children}\n </div>\n )\n}\n","import type {MChatEmojiCategory} from './MChat.types'\n\nexport const chatEmojiCategories: MChatEmojiCategory[] = [\n {\n label: 'Smileys',\n emojis: [\n '😀',\n '😃',\n '😄',\n '😁',\n '😆',\n '😅',\n '🤣',\n '😂',\n '🙂',\n '😊',\n '😇',\n '🥰',\n '😍',\n '🤩',\n '😘',\n '😗',\n '😋',\n '😛',\n '😜',\n '🤪',\n '😝',\n '🤗',\n '🤔',\n '🫡',\n '🤐',\n '🤨',\n '😐',\n '😑',\n '😶',\n '🫠',\n '😏',\n '😒',\n '🙄',\n '😬',\n '😮💨',\n '🤥',\n '😌',\n '😔',\n '😪',\n '🤤',\n '😴',\n '😷',\n '🤒',\n '🤕',\n '🤢',\n '🤮',\n '🤧',\n '🥵',\n '🥶',\n '😵',\n '🤯',\n '🥳',\n '🥸',\n '😎',\n '🤓',\n '🧐',\n ],\n },\n {\n label: 'Gestures',\n emojis: [\n '👋',\n '🤚',\n '🖐️',\n '✋',\n '🖖',\n '🫱',\n '🫲',\n '👌',\n '🤌',\n '🤏',\n '✌️',\n '🤞',\n '🫰',\n '🤟',\n '🤘',\n '🤙',\n '👈',\n '👉',\n '👆',\n '👇',\n '☝️',\n '👍',\n '👎',\n '✊',\n '👊',\n '🤛',\n '🤜',\n '👏',\n '🙌',\n '🫶',\n '👐',\n '🤝',\n ],\n },\n {\n label: 'Hearts',\n emojis: [\n '❤️',\n '🧡',\n '💛',\n '💚',\n '💙',\n '💜',\n '🖤',\n '🤍',\n '🤎',\n '💔',\n '❤️🔥',\n '❤️🩹',\n '💕',\n '💞',\n '💓',\n '💗',\n '💖',\n '💘',\n '💝',\n '💟',\n ],\n },\n {\n label: 'Objects',\n emojis: [\n '🔥',\n '✨',\n '🌟',\n '💫',\n '⚡',\n '💥',\n '🎉',\n '🎊',\n '🏆',\n '🥇',\n '🎯',\n '💡',\n '📌',\n '📎',\n '✅',\n '❌',\n '⭐',\n '💬',\n '👁️🗨️',\n '🔔',\n ],\n },\n]\n","import {useState, useRef, useCallback, useEffect} from 'react'\nimport type {KeyboardEvent, DragEvent} from 'react'\nimport type {MChatInputProps} from './MChat.types'\nimport {useMChatContext} from './MChatContext'\nimport {MButton} from '../../controls'\nimport {MImage} from '../../media'\nimport {MPopover} from '../../primitives'\nimport {MAttachIcon, MCloseIcon, MSendIcon} from '../../../icons'\nimport {cn} from '../../../utils/cn'\nimport {chatEmojiCategories} from './emojis'\n\nconst ACCEPT_IMAGES = 'image/png,image/jpeg,image/gif,image/webp'\n\nexport function MChatInput({\n onSend,\n placeholder = 'Type a message…',\n disabled = false,\n showEmoji = true,\n showAttach = true,\n onTyping,\n color: colorProp,\n className,\n ...rest\n}: MChatInputProps) {\n const {color: ctxColor} = useMChatContext()\n const color = colorProp ?? ctxColor\n const [value, setValue] = useState('')\n const [emojiOpen, setEmojiOpen] = useState(false)\n const [attachedFiles, setAttachedFiles] = useState<File[]>([])\n const [previews, setPreviews] = useState<string[]>([])\n const [dragOver, setDragOver] = useState(false)\n const textareaRef = useRef<HTMLTextAreaElement>(null)\n const emojiButtonRef = useRef<HTMLButtonElement>(null)\n const fileInputRef = useRef<HTMLInputElement>(null)\n const typingRef = useRef(false)\n const typingTimerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined)\n\n const addFiles = useCallback((files: File[]) => {\n const imageFiles = files.filter((f) => f.type.startsWith('image/'))\n if (imageFiles.length === 0) return\n\n setAttachedFiles((prev) => [...prev, ...imageFiles])\n\n imageFiles.forEach((file) => {\n const url = URL.createObjectURL(file)\n setPreviews((prev) => [...prev, url])\n })\n }, [])\n\n const removeFile = useCallback((index: number) => {\n setPreviews((prev) => {\n URL.revokeObjectURL(prev[index])\n return prev.filter((_, i) => i !== index)\n })\n setAttachedFiles((prev) => prev.filter((_, i) => i !== index))\n }, [])\n\n useEffect(() => {\n return () => previews.forEach((url) => URL.revokeObjectURL(url))\n }, [])\n\n const send = useCallback(() => {\n const trimmed = value.trim()\n if (!trimmed && attachedFiles.length === 0) return\n if (disabled) return\n\n onSend?.(trimmed, attachedFiles.length > 0 ? attachedFiles : undefined)\n setValue('')\n setAttachedFiles([])\n setPreviews((prev) => {\n prev.forEach((url) => URL.revokeObjectURL(url))\n return []\n })\n if (textareaRef.current) {\n textareaRef.current.style.height = 'auto'\n }\n if (typingRef.current) {\n typingRef.current = false\n onTyping?.(false)\n }\n }, [value, attachedFiles, disabled, onSend, onTyping])\n\n const handleKeyDown = (e: KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n send()\n }\n }\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n setValue(e.target.value)\n autoResize(e.target)\n\n if (onTyping) {\n if (!typingRef.current) {\n typingRef.current = true\n onTyping(true)\n }\n clearTimeout(typingTimerRef.current)\n typingTimerRef.current = setTimeout(() => {\n typingRef.current = false\n onTyping(false)\n }, 1500)\n }\n }\n\n const autoResize = (el: HTMLTextAreaElement) => {\n el.style.height = 'auto'\n el.style.height = Math.min(el.scrollHeight, 120) + 'px'\n }\n\n useEffect(() => {\n return () => clearTimeout(typingTimerRef.current)\n }, [])\n\n const insertEmoji = (emoji: string) => {\n setValue((prev) => prev + emoji)\n setEmojiOpen(false)\n textareaRef.current?.focus()\n }\n\n const handleDragOver = (e: DragEvent) => {\n e.preventDefault()\n setDragOver(true)\n }\n\n const handleDragLeave = (e: DragEvent) => {\n e.preventDefault()\n setDragOver(false)\n }\n\n const handleDrop = (e: DragEvent) => {\n e.preventDefault()\n setDragOver(false)\n const files = Array.from(e.dataTransfer.files)\n addFiles(files)\n }\n\n const handleFileSelect = () => {\n const files = fileInputRef.current?.files\n if (files) addFiles(Array.from(files))\n if (fileInputRef.current) fileInputRef.current.value = ''\n }\n\n const canSend = value.trim() || attachedFiles.length > 0\n\n return (\n <div\n className={cn('chat-input', dragOver && 'drag-over', className)}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n {...rest}\n >\n {previews.length > 0 && (\n <div className=\"chat-input-previews\">\n {previews.map((src, i) => (\n <div key={i} className=\"chat-input-preview\">\n <MImage src={src} alt=\"\" fit=\"cover\" rounded className=\"chat-input-preview-img\" />\n <button\n type=\"button\"\n className=\"chat-input-preview-remove\"\n onClick={() => removeFile(i)}\n aria-label=\"Remove image\"\n >\n <MCloseIcon />\n </button>\n </div>\n ))}\n </div>\n )}\n <div className=\"chat-input-field\">\n {showEmoji && (\n <>\n <button\n ref={emojiButtonRef}\n type=\"button\"\n className=\"chat-input-emoji-trigger\"\n onClick={() => setEmojiOpen((o) => !o)}\n aria-label=\"Emoji\"\n disabled={disabled}\n >\n 😊\n </button>\n <MPopover\n open={emojiOpen}\n anchorRef={emojiButtonRef as React.RefObject<HTMLElement>}\n onClose={() => setEmojiOpen(false)}\n placement=\"top-start\"\n >\n <div className=\"chat-emoji-picker\">\n {chatEmojiCategories.map((cat) => (\n <div key={cat.label} className=\"chat-emoji-category\">\n <div className=\"chat-emoji-category-label\">{cat.label}</div>\n <div className=\"chat-emoji-grid\">\n {cat.emojis.map((emoji) => (\n <button\n key={emoji}\n type=\"button\"\n className=\"chat-emoji-btn\"\n onClick={() => insertEmoji(emoji)}\n >\n {emoji}\n </button>\n ))}\n </div>\n </div>\n ))}\n </div>\n </MPopover>\n </>\n )}\n {showAttach && (\n <>\n <input\n ref={fileInputRef}\n type=\"file\"\n accept={ACCEPT_IMAGES}\n multiple\n className=\"chat-input-file-hidden\"\n onChange={handleFileSelect}\n tabIndex={-1}\n />\n <button\n type=\"button\"\n className=\"chat-input-attach-trigger\"\n onClick={() => fileInputRef.current?.click()}\n aria-label=\"Attach image\"\n disabled={disabled}\n >\n <MAttachIcon color=\"inherit\" />\n </button>\n </>\n )}\n <textarea\n ref={textareaRef}\n className=\"chat-input-textarea\"\n value={value}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n disabled={disabled}\n rows={1}\n />\n <MButton\n variant=\"filled\"\n size=\"sm\"\n color={color ?? 'primary'}\n iconOnly\n shape=\"circle\"\n className=\"chat-input-send\"\n onClick={send}\n disabled={disabled || !canSend}\n aria-label=\"Send\"\n >\n <MSendIcon />\n </MButton>\n </div>\n </div>\n )\n}\n","import type {MChatTypingIndicatorProps} from './MChat.types'\nimport {MAvatar} from '../../media'\nimport {cn} from '../../../utils/cn'\n\nexport function MChatTypingIndicator({users = [], visible = true, className, ...rest}: MChatTypingIndicatorProps) {\n if (!visible || users.length === 0) return null\n\n const label =\n users.length === 1\n ? `${users[0].name} is typing`\n : users.length === 2\n ? `${users[0].name} and ${users[1].name} are typing`\n : `${users[0].name} and ${users.length - 1} others are typing`\n\n return (\n <div className={cn('chat-typing', className)} aria-label={label} {...rest}>\n {users.length === 1 && (\n <MAvatar src={users[0].avatar} name={users[0].name} size=\"sm\" className=\"chat-typing-avatar\" />\n )}\n <div className=\"chat-typing-dots\">\n <span className=\"chat-typing-dot\" />\n <span className=\"chat-typing-dot\" />\n <span className=\"chat-typing-dot\" />\n </div>\n </div>\n )\n}\n","import type {MChatConversationListProps} from './MChat.types'\nimport {cn} from '../../../utils/cn'\n\nexport function MChatConversationList({className, children, ...rest}: MChatConversationListProps) {\n return (\n <div className={cn('chat-conversation-list', className)} {...rest}>\n {children}\n </div>\n )\n}\n;(MChatConversationList as any).__chatConversationList = true\n","import type {MChatConversationItemProps} from './MChat.types'\nimport {useMChatContext} from './MChatContext'\nimport {MAvatar} from '../../media'\nimport {MText, MSubText} from '../../typography'\nimport {MBadge} from '../../feedback'\nimport {MTimeAgo} from '../../display'\nimport {cn} from '../../../utils/cn'\n\nexport function MChatConversationItem({\n conversation,\n active = false,\n color: colorProp,\n onClick,\n className,\n ...rest\n}: MChatConversationItemProps) {\n const {color: ctxColor} = useMChatContext()\n const color = colorProp ?? ctxColor\n const {title, participants, lastMessage, unreadCount} = conversation\n const displayName = title ?? participants.map((p) => p.name).join(', ')\n const firstParticipant = participants[0]\n const hasOnline = participants.some((p) => p.online)\n\n return (\n <div\n className={cn('chat-conversation-item', active && 'active', className)}\n onClick={() => onClick?.(conversation)}\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n onClick?.(conversation)\n }\n }}\n {...rest}\n >\n <MAvatar\n src={firstParticipant?.avatar}\n name={firstParticipant?.name}\n size=\"md\"\n color={color}\n badge={hasOnline}\n badgeColor=\"success\"\n className=\"chat-conversation-avatar\"\n />\n <div className=\"chat-conversation-info\">\n <div className=\"chat-conversation-top\">\n <MText className=\"chat-conversation-name\">{displayName}</MText>\n {lastMessage && (\n <MSubText className=\"chat-conversation-time\">\n <MTimeAgo value={lastMessage.timestamp} />\n </MSubText>\n )}\n </div>\n {lastMessage && (\n <div className=\"chat-conversation-bottom\">\n <MSubText className=\"chat-conversation-preview\">\n {lastMessage.isOwn ? 'You: ' : ''}\n {lastMessage.content}\n </MSubText>\n {!!unreadCount && unreadCount > 0 && (\n <MBadge color={color ?? 'primary'} size=\"sm\" rounded>\n {unreadCount}\n </MBadge>\n )}\n </div>\n )}\n </div>\n </div>\n )\n}\n","import type {MTaskListProps} from './MTaskList.types'\nimport {MCheckbox} from '../../controls'\nimport {cn} from '../../../utils/cn'\nimport './MTaskList.css'\n\n// Render an interactive checklist with toggleable task items.\nexport function MTaskList({\n items,\n color = 'primary',\n strikethrough = true,\n onChange,\n className,\n ...rest\n}: MTaskListProps) {\n return (\n <div className={cn('task list', `color-${color}`, className)} role=\"list\" {...rest}>\n {items.map((item) => (\n <div\n key={item.id}\n className={cn('task item', item.checked && 'checked', item.disabled && 'disabled')}\n role=\"listitem\"\n onClick={(event) => {\n if (item.disabled) return\n if ((event.target as HTMLElement).closest('.checkbox')) return\n onChange?.(item.id, !(item.checked ?? false))\n }}\n >\n <MCheckbox\n className=\"task control\"\n checked={item.checked ?? false}\n color={color}\n size=\"sm\"\n disabled={item.disabled}\n onChange={(e) => onChange?.(item.id, e.target.checked)}\n clickEffect=\"ripple\"\n />\n <span className={cn('task label', item.checked && strikethrough && 'done')}>{item.label}</span>\n </div>\n ))}\n </div>\n )\n}\n","import type {MTimelineCalendarEvent} from './MTimelineCalendar.types'\n\nexport const MS_PER_HOUR = 3_600_000\nexport const MS_PER_MINUTE = 60_000\nexport const MS_PER_DAY = 24 * MS_PER_HOUR\nexport const FALLBACK_VIEWPORT_WIDTH = 960\nexport const MIN_VIEWPORT_WIDTH = 320\nexport const DAY_STRIP_HEIGHT = 56\nexport const DAY_STRIP_DAYS = 14\n\nexport interface PositionedEvent {\n event: MTimelineCalendarEvent\n startMs: number\n endMs: number\n rowIndex: number\n overlapping: boolean\n}\n\nexport interface OverlapBand {\n rowIndex: number\n startMs: number\n endMs: number\n count: number\n}\n\nexport interface OutOfViewConflict {\n direction: 'before' | 'after'\n targetMs: number\n daysAway: number\n}\n\nexport function getInitialViewportWidth(): number {\n if (typeof window === 'undefined') {\n return FALLBACK_VIEWPORT_WIDTH\n }\n return Math.max(MIN_VIEWPORT_WIDTH, Math.min(1600, window.innerWidth - 200))\n}\n\nexport function toDate(value: Date | string): Date {\n return value instanceof Date ? value : new Date(value)\n}\n\nexport function parseHmToMinutes(value?: string): number | null {\n if (!value) {\n return null\n }\n const match = /^(\\d{1,2}):(\\d{2})$/.exec(value)\n if (!match) {\n return null\n }\n return Number(match[1]) * 60 + Number(match[2])\n}\n\nexport function startOfDay(date: Date): Date {\n const next = new Date(date)\n next.setHours(0, 0, 0, 0)\n return next\n}\n\nexport function addDays(date: Date, amount: number): Date {\n const next = new Date(date)\n next.setDate(next.getDate() + amount)\n return next\n}\n\nexport function isSameDay(a: Date, b: Date): boolean {\n return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate()\n}\n\nexport function clamp(value: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, value))\n}\n\nexport function formatHourLabel(date: Date, locale: string): string {\n return new Intl.DateTimeFormat(locale, {hour: '2-digit', minute: '2-digit', hour12: false}).format(date)\n}\n\nexport function formatDayLabel(date: Date, locale: string): string {\n return new Intl.DateTimeFormat(locale, {weekday: 'short', day: '2-digit', month: 'short'}).format(date)\n}\n\nexport function formatShortWeekday(date: Date, locale: string): string {\n return new Intl.DateTimeFormat(locale, {weekday: 'short'}).format(date)\n}\n\nexport function formatRangeLabel(start: Date, end: Date, locale: string): string {\n return `${formatHourLabel(start, locale)} – ${formatHourLabel(end, locale)}`\n}\n\nexport function formatFullDate(date: Date, locale: string): string {\n return new Intl.DateTimeFormat(locale, {weekday: 'long', day: 'numeric', month: 'long', year: 'numeric'}).format(\n date\n )\n}\n\nexport function detectOverlapsAndBands(rowIds: string[], events: MTimelineCalendarEvent[]) {\n const positioned: PositionedEvent[] = []\n const bands: OverlapBand[] = []\n const rowIndexById = new Map(rowIds.map((id, index) => [id, index]))\n\n rowIds.forEach((rowId) => {\n const rowIndex = rowIndexById.get(rowId) ?? 0\n const rowEvents = events\n .filter((event) => event.rowId === rowId)\n .map((event) => ({\n event,\n startMs: toDate(event.startAt).getTime(),\n endMs: toDate(event.endAt).getTime(),\n }))\n .filter((entry) => entry.endMs > entry.startMs)\n .sort((left, right) => left.startMs - right.startMs)\n\n rowEvents.forEach((entry, index) => {\n let overlapping = false\n for (let other = 0; other < rowEvents.length; other += 1) {\n if (other === index) {\n continue\n }\n if (rowEvents[other].startMs < entry.endMs && rowEvents[other].endMs > entry.startMs) {\n overlapping = true\n break\n }\n }\n positioned.push({event: entry.event, startMs: entry.startMs, endMs: entry.endMs, rowIndex, overlapping})\n })\n\n const sweep: Array<{time: number; delta: number}> = []\n rowEvents.forEach((entry) => {\n sweep.push({time: entry.startMs, delta: 1})\n sweep.push({time: entry.endMs, delta: -1})\n })\n sweep.sort((left, right) => left.time - right.time || left.delta - right.delta)\n\n let active = 0\n let bandStart: number | null = null\n let bandCount = 0\n sweep.forEach((point) => {\n const previous = active\n active += point.delta\n if (previous < 2 && active >= 2) {\n bandStart = point.time\n bandCount = active\n } else if (previous >= 2 && active >= 2) {\n bandCount = Math.max(bandCount, active)\n } else if (previous >= 2 && active < 2 && bandStart !== null) {\n bands.push({rowIndex, startMs: bandStart, endMs: point.time, count: bandCount})\n bandStart = null\n bandCount = 0\n }\n })\n })\n\n return {positioned, bands}\n}\n\nexport function findOutOfViewConflicts(\n bands: OverlapBand[],\n rangeStartMs: number,\n rangeEndMs: number\n): {before: OutOfViewConflict | null; after: OutOfViewConflict | null} {\n let before: OutOfViewConflict | null = null\n let after: OutOfViewConflict | null = null\n\n bands.forEach((band) => {\n if (band.endMs <= rangeStartMs) {\n if (!before || band.endMs > before.targetMs) {\n before = {\n direction: 'before',\n targetMs: band.startMs,\n daysAway: Math.floor((rangeStartMs - band.endMs) / MS_PER_DAY) + 1,\n }\n }\n } else if (band.startMs >= rangeEndMs) {\n if (!after || band.startMs < after.targetMs) {\n after = {\n direction: 'after',\n targetMs: band.startMs,\n daysAway: Math.floor((band.startMs - rangeEndMs) / MS_PER_DAY) + 1,\n }\n }\n }\n })\n\n return {before, after}\n}\n\nexport function buildTicks(rangeStartMs: number, rangeEndMs: number, pxPerHour: number) {\n const targetSpacingPx = 96\n const candidatesMinutes = [5, 10, 15, 30, 60, 120, 180, 240, 360, 720, 1440]\n const minutesPerPx = 60 / pxPerHour\n const minTickMinutes = targetSpacingPx * minutesPerPx\n const tickMinutes =\n candidatesMinutes.find((value) => value >= minTickMinutes) ?? candidatesMinutes[candidatesMinutes.length - 1]\n const tickStepMs = tickMinutes * MS_PER_MINUTE\n const firstTick = Math.ceil(rangeStartMs / tickStepMs) * tickStepMs\n const result: Array<{time: number; major: boolean; isDayBoundary: boolean}> = []\n for (let t = firstTick; t <= rangeEndMs; t += tickStepMs) {\n const date = new Date(t)\n const isDayBoundary = date.getHours() === 0 && date.getMinutes() === 0\n const major = isDayBoundary || tickMinutes >= 60\n result.push({time: t, major, isDayBoundary})\n }\n return result\n}\n\nexport function buildWorkdayBands(\n workdayMinutesStart: number | null,\n workdayMinutesEnd: number | null,\n rangeStartMs: number,\n rangeEndMs: number\n) {\n if (workdayMinutesStart === null || workdayMinutesEnd === null || workdayMinutesEnd <= workdayMinutesStart) {\n return [] as Array<{startMs: number; endMs: number}>\n }\n const dayStart = startOfDay(new Date(rangeStartMs))\n const result: Array<{startMs: number; endMs: number}> = []\n for (let day = dayStart.getTime() - MS_PER_DAY; day <= rangeEndMs + MS_PER_DAY; day += MS_PER_DAY) {\n const startMs = day + workdayMinutesStart * MS_PER_MINUTE\n const endMs = day + workdayMinutesEnd * MS_PER_MINUTE\n if (endMs < rangeStartMs || startMs > rangeEndMs) {\n continue\n }\n result.push({startMs, endMs})\n }\n return result\n}\n","import {useMemo} from 'react'\nimport {cn} from '../../../utils/cn'\nimport {MButton} from '../../controls'\nimport {MChevronLeftIcon, MChevronRightIcon} from '../../../icons'\nimport {addDays, formatShortWeekday, isSameDay, startOfDay} from './MTimelineCalendar.helpers'\n\ninterface DayStripProps {\n centerAt: Date\n now: Date\n locale: string\n days: number\n conflictDayKeys: Set<string>\n onSelectDay: (day: Date) => void\n onStep: (direction: -1 | 1) => void\n}\n\nexport function DayStrip({centerAt, now, locale, days, conflictDayKeys, onSelectDay, onStep}: DayStripProps) {\n const dates = useMemo(() => {\n const centerDay = startOfDay(centerAt)\n const result: Date[] = []\n for (let offset = -days; offset <= days; offset += 1) {\n result.push(addDays(centerDay, offset))\n }\n return result\n }, [centerAt, days])\n\n return (\n <div className={'mtimeline-day-strip'} role={'tablist'} aria-label={'Day navigator'}>\n <MButton\n size={'sm'}\n variant={'outlined'}\n color={'neutral'}\n iconOnly\n aria-label={'Previous day'}\n className={'mtimeline-day-arrow'}\n startIcon={<MChevronLeftIcon size={16} />}\n onClick={() => onStep(-1)}\n />\n <div className={'mtimeline-day-strip-track'}>\n {dates.map((day) => {\n const isActive = isSameDay(day, centerAt)\n const isToday = isSameDay(day, now)\n const dayKey = day.toISOString().slice(0, 10)\n const hasConflict = conflictDayKeys.has(dayKey)\n return (\n <button\n key={dayKey}\n type={'button'}\n role={'tab'}\n aria-selected={isActive}\n className={cn(\n 'mtimeline-day-cell',\n isActive && 'active',\n isToday && 'today',\n hasConflict && 'has-conflict'\n )}\n onClick={() => onSelectDay(day)}\n >\n <span className={'mtimeline-day-cell-weekday'}>{formatShortWeekday(day, locale)}</span>\n <span className={'mtimeline-day-cell-number'}>{day.getDate()}</span>\n {hasConflict && <span className={'mtimeline-day-cell-dot'} aria-hidden={'true'} />}\n </button>\n )\n })}\n </div>\n <MButton\n size={'sm'}\n variant={'outlined'}\n color={'neutral'}\n iconOnly\n aria-label={'Next day'}\n className={'mtimeline-day-arrow'}\n startIcon={<MChevronRightIcon size={16} />}\n onClick={() => onStep(1)}\n />\n </div>\n )\n}\n","import type {CSSProperties, ReactNode} from 'react'\nimport {MAvatar, MAvatarStack} from '../../media'\nimport {MCard, MCardBody} from '../../cards'\nimport {MButton} from '../../controls'\nimport {MBadge} from '../../feedback'\nimport {MDropdownItem, MDropdownMenu} from '../../overlays'\nimport {MText, MHeading} from '../../typography'\nimport {MEllipsisVerticalIcon, MWarningIcon} from '../../../icons'\nimport {formatFullDate, formatRangeLabel} from './MTimelineCalendar.helpers'\nimport type {\n MTimelineCalendarEvent,\n MTimelineCalendarEventMenuItem,\n MTimelineCalendarPerson,\n} from './MTimelineCalendar.types'\n\ninterface EventPopoverContentProps {\n event: MTimelineCalendarEvent\n locale: string\n startMs: number\n endMs: number\n rowLabel: string\n overlapping: boolean\n eventActionsLabel: string\n menuItems: MTimelineCalendarEventMenuItem[]\n renderDetails?: (event: MTimelineCalendarEvent) => ReactNode\n onLeaderClick?: (person: MTimelineCalendarPerson, event: MTimelineCalendarEvent) => void\n onParticipantClick?: (person: MTimelineCalendarPerson, event: MTimelineCalendarEvent) => void\n onClose: () => void\n}\n\nexport function EventPopoverContent({\n event,\n locale,\n startMs,\n endMs,\n rowLabel,\n overlapping,\n eventActionsLabel,\n menuItems,\n renderDetails,\n onLeaderClick,\n onParticipantClick,\n onClose,\n}: EventPopoverContentProps) {\n const start = new Date(startMs)\n const end = new Date(endMs)\n const leader = event.leader\n const leaderClickable = Boolean(onLeaderClick && leader)\n const leaderInner = leader ? (\n <>\n <MAvatar\n size={'md'}\n src={leader.avatar}\n name={leader.name}\n backgroundColor={leader.color}\n />\n <div className={'mtimeline-popover-leader-text'}>\n <MText size={'sm'} weight={'semibold'}>\n {leader.name}\n </MText>\n {leader.role ? (\n <MText size={'xs'} tone={'muted'}>\n {leader.role}\n </MText>\n ) : null}\n </div>\n </>\n ) : null\n\n return (\n <MCard className={'mtimeline-popover-card'} outlined={false}>\n <MCardBody>\n <div className={'mtimeline-popover'}>\n <div className={'mtimeline-popover-head'}>\n <div\n className={'mtimeline-popover-accent'}\n style={\n event.color\n ? ({['--mineral-timeline-event-color' as string]: event.color} as CSSProperties)\n : undefined\n }\n aria-hidden={'true'}\n />\n <div className={'mtimeline-popover-titles'}>\n <MHeading level={5}>{event.title ?? formatRangeLabel(start, end, locale)}</MHeading>\n <MText size={'xs'} tone={'muted'}>\n {rowLabel}\n </MText>\n </div>\n {menuItems.length > 0 && (\n <MDropdownMenu\n placement={'bottom-end'}\n trigger={\n <MButton\n size={'sm'}\n variant={'ghost'}\n color={'neutral'}\n iconOnly\n aria-label={eventActionsLabel}\n startIcon={<MEllipsisVerticalIcon />}\n />\n }\n >\n {menuItems.map((item) =>\n item.href ? (\n <MDropdownItem\n key={item.id}\n icon={item.icon}\n label={item.label}\n href={item.href}\n color={item.color}\n disabled={item.disabled}\n />\n ) : (\n <MDropdownItem\n key={item.id}\n icon={item.icon}\n label={item.label}\n color={item.color}\n disabled={item.disabled}\n onClick={() => {\n item.onSelect?.(event)\n onClose()\n }}\n />\n )\n )}\n </MDropdownMenu>\n )}\n </div>\n\n <div className={'mtimeline-popover-meta'}>\n <MText size={'sm'}>\n {formatFullDate(start, locale)}\n {' · '}\n {formatRangeLabel(start, end, locale)}\n </MText>\n {overlapping && (\n <MBadge color={'warning'} size={'sm'}>\n <MWarningIcon size={12} /> Conflict\n </MBadge>\n )}\n </div>\n\n {event.location && (\n <MText size={'sm'} tone={'muted'}>\n {event.location}\n </MText>\n )}\n\n {event.description && (\n <MText size={'sm'} tone={'muted'}>\n {event.description}\n </MText>\n )}\n\n {leader &&\n (leaderClickable ? (\n <button\n type={'button'}\n className={'mtimeline-popover-leader interactive'}\n onClick={() => {\n onLeaderClick?.(leader, event)\n onClose()\n }}\n >\n {leaderInner}\n </button>\n ) : (\n <div className={'mtimeline-popover-leader'}>{leaderInner}</div>\n ))}\n\n {event.participants && event.participants.length > 0 && (\n <div className={'mtimeline-popover-participants'}>\n <MText size={'xs'} tone={'muted'} weight={'semibold'}>\n Participants ({event.participants.length}\n {event.capacity ? ` / ${event.capacity}` : null})\n </MText>\n <MAvatarStack\n items={event.participants.map((person, index) => ({\n id: person.id ?? `${person.name}-${index}`,\n name: person.name,\n description: person.role,\n avatar: person.avatar,\n backgroundColor: person.color,\n onClick: onParticipantClick\n ? () => {\n onParticipantClick(person, event)\n onClose()\n }\n : undefined,\n }))}\n max={event.capacity ?? 8}\n size={'sm'}\n />\n </div>\n )}\n\n {renderDetails ? <div className={'mtimeline-popover-extra'}>{renderDetails(event)}</div> : null}\n </div>\n </MCardBody>\n </MCard>\n )\n}\n","import {useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState} from 'react'\nimport type {CSSProperties, KeyboardEvent as ReactKeyboardEvent, PointerEvent as ReactPointerEvent, RefObject} from 'react'\nimport {cn} from '../../../utils/cn'\nimport {useDocumentLocale} from '../../../utils/locale'\nimport {MAvatar} from '../../media'\nimport {MButton} from '../../controls'\nimport {MPopover} from '../../primitives'\nimport {MText} from '../../typography'\nimport {MChevronLeftIcon, MChevronRightIcon, MWarningIcon} from '../../../icons'\nimport {DayStrip} from './DayStrip'\nimport {EventPopoverContent} from './EventPopover'\nimport {\n DAY_STRIP_DAYS,\n DAY_STRIP_HEIGHT,\n MIN_VIEWPORT_WIDTH,\n MS_PER_DAY,\n MS_PER_HOUR,\n MS_PER_MINUTE,\n buildTicks,\n buildWorkdayBands,\n detectOverlapsAndBands,\n findOutOfViewConflicts,\n formatDayLabel,\n formatRangeLabel,\n getInitialViewportWidth,\n parseHmToMinutes,\n startOfDay,\n addDays,\n} from './MTimelineCalendar.helpers'\nimport type {\n MTimelineCalendarProps,\n MTimelineCalendarRange,\n} from './MTimelineCalendar.types'\nimport './MTimelineCalendar.css'\n\nexport function MTimelineCalendar({\n rows,\n events,\n centerAt,\n defaultCenterAt,\n pixelsPerHour = 96,\n rowLabelWidth = 168,\n rowHeight = 56,\n headerHeight = 56,\n dayStripHeight = DAY_STRIP_HEIGHT,\n dayStripDays = DAY_STRIP_DAYS,\n workdayStart,\n workdayEnd,\n showNowLine = true,\n showDayStrip = true,\n overlapHighlight = true,\n panKeyStepMinutes = 30,\n locale: localeOverride,\n emptyStateText,\n height,\n fullHeight = true,\n eventMenuItems,\n renderEventDetails,\n eventActionsLabel = 'Event actions',\n onEventClick,\n onEventOpen,\n onLeaderClick,\n onParticipantClick,\n onCenterChange,\n onRangeChange,\n rangeBufferRatio = 1,\n rangeChangeDebounceMs = 200,\n loading,\n className,\n style,\n ...rest\n}: MTimelineCalendarProps) {\n const locale = useDocumentLocale(localeOverride)\n const isCenterControlled = centerAt !== undefined\n const [internalCenter, setInternalCenter] = useState<Date>(() => defaultCenterAt ?? new Date())\n const [viewportWidth, setViewportWidth] = useState<number>(() => getInitialViewportWidth())\n const [activeEventId, setActiveEventId] = useState<string | null>(null)\n const [now, setNow] = useState<Date>(() => new Date())\n\n const viewportRef = useRef<HTMLDivElement | null>(null)\n const eventButtonRefs = useRef<Map<string, HTMLButtonElement>>(new Map())\n const dragStateRef = useRef<{pointerId: number; startX: number; centerAtMs: number; moved: boolean} | null>(null)\n const tickerRef = useRef<number | null>(null)\n const rangeChangeTimerRef = useRef<number | null>(null)\n const lastEmittedRangeRef = useRef<{startMs: number; endMs: number} | null>(null)\n\n useEffect(() => {\n if (isCenterControlled && centerAt) {\n setInternalCenter(centerAt)\n }\n }, [isCenterControlled, centerAt])\n\n useLayoutEffect(() => {\n const node = viewportRef.current\n if (!node) {\n return\n }\n const measure = () => {\n const rect = node.getBoundingClientRect()\n if (rect.width > 0) {\n setViewportWidth(rect.width)\n }\n }\n measure()\n let rafId: number | null = null\n if (typeof window !== 'undefined') {\n rafId = window.requestAnimationFrame(measure)\n }\n let observer: ResizeObserver | null = null\n if (typeof ResizeObserver !== 'undefined') {\n observer = new ResizeObserver((entries) => {\n const entry = entries[0]\n if (entry && entry.contentRect.width > 0) {\n setViewportWidth(entry.contentRect.width)\n }\n })\n observer.observe(node)\n }\n return () => {\n if (rafId !== null && typeof window !== 'undefined') {\n window.cancelAnimationFrame(rafId)\n }\n observer?.disconnect()\n }\n }, [])\n\n useEffect(() => {\n if (!showNowLine) {\n return\n }\n const tick = () => setNow(new Date())\n tick()\n tickerRef.current = window.setInterval(tick, 30_000)\n return () => {\n if (tickerRef.current !== null) {\n window.clearInterval(tickerRef.current)\n }\n }\n }, [showNowLine])\n\n const resolvedCenter = isCenterControlled ? (centerAt ?? internalCenter) : internalCenter\n const pxPerHour = pixelsPerHour\n const pxPerMs = pxPerHour / MS_PER_HOUR\n\n const updateCenter = useCallback(\n (next: Date) => {\n if (!isCenterControlled) {\n setInternalCenter(next)\n }\n onCenterChange?.(next)\n },\n [isCenterControlled, onCenterChange]\n )\n\n const totalRowsHeight = rows.length * rowHeight\n const effectiveViewportWidth = Math.max(viewportWidth, MIN_VIEWPORT_WIDTH)\n const halfWidthMs = (effectiveViewportWidth / 2) / pxPerMs\n const rangeStartMs = resolvedCenter.getTime() - halfWidthMs\n const rangeEndMs = resolvedCenter.getTime() + halfWidthMs\n const bufferMs = halfWidthMs * 2 * Math.max(0, rangeBufferRatio)\n\n const {positioned, bands} = useMemo(\n () => detectOverlapsAndBands(rows.map((row) => row.id), events),\n [rows, events]\n )\n\n const visibleEvents = useMemo(\n () => positioned.filter((entry) => entry.endMs > rangeStartMs && entry.startMs < rangeEndMs),\n [positioned, rangeStartMs, rangeEndMs]\n )\n\n const visibleBands = useMemo(\n () =>\n overlapHighlight\n ? bands.filter((band) => band.endMs > rangeStartMs && band.startMs < rangeEndMs)\n : [],\n [bands, overlapHighlight, rangeStartMs, rangeEndMs]\n )\n\n const outOfViewConflicts = useMemo(\n () => findOutOfViewConflicts(bands, rangeStartMs, rangeEndMs),\n [bands, rangeStartMs, rangeEndMs]\n )\n\n const conflictDayKeys = useMemo(() => {\n const set = new Set<string>()\n bands.forEach((band) => {\n const day = startOfDay(new Date(band.startMs))\n set.add(day.toISOString().slice(0, 10))\n })\n return set\n }, [bands])\n\n const ticks = useMemo(\n () => buildTicks(rangeStartMs, rangeEndMs, pxPerHour),\n [rangeStartMs, rangeEndMs, pxPerHour]\n )\n\n const workdayBands = useMemo(\n () =>\n buildWorkdayBands(\n parseHmToMinutes(workdayStart),\n parseHmToMinutes(workdayEnd),\n rangeStartMs,\n rangeEndMs\n ),\n [workdayStart, workdayEnd, rangeStartMs, rangeEndMs]\n )\n\n const offsetXForMs = (ms: number) => (ms - rangeStartMs) * pxPerMs\n\n useEffect(() => {\n if (!onRangeChange) {\n return\n }\n const startMs = Math.round(rangeStartMs)\n const endMs = Math.round(rangeEndMs)\n const last = lastEmittedRangeRef.current\n if (last && last.startMs === startMs && last.endMs === endMs) {\n return\n }\n if (rangeChangeTimerRef.current !== null) {\n window.clearTimeout(rangeChangeTimerRef.current)\n }\n rangeChangeTimerRef.current = window.setTimeout(() => {\n const range: MTimelineCalendarRange = {\n visibleStart: new Date(rangeStartMs),\n visibleEnd: new Date(rangeEndMs),\n bufferStart: new Date(rangeStartMs - bufferMs),\n bufferEnd: new Date(rangeEndMs + bufferMs),\n pixelsPerHour: pxPerHour,\n }\n lastEmittedRangeRef.current = {startMs, endMs}\n onRangeChange(range)\n }, Math.max(0, rangeChangeDebounceMs))\n return () => {\n if (rangeChangeTimerRef.current !== null) {\n window.clearTimeout(rangeChangeTimerRef.current)\n rangeChangeTimerRef.current = null\n }\n }\n }, [rangeStartMs, rangeEndMs, bufferMs, pxPerHour, onRangeChange, rangeChangeDebounceMs])\n\n const goToDay = useCallback(\n (day: Date) => {\n const next = new Date(day)\n next.setHours(12, 0, 0, 0)\n updateCenter(next)\n },\n [updateCenter]\n )\n\n const stepDay = useCallback(\n (direction: -1 | 1) => updateCenter(addDays(resolvedCenter, direction)),\n [resolvedCenter, updateCenter]\n )\n\n const goToConflict = useCallback(\n (targetMs: number) => {\n const day = startOfDay(new Date(targetMs))\n day.setHours(12, 0, 0, 0)\n updateCenter(day)\n },\n [updateCenter]\n )\n\n const handlePointerDown = (pointerEvent: ReactPointerEvent<HTMLDivElement>) => {\n if (pointerEvent.button !== 0 && pointerEvent.pointerType === 'mouse') {\n return\n }\n const target = pointerEvent.target as HTMLElement\n if (\n target.closest('.mtimeline-event') ||\n target.closest('.mtimeline-conflict-marker') ||\n target.closest('.mtimeline-loading')\n ) {\n return\n }\n const node = viewportRef.current\n if (!node) {\n return\n }\n node.setPointerCapture(pointerEvent.pointerId)\n dragStateRef.current = {\n pointerId: pointerEvent.pointerId,\n startX: pointerEvent.clientX,\n centerAtMs: resolvedCenter.getTime(),\n moved: false,\n }\n }\n\n const handlePointerMove = (pointerEvent: ReactPointerEvent<HTMLDivElement>) => {\n const dragState = dragStateRef.current\n if (!dragState || dragState.pointerId !== pointerEvent.pointerId) {\n return\n }\n const deltaPx = pointerEvent.clientX - dragState.startX\n if (Math.abs(deltaPx) > 3) {\n dragState.moved = true\n }\n const deltaMs = deltaPx / pxPerMs\n updateCenter(new Date(dragState.centerAtMs - deltaMs))\n }\n\n const handlePointerUp = (pointerEvent: ReactPointerEvent<HTMLDivElement>) => {\n const dragState = dragStateRef.current\n if (dragState && dragState.pointerId === pointerEvent.pointerId) {\n const node = viewportRef.current\n if (node && node.hasPointerCapture(pointerEvent.pointerId)) {\n node.releasePointerCapture(pointerEvent.pointerId)\n }\n dragStateRef.current = null\n }\n }\n\n const handleKeyDown = (keyEvent: ReactKeyboardEvent<HTMLDivElement>) => {\n if (keyEvent.key === 'ArrowLeft' || keyEvent.key === 'ArrowRight') {\n keyEvent.preventDefault()\n const direction = keyEvent.key === 'ArrowLeft' ? -1 : 1\n if (keyEvent.shiftKey) {\n stepDay(direction as -1 | 1)\n return\n }\n const stepMs = panKeyStepMinutes * MS_PER_MINUTE\n updateCenter(new Date(resolvedCenter.getTime() + direction * stepMs))\n } else if (keyEvent.key === 'Home') {\n keyEvent.preventDefault()\n updateCenter(new Date())\n }\n }\n\n const containerStyle: CSSProperties = {\n ...style,\n ['--mineral-timeline-row-height' as string]: `${rowHeight}px`,\n ['--mineral-timeline-row-label-width' as string]: `${rowLabelWidth}px`,\n ['--mineral-timeline-header-height' as string]: `${headerHeight}px`,\n ['--mineral-timeline-day-strip-height' as string]: `${dayStripHeight}px`,\n }\n if (height !== undefined) {\n containerStyle.height = typeof height === 'number' ? `${height}px` : height\n }\n\n const isEmpty = events.length === 0\n const activeEventEntry = activeEventId ? positioned.find((entry) => entry.event.id === activeEventId) ?? null : null\n const activeAnchorRef: RefObject<HTMLElement | null> = {\n get current() {\n return activeEventId ? eventButtonRefs.current.get(activeEventId) ?? null : null\n },\n set current(_value: HTMLElement | null) {\n // anchor read from the live ref map; setter is a noop\n },\n }\n const activeRowLabel = activeEventEntry ? rows[activeEventEntry.rowIndex]?.label ?? '' : ''\n const activeMenuItems = activeEventEntry && eventMenuItems ? eventMenuItems(activeEventEntry.event) : []\n\n return (\n <div className={cn('mtimeline', fullHeight && 'full-height', className)} style={containerStyle} {...rest}>\n {showDayStrip && (\n <DayStrip\n centerAt={resolvedCenter}\n now={now}\n locale={locale}\n days={dayStripDays}\n conflictDayKeys={conflictDayKeys}\n onSelectDay={goToDay}\n onStep={stepDay}\n />\n )}\n\n <div className={'mtimeline-body'}>\n <div className={'mtimeline-rail'}>\n <div className={'mtimeline-rail-header'} aria-hidden={'true'}>\n <MText size={'xs'} tone={'muted'}>\n {formatDayLabel(resolvedCenter, locale)}\n </MText>\n </div>\n <div className={'mtimeline-rail-rows'} style={{height: `${totalRowsHeight}px`}}>\n {rows.map((row) => (\n <div key={row.id} className={'mtimeline-rail-row'} style={{height: `${rowHeight}px`}}>\n {row.avatar || row.icon ? (\n <span\n className={'mtimeline-rail-avatar'}\n style={\n row.color\n ? ({['--mineral-timeline-row-accent' as string]: row.color} as CSSProperties)\n : undefined\n }\n >\n {row.avatar ? <MAvatar size={'sm'} src={row.avatar} name={row.label} /> : row.icon}\n </span>\n ) : null}\n <span className={'mtimeline-rail-text'}>\n <MText size={'sm'} weight={'semibold'}>\n {row.label}\n </MText>\n {row.sublabel ? (\n <MText size={'xs'} tone={'muted'}>\n {row.sublabel}\n </MText>\n ) : null}\n </span>\n </div>\n ))}\n </div>\n </div>\n\n <div\n ref={viewportRef}\n className={'mtimeline-viewport'}\n role={'region'}\n aria-label={'Timeline'}\n tabIndex={0}\n data-mtimeline-viewport-width={Math.round(viewportWidth)}\n data-mtimeline-tick-count={ticks.length}\n data-mtimeline-event-count={visibleEvents.length}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n onPointerCancel={handlePointerUp}\n onKeyDown={handleKeyDown}\n >\n <div className={'mtimeline-header'}>\n {workdayBands.map((band, index) => (\n <span\n key={`workday-${index}`}\n className={'mtimeline-workday-marker'}\n style={{\n left: `${offsetXForMs(band.startMs)}px`,\n width: `${(band.endMs - band.startMs) * pxPerMs}px`,\n }}\n aria-hidden={'true'}\n />\n ))}\n {ticks.map((tick) => {\n const date = new Date(tick.time)\n return (\n <div\n key={tick.time}\n className={cn(\n 'mtimeline-tick',\n tick.major && 'major',\n tick.isDayBoundary && 'day-boundary'\n )}\n style={{left: `${offsetXForMs(tick.time)}px`}}\n >\n <span className={'mtimeline-tick-label'}>\n {tick.isDayBoundary\n ? formatDayLabel(date, locale)\n : new Intl.DateTimeFormat(locale, {\n hour: '2-digit',\n minute: '2-digit',\n hour12: false,\n }).format(date)}\n </span>\n </div>\n )\n })}\n </div>\n\n <div className={'mtimeline-canvas'} style={{height: `${totalRowsHeight}px`}}>\n {workdayBands.map((band, index) => (\n <span\n key={`workday-canvas-${index}`}\n className={'mtimeline-workday-band'}\n style={{\n left: `${offsetXForMs(band.startMs)}px`,\n width: `${(band.endMs - band.startMs) * pxPerMs}px`,\n }}\n aria-hidden={'true'}\n />\n ))}\n\n {ticks.map((tick) => (\n <span\n key={`gridline-${tick.time}`}\n className={cn(\n 'mtimeline-gridline',\n tick.major && 'major',\n tick.isDayBoundary && 'day-boundary'\n )}\n style={{left: `${offsetXForMs(tick.time)}px`}}\n aria-hidden={'true'}\n />\n ))}\n\n {rows.map((_, index) => (\n <span\n key={`row-line-${index}`}\n className={'mtimeline-row-line'}\n style={{top: `${(index + 1) * rowHeight}px`}}\n aria-hidden={'true'}\n />\n ))}\n\n {visibleEvents.map((entry) => {\n const left = offsetXForMs(entry.startMs)\n const width = Math.max(2, (entry.endMs - entry.startMs) * pxPerMs)\n const top = entry.rowIndex * rowHeight + 6\n const eventHeight = rowHeight - 12\n const accentColor = entry.event.color\n const isActive = activeEventId === entry.event.id\n return (\n <button\n key={entry.event.id}\n ref={(node) => {\n if (node) {\n eventButtonRefs.current.set(entry.event.id, node)\n } else {\n eventButtonRefs.current.delete(entry.event.id)\n }\n }}\n type={'button'}\n className={cn(\n 'mtimeline-event',\n entry.overlapping && 'overlapping',\n isActive && 'active'\n )}\n style={{\n left: `${left}px`,\n width: `${width}px`,\n top: `${top}px`,\n height: `${eventHeight}px`,\n ...(accentColor\n ? ({['--mineral-timeline-event-color' as string]: accentColor} as CSSProperties)\n : null),\n }}\n onClick={(clickEvent) => {\n if (dragStateRef.current?.moved) {\n return\n }\n clickEvent.stopPropagation()\n entry.event.onClick?.(entry.event)\n onEventClick?.(entry.event)\n setActiveEventId(entry.event.id)\n onEventOpen?.(entry.event)\n }}\n title={\n entry.event.title\n ? `${entry.event.title} · ${formatRangeLabel(\n new Date(entry.startMs),\n new Date(entry.endMs),\n locale\n )}`\n : formatRangeLabel(new Date(entry.startMs), new Date(entry.endMs), locale)\n }\n >\n <span className={'mtimeline-event-time'}>\n {formatRangeLabel(new Date(entry.startMs), new Date(entry.endMs), locale)}\n </span>\n {entry.event.title ? (\n <span className={'mtimeline-event-title'}>{entry.event.title}</span>\n ) : null}\n {entry.event.icon ? (\n <span className={'mtimeline-event-icon'}>{entry.event.icon}</span>\n ) : null}\n </button>\n )\n })}\n\n {visibleBands.map((band, index) => (\n <span\n key={`overlap-${index}`}\n className={'mtimeline-overlap'}\n role={'note'}\n style={{\n left: `${offsetXForMs(band.startMs)}px`,\n width: `${Math.max(2, (band.endMs - band.startMs) * pxPerMs)}px`,\n top: `${band.rowIndex * rowHeight}px`,\n height: `${rowHeight}px`,\n }}\n title={`${band.count} overlapping events`}\n >\n <span className={'mtimeline-overlap-icon'} aria-hidden={'true'}>\n <MWarningIcon size={12} />\n </span>\n </span>\n ))}\n\n {showNowLine ? (\n <span\n className={'mtimeline-now'}\n style={{left: `${offsetXForMs(now.getTime())}px`}}\n aria-hidden={'true'}\n />\n ) : null}\n </div>\n\n {(() => {\n const before = outOfViewConflicts.before\n if (!before) return null\n return (\n <MButton\n size={'sm'}\n variant={'outlined'}\n color={'warning'}\n shape={'circle'}\n className={'mtimeline-conflict-marker before'}\n onPointerDown={(e) => e.stopPropagation()}\n onClick={(e) => {\n e.stopPropagation()\n goToConflict(before.targetMs)\n }}\n startIcon={<MChevronLeftIcon size={14} />}\n title={`Conflict ${before.daysAway} day(s) earlier`}\n >\n <MWarningIcon size={12} />\n <span className={'mtimeline-conflict-marker-label'}>{before.daysAway}d</span>\n </MButton>\n )\n })()}\n\n {(() => {\n const after = outOfViewConflicts.after\n if (!after) return null\n return (\n <MButton\n size={'sm'}\n variant={'outlined'}\n color={'warning'}\n shape={'circle'}\n className={'mtimeline-conflict-marker after'}\n onPointerDown={(e) => e.stopPropagation()}\n onClick={(e) => {\n e.stopPropagation()\n goToConflict(after.targetMs)\n }}\n endIcon={<MChevronRightIcon size={14} />}\n title={`Conflict in ${after.daysAway} day(s)`}\n >\n <span className={'mtimeline-conflict-marker-label'}>{after.daysAway}d</span>\n <MWarningIcon size={12} />\n </MButton>\n )\n })()}\n\n {isEmpty ? (\n <div className={'mtimeline-empty'}>\n <MText size={'sm'} tone={'muted'}>\n {emptyStateText ?? 'No events to show'}\n </MText>\n </div>\n ) : null}\n\n {loading ? (\n <div className={'mtimeline-loading'} aria-live={'polite'}>\n <span className={'mtimeline-loading-dot'} aria-hidden={'true'} />\n <MText size={'xs'} tone={'muted'}>\n Loading…\n </MText>\n </div>\n ) : null}\n </div>\n </div>\n\n <MPopover\n open={activeEventEntry !== null}\n anchorRef={activeAnchorRef}\n onClose={() => setActiveEventId(null)}\n placement={'bottom-start'}\n >\n {activeEventEntry && (\n <EventPopoverContent\n event={activeEventEntry.event}\n locale={locale}\n startMs={activeEventEntry.startMs}\n endMs={activeEventEntry.endMs}\n rowLabel={activeRowLabel}\n overlapping={activeEventEntry.overlapping}\n eventActionsLabel={eventActionsLabel}\n menuItems={activeMenuItems}\n renderDetails={renderEventDetails}\n onLeaderClick={onLeaderClick}\n onParticipantClick={onParticipantClick}\n onClose={() => setActiveEventId(null)}\n />\n )}\n </MPopover>\n </div>\n )\n}\n","import {useMemo, useState} from 'react'\nimport type {ReactNode} from 'react'\nimport type {\n MFileManagerActionEvent,\n MFileManagerLocale,\n MFileManagerMoveEvent,\n MFileManagerNode,\n MFileManagerProps,\n MFileManagerSelectionEvent,\n MFileManagerView,\n} from './MFileManager.types'\nimport {MButton} from '../../controls'\nimport {MBadge} from '../../feedback'\nimport {MInputSearch} from '../../inputs'\nimport {MInline, MStack} from '../../layout'\nimport {MDropdownItem, MDropdownMenu} from '../../overlays'\nimport {MText} from '../../typography'\nimport {MTreeView} from '../MTreeView'\nimport {\n MArrowRightIcon,\n MDownloadIcon,\n MEditIcon,\n MEllipsisVerticalIcon,\n MFileCodeIcon,\n MFileCsvIcon,\n MFileCssIcon,\n MFileExeIcon,\n MFileGifIcon,\n MFileHtmlIcon,\n MFileIcon,\n MFileImageIcon,\n MFileJpgIcon,\n MFileJsIcon,\n MFileJsonIcon,\n MFileMdIcon,\n MFileMp3Icon,\n MFileMp4Icon,\n MFileOdtIcon,\n MFilePdfIcon,\n MFilePhpIcon,\n MFilePngIcon,\n MFilePptIcon,\n MFileRarIcon,\n MFileSvgIcon,\n MFileTextIcon,\n MFileTsIcon,\n MFileTsxIcon,\n MFileTxtIcon,\n MFileWebpIcon,\n MFileXlsIcon,\n MFileXmlIcon,\n MFileZipIcon,\n MFolderPlusIcon,\n MFolderIcon,\n MFolderOpenIcon,\n MHomeIcon,\n MTrashIcon,\n} from '../../../icons'\nimport {useMFileManagerTexts} from '../../../i18n/frameworkTexts'\nimport {cn} from '../../../utils/cn'\nimport {useDocumentLocale} from '../../../utils/locale'\nimport './MFileManager.css'\n\ninterface FileManagerMenuAction {\n id: string\n label: ReactNode\n icon?: ReactNode\n color?: 'primary' | 'error'\n}\n\nconst fileTypeMap: Record<string, ReactNode> = {\n pdf: <MFilePdfIcon />,\n ts: <MFileTsIcon />,\n tsx: <MFileTsxIcon />,\n js: <MFileJsIcon />,\n jsx: <MFileCodeIcon />,\n css: <MFileCssIcon />,\n scss: <MFileCssIcon />,\n html: <MFileHtmlIcon />,\n json: <MFileJsonIcon />,\n md: <MFileMdIcon />,\n txt: <MFileTxtIcon />,\n csv: <MFileCsvIcon />,\n zip: <MFileZipIcon />,\n rar: <MFileRarIcon />,\n svg: <MFileSvgIcon />,\n png: <MFilePngIcon />,\n jpg: <MFileJpgIcon />,\n jpeg: <MFileImageIcon />,\n gif: <MFileGifIcon />,\n webp: <MFileWebpIcon />,\n php: <MFilePhpIcon />,\n xml: <MFileXmlIcon />,\n xls: <MFileXlsIcon />,\n ppt: <MFilePptIcon />,\n odt: <MFileOdtIcon />,\n exe: <MFileExeIcon />,\n mp3: <MFileMp3Icon />,\n mp4: <MFileMp4Icon />,\n}\n\nfunction getFileExtension(label: string): string | null {\n const dot = label.lastIndexOf('.')\n if (dot < 1) return null\n return label.slice(dot + 1).toLowerCase()\n}\n\nfunction isFolderNode(node: MFileManagerNode | null | undefined) {\n return node?.kind === 'folder' || Boolean(node?.children?.length)\n}\n\nfunction getFileIcon(label: string): ReactNode {\n const ext = getFileExtension(label)\n if (!ext) return <MFileIcon />\n\n return fileTypeMap[ext] ?? <MFileTextIcon />\n}\n\nfunction getNodeIcon(node: MFileManagerNode, isExpanded = false): ReactNode {\n if (node.icon) return node.icon\n if (isFolderNode(node)) return isExpanded ? <MFolderOpenIcon /> : <MFolderIcon />\n return getFileIcon(node.label)\n}\n\nfunction formatBytes(value?: number) {\n if (!value || value < 1) return null\n\n const units = ['B', 'KB', 'MB', 'GB', 'TB']\n let current = value\n let index = 0\n\n while (current >= 1024 && index < units.length - 1) {\n current /= 1024\n index += 1\n }\n\n const digits = current >= 100 || index === 0 ? 0 : 1\n return `${current.toFixed(digits)} ${units[index]}`\n}\n\nfunction formatModifiedAt(value: Date | string | undefined, locale: MFileManagerLocale) {\n if (!value) return null\n\n const date = value instanceof Date ? value : new Date(value)\n if (Number.isNaN(date.getTime())) return null\n\n return new Intl.DateTimeFormat(locale, {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n }).format(date)\n}\n\nfunction buildLookup(items: MFileManagerNode[]) {\n const nodeMap = new Map<string, MFileManagerNode>()\n const parentMap = new Map<string, string | null>()\n\n function walk(nodes: MFileManagerNode[], parentId: string | null) {\n for (const node of nodes) {\n nodeMap.set(node.id, node)\n parentMap.set(node.id, parentId)\n\n if (node.children?.length) {\n walk(node.children, node.id)\n }\n }\n }\n\n walk(items, null)\n\n return {nodeMap, parentMap}\n}\n\nfunction buildFolderTree(items: MFileManagerNode[]): MFileManagerNode[] {\n return items.flatMap((node) => {\n if (!isFolderNode(node)) return []\n\n return [\n {\n ...node,\n kind: 'folder',\n children: buildFolderTree(node.children ?? []),\n },\n ]\n })\n}\n\nfunction buildPath(id: string | null, nodeMap: Map<string, MFileManagerNode>, parentMap: Map<string, string | null>) {\n const path: MFileManagerNode[] = []\n let currentId = id\n\n while (currentId) {\n const node = nodeMap.get(currentId)\n if (!node) break\n path.unshift(node)\n currentId = parentMap.get(currentId) ?? null\n }\n\n return path\n}\n\nfunction resolveFolderId(\n value: string | null | undefined,\n nodeMap: Map<string, MFileManagerNode>,\n parentMap: Map<string, string | null>\n) {\n if (!value) return null\n\n const node = nodeMap.get(value)\n if (!node) return null\n if (isFolderNode(node)) return node.id\n\n return parentMap.get(node.id) ?? null\n}\n\nfunction getCurrentItems(activeFolder: MFileManagerNode | null, items: MFileManagerNode[]) {\n return activeFolder ? (activeFolder.children ?? []) : items\n}\n\nfunction makeSelectionEvent(\n id: string | null,\n nodeMap: Map<string, MFileManagerNode>,\n parentMap: Map<string, string | null>,\n activeFolderId: string | null,\n activeFolder: MFileManagerNode | null\n): MFileManagerSelectionEvent {\n const node = id ? (nodeMap.get(id) ?? null) : null\n const parentId = node ? (parentMap.get(node.id) ?? null) : null\n\n return {\n id,\n node,\n parentId,\n parentNode: parentId ? (nodeMap.get(parentId) ?? null) : null,\n activeFolderId,\n activeFolder,\n }\n}\n\nfunction getDefaultItemActions(\n node: MFileManagerNode,\n texts: ReturnType<typeof useMFileManagerTexts>\n): FileManagerMenuAction[] {\n return [\n ...(isFolderNode(node)\n ? []\n : [{id: 'download', label: texts.download, icon: <MDownloadIcon />, color: 'primary' as const}]),\n {id: 'rename', label: texts.rename, icon: <MEditIcon />},\n {id: 'move', label: texts.moveTo, icon: <MArrowRightIcon />},\n {id: 'delete', label: texts.delete, icon: <MTrashIcon />, color: 'error' as const},\n ]\n}\n\nfunction getDefaultContextMenuActions(\n node: MFileManagerNode,\n texts: ReturnType<typeof useMFileManagerTexts>\n): FileManagerMenuAction[] {\n return [\n ...(isFolderNode(node) ? [{id: 'new-folder', label: texts.newFolder, icon: <MFolderPlusIcon />}] : []),\n ...getDefaultItemActions(node, texts),\n ]\n}\n\nexport function MFileManager({\n items,\n locale: localeOverride,\n defaultExpanded = [],\n expanded,\n onExpandChange,\n folderId: controlledFolderId,\n defaultFolderId = null,\n onFolderChange,\n selectedId: controlledSelectedId,\n onSelectionChange,\n view: controlledView,\n defaultView = 'list',\n onViewChange,\n searchValue: controlledSearch,\n defaultSearchValue = '',\n onSearchChange,\n searchable = true,\n searchPlaceholder,\n showSidebar = true,\n showPreview = true,\n emptyText,\n toolbarActions = [],\n onToolbarAction,\n onOpenItem,\n onItemAction,\n onContextMenuAction,\n canDrop,\n onMove,\n renderPreview,\n className,\n ...rest\n}: MFileManagerProps) {\n const locale = useDocumentLocale(localeOverride)\n const texts = useMFileManagerTexts()\n const [internalFolderId, setInternalFolderId] = useState<string | null>(defaultFolderId)\n const [internalSelectedId, setInternalSelectedId] = useState<string | null>(null)\n const [internalView, setInternalView] = useState<MFileManagerView>(defaultView)\n const [internalSearch, setInternalSearch] = useState(defaultSearchValue)\n\n const {nodeMap, parentMap} = useMemo(() => buildLookup(items), [items])\n const folderTree = useMemo(() => buildFolderTree(items), [items])\n\n const rawFolderId = controlledFolderId !== undefined ? controlledFolderId : internalFolderId\n const activeFolderId = resolveFolderId(rawFolderId, nodeMap, parentMap)\n const activeFolder = activeFolderId ? (nodeMap.get(activeFolderId) ?? null) : null\n\n const rawSelectedId = controlledSelectedId !== undefined ? controlledSelectedId : internalSelectedId\n const selectedNode = rawSelectedId ? (nodeMap.get(rawSelectedId) ?? null) : null\n const selectedId = selectedNode ? selectedNode.id : null\n\n const activeView = controlledView ?? internalView\n const search = controlledSearch ?? internalSearch\n const currentItems = getCurrentItems(activeFolder, items)\n const query = search.trim().toLowerCase()\n const activePath = buildPath(activeFolderId, nodeMap, parentMap)\n const effectiveSearchPlaceholder = searchPlaceholder ?? texts.searchPlaceholder\n const effectiveEmptyText = emptyText ?? texts.emptyText\n const hasNodeActionHandler = Boolean(onItemAction || onContextMenuAction)\n\n const visibleItems = useMemo(() => {\n if (!query) return currentItems\n\n return currentItems.filter((item) => item.label.toLowerCase().includes(query))\n }, [currentItems, query])\n\n function changeFolder(nextId: string | null) {\n const nextFolderId = resolveFolderId(nextId, nodeMap, parentMap)\n const nextFolder = nextFolderId ? (nodeMap.get(nextFolderId) ?? null) : null\n\n if (onFolderChange) onFolderChange(nextFolderId, nextFolder)\n else setInternalFolderId(nextFolderId)\n }\n\n function changeSelection(\n nextId: string | null,\n nextActiveFolderId = activeFolderId,\n nextActiveFolder = activeFolder\n ) {\n const event = makeSelectionEvent(nextId, nodeMap, parentMap, nextActiveFolderId, nextActiveFolder)\n\n if (onSelectionChange) onSelectionChange(event)\n else setInternalSelectedId(nextId)\n }\n\n function changeView(nextView: MFileManagerView) {\n if (onViewChange) onViewChange(nextView)\n else setInternalView(nextView)\n }\n\n function changeSearch(nextSearch: string) {\n if (onSearchChange) onSearchChange(nextSearch)\n else setInternalSearch(nextSearch)\n }\n\n function handleFolderSelect(id: string, node: MFileManagerNode) {\n changeFolder(id)\n changeSelection(id, node.id, node)\n }\n\n function handleItemClick(node: MFileManagerNode) {\n if (isFolderNode(node)) {\n changeFolder(node.id)\n changeSelection(node.id, node.id, node)\n return\n }\n\n changeSelection(node.id)\n }\n\n function emitToolbarAction(actionId: string) {\n if (!onToolbarAction) return\n\n const baseEvent = makeSelectionEvent(selectedId, nodeMap, parentMap, activeFolderId, activeFolder)\n onToolbarAction({\n ...baseEvent,\n actionId,\n visibleItems,\n } satisfies MFileManagerActionEvent)\n }\n\n function emitItemAction(actionId: string, node: MFileManagerNode) {\n ;(onItemAction ?? onContextMenuAction)?.(actionId, node)\n }\n\n function emitContextMenuAction(actionId: string, node: MFileManagerNode) {\n ;(onContextMenuAction ?? onItemAction)?.(actionId, node)\n }\n\n function renderItemMeta(node: MFileManagerNode) {\n const details = []\n const size = formatBytes(node.size)\n const modifiedAt = formatModifiedAt(node.modifiedAt, locale)\n\n if (isFolderNode(node)) {\n details.push(texts.itemsCount(node.children?.length ?? 0))\n }\n\n if (size) {\n details.push(size)\n }\n\n if (modifiedAt) {\n details.push(modifiedAt)\n }\n\n return details.join(' / ')\n }\n\n return (\n <div\n className={cn('file-manager', !showSidebar && 'no-sidebar', !showPreview && 'no-preview', className)}\n {...rest}\n >\n <div className=\"toolbar\">\n <div className=\"toolbar-main\">\n <div className=\"breadcrumbs\">\n <button type=\"button\" className=\"breadcrumb root\" onClick={() => changeFolder(null)}>\n <MHomeIcon />\n <MText as=\"span\" weight=\"semibold\">\n {texts.home}\n </MText>\n </button>\n {activePath.map((node) => (\n <div key={node.id} className=\"breadcrumbs\">\n <span className=\"breadcrumb-separator\">/</span>\n <button type=\"button\" className=\"breadcrumb\" onClick={() => changeFolder(node.id)}>\n <MText as=\"span\">{node.label}</MText>\n </button>\n </div>\n ))}\n </div>\n {searchable && (\n <MInputSearch\n className=\"toolbar-search\"\n size=\"sm\"\n placeholder={effectiveSearchPlaceholder}\n value={search}\n onChange={(event) => changeSearch(event.target.value)}\n onClear={() => changeSearch('')}\n />\n )}\n </div>\n <div className=\"toolbar-actions\">\n {toolbarActions.map((action) => (\n <MButton\n key={action.id}\n size=\"sm\"\n variant={action.variant ?? 'ghost'}\n color={action.color}\n disabled={action.disabled}\n onClick={() => emitToolbarAction(action.id)}\n startIcon={action.icon}\n >\n {action.label}\n </MButton>\n ))}\n <div className=\"view-switch\">\n <MButton\n size=\"sm\"\n variant={activeView === 'list' ? 'secondary' : 'ghost'}\n onClick={() => changeView('list')}\n >\n {texts.listView}\n </MButton>\n <MButton\n size=\"sm\"\n variant={activeView === 'grid' ? 'secondary' : 'ghost'}\n onClick={() => changeView('grid')}\n >\n {texts.gridView}\n </MButton>\n </div>\n </div>\n </div>\n\n <div className=\"body\">\n {showSidebar && (\n <aside className=\"panel\">\n <div className=\"panel-header\">\n <MText weight=\"semibold\">{texts.folders}</MText>\n <MBadge size=\"sm\" color=\"info\">\n {folderTree.length}\n </MBadge>\n </div>\n <div className=\"panel-body sidebar-body\">\n {folderTree.length > 0 ? (\n <MTreeView\n items={folderTree}\n selectable\n fileIcons\n defaultExpanded={defaultExpanded}\n expanded={expanded}\n onExpandChange={onExpandChange}\n selected={activeFolderId}\n onSelect={(id, node) => handleFolderSelect(id, node as MFileManagerNode)}\n draggable={Boolean(onMove)}\n canDrop={\n canDrop\n ? (draggedNode, targetNode) =>\n canDrop(\n draggedNode as MFileManagerNode,\n targetNode as MFileManagerNode\n )\n : undefined\n }\n onMove={\n onMove\n ? (event) =>\n onMove({\n draggedId: event.draggedId,\n draggedNode: event.draggedNode as MFileManagerNode,\n targetId: event.targetId,\n targetNode: event.targetNode as MFileManagerNode,\n } satisfies MFileManagerMoveEvent)\n : undefined\n }\n contextMenuItems={\n hasNodeActionHandler\n ? (node) => getDefaultContextMenuActions(node as MFileManagerNode, texts)\n : undefined\n }\n onContextMenuAction={\n hasNodeActionHandler\n ? (actionId, node) =>\n emitContextMenuAction(actionId, node as MFileManagerNode)\n : undefined\n }\n />\n ) : (\n <div className=\"empty-state\">{texts.noFoldersAvailable}</div>\n )}\n </div>\n </aside>\n )}\n\n <section className=\"panel\">\n <div className=\"panel-header\">\n <MInline align=\"center\" wrap=\"wrap\">\n <MText weight=\"semibold\">{activeFolder?.label ?? texts.home}</MText>\n <MBadge size=\"sm\">{visibleItems.length}</MBadge>\n </MInline>\n <MText size=\"sm\" tone=\"muted\">\n {query ? texts.filteredBy(search) : texts.currentFolder}\n </MText>\n </div>\n <div className=\"panel-body\">\n {visibleItems.length > 0 ? (\n <div className={cn('content-items', activeView)}>\n {visibleItems.map((node) => {\n const isSelected = selectedId === node.id\n const itemMeta = renderItemMeta(node)\n const actions = hasNodeActionHandler ? getDefaultItemActions(node, texts) : []\n\n return (\n <div key={node.id} className={cn('item-card', isSelected && 'selected')}>\n <button\n type=\"button\"\n className=\"item-card-main\"\n onClick={() => handleItemClick(node)}\n onDoubleClick={() => onOpenItem?.(node)}\n >\n <span className=\"item-icon\">{getNodeIcon(node)}</span>\n <span className=\"item-text\">\n <MText as=\"span\" weight=\"semibold\" truncate>\n {node.label}\n </MText>\n {node.description ? (\n <MText as=\"span\" size=\"sm\" tone=\"muted\" truncate={2}>\n {node.description}\n </MText>\n ) : null}\n <span className=\"item-meta\">\n <MBadge\n size=\"sm\"\n color={isFolderNode(node) ? 'info' : 'primary'}\n >\n {isFolderNode(node) ? texts.folder : texts.file}\n </MBadge>\n {itemMeta ? (\n <MText as=\"span\" size=\"sm\" tone=\"muted\" truncate>\n {itemMeta}\n </MText>\n ) : null}\n </span>\n </span>\n </button>\n {actions.length > 0 ? (\n <div className=\"item-card-actions\">\n <MDropdownMenu\n placement=\"bottom-end\"\n trigger={\n <MButton\n aria-label={`${texts.preview}: ${node.label}`}\n variant=\"ghost\"\n size=\"sm\"\n iconOnly\n >\n <MEllipsisVerticalIcon />\n </MButton>\n }\n >\n {actions.map((action) => (\n <MDropdownItem\n key={action.id}\n icon={action.icon}\n label={action.label}\n color={action.color}\n onClick={() => emitItemAction(action.id, node)}\n />\n ))}\n </MDropdownMenu>\n </div>\n ) : null}\n </div>\n )\n })}\n </div>\n ) : (\n <div className=\"empty-state\">{effectiveEmptyText}</div>\n )}\n </div>\n </section>\n\n {showPreview && (\n <aside className=\"panel\">\n <div className=\"panel-header\">\n <MText weight=\"semibold\">{texts.preview}</MText>\n {selectedNode ? (\n <MBadge size=\"sm\" color={isFolderNode(selectedNode) ? 'info' : 'primary'}>\n {isFolderNode(selectedNode) ? texts.folder : texts.file}\n </MBadge>\n ) : null}\n </div>\n <div className=\"panel-body\">\n {selectedNode ? (\n <MStack>\n <div className=\"preview-visual\">\n {renderPreview ? (\n renderPreview(selectedNode)\n ) : selectedNode.preview ? (\n selectedNode.preview\n ) : (\n <span className=\"preview-icon\">{getNodeIcon(selectedNode, true)}</span>\n )}\n </div>\n <MText weight=\"semibold\">{selectedNode.label}</MText>\n {selectedNode.description ? (\n <MText size=\"sm\" tone=\"muted\">\n {selectedNode.description}\n </MText>\n ) : null}\n <div className=\"preview-meta\">\n <MBadge size=\"sm\" color={isFolderNode(selectedNode) ? 'info' : 'primary'}>\n {isFolderNode(selectedNode) ? texts.folder : texts.file}\n </MBadge>\n {formatBytes(selectedNode.size) ? (\n <MBadge size=\"sm\">{formatBytes(selectedNode.size)}</MBadge>\n ) : null}\n {formatModifiedAt(selectedNode.modifiedAt, locale) ? (\n <MBadge size=\"sm\" color=\"neutral\">\n {formatModifiedAt(selectedNode.modifiedAt, locale)}\n </MBadge>\n ) : null}\n </div>\n <MText size=\"sm\" tone=\"muted\">\n {texts.path}:{' '}\n {[\n texts.home,\n ...buildPath(selectedNode.id, nodeMap, parentMap).map((node) => node.label),\n ].join(' / ')}\n </MText>\n </MStack>\n ) : (\n <div className=\"preview-empty\">{texts.selectItemToInspect}</div>\n )}\n </div>\n </aside>\n )}\n </div>\n </div>\n )\n}\n","import {useEffect, useMemo, useRef, useState} from 'react'\nimport type {CSSProperties, ReactNode, RefObject, MouseEvent as ReactMouseEvent} from 'react'\nimport type {\n MCalendarBoardLocale,\n MCalendarBoardProps,\n MCalendarBoardView,\n MCalendarDayActionItem,\n MCalendarDayCellProps,\n MCalendarDetailsMode,\n MCalendarEvent,\n MCalendarEventActionItem,\n MCalendarEventListProps,\n MCalendarEventPopoverProps,\n MCalendarEventProps,\n MCalendarFilterOption,\n MCalendarHourBarProps,\n MCalendarTimelineProps,\n MCalendarTimelineSlotState,\n} from './MCalendarBoard.types'\nimport {cn} from '../../../utils/cn'\nimport {useMCalendarBoardTexts, useMDatePickerTexts} from '../../../i18n/frameworkTexts'\nimport {useDocumentLocale} from '../../../utils/locale'\nimport {MButton} from '../../controls'\nimport {MBadge} from '../../feedback'\nimport {MCard, MCardBody} from '../../cards'\nimport {MAvatar} from '../../media'\nimport {MModal, MTooltip} from '../../overlays'\nimport {MDropdownItem, MDropdownMenu} from '../../overlays'\nimport {MPopover, MPortal} from '../../primitives'\nimport {MHeading, MText} from '../../typography'\nimport {MStack, MTabs} from '../../layout'\nimport {MBreakpoints} from '../../../theme'\nimport {\n MEditIcon,\n MEllipsisVerticalIcon,\n MExternalLinkIcon,\n MMenuIcon,\n MPlusIcon,\n MTrashIcon,\n MWarningIcon,\n} from '../../../icons'\nimport './MCalendarBoard.css'\n\nconst HOURS_PER_DAY = 24\nconst MINUTES_PER_HOUR = 60\nconst TIMELINE_HOUR_HEIGHT_PX = 56\nconst TIMELINE_CHIP_WIDTH_PX = 110\nconst TIMELINE_CHIP_GAP_PX = 6\nconst OVERLAP_PALETTE = ['rgba(14, 165, 233, 0.85)', 'rgba(244, 63, 94, 0.85)']\n\ninterface CalendarDetailsContentProps {\n date: Date | null\n events: MCalendarEvent[]\n locale: MCalendarBoardLocale\n timelineStartHour: number\n timelineEndHour: number\n showTimeline: boolean\n overlapWarning: boolean\n emptyStateText: string\n addEventLabel?: string\n dayMenuLabel?: string\n onAddEvent?: (date: Date, hour?: number) => void\n renderDayMenu?: (date: Date, events: MCalendarEvent[]) => MCalendarDayActionItem[] | undefined\n onEventSelect?: (event: MCalendarEvent) => void\n onEventEdit?: (event: MCalendarEvent) => void\n onEventDelete?: (event: MCalendarEvent) => void\n renderEventItem?: (event: MCalendarEvent) => ReactNode\n renderEventMenu?: (event: MCalendarEvent) => MCalendarEventActionItem[] | undefined\n}\n\ninterface CalendarWeekViewProps {\n days: Date[]\n eventsByDay: Map<string, MCalendarEvent[]>\n selectedDate: Date | null\n activeDate: Date | null\n onDayInteract: (date: Date, target: HTMLElement, events: MCalendarEvent[]) => void\n dayBadge?: MCalendarBoardProps['dayBadge']\n renderDayCell?: MCalendarBoardProps['renderDayCell']\n showHourBar: boolean\n overlapWarning: boolean\n onAddEvent?: (date: Date, hour?: number) => void\n addEventLabel?: string\n}\n\nfunction stripTime(date: Date) {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate())\n}\n\nfunction normalizeDate(value?: Date | string | null) {\n if (!value) {\n return null\n }\n\n if (value instanceof Date) {\n return stripTime(value)\n }\n\n const parsed = new Date(value)\n if (Number.isNaN(parsed.getTime())) {\n return null\n }\n\n return stripTime(parsed)\n}\n\nfunction getDateKey(date: Date) {\n const year = date.getFullYear()\n const month = String(date.getMonth() + 1).padStart(2, '0')\n const day = String(date.getDate()).padStart(2, '0')\n\n return `${year}-${month}-${day}`\n}\n\nfunction getEventDate(event: MCalendarEvent) {\n return normalizeDate(event.date)\n}\n\nfunction addDays(date: Date, amount: number) {\n const nextDate = new Date(date)\n nextDate.setDate(nextDate.getDate() + amount)\n return stripTime(nextDate)\n}\n\nfunction startOfWeek(date: Date, weekStartsOn: 0 | 1) {\n const safeDate = stripTime(date)\n const day = safeDate.getDay()\n const delta = (day - weekStartsOn + 7) % 7\n return addDays(safeDate, -delta)\n}\n\nfunction sortEventsByTime(events: MCalendarEvent[]) {\n return [...events].sort((leftEvent, rightEvent) => {\n const leftTime = leftEvent.startTime ?? '99:99'\n const rightTime = rightEvent.startTime ?? '99:99'\n return leftTime.localeCompare(rightTime)\n })\n}\n\nfunction buildMonthGrid(month: Date, weekStartsOn: 0 | 1) {\n const monthStart = new Date(month.getFullYear(), month.getMonth(), 1)\n const gridStart = startOfWeek(monthStart, weekStartsOn)\n\n return Array.from({length: 42}, (_, index) => addDays(gridStart, index))\n}\n\nfunction getStatusColor(status?: MCalendarEvent['status']) {\n switch (status) {\n case 'active':\n return 'rgba(14, 165, 233, 1)'\n case 'done':\n return 'rgba(34, 197, 94, 1)'\n case 'cancelled':\n return 'rgba(239, 68, 68, 1)'\n default:\n return 'rgba(245, 158, 11, 1)'\n }\n}\n\nfunction getEventColor(event: MCalendarEvent) {\n return event.color ?? getStatusColor(event.status)\n}\n\nfunction formatBoardDate(date: Date, locale: MCalendarBoardLocale) {\n return new Intl.DateTimeFormat(locale, {\n weekday: 'long',\n day: 'numeric',\n month: 'long',\n year: 'numeric',\n }).format(date)\n}\n\nfunction formatWeekRange(startDate: Date, locale: MCalendarBoardLocale) {\n const endDate = addDays(startDate, 6)\n const formatter = new Intl.DateTimeFormat(locale, {\n day: 'numeric',\n month: 'short',\n })\n\n return `${formatter.format(startDate)} - ${formatter.format(endDate)}`\n}\n\nfunction formatEventTime(event: MCalendarEvent, texts: ReturnType<typeof useMCalendarBoardTexts>) {\n if (event.startTime && event.endTime) {\n return `${event.startTime} - ${event.endTime}`\n }\n\n if (event.startTime) {\n return event.startTime\n }\n\n return texts.allDay\n}\n\nfunction parseHM(value: string): number | null {\n const match = /^(\\d{1,2}):(\\d{2})$/.exec(value)\n if (!match) {\n return null\n }\n return Number(match[1]) * 60 + Number(match[2])\n}\n\nfunction formatEventDuration(event: MCalendarEvent): string | null {\n if (!event.startTime || !event.endTime) {\n return null\n }\n const start = parseHM(event.startTime)\n const end = parseHM(event.endTime)\n if (start === null || end === null || end <= start) {\n return null\n }\n const total = end - start\n const hours = Math.floor(total / 60)\n const minutes = total % 60\n if (hours === 0) {\n return `${minutes}m`\n }\n if (minutes === 0) {\n return `${hours}h`\n }\n return `${hours}h ${minutes}m`\n}\n\nfunction getTimelineSlotState(date: Date, hour: number): MCalendarTimelineSlotState {\n const now = new Date()\n const slotStart = new Date(date)\n slotStart.setHours(hour, 0, 0, 0)\n const slotEnd = new Date(slotStart)\n slotEnd.setHours(hour + 1, 0, 0, 0)\n\n if (slotEnd <= now) {\n return 'past'\n }\n\n if (slotStart <= now && slotEnd > now) {\n return 'active'\n }\n\n return 'upcoming'\n}\n\nfunction parseTime(time?: string): number | null {\n if (!time) {\n return null\n }\n\n const [hourStr, minuteStr] = time.split(':')\n const hour = Number(hourStr)\n const minute = Number(minuteStr ?? 0)\n\n if (Number.isNaN(hour) || Number.isNaN(minute)) {\n return null\n }\n\n return hour * MINUTES_PER_HOUR + minute\n}\n\nfunction getEventMinuteRange(event: MCalendarEvent): {start: number; end: number} | null {\n const start = parseTime(event.startTime)\n if (start === null) {\n return null\n }\n\n const explicitEnd = parseTime(event.endTime)\n const end = explicitEnd !== null && explicitEnd > start ? explicitEnd : start + MINUTES_PER_HOUR\n return {start, end: Math.min(end, HOURS_PER_DAY * MINUTES_PER_HOUR)}\n}\n\nfunction getHourSegments(events: MCalendarEvent[], hour: number) {\n const hourStart = hour * MINUTES_PER_HOUR\n const hourEnd = hourStart + MINUTES_PER_HOUR\n const segments: Array<{event: MCalendarEvent; fromPercent: number; toPercent: number}> = []\n\n events.forEach((event) => {\n const range = getEventMinuteRange(event)\n if (!range) {\n return\n }\n\n const segStart = Math.max(range.start, hourStart)\n const segEnd = Math.min(range.end, hourEnd)\n if (segEnd <= segStart) {\n return\n }\n\n segments.push({\n event,\n fromPercent: ((segStart - hourStart) / MINUTES_PER_HOUR) * 100,\n toPercent: ((segEnd - hourStart) / MINUTES_PER_HOUR) * 100,\n })\n })\n\n return segments\n}\n\nfunction detectOverlaps(events: MCalendarEvent[]): Set<string> {\n const overlapping = new Set<string>()\n const ranges = events\n .map((event) => {\n const range = getEventMinuteRange(event)\n return range ? {event, ...range} : null\n })\n .filter((entry): entry is {event: MCalendarEvent; start: number; end: number} => entry !== null)\n .sort((a, b) => a.start - b.start)\n\n for (let i = 0; i < ranges.length; i += 1) {\n for (let j = i + 1; j < ranges.length; j += 1) {\n if (ranges[j].start >= ranges[i].end) {\n break\n }\n\n overlapping.add(ranges[i].event.id)\n overlapping.add(ranges[j].event.id)\n }\n }\n\n return overlapping\n}\n\nfunction applyCalendarFilters(events: MCalendarEvent[], filters: MCalendarFilterOption[], activeFilterIds: string[]) {\n if (!filters.length || !activeFilterIds.length) {\n return events\n }\n\n const activeFilters = filters.filter((filterOption) => activeFilterIds.includes(filterOption.id))\n if (!activeFilters.length) {\n return events\n }\n\n return events.filter((event) => activeFilters.some((filterOption) => filterOption.predicate(event)))\n}\n\nfunction getViewTitle(month: Date, view: MCalendarBoardView, locale: MCalendarBoardLocale, weekStartsOn: 0 | 1) {\n if (view === 'week') {\n return formatWeekRange(startOfWeek(month, weekStartsOn), locale)\n }\n\n return new Intl.DateTimeFormat(locale, {\n month: 'long',\n year: 'numeric',\n }).format(month)\n}\n\nfunction getViewSubtitle(view: MCalendarBoardView, texts: ReturnType<typeof useMCalendarBoardTexts>) {\n return view === 'week' ? texts.weekView : texts.monthView\n}\n\nfunction buildDefaultDayMenu(\n onAddEvent?: (date: Date, hour?: number) => void,\n addEventLabel?: string\n): MCalendarDayActionItem[] {\n const items: MCalendarDayActionItem[] = []\n\n if (onAddEvent) {\n items.push({\n id: 'add',\n label: addEventLabel ?? 'Add event',\n icon: <MPlusIcon />,\n onSelect: (date) => onAddEvent(date),\n })\n }\n\n return items\n}\n\nfunction buildDefaultMenu(\n event: MCalendarEvent,\n onEdit?: (event: MCalendarEvent) => void,\n onDelete?: (event: MCalendarEvent) => void\n): MCalendarEventActionItem[] {\n const items: MCalendarEventActionItem[] = []\n\n if (event.href) {\n items.push({\n id: 'open',\n label: 'Open',\n icon: <MExternalLinkIcon />,\n href: event.href,\n })\n }\n\n const editHandler = event.onEdit ?? onEdit\n if (editHandler) {\n items.push({\n id: 'edit',\n label: 'Edit',\n icon: <MEditIcon />,\n onSelect: editHandler,\n })\n }\n\n const deleteHandler = event.onDelete ?? onDelete\n if (deleteHandler) {\n items.push({\n id: 'delete',\n label: 'Delete',\n icon: <MTrashIcon />,\n color: 'error',\n onSelect: deleteHandler,\n })\n }\n\n return items\n}\n\nexport function MCalendarHourBar({\n date,\n events,\n overlapWarning = false,\n orientation = 'vertical',\n className,\n ...rest\n}: MCalendarHourBarProps) {\n void date\n\n const texts = useMCalendarBoardTexts()\n const overlapIds = useMemo(() => detectOverlaps(events), [events])\n const hours = Array.from({length: HOURS_PER_DAY}, (_, hour) => hour)\n\n return (\n <div className={cn('calendar hourbar', orientation, className)} aria-hidden={'true'} {...rest}>\n {hours.map((hour) => {\n const segments = getHourSegments(events, hour)\n const totalFill = Math.min(\n 100,\n segments.reduce((sum, seg) => sum + (seg.toPercent - seg.fromPercent), 0)\n )\n const hasOverlap = overlapWarning && segments.some((seg) => overlapIds.has(seg.event.id))\n\n return (\n <div\n key={hour}\n className={cn('hourbar slot', segments.length > 0 && 'filled', hasOverlap && 'overlap')}\n style={{['--mineral-hourbar-fill' as string]: `${totalFill}%`}}\n >\n {segments.map((seg, index) => {\n const bg =\n hasOverlap && segments.length > 1\n ? OVERLAP_PALETTE[index % OVERLAP_PALETTE.length]\n : getEventColor(seg.event)\n const duration = formatEventDuration(seg.event)\n const timeLabel = formatEventTime(seg.event, texts)\n return (\n <MTooltip\n key={`${seg.event.id}-${index}`}\n placement={'left'}\n delay={120}\n className={'hourbar segment-wrapper'}\n style={{\n position: 'absolute',\n left: 0,\n right: 0,\n top: `${seg.fromPercent}%`,\n height: `${seg.toPercent - seg.fromPercent}%`,\n background: bg,\n }}\n content={\n <div className={'hourbar tooltip-content'}>\n <strong>{seg.event.title}</strong>\n <span>{duration ? `${timeLabel} · ${duration}` : timeLabel}</span>\n </div>\n }\n >\n <span className={'hourbar segment-fill'} aria-hidden={'true'} />\n </MTooltip>\n )\n })}\n </div>\n )\n })}\n </div>\n )\n}\n\nfunction CalendarFilters({\n filters,\n activeFilterIds,\n onToggle,\n}: {\n filters: MCalendarFilterOption[]\n activeFilterIds: string[]\n onToggle: (filterId: string) => void\n}) {\n if (!filters.length) {\n return null\n }\n\n return (\n <div className={'calendar filters'}>\n {filters.map((filterOption) => {\n const isActive = activeFilterIds.includes(filterOption.id)\n\n return (\n <MButton\n key={filterOption.id}\n type={'button'}\n size={'sm'}\n variant=\"outlined\"\n color={isActive ? 'primary' : 'neutral'}\n active={isActive}\n className={'calendar filter button'}\n onClick={() => onToggle(filterOption.id)}\n >\n {filterOption.label}\n </MButton>\n )\n })}\n </div>\n )\n}\n\nfunction CalendarWeekView({\n days,\n eventsByDay,\n selectedDate,\n activeDate,\n onDayInteract,\n dayBadge,\n renderDayCell,\n showHourBar,\n overlapWarning,\n onAddEvent,\n addEventLabel,\n}: CalendarWeekViewProps) {\n const todayKey = getDateKey(stripTime(new Date()))\n\n return (\n <div className={'calendar week'}>\n {days.map((day) => {\n const dayKey = getDateKey(day)\n const dayEvents = eventsByDay.get(dayKey) ?? []\n const badge =\n dayBadge?.(day, dayEvents) ??\n (dayEvents.length > 0 ? <MBadge size={'sm'}>{dayEvents.length}</MBadge> : null)\n const isSelected = Boolean(selectedDate && getDateKey(selectedDate) === dayKey)\n const context = {\n date: day,\n events: dayEvents,\n badge,\n isToday: dayKey === todayKey,\n isSelected,\n isOutsideMonth: false,\n }\n\n return (\n <div key={dayKey} className={'calendar week column'}>\n <MCalendarDayCell\n date={day}\n events={dayEvents}\n badge={badge}\n isToday={context.isToday}\n isSelected={isSelected || Boolean(activeDate && getDateKey(activeDate) === dayKey)}\n isOutsideMonth={false}\n showHourBar={showHourBar}\n overlapWarning={overlapWarning}\n onAddEvent={onAddEvent ? (target) => onAddEvent(target) : undefined}\n addEventLabel={addEventLabel}\n onClick={(event) => onDayInteract(day, event.currentTarget, dayEvents)}\n >\n {renderDayCell ? renderDayCell(day, context) : undefined}\n </MCalendarDayCell>\n </div>\n )\n })}\n </div>\n )\n}\n\nexport function MCalendarDayCell({\n date,\n events = [],\n badge,\n isToday = false,\n isSelected = false,\n isOutsideMonth = false,\n showHourBar = false,\n overlapWarning = false,\n onAddEvent,\n addEventLabel,\n className,\n children,\n ...rest\n}: MCalendarDayCellProps) {\n const handleAddClick = (mouseEvent: ReactMouseEvent<HTMLSpanElement>) => {\n mouseEvent.stopPropagation()\n onAddEvent?.(date)\n }\n\n return (\n <button\n type={'button'}\n className={cn(\n 'calendar day cell',\n isToday && 'today',\n isSelected && 'selected',\n isOutsideMonth && 'outside-month',\n showHourBar && 'has-hourbar',\n className\n )}\n {...rest}\n >\n {children ?? (\n <>\n <div className={'day inner'}>\n <div className={'day header'}>\n <span className={'day number'}>{date.getDate()}</span>\n <div className={'day meta'}>{badge}</div>\n </div>\n {onAddEvent && (\n <div className={'day footer'}>\n <span\n role={'button'}\n tabIndex={-1}\n aria-label={addEventLabel}\n title={addEventLabel}\n className={'day add'}\n onClick={handleAddClick}\n >\n <MPlusIcon size={14} />\n </span>\n </div>\n )}\n </div>\n {showHourBar && (\n <MCalendarHourBar\n date={date}\n events={events}\n overlapWarning={overlapWarning}\n className={'embedded'}\n />\n )}\n </>\n )}\n </button>\n )\n}\n\nexport function MCalendarEventItem({\n event,\n locale: localeOverride,\n className,\n currentDate,\n menuItems,\n renderMenu,\n showActions = true,\n overlap = false,\n onSelect,\n onEdit,\n onDelete,\n ...rest\n}: MCalendarEventProps) {\n const locale = useDocumentLocale(localeOverride)\n const texts = useMCalendarBoardTexts()\n const statusColor =\n event.status === 'cancelled'\n ? 'error'\n : event.status === 'done'\n ? 'success'\n : event.status === 'active'\n ? 'info'\n : 'warning'\n\n const resolvedMenu =\n event.menuItems ?? menuItems ?? renderMenu?.(event) ?? buildDefaultMenu(event, onEdit, onDelete)\n const interactive = Boolean(event.href || event.onClick || onSelect)\n const accentColor = getEventColor(event)\n\n const handleSelect = (mouseEvent: ReactMouseEvent<HTMLElement>) => {\n if ((mouseEvent.target as HTMLElement).closest('.event-menu, .event-menu-trigger')) {\n return\n }\n\n event.onClick?.(event)\n onSelect?.(event)\n }\n\n const renderItem = (As: 'a' | 'div' | 'button') => (\n <As\n {...(As === 'a' ? {href: event.href, target: event.href ? undefined : undefined} : {})}\n {...(As === 'button' ? {type: 'button' as const, onClick: handleSelect} : {})}\n {...(As === 'a' ? {onClick: handleSelect} : {})}\n className={cn('calendar event item', interactive && 'interactive', overlap && 'overlap', className)}\n style={{['--mineral-event-accent' as string]: accentColor}}\n {...(rest as Record<string, unknown>)}\n >\n <div className={'event time'}>\n <span className={'event accent'} aria-hidden={'true'} />\n {formatEventTime(event, texts)}\n </div>\n <div className={'event content'}>\n <div className={'event title row'}>\n <MHeading level={5}>{event.title}</MHeading>\n <div className={'event title meta'}>\n {overlap && (\n <MBadge color={'warning'} size={'sm'}>\n <MWarningIcon size={12} /> Overlap\n </MBadge>\n )}\n {event.status && (\n <MBadge color={statusColor} size={'sm'}>\n {event.status}\n </MBadge>\n )}\n </div>\n </div>\n {event.description && (\n <MText size={'sm'} tone={'muted'}>\n {event.description}\n </MText>\n )}\n <div className={'event details'}>\n {event.type && (\n <MBadge color={'neutral'} size={'sm'}>\n {event.type}\n </MBadge>\n )}\n {event.badgeLabel && <MBadge size={'sm'}>{event.badgeLabel}</MBadge>}\n {event.user && (\n <span className={'event user'}>\n <MAvatar\n size={'sm'}\n src={event.user.avatar}\n name={event.user.name}\n backgroundColor={event.user.color}\n />\n {event.user.name}\n </span>\n )}\n {!event.startTime && !event.endTime && currentDate && (\n <MText size={'sm'} tone={'muted'}>\n {formatBoardDate(currentDate, locale)}\n </MText>\n )}\n </div>\n </div>\n {showActions && resolvedMenu.length > 0 && (\n <div\n className={'event-menu'}\n onClick={(e) => e.stopPropagation()}\n onMouseDown={(e) => e.stopPropagation()}\n >\n <MDropdownMenu\n placement={'bottom-end'}\n trigger={\n <span className={'event-menu-trigger'} aria-label={'Event actions'} role={'presentation'}>\n <MEllipsisVerticalIcon size={16} />\n </span>\n }\n >\n {resolvedMenu.map((item) =>\n item.href ? (\n <MDropdownItem\n key={item.id}\n icon={item.icon}\n label={item.label}\n href={item.href}\n color={item.color}\n disabled={item.disabled}\n />\n ) : (\n <MDropdownItem\n key={item.id}\n icon={item.icon}\n label={item.label}\n color={item.color}\n disabled={item.disabled}\n onClick={() => item.onSelect?.(event)}\n />\n )\n )}\n </MDropdownMenu>\n </div>\n )}\n </As>\n )\n\n if (event.href) {\n return renderItem('a')\n }\n\n if (interactive) {\n return renderItem('button')\n }\n\n return renderItem('div')\n}\n\nexport function MCalendarEventList({\n events,\n locale: localeOverride,\n currentDate,\n emptyStateText,\n overlapWarning = false,\n renderEventItem,\n renderEventMenu,\n onEventSelect,\n onEventEdit,\n onEventDelete,\n className,\n ...rest\n}: MCalendarEventListProps) {\n const locale = useDocumentLocale(localeOverride)\n const texts = useMCalendarBoardTexts()\n const overlapIds = useMemo(\n () => (overlapWarning ? detectOverlaps(events) : new Set<string>()),\n [events, overlapWarning]\n )\n\n if (!events.length) {\n return (\n <MText size={'sm'} tone={'muted'} className={cn('calendar event list', className)} {...rest}>\n {emptyStateText ?? texts.emptyStateText}\n </MText>\n )\n }\n\n return (\n <div className={cn('calendar event list', className)} {...rest}>\n <MStack>\n {sortEventsByTime(events).map((event) =>\n renderEventItem ? (\n <div key={event.id}>{renderEventItem(event)}</div>\n ) : (\n <MCalendarEventItem\n key={event.id}\n event={event}\n locale={locale}\n currentDate={currentDate}\n renderMenu={renderEventMenu}\n overlap={overlapIds.has(event.id)}\n onSelect={onEventSelect}\n onEdit={onEventEdit}\n onDelete={onEventDelete}\n />\n )\n )}\n </MStack>\n </div>\n )\n}\n\ninterface TimelineEventChipProps {\n event: MCalendarEvent\n locale: MCalendarBoardLocale\n date: Date\n timeLabel: string\n overlap: boolean\n renderEventMenu?: (event: MCalendarEvent) => MCalendarEventActionItem[] | undefined\n onSelect?: (event: MCalendarEvent) => void\n onEdit?: (event: MCalendarEvent) => void\n onDelete?: (event: MCalendarEvent) => void\n}\n\nfunction TimelineEventChip({\n event,\n locale,\n date,\n timeLabel,\n overlap,\n renderEventMenu,\n onSelect,\n onEdit,\n onDelete,\n}: TimelineEventChipProps) {\n const [open, setOpen] = useState(false)\n const anchorRef = useRef<HTMLButtonElement | null>(null)\n\n return (\n <>\n <button\n ref={anchorRef}\n type={'button'}\n className={cn('timeline event-chip', overlap && 'overlap', open && 'open')}\n style={{['--mineral-event-color' as string]: getEventColor(event)} as CSSProperties}\n onClick={() => setOpen((value) => !value)}\n >\n <span className={'timeline event-chip-time'}>{timeLabel}</span>\n <span className={'timeline event-chip-title'}>{event.title}</span>\n </button>\n <MPopover\n open={open}\n anchorRef={anchorRef as RefObject<HTMLElement | null>}\n onClose={() => setOpen(false)}\n placement={'right-start'}\n >\n <MCard className={'timeline event-popup'} outlined={false}>\n <MCardBody>\n <MCalendarEventItem\n event={event}\n locale={locale}\n currentDate={date}\n renderMenu={renderEventMenu}\n overlap={overlap}\n onSelect={onSelect}\n onEdit={onEdit}\n onDelete={onDelete}\n />\n </MCardBody>\n </MCard>\n </MPopover>\n </>\n )\n}\n\nexport function MCalendarTimeline({\n date,\n events,\n locale: localeOverride,\n startHour = 0,\n endHour = 23,\n emptyStateText,\n overlapWarning = false,\n onAddEvent,\n addEventLabel,\n renderEventItem,\n renderEventMenu,\n onEventSelect,\n onEventEdit,\n onEventDelete,\n className,\n ...rest\n}: MCalendarTimelineProps) {\n const locale = useDocumentLocale(localeOverride)\n const texts = useMCalendarBoardTexts()\n const safeStart = Math.max(0, Math.min(startHour, HOURS_PER_DAY - 1))\n const safeEnd = Math.max(safeStart, Math.min(endHour, HOURS_PER_DAY - 1))\n const hours = Array.from({length: safeEnd - safeStart + 1}, (_, index) => safeStart + index)\n const allDayEvents = events.filter((event) => !event.startTime)\n const overlapIds = useMemo(\n () => (overlapWarning ? detectOverlaps(events) : new Set<string>()),\n [events, overlapWarning]\n )\n\n const allDayPanel = (\n <div className={'timeline allday-panel'}>\n {allDayEvents.length > 0 ? (\n <MStack spacing={'xs'}>\n {allDayEvents.map((event) =>\n renderEventItem ? (\n <div key={event.id}>{renderEventItem(event)}</div>\n ) : (\n <MCalendarEventItem\n key={event.id}\n event={event}\n locale={locale}\n currentDate={date}\n renderMenu={renderEventMenu}\n overlap={overlapIds.has(event.id)}\n onSelect={onEventSelect}\n onEdit={onEventEdit}\n onDelete={onEventDelete}\n />\n )\n )}\n </MStack>\n ) : (\n <MText size={'sm'} tone={'muted'}>\n {emptyStateText ?? texts.emptyStateText}\n </MText>\n )}\n </div>\n )\n\n const visibleStartMin = safeStart * MINUTES_PER_HOUR\n const visibleEndMin = (safeEnd + 1) * MINUTES_PER_HOUR\n const totalHeightPx = (safeEnd - safeStart + 1) * TIMELINE_HOUR_HEIGHT_PX\n\n const timedBlocks = useMemo(() => {\n const sorted = sortEventsByTime(events.filter((event) => Boolean(event.startTime)))\n type Block = {event: MCalendarEvent; start: number; end: number; column: number; columns: number}\n const blocks: Block[] = []\n\n sorted.forEach((event) => {\n const range = getEventMinuteRange(event)\n if (!range || range.end <= visibleStartMin || range.start >= visibleEndMin) {\n return\n }\n blocks.push({event, start: range.start, end: range.end, column: 0, columns: 1})\n })\n\n const lanes: number[] = []\n blocks.forEach((block) => {\n let assigned = -1\n for (let laneIndex = 0; laneIndex < lanes.length; laneIndex++) {\n if (lanes[laneIndex] <= block.start) {\n assigned = laneIndex\n lanes[laneIndex] = block.end\n break\n }\n }\n if (assigned === -1) {\n assigned = lanes.length\n lanes.push(block.end)\n }\n block.column = assigned\n })\n\n let clusterStart = 0\n while (clusterStart < blocks.length) {\n let clusterEnd = clusterStart\n let clusterMaxEnd = blocks[clusterStart].end\n while (clusterEnd + 1 < blocks.length && blocks[clusterEnd + 1].start < clusterMaxEnd) {\n clusterEnd++\n clusterMaxEnd = Math.max(clusterMaxEnd, blocks[clusterEnd].end)\n }\n let clusterColumns = 0\n for (let blockIndex = clusterStart; blockIndex <= clusterEnd; blockIndex++) {\n clusterColumns = Math.max(clusterColumns, blocks[blockIndex].column + 1)\n }\n for (let blockIndex = clusterStart; blockIndex <= clusterEnd; blockIndex++) {\n blocks[blockIndex].columns = clusterColumns\n }\n clusterStart = clusterEnd + 1\n }\n\n return blocks\n }, [events, visibleStartMin, visibleEndMin])\n\n const timelinePanel = (\n <div\n className={'timeline canvas'}\n style={{\n ['--timeline-hour-height' as string]: `${TIMELINE_HOUR_HEIGHT_PX}px`,\n height: `${totalHeightPx}px`,\n }}\n >\n <div className={'timeline rows'}>\n {hours.map((hour) => {\n const slotState = getTimelineSlotState(date, hour)\n const handleAdd = onAddEvent ? () => onAddEvent(date, hour) : undefined\n return (\n <div key={hour} className={cn('timeline row', slotState)}>\n <div className={'row time-cell'}>\n <span>{`${String(hour).padStart(2, '0')}:00`}</span>\n {handleAdd && (\n <button\n type={'button'}\n className={'row add'}\n aria-label={addEventLabel}\n title={addEventLabel}\n onClick={handleAdd}\n >\n <MPlusIcon size={12} />\n </button>\n )}\n </div>\n <div className={'row rail'} aria-hidden={'true'} />\n <div className={'row body'} aria-hidden={'true'} />\n </div>\n )\n })}\n </div>\n <div className={'timeline events'}>\n {timedBlocks.length === 0 ? (\n <div className={'timeline events-empty'}>\n <MText size={'sm'} tone={'muted'}>\n {emptyStateText ?? texts.timelineEmptyState}\n </MText>\n </div>\n ) : (\n timedBlocks.map((block) => {\n const startMin = Math.max(block.start, visibleStartMin) - visibleStartMin\n const endMin = Math.min(block.end, visibleEndMin) - visibleStartMin\n const top = (startMin / MINUTES_PER_HOUR) * TIMELINE_HOUR_HEIGHT_PX\n const height = Math.max(((endMin - startMin) / MINUTES_PER_HOUR) * TIMELINE_HOUR_HEIGHT_PX, 28)\n const left = block.column * (TIMELINE_CHIP_WIDTH_PX + TIMELINE_CHIP_GAP_PX)\n return (\n <div\n key={block.event.id}\n className={'timeline event-block'}\n style={{\n top: `${top}px`,\n height: `${height}px`,\n left: `${left}px`,\n width: `${TIMELINE_CHIP_WIDTH_PX}px`,\n }}\n >\n {renderEventItem ? (\n renderEventItem(block.event)\n ) : (\n <TimelineEventChip\n event={block.event}\n locale={locale}\n date={date}\n timeLabel={formatEventTime(block.event, texts)}\n overlap={overlapIds.has(block.event.id)}\n renderEventMenu={renderEventMenu}\n onSelect={onEventSelect}\n onEdit={onEventEdit}\n onDelete={onEventDelete}\n />\n )}\n </div>\n )\n })\n )}\n </div>\n </div>\n )\n\n return (\n <div className={cn('calendar timeline', className)} {...rest}>\n <MStack>\n <div className={'timeline header'}>\n <MHeading level={5}>{texts.timelineTitle}</MHeading>\n {overlapWarning && overlapIds.size > 0 && (\n <MBadge color={'warning'} size={'sm'}>\n <MWarningIcon size={12} /> Overlap\n </MBadge>\n )}\n </div>\n {allDayEvents.length > 0 ? (\n <MTabs\n className={'calendar timeline-tabs'}\n variant={'underline'}\n size={'sm'}\n fullWidth\n defaultValue={'timeline'}\n items={[\n {\n value: 'timeline',\n label: texts.timelineTab,\n content: timelinePanel,\n },\n {\n value: 'allday',\n label: `${texts.allDayTab} (${allDayEvents.length})`,\n content: allDayPanel,\n },\n ]}\n />\n ) : (\n timelinePanel\n )}\n </MStack>\n </div>\n )\n}\n\nfunction CalendarDetailsContent({\n date,\n events,\n locale,\n timelineStartHour,\n timelineEndHour,\n showTimeline,\n overlapWarning,\n emptyStateText,\n addEventLabel,\n dayMenuLabel,\n onAddEvent,\n renderDayMenu,\n onEventSelect,\n onEventEdit,\n onEventDelete,\n renderEventItem,\n renderEventMenu,\n}: CalendarDetailsContentProps) {\n const texts = useMCalendarBoardTexts()\n\n if (!date) {\n return null\n }\n\n const dayMenu = renderDayMenu?.(date, events) ?? buildDefaultDayMenu(onAddEvent, addEventLabel)\n\n return (\n <MStack>\n <div className={'calendar details header'}>\n <MStack spacing={'xs'}>\n <MHeading level={4}>{formatBoardDate(date, locale)}</MHeading>\n <MText tone={'muted'} size={'sm'}>\n {events.length > 0 ? texts.itemsCount(events.length) : emptyStateText}\n </MText>\n </MStack>\n {dayMenu.length > 0 && (\n <MDropdownMenu\n placement={'bottom-end'}\n trigger={\n <button\n type={'button'}\n className={'day-menu-trigger'}\n aria-label={dayMenuLabel ?? 'Day actions'}\n title={dayMenuLabel ?? 'Day actions'}\n >\n <MMenuIcon size={18} />\n </button>\n }\n >\n {dayMenu.map((item) =>\n item.href ? (\n <MDropdownItem\n key={item.id}\n icon={item.icon}\n label={item.label}\n href={item.href}\n color={item.color}\n disabled={item.disabled}\n />\n ) : (\n <MDropdownItem\n key={item.id}\n icon={item.icon}\n label={item.label}\n color={item.color}\n disabled={item.disabled}\n onClick={() => item.onSelect?.(date, events)}\n />\n )\n )}\n </MDropdownMenu>\n )}\n </div>\n {showTimeline ? (\n <MCalendarTimeline\n date={date}\n events={events}\n locale={locale}\n startHour={timelineStartHour}\n endHour={timelineEndHour}\n overlapWarning={overlapWarning}\n onAddEvent={onAddEvent}\n addEventLabel={addEventLabel}\n renderEventItem={renderEventItem}\n renderEventMenu={renderEventMenu}\n onEventSelect={onEventSelect}\n onEventEdit={onEventEdit}\n onEventDelete={onEventDelete}\n emptyStateText={emptyStateText}\n />\n ) : (\n <MCalendarEventList\n events={events}\n locale={locale}\n currentDate={date}\n emptyStateText={emptyStateText}\n overlapWarning={overlapWarning}\n renderEventItem={renderEventItem}\n renderEventMenu={renderEventMenu}\n onEventSelect={onEventSelect}\n onEventEdit={onEventEdit}\n onEventDelete={onEventDelete}\n />\n )}\n </MStack>\n )\n}\n\nexport function MCalendarEventPopover({\n open,\n anchorRef,\n onClose,\n date,\n events,\n locale: localeOverride,\n timelineStartHour = 0,\n timelineEndHour = 23,\n showTimeline = true,\n emptyStateText,\n overlapWarning = false,\n onAddEvent,\n addEventLabel,\n dayMenuLabel,\n onEventSelect,\n onEventEdit,\n onEventDelete,\n renderEventItem,\n renderEventMenu,\n renderDayMenu,\n className,\n style,\n}: MCalendarEventPopoverProps) {\n const locale = useDocumentLocale(localeOverride)\n const texts = useMCalendarBoardTexts()\n\n return (\n <>\n {open && (\n <MPortal>\n <div\n className={'calendar popover-shield'}\n onMouseDown={(event) => {\n event.preventDefault()\n event.stopPropagation()\n onClose()\n }}\n onClick={(event) => {\n event.preventDefault()\n event.stopPropagation()\n }}\n aria-hidden={'true'}\n />\n </MPortal>\n )}\n <MPopover\n open={open}\n anchorRef={anchorRef}\n onClose={onClose}\n placement={'bottom-start'}\n className={cn('calendar popover', className)}\n style={style}\n >\n <MCard className={'calendar event-popover'}>\n <MCardBody>\n <div className={'calendar popover-scroll'}>\n <CalendarDetailsContent\n date={date}\n events={events}\n locale={locale}\n timelineStartHour={timelineStartHour}\n timelineEndHour={timelineEndHour}\n showTimeline={showTimeline}\n overlapWarning={overlapWarning}\n emptyStateText={emptyStateText ?? texts.emptyStateText}\n addEventLabel={addEventLabel}\n dayMenuLabel={dayMenuLabel}\n onAddEvent={onAddEvent}\n renderDayMenu={renderDayMenu}\n onEventSelect={onEventSelect}\n onEventEdit={onEventEdit}\n onEventDelete={onEventDelete}\n renderEventItem={renderEventItem}\n renderEventMenu={renderEventMenu}\n />\n </div>\n </MCardBody>\n </MCard>\n </MPopover>\n </>\n )\n}\n\nexport function MCalendarBoard({\n month,\n defaultMonth,\n onMonthChange,\n events = [],\n locale: localeOverride,\n weekStartsOn = 1,\n view,\n defaultView = 'month',\n views = ['month', 'week'],\n onViewChange,\n selectedDate,\n defaultSelectedDate,\n onDayClick,\n dayBadge,\n renderDayCell,\n renderEventItem,\n renderEventMenu,\n detailsMode = 'auto',\n showTimeline = true,\n showHourBar = true,\n timelineStartHour = 0,\n timelineEndHour = 23,\n overlapWarning = false,\n onAddEvent,\n addEventLabel = 'Add event',\n dayMenuLabel,\n renderDayMenu,\n onEventSelect,\n onEventEdit,\n onEventDelete,\n emptyStateText,\n filters = [],\n activeFilters,\n defaultActiveFilters = [],\n onActiveFiltersChange,\n fullWidth = false,\n className,\n ...rest\n}: MCalendarBoardProps) {\n const locale = useDocumentLocale(localeOverride)\n const datePickerTexts = useMDatePickerTexts()\n const texts = useMCalendarBoardTexts()\n const today = stripTime(new Date())\n const [internalMonth, setInternalMonth] = useState(stripTime(defaultMonth ?? month ?? today))\n const [internalView, setInternalView] = useState<MCalendarBoardView>(defaultView)\n const [internalSelectedDate, setInternalSelectedDate] = useState<Date | null>(normalizeDate(defaultSelectedDate))\n const [internalActiveFilters, setInternalActiveFilters] = useState<string[]>(defaultActiveFilters)\n const [activeDate, setActiveDate] = useState<Date | null>(null)\n const [detailsOpen, setDetailsOpen] = useState(false)\n const [isCompact, setIsCompact] = useState(false)\n const activeAnchorRef = useRef<HTMLElement | null>(null)\n\n const isMonthControlled = month !== undefined && typeof onMonthChange === 'function'\n const visibleMonth = stripTime(isMonthControlled ? (month ?? internalMonth) : internalMonth)\n const currentView = view ?? internalView\n const resolvedSelectedDate = normalizeDate(selectedDate) ?? internalSelectedDate\n const resolvedActiveFilters = activeFilters ?? internalActiveFilters\n\n useEffect(() => {\n const mediaQuery = window.matchMedia(`(max-width: ${MBreakpoints.md}px)`)\n const updateCompactState = () => setIsCompact(mediaQuery.matches)\n\n updateCompactState()\n mediaQuery.addEventListener('change', updateCompactState)\n\n return () => mediaQuery.removeEventListener('change', updateCompactState)\n }, [])\n\n useEffect(() => {\n if (isMonthControlled && month) {\n setInternalMonth(stripTime(month))\n }\n }, [isMonthControlled, month])\n\n useEffect(() => {\n if (view) {\n setInternalView(view)\n }\n }, [view])\n\n useEffect(() => {\n if (selectedDate !== undefined) {\n setInternalSelectedDate(normalizeDate(selectedDate))\n }\n }, [selectedDate])\n\n const filteredEvents = useMemo(\n () => applyCalendarFilters(events, filters, resolvedActiveFilters),\n [events, filters, resolvedActiveFilters]\n )\n\n const eventsByDay = useMemo(() => {\n const nextMap = new Map<string, MCalendarEvent[]>()\n\n filteredEvents.forEach((event) => {\n const eventDate = getEventDate(event)\n if (!eventDate) {\n return\n }\n\n const key = getDateKey(eventDate)\n const currentEvents = nextMap.get(key) ?? []\n currentEvents.push(event)\n nextMap.set(key, currentEvents)\n })\n\n return nextMap\n }, [filteredEvents])\n\n const calendarDays = useMemo(() => {\n if (currentView === 'week') {\n const baseDate = resolvedSelectedDate ?? visibleMonth\n const weekStart = startOfWeek(baseDate, weekStartsOn)\n return Array.from({length: 7}, (_, index) => addDays(weekStart, index))\n }\n\n return buildMonthGrid(visibleMonth, weekStartsOn)\n }, [currentView, resolvedSelectedDate, visibleMonth, weekStartsOn])\n\n const effectiveDetailsMode: MCalendarDetailsMode =\n detailsMode === 'auto' ? (isCompact ? 'modal' : 'popover') : detailsMode\n const activeEvents = activeDate ? (eventsByDay.get(getDateKey(activeDate)) ?? []) : []\n const canShowMonthView = views.includes('month')\n const canShowWeekView = views.includes('week')\n\n const setMonthAndNotify = (nextMonth: Date) => {\n const normalizedMonth = stripTime(nextMonth)\n setInternalMonth(normalizedMonth)\n onMonthChange?.(normalizedMonth)\n }\n\n const navigateBy = (amount: number) => {\n if (currentView === 'week') {\n const nextAnchor = addDays(resolvedSelectedDate ?? visibleMonth, amount * 7)\n setMonthAndNotify(nextAnchor)\n setInternalSelectedDate(nextAnchor)\n setActiveDate(nextAnchor)\n setDetailsOpen(false)\n return\n }\n\n const nextMonth = new Date(visibleMonth.getFullYear(), visibleMonth.getMonth() + amount, 1)\n setMonthAndNotify(nextMonth)\n setDetailsOpen(false)\n setActiveDate(null)\n }\n\n const setViewAndNotify = (nextView: MCalendarBoardView) => {\n setInternalView(nextView)\n onViewChange?.(nextView)\n }\n\n const setSelectedDateAndNotify = (nextDate: Date, dayEvents: MCalendarEvent[]) => {\n const normalizedDate = stripTime(nextDate)\n setInternalSelectedDate(normalizedDate)\n onDayClick?.(normalizedDate, dayEvents)\n }\n\n const openDetails = (date: Date, target: HTMLElement, dayEvents: MCalendarEvent[]) => {\n activeAnchorRef.current = target\n setActiveDate(date)\n setSelectedDateAndNotify(date, dayEvents)\n setDetailsOpen(true)\n }\n\n const handleDayInteract = (date: Date, target: HTMLElement, dayEvents: MCalendarEvent[]) => {\n openDetails(date, target, dayEvents)\n\n if (currentView === 'month' && date.getMonth() !== visibleMonth.getMonth()) {\n setMonthAndNotify(new Date(date.getFullYear(), date.getMonth(), 1))\n }\n }\n\n const handleFilterToggle = (filterId: string) => {\n const nextFilters = resolvedActiveFilters.includes(filterId)\n ? resolvedActiveFilters.filter((id) => id !== filterId)\n : [...resolvedActiveFilters, filterId]\n\n setInternalActiveFilters(nextFilters)\n onActiveFiltersChange?.(nextFilters)\n }\n\n const dayNameBase = startOfWeek(\n currentView === 'week' ? (resolvedSelectedDate ?? visibleMonth) : visibleMonth,\n weekStartsOn\n )\n\n return (\n <div className={cn('calendar board', fullWidth && 'full-width', className)} {...rest}>\n <div className={'calendar header'}>\n <MStack>\n <MHeading level={3}>{getViewTitle(visibleMonth, currentView, locale, weekStartsOn)}</MHeading>\n <MText size={'sm'} tone={'muted'}>\n {getViewSubtitle(currentView, texts)}\n </MText>\n </MStack>\n <MStack align={'end'}>\n <div className={'calendar actions'}>\n <MButton\n type={'button'}\n size={'sm'}\n variant={'outlined'}\n color={'neutral'}\n onClick={() => navigateBy(-1)}\n >\n {currentView === 'week' ? texts.previousWeek : datePickerTexts.previousMonth}\n </MButton>\n <MButton\n type={'button'}\n size={'sm'}\n variant={'outlined'}\n color={'neutral'}\n onClick={() => navigateBy(1)}\n >\n {currentView === 'week' ? texts.nextWeek : datePickerTexts.nextMonth}\n </MButton>\n </div>\n {(canShowMonthView || canShowWeekView) && (\n <div className={'calendar views'}>\n {canShowMonthView && (\n <MButton\n type={'button'}\n size={'sm'}\n variant=\"outlined\"\n color={currentView === 'month' ? 'primary' : 'neutral'}\n active={currentView === 'month'}\n onClick={() => setViewAndNotify('month')}\n >\n {texts.monthView}\n </MButton>\n )}\n {canShowWeekView && (\n <MButton\n type={'button'}\n size={'sm'}\n variant=\"outlined\"\n color={currentView === 'week' ? 'primary' : 'neutral'}\n active={currentView === 'week'}\n onClick={() => setViewAndNotify('week')}\n >\n {texts.weekView}\n </MButton>\n )}\n </div>\n )}\n </MStack>\n </div>\n\n <CalendarFilters filters={filters} activeFilterIds={resolvedActiveFilters} onToggle={handleFilterToggle} />\n\n <div className={'calendar days'}>\n {Array.from({length: 7}, (_, index) => addDays(dayNameBase, index)).map((day) => (\n <div key={getDateKey(day)} className={'calendar day'}>\n {new Intl.DateTimeFormat(locale, {weekday: 'short'}).format(day)}\n </div>\n ))}\n </div>\n\n {currentView === 'week' ? (\n <CalendarWeekView\n days={calendarDays}\n eventsByDay={eventsByDay}\n selectedDate={resolvedSelectedDate}\n activeDate={activeDate}\n onDayInteract={handleDayInteract}\n dayBadge={dayBadge}\n renderDayCell={renderDayCell}\n showHourBar={showHourBar}\n overlapWarning={overlapWarning}\n onAddEvent={onAddEvent}\n addEventLabel={addEventLabel}\n />\n ) : (\n <div className={'calendar grid'}>\n {calendarDays.map((day) => {\n const dayKey = getDateKey(day)\n const dayEvents = eventsByDay.get(dayKey) ?? []\n const badge =\n dayBadge?.(day, dayEvents) ??\n (dayEvents.length > 0 ? <MBadge size={'sm'}>{dayEvents.length}</MBadge> : null)\n const isToday = dayKey === getDateKey(today)\n const isSelected = Boolean(resolvedSelectedDate && dayKey === getDateKey(resolvedSelectedDate))\n const isOutsideMonth = day.getMonth() !== visibleMonth.getMonth()\n const context = {\n date: day,\n events: dayEvents,\n badge,\n isToday,\n isSelected,\n isOutsideMonth,\n }\n\n return (\n <MCalendarDayCell\n key={dayKey}\n date={day}\n events={dayEvents}\n badge={badge}\n isToday={isToday}\n isSelected={isSelected || Boolean(activeDate && dayKey === getDateKey(activeDate))}\n isOutsideMonth={isOutsideMonth}\n showHourBar={showHourBar}\n overlapWarning={overlapWarning}\n onAddEvent={onAddEvent ? (target) => onAddEvent(target) : undefined}\n addEventLabel={addEventLabel}\n onClick={(event) => handleDayInteract(day, event.currentTarget, dayEvents)}\n >\n {renderDayCell ? renderDayCell(day, context) : undefined}\n </MCalendarDayCell>\n )\n })}\n </div>\n )}\n\n {effectiveDetailsMode === 'popover' ? (\n <MCalendarEventPopover\n open={detailsOpen && Boolean(activeDate) && Boolean(activeAnchorRef.current)}\n anchorRef={activeAnchorRef as RefObject<HTMLElement | null>}\n onClose={() => setDetailsOpen(false)}\n date={activeDate}\n events={activeEvents}\n locale={locale}\n timelineStartHour={timelineStartHour}\n timelineEndHour={timelineEndHour}\n showTimeline={showTimeline}\n overlapWarning={overlapWarning}\n onAddEvent={onAddEvent}\n addEventLabel={addEventLabel}\n dayMenuLabel={dayMenuLabel}\n renderDayMenu={renderDayMenu}\n onEventSelect={onEventSelect}\n onEventEdit={onEventEdit}\n onEventDelete={onEventDelete}\n emptyStateText={emptyStateText ?? texts.emptyStateText}\n renderEventItem={renderEventItem}\n renderEventMenu={renderEventMenu}\n />\n ) : (\n <MModal open={detailsOpen && Boolean(activeDate)} onClose={() => setDetailsOpen(false)} size={'lg'}>\n <div className={'calendar popover-scroll'}>\n <CalendarDetailsContent\n date={activeDate}\n events={activeEvents}\n locale={locale}\n timelineStartHour={timelineStartHour}\n timelineEndHour={timelineEndHour}\n showTimeline={showTimeline}\n overlapWarning={overlapWarning}\n emptyStateText={emptyStateText ?? texts.emptyStateText}\n addEventLabel={addEventLabel}\n dayMenuLabel={dayMenuLabel}\n onAddEvent={onAddEvent}\n renderDayMenu={renderDayMenu}\n onEventSelect={onEventSelect}\n onEventEdit={onEventEdit}\n onEventDelete={onEventDelete}\n renderEventItem={renderEventItem}\n renderEventMenu={renderEventMenu}\n />\n </div>\n </MModal>\n )}\n </div>\n )\n}\n","import type {HTMLAttributes, ReactNode} from 'react'\nimport type {MColor} from '../../../theme/MTheme.types'\n\nexport type MChartType = 'line' | 'bar' | 'area' | 'pie'\n\nexport interface MChartDataset {\n label: string\n data: number[]\n color?: MColor\n}\n\nexport interface MChartAxisConfig {\n labels?: string[]\n min?: number\n max?: number\n ticks?: number\n formatter?: (value: number) => string\n title?: string\n}\n\nexport interface MChartProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n type: MChartType\n data: MChartDataset[]\n width?: number | string\n height?: number\n aspectRatio?: number\n xAxis?: MChartAxisConfig\n yAxis?: MChartAxisConfig\n showGrid?: boolean\n showXAxis?: boolean\n showYAxis?: boolean\n showLegend?: boolean\n showTooltip?: boolean\n animated?: boolean\n stacked?: boolean\n curved?: boolean\n donut?: boolean\n donutWidth?: number\n valueFormatter?: (value: number) => string\n labelFormatter?: (label: string) => string\n onDataClick?: (datasetIndex: number, dataIndex: number, value: number) => void\n}\n\nexport interface MChartTooltipData {\n label: string\n items: {name: string; value: number; color: MColor}[]\n x: number\n y: number\n}\n\nexport const CHART_DEFAULT_COLORS: MColor[] = [\n 'primary',\n 'info',\n 'success',\n 'warning',\n 'error',\n 'news',\n 'neutral',\n 'dark',\n]\n\n/* ── Per-type public prop interfaces ── */\n\ninterface MChartBaseProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n data: MChartDataset[]\n width?: number | string\n height?: number\n aspectRatio?: number\n xAxis?: MChartAxisConfig\n showLegend?: boolean\n showTooltip?: boolean\n animated?: boolean\n valueFormatter?: (value: number) => string\n labelFormatter?: (label: string) => string\n onDataClick?: (datasetIndex: number, dataIndex: number, value: number) => void\n}\n\ninterface MCartesianChartProps extends MChartBaseProps {\n yAxis?: MChartAxisConfig\n showGrid?: boolean\n showXAxis?: boolean\n showYAxis?: boolean\n}\n\nexport interface MLineChartProps extends MCartesianChartProps {\n curved?: boolean\n}\n\nexport interface MBarChartProps extends MCartesianChartProps {\n stacked?: boolean\n}\n\nexport interface MAreaChartProps extends MCartesianChartProps {\n curved?: boolean\n stacked?: boolean\n}\n\nexport interface MPieChartProps extends MChartBaseProps {\n donut?: boolean\n donutWidth?: number\n}\n\nexport const CHART_PADDING = {top: 20, right: 20, bottom: 40, left: 50}\nexport const CHART_PADDING_WITH_TITLE = {top: 20, right: 20, bottom: 55, left: 65}\n","export function defaultValueFormatter(value: number): string {\n if (Math.abs(value) >= 1_000_000) {\n return (value / 1_000_000).toFixed(1).replace(/\\.0$/, '') + 'M'\n }\n if (Math.abs(value) >= 1_000) {\n return (value / 1_000).toFixed(1).replace(/\\.0$/, '') + 'k'\n }\n if (Number.isInteger(value)) return String(value)\n return value.toFixed(1)\n}\n\nexport function defaultLabelFormatter(label: string): string {\n return label\n}\n\nexport function percentFormatter(value: number): string {\n return value.toFixed(0) + '%'\n}\n","interface ChartGridProps {\n x: number\n y: number\n width: number\n height: number\n horizontalLines: number[]\n verticalLines?: number[]\n}\n\nexport function ChartGrid({x, y, width, height, horizontalLines, verticalLines}: ChartGridProps) {\n return (\n <g className=\"chart-grid\">\n {horizontalLines.map((ly, i) => (\n <line key={`h${i}`} x1={x} y1={ly} x2={x + width} y2={ly} className=\"chart-grid-line\" />\n ))}\n {verticalLines?.map((lx, i) => (\n <line\n key={`v${i}`}\n x1={lx}\n y1={y}\n x2={lx}\n y2={y + height}\n className=\"chart-grid-line chart-grid-line-vertical\"\n />\n ))}\n </g>\n )\n}\n","interface ChartAxisProps {\n type: 'x' | 'y'\n x: number\n y: number\n length: number\n ticks: {position: number; label: string}[]\n title?: string\n}\n\nexport function ChartAxis({type, x, y, length, ticks, title}: ChartAxisProps) {\n const isX = type === 'x'\n\n return (\n <g className={`chart-axis chart-axis-${type}`}>\n <line x1={x} y1={y} x2={isX ? x + length : x} y2={isX ? y : y - length} className=\"chart-axis-line\" />\n {ticks.map((tick, i) => (\n <g key={i}>\n {isX ? (\n <text x={tick.position} y={y + 16} textAnchor=\"middle\" className=\"chart-axis-label\">\n {tick.label}\n </text>\n ) : (\n <text\n x={x - 8}\n y={tick.position}\n textAnchor=\"end\"\n dominantBaseline=\"middle\"\n className=\"chart-axis-label\"\n >\n {tick.label}\n </text>\n )}\n </g>\n ))}\n {title &&\n (isX ? (\n <text x={x + length / 2} y={y + 36} textAnchor=\"middle\" className=\"chart-axis-title\">\n {title}\n </text>\n ) : (\n <text\n x={x - 40}\n y={y - length / 2}\n textAnchor=\"middle\"\n dominantBaseline=\"middle\"\n transform={`rotate(-90, ${x - 40}, ${y - length / 2})`}\n className=\"chart-axis-title\"\n >\n {title}\n </text>\n ))}\n </g>\n )\n}\n","import {useMemo, useCallback, useState} from 'react'\nimport type {MChartDataset, MChartTooltipData} from '../MChart.types'\nimport type {MColor} from '../../../../theme/MTheme.types'\nimport {createLinearScale, generateTicks, getDataExtent, niceMin, niceMax} from '../utils/scales'\nimport {linePath, curvedPath} from '../utils/paths'\nimport type {Point} from '../utils/paths'\nimport {defaultValueFormatter} from '../utils/formats'\nimport {ChartGrid} from '../parts/ChartGrid'\nimport {ChartAxis} from '../parts/ChartAxis'\nimport type {MChartAxisConfig} from '../MChart.types'\n\ninterface MLineChartProps {\n data: MChartDataset[]\n colors: MColor[]\n innerWidth: number\n innerHeight: number\n padding: {top: number; right: number; bottom: number; left: number}\n xAxis?: MChartAxisConfig\n yAxis?: MChartAxisConfig\n showGrid: boolean\n showXAxis: boolean\n showYAxis: boolean\n curved: boolean\n animated: boolean\n valueFormatter: (value: number) => string\n onTooltip: (data: MChartTooltipData | null) => void\n onDataClick?: (datasetIndex: number, dataIndex: number, value: number) => void\n}\n\nexport function MLineChart({\n data,\n colors,\n innerWidth,\n innerHeight,\n padding,\n xAxis,\n yAxis,\n showGrid,\n showXAxis,\n showYAxis,\n curved,\n animated,\n valueFormatter = defaultValueFormatter,\n onTooltip,\n onDataClick,\n}: MLineChartProps) {\n const [hoveredIndex, setHoveredIndex] = useState<number | null>(null)\n\n const plotW = innerWidth - padding.left - padding.right\n const plotH = innerHeight - padding.top - padding.bottom\n\n const {yMin, yMax, yTicks, xLabels, seriesPoints} = useMemo(() => {\n const allData = data.map((d) => d.data)\n const [rawMin, rawMax] = getDataExtent(allData)\n const min = yAxis?.min ?? niceMin(rawMin)\n const max = yAxis?.max ?? niceMax(rawMax, rawMin)\n const ticks = generateTicks(min, max, yAxis?.ticks ?? 5)\n const maxLen = Math.max(...allData.map((d) => d.length), 1)\n const labels = xAxis?.labels ?? Array.from({length: maxLen}, (_, i) => String(i))\n\n const xScale = createLinearScale([0, Math.max(maxLen - 1, 1)], [0, plotW])\n const yScale = createLinearScale([min, max], [plotH, 0])\n\n const pts = allData.map((series) => series.map((v, i): Point => ({x: xScale(i), y: yScale(v)})))\n\n return {yMin: min, yMax: max, yTicks: ticks, xLabels: labels, seriesPoints: pts}\n }, [data, plotW, plotH, xAxis, yAxis])\n\n const yScale = createLinearScale([yMin, yMax], [plotH, 0])\n const xScale = createLinearScale([0, Math.max(xLabels.length - 1, 1)], [0, plotW])\n\n const handleMouseMove = useCallback(\n (e: React.MouseEvent<SVGGElement>) => {\n const svg = e.currentTarget.closest('svg')\n if (!svg) return\n const rect = svg.getBoundingClientRect()\n const scale = innerWidth / rect.width\n const mx = (e.clientX - rect.left) * scale - padding.left\n const idx = Math.round((mx / plotW) * Math.max(xLabels.length - 1, 1))\n const clampedIdx = Math.max(0, Math.min(idx, xLabels.length - 1))\n\n setHoveredIndex(clampedIdx)\n onTooltip({\n label: xLabels[clampedIdx],\n items: data.map((ds, di) => ({\n name: ds.label,\n value: ds.data[clampedIdx] ?? 0,\n color: ds.color ?? colors[di % colors.length],\n })),\n x: e.clientX - rect.left,\n y: e.clientY - rect.top,\n })\n },\n [data, colors, xLabels, plotW, padding.left, innerWidth, onTooltip]\n )\n\n const handleMouseLeave = useCallback(() => {\n setHoveredIndex(null)\n onTooltip(null)\n }, [onTooltip])\n\n const gridH = yTicks.map((t) => padding.top + yScale(t))\n const xTickPositions = xLabels.map((_, i) => padding.left + xScale(i))\n const yTickData = yTicks.map((t) => ({\n position: padding.top + yScale(t),\n label: (yAxis?.formatter ?? valueFormatter)(t),\n }))\n const xTickData = xLabels.map((l, i) => ({\n position: padding.left + xScale(i),\n label: l,\n }))\n\n return (\n <g>\n {showGrid && (\n <ChartGrid\n x={padding.left}\n y={padding.top}\n width={plotW}\n height={plotH}\n horizontalLines={gridH}\n verticalLines={xTickPositions}\n />\n )}\n {showYAxis && (\n <ChartAxis\n type=\"y\"\n x={padding.left}\n y={padding.top + plotH}\n length={plotH}\n ticks={yTickData}\n title={yAxis?.title}\n />\n )}\n {showXAxis && (\n <ChartAxis\n type=\"x\"\n x={padding.left}\n y={padding.top + plotH}\n length={plotW}\n ticks={xTickData}\n title={xAxis?.title}\n />\n )}\n <g onMouseMove={handleMouseMove} onMouseLeave={handleMouseLeave}>\n <rect x={padding.left} y={padding.top} width={plotW} height={plotH} fill=\"transparent\" />\n {seriesPoints.map((pts, di) => {\n const c = data[di].color ?? colors[di % colors.length]\n const d = curved\n ? curvedPath(pts.map((p) => ({x: p.x + padding.left, y: p.y + padding.top})))\n : linePath(pts.map((p) => ({x: p.x + padding.left, y: p.y + padding.top})))\n return (\n <g key={di}>\n <path className={`chart-line ${c} ${animated ? 'animated' : ''}`} d={d} />\n {pts.map((p, pi) => (\n <circle\n key={pi}\n className={`chart-dot ${c} ${hoveredIndex === pi ? 'active' : ''}`}\n cx={p.x + padding.left}\n cy={p.y + padding.top}\n r={hoveredIndex === pi ? 5 : 3}\n onClick={() => onDataClick?.(di, pi, data[di].data[pi])}\n style={{cursor: onDataClick ? 'pointer' : undefined}}\n />\n ))}\n </g>\n )\n })}\n {hoveredIndex !== null && (\n <line\n className=\"chart-crosshair\"\n x1={padding.left + xScale(hoveredIndex)}\n y1={padding.top}\n x2={padding.left + xScale(hoveredIndex)}\n y2={padding.top + plotH}\n />\n )}\n </g>\n </g>\n )\n}\n","import {useMemo, useCallback, useState} from 'react'\nimport type {MChartDataset, MChartTooltipData, MChartAxisConfig} from '../MChart.types'\nimport type {MColor} from '../../../../theme/MTheme.types'\nimport {createLinearScale, generateTicks, getDataExtent, getStackedExtent, niceMin, niceMax} from '../utils/scales'\nimport {defaultValueFormatter} from '../utils/formats'\nimport {ChartGrid} from '../parts/ChartGrid'\nimport {ChartAxis} from '../parts/ChartAxis'\n\ninterface MBarChartProps {\n data: MChartDataset[]\n colors: MColor[]\n innerWidth: number\n innerHeight: number\n padding: {top: number; right: number; bottom: number; left: number}\n xAxis?: MChartAxisConfig\n yAxis?: MChartAxisConfig\n showGrid: boolean\n showXAxis: boolean\n showYAxis: boolean\n stacked: boolean\n animated: boolean\n valueFormatter: (value: number) => string\n onTooltip: (data: MChartTooltipData | null) => void\n onDataClick?: (datasetIndex: number, dataIndex: number, value: number) => void\n}\n\nexport function MBarChart({\n data,\n colors,\n innerWidth,\n innerHeight,\n padding,\n xAxis,\n yAxis,\n showGrid,\n showXAxis,\n showYAxis,\n stacked,\n animated,\n valueFormatter = defaultValueFormatter,\n onTooltip,\n onDataClick,\n}: MBarChartProps) {\n const [hoveredBar, setHoveredBar] = useState<{di: number; pi: number} | null>(null)\n\n const plotW = innerWidth - padding.left - padding.right\n const plotH = innerHeight - padding.top - padding.bottom\n\n const {yMin, yMax, yTicks, xLabels, maxLen} = useMemo(() => {\n const allData = data.map((d) => d.data)\n const mLen = Math.max(...allData.map((d) => d.length), 1)\n\n let rawMin: number, rawMax: number\n if (stacked) {\n ;[rawMin, rawMax] = getStackedExtent(allData)\n } else {\n ;[rawMin, rawMax] = getDataExtent(allData)\n }\n\n const min = yAxis?.min ?? niceMin(rawMin)\n const max = yAxis?.max ?? niceMax(rawMax, rawMin)\n const ticks = generateTicks(min, max, yAxis?.ticks ?? 5)\n const labels = xAxis?.labels ?? Array.from({length: mLen}, (_, i) => String(i))\n\n return {yMin: min, yMax: max, yTicks: ticks, xLabels: labels, maxLen: mLen}\n }, [data, xAxis, yAxis, stacked])\n\n const yScale = createLinearScale([yMin, yMax], [plotH, 0])\n const groupWidth = plotW / maxLen\n const barGap = Math.max(groupWidth * 0.1, 2)\n const seriesCount = data.length\n\n const handleBarEnter = useCallback(\n (di: number, pi: number, e: React.MouseEvent) => {\n setHoveredBar({di, pi})\n const svg = e.currentTarget.closest('svg')\n if (!svg) return\n const rect = svg.getBoundingClientRect()\n onTooltip({\n label: xLabels[pi],\n items: stacked\n ? data.map((ds, dsi) => ({\n name: ds.label,\n value: ds.data[pi] ?? 0,\n color: ds.color ?? colors[dsi % colors.length],\n }))\n : [\n {\n name: data[di].label,\n value: data[di].data[pi],\n color: data[di].color ?? colors[di % colors.length],\n },\n ],\n x: e.clientX - rect.left,\n y: e.clientY - rect.top,\n })\n },\n [data, colors, xLabels, stacked, onTooltip]\n )\n\n const handleMouseLeave = useCallback(() => {\n setHoveredBar(null)\n onTooltip(null)\n }, [onTooltip])\n\n const gridH = yTicks.map((t) => padding.top + yScale(t))\n const xTickData = xLabels.map((l, i) => ({\n position: padding.left + groupWidth * i + groupWidth / 2,\n label: l,\n }))\n const yTickData = yTicks.map((t) => ({\n position: padding.top + yScale(t),\n label: (yAxis?.formatter ?? valueFormatter)(t),\n }))\n\n const baselineY = yScale(0)\n\n return (\n <g>\n {showGrid && (\n <ChartGrid x={padding.left} y={padding.top} width={plotW} height={plotH} horizontalLines={gridH} />\n )}\n {showYAxis && (\n <ChartAxis\n type=\"y\"\n x={padding.left}\n y={padding.top + plotH}\n length={plotH}\n ticks={yTickData}\n title={yAxis?.title}\n />\n )}\n {showXAxis && (\n <ChartAxis\n type=\"x\"\n x={padding.left}\n y={padding.top + plotH}\n length={plotW}\n ticks={xTickData}\n title={xAxis?.title}\n />\n )}\n <g onMouseLeave={handleMouseLeave}>\n {stacked\n ? xLabels.map((_, pi) => {\n let cumY = baselineY\n const barW = groupWidth - barGap * 2\n const x = padding.left + groupWidth * pi + barGap\n\n return (\n <g key={pi}>\n {data.map((ds, di) => {\n const v = ds.data[pi] ?? 0\n const barH = baselineY - yScale(v)\n const y = cumY - barH\n cumY = y\n const c = ds.color ?? colors[di % colors.length]\n const isHovered = hoveredBar?.di === di && hoveredBar?.pi === pi\n return (\n <rect\n key={di}\n className={`chart-bar ${c} ${animated ? 'animated' : ''} ${isHovered ? 'active' : ''}`}\n x={x}\n y={padding.top + y}\n width={Math.max(barW, 1)}\n height={Math.max(barH, 0)}\n rx={di === data.length - 1 ? 3 : 0}\n onMouseEnter={(e) => handleBarEnter(di, pi, e)}\n onClick={() => onDataClick?.(di, pi, v)}\n style={{cursor: onDataClick ? 'pointer' : undefined}}\n />\n )\n })}\n </g>\n )\n })\n : data.map((ds, di) => {\n const barW = (groupWidth - barGap * 2) / seriesCount\n return (\n <g key={di}>\n {ds.data.map((v, pi) => {\n const barH = baselineY - yScale(v)\n const x = padding.left + groupWidth * pi + barGap + barW * di\n const y = Math.min(baselineY, yScale(v))\n const c = ds.color ?? colors[di % colors.length]\n const isHovered = hoveredBar?.di === di && hoveredBar?.pi === pi\n return (\n <rect\n key={pi}\n className={`chart-bar ${c} ${animated ? 'animated' : ''} ${isHovered ? 'active' : ''}`}\n x={x}\n y={padding.top + y}\n width={Math.max(barW, 1)}\n height={Math.max(Math.abs(barH), 0)}\n rx={3}\n onMouseEnter={(e) => handleBarEnter(di, pi, e)}\n onClick={() => onDataClick?.(di, pi, v)}\n style={{cursor: onDataClick ? 'pointer' : undefined}}\n />\n )\n })}\n </g>\n )\n })}\n </g>\n </g>\n )\n}\n","import {useMemo, useCallback, useState} from 'react'\nimport type {MChartDataset, MChartTooltipData, MChartAxisConfig} from '../MChart.types'\nimport type {MColor} from '../../../../theme/MTheme.types'\nimport {createLinearScale, generateTicks, getDataExtent, getStackedExtent, niceMin, niceMax} from '../utils/scales'\nimport {linePath, curvedPath, areaPath, stackedAreaPath} from '../utils/paths'\nimport type {Point} from '../utils/paths'\nimport {defaultValueFormatter} from '../utils/formats'\nimport {ChartGrid} from '../parts/ChartGrid'\nimport {ChartAxis} from '../parts/ChartAxis'\n\ninterface MAreaChartProps {\n data: MChartDataset[]\n colors: MColor[]\n innerWidth: number\n innerHeight: number\n padding: {top: number; right: number; bottom: number; left: number}\n xAxis?: MChartAxisConfig\n yAxis?: MChartAxisConfig\n showGrid: boolean\n showXAxis: boolean\n showYAxis: boolean\n curved: boolean\n stacked: boolean\n animated: boolean\n valueFormatter: (value: number) => string\n onTooltip: (data: MChartTooltipData | null) => void\n onDataClick?: (datasetIndex: number, dataIndex: number, value: number) => void\n}\n\nexport function MAreaChart({\n data,\n colors,\n innerWidth,\n innerHeight,\n padding,\n xAxis,\n yAxis,\n showGrid,\n showXAxis,\n showYAxis,\n curved,\n stacked,\n animated,\n valueFormatter = defaultValueFormatter,\n onTooltip,\n onDataClick,\n}: MAreaChartProps) {\n const [hoveredIndex, setHoveredIndex] = useState<number | null>(null)\n\n const plotW = innerWidth - padding.left - padding.right\n const plotH = innerHeight - padding.top - padding.bottom\n\n const {yMin, yMax, yTicks, xLabels, seriesPoints, stackedPaths} = useMemo(() => {\n const allData = data.map((d) => d.data)\n const maxLen = Math.max(...allData.map((d) => d.length), 1)\n\n let rawMin: number, rawMax: number\n if (stacked) {\n ;[rawMin, rawMax] = getStackedExtent(allData)\n } else {\n ;[rawMin, rawMax] = getDataExtent(allData)\n }\n\n const min = yAxis?.min ?? niceMin(rawMin)\n const max = yAxis?.max ?? niceMax(rawMax, rawMin)\n const ticks = generateTicks(min, max, yAxis?.ticks ?? 5)\n const labels = xAxis?.labels ?? Array.from({length: maxLen}, (_, i) => String(i))\n\n const xScale = createLinearScale([0, Math.max(maxLen - 1, 1)], [0, plotW])\n const yScale = createLinearScale([min, max], [plotH, 0])\n\n if (stacked) {\n const cumulative: number[][] = []\n for (let i = 0; i < allData.length; i++) {\n cumulative[i] = []\n for (let j = 0; j < maxLen; j++) {\n cumulative[i][j] = (allData[i][j] ?? 0) + (i > 0 ? cumulative[i - 1][j] : 0)\n }\n }\n\n const sPaths = cumulative.map((series, di) => {\n const topPts: Point[] = series.map((v, j) => ({\n x: padding.left + xScale(j),\n y: padding.top + yScale(v),\n }))\n const bottomPts: Point[] =\n di === 0\n ? series.map((_, j) => ({x: padding.left + xScale(j), y: padding.top + yScale(0)}))\n : cumulative[di - 1].map((v, j) => ({x: padding.left + xScale(j), y: padding.top + yScale(v)}))\n\n return {\n area: stackedAreaPath(topPts, bottomPts, curved),\n line: curved ? curvedPath(topPts) : linePath(topPts),\n topPts,\n }\n })\n\n return {\n yMin: min,\n yMax: max,\n yTicks: ticks,\n xLabels: labels,\n seriesPoints: [] as Point[][],\n stackedPaths: sPaths,\n }\n }\n\n const pts = allData.map((series) =>\n series.map((v, i): Point => ({x: padding.left + xScale(i), y: padding.top + yScale(v)}))\n )\n\n return {yMin: min, yMax: max, yTicks: ticks, xLabels: labels, seriesPoints: pts, stackedPaths: undefined}\n }, [data, plotW, plotH, xAxis, yAxis, stacked, curved, padding])\n\n const yScale = createLinearScale([yMin, yMax], [plotH, 0])\n const xScale = createLinearScale([0, Math.max(xLabels.length - 1, 1)], [0, plotW])\n\n const handleMouseMove = useCallback(\n (e: React.MouseEvent<SVGGElement>) => {\n const svg = e.currentTarget.closest('svg')\n if (!svg) return\n const rect = svg.getBoundingClientRect()\n const scale = innerWidth / rect.width\n const mx = (e.clientX - rect.left) * scale - padding.left\n const idx = Math.round((mx / plotW) * Math.max(xLabels.length - 1, 1))\n const clampedIdx = Math.max(0, Math.min(idx, xLabels.length - 1))\n\n setHoveredIndex(clampedIdx)\n onTooltip({\n label: xLabels[clampedIdx],\n items: data.map((ds, di) => ({\n name: ds.label,\n value: ds.data[clampedIdx] ?? 0,\n color: ds.color ?? colors[di % colors.length],\n })),\n x: e.clientX - rect.left,\n y: e.clientY - rect.top,\n })\n },\n [data, colors, xLabels, plotW, padding.left, innerWidth, onTooltip]\n )\n\n const handleMouseLeave = useCallback(() => {\n setHoveredIndex(null)\n onTooltip(null)\n }, [onTooltip])\n\n const gridH = yTicks.map((t) => padding.top + yScale(t))\n const yTickData = yTicks.map((t) => ({\n position: padding.top + yScale(t),\n label: (yAxis?.formatter ?? valueFormatter)(t),\n }))\n const xTickData = xLabels.map((l, i) => ({\n position: padding.left + xScale(i),\n label: l,\n }))\n\n return (\n <g>\n {showGrid && (\n <ChartGrid x={padding.left} y={padding.top} width={plotW} height={plotH} horizontalLines={gridH} />\n )}\n {showYAxis && (\n <ChartAxis\n type=\"y\"\n x={padding.left}\n y={padding.top + plotH}\n length={plotH}\n ticks={yTickData}\n title={yAxis?.title}\n />\n )}\n {showXAxis && (\n <ChartAxis\n type=\"x\"\n x={padding.left}\n y={padding.top + plotH}\n length={plotW}\n ticks={xTickData}\n title={xAxis?.title}\n />\n )}\n <g onMouseMove={handleMouseMove} onMouseLeave={handleMouseLeave}>\n <rect x={padding.left} y={padding.top} width={plotW} height={plotH} fill=\"transparent\" />\n {stacked && stackedPaths\n ? stackedPaths.map((sp, di) => {\n const c = data[di].color ?? colors[di % colors.length]\n return (\n <g key={di}>\n <path className={`chart-area-fill ${c}`} d={sp.area} />\n <path className={`chart-line ${c} ${animated ? 'animated' : ''}`} d={sp.line} />\n </g>\n )\n })\n : seriesPoints.map((pts, di) => {\n const c = data[di].color ?? colors[di % colors.length]\n const lineD = curved ? curvedPath(pts) : linePath(pts)\n const areaD = areaPath(pts, padding.top + plotH, curved)\n return (\n <g key={di}>\n <path className={`chart-area-fill ${c}`} d={areaD} />\n <path className={`chart-line ${c} ${animated ? 'animated' : ''}`} d={lineD} />\n {pts.map((p, pi) => (\n <circle\n key={pi}\n className={`chart-dot ${c} ${hoveredIndex === pi ? 'active' : ''}`}\n cx={p.x}\n cy={p.y}\n r={hoveredIndex === pi ? 5 : 3}\n onClick={() => onDataClick?.(di, pi, data[di].data[pi])}\n style={{cursor: onDataClick ? 'pointer' : undefined}}\n />\n ))}\n </g>\n )\n })}\n {hoveredIndex !== null && (\n <line\n className=\"chart-crosshair\"\n x1={padding.left + xScale(hoveredIndex)}\n y1={padding.top}\n x2={padding.left + xScale(hoveredIndex)}\n y2={padding.top + plotH}\n />\n )}\n </g>\n </g>\n )\n}\n","import {useMemo, useCallback, useState} from 'react'\nimport type {MChartDataset, MChartTooltipData} from '../MChart.types'\nimport type {MColor} from '../../../../theme/MTheme.types'\nimport {pieSector} from '../utils/paths'\nimport {defaultValueFormatter} from '../utils/formats'\n\ninterface MPieChartProps {\n data: MChartDataset[]\n colors: MColor[]\n innerWidth: number\n innerHeight: number\n donut: boolean\n donutWidth?: number\n animated: boolean\n valueFormatter: (value: number) => string\n xAxis?: {labels?: string[]}\n onTooltip: (data: MChartTooltipData | null) => void\n onDataClick?: (datasetIndex: number, dataIndex: number, value: number) => void\n}\n\nexport function MPieChart({\n data,\n colors,\n innerWidth,\n innerHeight,\n donut,\n donutWidth,\n animated,\n valueFormatter = defaultValueFormatter,\n xAxis,\n onTooltip,\n onDataClick,\n}: MPieChartProps) {\n const [hoveredIndex, setHoveredIndex] = useState<number | null>(null)\n\n const cx = innerWidth / 2\n const cy = innerHeight / 2\n const radius = Math.min(cx, cy) - 10\n const innerRadius = donut ? radius - (donutWidth ?? radius * 0.4) : 0\n\n const segments = useMemo(() => {\n const values = data.length === 1 ? data[0].data : data.map((d) => d.data[0] ?? 0)\n const labels =\n data.length === 1 ? (xAxis?.labels ?? values.map((_, i) => `Segment ${i + 1}`)) : data.map((d) => d.label)\n const total = values.reduce((s, v) => s + Math.max(v, 0), 0) || 1\n const startAngle = -Math.PI / 2\n\n let current = startAngle\n return values.map((v, i) => {\n const sweep = (Math.max(v, 0) / total) * Math.PI * 2\n const seg = {\n value: v,\n label: labels[i] ?? `Segment ${i + 1}`,\n color: (data.length === 1 ? undefined : data[i].color) ?? colors[i % colors.length],\n startAngle: current,\n endAngle: current + sweep,\n percentage: (Math.max(v, 0) / total) * 100,\n }\n current += sweep\n return seg\n })\n }, [data, colors, xAxis])\n\n const handleEnter = useCallback(\n (i: number, e: React.MouseEvent) => {\n setHoveredIndex(i)\n const svg = e.currentTarget.closest('svg')\n if (!svg) return\n const rect = svg.getBoundingClientRect()\n onTooltip({\n label: segments[i].label,\n items: [{name: segments[i].label, value: segments[i].value, color: segments[i].color}],\n x: e.clientX - rect.left,\n y: e.clientY - rect.top,\n })\n },\n [segments, onTooltip]\n )\n\n const handleLeave = useCallback(() => {\n setHoveredIndex(null)\n onTooltip(null)\n }, [onTooltip])\n\n return (\n <g>\n {segments.map((seg, i) => {\n const isHovered = hoveredIndex === i\n const path = pieSector(\n cx,\n cy,\n isHovered ? radius + 4 : radius,\n innerRadius,\n seg.startAngle,\n seg.endAngle\n )\n return (\n <path\n key={i}\n className={`chart-pie-segment ${seg.color} ${animated ? 'animated' : ''} ${isHovered ? 'active' : ''}`}\n d={path}\n onMouseEnter={(e) => handleEnter(i, e)}\n onMouseLeave={handleLeave}\n onMouseMove={(e) => {\n const svg = e.currentTarget.closest('svg')\n if (!svg) return\n const rect = svg.getBoundingClientRect()\n onTooltip({\n label: seg.label,\n items: [{name: seg.label, value: seg.value, color: seg.color}],\n x: e.clientX - rect.left,\n y: e.clientY - rect.top,\n })\n }}\n onClick={() => onDataClick?.(0, i, seg.value)}\n style={{cursor: onDataClick ? 'pointer' : undefined}}\n />\n )\n })}\n {donut && (\n <text x={cx} y={cy} textAnchor=\"middle\" dominantBaseline=\"middle\" className=\"chart-pie-center\">\n {hoveredIndex !== null\n ? valueFormatter(segments[hoveredIndex].value)\n : valueFormatter(segments.reduce((s, seg) => s + seg.value, 0))}\n </text>\n )}\n </g>\n )\n}\n","const COLORS = ['primary', 'info', 'success', 'warning', 'error', 'news', 'neutral', 'dark', 'light'] as const\n\nexport function ChartDefs() {\n return (\n <defs>\n {COLORS.map((c) => (\n <linearGradient key={`bar-${c}`} id={`chart-bar-grad-${c}`} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" className={`chart-grad-stop-start ${c}`} />\n <stop offset=\"100%\" className={`chart-grad-stop-end ${c}`} />\n </linearGradient>\n ))}\n {COLORS.map((c) => (\n <linearGradient key={`pie-${c}`} id={`chart-pie-grad-${c}`} x1=\"0.3\" y1=\"0\" x2=\"0.7\" y2=\"1\">\n <stop offset=\"0%\" className={`chart-grad-stop-start ${c}`} />\n <stop offset=\"100%\" className={`chart-grad-stop-end ${c}`} />\n </linearGradient>\n ))}\n {COLORS.map((c) => (\n <linearGradient key={`area-${c}`} id={`chart-area-grad-${c}`} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" className={`chart-grad-area-start ${c}`} />\n <stop offset=\"100%\" className={`chart-grad-area-end ${c}`} />\n </linearGradient>\n ))}\n </defs>\n )\n}\n","import type {MChartTooltipData} from '../MChart.types'\n\ninterface ChartTooltipProps {\n data: MChartTooltipData | null\n valueFormatter: (value: number) => string\n}\n\nexport function ChartTooltip({data, valueFormatter}: ChartTooltipProps) {\n if (!data) return null\n\n return (\n <div className=\"chart-tooltip\" style={{left: data.x, top: data.y}}>\n <div className=\"chart-tooltip-label\">{data.label}</div>\n {data.items.map((item, i) => (\n <div key={i} className=\"chart-tooltip-row\">\n <span className={`chart-tooltip-dot ${item.color}`} />\n <span className=\"chart-tooltip-name\">{item.name}</span>\n <span className=\"chart-tooltip-value\">{valueFormatter(item.value)}</span>\n </div>\n ))}\n </div>\n )\n}\n","import type {MColor} from '../../../../theme/MTheme.types'\n\ninterface ChartLegendProps {\n items: {label: string; color: MColor}[]\n}\n\nexport function ChartLegend({items}: ChartLegendProps) {\n if (items.length <= 1) return null\n\n return (\n <div className=\"chart-legend\">\n {items.map((item, i) => (\n <div key={i} className=\"chart-legend-item\">\n <span className={`chart-legend-dot ${item.color}`} />\n <span className=\"chart-legend-label\">{item.label}</span>\n </div>\n ))}\n </div>\n )\n}\n","import {useMemo, useCallback, useState, useRef} from 'react'\nimport type {MChartProps, MChartTooltipData} from './MChart.types'\nimport {CHART_DEFAULT_COLORS, CHART_PADDING, CHART_PADDING_WITH_TITLE} from './MChart.types'\nimport {defaultValueFormatter, defaultLabelFormatter} from './utils/formats'\nimport {cn} from '../../../utils/cn'\nimport {MLineChart} from './charts/MLineChart'\nimport {MBarChart} from './charts/MBarChart'\nimport {MAreaChart} from './charts/MAreaChart'\nimport {MPieChart} from './charts/MPieChart'\nimport {ChartDefs} from './parts/ChartDefs'\nimport {ChartTooltip} from './parts/ChartTooltip'\nimport {ChartLegend} from './parts/ChartLegend'\nimport './MChart.css'\n\nexport function MChart({\n type,\n data,\n width = '100%',\n height = 300,\n aspectRatio,\n xAxis,\n yAxis,\n showGrid = true,\n showXAxis = true,\n showYAxis = true,\n showLegend = true,\n showTooltip = true,\n animated = true,\n stacked = false,\n curved = false,\n donut = false,\n donutWidth,\n valueFormatter = defaultValueFormatter,\n labelFormatter = defaultLabelFormatter,\n onDataClick,\n className,\n style,\n ...rest\n}: MChartProps) {\n const containerRef = useRef<HTMLDivElement>(null)\n const [tooltip, setTooltip] = useState<MChartTooltipData | null>(null)\n\n const colors = CHART_DEFAULT_COLORS\n\n const hasTitles = !!(xAxis?.title || yAxis?.title)\n const padding = hasTitles ? CHART_PADDING_WITH_TITLE : CHART_PADDING\n\n const computedHeight = aspectRatio ? undefined : typeof height === 'number' ? height : 300\n\n const svgWidth = 600\n const svgHeight = computedHeight ?? 300\n\n const onTooltip = useCallback(\n (data: MChartTooltipData | null) => {\n if (showTooltip) setTooltip(data)\n },\n [showTooltip]\n )\n\n const legendItems = useMemo(() => {\n if (type === 'pie' && data.length === 1) {\n const labels = xAxis?.labels ?? data[0].data.map((_, i) => `Segment ${i + 1}`)\n return labels.map((l, i) => ({label: l, color: colors[i % colors.length]}))\n }\n return data.map((ds, i) => ({label: ds.label, color: ds.color ?? colors[i % colors.length]}))\n }, [data, colors, type, xAxis])\n\n const chartProps = {\n data,\n colors,\n innerWidth: svgWidth,\n innerHeight: svgHeight,\n padding,\n xAxis,\n yAxis,\n showGrid,\n showXAxis,\n showYAxis,\n animated,\n valueFormatter,\n onTooltip,\n onDataClick,\n }\n\n return (\n <div\n ref={containerRef}\n className={cn('chart', className)}\n style={{\n width,\n height: aspectRatio ? undefined : computedHeight,\n aspectRatio: aspectRatio ? String(aspectRatio) : undefined,\n ...style,\n }}\n {...rest}\n >\n <svg viewBox={`0 0 ${svgWidth} ${svgHeight}`} preserveAspectRatio=\"xMidYMid meet\" className=\"chart-svg\">\n <ChartDefs />\n {type === 'line' && <MLineChart {...chartProps} curved={curved} />}\n {type === 'bar' && <MBarChart {...chartProps} stacked={stacked} />}\n {type === 'area' && <MAreaChart {...chartProps} curved={curved} stacked={stacked} />}\n {type === 'pie' && <MPieChart {...chartProps} donut={donut} donutWidth={donutWidth} />}\n </svg>\n {showTooltip && <ChartTooltip data={tooltip} valueFormatter={valueFormatter} />}\n {showLegend && <ChartLegend items={legendItems} />}\n </div>\n )\n}\n","import type {MLineChartProps} from './MChart.types'\nimport {MChart} from './MChart'\n\nexport function MLineChart(props: MLineChartProps) {\n return <MChart type=\"line\" {...props} />\n}\n","import type {MBarChartProps} from './MChart.types'\nimport {MChart} from './MChart'\n\nexport function MBarChart(props: MBarChartProps) {\n return <MChart type=\"bar\" {...props} />\n}\n","import type {MAreaChartProps} from './MChart.types'\nimport {MChart} from './MChart'\n\nexport function MAreaChart(props: MAreaChartProps) {\n return <MChart type=\"area\" {...props} />\n}\n","import type {MPieChartProps} from './MChart.types'\nimport {MChart} from './MChart'\n\nexport function MPieChart(props: MPieChartProps) {\n return <MChart type=\"pie\" {...props} />\n}\n"],"mappings":"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"}
|