@banzamel/mineralui 2.4.3 → 2.5.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-CvQuiGvT.cjs +2 -0
- package/dist/MAvatar-CvQuiGvT.cjs.map +1 -0
- package/dist/MAvatar-EkOBrEtS.js +73 -0
- package/dist/MAvatar-EkOBrEtS.js.map +1 -0
- package/dist/MButton-BxEky3xQ.cjs +2 -0
- package/dist/MButton-BxEky3xQ.cjs.map +1 -0
- package/dist/MButton-KELyyBw1.js +123 -0
- package/dist/MButton-KELyyBw1.js.map +1 -0
- package/dist/{MButtonGroup-BEJxXZ8u.js → MButtonGroup-DDnn8Wfy.js} +3 -3
- package/dist/{MButtonGroup-BEJxXZ8u.js.map → MButtonGroup-DDnn8Wfy.js.map} +1 -1
- package/dist/{MButtonGroup-DO1Tq3Za.cjs → MButtonGroup-Dz8Fm-oA.cjs} +2 -2
- package/dist/{MButtonGroup-DO1Tq3Za.cjs.map → MButtonGroup-Dz8Fm-oA.cjs.map} +1 -1
- package/dist/{MCard-P8OoswWM.cjs → MCard-Bqm4BjK_.cjs} +2 -2
- package/dist/MCard-Bqm4BjK_.cjs.map +1 -0
- package/dist/{MCard-BqSkGAgf.js → MCard-CqZYGaS2.js} +4 -4
- package/dist/MCard-CqZYGaS2.js.map +1 -0
- package/dist/MCheckbox-CaWgyUn5.js +72 -0
- package/dist/MCheckbox-CaWgyUn5.js.map +1 -0
- package/dist/MCheckbox-DpKJpnFF.cjs +2 -0
- package/dist/MCheckbox-DpKJpnFF.cjs.map +1 -0
- package/dist/{MConflictIllustration-znC7ijmP.js → MConflictIllustration-dwZS44ye.js} +1517 -1515
- package/dist/MConflictIllustration-dwZS44ye.js.map +1 -0
- package/dist/MConflictIllustration-vfHs-jad.cjs +2 -0
- package/dist/MConflictIllustration-vfHs-jad.cjs.map +1 -0
- package/dist/MDetailList-C3othNs3.js +127 -0
- package/dist/MDetailList-C3othNs3.js.map +1 -0
- package/dist/MDetailList-DkDHLdJ8.cjs +2 -0
- package/dist/MDetailList-DkDHLdJ8.cjs.map +1 -0
- package/dist/MDropdownMenu-C4-r7UZM.cjs +2 -0
- package/dist/MDropdownMenu-C4-r7UZM.cjs.map +1 -0
- package/dist/MDropdownMenu-Dvg9UsHB.js +219 -0
- package/dist/MDropdownMenu-Dvg9UsHB.js.map +1 -0
- package/dist/MGrid-CQqT8nHi.js +271 -0
- package/dist/MGrid-CQqT8nHi.js.map +1 -0
- package/dist/MGrid-tBsqShLG.cjs +2 -0
- package/dist/MGrid-tBsqShLG.cjs.map +1 -0
- package/dist/MHeading-DQSQ8c7L.js +21 -0
- package/dist/MHeading-DQSQ8c7L.js.map +1 -0
- package/dist/MHeading-DiGYs1FJ.cjs +2 -0
- package/dist/MHeading-DiGYs1FJ.cjs.map +1 -0
- package/dist/MInput-BeEGufZG.cjs +2 -0
- package/dist/MInput-BeEGufZG.cjs.map +1 -0
- package/dist/MInput-QnQV9L8U.js +190 -0
- package/dist/MInput-QnQV9L8U.js.map +1 -0
- package/dist/MInputCVC-CCNRAqHw.cjs +2 -0
- package/dist/MInputCVC-CCNRAqHw.cjs.map +1 -0
- package/dist/MInputCVC-IXIYZwex.js +410 -0
- package/dist/MInputCVC-IXIYZwex.js.map +1 -0
- package/dist/MInputSearch-BSIc6m2P.cjs +2 -0
- package/dist/MInputSearch-BSIc6m2P.cjs.map +1 -0
- package/dist/MInputSearch-CNuTAbYs.js +44 -0
- package/dist/MInputSearch-CNuTAbYs.js.map +1 -0
- package/dist/{MKbd-BR1GX5oK.cjs → MKbd-CnW3NUIu.cjs} +2 -2
- package/dist/{MKbd-BR1GX5oK.cjs.map → MKbd-CnW3NUIu.cjs.map} +1 -1
- package/dist/{MKbd-COb7oh_k.js → MKbd-DjfGyajR.js} +2 -2
- package/dist/{MKbd-COb7oh_k.js.map → MKbd-DjfGyajR.js.map} +1 -1
- package/dist/MLink-C6uwA6db.cjs +2 -0
- package/dist/MLink-C6uwA6db.cjs.map +1 -0
- package/dist/MLink-ixg0xFFI.js +31 -0
- package/dist/MLink-ixg0xFFI.js.map +1 -0
- package/dist/MLoader-CViA3zBo.js +44 -0
- package/dist/MLoader-CViA3zBo.js.map +1 -0
- package/dist/MLoader-DUOoOoNE.cjs +2 -0
- package/dist/MLoader-DUOoOoNE.cjs.map +1 -0
- package/dist/MPagination-BTGenxWW.js +122 -0
- package/dist/MPagination-BTGenxWW.js.map +1 -0
- package/dist/MPagination-DitmdtCc.cjs +2 -0
- package/dist/MPagination-DitmdtCc.cjs.map +1 -0
- package/dist/MPopover-CBDbUOW6.js +183 -0
- package/dist/MPopover-CBDbUOW6.js.map +1 -0
- package/dist/MPopover-ZeoU9hb5.cjs +2 -0
- package/dist/MPopover-ZeoU9hb5.cjs.map +1 -0
- package/dist/{MSimpleGrid-Ui8cI0ho.js → MSimpleGrid-C_QvLmck.js} +3 -3
- package/dist/MSimpleGrid-C_QvLmck.js.map +1 -0
- package/dist/MSimpleGrid-wgvjnxwM.cjs +2 -0
- package/dist/MSimpleGrid-wgvjnxwM.cjs.map +1 -0
- package/dist/{MSkeleton-Dhu-loDO.js → MSkeleton-BpcpBBJq.js} +12 -10
- package/dist/MSkeleton-BpcpBBJq.js.map +1 -0
- package/dist/MSkeleton-DuAN8Vcv.cjs +2 -0
- package/dist/MSkeleton-DuAN8Vcv.cjs.map +1 -0
- package/dist/MSlider-CLASUc2H.js +134 -0
- package/dist/MSlider-CLASUc2H.js.map +1 -0
- package/dist/MSlider-hONQBulE.cjs +2 -0
- package/dist/MSlider-hONQBulE.cjs.map +1 -0
- package/dist/MStack-BwAFeGGg.js +39 -0
- package/dist/MStack-BwAFeGGg.js.map +1 -0
- package/dist/MStack-CGII4A-q.cjs +2 -0
- package/dist/MStack-CGII4A-q.cjs.map +1 -0
- package/dist/MSubText-BeZk-fhz.js +17 -0
- package/dist/MSubText-BeZk-fhz.js.map +1 -0
- package/dist/MSubText-Dl1PfToZ.cjs +2 -0
- package/dist/MSubText-Dl1PfToZ.cjs.map +1 -0
- package/dist/MSurface-B_QnRLr5.js +74 -0
- package/dist/MSurface-B_QnRLr5.js.map +1 -0
- package/dist/MSurface-BrFo-JMJ.cjs +2 -0
- package/dist/MSurface-BrFo-JMJ.cjs.map +1 -0
- package/dist/MTag-BZrKN_DS.js +41 -0
- package/dist/MTag-BZrKN_DS.js.map +1 -0
- package/dist/MTag-DCE1vRJM.cjs +2 -0
- package/dist/MTag-DCE1vRJM.cjs.map +1 -0
- package/dist/MText-BUWQPoBM.js +45 -0
- package/dist/MText-BUWQPoBM.js.map +1 -0
- package/dist/MText-nsvLFsSv.cjs +2 -0
- package/dist/MText-nsvLFsSv.cjs.map +1 -0
- package/dist/MTooltip-BRSPJ3RY.js +100 -0
- package/dist/MTooltip-BRSPJ3RY.js.map +1 -0
- package/dist/MTooltip-Cj2Fxmzc.cjs +2 -0
- package/dist/MTooltip-Cj2Fxmzc.cjs.map +1 -0
- package/dist/MTreeView-BWCTlsU-.cjs +2 -0
- package/dist/MTreeView-BWCTlsU-.cjs.map +1 -0
- package/dist/MTreeView-CWcMwE-Z.js +554 -0
- package/dist/MTreeView-CWcMwE-Z.js.map +1 -0
- package/dist/calendar-2yhnCkGW.cjs +2 -0
- package/dist/calendar-2yhnCkGW.cjs.map +1 -0
- package/dist/calendar-DcNYDTVb.js +195 -0
- package/dist/calendar-DcNYDTVb.js.map +1 -0
- package/dist/calendar.cjs +1 -1
- package/dist/calendar.js +1 -1
- package/dist/{calendarDates-M_Dawj0j.js → calendarDates-Bpw_G_QR.js} +30 -19
- package/dist/calendarDates-Bpw_G_QR.js.map +1 -0
- package/dist/calendarDates-Cg0nm69Y.cjs +2 -0
- package/dist/calendarDates-Cg0nm69Y.cjs.map +1 -0
- package/dist/cards-Bp886TRb.cjs +2 -0
- package/dist/cards-Bp886TRb.cjs.map +1 -0
- package/dist/cards-BvER6Gx0.js +1277 -0
- package/dist/cards-BvER6Gx0.js.map +1 -0
- package/dist/cards.cjs +1 -1
- package/dist/cards.js +2 -2
- package/dist/{cn-YER3QsV1.js → cn-CUSXNnjF.js} +1 -1
- package/dist/{cn-YER3QsV1.js.map → cn-CUSXNnjF.js.map} +1 -1
- package/dist/{cn-CU5TNITO.cjs → cn-DYFxgzi2.cjs} +1 -1
- package/dist/{cn-CU5TNITO.cjs.map → cn-DYFxgzi2.cjs.map} +1 -1
- package/dist/components/cards/MCardDaySchedule/MCardDaySchedule.d.ts +1 -1
- package/dist/components/cards/MCardDocumentTree/MCardDocumentTree.d.ts +1 -1
- package/dist/components/cards/MCardGrid/MCardGrid.d.ts +1 -1
- package/dist/components/cards/MCardPayment/MCardPayment.d.ts +1 -1
- package/dist/components/cards/MCardPayment/MCardPayment.types.d.ts +4 -0
- package/dist/components/cards/MCardPaymentMethod/MCardPaymentMethod.d.ts +1 -1
- package/dist/components/cards/MStatCard/MStatCard.d.ts +1 -1
- package/dist/components/controls/MCheckbox/MCheckbox.types.d.ts +6 -0
- package/dist/components/controls/MLoadMore/MLoadMore.d.ts +1 -1
- package/dist/components/controls/MSlider/MSlider.d.ts +1 -1
- package/dist/components/controls/MSlider/MSlider.types.d.ts +5 -0
- package/dist/components/data/MTreeView/MTreeView.d.ts +1 -1
- package/dist/components/data/MTreeView/MTreeView.types.d.ts +6 -0
- package/dist/components/data/MWeekGrid/MWeekGrid.d.ts +1 -1
- package/dist/components/data/MWeekGrid/MWeekGrid.types.d.ts +9 -3
- package/dist/components/display/MCodeBlock/MCodeBlock.d.ts +1 -1
- package/dist/components/dropdowns/MAutocomplete/MAutocomplete.d.ts +1 -1
- package/dist/components/dropdowns/MAutocomplete/MAutocomplete.types.d.ts +8 -2
- package/dist/components/dropdowns/MSelect/MSelect.d.ts +1 -1
- package/dist/components/dropdowns/shared/TimeColumnListbox.d.ts +20 -0
- package/dist/components/feedback/MAlert/MAlert.d.ts +1 -1
- package/dist/components/feedback/MBadge/MBadge.d.ts +1 -1
- package/dist/components/feedback/MBanner/MBanner.d.ts +1 -1
- package/dist/components/feedback/MLoader/MLoader.d.ts +1 -1
- package/dist/components/feedback/MSpinner/MSpinner.d.ts +1 -1
- package/dist/components/feedback/MTag/MTag.d.ts +1 -1
- package/dist/components/inputs/MInput/MInput.types.d.ts +6 -1
- package/dist/components/inputs/MInput/useFormatCaret.d.ts +8 -0
- package/dist/components/layout/MCanvasGrid/MCanvasGrid.types.d.ts +5 -0
- package/dist/components/layout/MContainer/MContainer.d.ts +1 -1
- package/dist/components/layout/MDivider/MDivider.d.ts +1 -1
- package/dist/components/layout/MFooter/MFooter.d.ts +1 -1
- package/dist/components/layout/MHeader/MHeader.d.ts +1 -1
- package/dist/components/layout/MInline/MInline.d.ts +1 -1
- package/dist/components/layout/MNavbar/MNavbar.d.ts +1 -1
- package/dist/components/layout/MNavbar/MNavbar.types.d.ts +2 -0
- package/dist/components/layout/MSection/MSection.d.ts +1 -1
- package/dist/components/layout/MStack/MStack.d.ts +1 -1
- package/dist/components/layout/MStickyPanel/MStickyPanel.types.d.ts +4 -0
- package/dist/components/layout/MSurface/MSurface.d.ts +1 -1
- package/dist/components/media/MAvatar/MAvatar.d.ts +1 -1
- package/dist/components/media/MAvatar/MAvatar.types.d.ts +10 -0
- package/dist/components/media/MCarousel/MCarousel.d.ts +1 -1
- package/dist/components/media/MImage/MImage.d.ts +1 -1
- package/dist/components/media/carouselA11y.d.ts +9 -0
- package/dist/components/overlays/MCommandPalette/MCommandPalette.d.ts +1 -1
- package/dist/components/overlays/MDropdownMenu/MDropdownMenu.d.ts +4 -2
- package/dist/components/overlays/MDropdownMenu/MDropdownMenu.types.d.ts +3 -1
- package/dist/components/overlays/MPopconfirm/MPopconfirm.d.ts +1 -1
- package/dist/components/overlays/scrollLock.d.ts +14 -0
- package/dist/components/primitives/MPopover/MPopover.d.ts +1 -1
- package/dist/components/primitives/MPopover/MPopover.types.d.ts +32 -1
- package/dist/components/primitives/MPopover/popoverStack.d.ts +6 -0
- package/dist/components/typography/MHeading/MHeading.d.ts +2 -3
- package/dist/components/typography/MSubText/MSubText.d.ts +1 -1
- package/dist/components/typography/MText/MText.d.ts +1 -1
- package/dist/controls-B4Dxaab4.js +491 -0
- package/dist/controls-B4Dxaab4.js.map +1 -0
- package/dist/controls-CyXEIOXD.cjs +2 -0
- package/dist/controls-CyXEIOXD.cjs.map +1 -0
- package/dist/controls.cjs +1 -1
- package/dist/controls.js +5 -5
- package/dist/creditCards-Bo2mrc53.cjs +2 -0
- package/dist/creditCards-Bo2mrc53.cjs.map +1 -0
- package/dist/{creditCards-D_iWmtG6.js → creditCards-DmDOyvcw.js} +20 -31
- package/dist/creditCards-DmDOyvcw.js.map +1 -0
- package/dist/data-BM3KG8oN.cjs +2 -0
- package/dist/data-BM3KG8oN.cjs.map +1 -0
- package/dist/data-qnR8OBmj.js +808 -0
- package/dist/data-qnR8OBmj.js.map +1 -0
- package/dist/data.cjs +1 -1
- package/dist/data.js +2 -2
- package/dist/{dateUtils-CUY6CRCf.js → dateUtils-B-ToNZq_.js} +5 -6
- package/dist/dateUtils-B-ToNZq_.js.map +1 -0
- package/dist/dateUtils-z2L7ZaxA.cjs +2 -0
- package/dist/dateUtils-z2L7ZaxA.cjs.map +1 -0
- package/dist/display-BLMOBofj.cjs +3 -0
- package/dist/display-BLMOBofj.cjs.map +1 -0
- package/dist/display-Dlb79lkA.js +968 -0
- package/dist/display-Dlb79lkA.js.map +1 -0
- package/dist/display.cjs +1 -1
- package/dist/display.js +2 -2
- package/dist/dropdowns-2_7VMEDo.js +2009 -0
- package/dist/dropdowns-2_7VMEDo.js.map +1 -0
- package/dist/dropdowns-DN7j8J-V.cjs +2 -0
- package/dist/dropdowns-DN7j8J-V.cjs.map +1 -0
- package/dist/dropdowns.cjs +1 -1
- package/dist/dropdowns.js +1 -1
- package/dist/feedback-CECayytY.js +335 -0
- package/dist/feedback-CECayytY.js.map +1 -0
- package/dist/feedback-paV8Ls-h.cjs +2 -0
- package/dist/feedback-paV8Ls-h.cjs.map +1 -0
- package/dist/feedback.cjs +1 -1
- package/dist/feedback.js +5 -5
- package/dist/form-Br56h5EF.cjs +2 -0
- package/dist/form-Br56h5EF.cjs.map +1 -0
- package/dist/form-CJmMZgsH.js +165 -0
- package/dist/form-CJmMZgsH.js.map +1 -0
- package/dist/form.cjs +1 -1
- package/dist/form.js +1 -1
- package/dist/{formatters-CNjg_h7-.cjs → formatters-CauWlsnM.cjs} +1 -1
- package/dist/{formatters-CNjg_h7-.cjs.map → formatters-CauWlsnM.cjs.map} +1 -1
- package/dist/{formatters-T0vvjMtB.js → formatters-Doqdu_w1.js} +1 -1
- package/dist/{formatters-T0vvjMtB.js.map → formatters-Doqdu_w1.js.map} +1 -1
- package/dist/frameworkTexts-CaqdiKHW.cjs +2 -0
- package/dist/frameworkTexts-CaqdiKHW.cjs.map +1 -0
- package/dist/frameworkTexts-o43FqY1A.js +505 -0
- package/dist/frameworkTexts-o43FqY1A.js.map +1 -0
- package/dist/i18n/MI18nProvider.d.ts +6 -1
- package/dist/i18n/frameworkTexts.d.ts +511 -0
- package/dist/i18n/index.d.ts +1 -0
- package/dist/i18n.cjs +1 -1
- package/dist/i18n.js +2 -2
- package/dist/icons-Bp8bB9TP.cjs +2 -0
- package/dist/icons-Bp8bB9TP.cjs.map +1 -0
- package/dist/{icons-CBMl-kOM.js → icons-IqEBmGh3.js} +1223 -1220
- package/dist/icons-IqEBmGh3.js.map +1 -0
- package/dist/icons.cjs +1 -1
- package/dist/icons.js +1 -1
- package/dist/illustrations.cjs +1 -1
- package/dist/illustrations.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.js +56 -56
- package/dist/inputs-C0BJzlA-.js +1923 -0
- package/dist/inputs-C0BJzlA-.js.map +1 -0
- package/dist/inputs-CvNBBLFA.cjs +2 -0
- package/dist/inputs-CvNBBLFA.cjs.map +1 -0
- package/dist/inputs.cjs +1 -1
- package/dist/inputs.js +4 -4
- package/dist/layout-BSFqGXLZ.js +1101 -0
- package/dist/layout-BSFqGXLZ.js.map +1 -0
- package/dist/layout-MKqvUkPv.cjs +2 -0
- package/dist/layout-MKqvUkPv.cjs.map +1 -0
- package/dist/layout.cjs +1 -1
- package/dist/layout.js +6 -6
- package/dist/{layoutProps-Ck4VtGm9.cjs → layoutProps-B8y2XwHy.cjs} +1 -1
- package/dist/{layoutProps-Ck4VtGm9.cjs.map → layoutProps-B8y2XwHy.cjs.map} +1 -1
- package/dist/{layoutProps-Cl6d1KmH.js → layoutProps-CE5-ghKw.js} +1 -1
- package/dist/{layoutProps-Cl6d1KmH.js.map → layoutProps-CE5-ghKw.js.map} +1 -1
- package/dist/{licensing-f5KYVz7D.js → licensing-BKmoAdfr.js} +5 -4
- package/dist/licensing-BKmoAdfr.js.map +1 -0
- package/dist/licensing-DVgjkw-s.cjs +2 -0
- package/dist/licensing-DVgjkw-s.cjs.map +1 -0
- package/dist/media-fiasAbBv.js +485 -0
- package/dist/media-fiasAbBv.js.map +1 -0
- package/dist/media-tr1s386v.cjs +2 -0
- package/dist/media-tr1s386v.cjs.map +1 -0
- package/dist/media.cjs +1 -1
- package/dist/media.js +2 -2
- package/dist/overlays-Df-NpmkW.cjs +2 -0
- package/dist/overlays-Df-NpmkW.cjs.map +1 -0
- package/dist/overlays-W0WW3fn7.js +607 -0
- package/dist/overlays-W0WW3fn7.js.map +1 -0
- package/dist/overlays.cjs +1 -1
- package/dist/overlays.js +3 -3
- package/dist/primitives.cjs +1 -1
- package/dist/primitives.js +2 -2
- package/dist/radioGroupKeys-Bm-Qeh8G.js +28 -0
- package/dist/radioGroupKeys-Bm-Qeh8G.js.map +1 -0
- package/dist/radioGroupKeys-COL8uXbH.cjs +2 -0
- package/dist/radioGroupKeys-COL8uXbH.cjs.map +1 -0
- package/dist/{relativeTime-Cr-NVzij.js → relativeTime-BqCuaBqb.js} +1 -1
- package/dist/{relativeTime-Cr-NVzij.js.map → relativeTime-BqCuaBqb.js.map} +1 -1
- package/dist/{relativeTime-DgYBUaVm.cjs → relativeTime-DUbW4O44.cjs} +1 -1
- package/dist/{relativeTime-DgYBUaVm.cjs.map → relativeTime-DUbW4O44.cjs.map} +1 -1
- package/dist/scrollLock-C9P9o6wH.cjs +2 -0
- package/dist/scrollLock-C9P9o6wH.cjs.map +1 -0
- package/dist/scrollLock-D27VmgPV.js +14 -0
- package/dist/scrollLock-D27VmgPV.js.map +1 -0
- package/dist/style-runtime.cjs +1 -1
- package/dist/style-runtime.js +1 -1
- package/dist/styles.css +1 -1
- package/dist/theme/MThemeProvider.d.ts +18 -1
- package/dist/theme/index.d.ts +2 -2
- package/dist/{theme-DAOU1aPs.js → theme-B_juOenJ.js} +71 -61
- package/dist/theme-B_juOenJ.js.map +1 -0
- package/dist/theme-ByPZH0dh.cjs +2 -0
- package/dist/theme-ByPZH0dh.cjs.map +1 -0
- package/dist/theme.cjs +1 -1
- package/dist/theme.js +2 -2
- package/dist/{typography-C806GYT4.js → typography-DNcB8dOy.js} +3 -3
- package/dist/{typography-C806GYT4.js.map → typography-DNcB8dOy.js.map} +1 -1
- package/dist/{typography-4v01oNWx.cjs → typography-I7aeG8pH.cjs} +2 -2
- package/dist/{typography-4v01oNWx.cjs.map → typography-I7aeG8pH.cjs.map} +1 -1
- package/dist/typography.cjs +1 -1
- package/dist/typography.js +6 -6
- package/dist/useGhostText-CKsb8Ufa.js +240 -0
- package/dist/useGhostText-CKsb8Ufa.js.map +1 -0
- package/dist/useGhostText-DO-tfxS0.cjs +2 -0
- package/dist/useGhostText-DO-tfxS0.cjs.map +1 -0
- package/dist/useModalLayer-CpOPSDbf.js +128 -0
- package/dist/useModalLayer-CpOPSDbf.js.map +1 -0
- package/dist/useModalLayer-Cyt93Prs.cjs +2 -0
- package/dist/useModalLayer-Cyt93Prs.cjs.map +1 -0
- package/dist/utils/calendarDates.d.ts +5 -0
- package/dist/utils/radioGroupKeys.d.ts +9 -0
- package/dist/utils/useDateGridNav.d.ts +39 -0
- package/dist/utils/useGhostText.d.ts +2 -1
- package/dist/utils/useKeyboardNav.d.ts +51 -5
- package/dist/utils/useModalLayer.d.ts +4 -0
- package/dist/utils/useRovingToolbar.d.ts +26 -0
- package/dist/utils/validationMessages.d.ts +15 -0
- package/dist/utils.cjs +1 -1
- package/dist/utils.entry.d.ts +3 -1
- package/dist/utils.js +11 -11
- package/dist/validationMessages-BFimXxlT.js +23 -0
- package/dist/validationMessages-BFimXxlT.js.map +1 -0
- package/dist/validationMessages-iHu7apWr.cjs +2 -0
- package/dist/validationMessages-iHu7apWr.cjs.map +1 -0
- package/dist/validators-SZmLxnir.cjs +2 -0
- package/dist/validators-SZmLxnir.cjs.map +1 -0
- package/dist/{validators-DVYOtFnw.js → validators-ULebNme2.js} +107 -106
- package/dist/validators-ULebNme2.js.map +1 -0
- package/package.json +1 -1
- package/dist/MAvatar-DHNB3829.cjs +0 -2
- package/dist/MAvatar-DHNB3829.cjs.map +0 -1
- package/dist/MAvatar-GeRL-CNO.js +0 -63
- package/dist/MAvatar-GeRL-CNO.js.map +0 -1
- package/dist/MButton-CEwo8lUB.js +0 -115
- package/dist/MButton-CEwo8lUB.js.map +0 -1
- package/dist/MButton-CnAr77Za.cjs +0 -2
- package/dist/MButton-CnAr77Za.cjs.map +0 -1
- package/dist/MCard-BqSkGAgf.js.map +0 -1
- package/dist/MCard-P8OoswWM.cjs.map +0 -1
- package/dist/MCheckbox-BxFBADcE.js +0 -59
- package/dist/MCheckbox-BxFBADcE.js.map +0 -1
- package/dist/MCheckbox-DozwF2ai.cjs +0 -2
- package/dist/MCheckbox-DozwF2ai.cjs.map +0 -1
- package/dist/MConflictIllustration-2QL-BHYv.cjs +0 -2
- package/dist/MConflictIllustration-2QL-BHYv.cjs.map +0 -1
- package/dist/MConflictIllustration-znC7ijmP.js.map +0 -1
- package/dist/MDetailList-CThQvoyf.cjs +0 -2
- package/dist/MDetailList-CThQvoyf.cjs.map +0 -1
- package/dist/MDetailList-Cx9H81xT.js +0 -98
- package/dist/MDetailList-Cx9H81xT.js.map +0 -1
- package/dist/MDropdownMenu-DnKcCyW6.cjs +0 -2
- package/dist/MDropdownMenu-DnKcCyW6.cjs.map +0 -1
- package/dist/MDropdownMenu-DxbKN7Ui.js +0 -172
- package/dist/MDropdownMenu-DxbKN7Ui.js.map +0 -1
- package/dist/MGrid-BkRSGN2t.cjs +0 -2
- package/dist/MGrid-BkRSGN2t.cjs.map +0 -1
- package/dist/MGrid-CIz-2i6X.js +0 -265
- package/dist/MGrid-CIz-2i6X.js.map +0 -1
- package/dist/MHeading-AYQ8_GFP.cjs +0 -2
- package/dist/MHeading-AYQ8_GFP.cjs.map +0 -1
- package/dist/MHeading-DcGxUMwC.js +0 -21
- package/dist/MHeading-DcGxUMwC.js.map +0 -1
- package/dist/MI18nProvider-CqAwaswx.cjs +0 -2
- package/dist/MI18nProvider-CqAwaswx.cjs.map +0 -1
- package/dist/MI18nProvider-VH14CI8u.js +0 -72
- package/dist/MI18nProvider-VH14CI8u.js.map +0 -1
- package/dist/MInput-BYj2BdUe.cjs +0 -2
- package/dist/MInput-BYj2BdUe.cjs.map +0 -1
- package/dist/MInput-nodE-CZF.js +0 -188
- package/dist/MInput-nodE-CZF.js.map +0 -1
- package/dist/MInputCVC-9XWryaTz.cjs +0 -2
- package/dist/MInputCVC-9XWryaTz.cjs.map +0 -1
- package/dist/MInputCVC-CrDTaUXm.js +0 -321
- package/dist/MInputCVC-CrDTaUXm.js.map +0 -1
- package/dist/MInputSearch-BMgCHjFk.js +0 -43
- package/dist/MInputSearch-BMgCHjFk.js.map +0 -1
- package/dist/MInputSearch-BiVI1jNc.cjs +0 -2
- package/dist/MInputSearch-BiVI1jNc.cjs.map +0 -1
- package/dist/MLink-CAl6N6_z.js +0 -31
- package/dist/MLink-CAl6N6_z.js.map +0 -1
- package/dist/MLink-Dk_ReE6i.cjs +0 -2
- package/dist/MLink-Dk_ReE6i.cjs.map +0 -1
- package/dist/MLoader-CYp0OJU_.js +0 -41
- package/dist/MLoader-CYp0OJU_.js.map +0 -1
- package/dist/MLoader-DvmFle31.cjs +0 -2
- package/dist/MLoader-DvmFle31.cjs.map +0 -1
- package/dist/MPagination-E7IixIeo.js +0 -113
- package/dist/MPagination-E7IixIeo.js.map +0 -1
- package/dist/MPagination-reDU9xTW.cjs +0 -2
- package/dist/MPagination-reDU9xTW.cjs.map +0 -1
- package/dist/MPopover-8gYD3Ogq.js +0 -118
- package/dist/MPopover-8gYD3Ogq.js.map +0 -1
- package/dist/MPopover-B3npyAkL.cjs +0 -2
- package/dist/MPopover-B3npyAkL.cjs.map +0 -1
- package/dist/MPortal-Ba2Sxset.js +0 -10
- package/dist/MPortal-Ba2Sxset.js.map +0 -1
- package/dist/MPortal-CuBXhhl_.cjs +0 -2
- package/dist/MPortal-CuBXhhl_.cjs.map +0 -1
- package/dist/MSimpleGrid-BchGYPMi.cjs +0 -2
- package/dist/MSimpleGrid-BchGYPMi.cjs.map +0 -1
- package/dist/MSimpleGrid-Ui8cI0ho.js.map +0 -1
- package/dist/MSkeleton-DPa_G_2X.cjs +0 -2
- package/dist/MSkeleton-DPa_G_2X.cjs.map +0 -1
- package/dist/MSkeleton-Dhu-loDO.js.map +0 -1
- package/dist/MSlider-BRjhyBSc.js +0 -75
- package/dist/MSlider-BRjhyBSc.js.map +0 -1
- package/dist/MSlider-w5214a-W.cjs +0 -2
- package/dist/MSlider-w5214a-W.cjs.map +0 -1
- package/dist/MStack-Dt-rWvg3.js +0 -39
- package/dist/MStack-Dt-rWvg3.js.map +0 -1
- package/dist/MStack-nc6Y_9K3.cjs +0 -2
- package/dist/MStack-nc6Y_9K3.cjs.map +0 -1
- package/dist/MSubText-B0tXiuAp.js +0 -17
- package/dist/MSubText-B0tXiuAp.js.map +0 -1
- package/dist/MSubText-C6v6Exa2.cjs +0 -2
- package/dist/MSubText-C6v6Exa2.cjs.map +0 -1
- package/dist/MSurface-BjE-mL1L.cjs +0 -2
- package/dist/MSurface-BjE-mL1L.cjs.map +0 -1
- package/dist/MSurface-CpDJCdb5.js +0 -74
- package/dist/MSurface-CpDJCdb5.js.map +0 -1
- package/dist/MTag-BgOxiahL.cjs +0 -2
- package/dist/MTag-BgOxiahL.cjs.map +0 -1
- package/dist/MTag-cw3cIGHX.js +0 -41
- package/dist/MTag-cw3cIGHX.js.map +0 -1
- package/dist/MText-BDI4mdw8.cjs +0 -2
- package/dist/MText-BDI4mdw8.cjs.map +0 -1
- package/dist/MText-DhbAjtUE.js +0 -45
- package/dist/MText-DhbAjtUE.js.map +0 -1
- package/dist/MTooltip-BAgHlv5I.cjs +0 -2
- package/dist/MTooltip-BAgHlv5I.cjs.map +0 -1
- package/dist/MTooltip-CJxvlkOX.js +0 -92
- package/dist/MTooltip-CJxvlkOX.js.map +0 -1
- package/dist/MTreeView-DsBnYQMT.js +0 -315
- package/dist/MTreeView-DsBnYQMT.js.map +0 -1
- package/dist/MTreeView-LiJ5o-zy.cjs +0 -2
- package/dist/MTreeView-LiJ5o-zy.cjs.map +0 -1
- package/dist/calendar-Bq6NMNnS.js +0 -193
- package/dist/calendar-Bq6NMNnS.js.map +0 -1
- package/dist/calendar-C57BH8Nd.cjs +0 -2
- package/dist/calendar-C57BH8Nd.cjs.map +0 -1
- package/dist/calendarDates-M_Dawj0j.js.map +0 -1
- package/dist/calendarDates-qm047RW2.cjs +0 -2
- package/dist/calendarDates-qm047RW2.cjs.map +0 -1
- package/dist/cards-D4xJVd4q.js +0 -1227
- package/dist/cards-D4xJVd4q.js.map +0 -1
- package/dist/cards-Du6dbZSQ.cjs +0 -2
- package/dist/cards-Du6dbZSQ.cjs.map +0 -1
- package/dist/controls-BKoc_yel.js +0 -475
- package/dist/controls-BKoc_yel.js.map +0 -1
- package/dist/controls-Ck-PMt__.cjs +0 -2
- package/dist/controls-Ck-PMt__.cjs.map +0 -1
- package/dist/creditCards-D_HwRUBz.cjs +0 -2
- package/dist/creditCards-D_HwRUBz.cjs.map +0 -1
- package/dist/creditCards-D_iWmtG6.js.map +0 -1
- package/dist/data-CdQximqm.js +0 -689
- package/dist/data-CdQximqm.js.map +0 -1
- package/dist/data-PS4ygCyj.cjs +0 -2
- package/dist/data-PS4ygCyj.cjs.map +0 -1
- package/dist/dateUtils-CUY6CRCf.js.map +0 -1
- package/dist/dateUtils-Dq1vaA-D.cjs +0 -2
- package/dist/dateUtils-Dq1vaA-D.cjs.map +0 -1
- package/dist/display-YC1fVpXA.js +0 -782
- package/dist/display-YC1fVpXA.js.map +0 -1
- package/dist/display-slIo1bQI.cjs +0 -3
- package/dist/display-slIo1bQI.cjs.map +0 -1
- package/dist/dropdowns-DFbUoZ8Q.cjs +0 -2
- package/dist/dropdowns-DFbUoZ8Q.cjs.map +0 -1
- package/dist/dropdowns-nW3MY5XG.js +0 -1715
- package/dist/dropdowns-nW3MY5XG.js.map +0 -1
- package/dist/feedback-6MNb2Xyk.cjs +0 -2
- package/dist/feedback-6MNb2Xyk.cjs.map +0 -1
- package/dist/feedback-CPwJaQHY.js +0 -259
- package/dist/feedback-CPwJaQHY.js.map +0 -1
- package/dist/form-CMsZo6Dm.cjs +0 -2
- package/dist/form-CMsZo6Dm.cjs.map +0 -1
- package/dist/form-WU6DcQGD.js +0 -164
- package/dist/form-WU6DcQGD.js.map +0 -1
- package/dist/frameworkTexts-BSXUtXOp.cjs +0 -2
- package/dist/frameworkTexts-BSXUtXOp.cjs.map +0 -1
- package/dist/frameworkTexts-DP5RUl19.js +0 -131
- package/dist/frameworkTexts-DP5RUl19.js.map +0 -1
- package/dist/icons-CBMl-kOM.js.map +0 -1
- package/dist/icons-D3n9-919.cjs +0 -2
- package/dist/icons-D3n9-919.cjs.map +0 -1
- package/dist/inputs-B7rGMLMr.js +0 -1753
- package/dist/inputs-B7rGMLMr.js.map +0 -1
- package/dist/inputs-BiN62hgH.cjs +0 -2
- package/dist/inputs-BiN62hgH.cjs.map +0 -1
- package/dist/layout-BMggJ_qO.cjs +0 -2
- package/dist/layout-BMggJ_qO.cjs.map +0 -1
- package/dist/layout-DBYHyCTr.js +0 -883
- package/dist/layout-DBYHyCTr.js.map +0 -1
- package/dist/licensing-Be3g-PJt.cjs +0 -2
- package/dist/licensing-Be3g-PJt.cjs.map +0 -1
- package/dist/licensing-f5KYVz7D.js.map +0 -1
- package/dist/media-BPzMgzqE.js +0 -405
- package/dist/media-BPzMgzqE.js.map +0 -1
- package/dist/media-D63hxCAJ.cjs +0 -2
- package/dist/media-D63hxCAJ.cjs.map +0 -1
- package/dist/overlays-CCeYD6hT.js +0 -555
- package/dist/overlays-CCeYD6hT.js.map +0 -1
- package/dist/overlays-CsRN5OG8.cjs +0 -2
- package/dist/overlays-CsRN5OG8.cjs.map +0 -1
- package/dist/popoverStack--0r2oJCD.js +0 -44
- package/dist/popoverStack--0r2oJCD.js.map +0 -1
- package/dist/popoverStack-BmMk-VZJ.cjs +0 -2
- package/dist/popoverStack-BmMk-VZJ.cjs.map +0 -1
- package/dist/theme-CJuqObWL.cjs +0 -2
- package/dist/theme-CJuqObWL.cjs.map +0 -1
- package/dist/theme-DAOU1aPs.js.map +0 -1
- package/dist/useGhostText-DG0bzcao.js +0 -68
- package/dist/useGhostText-DG0bzcao.js.map +0 -1
- package/dist/useGhostText-mibV4s1-.cjs +0 -2
- package/dist/useGhostText-mibV4s1-.cjs.map +0 -1
- package/dist/useKeyboardNav-CCUoRMgm.cjs +0 -2
- package/dist/useKeyboardNav-CCUoRMgm.cjs.map +0 -1
- package/dist/useKeyboardNav-iEXOdEMB.js +0 -43
- package/dist/useKeyboardNav-iEXOdEMB.js.map +0 -1
- package/dist/useModalLayer-Bf4TcEz-.js +0 -58
- package/dist/useModalLayer-Bf4TcEz-.js.map +0 -1
- package/dist/useModalLayer-DxYhhgRO.cjs +0 -2
- package/dist/useModalLayer-DxYhhgRO.cjs.map +0 -1
- package/dist/utils/proActivationWarning.d.ts +0 -7
- package/dist/validators-B6yWdsu2.cjs +0 -2
- package/dist/validators-B6yWdsu2.cjs.map +0 -1
- package/dist/validators-DVYOtFnw.js.map +0 -1
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { b as e, t } from "./frameworkTexts-o43FqY1A.js";
|
|
2
|
+
import { vi as n, yi as r } from "./icons-IqEBmGh3.js";
|
|
3
|
+
import { t as i } from "./cn-CUSXNnjF.js";
|
|
4
|
+
import { n as a } from "./MSurface-B_QnRLr5.js";
|
|
5
|
+
import { t as o } from "./MText-BUWQPoBM.js";
|
|
6
|
+
import { t as s } from "./MLink-ixg0xFFI.js";
|
|
7
|
+
import { n as c, t as l } from "./radioGroupKeys-Bm-Qeh8G.js";
|
|
8
|
+
import { t as u } from "./MStack-BwAFeGGg.js";
|
|
9
|
+
import { useRef as d, useState as f } from "react";
|
|
10
|
+
import { jsx as p, jsxs as m } from "react/jsx-runtime";
|
|
11
|
+
//#region src/components/display/MRating/MRating.tsx
|
|
12
|
+
function h({ value: a = 0, max: o = 5, color: s = "warning", size: u = "md", readOnly: m = !1, onChange: h, className: g, ..._ }) {
|
|
13
|
+
let v = e(), [y, b] = f(null), x = d([]), S = y ?? a, C = i("rating", `color-${s}`, u, m && "read-only", g), w = (e) => /* @__PURE__ */ p("span", {
|
|
14
|
+
className: "star-icon",
|
|
15
|
+
"aria-hidden": "true",
|
|
16
|
+
children: p(S >= e ? n : r, {})
|
|
17
|
+
});
|
|
18
|
+
if (m) {
|
|
19
|
+
let e = Math.round(a * 100) / 100;
|
|
20
|
+
return /* @__PURE__ */ p("div", {
|
|
21
|
+
className: C,
|
|
22
|
+
role: "img",
|
|
23
|
+
"aria-label": t(v.readOnlyValue, {
|
|
24
|
+
value: e,
|
|
25
|
+
max: o
|
|
26
|
+
}),
|
|
27
|
+
..._,
|
|
28
|
+
children: Array.from({ length: o }, (e, t) => /* @__PURE__ */ p("span", {
|
|
29
|
+
className: "rating-star",
|
|
30
|
+
"aria-hidden": "true",
|
|
31
|
+
children: w(t + 1)
|
|
32
|
+
}, t))
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
let T = Math.round(a) >= 1 ? Math.min(Math.round(a), o) - 1 : -1, E = T >= 0 ? T : 0, D = (e) => {
|
|
36
|
+
if (_.onKeyDown?.(e), e.defaultPrevented || e.altKey || e.ctrlKey || e.metaKey) return;
|
|
37
|
+
let t = x.current.findIndex((t) => t === e.target);
|
|
38
|
+
if (t < 0) return;
|
|
39
|
+
let n = l(e.key, t, o, c(e.currentTarget));
|
|
40
|
+
n !== null && (e.preventDefault(), x.current[n]?.focus(), h?.(n + 1));
|
|
41
|
+
};
|
|
42
|
+
return /* @__PURE__ */ p("div", {
|
|
43
|
+
className: C,
|
|
44
|
+
role: "radiogroup",
|
|
45
|
+
"aria-label": v.label,
|
|
46
|
+
onMouseLeave: () => b(null),
|
|
47
|
+
..._,
|
|
48
|
+
onKeyDown: D,
|
|
49
|
+
children: Array.from({ length: o }, (e, n) => {
|
|
50
|
+
let r = n + 1;
|
|
51
|
+
return /* @__PURE__ */ p("button", {
|
|
52
|
+
ref: (e) => {
|
|
53
|
+
x.current[n] = e;
|
|
54
|
+
},
|
|
55
|
+
type: "button",
|
|
56
|
+
className: "rating-star",
|
|
57
|
+
role: "radio",
|
|
58
|
+
"aria-checked": n === T,
|
|
59
|
+
onClick: () => h?.(r),
|
|
60
|
+
onMouseEnter: () => b(r),
|
|
61
|
+
"aria-label": t(r > 1 ? v.stars : v.star, { count: r }),
|
|
62
|
+
tabIndex: n === E ? 0 : -1,
|
|
63
|
+
children: w(r)
|
|
64
|
+
}, n);
|
|
65
|
+
})
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
//#endregion
|
|
69
|
+
//#region src/components/display/MDetailList/MDetailList.tsx
|
|
70
|
+
var g = {
|
|
71
|
+
xs: "xs",
|
|
72
|
+
sm: "xs",
|
|
73
|
+
md: "sm",
|
|
74
|
+
lg: "md",
|
|
75
|
+
xl: "md"
|
|
76
|
+
};
|
|
77
|
+
function _({ items: e, size: t = "md", bordered: n = !0, emptyState: r = null, className: c, ...l }) {
|
|
78
|
+
if (!e.length) return r ? /* @__PURE__ */ p("div", {
|
|
79
|
+
className: i("detail-list", c),
|
|
80
|
+
children: r
|
|
81
|
+
}) : null;
|
|
82
|
+
let d = g[t];
|
|
83
|
+
return /* @__PURE__ */ p("div", {
|
|
84
|
+
className: i("detail-list", `size-${t}`, n && "bordered", c),
|
|
85
|
+
...l,
|
|
86
|
+
children: e.map((e) => {
|
|
87
|
+
let t = e.key ?? e.label?.toString(), n = e.component || e.to || e.href ? /* @__PURE__ */ p(s, {
|
|
88
|
+
component: e.component,
|
|
89
|
+
to: e.to,
|
|
90
|
+
href: e.href,
|
|
91
|
+
target: e.target,
|
|
92
|
+
rel: e.rel,
|
|
93
|
+
children: e.value
|
|
94
|
+
}) : e.value;
|
|
95
|
+
return /* @__PURE__ */ p("div", {
|
|
96
|
+
className: "detail-list-item",
|
|
97
|
+
children: /* @__PURE__ */ m(a, {
|
|
98
|
+
justify: "between",
|
|
99
|
+
align: "start",
|
|
100
|
+
children: [/* @__PURE__ */ m(u, { children: [
|
|
101
|
+
/* @__PURE__ */ p(o, {
|
|
102
|
+
size: d,
|
|
103
|
+
tone: "muted",
|
|
104
|
+
children: e.label
|
|
105
|
+
}),
|
|
106
|
+
n && /* @__PURE__ */ p("div", {
|
|
107
|
+
className: "detail-list-value",
|
|
108
|
+
children: n
|
|
109
|
+
}),
|
|
110
|
+
e.helperText && /* @__PURE__ */ p(o, {
|
|
111
|
+
size: d,
|
|
112
|
+
tone: "muted",
|
|
113
|
+
children: e.helperText
|
|
114
|
+
})
|
|
115
|
+
] }), e.status && /* @__PURE__ */ p("div", {
|
|
116
|
+
className: "detail-list-status",
|
|
117
|
+
children: e.status
|
|
118
|
+
})]
|
|
119
|
+
})
|
|
120
|
+
}, t);
|
|
121
|
+
})
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
//#endregion
|
|
125
|
+
export { h as n, _ as t };
|
|
126
|
+
|
|
127
|
+
//# sourceMappingURL=MDetailList-C3othNs3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MDetailList-C3othNs3.js","names":[],"sources":["../src/components/display/MRating/MRating.tsx","../src/components/display/MDetailList/MDetailList.tsx"],"sourcesContent":["import {useRef, useState} from 'react'\nimport type * as React from 'react'\nimport type {MRatingProps} from './MRating.types'\nimport {MStarFillIcon, MStarIcon} from '../../../icons'\nimport {cn} from '../../../utils/cn'\nimport {getRadioGroupTarget, isRtlElement} from '../../../utils/radioGroupKeys'\nimport './MRating.css'\nimport {formatMText, useMRatingTexts} from '../../../i18n/frameworkTexts'\n\n// Render an interactive star-based rating control.\n// Interactive: APG radio group — one Tab stop (roving tabindex), arrows move and select.\n// Read-only: a single image named \"4.5 of 5 stars\".\nexport function MRating({\n value = 0,\n max = 5,\n color = 'warning',\n size = 'md',\n readOnly = false,\n onChange,\n className,\n ...rest\n}: MRatingProps) {\n const texts = useMRatingTexts()\n const [hovered, setHovered] = useState<number | null>(null)\n const starRefs = useRef<(HTMLButtonElement | null)[]>([])\n const displayValue = hovered ?? value\n\n const rootClassName = cn('rating', `color-${color}`, size, readOnly && 'read-only', className)\n\n const renderIcon = (starIndex: number) => (\n <span className=\"star-icon\" aria-hidden=\"true\">\n {displayValue >= starIndex ? <MStarFillIcon /> : <MStarIcon />}\n </span>\n )\n\n if (readOnly) {\n const shown = Math.round(value * 100) / 100\n return (\n <div\n className={rootClassName}\n role=\"img\"\n aria-label={formatMText(texts.readOnlyValue, {value: shown, max})}\n {...rest}\n >\n {Array.from({length: max}, (_, i) => (\n <span key={i} className=\"rating-star\" aria-hidden=\"true\">\n {renderIcon(i + 1)}\n </span>\n ))}\n </div>\n )\n }\n\n const checkedIndex = Math.round(value) >= 1 ? Math.min(Math.round(value), max) - 1 : -1\n const tabbableIndex = checkedIndex >= 0 ? checkedIndex : 0\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n rest.onKeyDown?.(e)\n if (e.defaultPrevented || e.altKey || e.ctrlKey || e.metaKey) return\n const current = starRefs.current.findIndex((star) => star === e.target)\n if (current < 0) return\n const target = getRadioGroupTarget(e.key, current, max, isRtlElement(e.currentTarget))\n if (target === null) return\n e.preventDefault()\n starRefs.current[target]?.focus()\n onChange?.(target + 1)\n }\n\n return (\n <div\n className={rootClassName}\n role=\"radiogroup\"\n aria-label={texts.label}\n onMouseLeave={() => setHovered(null)}\n {...rest}\n onKeyDown={handleKeyDown}\n >\n {Array.from({length: max}, (_, i) => {\n const starIndex = i + 1\n return (\n <button\n key={i}\n ref={(el) => {\n starRefs.current[i] = el\n }}\n type=\"button\"\n className=\"rating-star\"\n role=\"radio\"\n aria-checked={i === checkedIndex}\n onClick={() => onChange?.(starIndex)}\n onMouseEnter={() => setHovered(starIndex)}\n aria-label={formatMText(starIndex > 1 ? texts.stars : texts.star, {count: starIndex})}\n tabIndex={i === tabbableIndex ? 0 : -1}\n >\n {renderIcon(starIndex)}\n </button>\n )\n })}\n </div>\n )\n}\n","import type {MSize} from '../../../theme'\nimport type {MDetailListProps} from './MDetailList.types'\nimport {cn} from '../../../utils/cn'\nimport {MInline, MStack} from '../../layout'\nimport {MLink, MText} from '../../typography'\nimport type {MTextSize} from '../../typography'\nimport './MDetailList.css'\n\n// Maps the list's outer size to the secondary-text size used for labels and helper text.\n// Labels sit one notch below the value so they read as metadata, not headline copy.\nconst LABEL_SIZE_MAP: Record<MSize, MTextSize> = {\n xs: 'xs',\n sm: 'xs',\n md: 'sm',\n lg: 'md',\n xl: 'md',\n}\n\nexport function MDetailList({\n items,\n size = 'md',\n bordered = true,\n emptyState = null,\n className,\n ...rest\n}: MDetailListProps) {\n if (!items.length) {\n return emptyState ? <div className={cn('detail-list', className)}>{emptyState}</div> : null\n }\n\n const labelSize = LABEL_SIZE_MAP[size]\n\n return (\n <div className={cn('detail-list', `size-${size}`, bordered && 'bordered', className)} {...rest}>\n {items.map((item) => {\n const key = item.key ?? item.label?.toString()\n const value =\n item.component || item.to || item.href ? (\n <MLink\n component={item.component}\n to={item.to}\n href={item.href}\n target={item.target}\n rel={item.rel}\n >\n {item.value}\n </MLink>\n ) : (\n item.value\n )\n\n return (\n <div key={key} className=\"detail-list-item\">\n <MInline justify={'between'} align={'start'}>\n <MStack>\n <MText size={labelSize} tone={'muted'}>\n {item.label}\n </MText>\n {value && <div className=\"detail-list-value\">{value}</div>}\n {item.helperText && (\n <MText size={labelSize} tone={'muted'}>\n {item.helperText}\n </MText>\n )}\n </MStack>\n {item.status && <div className=\"detail-list-status\">{item.status}</div>}\n </MInline>\n </div>\n )\n })}\n </div>\n )\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require(`./frameworkTexts-CaqdiKHW.cjs`),t=require(`./icons-Bp8bB9TP.cjs`),n=require(`./cn-DYFxgzi2.cjs`),r=require(`./MSurface-BrFo-JMJ.cjs`),i=require(`./MText-nsvLFsSv.cjs`),a=require(`./MLink-C6uwA6db.cjs`),o=require(`./radioGroupKeys-COL8uXbH.cjs`),s=require(`./MStack-CGII4A-q.cjs`);require(`./core-w629c4ND.cjs`);let c=require(`react`),l=require(`react/jsx-runtime`);function u({value:r=0,max:i=5,color:a=`warning`,size:s=`md`,readOnly:u=!1,onChange:d,className:f,...p}){let m=e.b(),[h,g]=(0,c.useState)(null),_=(0,c.useRef)([]),v=h??r,y=n.t(`rating`,`color-${a}`,s,u&&`read-only`,f),b=e=>(0,l.jsx)(`span`,{className:`star-icon`,"aria-hidden":`true`,children:v>=e?(0,l.jsx)(t.vi,{}):(0,l.jsx)(t.yi,{})});if(u){let t=Math.round(r*100)/100;return(0,l.jsx)(`div`,{className:y,role:`img`,"aria-label":e.t(m.readOnlyValue,{value:t,max:i}),...p,children:Array.from({length:i},(e,t)=>(0,l.jsx)(`span`,{className:`rating-star`,"aria-hidden":`true`,children:b(t+1)},t))})}let x=Math.round(r)>=1?Math.min(Math.round(r),i)-1:-1,S=x>=0?x:0,C=e=>{if(p.onKeyDown?.(e),e.defaultPrevented||e.altKey||e.ctrlKey||e.metaKey)return;let t=_.current.findIndex(t=>t===e.target);if(t<0)return;let n=o.t(e.key,t,i,o.n(e.currentTarget));n!==null&&(e.preventDefault(),_.current[n]?.focus(),d?.(n+1))};return(0,l.jsx)(`div`,{className:y,role:`radiogroup`,"aria-label":m.label,onMouseLeave:()=>g(null),...p,onKeyDown:C,children:Array.from({length:i},(t,n)=>{let r=n+1;return(0,l.jsx)(`button`,{ref:e=>{_.current[n]=e},type:`button`,className:`rating-star`,role:`radio`,"aria-checked":n===x,onClick:()=>d?.(r),onMouseEnter:()=>g(r),"aria-label":e.t(r>1?m.stars:m.star,{count:r}),tabIndex:n===S?0:-1,children:b(r)},n)})})}var d={xs:`xs`,sm:`xs`,md:`sm`,lg:`md`,xl:`md`};function f({items:e,size:t=`md`,bordered:o=!0,emptyState:c=null,className:u,...f}){if(!e.length)return c?(0,l.jsx)(`div`,{className:n.t(`detail-list`,u),children:c}):null;let p=d[t];return(0,l.jsx)(`div`,{className:n.t(`detail-list`,`size-${t}`,o&&`bordered`,u),...f,children:e.map(e=>{let t=e.key??e.label?.toString(),n=e.component||e.to||e.href?(0,l.jsx)(a.t,{component:e.component,to:e.to,href:e.href,target:e.target,rel:e.rel,children:e.value}):e.value;return(0,l.jsx)(`div`,{className:`detail-list-item`,children:(0,l.jsxs)(r.n,{justify:`between`,align:`start`,children:[(0,l.jsxs)(s.t,{children:[(0,l.jsx)(i.t,{size:p,tone:`muted`,children:e.label}),n&&(0,l.jsx)(`div`,{className:`detail-list-value`,children:n}),e.helperText&&(0,l.jsx)(i.t,{size:p,tone:`muted`,children:e.helperText})]}),e.status&&(0,l.jsx)(`div`,{className:`detail-list-status`,children:e.status})]})},t)})})}Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return f}});
|
|
2
|
+
//# sourceMappingURL=MDetailList-DkDHLdJ8.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MDetailList-DkDHLdJ8.cjs","names":[],"sources":["../src/components/display/MRating/MRating.tsx","../src/components/display/MDetailList/MDetailList.tsx"],"sourcesContent":["import {useRef, useState} from 'react'\nimport type * as React from 'react'\nimport type {MRatingProps} from './MRating.types'\nimport {MStarFillIcon, MStarIcon} from '../../../icons'\nimport {cn} from '../../../utils/cn'\nimport {getRadioGroupTarget, isRtlElement} from '../../../utils/radioGroupKeys'\nimport './MRating.css'\nimport {formatMText, useMRatingTexts} from '../../../i18n/frameworkTexts'\n\n// Render an interactive star-based rating control.\n// Interactive: APG radio group — one Tab stop (roving tabindex), arrows move and select.\n// Read-only: a single image named \"4.5 of 5 stars\".\nexport function MRating({\n value = 0,\n max = 5,\n color = 'warning',\n size = 'md',\n readOnly = false,\n onChange,\n className,\n ...rest\n}: MRatingProps) {\n const texts = useMRatingTexts()\n const [hovered, setHovered] = useState<number | null>(null)\n const starRefs = useRef<(HTMLButtonElement | null)[]>([])\n const displayValue = hovered ?? value\n\n const rootClassName = cn('rating', `color-${color}`, size, readOnly && 'read-only', className)\n\n const renderIcon = (starIndex: number) => (\n <span className=\"star-icon\" aria-hidden=\"true\">\n {displayValue >= starIndex ? <MStarFillIcon /> : <MStarIcon />}\n </span>\n )\n\n if (readOnly) {\n const shown = Math.round(value * 100) / 100\n return (\n <div\n className={rootClassName}\n role=\"img\"\n aria-label={formatMText(texts.readOnlyValue, {value: shown, max})}\n {...rest}\n >\n {Array.from({length: max}, (_, i) => (\n <span key={i} className=\"rating-star\" aria-hidden=\"true\">\n {renderIcon(i + 1)}\n </span>\n ))}\n </div>\n )\n }\n\n const checkedIndex = Math.round(value) >= 1 ? Math.min(Math.round(value), max) - 1 : -1\n const tabbableIndex = checkedIndex >= 0 ? checkedIndex : 0\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n rest.onKeyDown?.(e)\n if (e.defaultPrevented || e.altKey || e.ctrlKey || e.metaKey) return\n const current = starRefs.current.findIndex((star) => star === e.target)\n if (current < 0) return\n const target = getRadioGroupTarget(e.key, current, max, isRtlElement(e.currentTarget))\n if (target === null) return\n e.preventDefault()\n starRefs.current[target]?.focus()\n onChange?.(target + 1)\n }\n\n return (\n <div\n className={rootClassName}\n role=\"radiogroup\"\n aria-label={texts.label}\n onMouseLeave={() => setHovered(null)}\n {...rest}\n onKeyDown={handleKeyDown}\n >\n {Array.from({length: max}, (_, i) => {\n const starIndex = i + 1\n return (\n <button\n key={i}\n ref={(el) => {\n starRefs.current[i] = el\n }}\n type=\"button\"\n className=\"rating-star\"\n role=\"radio\"\n aria-checked={i === checkedIndex}\n onClick={() => onChange?.(starIndex)}\n onMouseEnter={() => setHovered(starIndex)}\n aria-label={formatMText(starIndex > 1 ? texts.stars : texts.star, {count: starIndex})}\n tabIndex={i === tabbableIndex ? 0 : -1}\n >\n {renderIcon(starIndex)}\n </button>\n )\n })}\n </div>\n )\n}\n","import type {MSize} from '../../../theme'\nimport type {MDetailListProps} from './MDetailList.types'\nimport {cn} from '../../../utils/cn'\nimport {MInline, MStack} from '../../layout'\nimport {MLink, MText} from '../../typography'\nimport type {MTextSize} from '../../typography'\nimport './MDetailList.css'\n\n// Maps the list's outer size to the secondary-text size used for labels and helper text.\n// Labels sit one notch below the value so they read as metadata, not headline copy.\nconst LABEL_SIZE_MAP: Record<MSize, MTextSize> = {\n xs: 'xs',\n sm: 'xs',\n md: 'sm',\n lg: 'md',\n xl: 'md',\n}\n\nexport function MDetailList({\n items,\n size = 'md',\n bordered = true,\n emptyState = null,\n className,\n ...rest\n}: MDetailListProps) {\n if (!items.length) {\n return emptyState ? <div className={cn('detail-list', className)}>{emptyState}</div> : null\n }\n\n const labelSize = LABEL_SIZE_MAP[size]\n\n return (\n <div className={cn('detail-list', `size-${size}`, bordered && 'bordered', className)} {...rest}>\n {items.map((item) => {\n const key = item.key ?? item.label?.toString()\n const value =\n item.component || item.to || item.href ? (\n <MLink\n component={item.component}\n to={item.to}\n href={item.href}\n target={item.target}\n rel={item.rel}\n >\n {item.value}\n </MLink>\n ) : (\n item.value\n )\n\n return (\n <div key={key} className=\"detail-list-item\">\n <MInline justify={'between'} align={'start'}>\n <MStack>\n <MText size={labelSize} tone={'muted'}>\n {item.label}\n </MText>\n {value && <div className=\"detail-list-value\">{value}</div>}\n {item.helperText && (\n <MText size={labelSize} tone={'muted'}>\n {item.helperText}\n </MText>\n )}\n </MStack>\n {item.status && <div className=\"detail-list-status\">{item.status}</div>}\n </MInline>\n </div>\n )\n })}\n </div>\n )\n}\n"],"mappings":"8XAYA,SAAgB,EAAQ,CACpB,QAAQ,EACR,MAAM,EACN,QAAQ,UACR,OAAO,KACP,WAAW,GACX,WACA,YACA,GAAG,GACU,CACb,IAAM,EAAQ,EAAA,GAAiB,CACzB,CAAC,EAAS,IAAA,EAAA,EAAA,UAAsC,KAAK,CACrD,GAAA,EAAA,EAAA,QAAgD,EAAE,CAAC,CACnD,EAAe,GAAW,EAE1B,EAAgB,EAAA,EAAG,SAAU,SAAS,IAAS,EAAM,GAAY,YAAa,EAAU,CAExF,EAAc,IAChB,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,YAAY,cAAY,gBACnC,GAAgB,GAAY,EAAA,EAAA,KAAC,EAAA,GAAD,EAAiB,CAAA,EAAG,EAAA,EAAA,KAAC,EAAA,GAAD,EAAa,CAAA,CAC3D,CAAA,CAGX,GAAI,EAAU,CACV,IAAM,EAAQ,KAAK,MAAM,EAAQ,IAAI,CAAG,IACxC,OACI,EAAA,EAAA,KAAC,MAAD,CACI,UAAW,EACX,KAAK,MACL,aAAY,EAAA,EAAY,EAAM,cAAe,CAAC,MAAO,EAAO,MAAI,CAAC,CACjE,GAAI,WAEH,MAAM,KAAK,CAAC,OAAQ,EAAI,EAAG,EAAG,KAC3B,EAAA,EAAA,KAAC,OAAD,CAAc,UAAU,cAAc,cAAY,gBAC7C,EAAW,EAAI,EAAE,CACf,CAFI,EAEJ,CACT,CACA,CAAA,CAId,IAAM,EAAe,KAAK,MAAM,EAAM,EAAI,EAAI,KAAK,IAAI,KAAK,MAAM,EAAM,CAAE,EAAI,CAAG,EAAI,GAC/E,EAAgB,GAAgB,EAAI,EAAe,EAEnD,EAAiB,GAA2C,CAE9D,GADA,EAAK,YAAY,EAAE,CACf,EAAE,kBAAoB,EAAE,QAAU,EAAE,SAAW,EAAE,QAAS,OAC9D,IAAM,EAAU,EAAS,QAAQ,UAAW,GAAS,IAAS,EAAE,OAAO,CACvE,GAAI,EAAU,EAAG,OACjB,IAAM,EAAS,EAAA,EAAoB,EAAE,IAAK,EAAS,EAAK,EAAA,EAAa,EAAE,cAAc,CAAC,CAClF,IAAW,OACf,EAAE,gBAAgB,CAClB,EAAS,QAAQ,IAAS,OAAO,CACjC,IAAW,EAAS,EAAE,GAG1B,OACI,EAAA,EAAA,KAAC,MAAD,CACI,UAAW,EACX,KAAK,aACL,aAAY,EAAM,MAClB,iBAAoB,EAAW,KAAK,CACpC,GAAI,EACJ,UAAW,WAEV,MAAM,KAAK,CAAC,OAAQ,EAAI,EAAG,EAAG,IAAM,CACjC,IAAM,EAAY,EAAI,EACtB,OACI,EAAA,EAAA,KAAC,SAAD,CAEI,IAAM,GAAO,CACT,EAAS,QAAQ,GAAK,GAE1B,KAAK,SACL,UAAU,cACV,KAAK,QACL,eAAc,IAAM,EACpB,YAAe,IAAW,EAAU,CACpC,iBAAoB,EAAW,EAAU,CACzC,aAAY,EAAA,EAAY,EAAY,EAAI,EAAM,MAAQ,EAAM,KAAM,CAAC,MAAO,EAAU,CAAC,CACrF,SAAU,IAAM,EAAgB,EAAI,YAEnC,EAAW,EAAU,CACjB,CAdA,EAcA,EAEf,CACA,CAAA,CCxFd,IAAM,EAA2C,CAC7C,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACP,CAED,SAAgB,EAAY,CACxB,QACA,OAAO,KACP,WAAW,GACX,aAAa,KACb,YACA,GAAG,GACc,CACjB,GAAI,CAAC,EAAM,OACP,OAAO,GAAa,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,EAAA,EAAG,cAAe,EAAU,UAAG,EAAiB,CAAA,CAAG,KAG3F,IAAM,EAAY,EAAe,GAEjC,OACI,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,EAAA,EAAG,cAAe,QAAQ,IAAQ,GAAY,WAAY,EAAU,CAAE,GAAI,WACrF,EAAM,IAAK,GAAS,CACjB,IAAM,EAAM,EAAK,KAAO,EAAK,OAAO,UAAU,CACxC,EACF,EAAK,WAAa,EAAK,IAAM,EAAK,MAC9B,EAAA,EAAA,KAAC,EAAA,EAAD,CACI,UAAW,EAAK,UAChB,GAAI,EAAK,GACT,KAAM,EAAK,KACX,OAAQ,EAAK,OACb,IAAK,EAAK,aAET,EAAK,MACF,CAAA,CAER,EAAK,MAGb,OACI,EAAA,EAAA,KAAC,MAAD,CAAe,UAAU,6BACrB,EAAA,EAAA,MAAC,EAAA,EAAD,CAAS,QAAS,UAAW,MAAO,iBAApC,EACI,EAAA,EAAA,MAAC,EAAA,EAAD,CAAA,SAAA,EACI,EAAA,EAAA,KAAC,EAAA,EAAD,CAAO,KAAM,EAAW,KAAM,iBACzB,EAAK,MACF,CAAA,CACP,IAAS,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,6BAAqB,EAAY,CAAA,CACzD,EAAK,aACF,EAAA,EAAA,KAAC,EAAA,EAAD,CAAO,KAAM,EAAW,KAAM,iBACzB,EAAK,WACF,CAAA,CAEP,CAAA,CAAA,CACR,EAAK,SAAU,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,8BAAsB,EAAK,OAAa,CAAA,CACjE,GACR,CAfI,EAeJ,EAEZ,CACA,CAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require(`./icons-Bp8bB9TP.cjs`),t=require(`./cn-DYFxgzi2.cjs`),n=require(`./useGhostText-DO-tfxS0.cjs`),r=require(`./useModalLayer-Cyt93Prs.cjs`),i=require(`./MPopover-ZeoU9hb5.cjs`);/* empty css */require(`./core-w629c4ND.cjs`);let a=require(`react`),o=require(`react/jsx-runtime`);function s(e){return e.props}function c(e){return!!e.type.__dropdownItem}function l(e){return!!e.type.__dropdownGroup}function u(e){let t=[];return a.Children.forEach(e,e=>{(0,a.isValidElement)(e)&&(c(e)?t.push(e):l(e)&&a.Children.forEach(s(e).children,e=>{(0,a.isValidElement)(e)&&c(e)&&t.push(e)}))}),t}function d(e){return e==null||typeof e==`boolean`?``:typeof e==`string`||typeof e==`number`?String(e):Array.isArray(e)?e.map(d).join(``):(0,a.isValidElement)(e)?d(s(e).children):``}function f({trigger:e,placement:f=`bottom-start`,closeOnSelect:p=!0,openOn:m=`click`,onOpenChange:h,isolateClick:g=!1,className:_,style:v,popoverClassName:y,popoverStyle:b,children:x}){let[S,C]=(0,a.useState)(!1),w=(0,a.useRef)(null),T=(0,a.useRef)(null),E=(0,a.useRef)([]),D=(0,a.useRef)(null),O=(0,a.useId)(),k=`${O}-menu`,A=`${O}-trigger`,[j,M]=(0,a.useState)(null),[N,P]=(0,a.useState)(!0),[F,I]=(0,a.useState)(A),L=u(x).filter(e=>!s(e).disabled),R=L.length,z=(0,a.useCallback)(e=>{C(t=>{let n=typeof e==`function`?e(t):e;return h?.(n),n})},[h]),{activeIndex:B,setActiveIndex:V,resetIndex:H,onKeyDown:U,getItemProps:W,focusItem:G}=n.n({itemCount:R,onSelect:e=>E.current[e]?.click(),onClose:()=>z(!1),isOpen:S,mode:`roving`,selectOnSpace:!0,getItemLabel:e=>d(s(L[e]).label)});(0,a.useEffect)(()=>{S||H()},[S,H]),(0,a.useLayoutEffect)(()=>{let e=w.current;if(!e)return;let t=r.t(e)[0];if(P(!!t),!t){I(A);return}t.id||=A,I(t.id),t.setAttribute(`aria-haspopup`,`menu`),t.setAttribute(`aria-expanded`,String(S)),S?t.setAttribute(`aria-controls`,k):t.removeAttribute(`aria-controls`)});let K=(e,t)=>{M(e),V(t),z(!0)},q=e=>{if(g&&(e.stopPropagation(),e.preventDefault()),S){z(!1);return}e.detail===0?K(`first`,0):K(`container`,-1)},J=e=>{if(S){g&&e.key!==`Tab`&&e.stopPropagation(),U(e);return}e.key===`ArrowDown`||e.key===`Enter`||e.key===` `?(e.preventDefault(),g&&e.stopPropagation(),K(`first`,0)):e.key===`ArrowUp`&&(e.preventDefault(),g&&e.stopPropagation(),K(`first`,R-1))},Y=e=>{e.key===` `&&e.preventDefault()},X=e=>{g&&e.key!==`Tab`&&e.stopPropagation(),U(e)},Z=0,Q=e=>{if(!(0,a.isValidElement)(e))return e;if(c(e)){let t=s(e).disabled,n=t?-1:Z++,r=t?void 0:W(n);return(0,a.cloneElement)(e,{_active:n>=0&&n===B,_onHover:t?void 0:()=>{T.current?.contains(document.activeElement)?G(n):V(n)},_onClick:()=>{t||p&&z(!1)},_navProps:r?{...r,ref:e=>{r.ref?.(e),E.current[n]=e}}:void 0})}return l(e)?(0,a.cloneElement)(e,{children:a.Children.map(s(e).children,Q)}):e},$=m===`hover`?{onMouseEnter:()=>{D.current&&clearTimeout(D.current),S||M(null),z(!0)},onMouseLeave:()=>{D.current=setTimeout(()=>z(!1),150)}}:{},ee=g?e=>{e.stopPropagation(),e.preventDefault()}:void 0;return(0,o.jsxs)(`div`,{className:t.t(`dropdown menu anchor`,_),style:v,onClick:ee,...$,children:[(0,o.jsx)(`div`,{ref:w,onClick:m===`click`?q:void 0,onKeyDown:J,onKeyUp:Y,className:`dropdown menu trigger`,...N?{}:{role:`button`,tabIndex:0,id:A,"aria-haspopup":`menu`,"aria-expanded":S,"aria-controls":S?k:void 0},children:e}),(0,o.jsx)(i.t,{open:S,anchorRef:w,onClose:()=>z(!1),placement:f,className:t.t(`dropdown menu popover`,y),style:b,role:null,initialFocus:j===`first`?`first`:j===`container`?T:void 0,closeOnTabOut:!0,children:(0,o.jsx)(`div`,{ref:T,id:k,className:`dropdown menu list`,role:`menu`,"aria-labelledby":F,tabIndex:-1,onKeyDown:X,...$,children:a.Children.map(x,Q)})})]})}function p({icon:n,label:r,description:i,role:a=`menuitem`,checked:s,href:c,to:l,onClick:u,color:d,disabled:f=!1,active:p=!1,component:m,className:h,_active:g,_onHover:_,_onClick:v,_navProps:y}){let b=g??p,x=a===`menuitemradio`||a===`menuitemcheckbox`,S=n??(a===`menuitemcheckbox`?(0,o.jsx)(`span`,{className:`dropdown menu check`,"aria-hidden":`true`,children:s?(0,o.jsx)(e.Yi,{size:14}):null}):null),C=(0,o.jsxs)(o.Fragment,{children:[S&&(0,o.jsx)(`span`,{className:`dropdown menu icon`,children:S}),i?(0,o.jsxs)(`span`,{className:`dropdown menu label with-description`,children:[(0,o.jsx)(`span`,{className:`dropdown menu label-text`,children:r}),(0,o.jsx)(`span`,{className:`dropdown menu description`,children:i})]}):(0,o.jsx)(`span`,{className:`dropdown menu label`,children:r})]}),w=t.t(`dropdown menu item`,b&&`active`,f&&`disabled`,x&&s&&`checked`,d,h),T=e=>{if(f){e.preventDefault();return}u?.(),v?.()},E=m??(c||l?`a`:`button`),D=m?{...c?{href:c}:{},...l?{to:l}:{}}:c?{href:c}:l?{href:l}:{};return(0,o.jsx)(E,{className:w,role:a,"aria-checked":x?!!s:void 0,id:y?.id,ref:y?.ref,tabIndex:y?.tabIndex??-1,onFocus:y?.onFocus,onClick:T,onMouseEnter:_,"aria-disabled":f||void 0,...D,children:C})}p.__dropdownItem=!0;function m({label:e,className:n,children:r}){let i=`${(0,a.useId)()}-label`;return(0,o.jsxs)(`div`,{className:t.t(`dropdown menu group`,n),role:`group`,"aria-labelledby":i,children:[(0,o.jsx)(`div`,{id:i,className:`dropdown menu group-label`,children:e}),r]})}m.__dropdownGroup=!0;function h({className:e}){return(0,o.jsx)(`div`,{className:t.t(`dropdown menu divider`,e),role:`separator`})}Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return h}});
|
|
2
|
+
//# sourceMappingURL=MDropdownMenu-C4-r7UZM.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MDropdownMenu-C4-r7UZM.cjs","names":[],"sources":["../src/components/overlays/MDropdownMenu/MDropdownMenu.tsx"],"sourcesContent":["import {\n useState,\n useRef,\n useCallback,\n useEffect,\n useId,\n useLayoutEffect,\n Children,\n isValidElement,\n cloneElement,\n} from 'react'\nimport type * as React from 'react'\nimport {MPopover} from '../../primitives'\nimport {useKeyboardNav} from '../../../utils/useKeyboardNav'\nimport type {UseKeyboardNavItemProps} from '../../../utils/useKeyboardNav'\nimport {getFocusable} from '../../../utils/useModalLayer'\nimport {cn} from '../../../utils/cn'\nimport {MCheckIcon} from '../../../icons'\nimport type {\n MDropdownMenuProps,\n MDropdownItemProps,\n MDropdownGroupProps,\n MDropdownDividerProps,\n} from './MDropdownMenu.types'\nimport './MDropdownMenu.css'\n\ntype AnyProps = Record<string, any>\n\nfunction getProps(el: React.ReactElement): AnyProps {\n return el.props as AnyProps\n}\n\nfunction isItem(child: React.ReactElement): boolean {\n return !!(child.type as any).__dropdownItem\n}\n\nfunction isGroup(child: React.ReactElement): boolean {\n return !!(child.type as any).__dropdownGroup\n}\n\n// Collect all MDropdownItem elements from children (including inside groups).\nfunction collectItems(children: React.ReactNode): React.ReactElement[] {\n const items: React.ReactElement[] = []\n Children.forEach(children, (child) => {\n if (!isValidElement(child)) return\n if (isItem(child)) {\n items.push(child)\n } else if (isGroup(child)) {\n Children.forEach(getProps(child).children, (gc: React.ReactNode) => {\n if (isValidElement(gc) && isItem(gc)) {\n items.push(gc)\n }\n })\n }\n })\n return items\n}\n\n// Plain text of a ReactNode, used for first-letter typeahead.\nfunction nodeText(node: React.ReactNode): string {\n if (node === null || node === undefined || typeof node === 'boolean') return ''\n if (typeof node === 'string' || typeof node === 'number') return String(node)\n if (Array.isArray(node)) return node.map(nodeText).join('')\n if (isValidElement(node)) return nodeText(getProps(node).children)\n return ''\n}\n\ntype OpenFocus = 'first' | 'container' | null\n\nexport function MDropdownMenu({\n trigger,\n placement = 'bottom-start',\n closeOnSelect = true,\n openOn = 'click',\n onOpenChange,\n isolateClick = false,\n className,\n style,\n popoverClassName,\n popoverStyle,\n children,\n}: MDropdownMenuProps) {\n const [open, setOpen] = useState(false)\n const anchorRef = useRef<HTMLDivElement>(null)\n const listRef = useRef<HTMLDivElement>(null)\n const itemEls = useRef<(HTMLElement | null)[]>([])\n const hoverTimeout = useRef<ReturnType<typeof setTimeout>>(null)\n const baseId = useId()\n const menuId = `${baseId}-menu`\n const fallbackTriggerId = `${baseId}-trigger`\n // Where focus goes once the menu is positioned: first item (keyboard), the menu itself\n // (pointer) or nowhere (hover-open must not steal focus).\n const [openFocus, setOpenFocus] = useState<OpenFocus>(null)\n // The consumer's trigger carries the menu-button semantics when it contains a focusable\n // element; otherwise the wrapper keeps acting as `role=\"button\"` (the original behaviour).\n const [nativeTrigger, setNativeTrigger] = useState(true)\n const [triggerId, setTriggerId] = useState(fallbackTriggerId)\n\n const items = collectItems(children)\n const enabledItems = items.filter((i) => !getProps(i).disabled)\n const enabledCount = enabledItems.length\n\n const setMenuOpen = useCallback(\n (next: boolean | ((prev: boolean) => boolean)) => {\n setOpen((prev) => {\n const resolved = typeof next === 'function' ? next(prev) : next\n onOpenChange?.(resolved)\n return resolved\n })\n },\n [onOpenChange]\n )\n\n const {activeIndex, setActiveIndex, resetIndex, onKeyDown, getItemProps, focusItem} = useKeyboardNav({\n itemCount: enabledCount,\n // Activate through a real click so links navigate and item handlers run exactly as for the pointer.\n onSelect: (index) => itemEls.current[index]?.click(),\n onClose: () => setMenuOpen(false),\n isOpen: open,\n mode: 'roving',\n selectOnSpace: true,\n getItemLabel: (index) => nodeText(getProps(enabledItems[index]).label),\n })\n\n useEffect(() => {\n if (!open) resetIndex()\n }, [open, resetIndex])\n\n // Detect whether the trigger brings its own focusable element and mirror the menu-button\n // state onto it (aria-haspopup / aria-expanded / aria-controls), whatever its structure.\n useLayoutEffect(() => {\n const anchor = anchorRef.current\n if (!anchor) return\n const target = getFocusable(anchor)[0]\n setNativeTrigger(!!target)\n if (!target) {\n setTriggerId(fallbackTriggerId)\n return\n }\n if (!target.id) target.id = fallbackTriggerId\n setTriggerId(target.id)\n target.setAttribute('aria-haspopup', 'menu')\n target.setAttribute('aria-expanded', String(open))\n if (open) target.setAttribute('aria-controls', menuId)\n else target.removeAttribute('aria-controls')\n })\n\n const openMenu = (focus: OpenFocus, index: number) => {\n setOpenFocus(focus)\n setActiveIndex(index)\n setMenuOpen(true)\n }\n\n const handleTriggerClick = (e: React.MouseEvent) => {\n if (isolateClick) {\n e.stopPropagation()\n e.preventDefault()\n }\n if (open) {\n setMenuOpen(false)\n return\n }\n // A click synthesised from the keyboard (detail 0) gets the keyboard focus treatment.\n if (e.detail === 0) openMenu('first', 0)\n else openMenu('container', -1)\n }\n\n const handleTriggerKeyDown = (e: React.KeyboardEvent) => {\n if (open) {\n if (isolateClick && e.key !== 'Tab') e.stopPropagation()\n onKeyDown(e)\n return\n }\n if (e.key === 'ArrowDown' || e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n if (isolateClick) e.stopPropagation()\n openMenu('first', 0)\n } else if (e.key === 'ArrowUp') {\n e.preventDefault()\n if (isolateClick) e.stopPropagation()\n openMenu('first', enabledCount - 1)\n }\n }\n\n // Firefox activates a button on Space keyup even when keydown was prevented.\n const handleTriggerKeyUp = (e: React.KeyboardEvent) => {\n if (e.key === ' ') e.preventDefault()\n }\n\n const handleMenuKeyDown = (e: React.KeyboardEvent) => {\n // Tab must reach MPopover (close on Tab-out); everything else stays inside the menu.\n if (isolateClick && e.key !== 'Tab') e.stopPropagation()\n onKeyDown(e)\n }\n\n // Map active index back to flat child rendering with enabled-only tracking.\n let enabledIdx = 0\n const renderChild = (child: React.ReactNode): React.ReactNode => {\n if (!isValidElement(child)) return child\n\n if (isItem(child)) {\n const p = getProps(child)\n const isDisabled = p.disabled\n const idx = isDisabled ? -1 : enabledIdx++\n const navProps = isDisabled ? undefined : getItemProps(idx)\n return cloneElement(child, {\n _active: idx >= 0 && idx === activeIndex,\n _onHover: isDisabled\n ? undefined\n : () => {\n // Follow the pointer with real focus only while focus is already in the menu.\n if (listRef.current?.contains(document.activeElement)) focusItem(idx)\n else setActiveIndex(idx)\n },\n _onClick: () => {\n if (isDisabled) return\n if (closeOnSelect) setMenuOpen(false)\n },\n _navProps: navProps\n ? {\n ...navProps,\n ref: (el: HTMLElement | null) => {\n navProps.ref?.(el)\n itemEls.current[idx] = el\n },\n }\n : undefined,\n } as AnyProps)\n }\n\n if (isGroup(child)) {\n return cloneElement(child, {\n children: Children.map(getProps(child).children, renderChild),\n } as AnyProps)\n }\n\n return child\n }\n\n const hoverHandlers =\n openOn === 'hover'\n ? {\n onMouseEnter: () => {\n if (hoverTimeout.current) clearTimeout(hoverTimeout.current)\n if (!open) setOpenFocus(null)\n setMenuOpen(true)\n },\n onMouseLeave: () => {\n hoverTimeout.current = setTimeout(() => setMenuOpen(false), 150)\n },\n }\n : {}\n\n /**\n * When `isolateClick` is set, every click bubbling out of the menu\n * (trigger AND items) must be stopped — otherwise selecting an action\n * also fires the click handler on a clickable parent (Link, MCard with\n * onClick, MDataTable row link). Trigger click itself is handled by\n * `handleTriggerClick`; this wrapper catches the bubbled item clicks\n * before they leave the anchor. `preventDefault` is needed too — when the\n * dropdown is rendered inside an `<a href>` (MCard component={Link}),\n * stopping propagation alone does not block native link navigation.\n *\n * Caveat: MDropdownItem with `href` will not navigate while inside an\n * `isolateClick` menu — use programmatic navigation (onClick + navigate)\n * in those contexts instead.\n */\n const isolateAnchorClick = isolateClick\n ? (e: React.MouseEvent) => {\n e.stopPropagation()\n e.preventDefault()\n }\n : undefined\n\n return (\n <div\n className={cn('dropdown menu anchor', className)}\n style={style}\n onClick={isolateAnchorClick}\n {...hoverHandlers}\n >\n <div\n ref={anchorRef}\n onClick={openOn === 'click' ? handleTriggerClick : undefined}\n onKeyDown={handleTriggerKeyDown}\n onKeyUp={handleTriggerKeyUp}\n className=\"dropdown menu trigger\"\n {...(nativeTrigger\n ? {}\n : {\n role: 'button',\n tabIndex: 0,\n id: fallbackTriggerId,\n 'aria-haspopup': 'menu' as const,\n 'aria-expanded': open,\n 'aria-controls': open ? menuId : undefined,\n })}\n >\n {trigger}\n </div>\n <MPopover\n open={open}\n anchorRef={anchorRef}\n onClose={() => setMenuOpen(false)}\n placement={placement}\n className={cn('dropdown menu popover', popoverClassName)}\n style={popoverStyle}\n role={null}\n initialFocus={openFocus === 'first' ? 'first' : openFocus === 'container' ? listRef : undefined}\n closeOnTabOut\n >\n <div\n ref={listRef}\n id={menuId}\n className=\"dropdown menu list\"\n role=\"menu\"\n aria-labelledby={triggerId}\n tabIndex={-1}\n onKeyDown={handleMenuKeyDown}\n {...hoverHandlers}\n >\n {Children.map(children, renderChild)}\n </div>\n </MPopover>\n </div>\n )\n}\n\nexport function MDropdownItem({\n icon,\n label,\n description,\n role = 'menuitem',\n checked,\n href,\n to,\n onClick,\n color,\n disabled = false,\n active = false,\n component,\n className,\n _active,\n _onHover,\n _onClick,\n _navProps,\n}: MDropdownItemProps & {\n _active?: boolean\n _onHover?: () => void\n _onClick?: () => void\n _navProps?: UseKeyboardNavItemProps\n}) {\n const isHighlighted = _active ?? active\n\n const checkable = role === 'menuitemradio' || role === 'menuitemcheckbox'\n const leading =\n icon ??\n (role === 'menuitemcheckbox' ? (\n <span className=\"dropdown menu check\" aria-hidden=\"true\">\n {checked ? <MCheckIcon size={14} /> : null}\n </span>\n ) : null)\n\n const content = (\n <>\n {leading && <span className=\"dropdown menu icon\">{leading}</span>}\n {description ? (\n <span className=\"dropdown menu label with-description\">\n <span className=\"dropdown menu label-text\">{label}</span>\n <span className=\"dropdown menu description\">{description}</span>\n </span>\n ) : (\n <span className=\"dropdown menu label\">{label}</span>\n )}\n </>\n )\n\n const cls = cn(\n 'dropdown menu item',\n isHighlighted && 'active',\n disabled && 'disabled',\n checkable && checked && 'checked',\n color,\n className\n )\n\n const handleClick = (e: React.MouseEvent) => {\n if (disabled) {\n e.preventDefault()\n return\n }\n onClick?.()\n _onClick?.()\n }\n\n const Tag = component ?? (href || to ? 'a' : 'button')\n const linkProps = component ? {...(href ? {href} : {}), ...(to ? {to} : {})} : href ? {href} : to ? {href: to} : {}\n\n return (\n <Tag\n className={cls}\n role={role}\n aria-checked={checkable ? Boolean(checked) : undefined}\n id={_navProps?.id}\n ref={_navProps?.ref}\n tabIndex={_navProps?.tabIndex ?? -1}\n onFocus={_navProps?.onFocus}\n onClick={handleClick}\n onMouseEnter={_onHover}\n aria-disabled={disabled || undefined}\n {...linkProps}\n >\n {content}\n </Tag>\n )\n}\n;(MDropdownItem as any).__dropdownItem = true\n\nexport function MDropdownGroup({label, className, children}: MDropdownGroupProps) {\n // The visible label names the group for assistive technology.\n const labelId = `${useId()}-label`\n\n return (\n <div className={cn('dropdown menu group', className)} role=\"group\" aria-labelledby={labelId}>\n <div id={labelId} className=\"dropdown menu group-label\">\n {label}\n </div>\n {children}\n </div>\n )\n}\n;(MDropdownGroup as any).__dropdownGroup = true\n\nexport function MDropdownDivider({className}: MDropdownDividerProps) {\n return <div className={cn('dropdown menu divider', className)} role=\"separator\" />\n}\n"],"mappings":"4TA4BA,SAAS,EAAS,EAAkC,CAChD,OAAO,EAAG,MAGd,SAAS,EAAO,EAAoC,CAChD,MAAO,CAAC,CAAE,EAAM,KAAa,eAGjC,SAAS,EAAQ,EAAoC,CACjD,MAAO,CAAC,CAAE,EAAM,KAAa,gBAIjC,SAAS,EAAa,EAAiD,CACnE,IAAM,EAA8B,EAAE,CAatC,OAZA,EAAA,SAAS,QAAQ,EAAW,GAAU,EAC9B,EAAA,EAAA,gBAAgB,EAAM,GACtB,EAAO,EAAM,CACb,EAAM,KAAK,EAAM,CACV,EAAQ,EAAM,EACrB,EAAA,SAAS,QAAQ,EAAS,EAAM,CAAC,SAAW,GAAwB,EAChE,EAAA,EAAA,gBAAmB,EAAG,EAAI,EAAO,EAAG,EAChC,EAAM,KAAK,EAAG,EAEpB,GAER,CACK,EAIX,SAAS,EAAS,EAA+B,CAK7C,OAJI,GAAS,MAA8B,OAAO,GAAS,UAAkB,GACzE,OAAO,GAAS,UAAY,OAAO,GAAS,SAAiB,OAAO,EAAK,CACzE,MAAM,QAAQ,EAAK,CAAS,EAAK,IAAI,EAAS,CAAC,KAAK,GAAG,EAC3D,EAAA,EAAA,gBAAmB,EAAK,CAAS,EAAS,EAAS,EAAK,CAAC,SAAS,CAC3D,GAKX,SAAgB,EAAc,CAC1B,UACA,YAAY,eACZ,gBAAgB,GAChB,SAAS,QACT,eACA,eAAe,GACf,YACA,QACA,mBACA,eACA,YACmB,CACnB,GAAM,CAAC,EAAM,IAAA,EAAA,EAAA,UAAoB,GAAM,CACjC,GAAA,EAAA,EAAA,QAAmC,KAAK,CACxC,GAAA,EAAA,EAAA,QAAiC,KAAK,CACtC,GAAA,EAAA,EAAA,QAAyC,EAAE,CAAC,CAC5C,GAAA,EAAA,EAAA,QAAqD,KAAK,CAC1D,GAAA,EAAA,EAAA,QAAgB,CAChB,EAAS,GAAG,EAAO,OACnB,EAAoB,GAAG,EAAO,UAG9B,CAAC,EAAW,IAAA,EAAA,EAAA,UAAoC,KAAK,CAGrD,CAAC,EAAe,IAAA,EAAA,EAAA,UAA6B,GAAK,CAClD,CAAC,EAAW,IAAA,EAAA,EAAA,UAAyB,EAAkB,CAGvD,EADQ,EAAa,EAAS,CACT,OAAQ,GAAM,CAAC,EAAS,EAAE,CAAC,SAAS,CACzD,EAAe,EAAa,OAE5B,GAAA,EAAA,EAAA,aACD,GAAiD,CAC9C,EAAS,GAAS,CACd,IAAM,EAAW,OAAO,GAAS,WAAa,EAAK,EAAK,CAAG,EAE3D,OADA,IAAe,EAAS,CACjB,GACT,EAEN,CAAC,EAAa,CACjB,CAEK,CAAC,cAAa,iBAAgB,aAAY,YAAW,eAAc,aAAa,EAAA,EAAe,CACjG,UAAW,EAEX,SAAW,GAAU,EAAQ,QAAQ,IAAQ,OAAO,CACpD,YAAe,EAAY,GAAM,CACjC,OAAQ,EACR,KAAM,SACN,cAAe,GACf,aAAe,GAAU,EAAS,EAAS,EAAa,GAAO,CAAC,MAAM,CACzE,CAAC,EAEF,EAAA,EAAA,eAAgB,CACP,GAAM,GAAY,EACxB,CAAC,EAAM,EAAW,CAAC,EAItB,EAAA,EAAA,qBAAsB,CAClB,IAAM,EAAS,EAAU,QACzB,GAAI,CAAC,EAAQ,OACb,IAAM,EAAS,EAAA,EAAa,EAAO,CAAC,GAEpC,GADA,EAAiB,CAAC,CAAC,EAAO,CACtB,CAAC,EAAQ,CACT,EAAa,EAAkB,CAC/B,OAEJ,AAAgB,EAAO,KAAK,EAC5B,EAAa,EAAO,GAAG,CACvB,EAAO,aAAa,gBAAiB,OAAO,CAC5C,EAAO,aAAa,gBAAiB,OAAO,EAAK,CAAC,CAC9C,EAAM,EAAO,aAAa,gBAAiB,EAAO,CACjD,EAAO,gBAAgB,gBAAgB,EAC9C,CAEF,IAAM,GAAY,EAAkB,IAAkB,CAClD,EAAa,EAAM,CACnB,EAAe,EAAM,CACrB,EAAY,GAAK,EAGf,EAAsB,GAAwB,CAKhD,GAJI,IACA,EAAE,iBAAiB,CACnB,EAAE,gBAAgB,EAElB,EAAM,CACN,EAAY,GAAM,CAClB,OAGA,EAAE,SAAW,EAAG,EAAS,QAAS,EAAE,CACnC,EAAS,YAAa,GAAG,EAG5B,EAAwB,GAA2B,CACrD,GAAI,EAAM,CACF,GAAgB,EAAE,MAAQ,OAAO,EAAE,iBAAiB,CACxD,EAAU,EAAE,CACZ,OAEA,EAAE,MAAQ,aAAe,EAAE,MAAQ,SAAW,EAAE,MAAQ,KACxD,EAAE,gBAAgB,CACd,GAAc,EAAE,iBAAiB,CACrC,EAAS,QAAS,EAAE,EACb,EAAE,MAAQ,YACjB,EAAE,gBAAgB,CACd,GAAc,EAAE,iBAAiB,CACrC,EAAS,QAAS,EAAe,EAAE,GAKrC,EAAsB,GAA2B,CAC/C,EAAE,MAAQ,KAAK,EAAE,gBAAgB,EAGnC,EAAqB,GAA2B,CAE9C,GAAgB,EAAE,MAAQ,OAAO,EAAE,iBAAiB,CACxD,EAAU,EAAE,EAIZ,EAAa,EACX,EAAe,GAA4C,CAC7D,GAAI,EAAA,EAAA,EAAA,gBAAgB,EAAM,CAAE,OAAO,EAEnC,GAAI,EAAO,EAAM,CAAE,CAEf,IAAM,EADI,EAAS,EAAM,CACJ,SACf,EAAM,EAAa,GAAK,IACxB,EAAW,EAAa,IAAA,GAAY,EAAa,EAAI,CAC3D,OAAA,EAAA,EAAA,cAAoB,EAAO,CACvB,QAAS,GAAO,GAAK,IAAQ,EAC7B,SAAU,EACJ,IAAA,OACM,CAEE,EAAQ,SAAS,SAAS,SAAS,cAAc,CAAE,EAAU,EAAI,CAChE,EAAe,EAAI,EAElC,aAAgB,CACR,GACA,GAAe,EAAY,GAAM,EAEzC,UAAW,EACL,CACI,GAAG,EACH,IAAM,GAA2B,CAC7B,EAAS,MAAM,EAAG,CAClB,EAAQ,QAAQ,GAAO,GAE9B,CACD,IAAA,GACT,CAAa,CASlB,OANI,EAAQ,EAAM,EACd,EAAA,EAAA,cAAoB,EAAO,CACvB,SAAU,EAAA,SAAS,IAAI,EAAS,EAAM,CAAC,SAAU,EAAY,CAChE,CAAa,CAGX,GAGL,EACF,IAAW,QACL,CACI,iBAAoB,CACZ,EAAa,SAAS,aAAa,EAAa,QAAQ,CACvD,GAAM,EAAa,KAAK,CAC7B,EAAY,GAAK,EAErB,iBAAoB,CAChB,EAAa,QAAU,eAAiB,EAAY,GAAM,CAAE,IAAI,EAEvE,CACD,EAAE,CAgBN,GAAqB,EACpB,GAAwB,CACrB,EAAE,iBAAiB,CACnB,EAAE,gBAAgB,EAEtB,IAAA,GAEN,OACI,EAAA,EAAA,MAAC,MAAD,CACI,UAAW,EAAA,EAAG,uBAAwB,EAAU,CACzC,QACP,QAAS,GACT,GAAI,WAJR,EAMI,EAAA,EAAA,KAAC,MAAD,CACI,IAAK,EACL,QAAS,IAAW,QAAU,EAAqB,IAAA,GACnD,UAAW,EACX,QAAS,EACT,UAAU,wBACV,GAAK,EACC,EAAE,CACF,CACI,KAAM,SACN,SAAU,EACV,GAAI,EACJ,gBAAiB,OACjB,gBAAiB,EACjB,gBAAiB,EAAO,EAAS,IAAA,GACpC,UAEN,EACC,CAAA,EACN,EAAA,EAAA,KAAC,EAAA,EAAD,CACU,OACK,YACX,YAAe,EAAY,GAAM,CACtB,YACX,UAAW,EAAA,EAAG,wBAAyB,EAAiB,CACxD,MAAO,EACP,KAAM,KACN,aAAc,IAAc,QAAU,QAAU,IAAc,YAAc,EAAU,IAAA,GACtF,cAAA,aAEA,EAAA,EAAA,KAAC,MAAD,CACI,IAAK,EACL,GAAI,EACJ,UAAU,qBACV,KAAK,OACL,kBAAiB,EACjB,SAAU,GACV,UAAW,EACX,GAAI,WAEH,EAAA,SAAS,IAAI,EAAU,EAAY,CAClC,CAAA,CACC,CAAA,CACT,GAId,SAAgB,EAAc,CAC1B,OACA,QACA,cACA,OAAO,WACP,UACA,OACA,KACA,UACA,QACA,WAAW,GACX,SAAS,GACT,YACA,YACA,UACA,WACA,WACA,aAMD,CACC,IAAM,EAAgB,GAAW,EAE3B,EAAY,IAAS,iBAAmB,IAAS,mBACjD,EACF,IACC,IAAS,oBACN,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,sBAAsB,cAAY,gBAC7C,GAAU,EAAA,EAAA,KAAC,EAAA,GAAD,CAAY,KAAM,GAAM,CAAA,CAAG,KACnC,CAAA,CACP,MAEF,GACF,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,CACK,IAAW,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,8BAAsB,EAAe,CAAA,CAChE,GACG,EAAA,EAAA,MAAC,OAAD,CAAM,UAAU,gDAAhB,EACI,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,oCAA4B,EAAa,CAAA,EACzD,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,qCAA6B,EAAmB,CAAA,CAC7D,IAEP,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,+BAAuB,EAAa,CAAA,CAEzD,CAAA,CAAA,CAGD,EAAM,EAAA,EACR,qBACA,GAAiB,SACjB,GAAY,WACZ,GAAa,GAAW,UACxB,EACA,EACH,CAEK,EAAe,GAAwB,CACzC,GAAI,EAAU,CACV,EAAE,gBAAgB,CAClB,OAEJ,KAAW,CACX,KAAY,EAGV,EAAM,IAAc,GAAQ,EAAK,IAAM,UACvC,EAAY,EAAY,CAAC,GAAI,EAAO,CAAC,OAAK,CAAG,EAAE,CAAG,GAAI,EAAK,CAAC,KAAG,CAAG,EAAE,CAAE,CAAG,EAAO,CAAC,OAAK,CAAG,EAAK,CAAC,KAAM,EAAG,CAAG,EAAE,CAEnH,OACI,EAAA,EAAA,KAAC,EAAD,CACI,UAAW,EACL,OACN,eAAc,EAAY,EAAQ,EAAW,IAAA,GAC7C,GAAI,GAAW,GACf,IAAK,GAAW,IAChB,SAAU,GAAW,UAAY,GACjC,QAAS,GAAW,QACpB,QAAS,EACT,aAAc,EACd,gBAAe,GAAY,IAAA,GAC3B,GAAI,WAEH,EACC,CAAA,CAGb,EAAuB,eAAiB,GAEzC,SAAgB,EAAe,CAAC,QAAO,YAAW,YAAgC,CAE9E,IAAM,EAAU,IAAA,EAAA,EAAA,QAAU,CAAC,QAE3B,OACI,EAAA,EAAA,MAAC,MAAD,CAAK,UAAW,EAAA,EAAG,sBAAuB,EAAU,CAAE,KAAK,QAAQ,kBAAiB,WAApF,EACI,EAAA,EAAA,KAAC,MAAD,CAAK,GAAI,EAAS,UAAU,qCACvB,EACC,CAAA,CACL,EACC,GAGb,EAAwB,gBAAkB,GAE3C,SAAgB,EAAiB,CAAC,aAAmC,CACjE,OAAO,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,EAAA,EAAG,wBAAyB,EAAU,CAAE,KAAK,YAAc,CAAA"}
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import { Yi as e } from "./icons-IqEBmGh3.js";
|
|
2
|
+
import { t } from "./cn-CUSXNnjF.js";
|
|
3
|
+
import { n } from "./useGhostText-CKsb8Ufa.js";
|
|
4
|
+
import { t as r } from "./useModalLayer-CpOPSDbf.js";
|
|
5
|
+
import { t as i } from "./MPopover-CBDbUOW6.js";
|
|
6
|
+
/* empty css */
|
|
7
|
+
import { Children as a, cloneElement as o, isValidElement as s, useCallback as c, useEffect as l, useId as u, useLayoutEffect as d, useRef as f, useState as p } from "react";
|
|
8
|
+
import { Fragment as m, jsx as h, jsxs as g } from "react/jsx-runtime";
|
|
9
|
+
//#region src/components/overlays/MDropdownMenu/MDropdownMenu.tsx
|
|
10
|
+
function _(e) {
|
|
11
|
+
return e.props;
|
|
12
|
+
}
|
|
13
|
+
function v(e) {
|
|
14
|
+
return !!e.type.__dropdownItem;
|
|
15
|
+
}
|
|
16
|
+
function y(e) {
|
|
17
|
+
return !!e.type.__dropdownGroup;
|
|
18
|
+
}
|
|
19
|
+
function b(e) {
|
|
20
|
+
let t = [];
|
|
21
|
+
return a.forEach(e, (e) => {
|
|
22
|
+
s(e) && (v(e) ? t.push(e) : y(e) && a.forEach(_(e).children, (e) => {
|
|
23
|
+
s(e) && v(e) && t.push(e);
|
|
24
|
+
}));
|
|
25
|
+
}), t;
|
|
26
|
+
}
|
|
27
|
+
function x(e) {
|
|
28
|
+
return e == null || typeof e == "boolean" ? "" : typeof e == "string" || typeof e == "number" ? String(e) : Array.isArray(e) ? e.map(x).join("") : s(e) ? x(_(e).children) : "";
|
|
29
|
+
}
|
|
30
|
+
function S({ trigger: e, placement: m = "bottom-start", closeOnSelect: S = !0, openOn: C = "click", onOpenChange: w, isolateClick: T = !1, className: E, style: D, popoverClassName: O, popoverStyle: k, children: A }) {
|
|
31
|
+
let [j, ee] = p(!1), M = f(null), N = f(null), P = f([]), F = f(null), I = u(), L = `${I}-menu`, R = `${I}-trigger`, [z, B] = p(null), [V, H] = p(!0), [U, W] = p(R), G = b(A).filter((e) => !_(e).disabled), K = G.length, q = c((e) => {
|
|
32
|
+
ee((t) => {
|
|
33
|
+
let n = typeof e == "function" ? e(t) : e;
|
|
34
|
+
return w?.(n), n;
|
|
35
|
+
});
|
|
36
|
+
}, [w]), { activeIndex: te, setActiveIndex: J, resetIndex: Y, onKeyDown: X, getItemProps: ne, focusItem: re } = n({
|
|
37
|
+
itemCount: K,
|
|
38
|
+
onSelect: (e) => P.current[e]?.click(),
|
|
39
|
+
onClose: () => q(!1),
|
|
40
|
+
isOpen: j,
|
|
41
|
+
mode: "roving",
|
|
42
|
+
selectOnSpace: !0,
|
|
43
|
+
getItemLabel: (e) => x(_(G[e]).label)
|
|
44
|
+
});
|
|
45
|
+
l(() => {
|
|
46
|
+
j || Y();
|
|
47
|
+
}, [j, Y]), d(() => {
|
|
48
|
+
let e = M.current;
|
|
49
|
+
if (!e) return;
|
|
50
|
+
let t = r(e)[0];
|
|
51
|
+
if (H(!!t), !t) {
|
|
52
|
+
W(R);
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
t.id ||= R, W(t.id), t.setAttribute("aria-haspopup", "menu"), t.setAttribute("aria-expanded", String(j)), j ? t.setAttribute("aria-controls", L) : t.removeAttribute("aria-controls");
|
|
56
|
+
});
|
|
57
|
+
let Z = (e, t) => {
|
|
58
|
+
B(e), J(t), q(!0);
|
|
59
|
+
}, ie = (e) => {
|
|
60
|
+
if (T && (e.stopPropagation(), e.preventDefault()), j) {
|
|
61
|
+
q(!1);
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
e.detail === 0 ? Z("first", 0) : Z("container", -1);
|
|
65
|
+
}, ae = (e) => {
|
|
66
|
+
if (j) {
|
|
67
|
+
T && e.key !== "Tab" && e.stopPropagation(), X(e);
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
e.key === "ArrowDown" || e.key === "Enter" || e.key === " " ? (e.preventDefault(), T && e.stopPropagation(), Z("first", 0)) : e.key === "ArrowUp" && (e.preventDefault(), T && e.stopPropagation(), Z("first", K - 1));
|
|
71
|
+
}, oe = (e) => {
|
|
72
|
+
e.key === " " && e.preventDefault();
|
|
73
|
+
}, se = (e) => {
|
|
74
|
+
T && e.key !== "Tab" && e.stopPropagation(), X(e);
|
|
75
|
+
}, ce = 0, Q = (e) => {
|
|
76
|
+
if (!s(e)) return e;
|
|
77
|
+
if (v(e)) {
|
|
78
|
+
let t = _(e).disabled, n = t ? -1 : ce++, r = t ? void 0 : ne(n);
|
|
79
|
+
return o(e, {
|
|
80
|
+
_active: n >= 0 && n === te,
|
|
81
|
+
_onHover: t ? void 0 : () => {
|
|
82
|
+
N.current?.contains(document.activeElement) ? re(n) : J(n);
|
|
83
|
+
},
|
|
84
|
+
_onClick: () => {
|
|
85
|
+
t || S && q(!1);
|
|
86
|
+
},
|
|
87
|
+
_navProps: r ? {
|
|
88
|
+
...r,
|
|
89
|
+
ref: (e) => {
|
|
90
|
+
r.ref?.(e), P.current[n] = e;
|
|
91
|
+
}
|
|
92
|
+
} : void 0
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
return y(e) ? o(e, { children: a.map(_(e).children, Q) }) : e;
|
|
96
|
+
}, $ = C === "hover" ? {
|
|
97
|
+
onMouseEnter: () => {
|
|
98
|
+
F.current && clearTimeout(F.current), j || B(null), q(!0);
|
|
99
|
+
},
|
|
100
|
+
onMouseLeave: () => {
|
|
101
|
+
F.current = setTimeout(() => q(!1), 150);
|
|
102
|
+
}
|
|
103
|
+
} : {}, le = T ? (e) => {
|
|
104
|
+
e.stopPropagation(), e.preventDefault();
|
|
105
|
+
} : void 0;
|
|
106
|
+
return /* @__PURE__ */ g("div", {
|
|
107
|
+
className: t("dropdown menu anchor", E),
|
|
108
|
+
style: D,
|
|
109
|
+
onClick: le,
|
|
110
|
+
...$,
|
|
111
|
+
children: [/* @__PURE__ */ h("div", {
|
|
112
|
+
ref: M,
|
|
113
|
+
onClick: C === "click" ? ie : void 0,
|
|
114
|
+
onKeyDown: ae,
|
|
115
|
+
onKeyUp: oe,
|
|
116
|
+
className: "dropdown menu trigger",
|
|
117
|
+
...V ? {} : {
|
|
118
|
+
role: "button",
|
|
119
|
+
tabIndex: 0,
|
|
120
|
+
id: R,
|
|
121
|
+
"aria-haspopup": "menu",
|
|
122
|
+
"aria-expanded": j,
|
|
123
|
+
"aria-controls": j ? L : void 0
|
|
124
|
+
},
|
|
125
|
+
children: e
|
|
126
|
+
}), /* @__PURE__ */ h(i, {
|
|
127
|
+
open: j,
|
|
128
|
+
anchorRef: M,
|
|
129
|
+
onClose: () => q(!1),
|
|
130
|
+
placement: m,
|
|
131
|
+
className: t("dropdown menu popover", O),
|
|
132
|
+
style: k,
|
|
133
|
+
role: null,
|
|
134
|
+
initialFocus: z === "first" ? "first" : z === "container" ? N : void 0,
|
|
135
|
+
closeOnTabOut: !0,
|
|
136
|
+
children: /* @__PURE__ */ h("div", {
|
|
137
|
+
ref: N,
|
|
138
|
+
id: L,
|
|
139
|
+
className: "dropdown menu list",
|
|
140
|
+
role: "menu",
|
|
141
|
+
"aria-labelledby": U,
|
|
142
|
+
tabIndex: -1,
|
|
143
|
+
onKeyDown: se,
|
|
144
|
+
...$,
|
|
145
|
+
children: a.map(A, Q)
|
|
146
|
+
})
|
|
147
|
+
})]
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
function C({ icon: n, label: r, description: i, role: a = "menuitem", checked: o, href: s, to: c, onClick: l, color: u, disabled: d = !1, active: f = !1, component: p, className: _, _active: v, _onHover: y, _onClick: b, _navProps: x }) {
|
|
151
|
+
let S = v ?? f, C = a === "menuitemradio" || a === "menuitemcheckbox", w = n ?? (a === "menuitemcheckbox" ? /* @__PURE__ */ h("span", {
|
|
152
|
+
className: "dropdown menu check",
|
|
153
|
+
"aria-hidden": "true",
|
|
154
|
+
children: o ? /* @__PURE__ */ h(e, { size: 14 }) : null
|
|
155
|
+
}) : null), T = /* @__PURE__ */ g(m, { children: [w && /* @__PURE__ */ h("span", {
|
|
156
|
+
className: "dropdown menu icon",
|
|
157
|
+
children: w
|
|
158
|
+
}), i ? /* @__PURE__ */ g("span", {
|
|
159
|
+
className: "dropdown menu label with-description",
|
|
160
|
+
children: [/* @__PURE__ */ h("span", {
|
|
161
|
+
className: "dropdown menu label-text",
|
|
162
|
+
children: r
|
|
163
|
+
}), /* @__PURE__ */ h("span", {
|
|
164
|
+
className: "dropdown menu description",
|
|
165
|
+
children: i
|
|
166
|
+
})]
|
|
167
|
+
}) : /* @__PURE__ */ h("span", {
|
|
168
|
+
className: "dropdown menu label",
|
|
169
|
+
children: r
|
|
170
|
+
})] }), E = t("dropdown menu item", S && "active", d && "disabled", C && o && "checked", u, _), D = (e) => {
|
|
171
|
+
if (d) {
|
|
172
|
+
e.preventDefault();
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
l?.(), b?.();
|
|
176
|
+
}, O = p ?? (s || c ? "a" : "button"), k = p ? {
|
|
177
|
+
...s ? { href: s } : {},
|
|
178
|
+
...c ? { to: c } : {}
|
|
179
|
+
} : s ? { href: s } : c ? { href: c } : {};
|
|
180
|
+
return /* @__PURE__ */ h(O, {
|
|
181
|
+
className: E,
|
|
182
|
+
role: a,
|
|
183
|
+
"aria-checked": C ? !!o : void 0,
|
|
184
|
+
id: x?.id,
|
|
185
|
+
ref: x?.ref,
|
|
186
|
+
tabIndex: x?.tabIndex ?? -1,
|
|
187
|
+
onFocus: x?.onFocus,
|
|
188
|
+
onClick: D,
|
|
189
|
+
onMouseEnter: y,
|
|
190
|
+
"aria-disabled": d || void 0,
|
|
191
|
+
...k,
|
|
192
|
+
children: T
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
C.__dropdownItem = !0;
|
|
196
|
+
function w({ label: e, className: n, children: r }) {
|
|
197
|
+
let i = `${u()}-label`;
|
|
198
|
+
return /* @__PURE__ */ g("div", {
|
|
199
|
+
className: t("dropdown menu group", n),
|
|
200
|
+
role: "group",
|
|
201
|
+
"aria-labelledby": i,
|
|
202
|
+
children: [/* @__PURE__ */ h("div", {
|
|
203
|
+
id: i,
|
|
204
|
+
className: "dropdown menu group-label",
|
|
205
|
+
children: e
|
|
206
|
+
}), r]
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
w.__dropdownGroup = !0;
|
|
210
|
+
function T({ className: e }) {
|
|
211
|
+
return /* @__PURE__ */ h("div", {
|
|
212
|
+
className: t("dropdown menu divider", e),
|
|
213
|
+
role: "separator"
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
//#endregion
|
|
217
|
+
export { S as i, w as n, C as r, T as t };
|
|
218
|
+
|
|
219
|
+
//# sourceMappingURL=MDropdownMenu-Dvg9UsHB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MDropdownMenu-Dvg9UsHB.js","names":[],"sources":["../src/components/overlays/MDropdownMenu/MDropdownMenu.tsx"],"sourcesContent":["import {\n useState,\n useRef,\n useCallback,\n useEffect,\n useId,\n useLayoutEffect,\n Children,\n isValidElement,\n cloneElement,\n} from 'react'\nimport type * as React from 'react'\nimport {MPopover} from '../../primitives'\nimport {useKeyboardNav} from '../../../utils/useKeyboardNav'\nimport type {UseKeyboardNavItemProps} from '../../../utils/useKeyboardNav'\nimport {getFocusable} from '../../../utils/useModalLayer'\nimport {cn} from '../../../utils/cn'\nimport {MCheckIcon} from '../../../icons'\nimport type {\n MDropdownMenuProps,\n MDropdownItemProps,\n MDropdownGroupProps,\n MDropdownDividerProps,\n} from './MDropdownMenu.types'\nimport './MDropdownMenu.css'\n\ntype AnyProps = Record<string, any>\n\nfunction getProps(el: React.ReactElement): AnyProps {\n return el.props as AnyProps\n}\n\nfunction isItem(child: React.ReactElement): boolean {\n return !!(child.type as any).__dropdownItem\n}\n\nfunction isGroup(child: React.ReactElement): boolean {\n return !!(child.type as any).__dropdownGroup\n}\n\n// Collect all MDropdownItem elements from children (including inside groups).\nfunction collectItems(children: React.ReactNode): React.ReactElement[] {\n const items: React.ReactElement[] = []\n Children.forEach(children, (child) => {\n if (!isValidElement(child)) return\n if (isItem(child)) {\n items.push(child)\n } else if (isGroup(child)) {\n Children.forEach(getProps(child).children, (gc: React.ReactNode) => {\n if (isValidElement(gc) && isItem(gc)) {\n items.push(gc)\n }\n })\n }\n })\n return items\n}\n\n// Plain text of a ReactNode, used for first-letter typeahead.\nfunction nodeText(node: React.ReactNode): string {\n if (node === null || node === undefined || typeof node === 'boolean') return ''\n if (typeof node === 'string' || typeof node === 'number') return String(node)\n if (Array.isArray(node)) return node.map(nodeText).join('')\n if (isValidElement(node)) return nodeText(getProps(node).children)\n return ''\n}\n\ntype OpenFocus = 'first' | 'container' | null\n\nexport function MDropdownMenu({\n trigger,\n placement = 'bottom-start',\n closeOnSelect = true,\n openOn = 'click',\n onOpenChange,\n isolateClick = false,\n className,\n style,\n popoverClassName,\n popoverStyle,\n children,\n}: MDropdownMenuProps) {\n const [open, setOpen] = useState(false)\n const anchorRef = useRef<HTMLDivElement>(null)\n const listRef = useRef<HTMLDivElement>(null)\n const itemEls = useRef<(HTMLElement | null)[]>([])\n const hoverTimeout = useRef<ReturnType<typeof setTimeout>>(null)\n const baseId = useId()\n const menuId = `${baseId}-menu`\n const fallbackTriggerId = `${baseId}-trigger`\n // Where focus goes once the menu is positioned: first item (keyboard), the menu itself\n // (pointer) or nowhere (hover-open must not steal focus).\n const [openFocus, setOpenFocus] = useState<OpenFocus>(null)\n // The consumer's trigger carries the menu-button semantics when it contains a focusable\n // element; otherwise the wrapper keeps acting as `role=\"button\"` (the original behaviour).\n const [nativeTrigger, setNativeTrigger] = useState(true)\n const [triggerId, setTriggerId] = useState(fallbackTriggerId)\n\n const items = collectItems(children)\n const enabledItems = items.filter((i) => !getProps(i).disabled)\n const enabledCount = enabledItems.length\n\n const setMenuOpen = useCallback(\n (next: boolean | ((prev: boolean) => boolean)) => {\n setOpen((prev) => {\n const resolved = typeof next === 'function' ? next(prev) : next\n onOpenChange?.(resolved)\n return resolved\n })\n },\n [onOpenChange]\n )\n\n const {activeIndex, setActiveIndex, resetIndex, onKeyDown, getItemProps, focusItem} = useKeyboardNav({\n itemCount: enabledCount,\n // Activate through a real click so links navigate and item handlers run exactly as for the pointer.\n onSelect: (index) => itemEls.current[index]?.click(),\n onClose: () => setMenuOpen(false),\n isOpen: open,\n mode: 'roving',\n selectOnSpace: true,\n getItemLabel: (index) => nodeText(getProps(enabledItems[index]).label),\n })\n\n useEffect(() => {\n if (!open) resetIndex()\n }, [open, resetIndex])\n\n // Detect whether the trigger brings its own focusable element and mirror the menu-button\n // state onto it (aria-haspopup / aria-expanded / aria-controls), whatever its structure.\n useLayoutEffect(() => {\n const anchor = anchorRef.current\n if (!anchor) return\n const target = getFocusable(anchor)[0]\n setNativeTrigger(!!target)\n if (!target) {\n setTriggerId(fallbackTriggerId)\n return\n }\n if (!target.id) target.id = fallbackTriggerId\n setTriggerId(target.id)\n target.setAttribute('aria-haspopup', 'menu')\n target.setAttribute('aria-expanded', String(open))\n if (open) target.setAttribute('aria-controls', menuId)\n else target.removeAttribute('aria-controls')\n })\n\n const openMenu = (focus: OpenFocus, index: number) => {\n setOpenFocus(focus)\n setActiveIndex(index)\n setMenuOpen(true)\n }\n\n const handleTriggerClick = (e: React.MouseEvent) => {\n if (isolateClick) {\n e.stopPropagation()\n e.preventDefault()\n }\n if (open) {\n setMenuOpen(false)\n return\n }\n // A click synthesised from the keyboard (detail 0) gets the keyboard focus treatment.\n if (e.detail === 0) openMenu('first', 0)\n else openMenu('container', -1)\n }\n\n const handleTriggerKeyDown = (e: React.KeyboardEvent) => {\n if (open) {\n if (isolateClick && e.key !== 'Tab') e.stopPropagation()\n onKeyDown(e)\n return\n }\n if (e.key === 'ArrowDown' || e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n if (isolateClick) e.stopPropagation()\n openMenu('first', 0)\n } else if (e.key === 'ArrowUp') {\n e.preventDefault()\n if (isolateClick) e.stopPropagation()\n openMenu('first', enabledCount - 1)\n }\n }\n\n // Firefox activates a button on Space keyup even when keydown was prevented.\n const handleTriggerKeyUp = (e: React.KeyboardEvent) => {\n if (e.key === ' ') e.preventDefault()\n }\n\n const handleMenuKeyDown = (e: React.KeyboardEvent) => {\n // Tab must reach MPopover (close on Tab-out); everything else stays inside the menu.\n if (isolateClick && e.key !== 'Tab') e.stopPropagation()\n onKeyDown(e)\n }\n\n // Map active index back to flat child rendering with enabled-only tracking.\n let enabledIdx = 0\n const renderChild = (child: React.ReactNode): React.ReactNode => {\n if (!isValidElement(child)) return child\n\n if (isItem(child)) {\n const p = getProps(child)\n const isDisabled = p.disabled\n const idx = isDisabled ? -1 : enabledIdx++\n const navProps = isDisabled ? undefined : getItemProps(idx)\n return cloneElement(child, {\n _active: idx >= 0 && idx === activeIndex,\n _onHover: isDisabled\n ? undefined\n : () => {\n // Follow the pointer with real focus only while focus is already in the menu.\n if (listRef.current?.contains(document.activeElement)) focusItem(idx)\n else setActiveIndex(idx)\n },\n _onClick: () => {\n if (isDisabled) return\n if (closeOnSelect) setMenuOpen(false)\n },\n _navProps: navProps\n ? {\n ...navProps,\n ref: (el: HTMLElement | null) => {\n navProps.ref?.(el)\n itemEls.current[idx] = el\n },\n }\n : undefined,\n } as AnyProps)\n }\n\n if (isGroup(child)) {\n return cloneElement(child, {\n children: Children.map(getProps(child).children, renderChild),\n } as AnyProps)\n }\n\n return child\n }\n\n const hoverHandlers =\n openOn === 'hover'\n ? {\n onMouseEnter: () => {\n if (hoverTimeout.current) clearTimeout(hoverTimeout.current)\n if (!open) setOpenFocus(null)\n setMenuOpen(true)\n },\n onMouseLeave: () => {\n hoverTimeout.current = setTimeout(() => setMenuOpen(false), 150)\n },\n }\n : {}\n\n /**\n * When `isolateClick` is set, every click bubbling out of the menu\n * (trigger AND items) must be stopped — otherwise selecting an action\n * also fires the click handler on a clickable parent (Link, MCard with\n * onClick, MDataTable row link). Trigger click itself is handled by\n * `handleTriggerClick`; this wrapper catches the bubbled item clicks\n * before they leave the anchor. `preventDefault` is needed too — when the\n * dropdown is rendered inside an `<a href>` (MCard component={Link}),\n * stopping propagation alone does not block native link navigation.\n *\n * Caveat: MDropdownItem with `href` will not navigate while inside an\n * `isolateClick` menu — use programmatic navigation (onClick + navigate)\n * in those contexts instead.\n */\n const isolateAnchorClick = isolateClick\n ? (e: React.MouseEvent) => {\n e.stopPropagation()\n e.preventDefault()\n }\n : undefined\n\n return (\n <div\n className={cn('dropdown menu anchor', className)}\n style={style}\n onClick={isolateAnchorClick}\n {...hoverHandlers}\n >\n <div\n ref={anchorRef}\n onClick={openOn === 'click' ? handleTriggerClick : undefined}\n onKeyDown={handleTriggerKeyDown}\n onKeyUp={handleTriggerKeyUp}\n className=\"dropdown menu trigger\"\n {...(nativeTrigger\n ? {}\n : {\n role: 'button',\n tabIndex: 0,\n id: fallbackTriggerId,\n 'aria-haspopup': 'menu' as const,\n 'aria-expanded': open,\n 'aria-controls': open ? menuId : undefined,\n })}\n >\n {trigger}\n </div>\n <MPopover\n open={open}\n anchorRef={anchorRef}\n onClose={() => setMenuOpen(false)}\n placement={placement}\n className={cn('dropdown menu popover', popoverClassName)}\n style={popoverStyle}\n role={null}\n initialFocus={openFocus === 'first' ? 'first' : openFocus === 'container' ? listRef : undefined}\n closeOnTabOut\n >\n <div\n ref={listRef}\n id={menuId}\n className=\"dropdown menu list\"\n role=\"menu\"\n aria-labelledby={triggerId}\n tabIndex={-1}\n onKeyDown={handleMenuKeyDown}\n {...hoverHandlers}\n >\n {Children.map(children, renderChild)}\n </div>\n </MPopover>\n </div>\n )\n}\n\nexport function MDropdownItem({\n icon,\n label,\n description,\n role = 'menuitem',\n checked,\n href,\n to,\n onClick,\n color,\n disabled = false,\n active = false,\n component,\n className,\n _active,\n _onHover,\n _onClick,\n _navProps,\n}: MDropdownItemProps & {\n _active?: boolean\n _onHover?: () => void\n _onClick?: () => void\n _navProps?: UseKeyboardNavItemProps\n}) {\n const isHighlighted = _active ?? active\n\n const checkable = role === 'menuitemradio' || role === 'menuitemcheckbox'\n const leading =\n icon ??\n (role === 'menuitemcheckbox' ? (\n <span className=\"dropdown menu check\" aria-hidden=\"true\">\n {checked ? <MCheckIcon size={14} /> : null}\n </span>\n ) : null)\n\n const content = (\n <>\n {leading && <span className=\"dropdown menu icon\">{leading}</span>}\n {description ? (\n <span className=\"dropdown menu label with-description\">\n <span className=\"dropdown menu label-text\">{label}</span>\n <span className=\"dropdown menu description\">{description}</span>\n </span>\n ) : (\n <span className=\"dropdown menu label\">{label}</span>\n )}\n </>\n )\n\n const cls = cn(\n 'dropdown menu item',\n isHighlighted && 'active',\n disabled && 'disabled',\n checkable && checked && 'checked',\n color,\n className\n )\n\n const handleClick = (e: React.MouseEvent) => {\n if (disabled) {\n e.preventDefault()\n return\n }\n onClick?.()\n _onClick?.()\n }\n\n const Tag = component ?? (href || to ? 'a' : 'button')\n const linkProps = component ? {...(href ? {href} : {}), ...(to ? {to} : {})} : href ? {href} : to ? {href: to} : {}\n\n return (\n <Tag\n className={cls}\n role={role}\n aria-checked={checkable ? Boolean(checked) : undefined}\n id={_navProps?.id}\n ref={_navProps?.ref}\n tabIndex={_navProps?.tabIndex ?? -1}\n onFocus={_navProps?.onFocus}\n onClick={handleClick}\n onMouseEnter={_onHover}\n aria-disabled={disabled || undefined}\n {...linkProps}\n >\n {content}\n </Tag>\n )\n}\n;(MDropdownItem as any).__dropdownItem = true\n\nexport function MDropdownGroup({label, className, children}: MDropdownGroupProps) {\n // The visible label names the group for assistive technology.\n const labelId = `${useId()}-label`\n\n return (\n <div className={cn('dropdown menu group', className)} role=\"group\" aria-labelledby={labelId}>\n <div id={labelId} className=\"dropdown menu group-label\">\n {label}\n </div>\n {children}\n </div>\n )\n}\n;(MDropdownGroup as any).__dropdownGroup = true\n\nexport function MDropdownDivider({className}: MDropdownDividerProps) {\n return <div className={cn('dropdown menu divider', className)} role=\"separator\" />\n}\n"],"mappings":"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"}
|