@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
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"inputs-BiN62hgH.cjs","names":[],"sources":["../src/components/inputs/MTextarea/MTextarea.tsx","../src/components/inputs/MInputPassword/MInputPassword.tsx","../src/components/inputs/MInputNumber/MInputNumber.tsx","../src/components/inputs/MInputEmail/MInputEmail.tsx","../src/components/inputs/MInputUrl/MInputUrl.tsx","../src/components/inputs/MInputPhone/MInputPhone.tsx","../src/components/inputs/MInputName/MInputName.tsx","../src/components/inputs/MInputGroup/MInputGroup.tsx","../src/components/inputs/MInputIBAN/MInputIBAN.tsx","../src/components/inputs/MInputTaxId/MInputTaxId.tsx","../src/components/inputs/MInputCurrency/MInputCurrency.tsx","../src/components/inputs/MInputDate/MInputDate.tsx","../src/components/inputs/MInputCreditCard/MInputCreditCard.tsx","../src/components/inputs/MInputPostCode/MInputPostCode.tsx","../src/components/inputs/MInputOTP/MInputOTP.tsx","../src/components/inputs/MInputSlider/MInputSlider.tsx","../src/components/inputs/MInputFile/MCropEditor.tsx","../src/components/inputs/MInputFile/MInputFile.tsx"],"sourcesContent":["import {useState, useRef, useCallback, useEffect, forwardRef} from 'react'\nimport type * as React from 'react'\nimport type {MTextareaProps} from './MTextarea.types'\nimport {cn} from '../../../utils/cn'\nimport {useControllableString} from '../../../utils/useControllableString'\nimport {useGhostText} from '../../../utils/useGhostText'\nimport {MSpinner} from '../../feedback'\nimport './MTextarea.css'\n\n// Render the multiline text input with optional auto-resize behavior.\nexport const MTextarea = forwardRef<HTMLTextAreaElement, MTextareaProps>(function MTextarea(\n {\n value,\n defaultValue,\n name,\n id,\n placeholder,\n disabled = false,\n readOnly = false,\n required = false,\n autoFocus = false,\n rows = 3,\n autoResize = false,\n minRows,\n maxRows,\n variant = 'outlined',\n size = 'md',\n color,\n fullWidth = false,\n label,\n helperText,\n errorText,\n error = false,\n success = false,\n maxLength,\n showCharCount = false,\n ghostOptions,\n ghostMinChars = 2,\n onGhostAccept,\n loading = false,\n onChange,\n onFocus,\n onBlur,\n className,\n style,\n textareaClassName,\n labelClassName,\n },\n ref\n) {\n const [focused, setFocused] = useState(false)\n const textareaRef = useRef<HTMLTextAreaElement>(null)\n\n const {currentValue, setCurrentValue} = useControllableString(value, defaultValue)\n const ghost = useGhostText({\n options: ghostOptions ?? [],\n value: currentValue,\n minChars: ghostMinChars,\n })\n const hasError = error || !!errorText\n const resolvedColorClass = hasError ? 'color-error' : color ? `color-${color}` : undefined\n const resolvedRef = ref ?? textareaRef\n\n // Resize the textarea to fit content while respecting min and max row limits.\n const adjustHeight = useCallback(() => {\n const el = typeof resolvedRef === 'function' ? null : resolvedRef?.current\n if (!el || !autoResize) return\n\n el.style.height = 'auto'\n const lineHeight = parseFloat(getComputedStyle(el).lineHeight) || 20\n const minH = minRows ? minRows * lineHeight : 0\n const maxH = maxRows ? maxRows * lineHeight : Infinity\n const newHeight = Math.min(Math.max(el.scrollHeight, minH), maxH)\n el.style.height = `${newHeight}px`\n el.style.overflowY = el.scrollHeight > newHeight ? 'auto' : 'hidden'\n }, [autoResize, minRows, maxRows, resolvedRef])\n\n useEffect(() => {\n adjustHeight()\n }, [currentValue, adjustHeight])\n\n // Mirror focus state so wrapper styling stays consistent with MInput.\n const handleFocus = useCallback(\n (e: React.FocusEvent<HTMLTextAreaElement>) => {\n setFocused(true)\n onFocus?.(e)\n },\n [onFocus]\n )\n\n // Clear focus styling before delegating blur handling.\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLTextAreaElement>) => {\n setFocused(false)\n onBlur?.(e)\n },\n [onBlur]\n )\n\n // Keep uncontrolled usage working without blocking controlled integrations.\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n setCurrentValue(e.target.value)\n onChange?.(e)\n ghost.reset()\n },\n [onChange, setCurrentValue, ghost.reset]\n )\n\n // Intercept keyboard events for ghost text acceptance.\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (ghostOptions && ghost.hint) {\n const accepted = ghost.onKeyDown(e)\n if (accepted) {\n const result = ghost.accept()\n setCurrentValue(result.value)\n onGhostAccept?.(result.value)\n const el = typeof resolvedRef === 'function' ? null : resolvedRef?.current\n if (el) {\n const nativeSet = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value')?.set\n nativeSet?.call(el, result.value)\n el.dispatchEvent(new Event('input', {bubbles: true}))\n }\n return\n }\n }\n },\n [ghostOptions, ghost, setCurrentValue, onGhostAccept, resolvedRef]\n )\n\n const containerClasses = cn(\n 'container',\n `field-${variant}`,\n `field-${size}`,\n focused && 'focused',\n hasError && 'error',\n success && !hasError && 'success',\n disabled && 'disabled'\n )\n\n return (\n <div className={cn('textarea', resolvedColorClass, fullWidth && 'full-width', className)} style={style}>\n {label && (\n <label\n htmlFor={id}\n className={cn(\n 'field-label',\n focused && 'focused',\n hasError && 'error',\n success && !hasError && 'success',\n required && 'required',\n labelClassName\n )}\n >\n {label}\n </label>\n )}\n\n <div className={containerClasses}>\n {ghostOptions ? (\n <div className=\"ghost-text-field ghost-text-field-multi\">\n <textarea\n ref={resolvedRef as React.Ref<HTMLTextAreaElement>}\n name={name}\n id={id}\n placeholder={placeholder}\n disabled={disabled}\n readOnly={readOnly}\n required={required}\n autoFocus={autoFocus}\n rows={autoResize ? (minRows ?? rows) : rows}\n maxLength={maxLength}\n value={currentValue}\n className={cn('field', textareaClassName)}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n aria-invalid={hasError || undefined}\n aria-describedby={errorText ? `${id}-error` : helperText ? `${id}-helper` : undefined}\n />\n {focused && ghost.hint && (\n <span className=\"ghost-text-overlay\" aria-hidden=\"true\">\n <span className=\"ghost-text-typed\">{currentValue}</span>\n <span className=\"ghost-text-hint\">{ghost.hint}</span>\n </span>\n )}\n </div>\n ) : (\n <textarea\n ref={resolvedRef as React.Ref<HTMLTextAreaElement>}\n name={name}\n id={id}\n placeholder={placeholder}\n disabled={disabled}\n readOnly={readOnly}\n required={required}\n autoFocus={autoFocus}\n rows={autoResize ? (minRows ?? rows) : rows}\n maxLength={maxLength}\n value={currentValue}\n className={cn('field', textareaClassName)}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n aria-invalid={hasError || undefined}\n aria-describedby={errorText ? `${id}-error` : helperText ? `${id}-helper` : undefined}\n />\n )}\n {loading && <MSpinner size=\"sm\" color={color} className=\"textarea-spinner\" />}\n </div>\n\n {(errorText || helperText || showCharCount) && (\n <div className=\"bottom-row\">\n <span>\n {errorText && (\n <span id={id ? `${id}-error` : undefined} className=\"field-error\" role=\"alert\">\n {errorText}\n </span>\n )}\n {!errorText && helperText && (\n <span id={id ? `${id}-helper` : undefined} className=\"field-helper\">\n {helperText}\n </span>\n )}\n </span>\n {showCharCount && maxLength && (\n <span className={cn('char-count', currentValue.length > maxLength && 'over')}>\n {currentValue.length}/{maxLength}\n </span>\n )}\n </div>\n )}\n </div>\n )\n})\n","import {useState, useCallback, useEffect, forwardRef} from 'react'\nimport type * as React from 'react'\nimport type {MInputPasswordProps, MPasswordStrength} from './MInputPassword.types'\nimport {MInput} from '../MInput'\nimport {MEyeIcon, MEyeOffIcon} from '../../../icons'\nimport {cn} from '../../../utils/cn'\nimport './MInputPassword.css'\n\n// Approximate password strength with simple UI-focused heuristics.\nfunction calcStrength(value: string): MPasswordStrength {\n let score = 0\n if (value.length >= 8) score++\n if (value.length >= 12) score++\n if (/[a-z]/.test(value) && /[A-Z]/.test(value)) score++\n if (/\\d/.test(value)) score++\n if (/[^a-zA-Z0-9]/.test(value)) score++\n\n if (score <= 1) return 'weak'\n if (score <= 2) return 'fair'\n if (score <= 3) return 'good'\n return 'strong'\n}\n\nconst STRENGTH_LABELS: Record<MPasswordStrength, string> = {\n weak: 'Weak',\n fair: 'Fair',\n good: 'Good',\n strong: 'Strong',\n}\n\n// Extend the base input with password visibility and optional strength feedback.\nexport const MInputPassword = forwardRef<HTMLInputElement, MInputPasswordProps>(function MInputPassword(\n {showToggle = true, showStrength = false, onStrengthChange, value, defaultValue, onChange, className, ...rest},\n ref\n) {\n const [visible, setVisible] = useState(false)\n const [internalValue, setInternalValue] = useState(defaultValue?.toString() ?? '')\n const currentValue = value !== undefined ? value.toString() : internalValue\n const strength = calcStrength(currentValue)\n\n useEffect(() => {\n onStrengthChange?.(strength)\n }, [strength, onStrengthChange])\n\n // Keep uncontrolled usage working while reporting changes to the caller.\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n if (value === undefined) {\n setInternalValue(e.target.value)\n }\n onChange?.(e)\n },\n [onChange, value]\n )\n\n const toggleIcon = showToggle ? (\n <button\n type=\"button\"\n className=\"password toggle\"\n onClick={() => setVisible((v) => !v)}\n tabIndex={-1}\n aria-label={visible ? 'Hide password' : 'Show password'}\n >\n {visible ? <MEyeOffIcon /> : <MEyeIcon />}\n </button>\n ) : undefined\n\n return (\n <div className={cn('password input', className)}>\n <MInput\n {...rest}\n ref={ref}\n type={visible ? 'text' : 'password'}\n value={currentValue}\n onChange={handleChange}\n endIcon={toggleIcon}\n />\n {showStrength && currentValue.length > 0 && (\n <div className=\"password strength row\">\n <div className=\"password strength bar\">\n {[0, 1, 2, 3].map((i) => (\n <div\n key={i}\n className={cn(\n 'password strength segment',\n i < ['weak', 'fair', 'good', 'strong'].indexOf(strength) + 1 &&\n `strength-${strength}`\n )}\n />\n ))}\n </div>\n <span className={cn('password strength label', `strength-${strength}`)}>\n {STRENGTH_LABELS[strength]}\n </span>\n </div>\n )}\n </div>\n )\n})\n","import {useState, useCallback, useRef, useEffect, forwardRef} from 'react'\nimport type * as React from 'react'\nimport type {MInputNumberProps} from './MInputNumber.types'\nimport {MInput} from '../MInput'\nimport {cn} from '../../../utils/cn'\nimport {MChevronDownIcon, MChevronUpIcon} from '../../../icons'\nimport './MInputNumber.css'\nimport {useMCommonTexts} from '../../../i18n/frameworkTexts'\n\n// Keep numeric values inside optional min and max bounds.\nfunction clampValue(val: number, min?: number, max?: number): number {\n if (min !== undefined && val < min) return min\n if (max !== undefined && val > max) return max\n return val\n}\n\n// Prevent floating-point drift when step values use decimal precision.\nfunction roundToPrecision(val: number, precision: number): number {\n const factor = Math.pow(10, precision)\n return Math.round(val * factor) / factor\n}\n\n// Extend the base input with stepping, clamping and keyboard increment support.\nexport const MInputNumber = forwardRef<HTMLInputElement, MInputNumberProps>(function MInputNumber(\n {\n min,\n max,\n step = 1,\n showStepper = true,\n precision = 0,\n allowNegative = true,\n onValueChange,\n value,\n defaultValue,\n onChange,\n onKeyDown,\n onBlur,\n disabled = false,\n className,\n ...rest\n },\n ref\n) {\n const texts = useMCommonTexts()\n const [internalValue, setInternalValue] = useState(defaultValue?.toString() ?? '')\n const currentValue = value !== undefined ? value.toString() : internalValue\n const intervalRef = useRef<ReturnType<typeof setInterval>>(null)\n const currentValueRef = useRef(currentValue)\n\n useEffect(() => {\n currentValueRef.current = currentValue\n }, [currentValue])\n\n // Keep the displayed string and numeric callback in sync.\n const updateValue = useCallback(\n (newVal: string) => {\n if (value === undefined) {\n setInternalValue(newVal)\n }\n const num = parseFloat(newVal)\n onValueChange?.(isNaN(num) ? null : num)\n },\n [value, onValueChange]\n )\n\n // Move the current value by one step in the requested direction.\n const increment = useCallback(\n (direction: 1 | -1) => {\n const current = parseFloat(currentValueRef.current) || 0\n const newVal = roundToPrecision(clampValue(current + step * direction, min, max), precision)\n currentValueRef.current = newVal.toString()\n updateValue(newVal.toString())\n },\n [step, min, max, precision, updateValue]\n )\n\n // Repeat stepping while the pointer is held on a stepper button.\n const startHold = useCallback(\n (direction: 1 | -1) => {\n increment(direction)\n intervalRef.current = setInterval(() => increment(direction), 150)\n },\n [increment]\n )\n\n // Clear the hold timer when the pointer is released.\n const stopHold = useCallback(() => {\n if (intervalRef.current) {\n clearInterval(intervalRef.current)\n intervalRef.current = null\n }\n }, [])\n\n useEffect(() => stopHold, [stopHold])\n\n // Filter user input down to numeric characters before storing it.\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const raw = e.target.value\n const filtered = raw.replace(allowNegative ? /[^\\d.,-]/g : /[^\\d.,]/g, '')\n currentValueRef.current = filtered\n updateValue(filtered)\n onChange?.(e)\n },\n [onChange, allowNegative, updateValue]\n )\n\n // Snap the entered value back into range when the field loses focus.\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n const num = parseFloat(currentValueRef.current)\n if (!isNaN(num)) {\n const clamped = roundToPrecision(clampValue(num, min, max), precision)\n currentValueRef.current = clamped.toString()\n updateValue(clamped.toString())\n }\n onBlur?.(e)\n },\n [min, max, precision, updateValue, onBlur]\n )\n\n // Support ArrowUp and ArrowDown as a keyboard stepper.\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'ArrowUp') {\n e.preventDefault()\n increment(1)\n } else if (e.key === 'ArrowDown') {\n e.preventDefault()\n increment(-1)\n }\n onKeyDown?.(e)\n },\n [increment, onKeyDown]\n )\n\n const stepper =\n showStepper && !disabled ? (\n <div className=\"number stepper\">\n <button\n type=\"button\"\n className=\"number step button\"\n onPointerDown={(event) => {\n event.preventDefault()\n startHold(1)\n }}\n onPointerUp={stopHold}\n onPointerLeave={stopHold}\n onPointerCancel={stopHold}\n tabIndex={-1}\n aria-label={texts.increment}\n >\n <MChevronUpIcon />\n </button>\n <button\n type=\"button\"\n className=\"number step button\"\n onPointerDown={(event) => {\n event.preventDefault()\n startHold(-1)\n }}\n onPointerUp={stopHold}\n onPointerLeave={stopHold}\n onPointerCancel={stopHold}\n tabIndex={-1}\n aria-label={texts.decrement}\n >\n <MChevronDownIcon />\n </button>\n </div>\n ) : undefined\n\n return (\n <MInput\n {...rest}\n ref={ref}\n type=\"text\"\n inputMode=\"decimal\"\n value={currentValue}\n onChange={handleChange}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n endIcon={stepper}\n disabled={disabled}\n className={cn('number input', className)}\n />\n )\n})\n","import {useState, useCallback, forwardRef} from 'react'\nimport type * as React from 'react'\nimport type {MInputEmailProps} from './MInputEmail.types'\nimport {MInput} from '../MInput'\nimport {validateEmail} from '../../../utils/validators'\nimport type {ValidationResult} from '../../../utils/validators'\nimport {MCheckIcon, MMailIcon} from '../../../icons'\n\n// Extend the base input with email validation and optional success feedback.\nexport const MInputEmail = forwardRef<HTMLInputElement, MInputEmailProps>(function MInputEmail(\n {\n validateOnBlur = true,\n validateOnChange = false,\n showValidIcon = true,\n onValidationChange,\n value,\n defaultValue,\n onChange,\n onBlur,\n error,\n errorText,\n success,\n placeholder = 'email@example.com',\n ...rest\n },\n ref\n) {\n const [internalValue, setInternalValue] = useState(defaultValue?.toString() ?? '')\n const [validation, setValidation] = useState<ValidationResult>({valid: true})\n const [touched, setTouched] = useState(false)\n\n const currentValue = value !== undefined ? value.toString() : internalValue\n\n // Reuse the shared email validator and surface the latest result upstream.\n const runValidation = useCallback(\n (val: string) => {\n const result = validateEmail(val)\n setValidation(result)\n onValidationChange?.(result)\n return result\n },\n [onValidationChange]\n )\n\n // Validate while typing only when the component is configured to do so.\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n if (value === undefined) {\n setInternalValue(e.target.value)\n }\n if (validateOnChange && touched) {\n runValidation(e.target.value)\n }\n onChange?.(e)\n },\n [onChange, value, validateOnChange, touched, runValidation]\n )\n\n // Validate optional email input on blur once the user has interacted with it.\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setTouched(true)\n if (validateOnBlur && e.target.value) {\n runValidation(e.target.value)\n }\n onBlur?.(e)\n },\n [onBlur, validateOnBlur, runValidation]\n )\n\n const isError = error || (touched && !validation.valid)\n const resolvedErrorText = errorText || (touched && !validation.valid ? validation.error : undefined)\n const isSuccess =\n !isError && success !== undefined ? success : touched && validation.valid && currentValue.length > 0\n\n const validIcon =\n showValidIcon && isSuccess ? (\n <span className=\"validation-icon\">\n <MCheckIcon />\n </span>\n ) : undefined\n\n return (\n <MInput\n {...rest}\n ref={ref}\n type=\"email\"\n value={currentValue}\n onChange={handleChange}\n onBlur={handleBlur}\n error={isError}\n errorText={resolvedErrorText}\n success={isSuccess}\n placeholder={placeholder}\n startIcon={<MMailIcon />}\n endIcon={validIcon}\n />\n )\n})\n","import {useState, useCallback, forwardRef} from 'react'\nimport type * as React from 'react'\nimport type {MInputUrlProps} from './MInputUrl.types'\nimport {MInput} from '../MInput'\nimport {validateUrl} from '../../../utils/validators'\nimport type {ValidationResult} from '../../../utils/validators'\nimport {MCheckIcon, MLinkIcon} from '../../../icons'\n\nconst DEFAULT_PROTOCOLS = ['http', 'https']\n\n// Extend the base input with URL validation, optional protocol whitelisting\n// and an optional autoformatter that prepends the first allowed protocol on\n// blur (so users can type `example.com` and walk away with `https://example.com`).\nexport const MInputUrl = forwardRef<HTMLInputElement, MInputUrlProps>(function MInputUrl(\n {\n protocols = DEFAULT_PROTOCOLS,\n requireProtocol = true,\n formatOnBlur = false,\n validateOnBlur = true,\n validateOnChange = false,\n showValidIcon = true,\n onValidationChange,\n value,\n defaultValue,\n onChange,\n onBlur,\n error,\n errorText,\n success,\n placeholder = 'https://example.com',\n ...rest\n },\n ref\n) {\n const [internalValue, setInternalValue] = useState(defaultValue?.toString() ?? '')\n const [validation, setValidation] = useState<ValidationResult>({valid: true})\n const [touched, setTouched] = useState(false)\n\n const currentValue = value !== undefined ? value.toString() : internalValue\n\n const runValidation = useCallback(\n (val: string) => {\n const result = validateUrl(val, {protocols, requireProtocol})\n setValidation(result)\n onValidationChange?.(result)\n return result\n },\n [protocols, requireProtocol, onValidationChange]\n )\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n if (value === undefined) {\n setInternalValue(e.target.value)\n }\n if (validateOnChange && touched) {\n runValidation(e.target.value)\n }\n onChange?.(e)\n },\n [onChange, value, validateOnChange, touched, runValidation]\n )\n\n // On blur: optionally prepend the first allowed protocol when the value\n // has no scheme yet, then run validation against the (possibly rewritten)\n // value. The rewritten value is surfaced to consumers through a\n // synthesised `onChange` so controlled inputs stay in sync.\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setTouched(true)\n\n let next = e.target.value\n const hasScheme = /^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(next)\n if (formatOnBlur && next && !hasScheme && protocols.length > 0) {\n next = `${protocols[0]}://${next}`\n if (value === undefined) {\n setInternalValue(next)\n }\n // Re-use the same native input element so refs, names and\n // ids on the synthetic event still resolve to the real DOM.\n e.target.value = next\n onChange?.(e as unknown as React.ChangeEvent<HTMLInputElement>)\n }\n\n if (validateOnBlur && next) {\n runValidation(next)\n }\n onBlur?.(e)\n },\n [onBlur, validateOnBlur, runValidation, formatOnBlur, protocols, value, onChange]\n )\n\n const isError = error || (touched && !validation.valid)\n const resolvedErrorText = errorText || (touched && !validation.valid ? validation.error : undefined)\n const isSuccess =\n !isError && success !== undefined ? success : touched && validation.valid && currentValue.length > 0\n\n const validIcon =\n showValidIcon && isSuccess ? (\n <span className=\"validation-icon\">\n <MCheckIcon />\n </span>\n ) : undefined\n\n return (\n <MInput\n {...rest}\n ref={ref}\n type=\"url\"\n value={currentValue}\n onChange={handleChange}\n onBlur={handleBlur}\n error={isError}\n errorText={resolvedErrorText}\n success={isSuccess}\n placeholder={placeholder}\n startIcon={<MLinkIcon />}\n endIcon={validIcon}\n />\n )\n})\n","import {useState, useCallback, forwardRef} from 'react'\nimport type * as React from 'react'\nimport type {MInputPhoneProps} from './MInputPhone.types'\nimport {MInput} from '../MInput'\nimport {cn} from '../../../utils/cn'\nimport {validatePhone} from '../../../utils/validators'\nimport {formatPhone, stripNonDigits} from '../../../utils/formatters'\nimport type {ValidationResult} from '../../../utils/validators'\nimport {MPhoneIcon} from '../../../icons'\nimport './MInputPhone.css'\n\nconst COUNTRY_PREFIXES: Record<string, string> = {\n PL: '+48',\n DE: '+49',\n US: '+1',\n GB: '+44',\n FR: '+33',\n CZ: '+420',\n SK: '+421',\n}\n\n// Sort longest prefix first so '+421' is matched before '+4'.\nconst PREFIX_ENTRIES = Object.entries(COUNTRY_PREFIXES).sort(([, a], [, b]) => b.length - a.length)\n\n// Match a leading +XX prefix back to its country code so the user can type the country in.\nfunction detectCountryFromValue(value: string): {country: string; rest: string} | null {\n const trimmed = value.trim().replace(/^00/, '+')\n\n if (!trimmed.startsWith('+')) {\n return null\n }\n\n const digitsAfterPlus = '+' + stripNonDigits(trimmed)\n\n for (const [country, prefix] of PREFIX_ENTRIES) {\n if (digitsAfterPlus.startsWith(prefix)) {\n return {country, rest: digitsAfterPlus.slice(prefix.length)}\n }\n }\n\n return null\n}\n\n// Detect a partial prefix the user is in the middle of typing (e.g. \"+4\" before they finish \"+49\").\nfunction looksLikePartialPrefix(value: string): boolean {\n const trimmed = value.trim()\n if (!trimmed.startsWith('+') && !trimmed.startsWith('00')) return false\n const normalized = trimmed.startsWith('00') ? '+' + trimmed.slice(2) : trimmed\n const digits = stripNonDigits(normalized)\n // Longest prefix in COUNTRY_PREFIXES is 3 digits (\"+421\"), so accept up to 3 digits as \"still typing\".\n return digits.length <= 3\n}\n\n// Normalize a partial prefix to canonical \"+digits\" form, so 00420 → +420 while typing.\nfunction normalizePartialPrefix(value: string): string {\n const trimmed = value.trim()\n const body = trimmed.startsWith('00') ? trimmed.slice(2) : trimmed.slice(1)\n return '+' + stripNonDigits(body).slice(0, 3)\n}\n\n// Extend the base input with country-aware phone formatting and validation.\nexport const MInputPhone = forwardRef<HTMLInputElement, MInputPhoneProps>(function MInputPhone(\n {\n countryCode,\n defaultCountryCode = 'PL',\n showCountryCode = true,\n formatOnChange = true,\n validateOnBlur = true,\n onValidationChange,\n onValueChange,\n onCountryChange,\n onClear,\n value,\n defaultValue,\n onChange,\n onBlur,\n error,\n errorText,\n placeholder = '123 456 789',\n className,\n ...rest\n },\n ref\n) {\n const [internalCountry, setInternalCountry] = useState((countryCode ?? defaultCountryCode).toUpperCase())\n const [internalValue, setInternalValue] = useState(defaultValue?.toString() ?? '')\n const [validation, setValidation] = useState<ValidationResult>({valid: true})\n const [touched, setTouched] = useState(false)\n\n const currentCountry = (countryCode ?? internalCountry).toUpperCase()\n const currentValue = value !== undefined ? value.toString() : internalValue\n\n // Keep the emitted raw digits and the displayed formatted value aligned.\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const raw = e.target.value\n\n // Empty input — short-circuit so clear/backspace doesn't loop through the formatter.\n if (raw === '') {\n if (value === undefined) setInternalValue('')\n onValueChange?.('', '')\n onChange?.(e)\n return\n }\n\n const detected = detectCountryFromValue(raw)\n\n if (detected) {\n const nextCountry = detected.country\n if (countryCode === undefined && nextCountry !== currentCountry) {\n setInternalCountry(nextCountry)\n onCountryChange?.(nextCountry)\n }\n const digits = stripNonDigits(detected.rest)\n const formatted = formatOnChange ? formatPhone(digits, {countryCode: nextCountry}) : digits\n if (value === undefined) setInternalValue(formatted)\n onValueChange?.(digits, formatted)\n onChange?.(e)\n return\n }\n\n // User is mid-prefix (e.g. \"+\", \"+4\", \"+42\") — preserve so they can finish typing.\n if (looksLikePartialPrefix(raw)) {\n const preserved = normalizePartialPrefix(raw)\n if (value === undefined) setInternalValue(preserved)\n onValueChange?.(stripNonDigits(preserved), preserved)\n onChange?.(e)\n return\n }\n\n const digits = stripNonDigits(raw)\n const formatted = formatOnChange ? formatPhone(digits, {countryCode: currentCountry}) : digits\n\n if (value === undefined) {\n setInternalValue(formatted)\n }\n onValueChange?.(digits, formatted)\n onChange?.(e)\n },\n [onChange, value, formatOnChange, currentCountry, countryCode, onValueChange, onCountryChange]\n )\n\n // Validate the raw number on blur using country-specific length rules.\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setTouched(true)\n if (validateOnBlur && currentValue) {\n const result = validatePhone(stripNonDigits(currentValue), currentCountry)\n setValidation(result)\n onValidationChange?.(result)\n }\n onBlur?.(e)\n },\n [onBlur, validateOnBlur, currentValue, currentCountry, onValidationChange]\n )\n\n // Reset validation state alongside the value when the clear button fires.\n const handleClear = useCallback(() => {\n if (value === undefined) setInternalValue('')\n setValidation({valid: true})\n setTouched(false)\n onValidationChange?.({valid: true})\n onValueChange?.('', '')\n onClear?.()\n }, [onClear, onValueChange, onValidationChange, value])\n\n // Hide the static prefix while the user is typing a partial +XX so the field doesn't show two prefixes at once.\n const isTypingPrefix = currentValue.startsWith('+')\n const prefix =\n showCountryCode && !isTypingPrefix ? (\n <span className=\"phone prefix\">{COUNTRY_PREFIXES[currentCountry] ?? `+${currentCountry}`}</span>\n ) : undefined\n\n const isError = error || (touched && !validation.valid)\n const resolvedErrorText = errorText || (touched && !validation.valid ? validation.error : undefined)\n\n return (\n <MInput\n {...rest}\n ref={ref}\n type=\"tel\"\n value={currentValue}\n onChange={handleChange}\n onBlur={handleBlur}\n onClear={handleClear}\n error={isError}\n errorText={resolvedErrorText}\n placeholder={placeholder}\n startIcon={showCountryCode ? prefix : <MPhoneIcon />}\n className={cn('phone input', className)}\n />\n )\n})\n","import {useState, useCallback, forwardRef} from 'react'\nimport type * as React from 'react'\nimport type {MInputNameProps} from './MInputName.types'\nimport {MInput} from '../MInput'\nimport {capitalizeWords} from '../../../utils/formatters'\nimport type {ValidationResult} from '../../../utils/validators'\nimport {MUserIcon} from '../../../icons'\n\n// Extend the base input with name-friendly filtering and optional word-count validation.\nexport const MInputName = forwardRef<HTMLInputElement, MInputNameProps>(function MInputName(\n {\n autoCapitalize = true,\n allowNumbers = false,\n allowSpecialChars = false,\n minWords,\n validateOnBlur = true,\n onValidationChange,\n value,\n defaultValue,\n onChange,\n onBlur,\n error,\n errorText,\n placeholder = 'Jan Kowalski',\n ...rest\n },\n ref\n) {\n const [internalValue, setInternalValue] = useState(defaultValue?.toString() ?? '')\n const [validation, setValidation] = useState<ValidationResult>({valid: true})\n const [touched, setTouched] = useState(false)\n\n const currentValue = value !== undefined ? value.toString() : internalValue\n\n // Normalize user input according to the configured name rules.\n const filterValue = useCallback(\n (raw: string): string => {\n let filtered = raw\n if (!allowNumbers) {\n filtered = filtered.replace(/\\d/g, '')\n }\n if (!allowSpecialChars) {\n filtered = filtered.replace(/[^a-zA-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ\\s'-]/g, '')\n }\n if (autoCapitalize) {\n filtered = capitalizeWords(filtered)\n }\n return filtered\n },\n [allowNumbers, allowSpecialChars, autoCapitalize]\n )\n\n // Store the filtered value while still delegating the original change event.\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const filtered = filterValue(e.target.value)\n if (value === undefined) {\n setInternalValue(filtered)\n }\n onChange?.(e)\n },\n [onChange, value, filterValue]\n )\n\n // Validate the minimum word count after the user leaves the field.\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setTouched(true)\n if (validateOnBlur && currentValue) {\n const words = currentValue.trim().split(/\\s+/).filter(Boolean)\n if (minWords && words.length < minWords) {\n const result: ValidationResult = {\n valid: false,\n error: `Enter at least ${minWords} word${minWords > 1 ? 's' : ''}`,\n }\n setValidation(result)\n onValidationChange?.(result)\n } else {\n const result: ValidationResult = {valid: true}\n setValidation(result)\n onValidationChange?.(result)\n }\n }\n onBlur?.(e)\n },\n [onBlur, validateOnBlur, currentValue, minWords, onValidationChange]\n )\n\n const isError = error || (touched && !validation.valid)\n const resolvedErrorText = errorText || (touched && !validation.valid ? validation.error : undefined)\n\n return (\n <MInput\n {...rest}\n ref={ref}\n type=\"text\"\n value={currentValue}\n onChange={handleChange}\n onBlur={handleBlur}\n error={isError}\n errorText={resolvedErrorText}\n placeholder={placeholder}\n startIcon={<MUserIcon />}\n />\n )\n})\n","import {useState, useRef, useCallback, forwardRef, isValidElement} from 'react'\nimport type * as React from 'react'\nimport type {MInputGroupProps, MInputGroupAddon, MInputGroupSlot} from './MInputGroup.types'\nimport {cn} from '../../../utils/cn'\nimport {useControllableString} from '../../../utils/useControllableString'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport {MButton, MCheckbox} from '../../controls'\nimport {MSpinner} from '../../feedback'\nimport {MCloseIcon} from '../../../icons'\nimport './MInputGroup.css'\nimport {useMCommonTexts} from '../../../i18n/frameworkTexts'\n\n// Detect structured addon configs while leaving raw React nodes untouched.\nfunction isAddonObject(slot: MInputGroupSlot): slot is MInputGroupAddon {\n return typeof slot === 'object' && slot !== null && !isValidElement(slot) && 'type' in slot\n}\n\n// Render one prepend or append slot based on its declared addon type.\nfunction renderSlot(slot: MInputGroupSlot, position: 'prepend' | 'append', index: number, color: string) {\n if (!isAddonObject(slot)) {\n return (\n <div key={`${position}-${index}`} className={cn('addon', 'custom', position)}>\n {slot}\n </div>\n )\n }\n\n const addon = slot\n\n if (addon.type === 'button') {\n return (\n <MButton\n key={`${position}-${index}`}\n variant=\"ghost\"\n color={color as any}\n size=\"sm\"\n className={cn('addon', position, 'addon-button')}\n onClick={addon.onClick}\n clickEffect=\"none\"\n >\n {addon.content}\n </MButton>\n )\n }\n\n if (addon.type === 'checkbox') {\n return (\n <div key={`${position}-${index}`} className={cn('addon', position, 'checkbox')}>\n <MCheckbox\n size=\"sm\"\n clickEffect=\"none\"\n checked={addon.checked}\n onChange={(e) => addon.onCheckedChange?.(e.target.checked)}\n className=\"addon-checkbox\"\n />\n </div>\n )\n }\n\n // text or icon\n return (\n <span key={`${position}-${index}`} className={cn('addon', position)}>\n {addon.content}\n </span>\n )\n}\n\n// Normalize the public slot API to a flat array for predictable rendering.\nfunction normalizeSlots(slots?: MInputGroupSlot | MInputGroupSlot[]): MInputGroupSlot[] {\n if (slots === undefined || slots === null) return []\n if (Array.isArray(slots)) return slots\n return [slots]\n}\n\n// Render a grouped input with prepend and append content around a shared field.\nexport const MInputGroup = forwardRef<HTMLInputElement, MInputGroupProps>(function MInputGroup(\n {\n prepend,\n append,\n type = 'text',\n value,\n defaultValue,\n name,\n id,\n placeholder,\n disabled = false,\n readOnly = false,\n required = false,\n autoFocus = false,\n autoComplete,\n inputMode,\n size = 'md',\n fullWidth = false,\n label,\n helperText,\n errorText,\n color = 'primary',\n error = false,\n maxLength,\n clearable = false,\n onChange,\n onFocus,\n onBlur,\n onKeyDown,\n onClear,\n loading = false,\n clickEffect = 'ripple',\n rippleColor,\n className,\n style,\n inputClassName,\n labelClassName,\n },\n ref\n) {\n const texts = useMCommonTexts()\n const [focused, setFocused] = useState(false)\n const inputRef = useRef<HTMLInputElement>(null)\n const {effectClassName, effectLayer, handlePointerDown} = useInteractionEffect<HTMLDivElement>({\n effect: clickEffect,\n disabled: disabled || readOnly,\n color: rippleColor,\n })\n\n const hasError = error || !!errorText\n const resolvedColorClass = hasError ? 'color-error' : `color-${color}`\n const {currentValue, setCurrentValue} = useControllableString(value, defaultValue)\n const hasContent = currentValue.length > 0\n\n // Mirror focus state so the wrapper can style the group consistently.\n const handleFocus = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setFocused(true)\n onFocus?.(e)\n },\n [onFocus]\n )\n\n // Clear wrapper focus styling before delegating blur handling.\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setFocused(false)\n onBlur?.(e)\n },\n [onBlur]\n )\n\n // Keep uncontrolled usage working without blocking controlled integrations.\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n setCurrentValue(e.target.value)\n onChange?.(e)\n },\n [onChange, setCurrentValue]\n )\n\n // Reset the field value while preserving focus and controlled integrations.\n const handleClear = useCallback(() => {\n setCurrentValue('')\n\n const input = (ref as React.RefObject<HTMLInputElement>)?.current ?? inputRef.current\n if (input) {\n const nativeSet = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set\n nativeSet?.call(input, '')\n input.dispatchEvent(new Event('input', {bubbles: true}))\n }\n\n onClear?.()\n input?.focus()\n }, [onClear, ref, setCurrentValue])\n\n const prependSlots = normalizeSlots(prepend)\n const appendSlots = normalizeSlots(append)\n\n return (\n <div className={cn('input-group', resolvedColorClass, fullWidth && 'full-width', className)} style={style}>\n {label && (\n <label\n htmlFor={id}\n className={cn(\n 'field-label',\n focused && 'focused',\n hasError && 'error',\n required && 'required',\n labelClassName\n )}\n >\n {label}\n </label>\n )}\n\n <div\n className={cn(\n 'container',\n `field-${size}`,\n focused && 'focused',\n hasError && 'has-error',\n disabled && 'disabled',\n effectClassName\n )}\n onPointerDown={handlePointerDown}\n >\n {effectLayer}\n {prependSlots.map((slot, i) => renderSlot(slot, 'prepend', i, color))}\n\n <input\n ref={ref ?? inputRef}\n type={type}\n value={currentValue}\n name={name}\n id={id}\n placeholder={placeholder}\n disabled={disabled}\n readOnly={readOnly}\n required={required}\n autoFocus={autoFocus}\n autoComplete={autoComplete}\n inputMode={inputMode}\n maxLength={maxLength}\n className={cn('field', inputClassName)}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={onKeyDown}\n aria-invalid={hasError || undefined}\n aria-describedby={errorText ? `${id}-error` : helperText ? `${id}-helper` : undefined}\n />\n\n {loading && (\n <span className={'spinner-addon'}>\n <MSpinner size=\"sm\" color={color} />\n </span>\n )}\n\n {clearable && hasContent && !loading && !disabled && (\n <button\n type=\"button\"\n className=\"clear-btn clear-btn-base\"\n onMouseDown={(event) => event.preventDefault()}\n onClick={handleClear}\n tabIndex={-1}\n aria-label={texts.clearInput}\n >\n <MCloseIcon />\n </button>\n )}\n\n {appendSlots.map((slot, i) => renderSlot(slot, 'append', i, color))}\n </div>\n\n {(errorText || helperText) && (\n <div className={'bottom'}>\n {errorText && (\n <span id={id ? `${id}-error` : undefined} className={'field-error'} role=\"alert\">\n {errorText}\n </span>\n )}\n {!errorText && helperText && (\n <span id={id ? `${id}-helper` : undefined} className={'field-helper'}>\n {helperText}\n </span>\n )}\n </div>\n )}\n </div>\n )\n})\n","import {forwardRef, useCallback, useMemo, useState} from 'react'\nimport type * as React from 'react'\nimport type {MInputIBANProps} from './MInputIBAN.types'\nimport {MInputGroup} from '../MInputGroup'\nimport {cn} from '../../../utils/cn'\nimport {ibanCountries, getIbanCountryLength, validateIBAN} from '../../../utils/validators'\nimport {formatIBAN, unformatIBAN} from '../../../utils/formatters'\nimport type {ValidationResult} from '../../../utils/validators'\nimport './MInputIBAN.css'\n\nfunction normalizeCountryCode(countryCode?: string): string {\n return (\n countryCode\n ?.replace(/[^a-zA-Z]/g, '')\n .toUpperCase()\n .slice(0, 2) || ''\n )\n}\n\nfunction getAccountDigitsCap(countryCode: string): number {\n const length = getIbanCountryLength(countryCode) ?? 28\n return Math.max(length - 2, 0)\n}\n\nfunction buildIbanPlaceholder(countryCode: string): string {\n const accountChars = getAccountDigitsCap(countryCode)\n const groups: string[] = []\n let remaining = accountChars\n\n while (remaining > 0) {\n const take = Math.min(4, remaining)\n groups.push('0'.repeat(take))\n remaining -= take\n }\n\n return groups.join(' ')\n}\n\n// Browser-level cap: account digits plus the spaces that formatIBAN inserts between 4-char groups.\nfunction getFormattedMaxLength(countryCode: string): number {\n const accountChars = getAccountDigitsCap(countryCode)\n if (accountChars === 0) return 0\n const spaces = Math.max(0, Math.ceil(accountChars / 4) - 1)\n return accountChars + spaces\n}\n\n// Extend the grouped input with country-aware IBAN formatting and checksum validation.\nexport const MInputIBAN = forwardRef<HTMLInputElement, MInputIBANProps>(function MInputIBAN(\n {\n countryCode,\n formatOnChange = true,\n validateOnBlur = true,\n onValidationChange,\n onValueChange,\n onCountryChange,\n onClear,\n value,\n defaultValue,\n onChange,\n onBlur,\n error,\n errorText,\n helperText,\n placeholder,\n className,\n disabled = false,\n ...rest\n },\n ref\n) {\n const [internalCountry, setInternalCountry] = useState(normalizeCountryCode(countryCode) || 'PL')\n const currentCountry = normalizeCountryCode(countryCode) || internalCountry\n\n const buildDisplayValue = useCallback(\n (raw: string, country: string): string => {\n const cleaned = unformatIBAN(raw)\n .replace(/[^0-9]/g, '')\n .slice(0, getAccountDigitsCap(country))\n if (!cleaned) return ''\n return formatOnChange ? formatIBAN(cleaned) : cleaned\n },\n [formatOnChange]\n )\n\n const [internalValue, setInternalValue] = useState(() =>\n buildDisplayValue(defaultValue?.toString() ?? '', normalizeCountryCode(countryCode) || 'PL')\n )\n const [validation, setValidation] = useState<ValidationResult>({valid: true})\n const [touched, setTouched] = useState(false)\n\n const currentValue = value !== undefined ? buildDisplayValue(value.toString(), currentCountry) : internalValue\n\n const resetValidation = useCallback(() => {\n setValidation({valid: true})\n setTouched(false)\n onValidationChange?.({valid: true})\n }, [onValidationChange])\n\n // Keep raw and formatted IBAN values aligned for consumers and display.\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const formatted = buildDisplayValue(e.target.value, currentCountry)\n\n if (value === undefined) {\n setInternalValue(formatted)\n }\n\n if (!formatted && (touched || !validation.valid)) {\n resetValidation()\n }\n\n onValueChange?.(unformatIBAN(formatted), formatted)\n onChange?.(e)\n },\n [buildDisplayValue, currentCountry, onChange, onValueChange, resetValidation, touched, validation.valid, value]\n )\n\n // Validate the normalized IBAN once the user leaves the field.\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setTouched(true)\n\n if (validateOnBlur && currentValue) {\n const fullIban = `${currentCountry}${unformatIBAN(currentValue)}`\n const result = validateIBAN(fullIban)\n setValidation(result)\n onValidationChange?.(result)\n }\n\n onBlur?.(e)\n },\n [currentCountry, currentValue, onBlur, onValidationChange, validateOnBlur]\n )\n\n // Reset both the displayed value and any error state when the clear button fires.\n const handleClear = useCallback(() => {\n if (value === undefined) setInternalValue('')\n resetValidation()\n onValueChange?.('', '')\n onClear?.()\n }, [onClear, onValueChange, resetValidation, value])\n\n // Switch the country code via the inline select.\n const handleCountrySelect = useCallback(\n (e: React.ChangeEvent<HTMLSelectElement>) => {\n const next = normalizeCountryCode(e.target.value)\n if (!next) return\n\n if (countryCode === undefined) {\n setInternalCountry(next)\n }\n\n const reformatted = buildDisplayValue(currentValue, next)\n if (value === undefined) {\n setInternalValue(reformatted)\n }\n onValueChange?.(unformatIBAN(reformatted), reformatted)\n\n onCountryChange?.(next)\n\n if (touched && reformatted) {\n const fullIban = `${next}${unformatIBAN(reformatted)}`\n const result = validateIBAN(fullIban)\n setValidation(result)\n onValidationChange?.(result)\n }\n },\n [\n buildDisplayValue,\n countryCode,\n currentValue,\n onCountryChange,\n onValidationChange,\n onValueChange,\n touched,\n value,\n ]\n )\n\n const isError = error || (touched && !validation.valid)\n const resolvedErrorText = errorText || (touched && !validation.valid ? validation.error : undefined)\n\n const countryOptions = useMemo(() => ibanCountries, [])\n const resolvedHelperText = resolvedErrorText\n ? undefined\n : (helperText ?? `Format: ${currentCountry} ${buildIbanPlaceholder(currentCountry)}`)\n\n return (\n <MInputGroup\n {...rest}\n ref={ref}\n type=\"text\"\n value={currentValue}\n onChange={handleChange}\n onBlur={handleBlur}\n onClear={handleClear}\n error={isError}\n errorText={resolvedErrorText}\n placeholder={placeholder ?? buildIbanPlaceholder(currentCountry)}\n helperText={resolvedHelperText}\n disabled={disabled}\n maxLength={getFormattedMaxLength(currentCountry)}\n prepend={\n <div className=\"country-select-wrap\">\n <select\n className=\"country-select\"\n value={currentCountry}\n onChange={handleCountrySelect}\n disabled={disabled}\n aria-label=\"IBAN country\"\n >\n {countryOptions.map((option) => (\n <option key={option} value={option}>\n {option}\n </option>\n ))}\n </select>\n </div>\n }\n className={cn('input-iban', className)}\n />\n )\n})\n","import {useState, useCallback, forwardRef} from 'react'\nimport type * as React from 'react'\nimport type {MInputTaxIdProps, MTaxIdType} from './MInputTaxId.types'\nimport {MInput} from '../MInput'\nimport {validateNIP, validatePESEL, validateREGON} from '../../../utils/validators'\nimport {formatNIP, stripNonDigits} from '../../../utils/formatters'\nimport type {ValidationResult} from '../../../utils/validators'\nimport {MCheckIcon, MIdCardIcon} from '../../../icons'\n\nconst VALIDATORS: Record<MTaxIdType, (v: string) => ValidationResult> = {\n NIP: validateNIP,\n PESEL: validatePESEL,\n REGON: validateREGON,\n}\n\nconst MAX_LENGTHS: Record<MTaxIdType, number> = {\n NIP: 13,\n PESEL: 11,\n REGON: 14,\n}\n\nconst PLACEHOLDERS: Record<MTaxIdType, string> = {\n NIP: '123-456-78-19',\n PESEL: '00000000000',\n REGON: '000000000',\n}\n\n// Extend the base input with NIP, PESEL and REGON formatting and validation.\nexport const MInputTaxId = forwardRef<HTMLInputElement, MInputTaxIdProps>(function MInputTaxId(\n {\n taxIdType,\n formatOnChange = true,\n validateOnBlur = true,\n showValidIcon = true,\n onValidationChange,\n onValueChange,\n value,\n defaultValue,\n onChange,\n onBlur,\n error,\n errorText,\n success,\n placeholder,\n ...rest\n },\n ref\n) {\n const [internalValue, setInternalValue] = useState(defaultValue?.toString() ?? '')\n const [validation, setValidation] = useState<ValidationResult>({valid: true})\n const [touched, setTouched] = useState(false)\n\n const currentValue = value !== undefined ? value.toString() : internalValue\n\n // Normalize the visible value based on the selected identifier type.\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const digits = stripNonDigits(e.target.value)\n const formatted = formatOnChange && taxIdType === 'NIP' ? formatNIP(digits) : digits\n\n if (value === undefined) {\n setInternalValue(formatted)\n }\n onValueChange?.(digits)\n onChange?.(e)\n },\n [onChange, value, formatOnChange, taxIdType, onValueChange]\n )\n\n // Validate the stripped numeric value against the active identifier rules.\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setTouched(true)\n if (validateOnBlur && currentValue) {\n const validator = VALIDATORS[taxIdType]\n const result = validator(stripNonDigits(currentValue))\n setValidation(result)\n onValidationChange?.(result)\n }\n onBlur?.(e)\n },\n [onBlur, validateOnBlur, currentValue, taxIdType, onValidationChange]\n )\n\n const isError = error || (touched && !validation.valid)\n const resolvedErrorText = errorText || (touched && !validation.valid ? validation.error : undefined)\n const isSuccess =\n !isError && (success !== undefined ? success : touched && validation.valid && currentValue.length > 0)\n\n const validIcon =\n showValidIcon && isSuccess ? (\n <span className=\"validation-icon\">\n <MCheckIcon />\n </span>\n ) : undefined\n\n return (\n <MInput\n {...rest}\n ref={ref}\n type=\"text\"\n inputMode=\"numeric\"\n value={currentValue}\n onChange={handleChange}\n onBlur={handleBlur}\n error={isError}\n errorText={resolvedErrorText}\n success={isSuccess}\n placeholder={placeholder ?? PLACEHOLDERS[taxIdType]}\n startIcon={<MIdCardIcon />}\n endIcon={validIcon}\n maxLength={MAX_LENGTHS[taxIdType]}\n />\n )\n})\n","import {useState, useCallback, useEffect, useLayoutEffect, useRef, forwardRef} from 'react'\nimport type * as React from 'react'\nimport type {MInputCurrencyProps} from './MInputCurrency.types'\nimport {MInput} from '../MInput'\nimport {cn} from '../../../utils/cn'\nimport {formatCurrency, parseCurrencyToNumber} from '../../../utils/formatters'\nimport './MInputCurrency.css'\n\n// Extend the base input with currency formatting and numeric callbacks.\nexport const MInputCurrency = forwardRef<HTMLInputElement, MInputCurrencyProps>(function MInputCurrency(\n {\n currency,\n currencySymbol,\n currencyPosition = 'end',\n decimalSeparator = ',',\n thousandSeparator = ' ',\n precision = 2,\n min,\n max,\n allowNegative = false,\n onValueChange,\n value,\n defaultValue,\n onChange,\n onBlur,\n placeholder = '0,00',\n startIcon,\n endIcon,\n className,\n ...rest\n },\n ref\n) {\n const symbol = currencySymbol ?? currency ?? ''\n\n // Turn anything the consumer may pass — a number, a machine string (`45.5`)\n // or an already formatted one (`1 234,50`) — into the display string.\n const toDisplay = useCallback(\n (input: string | number | null | undefined): string => {\n if (input === undefined || input === null || input === '') return ''\n const raw = typeof input === 'number' ? input.toFixed(precision) : String(input)\n const stripped = thousandSeparator ? raw.split(thousandSeparator).join('') : raw\n const num = parseCurrencyToNumber(stripped, '', decimalSeparator)\n if (num === null) return ''\n return formatCurrency(num.toFixed(precision), {decimalSeparator, thousandSeparator, precision})\n },\n [decimalSeparator, thousandSeparator, precision]\n )\n\n const toNumber = useCallback(\n (input: string | number | null | undefined): number | null => {\n if (input === undefined || input === null || input === '') return null\n if (typeof input === 'number') return Number.isNaN(input) ? null : input\n return parseCurrencyToNumber(input, thousandSeparator, decimalSeparator)\n },\n [thousandSeparator, decimalSeparator]\n )\n\n // The field keeps its own display buffer even when `value` is controlled.\n // Without it a half-typed amount (`45,`) round-trips through the consumer's\n // number state and comes back as `45`, which makes the decimals impossible\n // to type at all.\n const [display, setDisplay] = useState<string>(() => toDisplay(value !== undefined ? value : defaultValue))\n\n const inputRef = useRef<HTMLInputElement | null>(null)\n const caretRef = useRef<number | null>(null)\n\n const setRefs = useCallback(\n (node: HTMLInputElement | null) => {\n inputRef.current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) (ref as React.RefObject<HTMLInputElement | null>).current = node\n },\n [ref]\n )\n\n // Re-sync from a controlled `value` only when it disagrees numerically with\n // what is on screen, so typing is never interrupted by the round-trip.\n useEffect(() => {\n if (value === undefined) return\n if (toNumber(value) === toNumber(display)) return\n setDisplay(toDisplay(value))\n }, [value, display, toDisplay, toNumber])\n\n // Count the characters that carry meaning, ignoring the grouping separators\n // this component inserts — used to keep the caret where the user left it.\n const countSignificant = useCallback(\n (text: string, upTo: number): number => {\n let count = 0\n for (let i = 0; i < upTo && i < text.length; i++) {\n const ch = text[i]\n if ((ch >= '0' && ch <= '9') || ch === decimalSeparator || ch === '-') count++\n }\n return count\n },\n [decimalSeparator]\n )\n\n const caretForSignificant = useCallback(\n (text: string, significant: number): number => {\n if (significant <= 0) return 0\n let count = 0\n for (let i = 0; i < text.length; i++) {\n const ch = text[i]\n if ((ch >= '0' && ch <= '9') || ch === decimalSeparator || ch === '-') count++\n if (count === significant) return i + 1\n }\n return text.length\n },\n [decimalSeparator]\n )\n\n useLayoutEffect(() => {\n const caret = caretRef.current\n caretRef.current = null\n if (caret === null) return\n const node = inputRef.current\n if (!node || document.activeElement !== node) return\n node.setSelectionRange(caret, caret)\n }, [display])\n\n // Filter user input down to digits, one decimal separator and an optional\n // minus sign, then re-group it without swallowing what is still being typed.\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const raw = e.target.value\n const rawCaret = e.target.selectionStart ?? raw.length\n let filtered = ''\n let hasDecimal = false\n for (const ch of raw) {\n if (ch >= '0' && ch <= '9') {\n filtered += ch\n } else if ((ch === ',' || ch === '.') && !hasDecimal && precision > 0) {\n filtered += decimalSeparator\n hasDecimal = true\n } else if (ch === '-' && allowNegative && filtered.length === 0) {\n filtered += '-'\n }\n }\n\n const hasDigits = /\\d/.test(filtered)\n let next: string\n if (!hasDigits) {\n // Keep the transient states the user needs to pass through\n // (empty field, a lone minus) instead of snapping them to `0`.\n next = filtered.startsWith('-') ? '-' : ''\n } else {\n next = formatCurrency(filtered, {decimalSeparator, thousandSeparator, precision})\n // `formatCurrency` drops an empty fractional part, which would\n // eat the separator on the keystroke that opens the decimals.\n if (filtered.endsWith(decimalSeparator) && !next.includes(decimalSeparator)) {\n next += decimalSeparator\n }\n }\n\n caretRef.current = caretForSignificant(next, countSignificant(raw, rawCaret))\n setDisplay(next)\n onValueChange?.(parseCurrencyToNumber(next, thousandSeparator, decimalSeparator))\n onChange?.(e)\n },\n [\n onChange,\n decimalSeparator,\n thousandSeparator,\n precision,\n allowNegative,\n onValueChange,\n countSignificant,\n caretForSignificant,\n ]\n )\n\n // Clamp the numeric value on blur and snap it to the configured precision.\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n let num = parseCurrencyToNumber(display, thousandSeparator, decimalSeparator)\n if (num !== null) {\n if (min !== undefined && num < min) num = min\n if (max !== undefined && num > max) num = max\n const formatted = toDisplay(num)\n if (formatted !== display) {\n setDisplay(formatted)\n }\n onValueChange?.(num)\n } else if (display !== '') {\n setDisplay('')\n onValueChange?.(null)\n }\n onBlur?.(e)\n },\n [display, min, max, decimalSeparator, thousandSeparator, toDisplay, onValueChange, onBlur]\n )\n\n const symbolEl = symbol ? <span className=\"currency symbol\">{symbol}</span> : undefined\n\n return (\n <MInput\n {...rest}\n ref={setRefs}\n type=\"text\"\n inputMode=\"decimal\"\n value={display}\n onChange={handleChange}\n onBlur={handleBlur}\n placeholder={placeholder}\n startIcon={currencyPosition === 'start' ? symbolEl : startIcon}\n endIcon={currencyPosition === 'end' ? symbolEl : endIcon}\n className={cn('currency input', className)}\n />\n )\n})\n","import {useState, useCallback, useEffect, useRef, forwardRef} from 'react'\nimport type * as React from 'react'\nimport type {MInputDateProps} from './MInputDate.types'\nimport {MInput} from '../MInput'\nimport {stripNonDigits, formatDateInput} from '../../../utils/formatters'\nimport {validateDate, parseDateString} from '../../../utils/validators'\nimport type {ValidationResult} from '../../../utils/validators'\nimport {MCalendarIcon} from '../../../icons'\n\nconst FORMAT_PLACEHOLDER: Record<string, string> = {\n 'DD/MM/YYYY': 'DD{s}MM{s}YYYY',\n 'MM/DD/YYYY': 'MM{s}DD{s}YYYY',\n 'YYYY/MM/DD': 'YYYY{s}MM{s}DD',\n}\n\n// Specialized date input with auto-formatting, parsing and validation.\n// Displays in DD/MM/YYYY (or other format) and emits a Date object.\nexport const MInputDate = forwardRef<HTMLInputElement, MInputDateProps>(function MInputDate(\n {\n format = 'DD/MM/YYYY',\n separator = '/',\n minDate,\n maxDate,\n validateOnBlur = true,\n validateOnChange = false,\n onDateChange,\n onValidationChange,\n value,\n defaultValue,\n onChange,\n onBlur,\n onKeyDown,\n onClear,\n error,\n errorText,\n placeholder,\n className,\n ...rest\n },\n ref\n) {\n const [internalValue, setInternalValue] = useState(defaultValue?.toString() ?? '')\n const [validation, setValidation] = useState<ValidationResult>({valid: true})\n const [touched, setTouched] = useState(false)\n const internalChangeRef = useRef(false)\n\n const currentValue = value !== undefined ? value.toString() : internalValue\n\n useEffect(() => {\n if (internalChangeRef.current) {\n internalChangeRef.current = false\n return\n }\n\n if (!currentValue) {\n setValidation({valid: true})\n setTouched(false)\n return\n }\n\n setValidation(validateDate(currentValue, {format, minDate, maxDate}))\n }, [currentValue, format, maxDate, minDate])\n\n const runValidation = useCallback(\n (val: string) => {\n const result = validateDate(val, {format, minDate, maxDate})\n setValidation(result)\n onValidationChange?.(result)\n return result\n },\n [format, minDate, maxDate, onValidationChange]\n )\n\n const emitDate = useCallback(\n (formatted: string) => {\n const digits = stripNonDigits(formatted)\n if (digits.length === 8) {\n onDateChange?.(parseDateString(formatted, format), formatted)\n } else {\n onDateChange?.(null, formatted)\n }\n },\n [format, onDateChange]\n )\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const digits = stripNonDigits(e.target.value)\n if (digits.length > 8) return\n\n const formatted = formatDateInput(digits, format, separator)\n internalChangeRef.current = true\n\n if (value === undefined) {\n setInternalValue(formatted)\n }\n\n emitDate(formatted)\n\n if (validateOnChange && touched) {\n runValidation(formatted)\n }\n\n onChange?.(e)\n },\n [onChange, value, format, separator, validateOnChange, touched, runValidation, emitDate]\n )\n\n const handleClear = useCallback(() => {\n internalChangeRef.current = true\n if (value === undefined) {\n setInternalValue('')\n }\n setValidation({valid: true})\n setTouched(false)\n onDateChange?.(null, '')\n onClear?.()\n }, [value, onDateChange, onClear])\n\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setTouched(true)\n if (validateOnBlur && currentValue) {\n runValidation(currentValue)\n }\n onBlur?.(e)\n },\n [onBlur, validateOnBlur, currentValue, runValidation]\n )\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (['Backspace', 'Delete', 'Tab', 'ArrowLeft', 'ArrowRight', 'Home', 'End'].includes(e.key)) {\n onKeyDown?.(e)\n return\n }\n if (e.ctrlKey || e.metaKey) {\n onKeyDown?.(e)\n return\n }\n if (!/^\\d$/.test(e.key)) {\n e.preventDefault()\n }\n onKeyDown?.(e)\n },\n [onKeyDown]\n )\n\n const isError = error || (touched && !validation.valid)\n const resolvedErrorText = errorText || (touched && !validation.valid ? validation.error : undefined)\n\n return (\n <MInput\n {...rest}\n ref={ref}\n type=\"text\"\n inputMode=\"numeric\"\n value={currentValue}\n onChange={handleChange}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n onClear={handleClear}\n error={isError}\n errorText={resolvedErrorText}\n placeholder={placeholder ?? FORMAT_PLACEHOLDER[format].replace(/\\{s\\}/g, separator)}\n startIcon={<MCalendarIcon />}\n maxLength={10}\n className={className}\n />\n )\n})\n","import {forwardRef, useCallback, useState} from 'react'\nimport type * as React from 'react'\nimport type {MInputCreditCardProps} from './MInputCreditCard.types'\nimport {MInput} from '../MInput'\nimport {cn} from '../../../utils/cn'\nimport {detectCardBrand, formatCardNumber, stripCardNumber, validateCardNumber} from '../../../utils/creditCards'\nimport type {ValidationResult} from '../../../utils/validators'\nimport {MCheckIcon} from '../../../icons'\nimport './MInputCreditCard.css'\n\nfunction CardBrandBadge({value}: {value: string}) {\n const brand = detectCardBrand(value)\n\n return <span className={cn('credit-card-brand-badge', 'credit-brand', brand.brand)}>{brand.iconLabel}</span>\n}\n\n// Extend the base input with payment card detection, formatting and checksum validation.\nexport const MInputCreditCard = forwardRef<HTMLInputElement, MInputCreditCardProps>(function MInputCreditCard(\n {\n validateOnBlur = true,\n validateOnChange = false,\n showBrandIcon = true,\n showValidIcon = true,\n onValidationChange,\n onCardBrandChange,\n onValueChange,\n onClear,\n value,\n defaultValue,\n onChange,\n onBlur,\n error,\n errorText,\n success,\n placeholder = '4242 4242 4242 4242',\n className,\n ...rest\n },\n ref\n) {\n const [internalValue, setInternalValue] = useState(() => formatCardNumber(defaultValue?.toString() ?? ''))\n const [validation, setValidation] = useState<ValidationResult>({valid: true})\n const [touched, setTouched] = useState(false)\n\n const currentValue = value !== undefined ? formatCardNumber(value.toString()) : internalValue\n const runValidation = useCallback(\n (formattedValue: string) => {\n const result = validateCardNumber(formattedValue)\n setValidation(result)\n onValidationChange?.(result)\n return result\n },\n [onValidationChange]\n )\n\n // Keep the visible card number grouped while exposing raw digits to the caller.\n const handleChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const formattedValue = formatCardNumber(event.target.value)\n const nextBrand = detectCardBrand(formattedValue)\n\n if (value === undefined) {\n setInternalValue(formattedValue)\n }\n\n onCardBrandChange?.(nextBrand.brand)\n onValueChange?.(stripCardNumber(formattedValue), formattedValue, nextBrand.brand)\n\n if (validateOnChange && touched) {\n runValidation(formattedValue)\n }\n\n onChange?.(event)\n },\n [onCardBrandChange, onChange, onValueChange, runValidation, touched, validateOnChange, value]\n )\n\n // Validate after the user leaves the field so checksum feedback stays predictable.\n const handleBlur = useCallback(\n (event: React.FocusEvent<HTMLInputElement>) => {\n setTouched(true)\n\n if (validateOnBlur && currentValue) {\n runValidation(currentValue)\n }\n\n onBlur?.(event)\n },\n [currentValue, onBlur, runValidation, validateOnBlur]\n )\n\n // Reset validation state alongside the value when the clear button fires.\n const handleClear = useCallback(() => {\n if (value === undefined) setInternalValue('')\n setValidation({valid: true})\n setTouched(false)\n onValidationChange?.({valid: true})\n onValueChange?.('', '', 'unknown')\n onClear?.()\n }, [onClear, onValidationChange, onValueChange, value])\n\n const isError = error || (touched && !validation.valid)\n const resolvedErrorText = errorText || (touched && !validation.valid ? validation.error : undefined)\n const isSuccess =\n !isError && success !== undefined\n ? success\n : touched && validation.valid && stripCardNumber(currentValue).length > 0\n\n const validIcon =\n showValidIcon && isSuccess ? (\n <span className=\"credit valid validation-icon credit-card-valid-icon\" aria-hidden=\"true\">\n <MCheckIcon />\n </span>\n ) : undefined\n\n return (\n <MInput\n {...rest}\n ref={ref}\n type=\"text\"\n inputMode=\"numeric\"\n value={currentValue}\n onChange={handleChange}\n onBlur={handleBlur}\n onClear={handleClear}\n error={isError}\n errorText={resolvedErrorText}\n success={isSuccess}\n placeholder={placeholder}\n startIcon={showBrandIcon ? <CardBrandBadge value={currentValue} /> : undefined}\n endIcon={validIcon}\n className={cn('credit-card input', className)}\n />\n )\n})\n","import {forwardRef, useCallback, useMemo, useState} from 'react'\nimport type * as React from 'react'\nimport type {MInputPostCodeProps} from './MInputPostCode.types'\nimport {MInputGroup} from '../MInputGroup'\nimport {cn} from '../../../utils/cn'\nimport {formatPostCode, getPostCodeRule, postCodeCountries, validatePostCode} from '../../../utils/postalCodes'\nimport type {ValidationResult} from '../../../utils/validators'\nimport './MInputPostCode.css'\nimport {useMCommonTexts} from '../../../i18n/frameworkTexts'\n\n// Extend the grouped input with country-aware postal code masking and validation.\nexport const MInputPostCode = forwardRef<HTMLInputElement, MInputPostCodeProps>(function MInputPostCode(\n {\n country,\n defaultCountry = 'PL',\n selectableCountry = true,\n validateOnBlur = true,\n validateOnChange = false,\n onCountryChange,\n onValidationChange,\n onValueChange,\n onClear,\n value,\n defaultValue,\n onChange,\n onBlur,\n error,\n errorText,\n helperText,\n placeholder,\n className,\n disabled = false,\n ...rest\n },\n ref\n) {\n const texts = useMCommonTexts()\n const [internalCountry, setInternalCountry] = useState(defaultCountry.toUpperCase())\n const [internalValue, setInternalValue] = useState(() =>\n formatPostCode(defaultValue?.toString() ?? '', country ?? defaultCountry)\n )\n const [validation, setValidation] = useState<ValidationResult>({valid: true})\n const [touched, setTouched] = useState(false)\n\n const currentCountry = (country ?? internalCountry).toUpperCase()\n const currentRule = useMemo(() => getPostCodeRule(currentCountry), [currentCountry])\n const currentValue = value !== undefined ? formatPostCode(value.toString(), currentCountry) : internalValue\n\n const runValidation = useCallback(\n (formattedValue: string, nextCountry: string) => {\n const result = validatePostCode(formattedValue, nextCountry)\n setValidation(result)\n onValidationChange?.(result)\n return result\n },\n [onValidationChange]\n )\n\n // Keep the visible postal code aligned with the selected country rule.\n const handleChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const formattedValue = formatPostCode(event.target.value, currentCountry)\n\n if (value === undefined) {\n setInternalValue(formattedValue)\n }\n\n onValueChange?.(formattedValue.replace(/\\s|-/g, ''), formattedValue, currentCountry)\n\n if (validateOnChange && touched) {\n runValidation(formattedValue, currentCountry)\n }\n\n onChange?.(event)\n },\n [currentCountry, onChange, onValueChange, runValidation, touched, validateOnChange, value]\n )\n\n // Re-run validation after blur so the visible formatting and error state stay in sync.\n const handleBlur = useCallback(\n (event: React.FocusEvent<HTMLInputElement>) => {\n setTouched(true)\n\n if (validateOnBlur && currentValue) {\n runValidation(currentValue, currentCountry)\n }\n\n onBlur?.(event)\n },\n [currentCountry, currentValue, onBlur, runValidation, validateOnBlur]\n )\n\n // Reset validation state alongside the value when the clear button fires.\n const handleClear = useCallback(() => {\n if (value === undefined) setInternalValue('')\n setValidation({valid: true})\n setTouched(false)\n onValidationChange?.({valid: true})\n onValueChange?.('', '', currentCountry)\n onClear?.()\n }, [onClear, onValidationChange, onValueChange, value, currentCountry])\n\n // Switch the formatter and validation rule whenever the selected country changes.\n const handleCountryChange = useCallback(\n (event: React.ChangeEvent<HTMLSelectElement>) => {\n const nextCountry = event.target.value.toUpperCase()\n const formattedValue = formatPostCode(currentValue, nextCountry)\n\n if (country === undefined) {\n setInternalCountry(nextCountry)\n }\n\n if (value === undefined) {\n setInternalValue(formattedValue)\n }\n\n onCountryChange?.(nextCountry)\n\n if (touched) {\n runValidation(formattedValue, nextCountry)\n }\n },\n [country, currentValue, onCountryChange, runValidation, touched, value]\n )\n\n const isError = error || (touched && !validation.valid)\n const resolvedErrorText = errorText || (touched && !validation.valid ? validation.error : undefined)\n\n return (\n <MInputGroup\n {...rest}\n ref={ref}\n type=\"text\"\n inputMode={currentRule.inputMode}\n value={currentValue}\n onChange={handleChange}\n onBlur={handleBlur}\n onClear={handleClear}\n error={isError}\n errorText={resolvedErrorText}\n helperText={resolvedErrorText ? undefined : (helperText ?? `Format: ${currentRule.example}`)}\n placeholder={selectableCountry ? currentRule.placeholder : (placeholder ?? currentRule.placeholder)}\n maxLength={currentRule.maxLength}\n disabled={disabled}\n prepend={\n selectableCountry ? (\n <div className=\"country-select-wrap\">\n <select\n className=\"country-select\"\n value={currentCountry}\n onChange={handleCountryChange}\n disabled={disabled}\n aria-label={texts.postalCodeCountry}\n >\n {postCodeCountries.map((option) => (\n <option key={option.value} value={option.value}>\n {option.value}\n </option>\n ))}\n </select>\n </div>\n ) : (\n {type: 'text', content: currentCountry}\n )\n }\n className={cn('input-post-code', className)}\n />\n )\n})\n","import {useState, useCallback, useRef, useEffect, forwardRef} from 'react'\nimport type * as React from 'react'\nimport type {MInputOTPProps} from './MInputOTP.types'\nimport {cn} from '../../../utils/cn'\nimport {MCloseIcon} from '../../../icons'\nimport './MInputOTP.css'\nimport {useMCommonTexts, formatMText} from '../../../i18n/frameworkTexts'\n\nexport const MInputOTP = forwardRef<HTMLDivElement, MInputOTPProps>(function MInputOTP(\n {\n length = 6,\n value,\n onChange,\n autoFocus = false,\n disabled = false,\n color = 'primary',\n size = 'md',\n error = false,\n errorText,\n clearable = false,\n label,\n onClear,\n className,\n ...rest\n },\n ref\n) {\n const texts = useMCommonTexts()\n const [internalValue, setInternalValue] = useState('')\n const currentValue = value !== undefined ? value : internalValue\n const inputsRef = useRef<(HTMLInputElement | null)[]>([])\n const resolvedColorClass = error ? 'color-error' : `color-${color}`\n\n const updateValue = useCallback(\n (newVal: string) => {\n if (value === undefined) setInternalValue(newVal)\n onChange?.(newVal)\n },\n [value, onChange]\n )\n\n const focusSlot = useCallback(\n (index: number) => {\n const clamped = Math.max(0, Math.min(index, length - 1))\n inputsRef.current[clamped]?.focus()\n },\n [length]\n )\n\n useEffect(() => {\n if (autoFocus) focusSlot(0)\n }, [autoFocus, focusSlot])\n\n const handleInput = useCallback(\n (index: number, char: string) => {\n if (!/^\\d$/.test(char)) return\n const chars = currentValue.split('')\n while (chars.length <= index) chars.push('')\n chars[index] = char\n updateValue(chars.join(''))\n if (index < length - 1) focusSlot(index + 1)\n },\n [currentValue, length, updateValue, focusSlot]\n )\n\n const handleKeyDown = useCallback(\n (index: number, e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Backspace') {\n e.preventDefault()\n const chars = currentValue.split('')\n if (chars[index]) {\n chars[index] = ''\n updateValue(chars.join(''))\n } else if (index > 0) {\n chars[index - 1] = ''\n updateValue(chars.join(''))\n focusSlot(index - 1)\n }\n } else if (e.key === 'ArrowLeft') {\n e.preventDefault()\n if (index > 0) focusSlot(index - 1)\n } else if (e.key === 'ArrowRight') {\n e.preventDefault()\n if (index < length - 1) focusSlot(index + 1)\n }\n },\n [currentValue, length, updateValue, focusSlot]\n )\n\n const handlePaste = useCallback(\n (e: React.ClipboardEvent) => {\n e.preventDefault()\n const pasted = e.clipboardData.getData('text').replace(/\\D/g, '').slice(0, length)\n if (pasted) {\n updateValue(pasted)\n focusSlot(Math.min(pasted.length, length - 1))\n }\n },\n [length, updateValue, focusSlot]\n )\n\n const handleClear = useCallback(() => {\n updateValue('')\n onClear?.()\n focusSlot(0)\n }, [focusSlot, onClear, updateValue])\n\n return (\n <div\n ref={ref}\n className={cn('otp input', resolvedColorClass, size, disabled && 'disabled', className)}\n {...rest}\n >\n {label && <div className=\"otp label\">{label}</div>}\n <div className=\"otp control\">\n <div className=\"otp slots\" onPaste={handlePaste}>\n {Array.from({length}, (_, i) => (\n <input\n key={i}\n ref={(el) => {\n inputsRef.current[i] = el\n }}\n type=\"text\"\n inputMode=\"numeric\"\n maxLength={1}\n value={currentValue[i] || ''}\n disabled={disabled}\n className={cn('otp slot', currentValue[i] && 'filled')}\n aria-label={formatMText(texts.digitNumber, {index: i + 1})}\n onChange={(e) => {\n const char = e.target.value.slice(-1)\n handleInput(i, char)\n }}\n onKeyDown={(e) => handleKeyDown(i, e)}\n onFocus={(e) => e.target.select()}\n />\n ))}\n </div>\n {clearable && currentValue.length > 0 && !disabled && (\n <button\n type=\"button\"\n className=\"otp clear clear-btn-base\"\n onClick={handleClear}\n aria-label={texts.clearCode}\n >\n <MCloseIcon />\n </button>\n )}\n </div>\n {error && errorText && <div className=\"otp error\">{errorText}</div>}\n </div>\n )\n})\n","import {useState, useCallback, forwardRef} from 'react'\nimport type * as React from 'react'\nimport type {MInputSliderProps} from './MInputSlider.types'\nimport {MSlider} from '../../controls'\nimport {cn} from '../../../utils/cn'\nimport './MInputSlider.css'\n\nfunction clampValue(val: number, min: number, max: number): number {\n return Math.min(max, Math.max(min, val))\n}\n\nfunction roundToPrecision(val: number, precision: number): number {\n const factor = Math.pow(10, precision)\n return Math.round(val * factor) / factor\n}\n\nexport const MInputSlider = forwardRef<HTMLDivElement, MInputSliderProps>(function MInputSlider(\n {\n min = 0,\n max = 100,\n step = 1,\n value,\n onChange,\n precision = 0,\n marks,\n showInput = true,\n color = 'primary',\n size = 'md',\n disabled = false,\n label,\n className,\n ...rest\n },\n ref\n) {\n const [internalValue, setInternalValue] = useState(min)\n const currentValue = value !== undefined ? value : internalValue\n\n const update = useCallback(\n (newVal: number) => {\n const clamped = roundToPrecision(clampValue(newVal, min, max), precision)\n if (value === undefined) setInternalValue(clamped)\n onChange?.(clamped)\n },\n [min, max, precision, value, onChange]\n )\n\n const handleSliderChange = useCallback((val: number) => update(val), [update])\n\n const handleInputChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const raw = e.target.value\n if (raw === '' || raw === '-') return\n const num = parseFloat(raw)\n if (!isNaN(num)) update(num)\n },\n [update]\n )\n\n const handleBlur = useCallback(() => {\n update(currentValue)\n }, [currentValue, update])\n\n return (\n <div ref={ref} className={cn('slider input', size, disabled && 'disabled', className)} {...rest}>\n {label && <div className=\"slider label\">{label}</div>}\n <div className=\"slider row\">\n <MSlider\n min={min}\n max={max}\n step={step}\n value={currentValue}\n onChange={handleSliderChange}\n marks={marks}\n color={color}\n disabled={disabled}\n />\n {showInput && (\n <input\n type=\"text\"\n inputMode=\"decimal\"\n className={cn('slider field', `color-${color}`)}\n value={currentValue}\n onChange={handleInputChange}\n onBlur={handleBlur}\n disabled={disabled}\n aria-label={label || 'MSlider value'}\n />\n )}\n </div>\n </div>\n )\n})\n","import {useState, useRef, useCallback, useEffect} from 'react'\nimport type * as React from 'react'\nimport type {MInputFileCropShape} from './MInputFile.types'\nimport {MButton, MSlider} from '../../controls'\nimport {MZoomInIcon} from '../../../icons'\nimport './MCropEditor.css'\n\ninterface MCropEditorProps {\n file: File\n shape: MInputFileCropShape\n outputSize: number\n quality: number\n onCrop: (cropped: File) => void\n onCancel: () => void\n}\n\nexport function MCropEditor({file, shape, outputSize, quality, onCrop, onCancel}: MCropEditorProps) {\n const canvasRef = useRef<HTMLCanvasElement>(null)\n const containerRef = useRef<HTMLDivElement>(null)\n const imgRef = useRef<HTMLImageElement | null>(null)\n const [imgSrc, setImgSrc] = useState('')\n const [scale, setScale] = useState(1)\n const [offset, setOffset] = useState({x: 0, y: 0})\n const [dragging, setDragging] = useState(false)\n const dragStart = useRef({x: 0, y: 0, ox: 0, oy: 0})\n\n useEffect(() => {\n const url = URL.createObjectURL(file)\n setImgSrc(url)\n return () => URL.revokeObjectURL(url)\n }, [file])\n\n useEffect(() => {\n if (!imgSrc) return\n const img = new Image()\n img.onload = () => {\n imgRef.current = img\n const minDim = Math.min(img.width, img.height)\n const containerSize = 280\n const initialScale = containerSize / minDim\n setScale(initialScale)\n setOffset({\n x: (containerSize - img.width * initialScale) / 2,\n y: (containerSize - img.height * initialScale) / 2,\n })\n }\n img.src = imgSrc\n }, [imgSrc])\n\n const handlePointerDown = useCallback(\n (e: React.PointerEvent) => {\n e.preventDefault()\n setDragging(true)\n dragStart.current = {x: e.clientX, y: e.clientY, ox: offset.x, oy: offset.y}\n ;(e.target as HTMLElement).setPointerCapture(e.pointerId)\n },\n [offset]\n )\n\n const handlePointerMove = useCallback(\n (e: React.PointerEvent) => {\n if (!dragging) return\n setOffset({\n x: dragStart.current.ox + (e.clientX - dragStart.current.x),\n y: dragStart.current.oy + (e.clientY - dragStart.current.y),\n })\n },\n [dragging]\n )\n\n const handlePointerUp = useCallback(() => {\n setDragging(false)\n }, [])\n\n const handleWheel = useCallback(\n (e: React.WheelEvent) => {\n e.preventDefault()\n const containerSize = 280\n const cx = containerSize / 2\n const cy = containerSize / 2\n\n const delta = e.deltaY > 0 ? 0.95 : 1.05\n const newScale = Math.max(0.1, Math.min(scale * delta, 10))\n\n setOffset({\n x: cx - (cx - offset.x) * (newScale / scale),\n y: cy - (cy - offset.y) * (newScale / scale),\n })\n setScale(newScale)\n },\n [scale, offset]\n )\n\n const handleSliderChange = useCallback(\n (newScale: number) => {\n const containerSize = 280\n const cx = containerSize / 2\n const cy = containerSize / 2\n\n setOffset({\n x: cx - (cx - offset.x) * (newScale / scale),\n y: cy - (cy - offset.y) * (newScale / scale),\n })\n setScale(newScale)\n },\n [scale, offset]\n )\n\n const exportCrop = useCallback(() => {\n const img = imgRef.current\n const canvas = canvasRef.current\n if (!img || !canvas) return\n\n const containerSize = 280\n canvas.width = outputSize\n canvas.height = outputSize\n const ctx = canvas.getContext('2d')\n if (!ctx) return\n\n const ratio = outputSize / containerSize\n\n if (shape === 'circle') {\n ctx.beginPath()\n ctx.arc(outputSize / 2, outputSize / 2, outputSize / 2, 0, Math.PI * 2)\n ctx.closePath()\n ctx.clip()\n }\n\n ctx.drawImage(img, offset.x * ratio, offset.y * ratio, img.width * scale * ratio, img.height * scale * ratio)\n\n canvas.toBlob(\n (blob) => {\n if (!blob) return\n const ext = file.name.replace(/.*\\./, '')\n const name = file.name.replace(/\\.[^.]+$/, '') + '_cropped.' + ext\n const cropped = new File([blob], name, {type: blob.type})\n onCrop(cropped)\n },\n file.type.startsWith('image/png') ? 'image/png' : 'image/jpeg',\n quality\n )\n }, [file, offset, scale, outputSize, quality, shape, onCrop])\n\n // Convert scale to 0-100 range for MSlider and back\n const sliderValue = Math.round(((scale - 0.1) / (5 - 0.1)) * 100)\n\n const handleSliderValueChange = useCallback(\n (value: number) => {\n const newScale = 0.1 + (value / 100) * (5 - 0.1)\n handleSliderChange(newScale)\n },\n [handleSliderChange]\n )\n\n return (\n <div className=\"crop editor\">\n <div className=\"crop hint\" role=\"note\">\n Drag the image to reposition, scroll or use the slider to zoom, then click <strong>Apply</strong> to\n confirm the crop.\n </div>\n <div\n ref={containerRef}\n className={`crop viewport ${shape}`}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n onWheel={handleWheel}\n >\n {imgSrc && (\n <img\n src={imgSrc}\n alt=\"\"\n className=\"crop image\"\n draggable={false}\n style={{\n transform: `translate(${offset.x}px, ${offset.y}px) scale(${scale})`,\n transformOrigin: '0 0',\n }}\n />\n )}\n <div className={`crop overlay ${shape}`} />\n </div>\n\n <div className=\"crop zoom\">\n <MZoomInIcon className=\"crop zoom icon\" aria-hidden=\"true\" />\n <MSlider\n min={0}\n max={100}\n step={1}\n value={sliderValue}\n onChange={handleSliderValueChange}\n color=\"primary\"\n className=\"crop zoom slider\"\n />\n </div>\n\n <div className=\"crop actions\">\n <MButton variant=\"ghost\" size=\"sm\" color=\"neutral\" onClick={onCancel}>\n Cancel\n </MButton>\n <MButton variant=\"filled\" size=\"sm\" color=\"primary\" onClick={exportCrop}>\n Apply\n </MButton>\n </div>\n\n <canvas ref={canvasRef} style={{display: 'none'}} />\n </div>\n )\n}\n","import {useState, useCallback, useRef, useMemo, useEffect, forwardRef} from 'react'\nimport type * as React from 'react'\nimport type {MInputFileProps, MInputFileCropOptions} from './MInputFile.types'\nimport {MCropEditor} from './MCropEditor'\nimport {cn} from '../../../utils/cn'\nimport {\n MCloseIcon,\n MFileArchiveIcon,\n MFileCodeIcon,\n MFileDocsIcon,\n MFileExeIcon,\n MFileIcon,\n MFileImageIcon,\n MFileJsonIcon,\n MFileMdIcon,\n MFileMp3Icon,\n MFileMp4Icon,\n MFileOdtIcon,\n MFilePdfIcon,\n MFileTextIcon,\n MFileXlsIcon,\n MFileZipIcon,\n MUploadIcon,\n} from '../../../icons'\nimport './MInputFile.css'\nimport {useMCommonTexts, formatMText} from '../../../i18n/frameworkTexts'\n\nfunction formatSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`\n}\n\nfunction fileExtension(name: string): string {\n const dot = name.lastIndexOf('.')\n return dot >= 0 ? name.slice(dot + 1).toUpperCase() : ''\n}\n\nfunction isImage(file: File): boolean {\n return file.type.startsWith('image/')\n}\n\nfunction FileTypeIcon({ext}: {ext: string}) {\n const name = ext.toLowerCase()\n\n if (name === 'pdf') return <MFilePdfIcon className=\"file type icon\" aria-hidden=\"true\" />\n if (['png', 'jpg', 'jpeg', 'gif', 'webp', 'svg'].includes(name)) {\n return <MFileImageIcon className=\"file type icon\" aria-hidden=\"true\" />\n }\n if (['json'].includes(name)) return <MFileJsonIcon className=\"file type icon\" aria-hidden=\"true\" />\n if (['js', 'jsx', 'ts', 'tsx', 'html', 'css', 'php', 'xml'].includes(name)) {\n return <MFileCodeIcon className=\"file type icon\" aria-hidden=\"true\" />\n }\n if (['txt'].includes(name)) return <MFileTextIcon className=\"file type icon\" aria-hidden=\"true\" />\n if (['md'].includes(name)) return <MFileMdIcon className=\"file type icon\" aria-hidden=\"true\" />\n if (['docs', 'doc', 'docx'].includes(name)) return <MFileDocsIcon className=\"file type icon\" aria-hidden=\"true\" />\n if (['odt'].includes(name)) return <MFileOdtIcon className=\"file type icon\" aria-hidden=\"true\" />\n if (['csv', 'xls', 'xlsx'].includes(name)) return <MFileXlsIcon className=\"file type icon\" aria-hidden=\"true\" />\n if (['zip'].includes(name)) return <MFileZipIcon className=\"file type icon\" aria-hidden=\"true\" />\n if (['rar', '7z', 'tar', 'gz'].includes(name))\n return <MFileArchiveIcon className=\"file type icon\" aria-hidden=\"true\" />\n if (['mp3', 'wav', 'ogg'].includes(name)) return <MFileMp3Icon className=\"file type icon\" aria-hidden=\"true\" />\n if (['mp4', 'mov', 'avi', 'mkv', 'webm'].includes(name)) {\n return <MFileMp4Icon className=\"file type icon\" aria-hidden=\"true\" />\n }\n if (['exe', 'msi', 'bat'].includes(name)) return <MFileExeIcon className=\"file type icon\" aria-hidden=\"true\" />\n\n return <MFileIcon className=\"file type icon\" aria-hidden=\"true\" />\n}\n\nexport const MInputFile = forwardRef<HTMLDivElement, MInputFileProps>(function MInputFile(\n {\n accept,\n multiple = false,\n maxSize,\n maxFiles,\n onChange,\n label,\n helperText,\n errorText,\n error = false,\n disabled = false,\n color = 'primary',\n size = 'md',\n preview = true,\n clearable = false,\n icon,\n placeholder = 'Drop files here or click to browse',\n dropText = 'Drop files here',\n fullWidth = false,\n crop,\n onClear,\n className,\n ...rest\n },\n ref\n) {\n const texts = useMCommonTexts()\n const [dragging, setDragging] = useState(false)\n const [files, setFiles] = useState<File[]>([])\n const [fileError, setFileError] = useState('')\n const [cropFile, setCropFile] = useState<File | null>(null)\n const inputRef = useRef<HTMLInputElement>(null)\n const dragCounter = useRef(0)\n\n const cropOptions: MInputFileCropOptions | null = crop\n ? typeof crop === 'boolean'\n ? {shape: 'square', outputSize: 256, quality: 0.92}\n : {shape: crop.shape ?? 'square', outputSize: crop.outputSize ?? 256, quality: crop.quality ?? 0.92}\n : null\n\n const objectUrls = useMemo(() => {\n return files.map((f) => (isImage(f) ? URL.createObjectURL(f) : null))\n }, [files])\n\n useEffect(() => {\n return () => {\n objectUrls.forEach((url) => {\n if (url) URL.revokeObjectURL(url)\n })\n }\n }, [objectUrls])\n\n const processFiles = useCallback(\n (incoming: FileList | File[]) => {\n let accepted = Array.from(incoming)\n\n if (accept) {\n const patterns = accept.split(',').map((s) => s.trim().toLowerCase())\n accepted = accepted.filter((f) => {\n const ext = '.' + f.name.split('.').pop()?.toLowerCase()\n const mime = f.type.toLowerCase()\n return patterns.some(\n (p) => p === ext || p === mime || (p.endsWith('/*') && mime.startsWith(p.slice(0, -1)))\n )\n })\n }\n\n if (maxSize) {\n const oversized = accepted.filter((f) => f.size > maxSize)\n if (oversized.length) {\n setFileError(`Max file size: ${formatSize(maxSize)}`)\n return\n }\n }\n\n if (maxFiles && accepted.length > maxFiles) {\n setFileError(`Max ${maxFiles} file${maxFiles > 1 ? 's' : ''}`)\n return\n }\n\n setFileError('')\n\n if (cropOptions && accepted.length === 1 && isImage(accepted[0])) {\n setCropFile(accepted[0])\n return\n }\n\n setFiles(accepted)\n onChange?.(accepted)\n },\n [accept, maxSize, maxFiles, onChange, cropOptions]\n )\n\n const handleCropDone = useCallback(\n (cropped: File) => {\n setCropFile(null)\n setFiles([cropped])\n onChange?.([cropped])\n },\n [onChange]\n )\n\n const handleCropCancel = useCallback(() => {\n setCropFile(null)\n }, [])\n\n const handleDragEnter = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault()\n e.stopPropagation()\n if (disabled) return\n dragCounter.current++\n setDragging(true)\n },\n [disabled]\n )\n\n const handleDragLeave = useCallback((e: React.DragEvent) => {\n e.preventDefault()\n e.stopPropagation()\n dragCounter.current--\n if (dragCounter.current <= 0) {\n dragCounter.current = 0\n setDragging(false)\n }\n }, [])\n\n const handleDragOver = useCallback((e: React.DragEvent) => {\n e.preventDefault()\n e.stopPropagation()\n }, [])\n\n const handleDrop = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault()\n e.stopPropagation()\n dragCounter.current = 0\n setDragging(false)\n if (disabled) return\n if (e.dataTransfer.files.length) {\n processFiles(e.dataTransfer.files)\n }\n },\n [disabled, processFiles]\n )\n\n const handleClick = useCallback(() => {\n if (!disabled) inputRef.current?.click()\n }, [disabled])\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n if (e.target.files?.length) {\n processFiles(e.target.files)\n }\n },\n [processFiles]\n )\n\n const removeFile = useCallback(\n (index: number) => {\n const url = objectUrls[index]\n if (url) URL.revokeObjectURL(url)\n const next = files.filter((_, i) => i !== index)\n setFiles(next)\n onChange?.(next)\n },\n [files, objectUrls, onChange]\n )\n\n const clearFiles = useCallback(() => {\n objectUrls.forEach((url) => {\n if (url) URL.revokeObjectURL(url)\n })\n setCropFile(null)\n setFiles([])\n setFileError('')\n if (inputRef.current) {\n inputRef.current.value = ''\n }\n onChange?.([])\n onClear?.()\n }, [objectUrls, onChange, onClear])\n\n const displayError = errorText || fileError\n const hasError = error || !!fileError\n const resolvedColorClass = hasError ? 'color-error' : `color-${color}`\n\n return (\n <div\n ref={ref}\n className={cn(\n 'file input',\n resolvedColorClass,\n size,\n fullWidth && 'full-width',\n disabled && 'disabled',\n className\n )}\n {...rest}\n >\n {(label || (clearable && files.length > 0 && !disabled)) && (\n <div className=\"file header\">\n {label && <div className=\"file label\">{label}</div>}\n {clearable && files.length > 0 && !disabled && (\n <button\n type=\"button\"\n className=\"file clear clear-btn-base\"\n onClick={clearFiles}\n aria-label={texts.clearFiles}\n >\n <MCloseIcon aria-hidden=\"true\" />\n </button>\n )}\n </div>\n )}\n\n <div\n className={cn('file dropzone', dragging && 'dragging', hasError && 'error')}\n onClick={handleClick}\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n handleClick()\n }\n }}\n aria-label={label || placeholder}\n >\n <input\n ref={inputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n onChange={handleChange}\n tabIndex={-1}\n className=\"file hidden\"\n />\n\n <div className=\"file content\">\n {icon && <div className=\"file icon\">{icon}</div>}\n {!icon && <MUploadIcon className=\"file icon default\" aria-hidden=\"true\" />}\n <div className=\"file text\">{dragging ? dropText : placeholder}</div>\n {accept && <div className=\"file accept\">{accept}</div>}\n </div>\n </div>\n\n {cropFile && cropOptions && (\n <MCropEditor\n file={cropFile}\n shape={cropOptions.shape!}\n outputSize={cropOptions.outputSize!}\n quality={cropOptions.quality!}\n onCrop={handleCropDone}\n onCancel={handleCropCancel}\n />\n )}\n\n {helperText && !hasError && <div className=\"file helper\">{helperText}</div>}\n {hasError && displayError && <div className=\"file error\">{displayError}</div>}\n\n {preview && files.length > 0 && !cropFile && (\n <div className=\"file preview\">\n {files.map((file, i) => (\n <div key={`${file.name}-${i}`} className=\"file item\">\n <div className=\"file thumb\">\n {objectUrls[i] ? (\n <img src={objectUrls[i]!} alt={file.name} className=\"file image\" />\n ) : (\n <FileTypeIcon ext={fileExtension(file.name)} />\n )}\n </div>\n <div className=\"file info\">\n <span className=\"file name\">{file.name}</span>\n <span className=\"file size\">{formatSize(file.size)}</span>\n </div>\n <button\n type=\"button\"\n className=\"file remove\"\n onClick={(e) => {\n e.stopPropagation()\n removeFile(i)\n }}\n aria-label={formatMText(texts.removeItem, {name: file.name})}\n >\n <MCloseIcon aria-hidden=\"true\" />\n </button>\n </div>\n ))}\n </div>\n )}\n </div>\n )\n})\n"],"mappings":"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"}
|
package/dist/layout-BMggJ_qO.cjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const e=require(`./theme-CJuqObWL.cjs`),t=require(`./icons-D3n9-919.cjs`),n=require(`./cn-CU5TNITO.cjs`),r=require(`./layoutProps-Ck4VtGm9.cjs`),i=require(`./MSurface-BjE-mL1L.cjs`),a=require(`./MLink-Dk_ReE6i.cjs`),o=require(`./MButton-CnAr77Za.cjs`),s=require(`./MButtonGroup-DO1Tq3Za.cjs`),c=require(`./frameworkTexts-BSXUtXOp.cjs`),l=require(`./MSimpleGrid-BchGYPMi.cjs`),u=require(`./MTooltip-BAgHlv5I.cjs`),d=require(`./MDropdownMenu-DnKcCyW6.cjs`);require(`./core-w629c4ND.cjs`);let f=require(`react`),p=require(`react/jsx-runtime`);function m({size:t=`content`,padded:i=!0,hidden:a,spacing:o,padding:s,fsize:c,mt:l,mb:u,ml:d,mr:f,mx:m,my:h,pt:g,pb:_,pl:v,pr:y,px:b,py:x,fullWidth:S,className:C,style:w,children:T,...E}){let D=r.n({fsize:c});return(0,p.jsx)(`div`,{className:n.t(`container`,t,i&&`padded`,...r.t({spacing:o,padding:s,fsize:c,mt:l,mb:u,ml:d,mr:f,mx:m,my:h,pt:g,pb:_,pl:v,pr:y,px:b,py:x,fullWidth:S}),C),style:{...D,...w},...e.r(a),...E,children:T})}function h({container:t=`wide`,padded:r=!0,bordered:i=!0,sticky:a=!1,tone:o=`surface`,layout:s=`split`,hidden:c,className:l,children:u,...d}){return(0,p.jsx)(`header`,{className:n.t(`header`,o,i&&`bordered`,a&&`sticky`,l),...e.r(c),...d,children:(0,p.jsx)(m,{size:t,padded:r,className:n.t(`inner`,`layout-${s}`),children:u})})}function g({container:t=`wide`,padded:i=!0,bordered:a=!0,tone:o=`surface`,hidden:s,spacing:c,padding:l,fsize:u,mt:d,mb:f,ml:h,mr:g,mx:_,my:v,pt:y,pb:b,pl:x,pr:S,px:C,py:w,fullWidth:T,className:E,style:D,children:O,...k}){let A=r.n({fsize:u});return(0,p.jsx)(`footer`,{className:n.t(`footer`,o,a&&`bordered`,...r.t({spacing:c,padding:l,fsize:u,mt:d,mb:f,ml:h,mr:g,mx:_,my:v,pt:y,pb:b,pl:x,pr:S,px:C,py:w,fullWidth:T}),E),style:{...A,...D},...e.r(s),...k,children:(0,p.jsx)(m,{size:t,padded:i,className:`inner`,fullWidth:!0,children:O})})}function _({items:e,orientation:t=`horizontal`,wrap:r=!1,className:i,children:o,...s}){return(0,p.jsx)(`div`,{className:n.t(`navs`,t,r&&`wrap`,i),...s,children:e?e.map(e=>{let t=e.icon,r=e.iconOnly===!0&&t!=null,i=typeof e.label==`string`?e.label:void 0,o=r?i:void 0,s=e.title??(r?i:void 0);return(0,p.jsxs)(a.t,{component:e.component,href:e.href,to:e.to,target:e.target,rel:e.rel,title:s,current:e.current,disabled:e.disabled,className:n.t(`link`,r&&`icon-only`,e.className),"aria-label":o,children:[t?(0,p.jsx)(`span`,{className:`icon`,"aria-hidden":!r||void 0,children:(0,p.jsx)(t,{size:e.iconSize})}):null,r?null:e.label]},e.key??e.href??e.title?.toString()??i??``)}):o})}function v(e,t=[]){return f.Children.forEach(e,e=>{if(!(0,f.isValidElement)(e))return;if(e.type===_){t.push(e);return}let n=e.props?.children;n!==void 0&&v(n,t)}),t}function y({container:r=`content`,padded:a=!0,bordered:s=!0,sticky:c=!1,tone:l=`surface`,justify:u=`between`,wrap:d=!1,mobileMenu:h=`dropdown`,mobileMenuContent:g,mobileMenuFooter:_,collapseActions:y=!1,mobileMenuLabel:b=`Open navigation`,mobileBreakpoint:x=e.n.compact,hidden:S,className:C,children:w,...T}){let[E,D]=(0,f.useState)(!1),O=(0,f.useRef)(null),k=(0,f.useId)(),A=e.i(x),j=f.Children.toArray(w),M=v(w).map((e,t)=>(0,f.cloneElement)(e,{key:`mnavbar-mobile-navs-${t}`,orientation:`vertical`})),N=(0,p.jsx)(o.t,{type:`button`,variant:`ghost`,size:`md`,shape:`circle`,iconOnly:!0,className:`navbar-toggle`,"aria-label":b,"aria-expanded":E,"aria-controls":k,onClick:B,children:(0,p.jsx)(t.Zn,{})},`mnavbar-toggle`),P=-1;for(let e=j.length-1;e>=0;--e){let t=j[e];if((0,f.isValidElement)(t)&&t.type===i.n){P=e;break}}let F=y&&A&&P!==-1,I=null,L=j,R=P;if(F){I=j[P],L=j.filter((e,t)=>t!==P),R=-1;for(let e=L.length-1;e>=0;--e){let t=L[e];if((0,f.isValidElement)(t)&&t.type===i.n){R=e;break}}}let z=R===-1?[...L,N]:L.map((e,t)=>{if(t!==R)return e;let n=e,r=f.Children.toArray(n.props.children);return(0,f.cloneElement)(n,{key:n.key??`mnavbar-inline-${t}`,children:[...r,N]})});(0,f.useEffect)(()=>{if(!E)return;function e(e){let t=O.current;t&&(e.target instanceof Node&&t.contains(e.target)||D(!1))}function t(e){e.key===`Escape`&&D(!1)}return document.addEventListener(`pointerdown`,e),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`pointerdown`,e),document.removeEventListener(`keydown`,t)}},[E]),(0,f.useEffect)(()=>{A||D(!1)},[A]);function B(){D(e=>!e)}function V(e){let t=e.target;t&&t.closest(`a, [role="menuitem"]`)&&D(!1)}return(0,p.jsxs)(`nav`,{ref:O,className:n.t(`navbar`,l,s&&`bordered`,c&&`sticky`,A&&`mobile-view`,E&&`mobile-open`,`mobile-${h}`,C),...e.r(S),...T,children:[(0,p.jsx)(m,{size:r,padded:a,className:`container`,children:(0,p.jsx)(`div`,{className:n.t(`inner`,u,d&&`wrap`),children:z})}),h===`drawer`&&(0,p.jsx)(`div`,{className:n.t(`mobile-backdrop`,E&&`visible`),"aria-hidden":!0}),(0,p.jsxs)(`div`,{id:k,className:n.t(`mobile-menu`,h,E&&`open`),role:`menu`,"aria-hidden":!E||void 0,onClick:V,children:[M,g,I?(0,p.jsx)(`div`,{className:`mobile-menu-footer`,children:(0,f.cloneElement)(I,{key:`mnavbar-collapsed-actions`})}):null,_?(0,p.jsx)(`div`,{className:`mobile-menu-footer`,children:_}):null]})]})}function b({as:t=`section`,spacing:r=`lg`,tone:i=`default`,hidden:a,className:o,style:s,children:c,...l}){return(0,p.jsx)(t,{className:n.t(`section`,r,i,o),style:s,...e.r(a),...l,children:c})}function x({items:e,renderItem:t,children:n,columns:r=4,minItemWidth:i=`15rem`,...a}){return(0,p.jsx)(l.t,{columns:r,minItemWidth:i,...a,children:e&&t?e.map((e,n)=>t(e,n)):n})}function S({orientation:t=`horizontal`,variant:i=`solid`,hidden:a,spacing:o,padding:s,fsize:c,mt:l,mb:u,ml:d,mr:f,mx:m,my:h,pt:g,pb:_,pl:v,pr:y,px:b,py:x,fullWidth:S,className:C,style:w,...T}){let E=r.n({fsize:c});return(0,p.jsx)(`div`,{role:`separator`,"aria-orientation":t,className:n.t(`divider`,t,i,...r.t({spacing:o,padding:s,fsize:c,mt:l,mb:u,ml:d,mr:f,mx:m,my:h,pt:g,pb:_,pl:v,pr:y,px:b,py:x,fullWidth:S}),C),style:{...E,...w},...e.r(a),...T})}var C=`mineralui-sidebar`,w=(0,f.createContext)({mode:`expanded`,mobile:!1,mobileOpen:!1,canToggle:!1,toggleMode:()=>{}});function T(){return(0,f.useContext)(w)}function E({mode:r=`auto`,defaultMode:i=`expanded`,onModeChange:a,persist:o=!1,side:s=`left`,tone:l=`subtle`,bordered:u=!0,mobileBreakpoint:d=e.n.mobile,compactBreakpoint:m=e.n.compact,className:h,style:g,children:_}){let v=c.n(),y=Math.max(m,d),b=e.i(d),x=e.i(y),S=!b&&x,[T,E]=(0,f.useState)(!1),[D,O]=(0,f.useState)(()=>{if(o)try{let e=localStorage.getItem(C);if(e===`expanded`||e===`collapsed`)return e}catch{}return i}),k=b?`expanded`:S?`collapsed`:r===`auto`?D:r===`collapsed`?`collapsed`:`expanded`,A=(0,f.useCallback)(()=>{let e=k===`expanded`?`collapsed`:`expanded`;if(O(e),a?.(e),o)try{localStorage.setItem(C,e)}catch{}},[k,a,o]),j=(0,f.useCallback)(()=>E(!1),[]);(0,f.useEffect)(()=>{if(!T)return;let e=e=>{e.key===`Escape`&&E(!1)};return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[T]),(0,f.useEffect)(()=>{b||E(!1)},[b]);let M=!b&&!S&&r===`auto`,N=(0,f.useMemo)(()=>({mode:k,mobile:b,mobileOpen:T,canToggle:M,toggleMode:A}),[k,b,T,M,A]),P=n.t(`sidebar`,l,s,!b&&k===`collapsed`&&`collapsed`,S&&`compact`,u&&`bordered`,b&&`mobile`,b&&T&&`mobile-open`,h);return(0,p.jsxs)(w.Provider,{value:N,children:[b&&T&&(0,p.jsx)(`div`,{className:`sidebar-backdrop`,onClick:j}),(0,p.jsx)(`aside`,{className:P,style:g,children:_}),b&&!T&&(0,p.jsx)(`button`,{className:n.t(`sidebar-hamburger`,s),onClick:()=>E(!0),"aria-label":v.openMenu,children:(0,p.jsx)(`span`,{className:`sidebar-hamburger-icon`,"aria-hidden":`true`,children:(0,p.jsx)(t.Zn,{})})})]})}function D({bordered:e=!1,className:r,children:i}){let{mode:a,mobile:s,canToggle:c,toggleMode:l}=T(),u=!s&&a===`collapsed`;return(0,p.jsxs)(`div`,{className:n.t(`sidebar-header`,e&&`bordered`,r),children:[(0,p.jsx)(`div`,{className:`sidebar-header-content`,children:i}),c&&(0,p.jsx)(o.t,{variant:`outlined`,color:`neutral`,iconOnly:!0,size:`sm`,onClick:l,"aria-label":u?`Expand sidebar`:`Collapse sidebar`,className:`sidebar-toggle`,children:(0,p.jsx)(`span`,{className:n.t(`sidebar-chevron`,u&&`flipped`),children:(0,p.jsx)(t.qi,{})})})]})}function O({className:e,children:t}){return(0,p.jsx)(`div`,{className:n.t(`sidebar-body`,e),children:t})}function k({className:e,children:t}){return(0,p.jsx)(`nav`,{className:n.t(`sidebar-nav`,e),children:t})}function A({icon:e,label:t,description:r,href:i,to:a,onClick:o,active:s=!1,disabled:c=!1,badge:l,color:d,component:f,className:m}){let{mode:h,mobile:g}=T(),_=!g&&h===`collapsed`,v=r??t,y=typeof r==`string`?r:typeof t==`string`?t:void 0,b=f??(i||a?`a`:`button`),x=f?a?{to:a}:i?{href:i}:{}:i?{href:i}:a?{href:a}:{};return(0,p.jsxs)(b,{className:n.t(`sidebar-item`,s&&`active`,c&&`disabled`,d,m),onClick:c?void 0:o,"aria-disabled":c||void 0,title:_?y:void 0,...x,children:[e&&(0,p.jsx)(`span`,{className:`sidebar-item-icon`,children:e}),!_&&(0,p.jsx)(u.t,{content:v,placement:`top`,className:`sidebar-item-label-tooltip`,children:(0,p.jsx)(`span`,{className:`sidebar-item-label`,children:t})}),!_&&l&&(0,p.jsx)(`span`,{className:`sidebar-item-badge`,children:l})]})}function j({label:e,icon:r,active:i=!1,defaultOpen:a=!0,collapsible:o=!0,children:s,className:c}){let l=T(),{mode:u,mobile:m}=l,h=!m&&u===`collapsed`,[g,_]=(0,f.useState)(a),v=(0,f.useMemo)(()=>({...l,mode:`expanded`}),[l]),y=()=>{o&&_(e=>!e)};if(h){let t=(0,p.jsx)(`span`,{className:n.t(`sidebar-group-icon collapsed`,i&&`active`),title:e,children:r});return(0,p.jsx)(`div`,{className:n.t(`sidebar-group`,c),children:(0,p.jsx)(d.i,{trigger:t,placement:`right-start`,closeOnSelect:!0,openOn:`hover`,children:(0,p.jsx)(w.Provider,{value:v,children:s})})})}return(0,p.jsxs)(`div`,{className:n.t(`sidebar-group`,c),children:[(0,p.jsxs)(`button`,{className:n.t(`sidebar-group-header`,i&&`active`),onClick:y,"aria-expanded":g,children:[r&&(0,p.jsx)(`span`,{className:`sidebar-group-icon`,children:r}),(0,p.jsx)(`span`,{className:`sidebar-group-label`,children:e}),o&&(0,p.jsx)(`span`,{className:n.t(`sidebar-group-arrow`,g&&`open`),children:(0,p.jsx)(t.qi,{})})]}),g&&(0,p.jsx)(`div`,{className:`sidebar-group-items`,children:s})]})}function M({bordered:e=!1,className:t,children:r}){return(0,p.jsx)(`div`,{className:n.t(`sidebar-footer`,e&&`bordered`,t),children:r})}function N({className:e,spacing:t=`md`}){return(0,p.jsx)(`hr`,{className:n.t(`sidebar-divider`,t,e)})}function P({items:e,separator:t=`/`,maxItems:r,className:i,...a}){let o=(0,f.useMemo)(()=>{if(!r||r>=e.length)return e;if(r<2)return[e[e.length-1]];let t=e.slice(0,1),n=e.slice(-(r-1));return[...t,null,...n]},[e,r]);return(0,p.jsx)(`nav`,{"aria-label":`breadcrumb`,className:n.t(`breadcrumb`,i),...a,children:(0,p.jsx)(`ol`,{className:`trail`,children:o.map((e,r)=>{if(e===null)return(0,p.jsxs)(`li`,{className:`crumb dots`,children:[(0,p.jsx)(`span`,{className:`sep`,children:t}),(0,p.jsx)(`span`,{children:`…`})]},`ellipsis`);let i=r===o.length-1;return(0,p.jsxs)(`li`,{className:n.t(`crumb`,i&&`active`),children:[r>0&&(0,p.jsx)(`span`,{className:`sep`,children:t}),e.href&&!i?(0,p.jsx)(`a`,{href:e.href,className:`link`,onClick:e.onClick,children:e.label}):e.onClick&&!i?(0,p.jsx)(`button`,{type:`button`,className:`link btn`,onClick:e.onClick,children:e.label}):(0,p.jsx)(`span`,{className:`current`,"aria-current":i?`page`:void 0,children:e.label})]},r)})})})}var F=(0,f.forwardRef)(function({className:e,children:t,...r},i){let a=[],o=[];return f.Children.forEach(t,e=>{(0,f.isValidElement)(e)&&e.type===E?a.push(e):o.push(e)}),(0,p.jsxs)(`div`,{ref:i,className:n.t(`app-shell`,e),...r,children:[a,(0,p.jsx)(`div`,{className:`app-main`,children:o})]})}),I=(0,f.forwardRef)(function({className:e,children:t,...r},i){return(0,p.jsx)(`div`,{ref:i,className:n.t(`app-body`,e),...r,children:t})});function L({baseWidth:e=480,children:t}){let n=(0,f.useRef)(null),r=(0,f.useRef)(null),[i,a]=(0,f.useState)(1),[o,s]=(0,f.useState)(e);return(0,f.useEffect)(()=>{let t=n.current,i=r.current;if(!t||!i)return;let o=0,c=()=>{cancelAnimationFrame(o),o=requestAnimationFrame(()=>{let n=t.clientWidth,r=t.clientHeight;if(n===0||r===0)return;let o=Math.max(e,n),c=i.offsetHeight;if(o===0||c===0)return;let l=n/o,u=r/c,d=Math.min(l,u,1);d>0&&Number.isFinite(d)&&(s(o),a(d))})},l=new ResizeObserver(c);return l.observe(t),l.observe(i),c(),()=>{cancelAnimationFrame(o),l.disconnect()}},[e]),(0,p.jsx)(`div`,{ref:n,className:`canvas-grid-scale-wrapper`,children:(0,p.jsx)(`div`,{ref:r,className:`canvas-grid-scale-content`,style:{width:`${o}px`,transform:`scale(${i})`},children:t})})}function R(e,t,n){return Math.max(t,Math.min(n,e))}function z({columns:r=24,rows:i=24,snap:a=4,items:l,renderItem:u,minItemSize:d,maxItemSize:m,editable:h=!1,onItemMove:g,onItemResize:_,onItemRemove:v,onItemEdit:y,onItemExpand:b,guides:x=`always`,compactBreakpoint:S=e.n.compact,mobileBreakpoint:C=e.n.mobile,height:w,fitContent:T=`scroll`,fitContentBaseWidth:E=480,className:D,style:O},k){let A=c.n(),j=(0,f.useRef)(null),[M,N]=(0,f.useState)({width:0,height:0}),[P,F]=(0,f.useState)(null),[I,z]=(0,f.useState)(null),[B,V]=(0,f.useState)({}),H=(0,f.useRef)(0);function U(e){H.current+=1,V(t=>({...t,[e]:H.current}))}function W(){let e=!0,t=n=>{e&&(e=!1,n.stopPropagation(),n.preventDefault(),window.removeEventListener(`click`,t,!0))};window.addEventListener(`click`,t,!0),window.setTimeout(()=>{e&&(e=!1,window.removeEventListener(`click`,t,!0))},60)}let G=e.i(C),K=e.i(S)&&!G,q=r*a,J=i*a,Y=K?Math.max(1,Math.round(q/2)):q,X=K?Math.max(1,Math.round(J/2)):J,Z=K?Math.max(1,Math.round(r/2)):r,ee=K?Math.max(1,Math.round(i/2)):i,Q=h&&!G;(0,f.useEffect)(()=>{let e=j.current;if(!e||typeof ResizeObserver>`u`)return;let t=()=>N({width:e.clientWidth,height:e.clientHeight});t();let n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},[]);let te=(0,f.useCallback)(e=>{j.current=e,typeof k==`function`?k(e):k&&(k.current=e)},[k]);function ne(e){let t=d?.(e);return t?{w:Math.max(a,t.w*a),h:Math.max(a,t.h*a)}:{w:a,h:a}}function re(e,t){Q&&(e.stopPropagation(),e.preventDefault(),e.currentTarget.setPointerCapture(e.pointerId),U(t.id),F({itemId:t.id,mode:`resize`,startClientX:e.clientX,startClientY:e.clientY,original:{...t.position}}),z({...t.position}))}function ie(e,t){Q&&(e.target.closest(`button, [role="button"]`)||(e.stopPropagation(),e.preventDefault(),e.currentTarget.setPointerCapture(e.pointerId),U(t.id),F({itemId:t.id,mode:`drag`,startClientX:e.clientX,startClientY:e.clientY,original:{...t.position}}),z({...t.position})))}function ae(e){if(!P||M.width===0||M.height===0)return;let t=M.width/Y,n=M.height/X,r=Math.round((e.clientX-P.startClientX)/t),i=Math.round((e.clientY-P.startClientY)/n),o=P.original,s=l.find(e=>e.id===P.itemId),c=s?ne(s):{w:a,h:a};if(P.mode===`drag`)z({x:R(o.x+r,0,Y-o.w),y:R(o.y+i,0,X-o.h),w:o.w,h:o.h});else{let e=R(o.w+r,c.w,Y-o.x),t=R(o.h+i,c.h,X-o.y);z({x:o.x,y:o.y,w:e,h:t})}}function $(e){if(P){try{e.currentTarget.releasePointerCapture(e.pointerId)}catch{}I&&(P.mode===`drag`?g?.(P.itemId,I):_?.(P.itemId,I)),F(null),z(null)}}function oe(e){P&&(W(),$(e))}let se=x===`always`||x===`on-edit`&&Q||x===`on-drag`&&P!==null,ce=w===void 0?void 0:{height:typeof w==`number`?`${w}px`:w};if(G){let e=[...l].sort((e,t)=>e.position.y-t.position.y);return(0,p.jsx)(`div`,{ref:te,className:n.t(`canvas-grid`,`mobile`,D),"data-guides":`off`,style:{...ce,...O},children:e.map(e=>(0,p.jsx)(`div`,{className:`canvas-grid-item`,children:u(e)},e.id))})}let le={...ce,...O,gridTemplateColumns:`repeat(${Y}, 1fr)`,gridTemplateRows:`repeat(${X}, 1fr)`,"--canvas-grid-cells":String(Z),"--canvas-grid-row-cells":String(ee)},ue=Z*ee;return(0,p.jsxs)(`div`,{ref:te,className:n.t(`canvas-grid`,K&&`compact`,Q&&`editable`,D),"data-guides":se?`on`:`off`,style:le,children:[(0,p.jsx)(`div`,{className:`canvas-grid-overlay`,"aria-hidden":!0,children:Array.from({length:ue},(e,t)=>{let r=(t+1)%Z===0,i=t>=ue-Z;return(0,p.jsx)(`div`,{className:n.t(`canvas-grid-cell`,r&&`no-right`,i&&`no-bottom`)},t)})}),l.map(e=>{let r=P?.itemId===e.id,i=r&&I?I:e.position,a=K?Math.round(i.x/2):i.x,c=K?Math.round(i.y/2):i.y,l=Math.max(1,K?Math.round(i.w/2):i.w),d=Math.max(1,K?Math.round(i.h/2):i.h),f=1+(B[e.id]??0),m={gridColumn:`${a+1} / span ${l}`,gridRow:`${c+1} / span ${d}`,zIndex:r?f+100:f};return(0,p.jsxs)(`div`,{className:n.t(`canvas-grid-item`,r&&`dragging`),style:m,children:[(0,p.jsx)(`div`,{className:`canvas-grid-item-header`,onPointerDown:t=>ie(t,e),onPointerMove:ae,onPointerUp:oe,onPointerCancel:$,children:(0,p.jsxs)(s.t,{variant:`ghost`,size:`xs`,children:[Q&&y&&(0,p.jsx)(o.t,{color:`primary`,iconOnly:!0,"aria-label":A.editTile,startIcon:(0,p.jsx)(t.Gn,{}),onPointerDown:e=>e.stopPropagation(),onClick:t=>{t.stopPropagation(),y(e.id)}}),b&&(0,p.jsx)(o.t,{color:`primary`,iconOnly:!0,"aria-label":A.expandTile,startIcon:(0,p.jsx)(t.$n,{}),onPointerDown:e=>e.stopPropagation(),onClick:t=>{t.stopPropagation(),b(e.id)}}),Q&&v&&(0,p.jsx)(o.t,{color:`error`,iconOnly:!0,"aria-label":A.removeTile,startIcon:(0,p.jsx)(t.er,{}),onPointerDown:e=>e.stopPropagation(),onClick:t=>{t.stopPropagation(),v(e.id)}})]})}),(0,p.jsx)(`div`,{className:`canvas-grid-item-body`,children:T===`scale`?(0,p.jsx)(L,{baseWidth:E,children:u(e)}):u(e)}),!Q&&b&&(0,p.jsx)(o.t,{className:`canvas-grid-view-expand-handle`,variant:`filled`,shape:`circle`,size:`sm`,color:`primary`,iconOnly:!0,"aria-label":A.expandTile,startIcon:(0,p.jsx)(t.$n,{}),onClick:t=>{t.stopPropagation(),b(e.id)}}),Q&&r&&(0,p.jsx)(`div`,{className:`canvas-grid-item-glass`,"aria-hidden":!0,children:(0,p.jsx)(t.Sr,{size:28})}),Q&&(0,p.jsx)(`div`,{className:`canvas-grid-resize-handle`,"aria-hidden":!0,onPointerDown:t=>re(t,e),onPointerMove:ae,onPointerUp:e=>{P&&W(),$(e)},onPointerCancel:$})]},e.id)})]})}var B=(0,f.forwardRef)(z),V=`button, a, [role="button"]`,H=(0,f.forwardRef)(function({children:e,top:t=16,bottomGap:r=16,hideScrollbar:i=!0,draggable:a=!0,className:o,style:s,...c},l){let u=(0,f.useRef)(null);(0,f.useImperativeHandle)(l,()=>u.current);let d=(0,f.useRef)(null),[m,h]=(0,f.useState)(!1);(0,f.useEffect)(()=>{if(!a)return;let e=e=>{let t=d.current,n=u.current;!t||!n||(n.scrollTop=t.startScrollTop-(e.clientY-t.startY))},t=()=>{d.current&&(d.current=null,h(!1))};return window.addEventListener(`mousemove`,e),window.addEventListener(`mouseup`,t),()=>{window.removeEventListener(`mousemove`,e),window.removeEventListener(`mouseup`,t)}},[a]);let g=e=>{if(!a)return;let t=e.target;if(t&&t.closest(V))return;let n=u.current;n&&(d.current={startY:e.clientY,startScrollTop:n.scrollTop},h(!0),e.preventDefault())},_={top:t,height:`calc(100vh - ${t+r}px)`,...s};return(0,p.jsx)(`div`,{ref:u,className:n.t(`m-sticky-panel`,a&&`draggable`,m&&`is-dragging`,i&&`hide-scrollbar`,o),style:_,onMouseDown:g,...c,children:e})});Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return P}}),Object.defineProperty(exports,`b`,{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return N}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return D}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return I}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return M}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return S}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return B}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return H}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`x`,{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return g}});
|
|
2
|
-
//# sourceMappingURL=layout-BMggJ_qO.cjs.map
|