@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,335 @@
|
|
|
1
|
+
import { r as e } from "./theme-B_juOenJ.js";
|
|
2
|
+
import { s as t, t as n, y as r } from "./frameworkTexts-o43FqY1A.js";
|
|
3
|
+
import { Ci as i, Ei as a, In as o, Ln as s, Pn as c, Si as l, Ti as u, Xi as d, wi as f } from "./icons-IqEBmGh3.js";
|
|
4
|
+
import { t as p } from "./cn-CUSXNnjF.js";
|
|
5
|
+
import { c as m, t as h } from "./useModalLayer-CpOPSDbf.js";
|
|
6
|
+
import { t as g } from "./MButton-KELyyBw1.js";
|
|
7
|
+
import { createContext as _, useCallback as v, useContext as y, useEffect as b, useLayoutEffect as x, useMemo as S, useRef as C, useState as w } from "react";
|
|
8
|
+
import { Fragment as T, jsx as E, jsxs as D } from "react/jsx-runtime";
|
|
9
|
+
//#region src/components/feedback/statusIcons.tsx
|
|
10
|
+
var O = {
|
|
11
|
+
success: /* @__PURE__ */ E(i, {}),
|
|
12
|
+
warning: /* @__PURE__ */ E(a, {}),
|
|
13
|
+
error: /* @__PURE__ */ E(f, {}),
|
|
14
|
+
info: /* @__PURE__ */ E(u, {}),
|
|
15
|
+
primary: /* @__PURE__ */ E(u, {}),
|
|
16
|
+
neutral: /* @__PURE__ */ E(l, {}),
|
|
17
|
+
light: /* @__PURE__ */ E(s, {}),
|
|
18
|
+
dark: /* @__PURE__ */ E(o, {}),
|
|
19
|
+
news: /* @__PURE__ */ E(c, {})
|
|
20
|
+
};
|
|
21
|
+
function k(e) {
|
|
22
|
+
return e ? O[e] ?? O.info : O.info;
|
|
23
|
+
}
|
|
24
|
+
//#endregion
|
|
25
|
+
//#region src/components/feedback/MAlert/MAlert.tsx
|
|
26
|
+
function A({ color: t = "info", icon: n = !0, title: r, hidden: i, hiddenAbove: a, className: o, children: s, ...c }) {
|
|
27
|
+
let l = n === !1 ? null : n === !0 ? k(t) : n;
|
|
28
|
+
return /* @__PURE__ */ D("div", {
|
|
29
|
+
className: p("alert", `color-${t}`, o),
|
|
30
|
+
role: "status",
|
|
31
|
+
...e(i, a),
|
|
32
|
+
...c,
|
|
33
|
+
children: [l && /* @__PURE__ */ E("span", {
|
|
34
|
+
className: "icon",
|
|
35
|
+
children: l
|
|
36
|
+
}), /* @__PURE__ */ D("div", {
|
|
37
|
+
className: "main",
|
|
38
|
+
children: [r && /* @__PURE__ */ E("div", {
|
|
39
|
+
className: "title",
|
|
40
|
+
children: r
|
|
41
|
+
}), s && /* @__PURE__ */ E("div", {
|
|
42
|
+
className: "content",
|
|
43
|
+
children: s
|
|
44
|
+
})]
|
|
45
|
+
})]
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
//#endregion
|
|
49
|
+
//#region src/components/feedback/MBanner/MBanner.tsx
|
|
50
|
+
function j({ color: n = "primary", variant: r = "filled", icon: i, action: a, hidden: o, hiddenAbove: s, dismissible: c = !1, onDismiss: l, className: u, children: f, ...m }) {
|
|
51
|
+
let h = t(), [_, v] = w(!0), [y, b] = w(!1), x = C(null);
|
|
52
|
+
if (!_) return null;
|
|
53
|
+
let S = () => {
|
|
54
|
+
if (y) return;
|
|
55
|
+
b(!0);
|
|
56
|
+
let e = x.current;
|
|
57
|
+
if (!e) {
|
|
58
|
+
v(!1), l?.();
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
let t = !1, n = () => {
|
|
62
|
+
t || (t = !0, e.removeEventListener("transitionend", r), window.clearTimeout(i), v(!1), b(!1), l?.());
|
|
63
|
+
}, r = (t) => {
|
|
64
|
+
t.target === e && t.propertyName === "grid-template-rows" && n();
|
|
65
|
+
};
|
|
66
|
+
e.addEventListener("transitionend", r);
|
|
67
|
+
let i = window.setTimeout(n, 1e3);
|
|
68
|
+
};
|
|
69
|
+
return /* @__PURE__ */ E("div", {
|
|
70
|
+
ref: x,
|
|
71
|
+
className: p("banner-wrap", y && "dismissing"),
|
|
72
|
+
...e(o, s),
|
|
73
|
+
children: /* @__PURE__ */ D("div", {
|
|
74
|
+
className: p("banner", `color-${n}`, r, u),
|
|
75
|
+
...m,
|
|
76
|
+
children: [
|
|
77
|
+
i && /* @__PURE__ */ E("span", {
|
|
78
|
+
className: "banner-icon",
|
|
79
|
+
children: i
|
|
80
|
+
}),
|
|
81
|
+
/* @__PURE__ */ E("div", {
|
|
82
|
+
className: "banner-content",
|
|
83
|
+
children: f
|
|
84
|
+
}),
|
|
85
|
+
a && /* @__PURE__ */ E("div", {
|
|
86
|
+
className: "banner-action",
|
|
87
|
+
children: a
|
|
88
|
+
}),
|
|
89
|
+
c && /* @__PURE__ */ E(g, {
|
|
90
|
+
variant: "link",
|
|
91
|
+
color: "neutral",
|
|
92
|
+
iconOnly: !0,
|
|
93
|
+
size: "sm",
|
|
94
|
+
className: "banner-dismiss",
|
|
95
|
+
onClick: S,
|
|
96
|
+
"aria-label": h.dismiss,
|
|
97
|
+
children: /* @__PURE__ */ E(d, {})
|
|
98
|
+
})
|
|
99
|
+
]
|
|
100
|
+
})
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
//#endregion
|
|
104
|
+
//#region src/components/feedback/MProgressRing/MProgressRing.tsx
|
|
105
|
+
var M = {
|
|
106
|
+
xs: 24,
|
|
107
|
+
sm: 36,
|
|
108
|
+
md: 56,
|
|
109
|
+
lg: 88,
|
|
110
|
+
xl: 128
|
|
111
|
+
}, N = {
|
|
112
|
+
xs: 2,
|
|
113
|
+
sm: 3,
|
|
114
|
+
md: 4,
|
|
115
|
+
lg: 6,
|
|
116
|
+
xl: 8
|
|
117
|
+
};
|
|
118
|
+
function P(e, t, n) {
|
|
119
|
+
return Math.max(t, Math.min(n, e));
|
|
120
|
+
}
|
|
121
|
+
function F(e) {
|
|
122
|
+
return typeof e == "number" ? e : M[e ?? "md"] ?? M.md;
|
|
123
|
+
}
|
|
124
|
+
function I(e, t) {
|
|
125
|
+
return typeof e == "number" ? e : typeof t == "number" ? Math.max(2, Math.round(t / 14)) : N[t ?? "md"] ?? N.md;
|
|
126
|
+
}
|
|
127
|
+
function L({ value: e, size: t = "md", color: i = "primary", thickness: a, showPercent: o = !0, label: s, ariaLabel: c, className: l, style: u, ...d }) {
|
|
128
|
+
let f = r(), m = P(Math.round(e), 0, 100), h = F(t), g = I(a, t), _ = (h - g) / 2, v = 2 * Math.PI * _, y = v * (1 - m / 100), b = {
|
|
129
|
+
width: `${h}px`,
|
|
130
|
+
height: `${h}px`,
|
|
131
|
+
...u
|
|
132
|
+
}, x = typeof t == "string" ? t : "custom", S = c ?? n(f.label, { value: m }), C = s === void 0 ? o : s !== null;
|
|
133
|
+
return /* @__PURE__ */ D("div", {
|
|
134
|
+
className: p("progress-ring", x, i && `color-${i}`, l),
|
|
135
|
+
style: b,
|
|
136
|
+
role: "progressbar",
|
|
137
|
+
"aria-valuenow": m,
|
|
138
|
+
"aria-valuemin": 0,
|
|
139
|
+
"aria-valuemax": 100,
|
|
140
|
+
"aria-label": S,
|
|
141
|
+
...d,
|
|
142
|
+
children: [/* @__PURE__ */ D("svg", {
|
|
143
|
+
className: "progress-ring-svg",
|
|
144
|
+
width: h,
|
|
145
|
+
height: h,
|
|
146
|
+
viewBox: `0 0 ${h} ${h}`,
|
|
147
|
+
"aria-hidden": "true",
|
|
148
|
+
children: [/* @__PURE__ */ E("circle", {
|
|
149
|
+
className: "progress-ring-track",
|
|
150
|
+
cx: h / 2,
|
|
151
|
+
cy: h / 2,
|
|
152
|
+
r: _,
|
|
153
|
+
fill: "none",
|
|
154
|
+
strokeWidth: g
|
|
155
|
+
}), /* @__PURE__ */ E("circle", {
|
|
156
|
+
className: "progress-ring-indicator",
|
|
157
|
+
cx: h / 2,
|
|
158
|
+
cy: h / 2,
|
|
159
|
+
r: _,
|
|
160
|
+
fill: "none",
|
|
161
|
+
strokeWidth: g,
|
|
162
|
+
strokeDasharray: v,
|
|
163
|
+
strokeDashoffset: y,
|
|
164
|
+
strokeLinecap: "round",
|
|
165
|
+
transform: `rotate(-90 ${h / 2} ${h / 2})`
|
|
166
|
+
})]
|
|
167
|
+
}), C ? /* @__PURE__ */ E("span", {
|
|
168
|
+
className: "progress-ring-label",
|
|
169
|
+
"aria-hidden": "true",
|
|
170
|
+
children: s === void 0 ? `${m}%` : s
|
|
171
|
+
}) : null]
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
//#endregion
|
|
175
|
+
//#region src/components/feedback/MToast/MToastContext.ts
|
|
176
|
+
var R = _(null), z = R.Provider;
|
|
177
|
+
function B() {
|
|
178
|
+
let e = y(R);
|
|
179
|
+
if (!e) throw Error("useMToast must be used inside MToastProvider");
|
|
180
|
+
return e;
|
|
181
|
+
}
|
|
182
|
+
//#endregion
|
|
183
|
+
//#region src/components/feedback/MToast/MToastItem.tsx
|
|
184
|
+
function V(e) {
|
|
185
|
+
if (e && e.isConnected && !e.closest(".toast.item") && !e.closest("[inert]")) {
|
|
186
|
+
e.focus();
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
let t = Array.from(document.querySelectorAll("[aria-modal=\"true\"]")), n = t[t.length - 1];
|
|
190
|
+
n && (h(n)[0] ?? n).focus();
|
|
191
|
+
}
|
|
192
|
+
function H({ entry: e, onDismiss: n }) {
|
|
193
|
+
let r = t(), [i, a] = w(!1), o = e.duration ?? 4e3, s = C(null), c = C(null), l = C(null), u = C(o), f = C(0), m = C(!1), h = C(!1), _ = v(() => {
|
|
194
|
+
l.current !== null && (clearTimeout(l.current), l.current = null, u.current = Math.max(0, u.current - (Date.now() - f.current)));
|
|
195
|
+
}, []), y = v(() => {
|
|
196
|
+
o <= 0 || l.current !== null || m.current || h.current || (f.current = Date.now(), l.current = setTimeout(() => {
|
|
197
|
+
l.current = null, a(!0);
|
|
198
|
+
}, u.current));
|
|
199
|
+
}, [o]);
|
|
200
|
+
b(() => (u.current = o, y(), () => {
|
|
201
|
+
l.current !== null && (clearTimeout(l.current), l.current = null);
|
|
202
|
+
}), [o, y]), x(() => {
|
|
203
|
+
let e = s, t = c;
|
|
204
|
+
return () => {
|
|
205
|
+
e.current && e.current.contains(document.activeElement) && V(t.current);
|
|
206
|
+
};
|
|
207
|
+
}, []);
|
|
208
|
+
function S() {
|
|
209
|
+
i && n(e.id);
|
|
210
|
+
}
|
|
211
|
+
function T(e) {
|
|
212
|
+
let t = e.relatedTarget;
|
|
213
|
+
t && !e.currentTarget.contains(t) && (c.current = t), h.current = !0, _();
|
|
214
|
+
}
|
|
215
|
+
function O(e) {
|
|
216
|
+
e.currentTarget.contains(e.relatedTarget) || (h.current = !1, y());
|
|
217
|
+
}
|
|
218
|
+
let A = e.color || "info", j = e.icon === !1 ? null : e.icon === void 0 || e.icon === !0 ? k(A) : e.icon;
|
|
219
|
+
return /* @__PURE__ */ D("div", {
|
|
220
|
+
ref: s,
|
|
221
|
+
className: p("toast item", `color-${A}`, i && "exit"),
|
|
222
|
+
onAnimationEnd: S,
|
|
223
|
+
onMouseEnter: () => {
|
|
224
|
+
m.current = !0, _();
|
|
225
|
+
},
|
|
226
|
+
onMouseLeave: () => {
|
|
227
|
+
m.current = !1, y();
|
|
228
|
+
},
|
|
229
|
+
onFocus: T,
|
|
230
|
+
onBlur: O,
|
|
231
|
+
children: [/* @__PURE__ */ D("div", {
|
|
232
|
+
className: "toast body",
|
|
233
|
+
children: [j && /* @__PURE__ */ E("span", {
|
|
234
|
+
className: "toast icon",
|
|
235
|
+
children: j
|
|
236
|
+
}), /* @__PURE__ */ D("div", {
|
|
237
|
+
className: "toast content",
|
|
238
|
+
children: [e.title && /* @__PURE__ */ E("div", {
|
|
239
|
+
className: "toast title",
|
|
240
|
+
children: e.title
|
|
241
|
+
}), e.message !== void 0 && e.message !== null && e.message !== "" && /* @__PURE__ */ E("div", {
|
|
242
|
+
className: "toast message",
|
|
243
|
+
children: e.message
|
|
244
|
+
})]
|
|
245
|
+
})]
|
|
246
|
+
}), /* @__PURE__ */ E(g, {
|
|
247
|
+
variant: "ghost",
|
|
248
|
+
color: "neutral",
|
|
249
|
+
iconOnly: !0,
|
|
250
|
+
size: "xs",
|
|
251
|
+
className: "toast close",
|
|
252
|
+
onClick: () => a(!0),
|
|
253
|
+
"aria-label": r.close,
|
|
254
|
+
children: /* @__PURE__ */ E(d, {})
|
|
255
|
+
})]
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
//#endregion
|
|
259
|
+
//#region src/components/feedback/MToast/MToastProvider.tsx
|
|
260
|
+
var U = 0, W = 100;
|
|
261
|
+
function G({ entry: e }) {
|
|
262
|
+
return e ? /* @__PURE__ */ D(T, { children: [
|
|
263
|
+
e.title,
|
|
264
|
+
e.title && e.message ? " " : null,
|
|
265
|
+
e.message
|
|
266
|
+
] }) : null;
|
|
267
|
+
}
|
|
268
|
+
function K({ position: e = "top-right", duration: t = 4e3, children: n }) {
|
|
269
|
+
let [r, i] = w([]), a = C(t);
|
|
270
|
+
a.current = t;
|
|
271
|
+
let [o, s] = w({
|
|
272
|
+
polite: null,
|
|
273
|
+
assertive: null
|
|
274
|
+
}), c = C({});
|
|
275
|
+
b(() => {
|
|
276
|
+
let e = c.current;
|
|
277
|
+
return () => {
|
|
278
|
+
Object.values(e).forEach((e) => clearTimeout(e));
|
|
279
|
+
};
|
|
280
|
+
}, []);
|
|
281
|
+
let l = v((e) => {
|
|
282
|
+
let t = e.color === "error" ? "assertive" : "polite";
|
|
283
|
+
clearTimeout(c.current[t]), s((e) => ({
|
|
284
|
+
...e,
|
|
285
|
+
[t]: null
|
|
286
|
+
})), c.current[t] = setTimeout(() => {
|
|
287
|
+
s((n) => ({
|
|
288
|
+
...n,
|
|
289
|
+
[t]: e
|
|
290
|
+
}));
|
|
291
|
+
}, W);
|
|
292
|
+
}, []), u = v((e) => {
|
|
293
|
+
i((t) => t.filter((t) => t.id !== e));
|
|
294
|
+
}, []), d = v((e) => {
|
|
295
|
+
let t = `toast-${++U}`, n = {
|
|
296
|
+
id: t,
|
|
297
|
+
...e,
|
|
298
|
+
duration: e.duration ?? a.current
|
|
299
|
+
};
|
|
300
|
+
return i((e) => [...e, n]), l(n), t;
|
|
301
|
+
}, [l]);
|
|
302
|
+
return /* @__PURE__ */ D(z, {
|
|
303
|
+
value: S(() => ({
|
|
304
|
+
toast: d,
|
|
305
|
+
dismiss: u
|
|
306
|
+
}), [d, u]),
|
|
307
|
+
children: [n, /* @__PURE__ */ E(m, { children: /* @__PURE__ */ D("div", {
|
|
308
|
+
className: p("toast container", e),
|
|
309
|
+
children: [
|
|
310
|
+
/* @__PURE__ */ E("div", {
|
|
311
|
+
className: "toast live",
|
|
312
|
+
role: "status",
|
|
313
|
+
"aria-live": "polite",
|
|
314
|
+
"aria-atomic": "true",
|
|
315
|
+
children: /* @__PURE__ */ E(G, { entry: o.polite })
|
|
316
|
+
}),
|
|
317
|
+
/* @__PURE__ */ E("div", {
|
|
318
|
+
className: "toast live",
|
|
319
|
+
role: "alert",
|
|
320
|
+
"aria-live": "assertive",
|
|
321
|
+
"aria-atomic": "true",
|
|
322
|
+
children: /* @__PURE__ */ E(G, { entry: o.assertive })
|
|
323
|
+
}),
|
|
324
|
+
r.map((e) => /* @__PURE__ */ E(H, {
|
|
325
|
+
entry: e,
|
|
326
|
+
onDismiss: u
|
|
327
|
+
}, e.id))
|
|
328
|
+
]
|
|
329
|
+
}) })]
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
//#endregion
|
|
333
|
+
export { A as a, j as i, B as n, L as r, K as t };
|
|
334
|
+
|
|
335
|
+
//# sourceMappingURL=feedback-CECayytY.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedback-CECayytY.js","names":[],"sources":["../src/components/feedback/statusIcons.tsx","../src/components/feedback/MAlert/MAlert.tsx","../src/components/feedback/MBanner/MBanner.tsx","../src/components/feedback/MProgressRing/MProgressRing.tsx","../src/components/feedback/MToast/MToastContext.ts","../src/components/feedback/MToast/MToastItem.tsx","../src/components/feedback/MToast/MToastProvider.tsx"],"sourcesContent":["import type {ReactNode} from 'react'\nimport {\n MBoltIcon,\n MErrorIcon,\n MInfoIcon,\n MMoonIcon,\n MNeutralIcon,\n MSunIcon,\n MSuccessIcon,\n MWarningIcon,\n} from '../../icons'\n\nconst statusIcons: Record<string, ReactNode> = {\n success: <MSuccessIcon />,\n warning: <MWarningIcon />,\n error: <MErrorIcon />,\n info: <MInfoIcon />,\n primary: <MInfoIcon />,\n neutral: <MNeutralIcon />,\n light: <MSunIcon />,\n dark: <MMoonIcon />,\n news: <MBoltIcon />,\n}\n\nexport function getStatusIcon(color?: string) {\n if (!color) {\n return statusIcons.info\n }\n\n return statusIcons[color] ?? statusIcons.info\n}\n","import type {MAlertProps} from './MAlert.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {getStatusIcon} from '../statusIcons'\nimport './MAlert.css'\n\n// Render inline status messaging with optional heading content.\nexport function MAlert({\n color = 'info',\n icon = true,\n title,\n hidden,\n hiddenAbove,\n className,\n children,\n ...rest\n}: MAlertProps) {\n const iconView = icon === false ? null : icon === true ? getStatusIcon(color) : icon\n\n return (\n <div\n className={cn('alert', `color-${color}`, className)}\n role=\"status\"\n {...getHiddenProps(hidden, hiddenAbove)}\n {...rest}\n >\n {iconView && <span className=\"icon\">{iconView}</span>}\n <div className=\"main\">\n {title && <div className=\"title\">{title}</div>}\n {children && <div className=\"content\">{children}</div>}\n </div>\n </div>\n )\n}\n","import {useState, useRef} from 'react'\nimport type {MBannerProps} from './MBanner.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {MButton} from '../../controls'\nimport {MCloseIcon} from '../../../icons'\nimport './MBanner.css'\nimport {useMCommonTexts} from '../../../i18n/frameworkTexts'\n\n// Render a prominent banner for announcements, CTAs or dismissible messages.\nexport function MBanner({\n color = 'primary',\n variant = 'filled',\n icon,\n action,\n hidden,\n hiddenAbove,\n dismissible = false,\n onDismiss,\n className,\n children,\n ...rest\n}: MBannerProps) {\n const texts = useMCommonTexts()\n const [visible, setVisible] = useState(true)\n const [dismissing, setDismissing] = useState(false)\n const wrapRef = useRef<HTMLDivElement>(null)\n\n if (!visible) return null\n\n const handleDismiss = () => {\n if (dismissing) return\n setDismissing(true)\n const el = wrapRef.current\n if (!el) {\n setVisible(false)\n onDismiss?.()\n return\n }\n // Finish once: when the wrapper's height collapse ends, or after the fallback timeout.\n let done = false\n const finish = () => {\n if (done) return\n done = true\n el.removeEventListener('transitionend', onTransitionEnd)\n window.clearTimeout(fallback)\n setVisible(false)\n setDismissing(false)\n onDismiss?.()\n }\n const onTransitionEnd = (event: TransitionEvent) => {\n if (event.target === el && event.propertyName === 'grid-template-rows') finish()\n }\n el.addEventListener('transitionend', onTransitionEnd)\n const fallback = window.setTimeout(finish, 1000)\n }\n\n return (\n <div\n ref={wrapRef}\n className={cn('banner-wrap', dismissing && 'dismissing')}\n {...getHiddenProps(hidden, hiddenAbove)}\n >\n <div className={cn('banner', `color-${color}`, variant, className)} {...rest}>\n {icon && <span className=\"banner-icon\">{icon}</span>}\n <div className=\"banner-content\">{children}</div>\n {action && <div className=\"banner-action\">{action}</div>}\n {dismissible && (\n <MButton\n variant=\"link\"\n color=\"neutral\"\n iconOnly\n size=\"sm\"\n className=\"banner-dismiss\"\n onClick={handleDismiss}\n aria-label={texts.dismiss}\n >\n <MCloseIcon />\n </MButton>\n )}\n </div>\n </div>\n )\n}\n","import type {CSSProperties} from 'react'\nimport type {MProgressRingProps} from './MProgressRing.types'\nimport {cn} from '../../../utils/cn'\nimport './MProgressRing.css'\nimport {formatMText, useMProgressRingTexts} from '../../../i18n/frameworkTexts'\n\nconst SIZE_PX: Record<string, number> = {xs: 24, sm: 36, md: 56, lg: 88, xl: 128}\nconst DEFAULT_THICKNESS: Record<string, number> = {xs: 2, sm: 3, md: 4, lg: 6, xl: 8}\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, value))\n}\n\nfunction resolveDiameter(size: MProgressRingProps['size']): number {\n if (typeof size === 'number') return size\n return SIZE_PX[size ?? 'md'] ?? SIZE_PX.md\n}\n\nfunction resolveThickness(thickness: number | undefined, size: MProgressRingProps['size']): number {\n if (typeof thickness === 'number') return thickness\n if (typeof size === 'number') return Math.max(2, Math.round(size / 14))\n return DEFAULT_THICKNESS[size ?? 'md'] ?? DEFAULT_THICKNESS.md\n}\n\n/**\n * Determinate ring progress — 0–100 with optional centered percent label.\n * Visually consistent with `MLoader`/`MSpinner`: same MColor palette, same\n * size tokens (xs/sm/md/lg/xl). Use a number for a custom diameter when the\n * design needs an off-token size.\n */\nexport function MProgressRing({\n value,\n size = 'md',\n color = 'primary',\n thickness,\n showPercent = true,\n label,\n ariaLabel,\n className,\n style,\n ...rest\n}: MProgressRingProps) {\n const texts = useMProgressRingTexts()\n const clampedValue = clamp(Math.round(value), 0, 100)\n const diameter = resolveDiameter(size)\n const stroke = resolveThickness(thickness, size)\n const radius = (diameter - stroke) / 2\n const circumference = 2 * Math.PI * radius\n const dashOffset = circumference * (1 - clampedValue / 100)\n\n const inlineStyle: CSSProperties = {\n width: `${diameter}px`,\n height: `${diameter}px`,\n ...style,\n }\n\n const sizeClass = typeof size === 'string' ? size : 'custom'\n const accessibleLabel = ariaLabel ?? formatMText(texts.label, {value: clampedValue})\n const showLabel = label !== undefined ? label !== null : showPercent\n\n return (\n <div\n className={cn('progress-ring', sizeClass, color && `color-${color}`, className)}\n style={inlineStyle}\n role=\"progressbar\"\n aria-valuenow={clampedValue}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={accessibleLabel}\n {...rest}\n >\n <svg\n className=\"progress-ring-svg\"\n width={diameter}\n height={diameter}\n viewBox={`0 0 ${diameter} ${diameter}`}\n aria-hidden=\"true\"\n >\n <circle\n className=\"progress-ring-track\"\n cx={diameter / 2}\n cy={diameter / 2}\n r={radius}\n fill=\"none\"\n strokeWidth={stroke}\n />\n <circle\n className=\"progress-ring-indicator\"\n cx={diameter / 2}\n cy={diameter / 2}\n r={radius}\n fill=\"none\"\n strokeWidth={stroke}\n strokeDasharray={circumference}\n strokeDashoffset={dashOffset}\n strokeLinecap=\"round\"\n transform={`rotate(-90 ${diameter / 2} ${diameter / 2})`}\n />\n </svg>\n {showLabel ? (\n <span className=\"progress-ring-label\" aria-hidden=\"true\">\n {label !== undefined ? label : `${clampedValue}%`}\n </span>\n ) : null}\n </div>\n )\n}\n","import {createContext, useContext} from 'react'\nimport type {MToastContext as MToastContextType} from './MToast.types'\n\nconst ToastCtx = createContext<MToastContextType | null>(null)\n\nexport const MToastContextProvider = ToastCtx.Provider\n\nexport function useMToast(): MToastContextType {\n const ctx = useContext(ToastCtx)\n if (!ctx) throw new Error('useMToast must be used inside MToastProvider')\n return ctx\n}\n","import {useCallback, useEffect, useLayoutEffect, useRef, useState} from 'react'\nimport type {FocusEvent} from 'react'\nimport type {MToastEntry} from './MToast.types'\nimport {cn} from '../../../utils/cn'\nimport {MCloseIcon} from '../../../icons'\nimport {MButton} from '../../controls'\nimport {getStatusIcon} from '../statusIcons'\nimport {useMCommonTexts} from '../../../i18n/frameworkTexts'\nimport {getFocusable} from '../../../utils/useModalLayer'\n\n// Where focus goes when a toast that holds it disappears: back to where it came from,\n// else to the first Tab stop of an open modal, so it never falls to <body>.\nfunction restoreFocus(origin: HTMLElement | null) {\n if (origin && origin.isConnected && !origin.closest('.toast.item') && !origin.closest('[inert]')) {\n origin.focus()\n return\n }\n\n const modals = Array.from(document.querySelectorAll<HTMLElement>('[aria-modal=\"true\"]'))\n const modal = modals[modals.length - 1]\n if (!modal) return\n\n const target = getFocusable(modal)[0] ?? modal\n target.focus()\n}\n\n// Single toast notification with enter/exit animation.\nexport function MToastItem({entry, onDismiss}: {entry: MToastEntry; onDismiss: (id: string) => void}) {\n const texts = useMCommonTexts()\n const [exiting, setExiting] = useState(false)\n const duration = entry.duration ?? 4000\n const itemRef = useRef<HTMLDivElement>(null)\n const focusOriginRef = useRef<HTMLElement | null>(null)\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n const remainingRef = useRef(duration)\n const startedAtRef = useRef(0)\n const hoveredRef = useRef(false)\n const focusedRef = useRef(false)\n\n const pauseTimer = useCallback(() => {\n if (timerRef.current === null) return\n clearTimeout(timerRef.current)\n timerRef.current = null\n remainingRef.current = Math.max(0, remainingRef.current - (Date.now() - startedAtRef.current))\n }, [])\n\n const startTimer = useCallback(() => {\n if (duration <= 0 || timerRef.current !== null || hoveredRef.current || focusedRef.current) return\n startedAtRef.current = Date.now()\n timerRef.current = setTimeout(() => {\n timerRef.current = null\n setExiting(true)\n }, remainingRef.current)\n }, [duration])\n\n useEffect(() => {\n remainingRef.current = duration\n startTimer()\n return () => {\n if (timerRef.current !== null) {\n clearTimeout(timerRef.current)\n timerRef.current = null\n }\n }\n }, [duration, startTimer])\n\n // Runs before the toast's DOM is removed, so focus inside it can still be detected.\n useLayoutEffect(() => {\n const item = itemRef\n const origin = focusOriginRef\n return () => {\n if (item.current && item.current.contains(document.activeElement)) {\n restoreFocus(origin.current)\n }\n }\n }, [])\n\n function handleEnd() {\n if (exiting) onDismiss(entry.id)\n }\n\n // Auto-dismiss pauses while the pointer or focus is on the toast (WCAG 2.2.1).\n function handleFocus(event: FocusEvent<HTMLDivElement>) {\n const from = event.relatedTarget as HTMLElement | null\n if (from && !event.currentTarget.contains(from)) {\n focusOriginRef.current = from\n }\n focusedRef.current = true\n pauseTimer()\n }\n\n function handleBlur(event: FocusEvent<HTMLDivElement>) {\n if (event.currentTarget.contains(event.relatedTarget as Node | null)) return\n focusedRef.current = false\n startTimer()\n }\n\n const color = entry.color || 'info'\n const icon =\n entry.icon === false\n ? null\n : entry.icon === undefined || entry.icon === true\n ? getStatusIcon(color)\n : entry.icon\n\n // Announcements come from the provider's persistent live regions, not from this element.\n return (\n <div\n ref={itemRef}\n className={cn('toast item', `color-${color}`, exiting && 'exit')}\n onAnimationEnd={handleEnd}\n onMouseEnter={() => {\n hoveredRef.current = true\n pauseTimer()\n }}\n onMouseLeave={() => {\n hoveredRef.current = false\n startTimer()\n }}\n onFocus={handleFocus}\n onBlur={handleBlur}\n >\n <div className=\"toast body\">\n {icon && <span className=\"toast icon\">{icon}</span>}\n <div className=\"toast content\">\n {entry.title && <div className=\"toast title\">{entry.title}</div>}\n {entry.message !== undefined && entry.message !== null && entry.message !== '' && (\n <div className=\"toast message\">{entry.message}</div>\n )}\n </div>\n </div>\n <MButton\n variant=\"ghost\"\n color=\"neutral\"\n iconOnly\n size=\"xs\"\n className=\"toast close\"\n onClick={() => setExiting(true)}\n aria-label={texts.close}\n >\n <MCloseIcon />\n </MButton>\n </div>\n )\n}\n","import {useCallback, useEffect, useMemo, useRef, useState} from 'react'\nimport {MPortal} from '../../primitives'\nimport {MToastContextProvider, useMToast} from './MToastContext'\nimport {MToastItem} from './MToastItem'\nimport type {MToastEntry, MToastOptions, MToastProviderProps} from './MToast.types'\nimport {cn} from '../../../utils/cn'\nimport './MToast.css'\n\nlet counter = 0\n\n// Screen readers often skip live regions created together with their text, so both regions\n// exist from mount and the text arrives a moment later.\nconst ANNOUNCE_DELAY = 100\n\ntype MToastPoliteness = 'polite' | 'assertive'\n\nfunction MToastAnnouncement({entry}: {entry: MToastEntry | null}) {\n if (!entry) return null\n return (\n <>\n {entry.title}\n {entry.title && entry.message ? ' ' : null}\n {entry.message}\n </>\n )\n}\n\n// Global toast container with auto-dismiss and stacking.\nexport function MToastProvider({position = 'top-right', duration = 4000, children}: MToastProviderProps) {\n const [toasts, setToasts] = useState<MToastEntry[]>([])\n const defaultDuration = useRef(duration)\n defaultDuration.current = duration\n const [announcements, setAnnouncements] = useState<Record<MToastPoliteness, MToastEntry | null>>({\n polite: null,\n assertive: null,\n })\n const announceTimers = useRef<Partial<Record<MToastPoliteness, ReturnType<typeof setTimeout>>>>({})\n\n useEffect(() => {\n const timers = announceTimers.current\n return () => {\n Object.values(timers).forEach((timer) => clearTimeout(timer))\n }\n }, [])\n\n const announce = useCallback((entry: MToastEntry) => {\n // Errors interrupt (role=\"alert\"); everything else waits its turn (role=\"status\").\n const politeness: MToastPoliteness = entry.color === 'error' ? 'assertive' : 'polite'\n clearTimeout(announceTimers.current[politeness])\n setAnnouncements((prev) => ({...prev, [politeness]: null}))\n announceTimers.current[politeness] = setTimeout(() => {\n setAnnouncements((prev) => ({...prev, [politeness]: entry}))\n }, ANNOUNCE_DELAY)\n }, [])\n\n const dismiss = useCallback((id: string) => {\n setToasts((prev) => prev.filter((t) => t.id !== id))\n }, [])\n\n const toast = useCallback(\n (options: MToastOptions) => {\n const id = `toast-${++counter}`\n const entry: MToastEntry = {\n id,\n ...options,\n duration: options.duration ?? defaultDuration.current,\n }\n setToasts((prev) => [...prev, entry])\n announce(entry)\n return id\n },\n [announce]\n )\n\n const ctx = useMemo(() => ({toast, dismiss}), [toast, dismiss])\n\n return (\n <MToastContextProvider value={ctx}>\n {children}\n <MPortal>\n <div className={cn('toast container', position)}>\n <div className=\"toast live\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">\n <MToastAnnouncement entry={announcements.polite} />\n </div>\n <div className=\"toast live\" role=\"alert\" aria-live=\"assertive\" aria-atomic=\"true\">\n <MToastAnnouncement entry={announcements.assertive} />\n </div>\n {toasts.map((entry) => (\n <MToastItem key={entry.id} entry={entry} onDismiss={dismiss} />\n ))}\n </div>\n </MPortal>\n </MToastContextProvider>\n )\n}\n\nexport {useMToast}\n"],"mappings":";;;;;;;;;AAYA,IAAM,IAAyC;CAC3C,SAAS,kBAAC,GAAD,EAAgB,CAAA;CACzB,SAAS,kBAAC,GAAD,EAAgB,CAAA;CACzB,OAAO,kBAAC,GAAD,EAAc,CAAA;CACrB,MAAM,kBAAC,GAAD,EAAa,CAAA;CACnB,SAAS,kBAAC,GAAD,EAAa,CAAA;CACtB,SAAS,kBAAC,GAAD,EAAgB,CAAA;CACzB,OAAO,kBAAC,GAAD,EAAY,CAAA;CACnB,MAAM,kBAAC,GAAD,EAAa,CAAA;CACnB,MAAM,kBAAC,GAAD,EAAa,CAAA;CACtB;AAED,SAAgB,EAAc,GAAgB;AAK1C,QAJK,IAIE,EAAY,MAAU,EAAY,OAH9B,EAAY;;;;ACnB3B,SAAgB,EAAO,EACnB,WAAQ,QACR,UAAO,IACP,UACA,WACA,gBACA,cACA,aACA,GAAG,KACS;CACZ,IAAM,IAAW,MAAS,KAAQ,OAAO,MAAS,KAAO,EAAc,EAAM,GAAG;AAEhF,QACI,kBAAC,OAAD;EACI,WAAW,EAAG,SAAS,SAAS,KAAS,EAAU;EACnD,MAAK;EACL,GAAI,EAAe,GAAQ,EAAY;EACvC,GAAI;YAJR,CAMK,KAAY,kBAAC,QAAD;GAAM,WAAU;aAAQ;GAAgB,CAAA,EACrD,kBAAC,OAAD;GAAK,WAAU;aAAf,CACK,KAAS,kBAAC,OAAD;IAAK,WAAU;cAAS;IAAY,CAAA,EAC7C,KAAY,kBAAC,OAAD;IAAK,WAAU;IAAW;IAAe,CAAA,CACpD;KACJ;;;;;ACrBd,SAAgB,EAAQ,EACpB,WAAQ,WACR,aAAU,UACV,SACA,WACA,WACA,gBACA,iBAAc,IACd,cACA,cACA,aACA,GAAG,KACU;CACb,IAAM,IAAQ,GAAiB,EACzB,CAAC,GAAS,KAAc,EAAS,GAAK,EACtC,CAAC,GAAY,KAAiB,EAAS,GAAM,EAC7C,IAAU,EAAuB,KAAK;AAE5C,KAAI,CAAC,EAAS,QAAO;CAErB,IAAM,UAAsB;AACxB,MAAI,EAAY;AAChB,IAAc,GAAK;EACnB,IAAM,IAAK,EAAQ;AACnB,MAAI,CAAC,GAAI;AAEL,GADA,EAAW,GAAM,EACjB,KAAa;AACb;;EAGJ,IAAI,IAAO,IACL,UAAe;AACb,SACJ,IAAO,IACP,EAAG,oBAAoB,iBAAiB,EAAgB,EACxD,OAAO,aAAa,EAAS,EAC7B,EAAW,GAAM,EACjB,EAAc,GAAM,EACpB,KAAa;KAEX,KAAmB,MAA2B;AAChD,GAAI,EAAM,WAAW,KAAM,EAAM,iBAAiB,wBAAsB,GAAQ;;AAEpF,IAAG,iBAAiB,iBAAiB,EAAgB;EACrD,IAAM,IAAW,OAAO,WAAW,GAAQ,IAAK;;AAGpD,QACI,kBAAC,OAAD;EACI,KAAK;EACL,WAAW,EAAG,eAAe,KAAc,aAAa;EACxD,GAAI,EAAe,GAAQ,EAAY;YAEvC,kBAAC,OAAD;GAAK,WAAW,EAAG,UAAU,SAAS,KAAS,GAAS,EAAU;GAAE,GAAI;aAAxE;IACK,KAAQ,kBAAC,QAAD;KAAM,WAAU;eAAe;KAAY,CAAA;IACpD,kBAAC,OAAD;KAAK,WAAU;KAAkB;KAAe,CAAA;IAC/C,KAAU,kBAAC,OAAD;KAAK,WAAU;eAAiB;KAAa,CAAA;IACvD,KACG,kBAAC,GAAD;KACI,SAAQ;KACR,OAAM;KACN,UAAA;KACA,MAAK;KACL,WAAU;KACV,SAAS;KACT,cAAY,EAAM;eAElB,kBAAC,GAAD,EAAc,CAAA;KACR,CAAA;IAEZ;;EACJ,CAAA;;;;AC3Ed,IAAM,IAAkC;CAAC,IAAI;CAAI,IAAI;CAAI,IAAI;CAAI,IAAI;CAAI,IAAI;CAAI,EAC3E,IAA4C;CAAC,IAAI;CAAG,IAAI;CAAG,IAAI;CAAG,IAAI;CAAG,IAAI;CAAE;AAErF,SAAS,EAAM,GAAe,GAAa,GAAqB;AAC5D,QAAO,KAAK,IAAI,GAAK,KAAK,IAAI,GAAK,EAAM,CAAC;;AAG9C,SAAS,EAAgB,GAA0C;AAE/D,QADI,OAAO,KAAS,WAAiB,IAC9B,EAAQ,KAAQ,SAAS,EAAQ;;AAG5C,SAAS,EAAiB,GAA+B,GAA0C;AAG/F,QAFI,OAAO,KAAc,WAAiB,IACtC,OAAO,KAAS,WAAiB,KAAK,IAAI,GAAG,KAAK,MAAM,IAAO,GAAG,CAAC,GAChE,EAAkB,KAAQ,SAAS,EAAkB;;AAShE,SAAgB,EAAc,EAC1B,UACA,UAAO,MACP,WAAQ,WACR,cACA,iBAAc,IACd,UACA,cACA,cACA,UACA,GAAG,KACgB;CACnB,IAAM,IAAQ,GAAuB,EAC/B,IAAe,EAAM,KAAK,MAAM,EAAM,EAAE,GAAG,IAAI,EAC/C,IAAW,EAAgB,EAAK,EAChC,IAAS,EAAiB,GAAW,EAAK,EAC1C,KAAU,IAAW,KAAU,GAC/B,IAAgB,IAAI,KAAK,KAAK,GAC9B,IAAa,KAAiB,IAAI,IAAe,MAEjD,IAA6B;EAC/B,OAAO,GAAG,EAAS;EACnB,QAAQ,GAAG,EAAS;EACpB,GAAG;EACN,EAEK,IAAY,OAAO,KAAS,WAAW,IAAO,UAC9C,IAAkB,KAAa,EAAY,EAAM,OAAO,EAAC,OAAO,GAAa,CAAC,EAC9E,IAAY,MAAU,KAAA,IAA6B,IAAjB,MAAU;AAElD,QACI,kBAAC,OAAD;EACI,WAAW,EAAG,iBAAiB,GAAW,KAAS,SAAS,KAAS,EAAU;EAC/E,OAAO;EACP,MAAK;EACL,iBAAe;EACf,iBAAe;EACf,iBAAe;EACf,cAAY;EACZ,GAAI;YARR,CAUI,kBAAC,OAAD;GACI,WAAU;GACV,OAAO;GACP,QAAQ;GACR,SAAS,OAAO,EAAS,GAAG;GAC5B,eAAY;aALhB,CAOI,kBAAC,UAAD;IACI,WAAU;IACV,IAAI,IAAW;IACf,IAAI,IAAW;IACf,GAAG;IACH,MAAK;IACL,aAAa;IACf,CAAA,EACF,kBAAC,UAAD;IACI,WAAU;IACV,IAAI,IAAW;IACf,IAAI,IAAW;IACf,GAAG;IACH,MAAK;IACL,aAAa;IACb,iBAAiB;IACjB,kBAAkB;IAClB,eAAc;IACd,WAAW,cAAc,IAAW,EAAE,GAAG,IAAW,EAAE;IACxD,CAAA,CACA;MACL,IACG,kBAAC,QAAD;GAAM,WAAU;GAAsB,eAAY;aAC7C,MAAU,KAAA,IAAoB,GAAG,EAAa,KAAxB;GACpB,CAAA,GACP,KACF;;;;;ACrGd,IAAM,IAAW,EAAwC,KAAK,EAEjD,IAAwB,EAAS;AAE9C,SAAgB,IAA+B;CAC3C,IAAM,IAAM,EAAW,EAAS;AAChC,KAAI,CAAC,EAAK,OAAU,MAAM,+CAA+C;AACzE,QAAO;;;;ACEX,SAAS,EAAa,GAA4B;AAC9C,KAAI,KAAU,EAAO,eAAe,CAAC,EAAO,QAAQ,cAAc,IAAI,CAAC,EAAO,QAAQ,UAAU,EAAE;AAC9F,IAAO,OAAO;AACd;;CAGJ,IAAM,IAAS,MAAM,KAAK,SAAS,iBAA8B,wBAAsB,CAAC,EAClF,IAAQ,EAAO,EAAO,SAAS;AAChC,OAEU,EAAa,EAAM,CAAC,MAAM,GAClC,OAAO;;AAIlB,SAAgB,EAAW,EAAC,UAAO,gBAAmE;CAClG,IAAM,IAAQ,GAAiB,EACzB,CAAC,GAAS,KAAc,EAAS,GAAM,EACvC,IAAW,EAAM,YAAY,KAC7B,IAAU,EAAuB,KAAK,EACtC,IAAiB,EAA2B,KAAK,EACjD,IAAW,EAA6C,KAAK,EAC7D,IAAe,EAAO,EAAS,EAC/B,IAAe,EAAO,EAAE,EACxB,IAAa,EAAO,GAAM,EAC1B,IAAa,EAAO,GAAM,EAE1B,IAAa,QAAkB;AAC7B,IAAS,YAAY,SACzB,aAAa,EAAS,QAAQ,EAC9B,EAAS,UAAU,MACnB,EAAa,UAAU,KAAK,IAAI,GAAG,EAAa,WAAW,KAAK,KAAK,GAAG,EAAa,SAAS;IAC/F,EAAE,CAAC,EAEA,IAAa,QAAkB;AAC7B,OAAY,KAAK,EAAS,YAAY,QAAQ,EAAW,WAAW,EAAW,YACnF,EAAa,UAAU,KAAK,KAAK,EACjC,EAAS,UAAU,iBAAiB;AAEhC,GADA,EAAS,UAAU,MACnB,EAAW,GAAK;KACjB,EAAa,QAAQ;IACzB,CAAC,EAAS,CAAC;AAcd,CAZA,SACI,EAAa,UAAU,GACvB,GAAY,QACC;AACT,EAAI,EAAS,YAAY,SACrB,aAAa,EAAS,QAAQ,EAC9B,EAAS,UAAU;KAG5B,CAAC,GAAU,EAAW,CAAC,EAG1B,QAAsB;EAClB,IAAM,IAAO,GACP,IAAS;AACf,eAAa;AACT,GAAI,EAAK,WAAW,EAAK,QAAQ,SAAS,SAAS,cAAc,IAC7D,EAAa,EAAO,QAAQ;;IAGrC,EAAE,CAAC;CAEN,SAAS,IAAY;AACjB,EAAI,KAAS,EAAU,EAAM,GAAG;;CAIpC,SAAS,EAAY,GAAmC;EACpD,IAAM,IAAO,EAAM;AAKnB,EAJI,KAAQ,CAAC,EAAM,cAAc,SAAS,EAAK,KAC3C,EAAe,UAAU,IAE7B,EAAW,UAAU,IACrB,GAAY;;CAGhB,SAAS,EAAW,GAAmC;AAC/C,IAAM,cAAc,SAAS,EAAM,cAA6B,KACpE,EAAW,UAAU,IACrB,GAAY;;CAGhB,IAAM,IAAQ,EAAM,SAAS,QACvB,IACF,EAAM,SAAS,KACT,OACA,EAAM,SAAS,KAAA,KAAa,EAAM,SAAS,KACzC,EAAc,EAAM,GACpB,EAAM;AAGlB,QACI,kBAAC,OAAD;EACI,KAAK;EACL,WAAW,EAAG,cAAc,SAAS,KAAS,KAAW,OAAO;EAChE,gBAAgB;EAChB,oBAAoB;AAEhB,GADA,EAAW,UAAU,IACrB,GAAY;;EAEhB,oBAAoB;AAEhB,GADA,EAAW,UAAU,IACrB,GAAY;;EAEhB,SAAS;EACT,QAAQ;YAbZ,CAeI,kBAAC,OAAD;GAAK,WAAU;aAAf,CACK,KAAQ,kBAAC,QAAD;IAAM,WAAU;cAAc;IAAY,CAAA,EACnD,kBAAC,OAAD;IAAK,WAAU;cAAf,CACK,EAAM,SAAS,kBAAC,OAAD;KAAK,WAAU;eAAe,EAAM;KAAY,CAAA,EAC/D,EAAM,YAAY,KAAA,KAAa,EAAM,YAAY,QAAQ,EAAM,YAAY,MACxE,kBAAC,OAAD;KAAK,WAAU;eAAiB,EAAM;KAAc,CAAA,CAEtD;MACJ;MACN,kBAAC,GAAD;GACI,SAAQ;GACR,OAAM;GACN,UAAA;GACA,MAAK;GACL,WAAU;GACV,eAAe,EAAW,GAAK;GAC/B,cAAY,EAAM;aAElB,kBAAC,GAAD,EAAc,CAAA;GACR,CAAA,CACR;;;;;ACtId,IAAI,IAAU,GAIR,IAAiB;AAIvB,SAAS,EAAmB,EAAC,YAAqC;AAE9D,QADK,IAED,kBAAA,GAAA,EAAA,UAAA;EACK,EAAM;EACN,EAAM,SAAS,EAAM,UAAU,MAAM;EACrC,EAAM;EACR,EAAA,CAAA,GANY;;AAWvB,SAAgB,EAAe,EAAC,cAAW,aAAa,cAAW,KAAM,eAAgC;CACrG,IAAM,CAAC,GAAQ,KAAa,EAAwB,EAAE,CAAC,EACjD,IAAkB,EAAO,EAAS;AACxC,GAAgB,UAAU;CAC1B,IAAM,CAAC,GAAe,KAAoB,EAAuD;EAC7F,QAAQ;EACR,WAAW;EACd,CAAC,EACI,IAAiB,EAAyE,EAAE,CAAC;AAEnG,SAAgB;EACZ,IAAM,IAAS,EAAe;AAC9B,eAAa;AACT,UAAO,OAAO,EAAO,CAAC,SAAS,MAAU,aAAa,EAAM,CAAC;;IAElE,EAAE,CAAC;CAEN,IAAM,IAAW,GAAa,MAAuB;EAEjD,IAAM,IAA+B,EAAM,UAAU,UAAU,cAAc;AAG7E,EAFA,aAAa,EAAe,QAAQ,GAAY,EAChD,GAAkB,OAAU;GAAC,GAAG;IAAO,IAAa;GAAK,EAAE,EAC3D,EAAe,QAAQ,KAAc,iBAAiB;AAClD,MAAkB,OAAU;IAAC,GAAG;KAAO,IAAa;IAAM,EAAE;KAC7D,EAAe;IACnB,EAAE,CAAC,EAEA,IAAU,GAAa,MAAe;AACxC,KAAW,MAAS,EAAK,QAAQ,MAAM,EAAE,OAAO,EAAG,CAAC;IACrD,EAAE,CAAC,EAEA,IAAQ,GACT,MAA2B;EACxB,IAAM,IAAK,SAAS,EAAE,KAChB,IAAqB;GACvB;GACA,GAAG;GACH,UAAU,EAAQ,YAAY,EAAgB;GACjD;AAGD,SAFA,GAAW,MAAS,CAAC,GAAG,GAAM,EAAM,CAAC,EACrC,EAAS,EAAM,EACR;IAEX,CAAC,EAAS,CACb;AAID,QACI,kBAAC,GAAD;EAAuB,OAHf,SAAe;GAAC;GAAO;GAAQ,GAAG,CAAC,GAAO,EAAQ,CAAC;YAG3D,CACK,GACD,kBAAC,GAAD,EAAA,UACI,kBAAC,OAAD;GAAK,WAAW,EAAG,mBAAmB,EAAS;aAA/C;IACI,kBAAC,OAAD;KAAK,WAAU;KAAa,MAAK;KAAS,aAAU;KAAS,eAAY;eACrE,kBAAC,GAAD,EAAoB,OAAO,EAAc,QAAU,CAAA;KACjD,CAAA;IACN,kBAAC,OAAD;KAAK,WAAU;KAAa,MAAK;KAAQ,aAAU;KAAY,eAAY;eACvE,kBAAC,GAAD,EAAoB,OAAO,EAAc,WAAa,CAAA;KACpD,CAAA;IACL,EAAO,KAAK,MACT,kBAAC,GAAD;KAAkC;KAAO,WAAW;KAAW,EAA9C,EAAM,GAAwC,CACjE;IACA;MACA,CAAA,CACU"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require(`./theme-ByPZH0dh.cjs`),t=require(`./frameworkTexts-CaqdiKHW.cjs`),n=require(`./icons-Bp8bB9TP.cjs`),r=require(`./cn-DYFxgzi2.cjs`),i=require(`./useModalLayer-Cyt93Prs.cjs`),a=require(`./MButton-BxEky3xQ.cjs`);require(`./core-w629c4ND.cjs`);let o=require(`react`),s=require(`react/jsx-runtime`);var c={success:(0,s.jsx)(n.Ci,{}),warning:(0,s.jsx)(n.Ei,{}),error:(0,s.jsx)(n.wi,{}),info:(0,s.jsx)(n.Ti,{}),primary:(0,s.jsx)(n.Ti,{}),neutral:(0,s.jsx)(n.Si,{}),light:(0,s.jsx)(n.Ln,{}),dark:(0,s.jsx)(n.In,{}),news:(0,s.jsx)(n.Pn,{})};function l(e){return e?c[e]??c.info:c.info}function u({color:t=`info`,icon:n=!0,title:i,hidden:a,hiddenAbove:o,className:c,children:u,...d}){let f=n===!1?null:n===!0?l(t):n;return(0,s.jsxs)(`div`,{className:r.t(`alert`,`color-${t}`,c),role:`status`,...e.r(a,o),...d,children:[f&&(0,s.jsx)(`span`,{className:`icon`,children:f}),(0,s.jsxs)(`div`,{className:`main`,children:[i&&(0,s.jsx)(`div`,{className:`title`,children:i}),u&&(0,s.jsx)(`div`,{className:`content`,children:u})]})]})}function d({color:i=`primary`,variant:c=`filled`,icon:l,action:u,hidden:d,hiddenAbove:f,dismissible:p=!1,onDismiss:m,className:h,children:g,..._}){let v=t.s(),[y,b]=(0,o.useState)(!0),[x,S]=(0,o.useState)(!1),C=(0,o.useRef)(null);if(!y)return null;let w=()=>{if(x)return;S(!0);let e=C.current;if(!e){b(!1),m?.();return}let t=!1,n=()=>{t||(t=!0,e.removeEventListener(`transitionend`,r),window.clearTimeout(i),b(!1),S(!1),m?.())},r=t=>{t.target===e&&t.propertyName===`grid-template-rows`&&n()};e.addEventListener(`transitionend`,r);let i=window.setTimeout(n,1e3)};return(0,s.jsx)(`div`,{ref:C,className:r.t(`banner-wrap`,x&&`dismissing`),...e.r(d,f),children:(0,s.jsxs)(`div`,{className:r.t(`banner`,`color-${i}`,c,h),..._,children:[l&&(0,s.jsx)(`span`,{className:`banner-icon`,children:l}),(0,s.jsx)(`div`,{className:`banner-content`,children:g}),u&&(0,s.jsx)(`div`,{className:`banner-action`,children:u}),p&&(0,s.jsx)(a.t,{variant:`link`,color:`neutral`,iconOnly:!0,size:`sm`,className:`banner-dismiss`,onClick:w,"aria-label":v.dismiss,children:(0,s.jsx)(n.Xi,{})})]})})}var f={xs:24,sm:36,md:56,lg:88,xl:128},p={xs:2,sm:3,md:4,lg:6,xl:8};function m(e,t,n){return Math.max(t,Math.min(n,e))}function h(e){return typeof e==`number`?e:f[e??`md`]??f.md}function g(e,t){return typeof e==`number`?e:typeof t==`number`?Math.max(2,Math.round(t/14)):p[t??`md`]??p.md}function _({value:e,size:n=`md`,color:i=`primary`,thickness:a,showPercent:o=!0,label:c,ariaLabel:l,className:u,style:d,...f}){let p=t.y(),_=m(Math.round(e),0,100),v=h(n),y=g(a,n),b=(v-y)/2,x=2*Math.PI*b,S=x*(1-_/100),C={width:`${v}px`,height:`${v}px`,...d},w=typeof n==`string`?n:`custom`,T=l??t.t(p.label,{value:_}),E=c===void 0?o:c!==null;return(0,s.jsxs)(`div`,{className:r.t(`progress-ring`,w,i&&`color-${i}`,u),style:C,role:`progressbar`,"aria-valuenow":_,"aria-valuemin":0,"aria-valuemax":100,"aria-label":T,...f,children:[(0,s.jsxs)(`svg`,{className:`progress-ring-svg`,width:v,height:v,viewBox:`0 0 ${v} ${v}`,"aria-hidden":`true`,children:[(0,s.jsx)(`circle`,{className:`progress-ring-track`,cx:v/2,cy:v/2,r:b,fill:`none`,strokeWidth:y}),(0,s.jsx)(`circle`,{className:`progress-ring-indicator`,cx:v/2,cy:v/2,r:b,fill:`none`,strokeWidth:y,strokeDasharray:x,strokeDashoffset:S,strokeLinecap:`round`,transform:`rotate(-90 ${v/2} ${v/2})`})]}),E?(0,s.jsx)(`span`,{className:`progress-ring-label`,"aria-hidden":`true`,children:c===void 0?`${_}%`:c}):null]})}var v=(0,o.createContext)(null),y=v.Provider;function b(){let e=(0,o.useContext)(v);if(!e)throw Error(`useMToast must be used inside MToastProvider`);return e}function x(e){if(e&&e.isConnected&&!e.closest(`.toast.item`)&&!e.closest(`[inert]`)){e.focus();return}let t=Array.from(document.querySelectorAll(`[aria-modal="true"]`)),n=t[t.length-1];n&&(i.t(n)[0]??n).focus()}function S({entry:e,onDismiss:i}){let c=t.s(),[u,d]=(0,o.useState)(!1),f=e.duration??4e3,p=(0,o.useRef)(null),m=(0,o.useRef)(null),h=(0,o.useRef)(null),g=(0,o.useRef)(f),_=(0,o.useRef)(0),v=(0,o.useRef)(!1),y=(0,o.useRef)(!1),b=(0,o.useCallback)(()=>{h.current!==null&&(clearTimeout(h.current),h.current=null,g.current=Math.max(0,g.current-(Date.now()-_.current)))},[]),S=(0,o.useCallback)(()=>{f<=0||h.current!==null||v.current||y.current||(_.current=Date.now(),h.current=setTimeout(()=>{h.current=null,d(!0)},g.current))},[f]);(0,o.useEffect)(()=>(g.current=f,S(),()=>{h.current!==null&&(clearTimeout(h.current),h.current=null)}),[f,S]),(0,o.useLayoutEffect)(()=>{let e=p,t=m;return()=>{e.current&&e.current.contains(document.activeElement)&&x(t.current)}},[]);function C(){u&&i(e.id)}function w(e){let t=e.relatedTarget;t&&!e.currentTarget.contains(t)&&(m.current=t),y.current=!0,b()}function T(e){e.currentTarget.contains(e.relatedTarget)||(y.current=!1,S())}let E=e.color||`info`,D=e.icon===!1?null:e.icon===void 0||e.icon===!0?l(E):e.icon;return(0,s.jsxs)(`div`,{ref:p,className:r.t(`toast item`,`color-${E}`,u&&`exit`),onAnimationEnd:C,onMouseEnter:()=>{v.current=!0,b()},onMouseLeave:()=>{v.current=!1,S()},onFocus:w,onBlur:T,children:[(0,s.jsxs)(`div`,{className:`toast body`,children:[D&&(0,s.jsx)(`span`,{className:`toast icon`,children:D}),(0,s.jsxs)(`div`,{className:`toast content`,children:[e.title&&(0,s.jsx)(`div`,{className:`toast title`,children:e.title}),e.message!==void 0&&e.message!==null&&e.message!==``&&(0,s.jsx)(`div`,{className:`toast message`,children:e.message})]})]}),(0,s.jsx)(a.t,{variant:`ghost`,color:`neutral`,iconOnly:!0,size:`xs`,className:`toast close`,onClick:()=>d(!0),"aria-label":c.close,children:(0,s.jsx)(n.Xi,{})})]})}var C=0,w=100;function T({entry:e}){return e?(0,s.jsxs)(s.Fragment,{children:[e.title,e.title&&e.message?` `:null,e.message]}):null}function E({position:e=`top-right`,duration:t=4e3,children:n}){let[a,c]=(0,o.useState)([]),l=(0,o.useRef)(t);l.current=t;let[u,d]=(0,o.useState)({polite:null,assertive:null}),f=(0,o.useRef)({});(0,o.useEffect)(()=>{let e=f.current;return()=>{Object.values(e).forEach(e=>clearTimeout(e))}},[]);let p=(0,o.useCallback)(e=>{let t=e.color===`error`?`assertive`:`polite`;clearTimeout(f.current[t]),d(e=>({...e,[t]:null})),f.current[t]=setTimeout(()=>{d(n=>({...n,[t]:e}))},w)},[]),m=(0,o.useCallback)(e=>{c(t=>t.filter(t=>t.id!==e))},[]),h=(0,o.useCallback)(e=>{let t=`toast-${++C}`,n={id:t,...e,duration:e.duration??l.current};return c(e=>[...e,n]),p(n),t},[p]);return(0,s.jsxs)(y,{value:(0,o.useMemo)(()=>({toast:h,dismiss:m}),[h,m]),children:[n,(0,s.jsx)(i.c,{children:(0,s.jsxs)(`div`,{className:r.t(`toast container`,e),children:[(0,s.jsx)(`div`,{className:`toast live`,role:`status`,"aria-live":`polite`,"aria-atomic":`true`,children:(0,s.jsx)(T,{entry:u.polite})}),(0,s.jsx)(`div`,{className:`toast live`,role:`alert`,"aria-live":`assertive`,"aria-atomic":`true`,children:(0,s.jsx)(T,{entry:u.assertive})}),a.map(e=>(0,s.jsx)(S,{entry:e,onDismiss:m},e.id))]})})]})}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return E}});
|
|
2
|
+
//# sourceMappingURL=feedback-paV8Ls-h.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedback-paV8Ls-h.cjs","names":[],"sources":["../src/components/feedback/statusIcons.tsx","../src/components/feedback/MAlert/MAlert.tsx","../src/components/feedback/MBanner/MBanner.tsx","../src/components/feedback/MProgressRing/MProgressRing.tsx","../src/components/feedback/MToast/MToastContext.ts","../src/components/feedback/MToast/MToastItem.tsx","../src/components/feedback/MToast/MToastProvider.tsx"],"sourcesContent":["import type {ReactNode} from 'react'\nimport {\n MBoltIcon,\n MErrorIcon,\n MInfoIcon,\n MMoonIcon,\n MNeutralIcon,\n MSunIcon,\n MSuccessIcon,\n MWarningIcon,\n} from '../../icons'\n\nconst statusIcons: Record<string, ReactNode> = {\n success: <MSuccessIcon />,\n warning: <MWarningIcon />,\n error: <MErrorIcon />,\n info: <MInfoIcon />,\n primary: <MInfoIcon />,\n neutral: <MNeutralIcon />,\n light: <MSunIcon />,\n dark: <MMoonIcon />,\n news: <MBoltIcon />,\n}\n\nexport function getStatusIcon(color?: string) {\n if (!color) {\n return statusIcons.info\n }\n\n return statusIcons[color] ?? statusIcons.info\n}\n","import type {MAlertProps} from './MAlert.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {getStatusIcon} from '../statusIcons'\nimport './MAlert.css'\n\n// Render inline status messaging with optional heading content.\nexport function MAlert({\n color = 'info',\n icon = true,\n title,\n hidden,\n hiddenAbove,\n className,\n children,\n ...rest\n}: MAlertProps) {\n const iconView = icon === false ? null : icon === true ? getStatusIcon(color) : icon\n\n return (\n <div\n className={cn('alert', `color-${color}`, className)}\n role=\"status\"\n {...getHiddenProps(hidden, hiddenAbove)}\n {...rest}\n >\n {iconView && <span className=\"icon\">{iconView}</span>}\n <div className=\"main\">\n {title && <div className=\"title\">{title}</div>}\n {children && <div className=\"content\">{children}</div>}\n </div>\n </div>\n )\n}\n","import {useState, useRef} from 'react'\nimport type {MBannerProps} from './MBanner.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {MButton} from '../../controls'\nimport {MCloseIcon} from '../../../icons'\nimport './MBanner.css'\nimport {useMCommonTexts} from '../../../i18n/frameworkTexts'\n\n// Render a prominent banner for announcements, CTAs or dismissible messages.\nexport function MBanner({\n color = 'primary',\n variant = 'filled',\n icon,\n action,\n hidden,\n hiddenAbove,\n dismissible = false,\n onDismiss,\n className,\n children,\n ...rest\n}: MBannerProps) {\n const texts = useMCommonTexts()\n const [visible, setVisible] = useState(true)\n const [dismissing, setDismissing] = useState(false)\n const wrapRef = useRef<HTMLDivElement>(null)\n\n if (!visible) return null\n\n const handleDismiss = () => {\n if (dismissing) return\n setDismissing(true)\n const el = wrapRef.current\n if (!el) {\n setVisible(false)\n onDismiss?.()\n return\n }\n // Finish once: when the wrapper's height collapse ends, or after the fallback timeout.\n let done = false\n const finish = () => {\n if (done) return\n done = true\n el.removeEventListener('transitionend', onTransitionEnd)\n window.clearTimeout(fallback)\n setVisible(false)\n setDismissing(false)\n onDismiss?.()\n }\n const onTransitionEnd = (event: TransitionEvent) => {\n if (event.target === el && event.propertyName === 'grid-template-rows') finish()\n }\n el.addEventListener('transitionend', onTransitionEnd)\n const fallback = window.setTimeout(finish, 1000)\n }\n\n return (\n <div\n ref={wrapRef}\n className={cn('banner-wrap', dismissing && 'dismissing')}\n {...getHiddenProps(hidden, hiddenAbove)}\n >\n <div className={cn('banner', `color-${color}`, variant, className)} {...rest}>\n {icon && <span className=\"banner-icon\">{icon}</span>}\n <div className=\"banner-content\">{children}</div>\n {action && <div className=\"banner-action\">{action}</div>}\n {dismissible && (\n <MButton\n variant=\"link\"\n color=\"neutral\"\n iconOnly\n size=\"sm\"\n className=\"banner-dismiss\"\n onClick={handleDismiss}\n aria-label={texts.dismiss}\n >\n <MCloseIcon />\n </MButton>\n )}\n </div>\n </div>\n )\n}\n","import type {CSSProperties} from 'react'\nimport type {MProgressRingProps} from './MProgressRing.types'\nimport {cn} from '../../../utils/cn'\nimport './MProgressRing.css'\nimport {formatMText, useMProgressRingTexts} from '../../../i18n/frameworkTexts'\n\nconst SIZE_PX: Record<string, number> = {xs: 24, sm: 36, md: 56, lg: 88, xl: 128}\nconst DEFAULT_THICKNESS: Record<string, number> = {xs: 2, sm: 3, md: 4, lg: 6, xl: 8}\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, value))\n}\n\nfunction resolveDiameter(size: MProgressRingProps['size']): number {\n if (typeof size === 'number') return size\n return SIZE_PX[size ?? 'md'] ?? SIZE_PX.md\n}\n\nfunction resolveThickness(thickness: number | undefined, size: MProgressRingProps['size']): number {\n if (typeof thickness === 'number') return thickness\n if (typeof size === 'number') return Math.max(2, Math.round(size / 14))\n return DEFAULT_THICKNESS[size ?? 'md'] ?? DEFAULT_THICKNESS.md\n}\n\n/**\n * Determinate ring progress — 0–100 with optional centered percent label.\n * Visually consistent with `MLoader`/`MSpinner`: same MColor palette, same\n * size tokens (xs/sm/md/lg/xl). Use a number for a custom diameter when the\n * design needs an off-token size.\n */\nexport function MProgressRing({\n value,\n size = 'md',\n color = 'primary',\n thickness,\n showPercent = true,\n label,\n ariaLabel,\n className,\n style,\n ...rest\n}: MProgressRingProps) {\n const texts = useMProgressRingTexts()\n const clampedValue = clamp(Math.round(value), 0, 100)\n const diameter = resolveDiameter(size)\n const stroke = resolveThickness(thickness, size)\n const radius = (diameter - stroke) / 2\n const circumference = 2 * Math.PI * radius\n const dashOffset = circumference * (1 - clampedValue / 100)\n\n const inlineStyle: CSSProperties = {\n width: `${diameter}px`,\n height: `${diameter}px`,\n ...style,\n }\n\n const sizeClass = typeof size === 'string' ? size : 'custom'\n const accessibleLabel = ariaLabel ?? formatMText(texts.label, {value: clampedValue})\n const showLabel = label !== undefined ? label !== null : showPercent\n\n return (\n <div\n className={cn('progress-ring', sizeClass, color && `color-${color}`, className)}\n style={inlineStyle}\n role=\"progressbar\"\n aria-valuenow={clampedValue}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={accessibleLabel}\n {...rest}\n >\n <svg\n className=\"progress-ring-svg\"\n width={diameter}\n height={diameter}\n viewBox={`0 0 ${diameter} ${diameter}`}\n aria-hidden=\"true\"\n >\n <circle\n className=\"progress-ring-track\"\n cx={diameter / 2}\n cy={diameter / 2}\n r={radius}\n fill=\"none\"\n strokeWidth={stroke}\n />\n <circle\n className=\"progress-ring-indicator\"\n cx={diameter / 2}\n cy={diameter / 2}\n r={radius}\n fill=\"none\"\n strokeWidth={stroke}\n strokeDasharray={circumference}\n strokeDashoffset={dashOffset}\n strokeLinecap=\"round\"\n transform={`rotate(-90 ${diameter / 2} ${diameter / 2})`}\n />\n </svg>\n {showLabel ? (\n <span className=\"progress-ring-label\" aria-hidden=\"true\">\n {label !== undefined ? label : `${clampedValue}%`}\n </span>\n ) : null}\n </div>\n )\n}\n","import {createContext, useContext} from 'react'\nimport type {MToastContext as MToastContextType} from './MToast.types'\n\nconst ToastCtx = createContext<MToastContextType | null>(null)\n\nexport const MToastContextProvider = ToastCtx.Provider\n\nexport function useMToast(): MToastContextType {\n const ctx = useContext(ToastCtx)\n if (!ctx) throw new Error('useMToast must be used inside MToastProvider')\n return ctx\n}\n","import {useCallback, useEffect, useLayoutEffect, useRef, useState} from 'react'\nimport type {FocusEvent} from 'react'\nimport type {MToastEntry} from './MToast.types'\nimport {cn} from '../../../utils/cn'\nimport {MCloseIcon} from '../../../icons'\nimport {MButton} from '../../controls'\nimport {getStatusIcon} from '../statusIcons'\nimport {useMCommonTexts} from '../../../i18n/frameworkTexts'\nimport {getFocusable} from '../../../utils/useModalLayer'\n\n// Where focus goes when a toast that holds it disappears: back to where it came from,\n// else to the first Tab stop of an open modal, so it never falls to <body>.\nfunction restoreFocus(origin: HTMLElement | null) {\n if (origin && origin.isConnected && !origin.closest('.toast.item') && !origin.closest('[inert]')) {\n origin.focus()\n return\n }\n\n const modals = Array.from(document.querySelectorAll<HTMLElement>('[aria-modal=\"true\"]'))\n const modal = modals[modals.length - 1]\n if (!modal) return\n\n const target = getFocusable(modal)[0] ?? modal\n target.focus()\n}\n\n// Single toast notification with enter/exit animation.\nexport function MToastItem({entry, onDismiss}: {entry: MToastEntry; onDismiss: (id: string) => void}) {\n const texts = useMCommonTexts()\n const [exiting, setExiting] = useState(false)\n const duration = entry.duration ?? 4000\n const itemRef = useRef<HTMLDivElement>(null)\n const focusOriginRef = useRef<HTMLElement | null>(null)\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n const remainingRef = useRef(duration)\n const startedAtRef = useRef(0)\n const hoveredRef = useRef(false)\n const focusedRef = useRef(false)\n\n const pauseTimer = useCallback(() => {\n if (timerRef.current === null) return\n clearTimeout(timerRef.current)\n timerRef.current = null\n remainingRef.current = Math.max(0, remainingRef.current - (Date.now() - startedAtRef.current))\n }, [])\n\n const startTimer = useCallback(() => {\n if (duration <= 0 || timerRef.current !== null || hoveredRef.current || focusedRef.current) return\n startedAtRef.current = Date.now()\n timerRef.current = setTimeout(() => {\n timerRef.current = null\n setExiting(true)\n }, remainingRef.current)\n }, [duration])\n\n useEffect(() => {\n remainingRef.current = duration\n startTimer()\n return () => {\n if (timerRef.current !== null) {\n clearTimeout(timerRef.current)\n timerRef.current = null\n }\n }\n }, [duration, startTimer])\n\n // Runs before the toast's DOM is removed, so focus inside it can still be detected.\n useLayoutEffect(() => {\n const item = itemRef\n const origin = focusOriginRef\n return () => {\n if (item.current && item.current.contains(document.activeElement)) {\n restoreFocus(origin.current)\n }\n }\n }, [])\n\n function handleEnd() {\n if (exiting) onDismiss(entry.id)\n }\n\n // Auto-dismiss pauses while the pointer or focus is on the toast (WCAG 2.2.1).\n function handleFocus(event: FocusEvent<HTMLDivElement>) {\n const from = event.relatedTarget as HTMLElement | null\n if (from && !event.currentTarget.contains(from)) {\n focusOriginRef.current = from\n }\n focusedRef.current = true\n pauseTimer()\n }\n\n function handleBlur(event: FocusEvent<HTMLDivElement>) {\n if (event.currentTarget.contains(event.relatedTarget as Node | null)) return\n focusedRef.current = false\n startTimer()\n }\n\n const color = entry.color || 'info'\n const icon =\n entry.icon === false\n ? null\n : entry.icon === undefined || entry.icon === true\n ? getStatusIcon(color)\n : entry.icon\n\n // Announcements come from the provider's persistent live regions, not from this element.\n return (\n <div\n ref={itemRef}\n className={cn('toast item', `color-${color}`, exiting && 'exit')}\n onAnimationEnd={handleEnd}\n onMouseEnter={() => {\n hoveredRef.current = true\n pauseTimer()\n }}\n onMouseLeave={() => {\n hoveredRef.current = false\n startTimer()\n }}\n onFocus={handleFocus}\n onBlur={handleBlur}\n >\n <div className=\"toast body\">\n {icon && <span className=\"toast icon\">{icon}</span>}\n <div className=\"toast content\">\n {entry.title && <div className=\"toast title\">{entry.title}</div>}\n {entry.message !== undefined && entry.message !== null && entry.message !== '' && (\n <div className=\"toast message\">{entry.message}</div>\n )}\n </div>\n </div>\n <MButton\n variant=\"ghost\"\n color=\"neutral\"\n iconOnly\n size=\"xs\"\n className=\"toast close\"\n onClick={() => setExiting(true)}\n aria-label={texts.close}\n >\n <MCloseIcon />\n </MButton>\n </div>\n )\n}\n","import {useCallback, useEffect, useMemo, useRef, useState} from 'react'\nimport {MPortal} from '../../primitives'\nimport {MToastContextProvider, useMToast} from './MToastContext'\nimport {MToastItem} from './MToastItem'\nimport type {MToastEntry, MToastOptions, MToastProviderProps} from './MToast.types'\nimport {cn} from '../../../utils/cn'\nimport './MToast.css'\n\nlet counter = 0\n\n// Screen readers often skip live regions created together with their text, so both regions\n// exist from mount and the text arrives a moment later.\nconst ANNOUNCE_DELAY = 100\n\ntype MToastPoliteness = 'polite' | 'assertive'\n\nfunction MToastAnnouncement({entry}: {entry: MToastEntry | null}) {\n if (!entry) return null\n return (\n <>\n {entry.title}\n {entry.title && entry.message ? ' ' : null}\n {entry.message}\n </>\n )\n}\n\n// Global toast container with auto-dismiss and stacking.\nexport function MToastProvider({position = 'top-right', duration = 4000, children}: MToastProviderProps) {\n const [toasts, setToasts] = useState<MToastEntry[]>([])\n const defaultDuration = useRef(duration)\n defaultDuration.current = duration\n const [announcements, setAnnouncements] = useState<Record<MToastPoliteness, MToastEntry | null>>({\n polite: null,\n assertive: null,\n })\n const announceTimers = useRef<Partial<Record<MToastPoliteness, ReturnType<typeof setTimeout>>>>({})\n\n useEffect(() => {\n const timers = announceTimers.current\n return () => {\n Object.values(timers).forEach((timer) => clearTimeout(timer))\n }\n }, [])\n\n const announce = useCallback((entry: MToastEntry) => {\n // Errors interrupt (role=\"alert\"); everything else waits its turn (role=\"status\").\n const politeness: MToastPoliteness = entry.color === 'error' ? 'assertive' : 'polite'\n clearTimeout(announceTimers.current[politeness])\n setAnnouncements((prev) => ({...prev, [politeness]: null}))\n announceTimers.current[politeness] = setTimeout(() => {\n setAnnouncements((prev) => ({...prev, [politeness]: entry}))\n }, ANNOUNCE_DELAY)\n }, [])\n\n const dismiss = useCallback((id: string) => {\n setToasts((prev) => prev.filter((t) => t.id !== id))\n }, [])\n\n const toast = useCallback(\n (options: MToastOptions) => {\n const id = `toast-${++counter}`\n const entry: MToastEntry = {\n id,\n ...options,\n duration: options.duration ?? defaultDuration.current,\n }\n setToasts((prev) => [...prev, entry])\n announce(entry)\n return id\n },\n [announce]\n )\n\n const ctx = useMemo(() => ({toast, dismiss}), [toast, dismiss])\n\n return (\n <MToastContextProvider value={ctx}>\n {children}\n <MPortal>\n <div className={cn('toast container', position)}>\n <div className=\"toast live\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">\n <MToastAnnouncement entry={announcements.polite} />\n </div>\n <div className=\"toast live\" role=\"alert\" aria-live=\"assertive\" aria-atomic=\"true\">\n <MToastAnnouncement entry={announcements.assertive} />\n </div>\n {toasts.map((entry) => (\n <MToastItem key={entry.id} entry={entry} onDismiss={dismiss} />\n ))}\n </div>\n </MPortal>\n </MToastContextProvider>\n )\n}\n\nexport {useMToast}\n"],"mappings":"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"}
|
package/dist/feedback.cjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
const {ensureStyles}=require('./style-runtime.cjs')
|
|
2
2
|
ensureStyles()
|
|
3
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./MButton-
|
|
3
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./MButton-BxEky3xQ.cjs`),t=require(`./feedback-paV8Ls-h.cjs`),n=require(`./MSkeleton-DuAN8Vcv.cjs`),r=require(`./MTag-DCE1vRJM.cjs`),i=require(`./MLoader-DUOoOoNE.cjs`);exports.MAlert=t.a,exports.MBadge=n.n,exports.MBanner=t.i,exports.MLoader=i.t,exports.MProgressRing=t.r,exports.MSkeleton=n.t,exports.MSpinner=e.r,exports.MTag=r.t,exports.MToastProvider=t.t,exports.useMToast=t.n;
|
package/dist/feedback.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import {ensureStyles} from './style-runtime.js'
|
|
2
2
|
ensureStyles()
|
|
3
|
-
import { r as e } from "./MButton-
|
|
4
|
-
import { a as t, i as n, n as r, r as i, t as a } from "./feedback-
|
|
5
|
-
import { n as o, t as s } from "./MSkeleton-
|
|
6
|
-
import { t as c } from "./MTag-
|
|
7
|
-
import { t as l } from "./MLoader-
|
|
3
|
+
import { r as e } from "./MButton-KELyyBw1.js";
|
|
4
|
+
import { a as t, i as n, n as r, r as i, t as a } from "./feedback-CECayytY.js";
|
|
5
|
+
import { n as o, t as s } from "./MSkeleton-BpcpBBJq.js";
|
|
6
|
+
import { t as c } from "./MTag-BZrKN_DS.js";
|
|
7
|
+
import { t as l } from "./MLoader-CViA3zBo.js";
|
|
8
8
|
export { t as MAlert, o as MBadge, n as MBanner, l as MLoader, i as MProgressRing, s as MSkeleton, e as MSpinner, c as MTag, a as MToastProvider, r as useMToast };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require(`./frameworkTexts-CaqdiKHW.cjs`),t=require(`./validators-SZmLxnir.cjs`);require(`./core-w629c4ND.cjs`);let n=require(`react`),r=require(`react/jsx-runtime`);var i=(0,n.createContext)(null);function a(){return(0,n.useContext)(i)}function o({initialValues:a={},onSubmit:o,onChange:s,validationMode:c=`onBlur`,children:l,className:u,style:d,noValidate:f=!0,...p}){let[m,h]=(0,n.useState)({...a}),[g,_]=(0,n.useState)({}),[v,y]=(0,n.useState)({}),[b,x]=(0,n.useState)(!1),S=(0,n.useRef)(new Map),C=(0,n.useRef)(m),w=(0,n.useCallback)(e=>{S.current.set(e.name,e)},[]),T=(0,n.useCallback)(e=>{S.current.delete(e)},[]),E=e.D(),D=(0,n.useCallback)((e,n)=>{let r=S.current.get(e);if(!r)return{valid:!0};let i=n===void 0?C.current[e]:n,a=i==null?``:String(i);if(r.required){let e=E(t.g(a));if(!e.valid)return e}if(r.validate)for(let e of r.validate){let t=e(a);if(!t.valid)return t}return{valid:!0}},[E]),O=(0,n.useCallback)((e,t)=>{let n=D(e,t);return _(t=>{if(n.valid){let n={...t};return delete n[e],n}return{...t,[e]:n.error}}),n},[D]),k=(0,n.useCallback)(()=>{let e=!0,t={};for(let[n]of S.current){let r=D(n);r.valid||(e=!1,t[n]=r.error)}_(t);let n={};for(let[e]of S.current)n[e]=!0;return y(n),e},[D]),A=(0,n.useCallback)((e,t)=>{let n={...C.current,[e]:t};C.current=n,h(n),s?.(n),c===`onChange`&&v[e]&&O(e,t)},[s,c,v,O]),j=(0,n.useCallback)((e,t)=>{_(n=>({...n,[e]:t}))},[]),M=(0,n.useCallback)((e,t)=>{y(n=>({...n,[e]:t})),c===`onBlur`&&t&&O(e)},[c,O]),N=(0,n.useCallback)(()=>{C.current={...a},h(C.current),_({}),y({}),x(!1)},[a]),P=(0,n.useCallback)(async e=>{if(e.preventDefault(),b||!k())return;x(!0);let t={setSubmitting:x,resetForm:N,setFieldError:j};try{await o?.(C.current,t)}finally{x(!1)}},[b,k,o,N,j]),F=(0,n.useMemo)(()=>({values:m,errors:g,touched:v,registerField:w,unregisterField:T,setFieldValue:A,setFieldError:j,setFieldTouched:M,validateField:O,validateAll:k,resetForm:N,isSubmitting:b}),[m,g,v,w,T,A,j,M,O,k,N,b]);return(0,r.jsx)(i.Provider,{value:F,children:(0,r.jsx)(`form`,{onSubmit:P,noValidate:f,className:`form${u?` ${u}`:``}`,style:d,...p,children:typeof l==`function`?l(F):l})})}function s(e,t){let r=a();(0,n.useEffect)(()=>{if(r)return r.registerField({name:e,validate:t?.validate,required:t?.required}),()=>r.unregisterField(e)},[r,e,t?.validate,t?.required]);let i=(0,n.useCallback)(t=>{r?.setFieldValue(e,t)},[r,e]),o=(0,n.useCallback)(()=>{r?.setFieldTouched(e,!0)},[r,e]);return{value:r?.values[e]??``,error:r?.errors[e],touched:r?.touched[e]??!1,onChange:i,onBlur:o}}Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return s}});
|
|
2
|
+
//# sourceMappingURL=form-Br56h5EF.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-Br56h5EF.cjs","names":[],"sources":["../src/components/form/MForm/FormContext.ts","../src/components/form/MForm/MForm.tsx","../src/components/form/MForm/useFormField.ts"],"sourcesContent":["import {createContext, useContext} from 'react'\nimport type {MFormContextValue} from './MForm.types'\n\nexport const FormContext = createContext<MFormContextValue | null>(null)\n\n// Read the nearest form context to integrate custom fields with shared state.\nexport function useFormContext(): MFormContextValue | null {\n return useContext(FormContext)\n}\n","import {useState, useRef, useCallback, useMemo} from 'react'\nimport type * as React from 'react'\nimport type {MFormProps, MFieldRegistration, MFormContextValue, MFormHelpers} from './MForm.types'\nimport {FormContext} from './FormContext'\nimport {validateRequired} from '../../../utils/validators'\nimport type {ValidationResult} from '../../../utils/validators'\nimport {useMValidationMessage} from '../../../i18n/frameworkTexts'\nimport './MForm.css'\n\n// Coordinate form values, validation state and submit helpers through context.\nexport function MForm({\n initialValues = {},\n onSubmit,\n onChange,\n validationMode = 'onBlur',\n children,\n className,\n style,\n noValidate = true,\n ...rest\n}: MFormProps) {\n const [values, setValues] = useState<Record<string, unknown>>({...initialValues})\n const [errors, setErrors] = useState<Record<string, string>>({})\n const [touched, setTouched] = useState<Record<string, boolean>>({})\n const [isSubmitting, setIsSubmitting] = useState(false)\n const fieldsRef = useRef<Map<string, MFieldRegistration>>(new Map())\n // Latest values outside the render cycle, so validation never reads a stale closure.\n const valuesRef = useRef<Record<string, unknown>>(values)\n\n // Track mounted fields so validation stays aligned with active inputs.\n const registerField = useCallback((reg: MFieldRegistration) => {\n fieldsRef.current.set(reg.name, reg)\n }, [])\n\n const unregisterField = useCallback((name: string) => {\n fieldsRef.current.delete(name)\n }, [])\n\n const translateValidation = useMValidationMessage()\n\n // Run required and custom validators without mutating visible error state yet.\n const validateFieldInternal = useCallback(\n (name: string, val?: unknown): ValidationResult => {\n const reg = fieldsRef.current.get(name)\n if (!reg) return {valid: true}\n\n const fieldValue = val !== undefined ? val : valuesRef.current[name]\n const strValue = fieldValue != null ? String(fieldValue) : ''\n\n // Required check\n if (reg.required) {\n const reqResult = translateValidation(validateRequired(strValue))\n if (!reqResult.valid) return reqResult\n }\n\n // Custom validators\n if (reg.validate) {\n for (const validator of reg.validate) {\n const result = validator(strValue)\n if (!result.valid) return result\n }\n }\n\n return {valid: true}\n },\n [translateValidation]\n )\n\n // Persist the latest validation result for a single field.\n const validateField = useCallback(\n (name: string, val?: unknown): ValidationResult => {\n const result = validateFieldInternal(name, val)\n setErrors((prev) => {\n if (result.valid) {\n const next = {...prev}\n delete next[name]\n return next\n }\n return {...prev, [name]: result.error!}\n })\n return result\n },\n [validateFieldInternal]\n )\n\n // Validate every registered field before submit.\n const validateAll = useCallback((): boolean => {\n let allValid = true\n const newErrors: Record<string, string> = {}\n\n for (const [name] of fieldsRef.current) {\n const result = validateFieldInternal(name)\n if (!result.valid) {\n allValid = false\n newErrors[name] = result.error!\n }\n }\n\n setErrors(newErrors)\n // Mark all as touched\n const allTouched: Record<string, boolean> = {}\n for (const [name] of fieldsRef.current) {\n allTouched[name] = true\n }\n setTouched(allTouched)\n\n return allValid\n }, [validateFieldInternal])\n\n // Update field values and trigger onChange or validation according to mode.\n const setFieldValue = useCallback(\n (name: string, val: unknown) => {\n const next = {...valuesRef.current, [name]: val}\n valuesRef.current = next\n setValues(next)\n onChange?.(next)\n\n if (validationMode === 'onChange' && touched[name]) {\n validateField(name, val)\n }\n },\n [onChange, validationMode, touched, validateField]\n )\n\n const setFieldError = useCallback((name: string, error: string) => {\n setErrors((prev) => ({...prev, [name]: error}))\n }, [])\n\n // Mark fields as touched so blur validation can start surfacing errors.\n const setFieldTouched = useCallback(\n (name: string, isTouched: boolean) => {\n setTouched((prev) => ({...prev, [name]: isTouched}))\n if (validationMode === 'onBlur' && isTouched) {\n validateField(name)\n }\n },\n [validationMode, validateField]\n )\n\n const resetForm = useCallback(() => {\n valuesRef.current = {...initialValues}\n setValues(valuesRef.current)\n setErrors({})\n setTouched({})\n setIsSubmitting(false)\n }, [initialValues])\n\n // Guard submit flow with validation and a single in-flight submission state.\n const handleSubmit = useCallback(\n async (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault()\n if (isSubmitting) return\n\n const valid = validateAll()\n if (!valid) return\n\n setIsSubmitting(true)\n const helpers: MFormHelpers = {\n setSubmitting: setIsSubmitting,\n resetForm,\n setFieldError,\n }\n\n try {\n await onSubmit?.(valuesRef.current, helpers)\n } finally {\n setIsSubmitting(false)\n }\n },\n [isSubmitting, validateAll, onSubmit, resetForm, setFieldError]\n )\n\n // Memoize the public form context to limit downstream re-renders.\n const ctx = useMemo<MFormContextValue>(\n () => ({\n values,\n errors,\n touched,\n registerField,\n unregisterField,\n setFieldValue,\n setFieldError,\n setFieldTouched,\n validateField,\n validateAll,\n resetForm,\n isSubmitting,\n }),\n [\n values,\n errors,\n touched,\n registerField,\n unregisterField,\n setFieldValue,\n setFieldError,\n setFieldTouched,\n validateField,\n validateAll,\n resetForm,\n isSubmitting,\n ]\n )\n\n return (\n <FormContext.Provider value={ctx}>\n <form\n onSubmit={handleSubmit}\n noValidate={noValidate}\n className={`form${className ? ` ${className}` : ''}`}\n style={style}\n {...rest}\n >\n {typeof children === 'function' ? children(ctx) : children}\n </form>\n </FormContext.Provider>\n )\n}\n","import {useEffect, useCallback} from 'react'\nimport {useFormContext} from './FormContext'\nimport type {ValidatorFn} from '../../../utils/validators'\n\nexport interface MUseFormFieldOptions {\n validate?: ValidatorFn[]\n required?: boolean\n}\n\nexport interface MUseFormFieldReturn {\n value: unknown\n error: string | undefined\n touched: boolean\n onChange: (value: unknown) => void\n onBlur: () => void\n}\n\n// Connect a field name to the nearest form context and expose field-level helpers.\nexport function useFormField(name: string, options?: MUseFormFieldOptions): MUseFormFieldReturn {\n const ctx = useFormContext()\n\n // Register the field definition so the form can validate and reset it centrally.\n useEffect(() => {\n if (!ctx) return\n ctx.registerField({\n name,\n validate: options?.validate,\n required: options?.required,\n })\n return () => ctx.unregisterField(name)\n }, [ctx, name, options?.validate, options?.required])\n\n // Forward value updates into the form state.\n const onChange = useCallback(\n (val: unknown) => {\n ctx?.setFieldValue(name, val)\n },\n [ctx, name]\n )\n\n // Mark the field as touched when the control loses focus.\n const onBlur = useCallback(() => {\n ctx?.setFieldTouched(name, true)\n }, [ctx, name])\n\n return {\n value: ctx?.values[name] ?? '',\n error: ctx?.errors[name],\n touched: ctx?.touched[name] ?? false,\n onChange,\n onBlur,\n }\n}\n"],"mappings":"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"}
|