@banzamel/mineralui 2.4.0 → 2.4.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 +1 -1
- package/dist/{MAvatar-xI5aZ-bP.cjs → MAvatar-Capz5Gbc.cjs} +2 -2
- package/dist/{MAvatar-xI5aZ-bP.cjs.map → MAvatar-Capz5Gbc.cjs.map} +1 -1
- package/dist/{MButton-CMbmWmMI.cjs → MButton-sTKnano6.cjs} +2 -2
- package/dist/{MButton-CMbmWmMI.cjs.map → MButton-sTKnano6.cjs.map} +1 -1
- package/dist/{MButtonGroup-agnKWUPy.cjs → MButtonGroup-iPv14c0V.cjs} +2 -2
- package/dist/{MButtonGroup-agnKWUPy.cjs.map → MButtonGroup-iPv14c0V.cjs.map} +1 -1
- package/dist/{MCard-CADu7UUA.cjs → MCard-DK-_FkpE.cjs} +2 -2
- package/dist/{MCard-CADu7UUA.cjs.map → MCard-DK-_FkpE.cjs.map} +1 -1
- package/dist/{MCheckbox-stBujis6.cjs → MCheckbox-CIX7wp41.cjs} +2 -2
- package/dist/{MCheckbox-stBujis6.cjs.map → MCheckbox-CIX7wp41.cjs.map} +1 -1
- package/dist/MConflictIllustration-CZ3Md38Z.cjs +2 -0
- package/dist/MConflictIllustration-CZ3Md38Z.cjs.map +1 -0
- package/dist/{MConflictIllustration-Drsm8_8C.js → MConflictIllustration-znC7ijmP.js} +70 -70
- package/dist/MConflictIllustration-znC7ijmP.js.map +1 -0
- package/dist/{MDetailList-CQ2sJ7Jl.cjs → MDetailList-Ce7KzUKC.cjs} +2 -2
- package/dist/{MDetailList-CQ2sJ7Jl.cjs.map → MDetailList-Ce7KzUKC.cjs.map} +1 -1
- package/dist/{MDropdownMenu-DAzieAOs.cjs → MDropdownMenu-B_QWQhxy.cjs} +2 -2
- package/dist/{MDropdownMenu-DAzieAOs.cjs.map → MDropdownMenu-B_QWQhxy.cjs.map} +1 -1
- package/dist/{MDropdownMenu-B7RR8d8x.js → MDropdownMenu-C4CuKMRZ.js} +1 -1
- package/dist/{MDropdownMenu-B7RR8d8x.js.map → MDropdownMenu-C4CuKMRZ.js.map} +1 -1
- package/dist/{MGrid-LHi7TY5J.cjs → MGrid-fTx6wFq_.cjs} +2 -2
- package/dist/{MGrid-LHi7TY5J.cjs.map → MGrid-fTx6wFq_.cjs.map} +1 -1
- package/dist/{MHeading-7yt1C6oS.cjs → MHeading-KDSpnCof.cjs} +2 -2
- package/dist/{MHeading-7yt1C6oS.cjs.map → MHeading-KDSpnCof.cjs.map} +1 -1
- package/dist/{MI18nProvider-Cx4ZaFtv.cjs → MI18nProvider-DXRbB0VY.cjs} +2 -2
- package/dist/{MI18nProvider-Cx4ZaFtv.cjs.map → MI18nProvider-DXRbB0VY.cjs.map} +1 -1
- package/dist/{MInput-BSeWCsPi.cjs → MInput-CGl2Q-rM.cjs} +2 -2
- package/dist/{MInput-BSeWCsPi.cjs.map → MInput-CGl2Q-rM.cjs.map} +1 -1
- package/dist/{MInputCVC-CtHPCx_r.js → MInputCVC-Blv5PeyS.js} +2 -2
- package/dist/{MInputCVC-CtHPCx_r.js.map → MInputCVC-Blv5PeyS.js.map} +1 -1
- package/dist/{MInputCVC-rNs8w4gH.cjs → MInputCVC-lAFKTV6y.cjs} +2 -2
- package/dist/{MInputCVC-rNs8w4gH.cjs.map → MInputCVC-lAFKTV6y.cjs.map} +1 -1
- package/dist/{MInputSearch-BfPPgEGZ.cjs → MInputSearch-BZDnbFB4.cjs} +2 -2
- package/dist/{MInputSearch-BfPPgEGZ.cjs.map → MInputSearch-BZDnbFB4.cjs.map} +1 -1
- package/dist/{MKbd-C6XHWlmE.cjs → MKbd-DqMnZ7Iv.cjs} +2 -2
- package/dist/{MKbd-C6XHWlmE.cjs.map → MKbd-DqMnZ7Iv.cjs.map} +1 -1
- package/dist/{MLink-CbaDlP5I.cjs → MLink-U24G6KJj.cjs} +2 -2
- package/dist/{MLink-CbaDlP5I.cjs.map → MLink-U24G6KJj.cjs.map} +1 -1
- package/dist/{MLoader-DELAIhz5.cjs → MLoader-CvFIvytw.cjs} +2 -2
- package/dist/{MLoader-DELAIhz5.cjs.map → MLoader-CvFIvytw.cjs.map} +1 -1
- package/dist/{MPagination-CgmNEAZX.js → MPagination-BkvOEZpp.js} +1 -1
- package/dist/{MPagination-CgmNEAZX.js.map → MPagination-BkvOEZpp.js.map} +1 -1
- package/dist/{MPagination-C2lpvPqC.cjs → MPagination-DgQta29Q.cjs} +2 -2
- package/dist/{MPagination-C2lpvPqC.cjs.map → MPagination-DgQta29Q.cjs.map} +1 -1
- package/dist/{MPopover-DI_7niwe.cjs → MPopover-C-e1CoV0.cjs} +2 -2
- package/dist/{MPopover-DI_7niwe.cjs.map → MPopover-C-e1CoV0.cjs.map} +1 -1
- package/dist/{MPortal-C9Ucq8Um.cjs → MPortal-DUSIuINN.cjs} +2 -2
- package/dist/{MPortal-C9Ucq8Um.cjs.map → MPortal-DUSIuINN.cjs.map} +1 -1
- package/dist/{MSimpleGrid-K-8Qg9em.cjs → MSimpleGrid-BzlIitcJ.cjs} +2 -2
- package/dist/{MSimpleGrid-K-8Qg9em.cjs.map → MSimpleGrid-BzlIitcJ.cjs.map} +1 -1
- package/dist/{MSkeleton-DgU8aktI.cjs → MSkeleton-BoFpowFU.cjs} +2 -2
- package/dist/{MSkeleton-DgU8aktI.cjs.map → MSkeleton-BoFpowFU.cjs.map} +1 -1
- package/dist/{MSlider-0ApojrDC.cjs → MSlider-BTDBqF8t.cjs} +2 -2
- package/dist/{MSlider-0ApojrDC.cjs.map → MSlider-BTDBqF8t.cjs.map} +1 -1
- package/dist/{MStack-BOOciEts.cjs → MStack-B3Ldqsc-.cjs} +2 -2
- package/dist/{MStack-BOOciEts.cjs.map → MStack-B3Ldqsc-.cjs.map} +1 -1
- package/dist/{MSubText-WixraICV.cjs → MSubText-47PsgE8T.cjs} +2 -2
- package/dist/{MSubText-WixraICV.cjs.map → MSubText-47PsgE8T.cjs.map} +1 -1
- package/dist/{MSurface-CF8BFFn4.cjs → MSurface-QYEygc_0.cjs} +2 -2
- package/dist/{MSurface-CF8BFFn4.cjs.map → MSurface-QYEygc_0.cjs.map} +1 -1
- package/dist/{MTag-CgXh2PQC.cjs → MTag-BjV-dXkk.cjs} +2 -2
- package/dist/{MTag-CgXh2PQC.cjs.map → MTag-BjV-dXkk.cjs.map} +1 -1
- package/dist/{MText-CDDEGjBx.cjs → MText-Dni707tS.cjs} +2 -2
- package/dist/{MText-CDDEGjBx.cjs.map → MText-Dni707tS.cjs.map} +1 -1
- package/dist/{MTooltip-BWqyv6QU.cjs → MTooltip-ChvuN4Ow.cjs} +2 -2
- package/dist/{MTooltip-BWqyv6QU.cjs.map → MTooltip-ChvuN4Ow.cjs.map} +1 -1
- package/dist/{MTooltip-BTJkzOah.js → MTooltip-H3we0a7w.js} +1 -1
- package/dist/{MTooltip-BTJkzOah.js.map → MTooltip-H3we0a7w.js.map} +1 -1
- package/dist/{MTreeView-BcVw0Bgz.cjs → MTreeView-VYp0eErQ.cjs} +2 -2
- package/dist/{MTreeView-BcVw0Bgz.cjs.map → MTreeView-VYp0eErQ.cjs.map} +1 -1
- package/dist/{arduino-Bedph8hQ.cjs → arduino-BdpdaLwK.cjs} +1 -1
- package/dist/{arduino-Bedph8hQ.cjs.map → arduino-BdpdaLwK.cjs.map} +1 -1
- package/dist/{arduino-BHobW-W2.js → arduino-DDDlP9Yt.js} +1 -1
- package/dist/{arduino-BHobW-W2.js.map → arduino-DDDlP9Yt.js.map} +1 -1
- package/dist/{bash-oKnFbgn1.js → bash-D8WbAmuA.js} +1 -1
- package/dist/{bash-oKnFbgn1.js.map → bash-D8WbAmuA.js.map} +1 -1
- package/dist/{bash-CK4DSkpy.cjs → bash-eOUFh3S1.cjs} +1 -1
- package/dist/{bash-CK4DSkpy.cjs.map → bash-eOUFh3S1.cjs.map} +1 -1
- package/dist/{c-9Uw9QchT.cjs → c-Bur7Mn-u.cjs} +1 -1
- package/dist/{c-9Uw9QchT.cjs.map → c-Bur7Mn-u.cjs.map} +1 -1
- package/dist/{c-Bjn-r6WZ.js → c-CTKNfUJI.js} +1 -1
- package/dist/{c-Bjn-r6WZ.js.map → c-CTKNfUJI.js.map} +1 -1
- package/dist/calendar-P7MwKfWS.cjs +2 -0
- package/dist/{calendar-BFfeWRa0.cjs.map → calendar-P7MwKfWS.cjs.map} +1 -1
- package/dist/{calendar-DhRP5_mS.js → calendar-bzeZRst9.js} +59 -58
- package/dist/{calendar-DhRP5_mS.js.map → calendar-bzeZRst9.js.map} +1 -1
- package/dist/calendar.cjs +1 -1
- package/dist/calendar.js +1 -1
- package/dist/calendarDates-AnlGcvZM.cjs +2 -0
- package/dist/calendarDates-AnlGcvZM.cjs.map +1 -0
- package/dist/calendarDates-CYkJqcnp.js +50 -0
- package/dist/calendarDates-CYkJqcnp.js.map +1 -0
- package/dist/{cards-Dus8TmSD.js → cards-CFDJsdxR.js} +4 -4
- package/dist/{cards-Dus8TmSD.js.map → cards-CFDJsdxR.js.map} +1 -1
- package/dist/{cards-Bwos44EP.cjs → cards-DeA7I2KC.cjs} +2 -2
- package/dist/{cards-Bwos44EP.cjs.map → cards-DeA7I2KC.cjs.map} +1 -1
- package/dist/cards.cjs +1 -1
- package/dist/cards.js +1 -1
- package/dist/components/data/MWeekGrid/MWeekGrid.types.d.ts +9 -4
- package/dist/{controls-CeHdKaQv.cjs → controls-KK-TyUTT.cjs} +2 -2
- package/dist/{controls-CeHdKaQv.cjs.map → controls-KK-TyUTT.cjs.map} +1 -1
- package/dist/controls.cjs +1 -1
- package/dist/{core-CMHNXulE.js → core-D5-SQcs8.js} +1 -1
- package/dist/{core-CMHNXulE.js.map → core-D5-SQcs8.js.map} +1 -1
- package/dist/{core-CLRD6sG4.cjs → core-D66c1_Wo.cjs} +1 -1
- package/dist/{core-CLRD6sG4.cjs.map → core-D66c1_Wo.cjs.map} +1 -1
- package/dist/{cpp-BWqMcMeX.cjs → cpp-BMULAf-B.cjs} +1 -1
- package/dist/{cpp-BWqMcMeX.cjs.map → cpp-BMULAf-B.cjs.map} +1 -1
- package/dist/{cpp-b3FmFTKl.js → cpp-DAzz2TpY.js} +1 -1
- package/dist/{cpp-b3FmFTKl.js.map → cpp-DAzz2TpY.js.map} +1 -1
- package/dist/{css-B4MkxW0b.cjs → css-9M03GzKO.cjs} +1 -1
- package/dist/{css-B4MkxW0b.cjs.map → css-9M03GzKO.cjs.map} +1 -1
- package/dist/{css-8EzLAJKV.js → css-EGOXTWIl.js} +1 -1
- package/dist/{css-8EzLAJKV.js.map → css-EGOXTWIl.js.map} +1 -1
- package/dist/{data-Dh3C_VTi.js → data-CgLutFxU.js} +245 -230
- package/dist/data-CgLutFxU.js.map +1 -0
- package/dist/data-DFrkJTlF.cjs +2 -0
- package/dist/data-DFrkJTlF.cjs.map +1 -0
- package/dist/data.cjs +1 -1
- package/dist/data.js +1 -1
- package/dist/{display-DU9E_18w.cjs → display--E7rI0tk.cjs} +2 -2
- package/dist/{display-DU9E_18w.cjs.map → display--E7rI0tk.cjs.map} +1 -1
- package/dist/{display-CYC1AImx.js → display-BnkHKW1n.js} +12 -12
- package/dist/{display-CYC1AImx.js.map → display-BnkHKW1n.js.map} +1 -1
- package/dist/display.cjs +1 -1
- package/dist/display.js +1 -1
- package/dist/dropdowns-DGYg9zIh.cjs +2 -0
- package/dist/{dropdowns-vaj6vhl6.cjs.map → dropdowns-DGYg9zIh.cjs.map} +1 -1
- package/dist/{dropdowns-ByDu8Wbt.js → dropdowns-Dq-xAplH.js} +12 -11
- package/dist/{dropdowns-ByDu8Wbt.js.map → dropdowns-Dq-xAplH.js.map} +1 -1
- package/dist/dropdowns.cjs +1 -1
- package/dist/dropdowns.js +1 -1
- package/dist/{feedback-CUGuh4QZ.cjs → feedback-CA77ShtB.cjs} +2 -2
- package/dist/{feedback-CUGuh4QZ.cjs.map → feedback-CA77ShtB.cjs.map} +1 -1
- package/dist/feedback.cjs +1 -1
- package/dist/{form-Dri4AzY9.js → form-CAFcvmUS.js} +1 -1
- package/dist/{form-Dri4AzY9.js.map → form-CAFcvmUS.js.map} +1 -1
- package/dist/{form-DICGXS6_.cjs → form-DpfzLUOn.cjs} +2 -2
- package/dist/{form-DICGXS6_.cjs.map → form-DpfzLUOn.cjs.map} +1 -1
- package/dist/form.cjs +1 -1
- package/dist/form.js +1 -1
- package/dist/{frameworkTexts-C1yvIVm4.js → frameworkTexts-DH0Xp-Vx.js} +30 -61
- package/dist/frameworkTexts-DH0Xp-Vx.js.map +1 -0
- package/dist/frameworkTexts-iDXhcW6k.cjs +2 -0
- package/dist/frameworkTexts-iDXhcW6k.cjs.map +1 -0
- package/dist/i18n/frameworkTexts.d.ts +13 -0
- package/dist/i18n.cjs +1 -1
- package/dist/{icons-BxurYyW-.cjs → icons-D_NB67he.cjs} +2 -2
- package/dist/{icons-BxurYyW-.cjs.map → icons-D_NB67he.cjs.map} +1 -1
- package/dist/icons.cjs +1 -1
- package/dist/illustrations.cjs +1 -1
- package/dist/illustrations.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +13 -13
- package/dist/{inputs-GCUfD923.cjs → inputs-Clenc4Rm.cjs} +2 -2
- package/dist/{inputs-GCUfD923.cjs.map → inputs-Clenc4Rm.cjs.map} +1 -1
- package/dist/inputs.cjs +1 -1
- package/dist/inputs.js +1 -1
- package/dist/{javascript-CH9YvIk2.js → javascript-CHSg4NGc.js} +1 -1
- package/dist/{javascript-CH9YvIk2.js.map → javascript-CHSg4NGc.js.map} +1 -1
- package/dist/{javascript-BGrveJJw.cjs → javascript-CastOQF5.cjs} +1 -1
- package/dist/{javascript-BGrveJJw.cjs.map → javascript-CastOQF5.cjs.map} +1 -1
- package/dist/{json-CPWARxtL.js → json-Bejy9Rlg.js} +1 -1
- package/dist/{json-CPWARxtL.js.map → json-Bejy9Rlg.js.map} +1 -1
- package/dist/{json-D6oa0Lra.cjs → json-DCkJ-m-p.cjs} +1 -1
- package/dist/{json-D6oa0Lra.cjs.map → json-DCkJ-m-p.cjs.map} +1 -1
- package/dist/{layout-Gr99WWTA.cjs → layout-CNoZdeXw.cjs} +2 -2
- package/dist/{layout-Gr99WWTA.cjs.map → layout-CNoZdeXw.cjs.map} +1 -1
- package/dist/{layout-CS_dHOLM.js → layout-DsE4zfpg.js} +3 -3
- package/dist/{layout-CS_dHOLM.js.map → layout-DsE4zfpg.js.map} +1 -1
- package/dist/layout.cjs +1 -1
- package/dist/layout.js +2 -2
- package/dist/{licensing-DXCHcZd1.cjs → licensing-DGIdtfNg.cjs} +2 -2
- package/dist/{licensing-DXCHcZd1.cjs.map → licensing-DGIdtfNg.cjs.map} +1 -1
- package/dist/{locale-BGLDTJSi.cjs → locale-DRRl_s5-.cjs} +2 -2
- package/dist/{locale-BGLDTJSi.cjs.map → locale-DRRl_s5-.cjs.map} +1 -1
- package/dist/{media-CE59IEdY.cjs → media-DRTBXDnn.cjs} +2 -2
- package/dist/{media-CE59IEdY.cjs.map → media-DRTBXDnn.cjs.map} +1 -1
- package/dist/media.cjs +1 -1
- package/dist/{overlays-DCXP_KsX.js → overlays-BKk_ZXue.js} +2 -2
- package/dist/{overlays-DCXP_KsX.js.map → overlays-BKk_ZXue.js.map} +1 -1
- package/dist/{overlays--Pe-H5TW.cjs → overlays-Qbp4d596.cjs} +2 -2
- package/dist/{overlays--Pe-H5TW.cjs.map → overlays-Qbp4d596.cjs.map} +1 -1
- package/dist/overlays.cjs +1 -1
- package/dist/overlays.js +3 -3
- package/dist/{php-DJ1nTQpr.cjs → php-BdVXegqn.cjs} +1 -1
- package/dist/{php-DJ1nTQpr.cjs.map → php-BdVXegqn.cjs.map} +1 -1
- package/dist/{php-DeBdikHj.js → php-Cb_S1hXT.js} +1 -1
- package/dist/{php-DeBdikHj.js.map → php-Cb_S1hXT.js.map} +1 -1
- package/dist/primitives.cjs +1 -1
- package/dist/style-runtime.cjs +1 -1
- package/dist/style-runtime.js +1 -1
- package/dist/styles.css +1 -1
- package/dist/{theme-Bjs11y3s.cjs → theme-DgaM4CjM.cjs} +2 -2
- package/dist/{theme-Bjs11y3s.cjs.map → theme-DgaM4CjM.cjs.map} +1 -1
- package/dist/theme.cjs +1 -1
- package/dist/{typescript-B5GRzMtL.js → typescript-0VHxrxf2.js} +1 -1
- package/dist/{typescript-B5GRzMtL.js.map → typescript-0VHxrxf2.js.map} +1 -1
- package/dist/{typescript-qNh_eaB0.cjs → typescript-CcGBfzlS.cjs} +1 -1
- package/dist/{typescript-qNh_eaB0.cjs.map → typescript-CcGBfzlS.cjs.map} +1 -1
- package/dist/{typography-D4PUdtMV.cjs → typography-C4_O8len.cjs} +2 -2
- package/dist/{typography-D4PUdtMV.cjs.map → typography-C4_O8len.cjs.map} +1 -1
- package/dist/typography.cjs +1 -1
- package/dist/{useGhostText-BTPneo4u.cjs → useGhostText-Dlemg1vw.cjs} +2 -2
- package/dist/{useGhostText-BTPneo4u.cjs.map → useGhostText-Dlemg1vw.cjs.map} +1 -1
- package/dist/{useInteractionEffect-q_9csNj7.cjs → useInteractionEffect-CFwDX5UF.cjs} +2 -2
- package/dist/{useInteractionEffect-q_9csNj7.cjs.map → useInteractionEffect-CFwDX5UF.cjs.map} +1 -1
- package/dist/{useKeyboardNav-D_OwIEZp.cjs → useKeyboardNav-Bm-dxVq-.cjs} +2 -2
- package/dist/{useKeyboardNav-D_OwIEZp.cjs.map → useKeyboardNav-Bm-dxVq-.cjs.map} +1 -1
- package/dist/utils.cjs +1 -1
- package/dist/{xml-BTZ6XeQ9.js → xml-8GjNy8SM.js} +1 -1
- package/dist/{xml-BTZ6XeQ9.js.map → xml-8GjNy8SM.js.map} +1 -1
- package/dist/{xml-_Z3NZw2H.cjs → xml-Dbm3mobK.cjs} +1 -1
- package/dist/{xml-_Z3NZw2H.cjs.map → xml-Dbm3mobK.cjs.map} +1 -1
- package/package.json +1 -1
- package/dist/MConflictIllustration-CWWnskbi.cjs +0 -2
- package/dist/MConflictIllustration-CWWnskbi.cjs.map +0 -1
- package/dist/MConflictIllustration-Drsm8_8C.js.map +0 -1
- package/dist/calendar-BFfeWRa0.cjs +0 -2
- package/dist/data-Dh3C_VTi.js.map +0 -1
- package/dist/data-Dl6U8Uct.cjs +0 -2
- package/dist/data-Dl6U8Uct.cjs.map +0 -1
- package/dist/dropdowns-vaj6vhl6.cjs +0 -2
- package/dist/frameworkTexts-C1yvIVm4.js.map +0 -1
- package/dist/frameworkTexts-D3wbwWCu.cjs +0 -2
- package/dist/frameworkTexts-D3wbwWCu.cjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MPopover-DI_7niwe.cjs","names":[],"sources":["../src/components/primitives/MPopover/popoverStack.ts","../src/components/primitives/MPopover/MPopover.tsx"],"sourcesContent":["/**\n * Registry of currently-open MPopover instances.\n *\n * Every popover portals its content to `document.body`, so a popover opened\n * from inside another popover is NOT a DOM descendant of its parent. That\n * breaks the naive outside-click test (`parent.contains(target)`): pressing a\n * nested dropdown item looks like an outside click to the parent, the parent\n * closes, React unmounts the nested menu mid-gesture, and the browser never\n * gets to fire `click` because mousedown and mouseup landed on different\n * elements. The action silently does nothing.\n *\n * This registry restores the nesting relation the DOM lost. Nesting is derived\n * from where each popover's ANCHOR lives, not from open order: a popover whose\n * anchor sits inside another popover's element is that popover's child. Open\n * order would misclassify two independent popovers that happen to be open at\n * the same time — clicking the newer one must still close the older one.\n */\n\nexport interface PopoverRegistration {\n id: number\n getPopoverEl: () => HTMLElement | null\n getAnchorEl: () => HTMLElement | null\n}\n\nconst registrations: PopoverRegistration[] = []\nlet nextId = 1\n\nexport function nextPopoverId(): number {\n return nextId++\n}\n\nexport function registerPopover(registration: PopoverRegistration): () => void {\n registrations.push(registration)\n return () => {\n const index = registrations.indexOf(registration)\n if (index !== -1) registrations.splice(index, 1)\n }\n}\n\n/** The registered popover whose element contains `entry`'s anchor, if any. */\nfunction parentIdOf(entry: PopoverRegistration): number | null {\n const anchor = entry.getAnchorEl()\n if (!anchor) return null\n\n for (const other of registrations) {\n if (other.id === entry.id) continue\n const element = other.getPopoverEl()\n if (element && element.contains(anchor)) return other.id\n }\n\n return null\n}\n\n/**\n * True when `target` lies inside a popover that is nested (at any depth) within\n * the popover identified by `id`. Callers use it to keep a parent open while\n * the interaction belongs to one of its descendants.\n */\nexport function isInsideDescendantPopover(id: number, target: Node | null): boolean {\n if (!target) return false\n\n for (const entry of registrations) {\n if (entry.id === id) continue\n\n const element = entry.getPopoverEl()\n if (!element || !element.contains(target)) continue\n\n // Walk the ancestor chain of the popover that was actually hit.\n // `seen` guards against a cycle if a malformed tree ever produces one.\n const seen = new Set<number>()\n let cursor = parentIdOf(entry)\n\n while (cursor !== null && !seen.has(cursor)) {\n if (cursor === id) return true\n seen.add(cursor)\n const parent = registrations.find((candidate) => candidate.id === cursor)\n cursor = parent ? parentIdOf(parent) : null\n }\n }\n\n return false\n}\n\n/** Test-only helper — the registry is module state that outlives a render. */\nexport function __resetPopoverStack(): void {\n registrations.length = 0\n nextId = 1\n}\n","import {useState, useEffect, useRef, useCallback} from 'react'\nimport {MPortal} from '../MPortal'\nimport {cn} from '../../../utils/cn'\nimport {isInsideDescendantPopover, nextPopoverId, registerPopover} from './popoverStack'\nimport type {MPopoverProps} from './MPopover.types'\nimport './MPopover.css'\n\n// Position floating content relative to an anchor with viewport-aware flipping.\nexport function MPopover({\n open,\n anchorRef,\n onClose,\n placement = 'bottom-start',\n matchWidth = false,\n offset = 4,\n zIndex,\n children,\n className,\n style,\n}: MPopoverProps) {\n const popoverRef = useRef<HTMLDivElement>(null)\n const popoverIdRef = useRef<number>(null)\n if (popoverIdRef.current === null) popoverIdRef.current = nextPopoverId()\n const popoverId = popoverIdRef.current\n const [position, setPosition] = useState<{top: number; left: number; width?: number} | null>(null)\n const [flipped, setFlipped] = useState(false)\n const [layerZ, setLayerZ] = useState<number | string | null>(null)\n\n // Lift popovers above drawers, modals and mobile sidebars when the anchor sits inside them.\n const updateLayer = useCallback(() => {\n if (zIndex !== undefined) {\n setLayerZ(zIndex)\n return\n }\n\n const anchor = anchorRef.current\n if (!anchor || typeof window === 'undefined') {\n setLayerZ(null)\n return\n }\n\n const layerHost = anchor.closest(\n '.drawer-backdrop, .modal-backdrop, .sheet-backdrop, .sidebar.mobile-open, .popover'\n )\n if (!layerHost) {\n setLayerZ(null)\n return\n }\n\n const computedZ = window.getComputedStyle(layerHost).zIndex\n const parsedZ = Number.parseInt(computedZ, 10)\n setLayerZ(Number.isFinite(parsedZ) ? parsedZ + 1 : null)\n }, [anchorRef, zIndex])\n\n // Recalculate popover position whenever layout or viewport constraints change.\n const updatePosition = useCallback(() => {\n if (!anchorRef.current || !popoverRef.current) return\n\n const anchor = anchorRef.current.getBoundingClientRect()\n // Layout size, not getBoundingClientRect: the open animation scales the popover, and\n // measuring mid-animation under-reports its height by ~5 % (enough to overflow the\n // viewport after a flip / shift).\n const popover = {width: popoverRef.current.offsetWidth, height: popoverRef.current.offsetHeight}\n const viewport = {\n width: window.innerWidth,\n height: window.innerHeight,\n }\n\n const isTop = placement.startsWith('top')\n const isRight = placement.startsWith('right')\n const isLeft = placement.startsWith('left')\n const isHorizontal = isRight || isLeft\n const isEnd = placement.endsWith('end')\n\n let top: number\n let left: number\n\n if (isHorizontal) {\n // Horizontal placement: position to the right or left of the anchor\n const spaceRight = viewport.width - anchor.right - offset\n const spaceLeft = anchor.left - offset\n const shouldFlip = isRight\n ? spaceRight < popover.width && spaceLeft > spaceRight\n : spaceLeft < popover.width && spaceRight > spaceLeft\n\n setFlipped(shouldFlip)\n\n const showOnRight = isRight ? !shouldFlip : shouldFlip\n\n if (showOnRight) {\n left = anchor.right + offset + window.scrollX\n } else {\n left = anchor.left - popover.width - offset + window.scrollX\n }\n\n if (isEnd) {\n top = anchor.bottom - popover.height + window.scrollY\n } else {\n top = anchor.top + window.scrollY\n }\n\n // Shift along the anchor edge so a side popover near the bottom of the viewport\n // slides up instead of running off-screen (the top clamp below wins when it is\n // taller than the viewport).\n top = Math.min(top, window.scrollY + viewport.height - popover.height - 8)\n } else {\n // Vertical placement: position above or below the anchor\n const spaceBelow = viewport.height - anchor.bottom - offset\n const spaceAbove = anchor.top - offset\n const shouldFlip = isTop\n ? spaceAbove < popover.height && spaceBelow > spaceAbove\n : spaceBelow < popover.height && spaceAbove > spaceBelow\n\n setFlipped(shouldFlip)\n\n const showOnTop = isTop ? !shouldFlip : shouldFlip\n\n if (showOnTop) {\n top = anchor.top - popover.height - offset + window.scrollY\n } else {\n top = anchor.bottom + offset + window.scrollY\n }\n\n if (isEnd) {\n left = anchor.right - popover.width + window.scrollX\n } else {\n left = anchor.left + window.scrollX\n }\n }\n\n // Clamp to viewport\n left = Math.max(8, Math.min(left, viewport.width - popover.width - 8))\n top = Math.max(8 + window.scrollY, top)\n\n setPosition({\n top,\n left,\n width: matchWidth ? anchor.width : undefined,\n })\n }, [anchorRef, placement, offset, matchWidth])\n\n useEffect(() => {\n if (!open) {\n setPosition(null)\n setLayerZ(null)\n return\n }\n\n updateLayer()\n // Wait one frame so the rendered popover can be measured accurately.\n requestAnimationFrame(updatePosition)\n\n // Content that grows after opening (images, expanded lists) must re-run the\n // flip / shift, or the popover drifts past the viewport edge.\n const resizeObserver = typeof ResizeObserver === 'undefined' ? null : new ResizeObserver(() => updatePosition())\n if (resizeObserver && popoverRef.current) {\n resizeObserver.observe(popoverRef.current)\n }\n\n // `scroll` does not bubble, so a window listener only ever sees the\n // document scrolling. Anchors living inside a scrollable ancestor — an\n // app shell with a scrolling main region, MStickyPanel, an overflowing\n // card — would leave the popover stranded at its opening coordinates\n // while the anchor moved away underneath it. Scroll events do capture,\n // so a capture-phase listener on the document catches scrolling from\n // ANY container, including the document itself.\n document.addEventListener('scroll', updatePosition, {capture: true, passive: true})\n window.addEventListener('resize', updatePosition, {passive: true})\n return () => {\n resizeObserver?.disconnect()\n document.removeEventListener('scroll', updatePosition, {capture: true})\n window.removeEventListener('resize', updatePosition)\n }\n }, [open, updateLayer, updatePosition])\n\n // Close the popover with the standard Escape key interaction.\n useEffect(() => {\n if (!open) return\n const handleKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose()\n }\n document.addEventListener('keydown', handleKey)\n return () => document.removeEventListener('keydown', handleKey)\n }, [open, onClose])\n\n // Publish this instance while it is open so nested popovers can be related\n // back to it — see popoverStack.ts for why the DOM alone cannot answer this.\n useEffect(() => {\n if (!open) return\n return registerPopover({\n id: popoverId,\n getPopoverEl: () => popoverRef.current,\n getAnchorEl: () => anchorRef.current,\n })\n }, [open, popoverId, anchorRef])\n\n // Close when the user interacts outside both the popover and its anchor.\n useEffect(() => {\n if (!open) return\n const handleClick = (e: MouseEvent) => {\n const target = e.target as Node\n\n if (popoverRef.current?.contains(target) || anchorRef.current?.contains(target)) {\n return\n }\n\n // A popover nested inside this one is portaled to `document.body`,\n // so it fails the `contains` checks above even though the click\n // belongs to this popover's own subtree. Closing here would unmount\n // that child between mousedown and mouseup and swallow its click.\n if (isInsideDescendantPopover(popoverId, target)) {\n return\n }\n\n onClose()\n }\n document.addEventListener('mousedown', handleClick)\n return () => document.removeEventListener('mousedown', handleClick)\n }, [open, onClose, anchorRef, popoverId])\n\n if (!open) return null\n\n return (\n <MPortal>\n <div\n ref={popoverRef}\n className={cn('popover', flipped ? 'flipped' : 'normal', className)}\n style={{\n position: 'absolute',\n top: position?.top ?? 0,\n left: position?.left ?? 0,\n width: position?.width,\n zIndex: layerZ ?? undefined,\n visibility: position ? 'visible' : 'hidden',\n ...style,\n }}\n role=\"listbox\"\n >\n {children}\n </div>\n </MPortal>\n )\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MPopover-C-e1CoV0.cjs","names":[],"sources":["../src/components/primitives/MPopover/popoverStack.ts","../src/components/primitives/MPopover/MPopover.tsx"],"sourcesContent":["/**\n * Registry of currently-open MPopover instances.\n *\n * Every popover portals its content to `document.body`, so a popover opened\n * from inside another popover is NOT a DOM descendant of its parent. That\n * breaks the naive outside-click test (`parent.contains(target)`): pressing a\n * nested dropdown item looks like an outside click to the parent, the parent\n * closes, React unmounts the nested menu mid-gesture, and the browser never\n * gets to fire `click` because mousedown and mouseup landed on different\n * elements. The action silently does nothing.\n *\n * This registry restores the nesting relation the DOM lost. Nesting is derived\n * from where each popover's ANCHOR lives, not from open order: a popover whose\n * anchor sits inside another popover's element is that popover's child. Open\n * order would misclassify two independent popovers that happen to be open at\n * the same time — clicking the newer one must still close the older one.\n */\n\nexport interface PopoverRegistration {\n id: number\n getPopoverEl: () => HTMLElement | null\n getAnchorEl: () => HTMLElement | null\n}\n\nconst registrations: PopoverRegistration[] = []\nlet nextId = 1\n\nexport function nextPopoverId(): number {\n return nextId++\n}\n\nexport function registerPopover(registration: PopoverRegistration): () => void {\n registrations.push(registration)\n return () => {\n const index = registrations.indexOf(registration)\n if (index !== -1) registrations.splice(index, 1)\n }\n}\n\n/** The registered popover whose element contains `entry`'s anchor, if any. */\nfunction parentIdOf(entry: PopoverRegistration): number | null {\n const anchor = entry.getAnchorEl()\n if (!anchor) return null\n\n for (const other of registrations) {\n if (other.id === entry.id) continue\n const element = other.getPopoverEl()\n if (element && element.contains(anchor)) return other.id\n }\n\n return null\n}\n\n/**\n * True when `target` lies inside a popover that is nested (at any depth) within\n * the popover identified by `id`. Callers use it to keep a parent open while\n * the interaction belongs to one of its descendants.\n */\nexport function isInsideDescendantPopover(id: number, target: Node | null): boolean {\n if (!target) return false\n\n for (const entry of registrations) {\n if (entry.id === id) continue\n\n const element = entry.getPopoverEl()\n if (!element || !element.contains(target)) continue\n\n // Walk the ancestor chain of the popover that was actually hit.\n // `seen` guards against a cycle if a malformed tree ever produces one.\n const seen = new Set<number>()\n let cursor = parentIdOf(entry)\n\n while (cursor !== null && !seen.has(cursor)) {\n if (cursor === id) return true\n seen.add(cursor)\n const parent = registrations.find((candidate) => candidate.id === cursor)\n cursor = parent ? parentIdOf(parent) : null\n }\n }\n\n return false\n}\n\n/** Test-only helper — the registry is module state that outlives a render. */\nexport function __resetPopoverStack(): void {\n registrations.length = 0\n nextId = 1\n}\n","import {useState, useEffect, useRef, useCallback} from 'react'\nimport {MPortal} from '../MPortal'\nimport {cn} from '../../../utils/cn'\nimport {isInsideDescendantPopover, nextPopoverId, registerPopover} from './popoverStack'\nimport type {MPopoverProps} from './MPopover.types'\nimport './MPopover.css'\n\n// Position floating content relative to an anchor with viewport-aware flipping.\nexport function MPopover({\n open,\n anchorRef,\n onClose,\n placement = 'bottom-start',\n matchWidth = false,\n offset = 4,\n zIndex,\n children,\n className,\n style,\n}: MPopoverProps) {\n const popoverRef = useRef<HTMLDivElement>(null)\n const popoverIdRef = useRef<number>(null)\n if (popoverIdRef.current === null) popoverIdRef.current = nextPopoverId()\n const popoverId = popoverIdRef.current\n const [position, setPosition] = useState<{top: number; left: number; width?: number} | null>(null)\n const [flipped, setFlipped] = useState(false)\n const [layerZ, setLayerZ] = useState<number | string | null>(null)\n\n // Lift popovers above drawers, modals and mobile sidebars when the anchor sits inside them.\n const updateLayer = useCallback(() => {\n if (zIndex !== undefined) {\n setLayerZ(zIndex)\n return\n }\n\n const anchor = anchorRef.current\n if (!anchor || typeof window === 'undefined') {\n setLayerZ(null)\n return\n }\n\n const layerHost = anchor.closest(\n '.drawer-backdrop, .modal-backdrop, .sheet-backdrop, .sidebar.mobile-open, .popover'\n )\n if (!layerHost) {\n setLayerZ(null)\n return\n }\n\n const computedZ = window.getComputedStyle(layerHost).zIndex\n const parsedZ = Number.parseInt(computedZ, 10)\n setLayerZ(Number.isFinite(parsedZ) ? parsedZ + 1 : null)\n }, [anchorRef, zIndex])\n\n // Recalculate popover position whenever layout or viewport constraints change.\n const updatePosition = useCallback(() => {\n if (!anchorRef.current || !popoverRef.current) return\n\n const anchor = anchorRef.current.getBoundingClientRect()\n // Layout size, not getBoundingClientRect: the open animation scales the popover, and\n // measuring mid-animation under-reports its height by ~5 % (enough to overflow the\n // viewport after a flip / shift).\n const popover = {width: popoverRef.current.offsetWidth, height: popoverRef.current.offsetHeight}\n const viewport = {\n width: window.innerWidth,\n height: window.innerHeight,\n }\n\n const isTop = placement.startsWith('top')\n const isRight = placement.startsWith('right')\n const isLeft = placement.startsWith('left')\n const isHorizontal = isRight || isLeft\n const isEnd = placement.endsWith('end')\n\n let top: number\n let left: number\n\n if (isHorizontal) {\n // Horizontal placement: position to the right or left of the anchor\n const spaceRight = viewport.width - anchor.right - offset\n const spaceLeft = anchor.left - offset\n const shouldFlip = isRight\n ? spaceRight < popover.width && spaceLeft > spaceRight\n : spaceLeft < popover.width && spaceRight > spaceLeft\n\n setFlipped(shouldFlip)\n\n const showOnRight = isRight ? !shouldFlip : shouldFlip\n\n if (showOnRight) {\n left = anchor.right + offset + window.scrollX\n } else {\n left = anchor.left - popover.width - offset + window.scrollX\n }\n\n if (isEnd) {\n top = anchor.bottom - popover.height + window.scrollY\n } else {\n top = anchor.top + window.scrollY\n }\n\n // Shift along the anchor edge so a side popover near the bottom of the viewport\n // slides up instead of running off-screen (the top clamp below wins when it is\n // taller than the viewport).\n top = Math.min(top, window.scrollY + viewport.height - popover.height - 8)\n } else {\n // Vertical placement: position above or below the anchor\n const spaceBelow = viewport.height - anchor.bottom - offset\n const spaceAbove = anchor.top - offset\n const shouldFlip = isTop\n ? spaceAbove < popover.height && spaceBelow > spaceAbove\n : spaceBelow < popover.height && spaceAbove > spaceBelow\n\n setFlipped(shouldFlip)\n\n const showOnTop = isTop ? !shouldFlip : shouldFlip\n\n if (showOnTop) {\n top = anchor.top - popover.height - offset + window.scrollY\n } else {\n top = anchor.bottom + offset + window.scrollY\n }\n\n if (isEnd) {\n left = anchor.right - popover.width + window.scrollX\n } else {\n left = anchor.left + window.scrollX\n }\n }\n\n // Clamp to viewport\n left = Math.max(8, Math.min(left, viewport.width - popover.width - 8))\n top = Math.max(8 + window.scrollY, top)\n\n setPosition({\n top,\n left,\n width: matchWidth ? anchor.width : undefined,\n })\n }, [anchorRef, placement, offset, matchWidth])\n\n useEffect(() => {\n if (!open) {\n setPosition(null)\n setLayerZ(null)\n return\n }\n\n updateLayer()\n // Wait one frame so the rendered popover can be measured accurately.\n requestAnimationFrame(updatePosition)\n\n // Content that grows after opening (images, expanded lists) must re-run the\n // flip / shift, or the popover drifts past the viewport edge.\n const resizeObserver = typeof ResizeObserver === 'undefined' ? null : new ResizeObserver(() => updatePosition())\n if (resizeObserver && popoverRef.current) {\n resizeObserver.observe(popoverRef.current)\n }\n\n // `scroll` does not bubble, so a window listener only ever sees the\n // document scrolling. Anchors living inside a scrollable ancestor — an\n // app shell with a scrolling main region, MStickyPanel, an overflowing\n // card — would leave the popover stranded at its opening coordinates\n // while the anchor moved away underneath it. Scroll events do capture,\n // so a capture-phase listener on the document catches scrolling from\n // ANY container, including the document itself.\n document.addEventListener('scroll', updatePosition, {capture: true, passive: true})\n window.addEventListener('resize', updatePosition, {passive: true})\n return () => {\n resizeObserver?.disconnect()\n document.removeEventListener('scroll', updatePosition, {capture: true})\n window.removeEventListener('resize', updatePosition)\n }\n }, [open, updateLayer, updatePosition])\n\n // Close the popover with the standard Escape key interaction.\n useEffect(() => {\n if (!open) return\n const handleKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose()\n }\n document.addEventListener('keydown', handleKey)\n return () => document.removeEventListener('keydown', handleKey)\n }, [open, onClose])\n\n // Publish this instance while it is open so nested popovers can be related\n // back to it — see popoverStack.ts for why the DOM alone cannot answer this.\n useEffect(() => {\n if (!open) return\n return registerPopover({\n id: popoverId,\n getPopoverEl: () => popoverRef.current,\n getAnchorEl: () => anchorRef.current,\n })\n }, [open, popoverId, anchorRef])\n\n // Close when the user interacts outside both the popover and its anchor.\n useEffect(() => {\n if (!open) return\n const handleClick = (e: MouseEvent) => {\n const target = e.target as Node\n\n if (popoverRef.current?.contains(target) || anchorRef.current?.contains(target)) {\n return\n }\n\n // A popover nested inside this one is portaled to `document.body`,\n // so it fails the `contains` checks above even though the click\n // belongs to this popover's own subtree. Closing here would unmount\n // that child between mousedown and mouseup and swallow its click.\n if (isInsideDescendantPopover(popoverId, target)) {\n return\n }\n\n onClose()\n }\n document.addEventListener('mousedown', handleClick)\n return () => document.removeEventListener('mousedown', handleClick)\n }, [open, onClose, anchorRef, popoverId])\n\n if (!open) return null\n\n return (\n <MPortal>\n <div\n ref={popoverRef}\n className={cn('popover', flipped ? 'flipped' : 'normal', className)}\n style={{\n position: 'absolute',\n top: position?.top ?? 0,\n left: position?.left ?? 0,\n width: position?.width,\n zIndex: layerZ ?? undefined,\n visibility: position ? 'visible' : 'hidden',\n ...style,\n }}\n role=\"listbox\"\n >\n {children}\n </div>\n </MPortal>\n )\n}\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
require(`./core-
|
|
2
|
-
//# sourceMappingURL=MPortal-
|
|
1
|
+
require(`./core-D66c1_Wo.cjs`);let e=require(`react-dom`);function t({children:t,container:n}){let r=n??(typeof document<`u`?document.body:null);return r?(0,e.createPortal)(t,r):null}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return t}});
|
|
2
|
+
//# sourceMappingURL=MPortal-DUSIuINN.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MPortal-
|
|
1
|
+
{"version":3,"file":"MPortal-DUSIuINN.cjs","names":[],"sources":["../src/components/primitives/MPortal/MPortal.tsx"],"sourcesContent":["import {createPortal} from 'react-dom'\nimport type {MPortalProps} from './MPortal.types'\n\n// Mount children into a detached DOM target while defaulting to document.body.\nexport function MPortal({children, container}: MPortalProps) {\n const target = container ?? (typeof document !== 'undefined' ? document.body : null)\n if (!target) return null\n return createPortal(children, target)\n}\n"],"mappings":"0DAIA,SAAgB,EAAQ,CAAC,WAAU,aAA0B,CACzD,IAAM,EAAS,IAAc,OAAO,SAAa,IAAc,SAAS,KAAO,MAE/E,OADK,GACL,EAAA,EAAA,cAAoB,EAAU,EAAO,CADjB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require(`./cn-CU5TNITO.cjs`);require(`./core-
|
|
2
|
-
//# sourceMappingURL=MSimpleGrid-
|
|
1
|
+
const e=require(`./cn-CU5TNITO.cjs`);require(`./core-D66c1_Wo.cjs`);let t=require(`react/jsx-runtime`);function n({columns:n=2,minItemWidth:r,className:i,style:a,children:o,...s}){return(0,t.jsx)(`div`,{className:e.t(`grid`,`columns-${n}`,i),style:{...r?{"--grid-min-item-width":r}:{},...a},...s,children:o})}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return n}});
|
|
2
|
+
//# sourceMappingURL=MSimpleGrid-BzlIitcJ.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MSimpleGrid-
|
|
1
|
+
{"version":3,"file":"MSimpleGrid-BzlIitcJ.cjs","names":[],"sources":["../src/components/layout/MSimpleGrid/MSimpleGrid.tsx"],"sourcesContent":["import type {MSimpleGridProps} from './MSimpleGrid.types'\nimport {cn} from '../../../utils/cn'\nimport './MSimpleGrid.css'\n\n// Render a simple equal-column grid with a shared default spacing.\nexport function MSimpleGrid({columns = 2, minItemWidth, className, style, children, ...rest}: MSimpleGridProps) {\n return (\n <div\n className={cn('grid', `columns-${columns}`, className)}\n style={{\n ...(minItemWidth ? {'--grid-min-item-width': minItemWidth} : {}),\n ...style,\n }}\n {...rest}\n >\n {children}\n </div>\n )\n}\n"],"mappings":"uGAKA,SAAgB,EAAY,CAAC,UAAU,EAAG,eAAc,YAAW,QAAO,WAAU,GAAG,GAAyB,CAC5G,OACI,EAAA,EAAA,KAAC,MAAD,CACI,UAAW,EAAA,EAAG,OAAQ,WAAW,IAAW,EAAU,CACtD,MAAO,CACH,GAAI,EAAe,CAAC,wBAAyB,EAAa,CAAG,EAAE,CAC/D,GAAG,EACN,CACD,GAAI,EAEH,WACC,CAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require(`./theme-
|
|
2
|
-
//# sourceMappingURL=MSkeleton-
|
|
1
|
+
const e=require(`./theme-DgaM4CjM.cjs`),t=require(`./cn-CU5TNITO.cjs`);require(`./core-D66c1_Wo.cjs`);let n=require(`react/jsx-runtime`);function r({color:r=`primary`,size:i=`md`,hidden:a,pulsing:o=!1,rounded:s=!1,fullWidth:c=!1,icon:l,className:u,children:d,...f}){return(0,n.jsxs)(`span`,{className:t.t(`badge`,`color-${r}`,i,o&&`pulsing`,s&&`rounded`,c&&`full-width`,u),...e.r(a),...f,children:[l&&(0,n.jsx)(`span`,{className:`badge-icon`,children:l}),d]})}function i(e,t){return t<=1?`100%`:e===t-1?`68%`:e===t-2&&t>3?`88%`:`100%`}function a({variant:e=`text`,width:r,height:a,radius:o,lines:s=3,gap:c,animate:l=!0,className:u,style:d,...f}){let p=l===!1?`none`:l===!0?`shimmer`:l;return e===`text`?(0,n.jsx)(`div`,{className:t.t(`skeleton-group`,u),style:{width:r??void 0,gap:c??void 0,...d},...f,children:Array.from({length:s},(e,r)=>(0,n.jsx)(`div`,{className:t.t(`skeleton`,`text`,p),style:{width:i(r,s),height:a??void 0,borderRadius:o??void 0}},r))}):(0,n.jsx)(`div`,{className:t.t(`skeleton`,e,p,u),style:{width:r??void 0,height:a??void 0,borderRadius:o??void 0,...d},...f})}Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return a}});
|
|
2
|
+
//# sourceMappingURL=MSkeleton-BoFpowFU.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MSkeleton-
|
|
1
|
+
{"version":3,"file":"MSkeleton-BoFpowFU.cjs","names":[],"sources":["../src/components/feedback/MBadge/MBadge.tsx","../src/components/feedback/MSkeleton/MSkeleton.tsx"],"sourcesContent":["import type {MBadgeProps} from './MBadge.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport './MBadge.css'\n\n// Render a compact semantic label for status and metadata.\nexport function MBadge({\n color = 'primary',\n size = 'md',\n hidden,\n pulsing = false,\n rounded = false,\n fullWidth = false,\n icon,\n className,\n children,\n ...rest\n}: MBadgeProps) {\n return (\n <span\n className={cn(\n 'badge',\n `color-${color}`,\n size,\n pulsing && 'pulsing',\n rounded && 'rounded',\n fullWidth && 'full-width',\n className\n )}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n {icon && <span className=\"badge-icon\">{icon}</span>}\n {children}\n </span>\n )\n}\n","import type {MSkeletonProps} from './MSkeleton.types'\nimport {cn} from '../../../utils/cn'\nimport './MSkeleton.css'\n\nfunction getTextLineWidth(index: number, lines: number) {\n if (lines <= 1) {\n return '100%'\n }\n\n if (index === lines - 1) {\n return '68%'\n }\n\n if (index === lines - 2 && lines > 3) {\n return '88%'\n }\n\n return '100%'\n}\n\n// Animated placeholder shown while content is loading.\nexport function MSkeleton({\n variant = 'text',\n width,\n height,\n radius,\n lines = 3,\n gap,\n animate = true,\n className,\n style,\n ...rest\n}: MSkeletonProps) {\n const animation = animate === false ? 'none' : animate === true ? 'shimmer' : animate\n\n if (variant === 'text') {\n return (\n <div\n className={cn('skeleton-group', className)}\n style={{width: width ?? undefined, gap: gap ?? undefined, ...style}}\n {...rest}\n >\n {Array.from({length: lines}, (_, i) => (\n <div\n key={i}\n className={cn('skeleton', 'text', animation)}\n style={{\n width: getTextLineWidth(i, lines),\n height: height ?? undefined,\n borderRadius: radius ?? undefined,\n }}\n />\n ))}\n </div>\n )\n }\n\n return (\n <div\n className={cn('skeleton', variant, animation, className)}\n style={{\n width: width ?? undefined,\n height: height ?? undefined,\n borderRadius: radius ?? undefined,\n ...style,\n }}\n {...rest}\n />\n )\n}\n"],"mappings":"yIAMA,SAAgB,EAAO,CACnB,QAAQ,UACR,OAAO,KACP,SACA,UAAU,GACV,UAAU,GACV,YAAY,GACZ,OACA,YACA,WACA,GAAG,GACS,CACZ,OACI,EAAA,EAAA,MAAC,OAAD,CACI,UAAW,EAAA,EACP,QACA,SAAS,IACT,EACA,GAAW,UACX,GAAW,UACX,GAAa,aACb,EACH,CACD,GAAI,EAAA,EAAe,EAAO,CAC1B,GAAI,WAXR,CAaK,IAAQ,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,sBAAc,EAAY,CAAA,CAClD,EACE,GC9Bf,SAAS,EAAiB,EAAe,EAAe,CAapD,OAZI,GAAS,EACF,OAGP,IAAU,EAAQ,EACX,MAGP,IAAU,EAAQ,GAAK,EAAQ,EACxB,MAGJ,OAIX,SAAgB,EAAU,CACtB,UAAU,OACV,QACA,SACA,SACA,QAAQ,EACR,MACA,UAAU,GACV,YACA,QACA,GAAG,GACY,CACf,IAAM,EAAY,IAAY,GAAQ,OAAS,IAAY,GAAO,UAAY,EAwB9E,OAtBI,IAAY,QAER,EAAA,EAAA,KAAC,MAAD,CACI,UAAW,EAAA,EAAG,iBAAkB,EAAU,CAC1C,MAAO,CAAC,MAAO,GAAS,IAAA,GAAW,IAAK,GAAO,IAAA,GAAW,GAAG,EAAM,CACnE,GAAI,WAEH,MAAM,KAAK,CAAC,OAAQ,EAAM,EAAG,EAAG,KAC7B,EAAA,EAAA,KAAC,MAAD,CAEI,UAAW,EAAA,EAAG,WAAY,OAAQ,EAAU,CAC5C,MAAO,CACH,MAAO,EAAiB,EAAG,EAAM,CACjC,OAAQ,GAAU,IAAA,GAClB,aAAc,GAAU,IAAA,GAC3B,CACH,CAPO,EAOP,CACJ,CACA,CAAA,EAKV,EAAA,EAAA,KAAC,MAAD,CACI,UAAW,EAAA,EAAG,WAAY,EAAS,EAAW,EAAU,CACxD,MAAO,CACH,MAAO,GAAS,IAAA,GAChB,OAAQ,GAAU,IAAA,GAClB,aAAc,GAAU,IAAA,GACxB,GAAG,EACN,CACD,GAAI,EACN,CAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require(`./cn-CU5TNITO.cjs`);require(`./core-
|
|
2
|
-
//# sourceMappingURL=MSlider-
|
|
1
|
+
const e=require(`./cn-CU5TNITO.cjs`);require(`./core-D66c1_Wo.cjs`);let t=require(`react`),n=require(`react/jsx-runtime`);function r({min:r=0,max:i=100,step:a=1,value:o,onChange:s,marks:c,label:l,color:u=`primary`,disabled:d=!1,className:f,...p}){let m=(0,t.useRef)(null),h=(o-r)/(i-r)*100,g=(0,t.useCallback)(e=>{let t=Math.round(e/a)*a;return Math.min(i,Math.max(r,t))},[r,i,a]),_=(0,t.useCallback)(e=>{let t=m.current;if(!t)return o;let n=t.getBoundingClientRect();return g(r+(e-n.left)/n.width*(i-r))},[r,i,o,g]),v=(0,t.useCallback)(e=>{if(d)return;e.preventDefault();let t=e.currentTarget;t.setPointerCapture(e.pointerId),s(_(e.clientX));let n=e=>{s(_(e.clientX))},r=()=>{t.removeEventListener(`pointermove`,n),t.removeEventListener(`pointerup`,r)};t.addEventListener(`pointermove`,n),t.addEventListener(`pointerup`,r)},[d,s,_]);return(0,n.jsxs)(`div`,{className:e.t(`slider`,`color-${u}`,d&&`disabled`,f),...p,children:[l&&(0,n.jsx)(`div`,{className:`label`,children:l}),(0,n.jsxs)(`div`,{className:`track-wrapper`,ref:m,onPointerDown:v,children:[(0,n.jsxs)(`div`,{className:`track`,children:[(0,n.jsx)(`div`,{className:`fill`,style:{width:`${h}%`}}),(0,n.jsx)(`div`,{className:`thumb`,style:{left:`${h}%`}})]}),c&&c.length>0&&(0,n.jsx)(`div`,{className:`marks`,children:c.map(e=>(0,n.jsxs)(`div`,{className:`mark`,style:{left:`${(e.value-r)/(i-r)*100}%`},children:[(0,n.jsx)(`div`,{className:`tick`}),e.label&&(0,n.jsx)(`div`,{className:`label`,children:e.label})]},e.value))})]})]})}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return r}});
|
|
2
|
+
//# sourceMappingURL=MSlider-BTDBqF8t.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MSlider-
|
|
1
|
+
{"version":3,"file":"MSlider-BTDBqF8t.cjs","names":[],"sources":["../src/components/controls/MSlider/MSlider.tsx"],"sourcesContent":["import {useCallback, useRef} from 'react'\nimport type * as React from 'react'\nimport type {MSliderProps} from './MSlider.types'\nimport {cn} from '../../../utils/cn'\nimport './MSlider.css'\n\nexport function MSlider({\n min = 0,\n max = 100,\n step = 1,\n value,\n onChange,\n marks,\n label,\n color = 'primary',\n disabled = false,\n className,\n ...rest\n}: MSliderProps) {\n const trackRef = useRef<HTMLDivElement>(null)\n\n const percent = ((value - min) / (max - min)) * 100\n\n const clampAndSnap = useCallback(\n (raw: number) => {\n const snapped = Math.round(raw / step) * step\n return Math.min(max, Math.max(min, snapped))\n },\n [min, max, step]\n )\n\n const valueFromPointer = useCallback(\n (clientX: number) => {\n const track = trackRef.current\n if (!track) return value\n const rect = track.getBoundingClientRect()\n const ratio = (clientX - rect.left) / rect.width\n return clampAndSnap(min + ratio * (max - min))\n },\n [min, max, value, clampAndSnap]\n )\n\n const handlePointerDown = useCallback(\n (e: React.PointerEvent) => {\n if (disabled) return\n e.preventDefault()\n const target = e.currentTarget as HTMLElement\n target.setPointerCapture(e.pointerId)\n onChange(valueFromPointer(e.clientX))\n\n const onMove = (ev: PointerEvent) => {\n onChange(valueFromPointer(ev.clientX))\n }\n const onUp = () => {\n target.removeEventListener('pointermove', onMove)\n target.removeEventListener('pointerup', onUp)\n }\n target.addEventListener('pointermove', onMove)\n target.addEventListener('pointerup', onUp)\n },\n [disabled, onChange, valueFromPointer]\n )\n\n return (\n <div className={cn('slider', `color-${color}`, disabled && 'disabled', className)} {...rest}>\n {label && <div className=\"label\">{label}</div>}\n <div className=\"track-wrapper\" ref={trackRef} onPointerDown={handlePointerDown}>\n <div className=\"track\">\n <div className=\"fill\" style={{width: `${percent}%`}} />\n <div className=\"thumb\" style={{left: `${percent}%`}} />\n </div>\n {marks && marks.length > 0 && (\n <div className=\"marks\">\n {marks.map((mark) => {\n const markPercent = ((mark.value - min) / (max - min)) * 100\n return (\n <div key={mark.value} className=\"mark\" style={{left: `${markPercent}%`}}>\n <div className=\"tick\" />\n {mark.label && <div className=\"label\">{mark.label}</div>}\n </div>\n )\n })}\n </div>\n )}\n </div>\n </div>\n )\n}\n"],"mappings":"0HAMA,SAAgB,EAAQ,CACpB,MAAM,EACN,MAAM,IACN,OAAO,EACP,QACA,WACA,QACA,QACA,QAAQ,UACR,WAAW,GACX,YACA,GAAG,GACU,CACb,IAAM,GAAA,EAAA,EAAA,QAAkC,KAAK,CAEvC,GAAY,EAAQ,IAAQ,EAAM,GAAQ,IAE1C,GAAA,EAAA,EAAA,aACD,GAAgB,CACb,IAAM,EAAU,KAAK,MAAM,EAAM,EAAK,CAAG,EACzC,OAAO,KAAK,IAAI,EAAK,KAAK,IAAI,EAAK,EAAQ,CAAC,EAEhD,CAAC,EAAK,EAAK,EAAK,CACnB,CAEK,GAAA,EAAA,EAAA,aACD,GAAoB,CACjB,IAAM,EAAQ,EAAS,QACvB,GAAI,CAAC,EAAO,OAAO,EACnB,IAAM,EAAO,EAAM,uBAAuB,CAE1C,OAAO,EAAa,GADL,EAAU,EAAK,MAAQ,EAAK,OACR,EAAM,GAAK,EAElD,CAAC,EAAK,EAAK,EAAO,EAAa,CAClC,CAEK,GAAA,EAAA,EAAA,aACD,GAA0B,CACvB,GAAI,EAAU,OACd,EAAE,gBAAgB,CAClB,IAAM,EAAS,EAAE,cACjB,EAAO,kBAAkB,EAAE,UAAU,CACrC,EAAS,EAAiB,EAAE,QAAQ,CAAC,CAErC,IAAM,EAAU,GAAqB,CACjC,EAAS,EAAiB,EAAG,QAAQ,CAAC,EAEpC,MAAa,CACf,EAAO,oBAAoB,cAAe,EAAO,CACjD,EAAO,oBAAoB,YAAa,EAAK,EAEjD,EAAO,iBAAiB,cAAe,EAAO,CAC9C,EAAO,iBAAiB,YAAa,EAAK,EAE9C,CAAC,EAAU,EAAU,EAAiB,CACzC,CAED,OACI,EAAA,EAAA,MAAC,MAAD,CAAK,UAAW,EAAA,EAAG,SAAU,SAAS,IAAS,GAAY,WAAY,EAAU,CAAE,GAAI,WAAvF,CACK,IAAS,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,iBAAS,EAAY,CAAA,EAC9C,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,gBAAgB,IAAK,EAAU,cAAe,WAA7D,EACI,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,iBAAf,EACI,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,OAAO,MAAO,CAAC,MAAO,GAAG,EAAQ,GAAG,CAAI,CAAA,EACvD,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,QAAQ,MAAO,CAAC,KAAM,GAAG,EAAQ,GAAG,CAAI,CAAA,CACrD,GACL,GAAS,EAAM,OAAS,IACrB,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,iBACV,EAAM,IAAK,IAGJ,EAAA,EAAA,MAAC,MAAD,CAAsB,UAAU,OAAO,MAAO,CAAC,KAAM,IAFnC,EAAK,MAAQ,IAAQ,EAAM,GAAQ,IAEe,GAAG,UAAvE,EACI,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,OAAS,CAAA,CACvB,EAAK,QAAS,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,iBAAS,EAAK,MAAY,CAAA,CACtD,EAHI,EAAK,MAGT,CAEZ,CACA,CAAA,CAER,GACJ"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require(`./theme-
|
|
2
|
-
//# sourceMappingURL=MStack-
|
|
1
|
+
const e=require(`./theme-DgaM4CjM.cjs`),t=require(`./cn-CU5TNITO.cjs`),n=require(`./layoutProps-B8y2XwHy.cjs`);require(`./core-D66c1_Wo.cjs`);let r=require(`react/jsx-runtime`);function i({align:i=`stretch`,hidden:a,spacing:o,padding:s,fsize:c,mt:l,mb:u,ml:d,mr:f,mx:p,my:m,pt:h,pb:g,pl:_,pr:v,px:y,py:b,fullWidth:x,className:S,style:C,children:w,...T}){let E=n.n({fsize:c});return(0,r.jsx)(`div`,{className:t.t(`stack`,i!==`stretch`&&i,...n.t({spacing:o,padding:s,fsize:c,mt:l,mb:u,ml:d,mr:f,mx:p,my:m,pt:h,pb:g,pl:_,pr:v,px:y,py:b,fullWidth:x}),S),style:{...E,...C},...e.r(a),...T,children:w})}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return i}});
|
|
2
|
+
//# sourceMappingURL=MStack-B3Ldqsc-.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MStack-
|
|
1
|
+
{"version":3,"file":"MStack-B3Ldqsc-.cjs","names":[],"sources":["../src/components/layout/MStack/MStack.tsx"],"sourcesContent":["import type {MStackProps} from './MStack.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {getLayoutUtilityClassNames, getLayoutUtilityStyles} from '../../../utils/layoutProps'\nimport './MStack.css'\n\n// MStack children vertically with shared layout utility props.\nexport function MStack({\n align = 'stretch',\n hidden,\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n className,\n style,\n children,\n ...rest\n}: MStackProps) {\n const utilityStyle = getLayoutUtilityStyles({fsize})\n\n return (\n <div\n className={cn(\n 'stack',\n align !== 'stretch' && align,\n ...getLayoutUtilityClassNames({\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n }),\n className\n )}\n style={{...utilityStyle, ...style}}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n {children}\n </div>\n )\n}\n"],"mappings":"iLAOA,SAAgB,EAAO,CACnB,QAAQ,UACR,SACA,UACA,UACA,QACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,YACA,YACA,QACA,WACA,GAAG,GACS,CACZ,IAAM,EAAe,EAAA,EAAuB,CAAC,QAAM,CAAC,CAEpD,OACI,EAAA,EAAA,KAAC,MAAD,CACI,UAAW,EAAA,EACP,QACA,IAAU,WAAa,EACvB,GAAG,EAAA,EAA2B,CAC1B,UACA,UACA,QACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,YACH,CAAC,CACF,EACH,CACD,MAAO,CAAC,GAAG,EAAc,GAAG,EAAM,CAClC,GAAI,EAAA,EAAe,EAAO,CAC1B,GAAI,EAEH,WACC,CAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require(`./theme-
|
|
2
|
-
//# sourceMappingURL=MSubText-
|
|
1
|
+
const e=require(`./theme-DgaM4CjM.cjs`),t=require(`./cn-CU5TNITO.cjs`),n=require(`./MText-Dni707tS.cjs`);require(`./core-D66c1_Wo.cjs`);let r=require(`react/jsx-runtime`);function i({as:i=`span`,size:a=`sm`,tone:o=`muted`,hidden:s,color:c,className:l,children:u,...d}){return(0,r.jsx)(i,{className:t.t(`subtext`,!c&&o,a,...n.n({color:c}),l),...e.r(s),...d,children:u})}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return i}});
|
|
2
|
+
//# sourceMappingURL=MSubText-47PsgE8T.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MSubText-
|
|
1
|
+
{"version":3,"file":"MSubText-47PsgE8T.cjs","names":[],"sources":["../src/components/typography/MSubText/MSubText.tsx"],"sourcesContent":["import type {MSubTextProps} from './MSubText.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {getAppearanceClassNames} from '../../../utils/appearanceProps'\nimport './MSubText.css'\n\n// Render small, muted secondary text for captions, hints and metadata.\nexport function MSubText({\n as = 'span',\n size = 'sm',\n tone = 'muted',\n hidden,\n color,\n className,\n children,\n ...rest\n}: MSubTextProps) {\n const Component = as\n return (\n <Component\n className={cn('subtext', !color && tone, size, ...getAppearanceClassNames({color}), className)}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n {children}\n </Component>\n )\n}\n"],"mappings":"2KAOA,SAAgB,EAAS,CACrB,KAAK,OACL,OAAO,KACP,OAAO,QACP,SACA,QACA,YACA,WACA,GAAG,GACW,CAEd,OACI,EAAA,EAAA,KAFc,EAEd,CACI,UAAW,EAAA,EAAG,UAAW,CAAC,GAAS,EAAM,EAAM,GAAG,EAAA,EAAwB,CAAC,QAAM,CAAC,CAAE,EAAU,CAC9F,GAAI,EAAA,EAAe,EAAO,CAC1B,GAAI,EAEH,WACO,CAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require(`./theme-
|
|
2
|
-
//# sourceMappingURL=MSurface-
|
|
1
|
+
const e=require(`./theme-DgaM4CjM.cjs`),t=require(`./cn-CU5TNITO.cjs`),n=require(`./layoutProps-B8y2XwHy.cjs`);require(`./core-D66c1_Wo.cjs`);let r=require(`react/jsx-runtime`);function i({align:i=`center`,justify:a=`start`,wrap:o=`wrap`,hidden:s,padding:c,fsize:l,mt:u,mb:d,ml:f,mr:p,mx:m,my:h,pt:g,pb:_,pl:v,pr:y,px:b,py:x,fullWidth:S,className:C,style:w,children:T,...E}){let D=n.n({fsize:l});return(0,r.jsx)(`div`,{className:t.t(`inline`,i,`justify-${a}`,o,...n.t({padding:c,fsize:l,mt:u,mb:d,ml:f,mr:p,mx:m,my:h,pt:g,pb:_,pl:v,pr:y,px:b,py:x,fullWidth:S}),C),style:{...D,...w},...e.r(s),...E,children:T})}function a({component:i,to:a,href:o,target:s,rel:c,tone:l=`default`,outlined:u=!0,padded:d=!0,hidden:f,spacing:p,padding:m,fsize:h,mt:g,mb:_,ml:v,mr:y,mx:b,my:x,pt:S,pb:C,pl:w,pr:T,px:E,py:D,fullWidth:O,className:k,style:A,children:j,...M}){let N=n.n({fsize:h}),P=i??`div`;return(0,r.jsx)(P,{href:P===`a`||i?o:void 0,to:i?a:void 0,target:P===`a`||i?s:void 0,rel:P===`a`||i?c:void 0,className:t.t(`surface`,l,u&&`outlined`,d&&`padded`,...n.t({spacing:p,padding:m,fsize:h,mt:g,mb:_,ml:v,mr:y,mx:b,my:x,pt:S,pb:C,pl:w,pr:T,px:E,py:D,fullWidth:O}),k),style:{...N,...A},...e.r(f),...M,children:j})}Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return a}});
|
|
2
|
+
//# sourceMappingURL=MSurface-QYEygc_0.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MSurface-
|
|
1
|
+
{"version":3,"file":"MSurface-QYEygc_0.cjs","names":[],"sources":["../src/components/layout/MInline/MInline.tsx","../src/components/layout/MSurface/MSurface.tsx"],"sourcesContent":["import type {MInlineProps} from './MInline.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {getLayoutUtilityClassNames, getLayoutUtilityStyles} from '../../../utils/layoutProps'\nimport './MInline.css'\n\n// Arrange children horizontally with shared alignment and wrapping helpers.\n// `spacing` is not accepted — the flex gap built into `.inline` already spaces children;\n// outer margin should go through `mx/my` or `padding` to avoid overflowing the parent when paired with `fullWidth`.\nexport function MInline({\n align = 'center',\n justify = 'start',\n wrap = 'wrap',\n hidden,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n className,\n style,\n children,\n ...rest\n}: MInlineProps) {\n const utilityStyle = getLayoutUtilityStyles({fsize})\n\n return (\n <div\n className={cn(\n 'inline',\n align,\n `justify-${justify}`,\n wrap,\n ...getLayoutUtilityClassNames({\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n }),\n className\n )}\n style={{...utilityStyle, ...style}}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n {children}\n </div>\n )\n}\n","import type {MSurfaceProps} from './MSurface.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {getLayoutUtilityClassNames, getLayoutUtilityStyles} from '../../../utils/layoutProps'\nimport './MSurface.css'\n\n// Render a reusable surface primitive for cards, panels and preview blocks.\nexport function MSurface({\n component,\n to,\n href,\n target,\n rel,\n tone = 'default',\n outlined = true,\n padded = true,\n hidden,\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n className,\n style,\n children,\n ...rest\n}: MSurfaceProps) {\n const utilityStyle = getLayoutUtilityStyles({fsize})\n const Component = component ?? 'div'\n\n return (\n <Component\n href={Component === 'a' || component ? href : undefined}\n to={component ? to : undefined}\n target={Component === 'a' || component ? target : undefined}\n rel={Component === 'a' || component ? rel : undefined}\n className={cn(\n 'surface',\n tone,\n outlined && 'outlined',\n padded && 'padded',\n ...getLayoutUtilityClassNames({\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n }),\n className\n )}\n style={{...utilityStyle, ...style}}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n {children}\n </Component>\n )\n}\n"],"mappings":"iLASA,SAAgB,EAAQ,CACpB,QAAQ,SACR,UAAU,QACV,OAAO,OACP,SACA,UACA,QACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,YACA,YACA,QACA,WACA,GAAG,GACU,CACb,IAAM,EAAe,EAAA,EAAuB,CAAC,QAAM,CAAC,CAEpD,OACI,EAAA,EAAA,KAAC,MAAD,CACI,UAAW,EAAA,EACP,SACA,EACA,WAAW,IACX,EACA,GAAG,EAAA,EAA2B,CAC1B,UACA,QACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,YACH,CAAC,CACF,EACH,CACD,MAAO,CAAC,GAAG,EAAc,GAAG,EAAM,CAClC,GAAI,EAAA,EAAe,EAAO,CAC1B,GAAI,EAEH,WACC,CAAA,CC5Dd,SAAgB,EAAS,CACrB,YACA,KACA,OACA,SACA,MACA,OAAO,UACP,WAAW,GACX,SAAS,GACT,SACA,UACA,UACA,QACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,YACA,YACA,QACA,WACA,GAAG,GACW,CACd,IAAM,EAAe,EAAA,EAAuB,CAAC,QAAM,CAAC,CAC9C,EAAY,GAAa,MAE/B,OACI,EAAA,EAAA,KAAC,EAAD,CACI,KAAM,IAAc,KAAO,EAAY,EAAO,IAAA,GAC9C,GAAI,EAAY,EAAK,IAAA,GACrB,OAAQ,IAAc,KAAO,EAAY,EAAS,IAAA,GAClD,IAAK,IAAc,KAAO,EAAY,EAAM,IAAA,GAC5C,UAAW,EAAA,EACP,UACA,EACA,GAAY,WACZ,GAAU,SACV,GAAG,EAAA,EAA2B,CAC1B,UACA,UACA,QACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,YACH,CAAC,CACF,EACH,CACD,MAAO,CAAC,GAAG,EAAc,GAAG,EAAM,CAClC,GAAI,EAAA,EAAe,EAAO,CAC1B,GAAI,EAEH,WACO,CAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require(`./theme-
|
|
2
|
-
//# sourceMappingURL=MTag-
|
|
1
|
+
const e=require(`./theme-DgaM4CjM.cjs`),t=require(`./icons-D_NB67he.cjs`),n=require(`./cn-CU5TNITO.cjs`),r=require(`./MButton-sTKnano6.cjs`);require(`./core-D66c1_Wo.cjs`);let i=require(`react/jsx-runtime`);function a({label:a,color:o=`primary`,variant:s=`solid`,size:c=`md`,hidden:l,rounded:u=!1,closable:d=!1,onClose:f,icon:p,className:m,...h}){return(0,i.jsxs)(`span`,{className:n.t(`m-tag`,`color-${o}`,s,c,u&&`rounded`,m),...e.r(l),...h,children:[p&&(0,i.jsx)(`span`,{className:`m-tag icon`,children:p}),(0,i.jsx)(`span`,{className:`m-tag label`,children:a}),d&&(0,i.jsx)(r.t,{variant:`link`,color:`neutral`,iconOnly:!0,size:`xs`,className:`m-tag close`,onClick:e=>{e.stopPropagation(),f?.()},"aria-label":`Remove`,children:(0,i.jsx)(t.Xi,{})})]})}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return a}});
|
|
2
|
+
//# sourceMappingURL=MTag-BjV-dXkk.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MTag-
|
|
1
|
+
{"version":3,"file":"MTag-BjV-dXkk.cjs","names":[],"sources":["../src/components/feedback/MTag/MTag.tsx"],"sourcesContent":["import type {MTagProps} from './MTag.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {MButton} from '../../controls'\nimport {MCloseIcon} from '../../../icons'\nimport './MTag.css'\n\nexport function MTag({\n label,\n color = 'primary',\n variant = 'solid',\n size = 'md',\n hidden,\n rounded = false,\n closable = false,\n onClose,\n icon,\n className,\n ...rest\n}: MTagProps) {\n return (\n <span\n className={cn('m-tag', `color-${color}`, variant, size, rounded && 'rounded', className)}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n {icon && <span className=\"m-tag icon\">{icon}</span>}\n <span className=\"m-tag label\">{label}</span>\n {closable && (\n <MButton\n variant=\"link\"\n color=\"neutral\"\n iconOnly\n size=\"xs\"\n className=\"m-tag close\"\n onClick={(e) => {\n e.stopPropagation()\n onClose?.()\n }}\n aria-label=\"Remove\"\n >\n <MCloseIcon />\n </MButton>\n )}\n </span>\n )\n}\n"],"mappings":"+MAOA,SAAgB,EAAK,CACjB,QACA,QAAQ,UACR,UAAU,QACV,OAAO,KACP,SACA,UAAU,GACV,WAAW,GACX,UACA,OACA,YACA,GAAG,GACO,CACV,OACI,EAAA,EAAA,MAAC,OAAD,CACI,UAAW,EAAA,EAAG,QAAS,SAAS,IAAS,EAAS,EAAM,GAAW,UAAW,EAAU,CACxF,GAAI,EAAA,EAAe,EAAO,CAC1B,GAAI,WAHR,CAKK,IAAQ,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,sBAAc,EAAY,CAAA,EACnD,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,uBAAe,EAAa,CAAA,CAC3C,IACG,EAAA,EAAA,KAAC,EAAA,EAAD,CACI,QAAQ,OACR,MAAM,UACN,SAAA,GACA,KAAK,KACL,UAAU,cACV,QAAU,GAAM,CACZ,EAAE,iBAAiB,CACnB,KAAW,EAEf,aAAW,mBAEX,EAAA,EAAA,KAAC,EAAA,GAAD,EAAc,CAAA,CACR,CAAA,CAEX"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require(`./theme-
|
|
2
|
-
//# sourceMappingURL=MText-
|
|
1
|
+
const e=require(`./theme-DgaM4CjM.cjs`),t=require(`./cn-CU5TNITO.cjs`),n=require(`./layoutProps-B8y2XwHy.cjs`);require(`./core-D66c1_Wo.cjs`);let r=require(`react/jsx-runtime`);function i({color:e}){return[e&&`fcolor-${e}`]}function a({as:a=`p`,tone:o=`default`,size:s,align:c=`left`,hidden:l,color:u,weight:d=`normal`,truncate:f,spacing:p,padding:m,fsize:h,mt:g,mb:_,ml:v,mr:y,mx:b,my:x,pt:S,pb:C,pl:w,pr:T,px:E,py:D,fullWidth:O,className:k,style:A,children:j,...M}){let N=a,P=n.n({fsize:h}),F=typeof f==`number`?f:void 0;return(0,r.jsx)(N,{className:t.t(`text`,!u&&o,s,c,d,f===!0&&`truncate`,F!=null&&`line-clamp`,...i({color:u}),...n.t({spacing:p,padding:m,fsize:h,mt:g,mb:_,ml:v,mr:y,mx:b,my:x,pt:S,pb:C,pl:w,pr:T,px:E,py:D,fullWidth:O}),k),style:{...P,...F?{"--line-clamp":F}:void 0,...A},...e.r(l),...M,children:j})}Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return a}});
|
|
2
|
+
//# sourceMappingURL=MText-Dni707tS.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MText-
|
|
1
|
+
{"version":3,"file":"MText-Dni707tS.cjs","names":[],"sources":["../src/utils/appearanceProps.ts","../src/components/typography/MText/MText.tsx"],"sourcesContent":["import type {MColor} from '../theme'\n\nexport interface AppearanceProps {\n color?: MColor\n}\n\n// Translate semantic appearance props into shared utility classes.\nexport function getAppearanceClassNames({color}: AppearanceProps): Array<string | false | undefined> {\n return [color && `fcolor-${color}`]\n}\n","import type {MTextProps} from './MText.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {getAppearanceClassNames} from '../../../utils/appearanceProps'\nimport {getLayoutUtilityClassNames, getLayoutUtilityStyles} from '../../../utils/layoutProps'\nimport './MText.css'\n\n// Render body copy with shared tone, size and weight controls.\nexport function MText({\n as = 'p',\n tone = 'default',\n size,\n align = 'left',\n hidden,\n color,\n weight = 'normal',\n truncate,\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n className,\n style,\n children,\n ...rest\n}: MTextProps) {\n const Component = as\n const utilityStyle = getLayoutUtilityStyles({fsize})\n const lines = typeof truncate === 'number' ? truncate : undefined\n\n return (\n <Component\n className={cn(\n 'text',\n !color && tone,\n size,\n align,\n weight,\n truncate === true && 'truncate',\n lines != null && 'line-clamp',\n ...getAppearanceClassNames({color}),\n ...getLayoutUtilityClassNames({\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n }),\n className\n )}\n style={{\n ...utilityStyle,\n ...(lines ? ({'--line-clamp': lines} as React.CSSProperties) : undefined),\n ...style,\n }}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n {children}\n </Component>\n )\n}\n"],"mappings":"iLAOA,SAAgB,EAAwB,CAAC,SAA4D,CACjG,MAAO,CAAC,GAAS,UAAU,IAAQ,CCAvC,SAAgB,EAAM,CAClB,KAAK,IACL,OAAO,UACP,OACA,QAAQ,OACR,SACA,QACA,SAAS,SACT,WACA,UACA,UACA,QACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,YACA,YACA,QACA,WACA,GAAG,GACQ,CACX,IAAM,EAAY,EACZ,EAAe,EAAA,EAAuB,CAAC,QAAM,CAAC,CAC9C,EAAQ,OAAO,GAAa,SAAW,EAAW,IAAA,GAExD,OACI,EAAA,EAAA,KAAC,EAAD,CACI,UAAW,EAAA,EACP,OACA,CAAC,GAAS,EACV,EACA,EACA,EACA,IAAa,IAAQ,WACrB,GAAS,MAAQ,aACjB,GAAG,EAAwB,CAAC,QAAM,CAAC,CACnC,GAAG,EAAA,EAA2B,CAC1B,UACA,UACA,QACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,YACH,CAAC,CACF,EACH,CACD,MAAO,CACH,GAAG,EACH,GAAI,EAAS,CAAC,eAAgB,EAAM,CAA2B,IAAA,GAC/D,GAAG,EACN,CACD,GAAI,EAAA,EAAe,EAAO,CAC1B,GAAI,EAEH,WACO,CAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require(`./cn-CU5TNITO.cjs`),t=require(`./MPortal-
|
|
2
|
-
//# sourceMappingURL=MTooltip-
|
|
1
|
+
const e=require(`./cn-CU5TNITO.cjs`),t=require(`./MPortal-DUSIuINN.cjs`);require(`./core-D66c1_Wo.cjs`);let n=require(`react`),r=require(`react/jsx-runtime`);function i(e,t,n){switch(n){case`bottom`:return{top:e.bottom+6,left:e.left+e.width/2-t.width/2};case`left`:return{top:e.top+e.height/2-t.height/2,left:e.left-t.width-6};case`right`:return{top:e.top+e.height/2-t.height/2,left:e.right+6};default:return{top:e.top-t.height-6,left:e.left+e.width/2-t.width/2}}}function a({content:a,placement:o=`top`,delay:s=0,className:c,children:l,...u}){let[d,f]=(0,n.useState)(!1),[p,m]=(0,n.useState)(null),h=(0,n.useRef)(null),g=(0,n.useRef)(null),_=(0,n.useRef)(null),v=(0,n.useCallback)(()=>{s>0?_.current=setTimeout(()=>f(!0),s):f(!0)},[s]),y=(0,n.useCallback)(()=>{_.current&&=(clearTimeout(_.current),null),f(!1),m(null)},[]);return(0,n.useLayoutEffect)(()=>{!d||!h.current||!g.current||m(i(h.current.getBoundingClientRect(),g.current.getBoundingClientRect(),o))},[d,o]),(0,r.jsxs)(`div`,{ref:h,className:e.t(`tooltip wrapper`,c),onMouseEnter:v,onMouseLeave:y,onFocus:v,onBlur:y,...u,children:[l,d&&(0,r.jsx)(t.t,{children:(0,r.jsx)(`div`,{ref:g,className:e.t(`tooltip bubble`,o),role:`tooltip`,style:p?{top:p.top,left:p.left}:{visibility:`hidden`},children:a})})]})}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return a}});
|
|
2
|
+
//# sourceMappingURL=MTooltip-ChvuN4Ow.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MTooltip-
|
|
1
|
+
{"version":3,"file":"MTooltip-ChvuN4Ow.cjs","names":[],"sources":["../src/components/overlays/MTooltip/MTooltip.tsx"],"sourcesContent":["import {useRef, useState, useCallback, useLayoutEffect} from 'react'\nimport type {MTooltipProps} from './MTooltip.types'\nimport {cn} from '../../../utils/cn'\nimport {MPortal} from '../../primitives'\nimport './MTooltip.css'\n\nfunction computePosition(trigger: DOMRect, bubble: DOMRect, placement: string): {top: number; left: number} {\n const gap = 6\n switch (placement) {\n case 'bottom':\n return {top: trigger.bottom + gap, left: trigger.left + trigger.width / 2 - bubble.width / 2}\n case 'left':\n return {top: trigger.top + trigger.height / 2 - bubble.height / 2, left: trigger.left - bubble.width - gap}\n case 'right':\n return {top: trigger.top + trigger.height / 2 - bubble.height / 2, left: trigger.right + gap}\n default:\n return {top: trigger.top - bubble.height - gap, left: trigger.left + trigger.width / 2 - bubble.width / 2}\n }\n}\n\nexport function MTooltip({content, placement = 'top', delay = 0, className, children, ...rest}: MTooltipProps) {\n const [visible, setVisible] = useState(false)\n const [pos, setPos] = useState<{top: number; left: number} | null>(null)\n const wrapperRef = useRef<HTMLDivElement>(null)\n const bubbleRef = useRef<HTMLDivElement>(null)\n const timeoutRef = useRef<ReturnType<typeof setTimeout>>(null)\n\n const show = useCallback(() => {\n if (delay > 0) {\n timeoutRef.current = setTimeout(() => setVisible(true), delay)\n } else {\n setVisible(true)\n }\n }, [delay])\n\n const hide = useCallback(() => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current)\n timeoutRef.current = null\n }\n setVisible(false)\n setPos(null)\n }, [])\n\n useLayoutEffect(() => {\n if (!visible || !wrapperRef.current || !bubbleRef.current) return\n const triggerRect = wrapperRef.current.getBoundingClientRect()\n const bubbleRect = bubbleRef.current.getBoundingClientRect()\n setPos(computePosition(triggerRect, bubbleRect, placement))\n }, [visible, placement])\n\n return (\n <div\n ref={wrapperRef}\n className={cn('tooltip wrapper', className)}\n onMouseEnter={show}\n onMouseLeave={hide}\n onFocus={show}\n onBlur={hide}\n {...rest}\n >\n {children}\n {visible && (\n <MPortal>\n <div\n ref={bubbleRef}\n className={cn('tooltip bubble', placement)}\n role=\"tooltip\"\n style={pos ? {top: pos.top, left: pos.left} : {visibility: 'hidden'}}\n >\n {content}\n </div>\n </MPortal>\n )}\n </div>\n )\n}\n"],"mappings":"8JAMA,SAAS,EAAgB,EAAkB,EAAiB,EAAgD,CAExG,OAAQ,EAAR,CACI,IAAK,SACD,MAAO,CAAC,IAAK,EAAQ,OAAS,EAAK,KAAM,EAAQ,KAAO,EAAQ,MAAQ,EAAI,EAAO,MAAQ,EAAE,CACjG,IAAK,OACD,MAAO,CAAC,IAAK,EAAQ,IAAM,EAAQ,OAAS,EAAI,EAAO,OAAS,EAAG,KAAM,EAAQ,KAAO,EAAO,MAAQ,EAAI,CAC/G,IAAK,QACD,MAAO,CAAC,IAAK,EAAQ,IAAM,EAAQ,OAAS,EAAI,EAAO,OAAS,EAAG,KAAM,EAAQ,MAAQ,EAAI,CACjG,QACI,MAAO,CAAC,IAAK,EAAQ,IAAM,EAAO,OAAS,EAAK,KAAM,EAAQ,KAAO,EAAQ,MAAQ,EAAI,EAAO,MAAQ,EAAE,EAItH,SAAgB,EAAS,CAAC,UAAS,YAAY,MAAO,QAAQ,EAAG,YAAW,WAAU,GAAG,GAAsB,CAC3G,GAAM,CAAC,EAAS,IAAA,EAAA,EAAA,UAAuB,GAAM,CACvC,CAAC,EAAK,IAAA,EAAA,EAAA,UAAuD,KAAK,CAClE,GAAA,EAAA,EAAA,QAAoC,KAAK,CACzC,GAAA,EAAA,EAAA,QAAmC,KAAK,CACxC,GAAA,EAAA,EAAA,QAAmD,KAAK,CAExD,GAAA,EAAA,EAAA,iBAAyB,CACvB,EAAQ,EACR,EAAW,QAAU,eAAiB,EAAW,GAAK,CAAE,EAAM,CAE9D,EAAW,GAAK,EAErB,CAAC,EAAM,CAAC,CAEL,GAAA,EAAA,EAAA,iBAAyB,CAC3B,AAEI,EAAW,WADX,aAAa,EAAW,QAAQ,CACX,MAEzB,EAAW,GAAM,CACjB,EAAO,KAAK,EACb,EAAE,CAAC,CASN,OAPA,EAAA,EAAA,qBAAsB,CACd,CAAC,GAAW,CAAC,EAAW,SAAW,CAAC,EAAU,SAGlD,EAAO,EAFa,EAAW,QAAQ,uBAAuB,CAC3C,EAAU,QAAQ,uBAAuB,CACZ,EAAU,CAAC,EAC5D,CAAC,EAAS,EAAU,CAAC,EAGpB,EAAA,EAAA,MAAC,MAAD,CACI,IAAK,EACL,UAAW,EAAA,EAAG,kBAAmB,EAAU,CAC3C,aAAc,EACd,aAAc,EACd,QAAS,EACT,OAAQ,EACR,GAAI,WAPR,CASK,EACA,IACG,EAAA,EAAA,KAAC,EAAA,EAAD,CAAA,UACI,EAAA,EAAA,KAAC,MAAD,CACI,IAAK,EACL,UAAW,EAAA,EAAG,iBAAkB,EAAU,CAC1C,KAAK,UACL,MAAO,EAAM,CAAC,IAAK,EAAI,IAAK,KAAM,EAAI,KAAK,CAAG,CAAC,WAAY,SAAS,UAEnE,EACC,CAAA,CACA,CAAA,CAEZ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MTooltip-
|
|
1
|
+
{"version":3,"file":"MTooltip-H3we0a7w.js","names":[],"sources":["../src/components/overlays/MTooltip/MTooltip.tsx"],"sourcesContent":["import {useRef, useState, useCallback, useLayoutEffect} from 'react'\nimport type {MTooltipProps} from './MTooltip.types'\nimport {cn} from '../../../utils/cn'\nimport {MPortal} from '../../primitives'\nimport './MTooltip.css'\n\nfunction computePosition(trigger: DOMRect, bubble: DOMRect, placement: string): {top: number; left: number} {\n const gap = 6\n switch (placement) {\n case 'bottom':\n return {top: trigger.bottom + gap, left: trigger.left + trigger.width / 2 - bubble.width / 2}\n case 'left':\n return {top: trigger.top + trigger.height / 2 - bubble.height / 2, left: trigger.left - bubble.width - gap}\n case 'right':\n return {top: trigger.top + trigger.height / 2 - bubble.height / 2, left: trigger.right + gap}\n default:\n return {top: trigger.top - bubble.height - gap, left: trigger.left + trigger.width / 2 - bubble.width / 2}\n }\n}\n\nexport function MTooltip({content, placement = 'top', delay = 0, className, children, ...rest}: MTooltipProps) {\n const [visible, setVisible] = useState(false)\n const [pos, setPos] = useState<{top: number; left: number} | null>(null)\n const wrapperRef = useRef<HTMLDivElement>(null)\n const bubbleRef = useRef<HTMLDivElement>(null)\n const timeoutRef = useRef<ReturnType<typeof setTimeout>>(null)\n\n const show = useCallback(() => {\n if (delay > 0) {\n timeoutRef.current = setTimeout(() => setVisible(true), delay)\n } else {\n setVisible(true)\n }\n }, [delay])\n\n const hide = useCallback(() => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current)\n timeoutRef.current = null\n }\n setVisible(false)\n setPos(null)\n }, [])\n\n useLayoutEffect(() => {\n if (!visible || !wrapperRef.current || !bubbleRef.current) return\n const triggerRect = wrapperRef.current.getBoundingClientRect()\n const bubbleRect = bubbleRef.current.getBoundingClientRect()\n setPos(computePosition(triggerRect, bubbleRect, placement))\n }, [visible, placement])\n\n return (\n <div\n ref={wrapperRef}\n className={cn('tooltip wrapper', className)}\n onMouseEnter={show}\n onMouseLeave={hide}\n onFocus={show}\n onBlur={hide}\n {...rest}\n >\n {children}\n {visible && (\n <MPortal>\n <div\n ref={bubbleRef}\n className={cn('tooltip bubble', placement)}\n role=\"tooltip\"\n style={pos ? {top: pos.top, left: pos.left} : {visibility: 'hidden'}}\n >\n {content}\n </div>\n </MPortal>\n )}\n </div>\n )\n}\n"],"mappings":";;;;;AAMA,SAAS,EAAgB,GAAkB,GAAiB,GAAgD;AAExG,SAAQ,GAAR;EACI,KAAK,SACD,QAAO;GAAC,KAAK,EAAQ,SAAS;GAAK,MAAM,EAAQ,OAAO,EAAQ,QAAQ,IAAI,EAAO,QAAQ;GAAE;EACjG,KAAK,OACD,QAAO;GAAC,KAAK,EAAQ,MAAM,EAAQ,SAAS,IAAI,EAAO,SAAS;GAAG,MAAM,EAAQ,OAAO,EAAO,QAAQ;GAAI;EAC/G,KAAK,QACD,QAAO;GAAC,KAAK,EAAQ,MAAM,EAAQ,SAAS,IAAI,EAAO,SAAS;GAAG,MAAM,EAAQ,QAAQ;GAAI;EACjG,QACI,QAAO;GAAC,KAAK,EAAQ,MAAM,EAAO,SAAS;GAAK,MAAM,EAAQ,OAAO,EAAQ,QAAQ,IAAI,EAAO,QAAQ;GAAE;;;AAItH,SAAgB,EAAS,EAAC,YAAS,eAAY,OAAO,WAAQ,GAAG,cAAW,aAAU,GAAG,KAAsB;CAC3G,IAAM,CAAC,GAAS,KAAc,EAAS,GAAM,EACvC,CAAC,GAAK,KAAU,EAA6C,KAAK,EAClE,IAAa,EAAuB,KAAK,EACzC,IAAY,EAAuB,KAAK,EACxC,IAAa,EAAsC,KAAK,EAExD,IAAO,QAAkB;AAC3B,EAAI,IAAQ,IACR,EAAW,UAAU,iBAAiB,EAAW,GAAK,EAAE,EAAM,GAE9D,EAAW,GAAK;IAErB,CAAC,EAAM,CAAC,EAEL,IAAO,QAAkB;AAM3B,EALA,AAEI,EAAW,aADX,aAAa,EAAW,QAAQ,EACX,OAEzB,EAAW,GAAM,EACjB,EAAO,KAAK;IACb,EAAE,CAAC;AASN,QAPA,QAAsB;AACd,GAAC,KAAW,CAAC,EAAW,WAAW,CAAC,EAAU,WAGlD,EAAO,EAFa,EAAW,QAAQ,uBAAuB,EAC3C,EAAU,QAAQ,uBAAuB,EACZ,EAAU,CAAC;IAC5D,CAAC,GAAS,EAAU,CAAC,EAGpB,kBAAC,OAAD;EACI,KAAK;EACL,WAAW,EAAG,mBAAmB,EAAU;EAC3C,cAAc;EACd,cAAc;EACd,SAAS;EACT,QAAQ;EACR,GAAI;YAPR,CASK,GACA,KACG,kBAAC,GAAD,EAAA,UACI,kBAAC,OAAD;GACI,KAAK;GACL,WAAW,EAAG,kBAAkB,EAAU;GAC1C,MAAK;GACL,OAAO,IAAM;IAAC,KAAK,EAAI;IAAK,MAAM,EAAI;IAAK,GAAG,EAAC,YAAY,UAAS;aAEnE;GACC,CAAA,EACA,CAAA,CAEZ"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require(`./icons-
|
|
2
|
-
//# sourceMappingURL=MTreeView-
|
|
1
|
+
const e=require(`./icons-D_NB67he.cjs`),t=require(`./cn-CU5TNITO.cjs`),n=require(`./MPortal-DUSIuINN.cjs`),r=require(`./MCheckbox-CIX7wp41.cjs`);require(`./core-D66c1_Wo.cjs`);let i=require(`react`),a=require(`react/jsx-runtime`);var o={pdf:(0,a.jsx)(e.pi,{}),ts:(0,a.jsx)(e.ni,{}),tsx:(0,a.jsx)(e.ri,{}),js:(0,a.jsx)(e.Wr,{}),jsx:(0,a.jsx)(e.di,{}),css:(0,a.jsx)(e.Lr,{}),scss:(0,a.jsx)(e.Lr,{}),html:(0,a.jsx)(e.Hr,{}),json:(0,a.jsx)(e.Gr,{}),md:(0,a.jsx)(e.qr,{}),txt:(0,a.jsx)(e.ii,{}),csv:(0,a.jsx)(e.Rr,{}),zip:(0,a.jsx)(e.ci,{}),rar:(0,a.jsx)(e.ei,{}),svg:(0,a.jsx)(e.ti,{}),png:(0,a.jsx)(e.Qr,{}),jpg:(0,a.jsx)(e.Ur,{}),jpeg:(0,a.jsx)(e.fi,{}),gif:(0,a.jsx)(e.Vr,{}),webp:(0,a.jsx)(e.ai,{}),php:(0,a.jsx)(e.Zr,{}),xml:(0,a.jsx)(e.si,{}),xls:(0,a.jsx)(e.oi,{}),ppt:(0,a.jsx)(e.$r,{}),odt:(0,a.jsx)(e.Xr,{}),exe:(0,a.jsx)(e.Br,{}),mp3:(0,a.jsx)(e.Jr,{}),mp4:(0,a.jsx)(e.Yr,{})};function s(e){let t=e.lastIndexOf(`.`);return t<1?null:e.slice(t+1).toLowerCase()}function c(e){return e.kind===`folder`||!!e.children?.length}function l(t){let n=s(t);return n?o[n]??(0,a.jsx)(e.mi,{}):(0,a.jsx)(e._i,{})}function ee(t,n,r){return t.icon?t.icon:r?c(t)?n?(0,a.jsx)(e.Fr,{}):(0,a.jsx)(e.Ir,{}):l(t.label):null}function u(e){let t=new Map,n=new Map,r=new Map;function i(e){t.set(e.id,e);let a=new Set;for(let t of e.children??[])r.set(t.id,e.id),a.add(t.id),i(t).forEach(e=>a.add(e));return n.set(e.id,a),a}return e.forEach(i),{nodeMap:t,descendants:n,parentMap:r}}function d(e,t){let n=new Set;function r(e){if(!e.children?.length)return t.has(e.id)?{checked:1,total:1}:{checked:0,total:1};let i=0,a=0;for(let t of e.children){let e=r(t);i+=e.checked,a+=e.total}return i>0&&i<a&&n.add(e.id),{checked:i,total:a}}return e.forEach(r),n}function f(e,t){return typeof window>`u`?{x:e,y:t}:{x:Math.max(8,Math.min(e,window.innerWidth-220)),y:Math.max(8,Math.min(t,window.innerHeight-16))}}function p({node:n,color:i,level:o,expandable:s,selectable:l,expandedIds:u,selectedId:d,draggedId:f,dropTargetId:m,onToggle:h,onSelect:g,checkable:_,checkedIds:v,indeterminateIds:y,onCheck:b,indent:x,showLines:S,fileIcons:C,draggable:w,canDropOnNode:T,onContextMenu:E,onDragStart:D,onDragOver:O,onDrop:k,onDragEnd:A}){let j=c(n),M=u.has(n.id),N=d===n.id,P=f===n.id,te=m===n.id,F=T?.(n),I=ee(n,M,!!C),L=v?.has(n.id)??!1,R=y?.has(n.id)??!1;return(0,a.jsxs)(`li`,{role:`treeitem`,"aria-expanded":j?M:void 0,children:[(0,a.jsxs)(`div`,{className:t.t(`item`,N&&`selected`,n.disabled&&`disabled`,l&&!n.disabled&&`selectable`,w&&!n.disabled&&`draggable`,P&&`dragging`,F&&`can-drop`,te&&`drop-target`),"data-color":i,style:{paddingLeft:o*x},draggable:w&&!n.disabled,onClick:()=>{n.disabled||(j&&s&&h(n.id),l&&g?.(n.id,n))},onContextMenu:e=>E?.(e,n),onDragStart:e=>D?.(e,n),onDragOver:e=>O?.(e,n),onDrop:e=>k?.(e,n),onDragEnd:A,children:[(0,a.jsx)(`span`,{className:`toggle`,children:j&&s?(0,a.jsx)(`span`,{className:t.t(`arrow`,M&&`expanded`),children:(0,a.jsx)(e.qi,{})}):(0,a.jsx)(`span`,{className:`spacer`})}),_&&(0,a.jsx)(`span`,{className:`check`,onClick:e=>e.stopPropagation(),children:(0,a.jsx)(r.t,{size:`sm`,clickEffect:`none`,disabled:n.disabled,checked:L,indeterminate:R,onChange:()=>b?.(n.id)})}),I&&(0,a.jsx)(`span`,{className:`icon`,children:I}),(0,a.jsx)(`span`,{className:`label`,children:n.label})]}),j&&M&&(0,a.jsx)(`ul`,{className:`list`,role:`group`,style:S?{"--line-left":`${o*x+17}px`}:void 0,children:(n.children??[]).map(e=>(0,a.jsx)(p,{node:e,color:i,level:o+1,expandable:s,selectable:l,expandedIds:u,selectedId:d,draggedId:f,dropTargetId:m,onToggle:h,onSelect:g,checkable:_,checkedIds:v,indeterminateIds:y,onCheck:b,indent:x,showLines:S,fileIcons:C,draggable:w,canDropOnNode:T,onContextMenu:E,onDragStart:D,onDragOver:O,onDrop:k,onDragEnd:A},e.id))})]})}function m({items:e,color:r=`primary`,expandable:o=!0,selectable:s=!1,defaultExpanded:l=[],expanded:ee,onExpandChange:m,selected:h,onSelect:g,checkable:_=!1,defaultChecked:v=[],checked:y,onCheckedChange:b,indent:x=20,showLines:S=!0,fileIcons:C=!0,draggable:w=!1,canDrop:T,onMove:E,contextMenuItems:D,onContextMenuAction:O,className:k,...A}){let[j,M]=(0,i.useState)(l),[N,P]=(0,i.useState)(null),[te,F]=(0,i.useState)(v),[I,L]=(0,i.useState)(null),[R,z]=(0,i.useState)(null),[B,V]=(0,i.useState)(null),H=(0,i.useRef)(null),U=ee??j,W=new Set(U),ne=h===void 0?N:h,G=new Set(y??te),re=_?d(e,G):new Set,{nodeMap:K,descendants:q,parentMap:J}=u(e),Y=I?K.get(I)??null:null;(0,i.useEffect)(()=>{if(!B)return;function e(e){e&&H.current&&H.current.contains(e.target)||V(null)}function t(e){e.key===`Escape`&&V(null)}return document.addEventListener(`mousedown`,e),document.addEventListener(`scroll`,e,!0),window.addEventListener(`resize`,e),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`mousedown`,e),document.removeEventListener(`scroll`,e,!0),window.removeEventListener(`resize`,e),document.removeEventListener(`keydown`,t)}},[B]);function X(e){let t=W.has(e)?U.filter(t=>t!==e):[...U,e];m?m(t):M(t)}function Z(e,t){g?g(e,t):P(e)}function ie(e){let t=K.get(e);if(!t||t.disabled)return;let n=new Set(G),r=n.has(e),i=[e,...Array.from(q.get(e)??[])];if(r)for(let e of i)n.delete(e);else for(let e of i){let t=K.get(e);t&&!t.disabled&&n.add(e)}let a=J.get(e);for(;a;){let e=K.get(a);if(!e)break;let t=(e.children??[]).every(e=>e.disabled||n.has(e.id)),r=(e.children??[]).some(e=>!e.disabled);t&&r?n.add(a):n.delete(a),a=J.get(a)}let o=Array.from(n);y===void 0&&F(o),b?.(o)}function Q(){L(null),z(null)}function $(e){return!Y||!w||!E||e.disabled||!c(e)||e.id===Y.id||q.get(Y.id)?.has(e.id)?!1:T?T(Y,e):!0}function ae(e,t){if(!D||t.disabled)return;let n=D(t).filter(Boolean);if(!n.length)return;e.preventDefault(),Z(t.id,t);let r=f(e.clientX,e.clientY);V({node:t,items:n,x:r.x,y:r.y})}function oe(e,t){!w||t.disabled||(e.dataTransfer.effectAllowed=`move`,e.dataTransfer.setData(`text/plain`,t.id),V(null),L(t.id))}function se(e,t){$(t)&&(e.preventDefault(),e.dataTransfer.dropEffect=`move`,z(t.id))}function ce(e,t){if(e.preventDefault(),!Y||!$(t)){Q();return}E?.({draggedId:Y.id,draggedNode:Y,targetId:t.id,targetNode:t}),o&&!W.has(t.id)&&X(t.id),Q()}return(0,a.jsxs)(`div`,{className:t.t(`tree`,`color-${r}`,S&&`lines`,k),...A,children:[(0,a.jsx)(`ul`,{className:`list`,role:`tree`,children:e.map(e=>(0,a.jsx)(p,{node:e,color:r,level:0,expandable:o,selectable:s,expandedIds:W,selectedId:ne,draggedId:I,dropTargetId:R,onToggle:X,onSelect:Z,checkable:_,checkedIds:G,indeterminateIds:re,onCheck:ie,indent:x,showLines:S,fileIcons:C,draggable:w,canDropOnNode:$,onContextMenu:ae,onDragStart:oe,onDragOver:se,onDrop:ce,onDragEnd:Q},e.id))}),B&&(0,a.jsx)(n.t,{children:(0,a.jsx)(`div`,{ref:H,className:`tree menu`,style:{top:B.y,left:B.x},role:`menu`,children:B.items.map(e=>(0,a.jsxs)(`button`,{type:`button`,className:t.t(`action`,e.color,e.disabled&&`disabled`),role:`menuitem`,disabled:e.disabled,onClick:()=>{e.disabled||(O?.(e.id,B.node),V(null))},children:[e.icon&&(0,a.jsx)(`span`,{className:`icon`,children:e.icon}),(0,a.jsx)(`span`,{children:e.label})]},e.id))})})]})}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return m}});
|
|
2
|
+
//# sourceMappingURL=MTreeView-VYp0eErQ.cjs.map
|