@banzamel/mineralui 2.4.3 → 2.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/MAvatar-CvQuiGvT.cjs +2 -0
- package/dist/MAvatar-CvQuiGvT.cjs.map +1 -0
- package/dist/MAvatar-EkOBrEtS.js +73 -0
- package/dist/MAvatar-EkOBrEtS.js.map +1 -0
- package/dist/MButton-BxEky3xQ.cjs +2 -0
- package/dist/MButton-BxEky3xQ.cjs.map +1 -0
- package/dist/MButton-KELyyBw1.js +123 -0
- package/dist/MButton-KELyyBw1.js.map +1 -0
- package/dist/{MButtonGroup-BEJxXZ8u.js → MButtonGroup-DDnn8Wfy.js} +3 -3
- package/dist/{MButtonGroup-BEJxXZ8u.js.map → MButtonGroup-DDnn8Wfy.js.map} +1 -1
- package/dist/{MButtonGroup-DO1Tq3Za.cjs → MButtonGroup-Dz8Fm-oA.cjs} +2 -2
- package/dist/{MButtonGroup-DO1Tq3Za.cjs.map → MButtonGroup-Dz8Fm-oA.cjs.map} +1 -1
- package/dist/{MCard-P8OoswWM.cjs → MCard-Bqm4BjK_.cjs} +2 -2
- package/dist/MCard-Bqm4BjK_.cjs.map +1 -0
- package/dist/{MCard-BqSkGAgf.js → MCard-CqZYGaS2.js} +4 -4
- package/dist/MCard-CqZYGaS2.js.map +1 -0
- package/dist/MCheckbox-CaWgyUn5.js +72 -0
- package/dist/MCheckbox-CaWgyUn5.js.map +1 -0
- package/dist/MCheckbox-DpKJpnFF.cjs +2 -0
- package/dist/MCheckbox-DpKJpnFF.cjs.map +1 -0
- package/dist/{MConflictIllustration-znC7ijmP.js → MConflictIllustration-dwZS44ye.js} +1517 -1515
- package/dist/MConflictIllustration-dwZS44ye.js.map +1 -0
- package/dist/MConflictIllustration-vfHs-jad.cjs +2 -0
- package/dist/MConflictIllustration-vfHs-jad.cjs.map +1 -0
- package/dist/MDetailList-C3othNs3.js +127 -0
- package/dist/MDetailList-C3othNs3.js.map +1 -0
- package/dist/MDetailList-DkDHLdJ8.cjs +2 -0
- package/dist/MDetailList-DkDHLdJ8.cjs.map +1 -0
- package/dist/MDropdownMenu-C4-r7UZM.cjs +2 -0
- package/dist/MDropdownMenu-C4-r7UZM.cjs.map +1 -0
- package/dist/MDropdownMenu-Dvg9UsHB.js +219 -0
- package/dist/MDropdownMenu-Dvg9UsHB.js.map +1 -0
- package/dist/MGrid-CQqT8nHi.js +271 -0
- package/dist/MGrid-CQqT8nHi.js.map +1 -0
- package/dist/MGrid-tBsqShLG.cjs +2 -0
- package/dist/MGrid-tBsqShLG.cjs.map +1 -0
- package/dist/MHeading-DQSQ8c7L.js +21 -0
- package/dist/MHeading-DQSQ8c7L.js.map +1 -0
- package/dist/MHeading-DiGYs1FJ.cjs +2 -0
- package/dist/MHeading-DiGYs1FJ.cjs.map +1 -0
- package/dist/MInput-BeEGufZG.cjs +2 -0
- package/dist/MInput-BeEGufZG.cjs.map +1 -0
- package/dist/MInput-QnQV9L8U.js +190 -0
- package/dist/MInput-QnQV9L8U.js.map +1 -0
- package/dist/MInputCVC-CCNRAqHw.cjs +2 -0
- package/dist/MInputCVC-CCNRAqHw.cjs.map +1 -0
- package/dist/MInputCVC-IXIYZwex.js +410 -0
- package/dist/MInputCVC-IXIYZwex.js.map +1 -0
- package/dist/MInputSearch-BSIc6m2P.cjs +2 -0
- package/dist/MInputSearch-BSIc6m2P.cjs.map +1 -0
- package/dist/MInputSearch-CNuTAbYs.js +44 -0
- package/dist/MInputSearch-CNuTAbYs.js.map +1 -0
- package/dist/{MKbd-BR1GX5oK.cjs → MKbd-CnW3NUIu.cjs} +2 -2
- package/dist/{MKbd-BR1GX5oK.cjs.map → MKbd-CnW3NUIu.cjs.map} +1 -1
- package/dist/{MKbd-COb7oh_k.js → MKbd-DjfGyajR.js} +2 -2
- package/dist/{MKbd-COb7oh_k.js.map → MKbd-DjfGyajR.js.map} +1 -1
- package/dist/MLink-C6uwA6db.cjs +2 -0
- package/dist/MLink-C6uwA6db.cjs.map +1 -0
- package/dist/MLink-ixg0xFFI.js +31 -0
- package/dist/MLink-ixg0xFFI.js.map +1 -0
- package/dist/MLoader-CViA3zBo.js +44 -0
- package/dist/MLoader-CViA3zBo.js.map +1 -0
- package/dist/MLoader-DUOoOoNE.cjs +2 -0
- package/dist/MLoader-DUOoOoNE.cjs.map +1 -0
- package/dist/MPagination-BTGenxWW.js +122 -0
- package/dist/MPagination-BTGenxWW.js.map +1 -0
- package/dist/MPagination-DitmdtCc.cjs +2 -0
- package/dist/MPagination-DitmdtCc.cjs.map +1 -0
- package/dist/MPopover-CBDbUOW6.js +183 -0
- package/dist/MPopover-CBDbUOW6.js.map +1 -0
- package/dist/MPopover-ZeoU9hb5.cjs +2 -0
- package/dist/MPopover-ZeoU9hb5.cjs.map +1 -0
- package/dist/{MSimpleGrid-Ui8cI0ho.js → MSimpleGrid-C_QvLmck.js} +3 -3
- package/dist/MSimpleGrid-C_QvLmck.js.map +1 -0
- package/dist/MSimpleGrid-wgvjnxwM.cjs +2 -0
- package/dist/MSimpleGrid-wgvjnxwM.cjs.map +1 -0
- package/dist/{MSkeleton-Dhu-loDO.js → MSkeleton-BpcpBBJq.js} +12 -10
- package/dist/MSkeleton-BpcpBBJq.js.map +1 -0
- package/dist/MSkeleton-DuAN8Vcv.cjs +2 -0
- package/dist/MSkeleton-DuAN8Vcv.cjs.map +1 -0
- package/dist/MSlider-CLASUc2H.js +134 -0
- package/dist/MSlider-CLASUc2H.js.map +1 -0
- package/dist/MSlider-hONQBulE.cjs +2 -0
- package/dist/MSlider-hONQBulE.cjs.map +1 -0
- package/dist/MStack-BwAFeGGg.js +39 -0
- package/dist/MStack-BwAFeGGg.js.map +1 -0
- package/dist/MStack-CGII4A-q.cjs +2 -0
- package/dist/MStack-CGII4A-q.cjs.map +1 -0
- package/dist/MSubText-BeZk-fhz.js +17 -0
- package/dist/MSubText-BeZk-fhz.js.map +1 -0
- package/dist/MSubText-Dl1PfToZ.cjs +2 -0
- package/dist/MSubText-Dl1PfToZ.cjs.map +1 -0
- package/dist/MSurface-B_QnRLr5.js +74 -0
- package/dist/MSurface-B_QnRLr5.js.map +1 -0
- package/dist/MSurface-BrFo-JMJ.cjs +2 -0
- package/dist/MSurface-BrFo-JMJ.cjs.map +1 -0
- package/dist/MTag-BZrKN_DS.js +41 -0
- package/dist/MTag-BZrKN_DS.js.map +1 -0
- package/dist/MTag-DCE1vRJM.cjs +2 -0
- package/dist/MTag-DCE1vRJM.cjs.map +1 -0
- package/dist/MText-BUWQPoBM.js +45 -0
- package/dist/MText-BUWQPoBM.js.map +1 -0
- package/dist/MText-nsvLFsSv.cjs +2 -0
- package/dist/MText-nsvLFsSv.cjs.map +1 -0
- package/dist/MTooltip-BRSPJ3RY.js +100 -0
- package/dist/MTooltip-BRSPJ3RY.js.map +1 -0
- package/dist/MTooltip-Cj2Fxmzc.cjs +2 -0
- package/dist/MTooltip-Cj2Fxmzc.cjs.map +1 -0
- package/dist/MTreeView-BWCTlsU-.cjs +2 -0
- package/dist/MTreeView-BWCTlsU-.cjs.map +1 -0
- package/dist/MTreeView-CWcMwE-Z.js +554 -0
- package/dist/MTreeView-CWcMwE-Z.js.map +1 -0
- package/dist/calendar-2yhnCkGW.cjs +2 -0
- package/dist/calendar-2yhnCkGW.cjs.map +1 -0
- package/dist/calendar-DcNYDTVb.js +195 -0
- package/dist/calendar-DcNYDTVb.js.map +1 -0
- package/dist/calendar.cjs +1 -1
- package/dist/calendar.js +1 -1
- package/dist/{calendarDates-M_Dawj0j.js → calendarDates-Bpw_G_QR.js} +30 -19
- package/dist/calendarDates-Bpw_G_QR.js.map +1 -0
- package/dist/calendarDates-Cg0nm69Y.cjs +2 -0
- package/dist/calendarDates-Cg0nm69Y.cjs.map +1 -0
- package/dist/cards-Bp886TRb.cjs +2 -0
- package/dist/cards-Bp886TRb.cjs.map +1 -0
- package/dist/cards-BvER6Gx0.js +1277 -0
- package/dist/cards-BvER6Gx0.js.map +1 -0
- package/dist/cards.cjs +1 -1
- package/dist/cards.js +2 -2
- package/dist/{cn-YER3QsV1.js → cn-CUSXNnjF.js} +1 -1
- package/dist/{cn-YER3QsV1.js.map → cn-CUSXNnjF.js.map} +1 -1
- package/dist/{cn-CU5TNITO.cjs → cn-DYFxgzi2.cjs} +1 -1
- package/dist/{cn-CU5TNITO.cjs.map → cn-DYFxgzi2.cjs.map} +1 -1
- package/dist/components/cards/MCardDaySchedule/MCardDaySchedule.d.ts +1 -1
- package/dist/components/cards/MCardDocumentTree/MCardDocumentTree.d.ts +1 -1
- package/dist/components/cards/MCardGrid/MCardGrid.d.ts +1 -1
- package/dist/components/cards/MCardPayment/MCardPayment.d.ts +1 -1
- package/dist/components/cards/MCardPayment/MCardPayment.types.d.ts +4 -0
- package/dist/components/cards/MCardPaymentMethod/MCardPaymentMethod.d.ts +1 -1
- package/dist/components/cards/MStatCard/MStatCard.d.ts +1 -1
- package/dist/components/controls/MCheckbox/MCheckbox.types.d.ts +6 -0
- package/dist/components/controls/MLoadMore/MLoadMore.d.ts +1 -1
- package/dist/components/controls/MSlider/MSlider.d.ts +1 -1
- package/dist/components/controls/MSlider/MSlider.types.d.ts +5 -0
- package/dist/components/data/MTreeView/MTreeView.d.ts +1 -1
- package/dist/components/data/MTreeView/MTreeView.types.d.ts +6 -0
- package/dist/components/data/MWeekGrid/MWeekGrid.d.ts +1 -1
- package/dist/components/data/MWeekGrid/MWeekGrid.types.d.ts +9 -3
- package/dist/components/display/MCodeBlock/MCodeBlock.d.ts +1 -1
- package/dist/components/dropdowns/MAutocomplete/MAutocomplete.d.ts +1 -1
- package/dist/components/dropdowns/MAutocomplete/MAutocomplete.types.d.ts +8 -2
- package/dist/components/dropdowns/MSelect/MSelect.d.ts +1 -1
- package/dist/components/dropdowns/shared/TimeColumnListbox.d.ts +20 -0
- package/dist/components/feedback/MAlert/MAlert.d.ts +1 -1
- package/dist/components/feedback/MBadge/MBadge.d.ts +1 -1
- package/dist/components/feedback/MBanner/MBanner.d.ts +1 -1
- package/dist/components/feedback/MLoader/MLoader.d.ts +1 -1
- package/dist/components/feedback/MSpinner/MSpinner.d.ts +1 -1
- package/dist/components/feedback/MTag/MTag.d.ts +1 -1
- package/dist/components/inputs/MInput/MInput.types.d.ts +6 -1
- package/dist/components/inputs/MInput/useFormatCaret.d.ts +8 -0
- package/dist/components/layout/MCanvasGrid/MCanvasGrid.types.d.ts +5 -0
- package/dist/components/layout/MContainer/MContainer.d.ts +1 -1
- package/dist/components/layout/MDivider/MDivider.d.ts +1 -1
- package/dist/components/layout/MFooter/MFooter.d.ts +1 -1
- package/dist/components/layout/MHeader/MHeader.d.ts +1 -1
- package/dist/components/layout/MInline/MInline.d.ts +1 -1
- package/dist/components/layout/MNavbar/MNavbar.d.ts +1 -1
- package/dist/components/layout/MNavbar/MNavbar.types.d.ts +2 -0
- package/dist/components/layout/MSection/MSection.d.ts +1 -1
- package/dist/components/layout/MStack/MStack.d.ts +1 -1
- package/dist/components/layout/MStickyPanel/MStickyPanel.types.d.ts +4 -0
- package/dist/components/layout/MSurface/MSurface.d.ts +1 -1
- package/dist/components/media/MAvatar/MAvatar.d.ts +1 -1
- package/dist/components/media/MAvatar/MAvatar.types.d.ts +10 -0
- package/dist/components/media/MCarousel/MCarousel.d.ts +1 -1
- package/dist/components/media/MImage/MImage.d.ts +1 -1
- package/dist/components/media/carouselA11y.d.ts +9 -0
- package/dist/components/overlays/MCommandPalette/MCommandPalette.d.ts +1 -1
- package/dist/components/overlays/MDropdownMenu/MDropdownMenu.d.ts +4 -2
- package/dist/components/overlays/MDropdownMenu/MDropdownMenu.types.d.ts +3 -1
- package/dist/components/overlays/MPopconfirm/MPopconfirm.d.ts +1 -1
- package/dist/components/overlays/scrollLock.d.ts +14 -0
- package/dist/components/primitives/MPopover/MPopover.d.ts +1 -1
- package/dist/components/primitives/MPopover/MPopover.types.d.ts +32 -1
- package/dist/components/primitives/MPopover/popoverStack.d.ts +6 -0
- package/dist/components/typography/MHeading/MHeading.d.ts +2 -3
- package/dist/components/typography/MSubText/MSubText.d.ts +1 -1
- package/dist/components/typography/MText/MText.d.ts +1 -1
- package/dist/controls-B4Dxaab4.js +491 -0
- package/dist/controls-B4Dxaab4.js.map +1 -0
- package/dist/controls-CyXEIOXD.cjs +2 -0
- package/dist/controls-CyXEIOXD.cjs.map +1 -0
- package/dist/controls.cjs +1 -1
- package/dist/controls.js +5 -5
- package/dist/creditCards-Bo2mrc53.cjs +2 -0
- package/dist/creditCards-Bo2mrc53.cjs.map +1 -0
- package/dist/{creditCards-D_iWmtG6.js → creditCards-DmDOyvcw.js} +20 -31
- package/dist/creditCards-DmDOyvcw.js.map +1 -0
- package/dist/data-BM3KG8oN.cjs +2 -0
- package/dist/data-BM3KG8oN.cjs.map +1 -0
- package/dist/data-qnR8OBmj.js +808 -0
- package/dist/data-qnR8OBmj.js.map +1 -0
- package/dist/data.cjs +1 -1
- package/dist/data.js +2 -2
- package/dist/{dateUtils-CUY6CRCf.js → dateUtils-B-ToNZq_.js} +5 -6
- package/dist/dateUtils-B-ToNZq_.js.map +1 -0
- package/dist/dateUtils-z2L7ZaxA.cjs +2 -0
- package/dist/dateUtils-z2L7ZaxA.cjs.map +1 -0
- package/dist/display-BLMOBofj.cjs +3 -0
- package/dist/display-BLMOBofj.cjs.map +1 -0
- package/dist/display-Dlb79lkA.js +968 -0
- package/dist/display-Dlb79lkA.js.map +1 -0
- package/dist/display.cjs +1 -1
- package/dist/display.js +2 -2
- package/dist/dropdowns-2_7VMEDo.js +2009 -0
- package/dist/dropdowns-2_7VMEDo.js.map +1 -0
- package/dist/dropdowns-DN7j8J-V.cjs +2 -0
- package/dist/dropdowns-DN7j8J-V.cjs.map +1 -0
- package/dist/dropdowns.cjs +1 -1
- package/dist/dropdowns.js +1 -1
- package/dist/feedback-CECayytY.js +335 -0
- package/dist/feedback-CECayytY.js.map +1 -0
- package/dist/feedback-paV8Ls-h.cjs +2 -0
- package/dist/feedback-paV8Ls-h.cjs.map +1 -0
- package/dist/feedback.cjs +1 -1
- package/dist/feedback.js +5 -5
- package/dist/form-Br56h5EF.cjs +2 -0
- package/dist/form-Br56h5EF.cjs.map +1 -0
- package/dist/form-CJmMZgsH.js +165 -0
- package/dist/form-CJmMZgsH.js.map +1 -0
- package/dist/form.cjs +1 -1
- package/dist/form.js +1 -1
- package/dist/{formatters-CNjg_h7-.cjs → formatters-CauWlsnM.cjs} +1 -1
- package/dist/{formatters-CNjg_h7-.cjs.map → formatters-CauWlsnM.cjs.map} +1 -1
- package/dist/{formatters-T0vvjMtB.js → formatters-Doqdu_w1.js} +1 -1
- package/dist/{formatters-T0vvjMtB.js.map → formatters-Doqdu_w1.js.map} +1 -1
- package/dist/frameworkTexts-CaqdiKHW.cjs +2 -0
- package/dist/frameworkTexts-CaqdiKHW.cjs.map +1 -0
- package/dist/frameworkTexts-o43FqY1A.js +505 -0
- package/dist/frameworkTexts-o43FqY1A.js.map +1 -0
- package/dist/i18n/MI18nProvider.d.ts +6 -1
- package/dist/i18n/frameworkTexts.d.ts +511 -0
- package/dist/i18n/index.d.ts +1 -0
- package/dist/i18n.cjs +1 -1
- package/dist/i18n.js +2 -2
- package/dist/icons-Bp8bB9TP.cjs +2 -0
- package/dist/icons-Bp8bB9TP.cjs.map +1 -0
- package/dist/{icons-CBMl-kOM.js → icons-IqEBmGh3.js} +1223 -1220
- package/dist/icons-IqEBmGh3.js.map +1 -0
- package/dist/icons.cjs +1 -1
- package/dist/icons.js +1 -1
- package/dist/illustrations.cjs +1 -1
- package/dist/illustrations.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.js +56 -56
- package/dist/inputs-C0BJzlA-.js +1923 -0
- package/dist/inputs-C0BJzlA-.js.map +1 -0
- package/dist/inputs-CvNBBLFA.cjs +2 -0
- package/dist/inputs-CvNBBLFA.cjs.map +1 -0
- package/dist/inputs.cjs +1 -1
- package/dist/inputs.js +4 -4
- package/dist/layout-BSFqGXLZ.js +1101 -0
- package/dist/layout-BSFqGXLZ.js.map +1 -0
- package/dist/layout-MKqvUkPv.cjs +2 -0
- package/dist/layout-MKqvUkPv.cjs.map +1 -0
- package/dist/layout.cjs +1 -1
- package/dist/layout.js +6 -6
- package/dist/{layoutProps-Ck4VtGm9.cjs → layoutProps-B8y2XwHy.cjs} +1 -1
- package/dist/{layoutProps-Ck4VtGm9.cjs.map → layoutProps-B8y2XwHy.cjs.map} +1 -1
- package/dist/{layoutProps-Cl6d1KmH.js → layoutProps-CE5-ghKw.js} +1 -1
- package/dist/{layoutProps-Cl6d1KmH.js.map → layoutProps-CE5-ghKw.js.map} +1 -1
- package/dist/{licensing-f5KYVz7D.js → licensing-BKmoAdfr.js} +5 -4
- package/dist/licensing-BKmoAdfr.js.map +1 -0
- package/dist/licensing-DVgjkw-s.cjs +2 -0
- package/dist/licensing-DVgjkw-s.cjs.map +1 -0
- package/dist/media-fiasAbBv.js +485 -0
- package/dist/media-fiasAbBv.js.map +1 -0
- package/dist/media-tr1s386v.cjs +2 -0
- package/dist/media-tr1s386v.cjs.map +1 -0
- package/dist/media.cjs +1 -1
- package/dist/media.js +2 -2
- package/dist/overlays-Df-NpmkW.cjs +2 -0
- package/dist/overlays-Df-NpmkW.cjs.map +1 -0
- package/dist/overlays-W0WW3fn7.js +607 -0
- package/dist/overlays-W0WW3fn7.js.map +1 -0
- package/dist/overlays.cjs +1 -1
- package/dist/overlays.js +3 -3
- package/dist/primitives.cjs +1 -1
- package/dist/primitives.js +2 -2
- package/dist/radioGroupKeys-Bm-Qeh8G.js +28 -0
- package/dist/radioGroupKeys-Bm-Qeh8G.js.map +1 -0
- package/dist/radioGroupKeys-COL8uXbH.cjs +2 -0
- package/dist/radioGroupKeys-COL8uXbH.cjs.map +1 -0
- package/dist/{relativeTime-Cr-NVzij.js → relativeTime-BqCuaBqb.js} +1 -1
- package/dist/{relativeTime-Cr-NVzij.js.map → relativeTime-BqCuaBqb.js.map} +1 -1
- package/dist/{relativeTime-DgYBUaVm.cjs → relativeTime-DUbW4O44.cjs} +1 -1
- package/dist/{relativeTime-DgYBUaVm.cjs.map → relativeTime-DUbW4O44.cjs.map} +1 -1
- package/dist/scrollLock-C9P9o6wH.cjs +2 -0
- package/dist/scrollLock-C9P9o6wH.cjs.map +1 -0
- package/dist/scrollLock-D27VmgPV.js +14 -0
- package/dist/scrollLock-D27VmgPV.js.map +1 -0
- package/dist/style-runtime.cjs +1 -1
- package/dist/style-runtime.js +1 -1
- package/dist/styles.css +1 -1
- package/dist/theme/MThemeProvider.d.ts +18 -1
- package/dist/theme/index.d.ts +2 -2
- package/dist/{theme-DAOU1aPs.js → theme-B_juOenJ.js} +71 -61
- package/dist/theme-B_juOenJ.js.map +1 -0
- package/dist/theme-ByPZH0dh.cjs +2 -0
- package/dist/theme-ByPZH0dh.cjs.map +1 -0
- package/dist/theme.cjs +1 -1
- package/dist/theme.js +2 -2
- package/dist/{typography-C806GYT4.js → typography-DNcB8dOy.js} +3 -3
- package/dist/{typography-C806GYT4.js.map → typography-DNcB8dOy.js.map} +1 -1
- package/dist/{typography-4v01oNWx.cjs → typography-I7aeG8pH.cjs} +2 -2
- package/dist/{typography-4v01oNWx.cjs.map → typography-I7aeG8pH.cjs.map} +1 -1
- package/dist/typography.cjs +1 -1
- package/dist/typography.js +6 -6
- package/dist/useGhostText-CKsb8Ufa.js +240 -0
- package/dist/useGhostText-CKsb8Ufa.js.map +1 -0
- package/dist/useGhostText-DO-tfxS0.cjs +2 -0
- package/dist/useGhostText-DO-tfxS0.cjs.map +1 -0
- package/dist/useModalLayer-CpOPSDbf.js +128 -0
- package/dist/useModalLayer-CpOPSDbf.js.map +1 -0
- package/dist/useModalLayer-Cyt93Prs.cjs +2 -0
- package/dist/useModalLayer-Cyt93Prs.cjs.map +1 -0
- package/dist/utils/calendarDates.d.ts +5 -0
- package/dist/utils/radioGroupKeys.d.ts +9 -0
- package/dist/utils/useDateGridNav.d.ts +39 -0
- package/dist/utils/useGhostText.d.ts +2 -1
- package/dist/utils/useKeyboardNav.d.ts +51 -5
- package/dist/utils/useModalLayer.d.ts +4 -0
- package/dist/utils/useRovingToolbar.d.ts +26 -0
- package/dist/utils/validationMessages.d.ts +15 -0
- package/dist/utils.cjs +1 -1
- package/dist/utils.entry.d.ts +3 -1
- package/dist/utils.js +11 -11
- package/dist/validationMessages-BFimXxlT.js +23 -0
- package/dist/validationMessages-BFimXxlT.js.map +1 -0
- package/dist/validationMessages-iHu7apWr.cjs +2 -0
- package/dist/validationMessages-iHu7apWr.cjs.map +1 -0
- package/dist/validators-SZmLxnir.cjs +2 -0
- package/dist/validators-SZmLxnir.cjs.map +1 -0
- package/dist/{validators-DVYOtFnw.js → validators-ULebNme2.js} +107 -106
- package/dist/validators-ULebNme2.js.map +1 -0
- package/package.json +1 -1
- package/dist/MAvatar-DHNB3829.cjs +0 -2
- package/dist/MAvatar-DHNB3829.cjs.map +0 -1
- package/dist/MAvatar-GeRL-CNO.js +0 -63
- package/dist/MAvatar-GeRL-CNO.js.map +0 -1
- package/dist/MButton-CEwo8lUB.js +0 -115
- package/dist/MButton-CEwo8lUB.js.map +0 -1
- package/dist/MButton-CnAr77Za.cjs +0 -2
- package/dist/MButton-CnAr77Za.cjs.map +0 -1
- package/dist/MCard-BqSkGAgf.js.map +0 -1
- package/dist/MCard-P8OoswWM.cjs.map +0 -1
- package/dist/MCheckbox-BxFBADcE.js +0 -59
- package/dist/MCheckbox-BxFBADcE.js.map +0 -1
- package/dist/MCheckbox-DozwF2ai.cjs +0 -2
- package/dist/MCheckbox-DozwF2ai.cjs.map +0 -1
- package/dist/MConflictIllustration-2QL-BHYv.cjs +0 -2
- package/dist/MConflictIllustration-2QL-BHYv.cjs.map +0 -1
- package/dist/MConflictIllustration-znC7ijmP.js.map +0 -1
- package/dist/MDetailList-CThQvoyf.cjs +0 -2
- package/dist/MDetailList-CThQvoyf.cjs.map +0 -1
- package/dist/MDetailList-Cx9H81xT.js +0 -98
- package/dist/MDetailList-Cx9H81xT.js.map +0 -1
- package/dist/MDropdownMenu-DnKcCyW6.cjs +0 -2
- package/dist/MDropdownMenu-DnKcCyW6.cjs.map +0 -1
- package/dist/MDropdownMenu-DxbKN7Ui.js +0 -172
- package/dist/MDropdownMenu-DxbKN7Ui.js.map +0 -1
- package/dist/MGrid-BkRSGN2t.cjs +0 -2
- package/dist/MGrid-BkRSGN2t.cjs.map +0 -1
- package/dist/MGrid-CIz-2i6X.js +0 -265
- package/dist/MGrid-CIz-2i6X.js.map +0 -1
- package/dist/MHeading-AYQ8_GFP.cjs +0 -2
- package/dist/MHeading-AYQ8_GFP.cjs.map +0 -1
- package/dist/MHeading-DcGxUMwC.js +0 -21
- package/dist/MHeading-DcGxUMwC.js.map +0 -1
- package/dist/MI18nProvider-CqAwaswx.cjs +0 -2
- package/dist/MI18nProvider-CqAwaswx.cjs.map +0 -1
- package/dist/MI18nProvider-VH14CI8u.js +0 -72
- package/dist/MI18nProvider-VH14CI8u.js.map +0 -1
- package/dist/MInput-BYj2BdUe.cjs +0 -2
- package/dist/MInput-BYj2BdUe.cjs.map +0 -1
- package/dist/MInput-nodE-CZF.js +0 -188
- package/dist/MInput-nodE-CZF.js.map +0 -1
- package/dist/MInputCVC-9XWryaTz.cjs +0 -2
- package/dist/MInputCVC-9XWryaTz.cjs.map +0 -1
- package/dist/MInputCVC-CrDTaUXm.js +0 -321
- package/dist/MInputCVC-CrDTaUXm.js.map +0 -1
- package/dist/MInputSearch-BMgCHjFk.js +0 -43
- package/dist/MInputSearch-BMgCHjFk.js.map +0 -1
- package/dist/MInputSearch-BiVI1jNc.cjs +0 -2
- package/dist/MInputSearch-BiVI1jNc.cjs.map +0 -1
- package/dist/MLink-CAl6N6_z.js +0 -31
- package/dist/MLink-CAl6N6_z.js.map +0 -1
- package/dist/MLink-Dk_ReE6i.cjs +0 -2
- package/dist/MLink-Dk_ReE6i.cjs.map +0 -1
- package/dist/MLoader-CYp0OJU_.js +0 -41
- package/dist/MLoader-CYp0OJU_.js.map +0 -1
- package/dist/MLoader-DvmFle31.cjs +0 -2
- package/dist/MLoader-DvmFle31.cjs.map +0 -1
- package/dist/MPagination-E7IixIeo.js +0 -113
- package/dist/MPagination-E7IixIeo.js.map +0 -1
- package/dist/MPagination-reDU9xTW.cjs +0 -2
- package/dist/MPagination-reDU9xTW.cjs.map +0 -1
- package/dist/MPopover-8gYD3Ogq.js +0 -118
- package/dist/MPopover-8gYD3Ogq.js.map +0 -1
- package/dist/MPopover-B3npyAkL.cjs +0 -2
- package/dist/MPopover-B3npyAkL.cjs.map +0 -1
- package/dist/MPortal-Ba2Sxset.js +0 -10
- package/dist/MPortal-Ba2Sxset.js.map +0 -1
- package/dist/MPortal-CuBXhhl_.cjs +0 -2
- package/dist/MPortal-CuBXhhl_.cjs.map +0 -1
- package/dist/MSimpleGrid-BchGYPMi.cjs +0 -2
- package/dist/MSimpleGrid-BchGYPMi.cjs.map +0 -1
- package/dist/MSimpleGrid-Ui8cI0ho.js.map +0 -1
- package/dist/MSkeleton-DPa_G_2X.cjs +0 -2
- package/dist/MSkeleton-DPa_G_2X.cjs.map +0 -1
- package/dist/MSkeleton-Dhu-loDO.js.map +0 -1
- package/dist/MSlider-BRjhyBSc.js +0 -75
- package/dist/MSlider-BRjhyBSc.js.map +0 -1
- package/dist/MSlider-w5214a-W.cjs +0 -2
- package/dist/MSlider-w5214a-W.cjs.map +0 -1
- package/dist/MStack-Dt-rWvg3.js +0 -39
- package/dist/MStack-Dt-rWvg3.js.map +0 -1
- package/dist/MStack-nc6Y_9K3.cjs +0 -2
- package/dist/MStack-nc6Y_9K3.cjs.map +0 -1
- package/dist/MSubText-B0tXiuAp.js +0 -17
- package/dist/MSubText-B0tXiuAp.js.map +0 -1
- package/dist/MSubText-C6v6Exa2.cjs +0 -2
- package/dist/MSubText-C6v6Exa2.cjs.map +0 -1
- package/dist/MSurface-BjE-mL1L.cjs +0 -2
- package/dist/MSurface-BjE-mL1L.cjs.map +0 -1
- package/dist/MSurface-CpDJCdb5.js +0 -74
- package/dist/MSurface-CpDJCdb5.js.map +0 -1
- package/dist/MTag-BgOxiahL.cjs +0 -2
- package/dist/MTag-BgOxiahL.cjs.map +0 -1
- package/dist/MTag-cw3cIGHX.js +0 -41
- package/dist/MTag-cw3cIGHX.js.map +0 -1
- package/dist/MText-BDI4mdw8.cjs +0 -2
- package/dist/MText-BDI4mdw8.cjs.map +0 -1
- package/dist/MText-DhbAjtUE.js +0 -45
- package/dist/MText-DhbAjtUE.js.map +0 -1
- package/dist/MTooltip-BAgHlv5I.cjs +0 -2
- package/dist/MTooltip-BAgHlv5I.cjs.map +0 -1
- package/dist/MTooltip-CJxvlkOX.js +0 -92
- package/dist/MTooltip-CJxvlkOX.js.map +0 -1
- package/dist/MTreeView-DsBnYQMT.js +0 -315
- package/dist/MTreeView-DsBnYQMT.js.map +0 -1
- package/dist/MTreeView-LiJ5o-zy.cjs +0 -2
- package/dist/MTreeView-LiJ5o-zy.cjs.map +0 -1
- package/dist/calendar-Bq6NMNnS.js +0 -193
- package/dist/calendar-Bq6NMNnS.js.map +0 -1
- package/dist/calendar-C57BH8Nd.cjs +0 -2
- package/dist/calendar-C57BH8Nd.cjs.map +0 -1
- package/dist/calendarDates-M_Dawj0j.js.map +0 -1
- package/dist/calendarDates-qm047RW2.cjs +0 -2
- package/dist/calendarDates-qm047RW2.cjs.map +0 -1
- package/dist/cards-D4xJVd4q.js +0 -1227
- package/dist/cards-D4xJVd4q.js.map +0 -1
- package/dist/cards-Du6dbZSQ.cjs +0 -2
- package/dist/cards-Du6dbZSQ.cjs.map +0 -1
- package/dist/controls-BKoc_yel.js +0 -475
- package/dist/controls-BKoc_yel.js.map +0 -1
- package/dist/controls-Ck-PMt__.cjs +0 -2
- package/dist/controls-Ck-PMt__.cjs.map +0 -1
- package/dist/creditCards-D_HwRUBz.cjs +0 -2
- package/dist/creditCards-D_HwRUBz.cjs.map +0 -1
- package/dist/creditCards-D_iWmtG6.js.map +0 -1
- package/dist/data-CdQximqm.js +0 -689
- package/dist/data-CdQximqm.js.map +0 -1
- package/dist/data-PS4ygCyj.cjs +0 -2
- package/dist/data-PS4ygCyj.cjs.map +0 -1
- package/dist/dateUtils-CUY6CRCf.js.map +0 -1
- package/dist/dateUtils-Dq1vaA-D.cjs +0 -2
- package/dist/dateUtils-Dq1vaA-D.cjs.map +0 -1
- package/dist/display-YC1fVpXA.js +0 -782
- package/dist/display-YC1fVpXA.js.map +0 -1
- package/dist/display-slIo1bQI.cjs +0 -3
- package/dist/display-slIo1bQI.cjs.map +0 -1
- package/dist/dropdowns-DFbUoZ8Q.cjs +0 -2
- package/dist/dropdowns-DFbUoZ8Q.cjs.map +0 -1
- package/dist/dropdowns-nW3MY5XG.js +0 -1715
- package/dist/dropdowns-nW3MY5XG.js.map +0 -1
- package/dist/feedback-6MNb2Xyk.cjs +0 -2
- package/dist/feedback-6MNb2Xyk.cjs.map +0 -1
- package/dist/feedback-CPwJaQHY.js +0 -259
- package/dist/feedback-CPwJaQHY.js.map +0 -1
- package/dist/form-CMsZo6Dm.cjs +0 -2
- package/dist/form-CMsZo6Dm.cjs.map +0 -1
- package/dist/form-WU6DcQGD.js +0 -164
- package/dist/form-WU6DcQGD.js.map +0 -1
- package/dist/frameworkTexts-BSXUtXOp.cjs +0 -2
- package/dist/frameworkTexts-BSXUtXOp.cjs.map +0 -1
- package/dist/frameworkTexts-DP5RUl19.js +0 -131
- package/dist/frameworkTexts-DP5RUl19.js.map +0 -1
- package/dist/icons-CBMl-kOM.js.map +0 -1
- package/dist/icons-D3n9-919.cjs +0 -2
- package/dist/icons-D3n9-919.cjs.map +0 -1
- package/dist/inputs-B7rGMLMr.js +0 -1753
- package/dist/inputs-B7rGMLMr.js.map +0 -1
- package/dist/inputs-BiN62hgH.cjs +0 -2
- package/dist/inputs-BiN62hgH.cjs.map +0 -1
- package/dist/layout-BMggJ_qO.cjs +0 -2
- package/dist/layout-BMggJ_qO.cjs.map +0 -1
- package/dist/layout-DBYHyCTr.js +0 -883
- package/dist/layout-DBYHyCTr.js.map +0 -1
- package/dist/licensing-Be3g-PJt.cjs +0 -2
- package/dist/licensing-Be3g-PJt.cjs.map +0 -1
- package/dist/licensing-f5KYVz7D.js.map +0 -1
- package/dist/media-BPzMgzqE.js +0 -405
- package/dist/media-BPzMgzqE.js.map +0 -1
- package/dist/media-D63hxCAJ.cjs +0 -2
- package/dist/media-D63hxCAJ.cjs.map +0 -1
- package/dist/overlays-CCeYD6hT.js +0 -555
- package/dist/overlays-CCeYD6hT.js.map +0 -1
- package/dist/overlays-CsRN5OG8.cjs +0 -2
- package/dist/overlays-CsRN5OG8.cjs.map +0 -1
- package/dist/popoverStack--0r2oJCD.js +0 -44
- package/dist/popoverStack--0r2oJCD.js.map +0 -1
- package/dist/popoverStack-BmMk-VZJ.cjs +0 -2
- package/dist/popoverStack-BmMk-VZJ.cjs.map +0 -1
- package/dist/theme-CJuqObWL.cjs +0 -2
- package/dist/theme-CJuqObWL.cjs.map +0 -1
- package/dist/theme-DAOU1aPs.js.map +0 -1
- package/dist/useGhostText-DG0bzcao.js +0 -68
- package/dist/useGhostText-DG0bzcao.js.map +0 -1
- package/dist/useGhostText-mibV4s1-.cjs +0 -2
- package/dist/useGhostText-mibV4s1-.cjs.map +0 -1
- package/dist/useKeyboardNav-CCUoRMgm.cjs +0 -2
- package/dist/useKeyboardNav-CCUoRMgm.cjs.map +0 -1
- package/dist/useKeyboardNav-iEXOdEMB.js +0 -43
- package/dist/useKeyboardNav-iEXOdEMB.js.map +0 -1
- package/dist/useModalLayer-Bf4TcEz-.js +0 -58
- package/dist/useModalLayer-Bf4TcEz-.js.map +0 -1
- package/dist/useModalLayer-DxYhhgRO.cjs +0 -2
- package/dist/useModalLayer-DxYhhgRO.cjs.map +0 -1
- package/dist/utils/proActivationWarning.d.ts +0 -7
- package/dist/validators-B6yWdsu2.cjs +0 -2
- package/dist/validators-B6yWdsu2.cjs.map +0 -1
- package/dist/validators-DVYOtFnw.js.map +0 -1
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import { D as e } from "./frameworkTexts-o43FqY1A.js";
|
|
2
|
+
import { g as t } from "./validators-ULebNme2.js";
|
|
3
|
+
import { createContext as n, useCallback as r, useContext as i, useEffect as a, useMemo as o, useRef as s, useState as c } from "react";
|
|
4
|
+
import { jsx as l } from "react/jsx-runtime";
|
|
5
|
+
//#region src/components/form/MForm/FormContext.ts
|
|
6
|
+
var u = n(null);
|
|
7
|
+
function d() {
|
|
8
|
+
return i(u);
|
|
9
|
+
}
|
|
10
|
+
//#endregion
|
|
11
|
+
//#region src/components/form/MForm/MForm.tsx
|
|
12
|
+
function f({ initialValues: n = {}, onSubmit: i, onChange: a, validationMode: d = "onBlur", children: f, className: p, style: m, noValidate: h = !0, ...g }) {
|
|
13
|
+
let [_, v] = c({ ...n }), [y, b] = c({}), [x, S] = c({}), [C, w] = c(!1), T = s(/* @__PURE__ */ new Map()), E = s(_), D = r((e) => {
|
|
14
|
+
T.current.set(e.name, e);
|
|
15
|
+
}, []), O = r((e) => {
|
|
16
|
+
T.current.delete(e);
|
|
17
|
+
}, []), k = e(), A = r((e, n) => {
|
|
18
|
+
let r = T.current.get(e);
|
|
19
|
+
if (!r) return { valid: !0 };
|
|
20
|
+
let i = n === void 0 ? E.current[e] : n, a = i == null ? "" : String(i);
|
|
21
|
+
if (r.required) {
|
|
22
|
+
let e = k(t(a));
|
|
23
|
+
if (!e.valid) return e;
|
|
24
|
+
}
|
|
25
|
+
if (r.validate) for (let e of r.validate) {
|
|
26
|
+
let t = e(a);
|
|
27
|
+
if (!t.valid) return t;
|
|
28
|
+
}
|
|
29
|
+
return { valid: !0 };
|
|
30
|
+
}, [k]), j = r((e, t) => {
|
|
31
|
+
let n = A(e, t);
|
|
32
|
+
return b((t) => {
|
|
33
|
+
if (n.valid) {
|
|
34
|
+
let n = { ...t };
|
|
35
|
+
return delete n[e], n;
|
|
36
|
+
}
|
|
37
|
+
return {
|
|
38
|
+
...t,
|
|
39
|
+
[e]: n.error
|
|
40
|
+
};
|
|
41
|
+
}), n;
|
|
42
|
+
}, [A]), M = r(() => {
|
|
43
|
+
let e = !0, t = {};
|
|
44
|
+
for (let [n] of T.current) {
|
|
45
|
+
let r = A(n);
|
|
46
|
+
r.valid || (e = !1, t[n] = r.error);
|
|
47
|
+
}
|
|
48
|
+
b(t);
|
|
49
|
+
let n = {};
|
|
50
|
+
for (let [e] of T.current) n[e] = !0;
|
|
51
|
+
return S(n), e;
|
|
52
|
+
}, [A]), N = r((e, t) => {
|
|
53
|
+
let n = {
|
|
54
|
+
...E.current,
|
|
55
|
+
[e]: t
|
|
56
|
+
};
|
|
57
|
+
E.current = n, v(n), a?.(n), d === "onChange" && x[e] && j(e, t);
|
|
58
|
+
}, [
|
|
59
|
+
a,
|
|
60
|
+
d,
|
|
61
|
+
x,
|
|
62
|
+
j
|
|
63
|
+
]), P = r((e, t) => {
|
|
64
|
+
b((n) => ({
|
|
65
|
+
...n,
|
|
66
|
+
[e]: t
|
|
67
|
+
}));
|
|
68
|
+
}, []), F = r((e, t) => {
|
|
69
|
+
S((n) => ({
|
|
70
|
+
...n,
|
|
71
|
+
[e]: t
|
|
72
|
+
})), d === "onBlur" && t && j(e);
|
|
73
|
+
}, [d, j]), I = r(() => {
|
|
74
|
+
E.current = { ...n }, v(E.current), b({}), S({}), w(!1);
|
|
75
|
+
}, [n]), L = r(async (e) => {
|
|
76
|
+
if (e.preventDefault(), C || !M()) return;
|
|
77
|
+
w(!0);
|
|
78
|
+
let t = {
|
|
79
|
+
setSubmitting: w,
|
|
80
|
+
resetForm: I,
|
|
81
|
+
setFieldError: P
|
|
82
|
+
};
|
|
83
|
+
try {
|
|
84
|
+
await i?.(E.current, t);
|
|
85
|
+
} finally {
|
|
86
|
+
w(!1);
|
|
87
|
+
}
|
|
88
|
+
}, [
|
|
89
|
+
C,
|
|
90
|
+
M,
|
|
91
|
+
i,
|
|
92
|
+
I,
|
|
93
|
+
P
|
|
94
|
+
]), R = o(() => ({
|
|
95
|
+
values: _,
|
|
96
|
+
errors: y,
|
|
97
|
+
touched: x,
|
|
98
|
+
registerField: D,
|
|
99
|
+
unregisterField: O,
|
|
100
|
+
setFieldValue: N,
|
|
101
|
+
setFieldError: P,
|
|
102
|
+
setFieldTouched: F,
|
|
103
|
+
validateField: j,
|
|
104
|
+
validateAll: M,
|
|
105
|
+
resetForm: I,
|
|
106
|
+
isSubmitting: C
|
|
107
|
+
}), [
|
|
108
|
+
_,
|
|
109
|
+
y,
|
|
110
|
+
x,
|
|
111
|
+
D,
|
|
112
|
+
O,
|
|
113
|
+
N,
|
|
114
|
+
P,
|
|
115
|
+
F,
|
|
116
|
+
j,
|
|
117
|
+
M,
|
|
118
|
+
I,
|
|
119
|
+
C
|
|
120
|
+
]);
|
|
121
|
+
return /* @__PURE__ */ l(u.Provider, {
|
|
122
|
+
value: R,
|
|
123
|
+
children: /* @__PURE__ */ l("form", {
|
|
124
|
+
onSubmit: L,
|
|
125
|
+
noValidate: h,
|
|
126
|
+
className: `form${p ? ` ${p}` : ""}`,
|
|
127
|
+
style: m,
|
|
128
|
+
...g,
|
|
129
|
+
children: typeof f == "function" ? f(R) : f
|
|
130
|
+
})
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
//#endregion
|
|
134
|
+
//#region src/components/form/MForm/useFormField.ts
|
|
135
|
+
function p(e, t) {
|
|
136
|
+
let n = d();
|
|
137
|
+
a(() => {
|
|
138
|
+
if (n) return n.registerField({
|
|
139
|
+
name: e,
|
|
140
|
+
validate: t?.validate,
|
|
141
|
+
required: t?.required
|
|
142
|
+
}), () => n.unregisterField(e);
|
|
143
|
+
}, [
|
|
144
|
+
n,
|
|
145
|
+
e,
|
|
146
|
+
t?.validate,
|
|
147
|
+
t?.required
|
|
148
|
+
]);
|
|
149
|
+
let i = r((t) => {
|
|
150
|
+
n?.setFieldValue(e, t);
|
|
151
|
+
}, [n, e]), o = r(() => {
|
|
152
|
+
n?.setFieldTouched(e, !0);
|
|
153
|
+
}, [n, e]);
|
|
154
|
+
return {
|
|
155
|
+
value: n?.values[e] ?? "",
|
|
156
|
+
error: n?.errors[e],
|
|
157
|
+
touched: n?.touched[e] ?? !1,
|
|
158
|
+
onChange: i,
|
|
159
|
+
onBlur: o
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
//#endregion
|
|
163
|
+
export { f as n, d as r, p as t };
|
|
164
|
+
|
|
165
|
+
//# sourceMappingURL=form-CJmMZgsH.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-CJmMZgsH.js","names":[],"sources":["../src/components/form/MForm/FormContext.ts","../src/components/form/MForm/MForm.tsx","../src/components/form/MForm/useFormField.ts"],"sourcesContent":["import {createContext, useContext} from 'react'\nimport type {MFormContextValue} from './MForm.types'\n\nexport const FormContext = createContext<MFormContextValue | null>(null)\n\n// Read the nearest form context to integrate custom fields with shared state.\nexport function useFormContext(): MFormContextValue | null {\n return useContext(FormContext)\n}\n","import {useState, useRef, useCallback, useMemo} from 'react'\nimport type * as React from 'react'\nimport type {MFormProps, MFieldRegistration, MFormContextValue, MFormHelpers} from './MForm.types'\nimport {FormContext} from './FormContext'\nimport {validateRequired} from '../../../utils/validators'\nimport type {ValidationResult} from '../../../utils/validators'\nimport {useMValidationMessage} from '../../../i18n/frameworkTexts'\nimport './MForm.css'\n\n// Coordinate form values, validation state and submit helpers through context.\nexport function MForm({\n initialValues = {},\n onSubmit,\n onChange,\n validationMode = 'onBlur',\n children,\n className,\n style,\n noValidate = true,\n ...rest\n}: MFormProps) {\n const [values, setValues] = useState<Record<string, unknown>>({...initialValues})\n const [errors, setErrors] = useState<Record<string, string>>({})\n const [touched, setTouched] = useState<Record<string, boolean>>({})\n const [isSubmitting, setIsSubmitting] = useState(false)\n const fieldsRef = useRef<Map<string, MFieldRegistration>>(new Map())\n // Latest values outside the render cycle, so validation never reads a stale closure.\n const valuesRef = useRef<Record<string, unknown>>(values)\n\n // Track mounted fields so validation stays aligned with active inputs.\n const registerField = useCallback((reg: MFieldRegistration) => {\n fieldsRef.current.set(reg.name, reg)\n }, [])\n\n const unregisterField = useCallback((name: string) => {\n fieldsRef.current.delete(name)\n }, [])\n\n const translateValidation = useMValidationMessage()\n\n // Run required and custom validators without mutating visible error state yet.\n const validateFieldInternal = useCallback(\n (name: string, val?: unknown): ValidationResult => {\n const reg = fieldsRef.current.get(name)\n if (!reg) return {valid: true}\n\n const fieldValue = val !== undefined ? val : valuesRef.current[name]\n const strValue = fieldValue != null ? String(fieldValue) : ''\n\n // Required check\n if (reg.required) {\n const reqResult = translateValidation(validateRequired(strValue))\n if (!reqResult.valid) return reqResult\n }\n\n // Custom validators\n if (reg.validate) {\n for (const validator of reg.validate) {\n const result = validator(strValue)\n if (!result.valid) return result\n }\n }\n\n return {valid: true}\n },\n [translateValidation]\n )\n\n // Persist the latest validation result for a single field.\n const validateField = useCallback(\n (name: string, val?: unknown): ValidationResult => {\n const result = validateFieldInternal(name, val)\n setErrors((prev) => {\n if (result.valid) {\n const next = {...prev}\n delete next[name]\n return next\n }\n return {...prev, [name]: result.error!}\n })\n return result\n },\n [validateFieldInternal]\n )\n\n // Validate every registered field before submit.\n const validateAll = useCallback((): boolean => {\n let allValid = true\n const newErrors: Record<string, string> = {}\n\n for (const [name] of fieldsRef.current) {\n const result = validateFieldInternal(name)\n if (!result.valid) {\n allValid = false\n newErrors[name] = result.error!\n }\n }\n\n setErrors(newErrors)\n // Mark all as touched\n const allTouched: Record<string, boolean> = {}\n for (const [name] of fieldsRef.current) {\n allTouched[name] = true\n }\n setTouched(allTouched)\n\n return allValid\n }, [validateFieldInternal])\n\n // Update field values and trigger onChange or validation according to mode.\n const setFieldValue = useCallback(\n (name: string, val: unknown) => {\n const next = {...valuesRef.current, [name]: val}\n valuesRef.current = next\n setValues(next)\n onChange?.(next)\n\n if (validationMode === 'onChange' && touched[name]) {\n validateField(name, val)\n }\n },\n [onChange, validationMode, touched, validateField]\n )\n\n const setFieldError = useCallback((name: string, error: string) => {\n setErrors((prev) => ({...prev, [name]: error}))\n }, [])\n\n // Mark fields as touched so blur validation can start surfacing errors.\n const setFieldTouched = useCallback(\n (name: string, isTouched: boolean) => {\n setTouched((prev) => ({...prev, [name]: isTouched}))\n if (validationMode === 'onBlur' && isTouched) {\n validateField(name)\n }\n },\n [validationMode, validateField]\n )\n\n const resetForm = useCallback(() => {\n valuesRef.current = {...initialValues}\n setValues(valuesRef.current)\n setErrors({})\n setTouched({})\n setIsSubmitting(false)\n }, [initialValues])\n\n // Guard submit flow with validation and a single in-flight submission state.\n const handleSubmit = useCallback(\n async (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault()\n if (isSubmitting) return\n\n const valid = validateAll()\n if (!valid) return\n\n setIsSubmitting(true)\n const helpers: MFormHelpers = {\n setSubmitting: setIsSubmitting,\n resetForm,\n setFieldError,\n }\n\n try {\n await onSubmit?.(valuesRef.current, helpers)\n } finally {\n setIsSubmitting(false)\n }\n },\n [isSubmitting, validateAll, onSubmit, resetForm, setFieldError]\n )\n\n // Memoize the public form context to limit downstream re-renders.\n const ctx = useMemo<MFormContextValue>(\n () => ({\n values,\n errors,\n touched,\n registerField,\n unregisterField,\n setFieldValue,\n setFieldError,\n setFieldTouched,\n validateField,\n validateAll,\n resetForm,\n isSubmitting,\n }),\n [\n values,\n errors,\n touched,\n registerField,\n unregisterField,\n setFieldValue,\n setFieldError,\n setFieldTouched,\n validateField,\n validateAll,\n resetForm,\n isSubmitting,\n ]\n )\n\n return (\n <FormContext.Provider value={ctx}>\n <form\n onSubmit={handleSubmit}\n noValidate={noValidate}\n className={`form${className ? ` ${className}` : ''}`}\n style={style}\n {...rest}\n >\n {typeof children === 'function' ? children(ctx) : children}\n </form>\n </FormContext.Provider>\n )\n}\n","import {useEffect, useCallback} from 'react'\nimport {useFormContext} from './FormContext'\nimport type {ValidatorFn} from '../../../utils/validators'\n\nexport interface MUseFormFieldOptions {\n validate?: ValidatorFn[]\n required?: boolean\n}\n\nexport interface MUseFormFieldReturn {\n value: unknown\n error: string | undefined\n touched: boolean\n onChange: (value: unknown) => void\n onBlur: () => void\n}\n\n// Connect a field name to the nearest form context and expose field-level helpers.\nexport function useFormField(name: string, options?: MUseFormFieldOptions): MUseFormFieldReturn {\n const ctx = useFormContext()\n\n // Register the field definition so the form can validate and reset it centrally.\n useEffect(() => {\n if (!ctx) return\n ctx.registerField({\n name,\n validate: options?.validate,\n required: options?.required,\n })\n return () => ctx.unregisterField(name)\n }, [ctx, name, options?.validate, options?.required])\n\n // Forward value updates into the form state.\n const onChange = useCallback(\n (val: unknown) => {\n ctx?.setFieldValue(name, val)\n },\n [ctx, name]\n )\n\n // Mark the field as touched when the control loses focus.\n const onBlur = useCallback(() => {\n ctx?.setFieldTouched(name, true)\n }, [ctx, name])\n\n return {\n value: ctx?.values[name] ?? '',\n error: ctx?.errors[name],\n touched: ctx?.touched[name] ?? false,\n onChange,\n onBlur,\n }\n}\n"],"mappings":"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"}
|
package/dist/form.cjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
const {ensureStyles}=require('./style-runtime.cjs')
|
|
2
2
|
ensureStyles()
|
|
3
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./form-
|
|
3
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./form-Br56h5EF.cjs`);exports.MForm=e.n,exports.useFormContext=e.r,exports.useFormField=e.t;
|
package/dist/form.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
function e(e){return e.replace(/\D/g,``)}function t(e){return e.replace(/[^a-zA-Z0-9]/g,``)}function n(e){return e.replace(/\b\w/g,e=>e.toUpperCase())}function r(e){return e.replace(/\s/g,``).toUpperCase().replace(/(.{4})/g,`$1 `).trim()}function i(e){return e.replace(/\s/g,``).toUpperCase()}var a={PL:[3,3,3],DE:[3,4,3],US:[3,3,4],GB:[4,3,3],FR:[2,2,2,2,2],DEFAULT:[3,3,3]};function o(t,n={}){let r=e(t);if(!r)return``;let i=n.groupPattern??a[n.countryCode?.toUpperCase()??``]??a.DEFAULT,o=[],s=0;for(let e of i){if(s>=r.length)break;o.push(r.slice(s,s+e)),s+=e}return s<r.length&&o.push(r.slice(s)),o.join(` `)}function s(t){let n=e(t);return n.length<=3?n:n.length<=6?`${n.slice(0,3)}-${n.slice(3)}`:n.length<=8?`${n.slice(0,3)}-${n.slice(3,6)}-${n.slice(6)}`:`${n.slice(0,3)}-${n.slice(3,6)}-${n.slice(6,8)}-${n.slice(8,10)}`}function c(e,t={}){let{decimalSeparator:n=`,`,thousandSeparator:r=` `,precision:i=2}=t,a=e.replace(/[^\d.,-]/g,``);a=a.replace(`,`,`.`);let o=a.split(`.`),s=o[0]||`0`,c=o.length>1?o[1]:``,l=s.startsWith(`-`);l&&(s=s.slice(1)),s=s.replace(/^0+/,``)||`0`,r&&(s=s.replace(/\B(?=(\d{3})+(?!\d))/g,r)),c=c.slice(0,i);let u=c?`${s}${n}${c}`:s;return l?`-${u}`:u}function l(e,t=` `,n=`,`){let r=e;t&&(r=r.split(t).join(``)),r=r.replace(n,`.`),r=r.replace(/[^\d.-]/g,``);let i=parseFloat(r);return isNaN(i)?null:i}function u(e,t,n){let r=0;for(let t=0;t<n&&t<e.length;t++)e[t]!==` `&&e[t]!==`-`&&r++;let i=0;for(let e=0;e<t.length;e++)if(t[e]!==` `&&t[e]!==`-`&&i++,i===r)return e+1;return t.length}function d(e,t=`DD/MM/YYYY`,n=`/`){return e?t===`YYYY/MM/DD`?e.length<=4?e:e.length<=6?`${e.slice(0,4)}${n}${e.slice(4)}`:`${e.slice(0,4)}${n}${e.slice(4,6)}${n}${e.slice(6,8)}`:e.length<=2?e:e.length<=4?`${e.slice(0,2)}${n}${e.slice(2)}`:`${e.slice(0,2)}${n}${e.slice(2,4)}${n}${e.slice(4,8)}`:``}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return t}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return n}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return e}});
|
|
2
|
-
//# sourceMappingURL=formatters-
|
|
2
|
+
//# sourceMappingURL=formatters-CauWlsnM.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatters-
|
|
1
|
+
{"version":3,"file":"formatters-CauWlsnM.cjs","names":[],"sources":["../src/utils/formatters.ts"],"sourcesContent":["// Remove every non-digit character from the input.\nexport function stripNonDigits(value: string): string {\n return value.replace(/\\D/g, '')\n}\n\n// Keep only letters and digits for identifier-like inputs.\nexport function stripNonAlphanumeric(value: string): string {\n return value.replace(/[^a-zA-Z0-9]/g, '')\n}\n\n// Capitalize the first letter of every detected word.\nexport function capitalizeWords(value: string): string {\n return value.replace(/\\b\\w/g, (ch) => ch.toUpperCase())\n}\n\n// Group IBAN values into blocks of four characters.\nexport function formatIBAN(value: string): string {\n const clean = value.replace(/\\s/g, '').toUpperCase()\n return clean.replace(/(.{4})/g, '$1 ').trim()\n}\n\n// Return a raw IBAN string without grouping spaces.\nexport function unformatIBAN(value: string): string {\n return value.replace(/\\s/g, '').toUpperCase()\n}\n\nexport interface PhoneFormatOptions {\n countryCode?: string\n groupPattern?: number[]\n}\n\nconst PHONE_GROUPS: Record<string, number[]> = {\n PL: [3, 3, 3],\n DE: [3, 4, 3],\n US: [3, 3, 4],\n GB: [4, 3, 3],\n FR: [2, 2, 2, 2, 2],\n DEFAULT: [3, 3, 3],\n}\n\n// Format a phone number using country-specific or custom digit groups.\nexport function formatPhone(value: string, options: PhoneFormatOptions = {}): string {\n const digits = stripNonDigits(value)\n if (!digits) return ''\n\n const groups =\n options.groupPattern ?? PHONE_GROUPS[options.countryCode?.toUpperCase() ?? ''] ?? PHONE_GROUPS.DEFAULT\n\n const parts: string[] = []\n let pos = 0\n for (const len of groups) {\n if (pos >= digits.length) break\n parts.push(digits.slice(pos, pos + len))\n pos += len\n }\n if (pos < digits.length) {\n parts.push(digits.slice(pos))\n }\n return parts.join(' ')\n}\n\n// Format Polish NIP values with dash separators.\nexport function formatNIP(value: string): string {\n const digits = stripNonDigits(value)\n if (digits.length <= 3) return digits\n if (digits.length <= 6) return `${digits.slice(0, 3)}-${digits.slice(3)}`\n if (digits.length <= 8) return `${digits.slice(0, 3)}-${digits.slice(3, 6)}-${digits.slice(6)}`\n return `${digits.slice(0, 3)}-${digits.slice(3, 6)}-${digits.slice(6, 8)}-${digits.slice(8, 10)}`\n}\n\nexport interface CurrencyFormatOptions {\n decimalSeparator?: '.' | ','\n thousandSeparator?: ' ' | '.' | ',' | ''\n precision?: number\n}\n\n// Format a numeric string using configurable currency separators and precision.\nexport function formatCurrency(value: string, options: CurrencyFormatOptions = {}): string {\n const {decimalSeparator = ',', thousandSeparator = ' ', precision = 2} = options\n\n let clean = value.replace(/[^\\d.,-]/g, '')\n clean = clean.replace(',', '.')\n\n const parts = clean.split('.')\n let intPart = parts[0] || '0'\n let decPart = parts.length > 1 ? parts[1] : ''\n\n const isNegative = intPart.startsWith('-')\n if (isNegative) intPart = intPart.slice(1)\n\n intPart = intPart.replace(/^0+/, '') || '0'\n\n if (thousandSeparator) {\n intPart = intPart.replace(/\\B(?=(\\d{3})+(?!\\d))/g, thousandSeparator)\n }\n\n decPart = decPart.slice(0, precision)\n\n const result = decPart ? `${intPart}${decimalSeparator}${decPart}` : intPart\n\n return isNegative ? `-${result}` : result\n}\n\n// Parse a formatted currency string back into a number.\nexport function parseCurrencyToNumber(\n formatted: string,\n thousandSeparator: string = ' ',\n decimalSeparator: string = ','\n): number | null {\n let clean = formatted\n if (thousandSeparator) {\n clean = clean.split(thousandSeparator).join('')\n }\n clean = clean.replace(decimalSeparator, '.')\n clean = clean.replace(/[^\\d.-]/g, '')\n const num = parseFloat(clean)\n return isNaN(num) ? null : num\n}\n\n// Preserve the logical cursor position after inserting separators into the value.\nexport function adjustCursorAfterFormat(oldValue: string, newValue: string, oldCursor: number): number {\n let realCharsBefore = 0\n for (let i = 0; i < oldCursor && i < oldValue.length; i++) {\n if (oldValue[i] !== ' ' && oldValue[i] !== '-') {\n realCharsBefore++\n }\n }\n\n let count = 0\n for (let i = 0; i < newValue.length; i++) {\n if (newValue[i] !== ' ' && newValue[i] !== '-') {\n count++\n }\n if (count === realCharsBefore) {\n return i + 1\n }\n }\n return newValue.length\n}\n\n// Format date digits into a display string with the chosen separator.\nexport function formatDateInput(\n digits: string,\n format: 'DD/MM/YYYY' | 'MM/DD/YYYY' | 'YYYY/MM/DD' = 'DD/MM/YYYY',\n separator: string = '/'\n): string {\n if (!digits) return ''\n\n if (format === 'YYYY/MM/DD') {\n if (digits.length <= 4) return digits\n if (digits.length <= 6) return `${digits.slice(0, 4)}${separator}${digits.slice(4)}`\n return `${digits.slice(0, 4)}${separator}${digits.slice(4, 6)}${separator}${digits.slice(6, 8)}`\n }\n\n // DD/MM/YYYY or MM/DD/YYYY — first two groups are 2 digits\n if (digits.length <= 2) return digits\n if (digits.length <= 4) return `${digits.slice(0, 2)}${separator}${digits.slice(2)}`\n return `${digits.slice(0, 2)}${separator}${digits.slice(2, 4)}${separator}${digits.slice(4, 8)}`\n}\n\nexport {formatPostCode} from './postalCodes'\nexport {formatCardNumber} from './creditCards'\n"],"mappings":"AACA,SAAgB,EAAe,EAAuB,CAClD,OAAO,EAAM,QAAQ,MAAO,GAAG,CAInC,SAAgB,EAAqB,EAAuB,CACxD,OAAO,EAAM,QAAQ,gBAAiB,GAAG,CAI7C,SAAgB,EAAgB,EAAuB,CACnD,OAAO,EAAM,QAAQ,QAAU,GAAO,EAAG,aAAa,CAAC,CAI3D,SAAgB,EAAW,EAAuB,CAE9C,OADc,EAAM,QAAQ,MAAO,GAAG,CAAC,aAAa,CACvC,QAAQ,UAAW,MAAM,CAAC,MAAM,CAIjD,SAAgB,EAAa,EAAuB,CAChD,OAAO,EAAM,QAAQ,MAAO,GAAG,CAAC,aAAa,CAQjD,IAAM,EAAyC,CAC3C,GAAI,CAAC,EAAG,EAAG,EAAE,CACb,GAAI,CAAC,EAAG,EAAG,EAAE,CACb,GAAI,CAAC,EAAG,EAAG,EAAE,CACb,GAAI,CAAC,EAAG,EAAG,EAAE,CACb,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAE,CACnB,QAAS,CAAC,EAAG,EAAG,EAAE,CACrB,CAGD,SAAgB,EAAY,EAAe,EAA8B,EAAE,CAAU,CACjF,IAAM,EAAS,EAAe,EAAM,CACpC,GAAI,CAAC,EAAQ,MAAO,GAEpB,IAAM,EACF,EAAQ,cAAgB,EAAa,EAAQ,aAAa,aAAa,EAAI,KAAO,EAAa,QAE7F,EAAkB,EAAE,CACtB,EAAM,EACV,IAAK,IAAM,KAAO,EAAQ,CACtB,GAAI,GAAO,EAAO,OAAQ,MAC1B,EAAM,KAAK,EAAO,MAAM,EAAK,EAAM,EAAI,CAAC,CACxC,GAAO,EAKX,OAHI,EAAM,EAAO,QACb,EAAM,KAAK,EAAO,MAAM,EAAI,CAAC,CAE1B,EAAM,KAAK,IAAI,CAI1B,SAAgB,EAAU,EAAuB,CAC7C,IAAM,EAAS,EAAe,EAAM,CAIpC,OAHI,EAAO,QAAU,EAAU,EAC3B,EAAO,QAAU,EAAU,GAAG,EAAO,MAAM,EAAG,EAAE,CAAC,GAAG,EAAO,MAAM,EAAE,GACnE,EAAO,QAAU,EAAU,GAAG,EAAO,MAAM,EAAG,EAAE,CAAC,GAAG,EAAO,MAAM,EAAG,EAAE,CAAC,GAAG,EAAO,MAAM,EAAE,GACtF,GAAG,EAAO,MAAM,EAAG,EAAE,CAAC,GAAG,EAAO,MAAM,EAAG,EAAE,CAAC,GAAG,EAAO,MAAM,EAAG,EAAE,CAAC,GAAG,EAAO,MAAM,EAAG,GAAG,GAUnG,SAAgB,EAAe,EAAe,EAAiC,EAAE,CAAU,CACvF,GAAM,CAAC,mBAAmB,IAAK,oBAAoB,IAAK,YAAY,GAAK,EAErE,EAAQ,EAAM,QAAQ,YAAa,GAAG,CAC1C,EAAQ,EAAM,QAAQ,IAAK,IAAI,CAE/B,IAAM,EAAQ,EAAM,MAAM,IAAI,CAC1B,EAAU,EAAM,IAAM,IACtB,EAAU,EAAM,OAAS,EAAI,EAAM,GAAK,GAEtC,EAAa,EAAQ,WAAW,IAAI,CACtC,IAAY,EAAU,EAAQ,MAAM,EAAE,EAE1C,EAAU,EAAQ,QAAQ,MAAO,GAAG,EAAI,IAEpC,IACA,EAAU,EAAQ,QAAQ,wBAAyB,EAAkB,EAGzE,EAAU,EAAQ,MAAM,EAAG,EAAU,CAErC,IAAM,EAAS,EAAU,GAAG,IAAU,IAAmB,IAAY,EAErE,OAAO,EAAa,IAAI,IAAW,EAIvC,SAAgB,EACZ,EACA,EAA4B,IAC5B,EAA2B,IACd,CACb,IAAI,EAAQ,EACR,IACA,EAAQ,EAAM,MAAM,EAAkB,CAAC,KAAK,GAAG,EAEnD,EAAQ,EAAM,QAAQ,EAAkB,IAAI,CAC5C,EAAQ,EAAM,QAAQ,WAAY,GAAG,CACrC,IAAM,EAAM,WAAW,EAAM,CAC7B,OAAO,MAAM,EAAI,CAAG,KAAO,EAI/B,SAAgB,EAAwB,EAAkB,EAAkB,EAA2B,CACnG,IAAI,EAAkB,EACtB,IAAK,IAAI,EAAI,EAAG,EAAI,GAAa,EAAI,EAAS,OAAQ,IAC9C,EAAS,KAAO,KAAO,EAAS,KAAO,KACvC,IAIR,IAAI,EAAQ,EACZ,IAAK,IAAI,EAAI,EAAG,EAAI,EAAS,OAAQ,IAIjC,GAHI,EAAS,KAAO,KAAO,EAAS,KAAO,KACvC,IAEA,IAAU,EACV,OAAO,EAAI,EAGnB,OAAO,EAAS,OAIpB,SAAgB,EACZ,EACA,EAAqD,aACrD,EAAoB,IACd,CAYN,OAXK,EAED,IAAW,aACP,EAAO,QAAU,EAAU,EAC3B,EAAO,QAAU,EAAU,GAAG,EAAO,MAAM,EAAG,EAAE,GAAG,IAAY,EAAO,MAAM,EAAE,GAC3E,GAAG,EAAO,MAAM,EAAG,EAAE,GAAG,IAAY,EAAO,MAAM,EAAG,EAAE,GAAG,IAAY,EAAO,MAAM,EAAG,EAAE,GAI9F,EAAO,QAAU,EAAU,EAC3B,EAAO,QAAU,EAAU,GAAG,EAAO,MAAM,EAAG,EAAE,GAAG,IAAY,EAAO,MAAM,EAAE,GAC3E,GAAG,EAAO,MAAM,EAAG,EAAE,GAAG,IAAY,EAAO,MAAM,EAAG,EAAE,GAAG,IAAY,EAAO,MAAM,EAAG,EAAE,GAX1E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatters-
|
|
1
|
+
{"version":3,"file":"formatters-Doqdu_w1.js","names":[],"sources":["../src/utils/formatters.ts"],"sourcesContent":["// Remove every non-digit character from the input.\nexport function stripNonDigits(value: string): string {\n return value.replace(/\\D/g, '')\n}\n\n// Keep only letters and digits for identifier-like inputs.\nexport function stripNonAlphanumeric(value: string): string {\n return value.replace(/[^a-zA-Z0-9]/g, '')\n}\n\n// Capitalize the first letter of every detected word.\nexport function capitalizeWords(value: string): string {\n return value.replace(/\\b\\w/g, (ch) => ch.toUpperCase())\n}\n\n// Group IBAN values into blocks of four characters.\nexport function formatIBAN(value: string): string {\n const clean = value.replace(/\\s/g, '').toUpperCase()\n return clean.replace(/(.{4})/g, '$1 ').trim()\n}\n\n// Return a raw IBAN string without grouping spaces.\nexport function unformatIBAN(value: string): string {\n return value.replace(/\\s/g, '').toUpperCase()\n}\n\nexport interface PhoneFormatOptions {\n countryCode?: string\n groupPattern?: number[]\n}\n\nconst PHONE_GROUPS: Record<string, number[]> = {\n PL: [3, 3, 3],\n DE: [3, 4, 3],\n US: [3, 3, 4],\n GB: [4, 3, 3],\n FR: [2, 2, 2, 2, 2],\n DEFAULT: [3, 3, 3],\n}\n\n// Format a phone number using country-specific or custom digit groups.\nexport function formatPhone(value: string, options: PhoneFormatOptions = {}): string {\n const digits = stripNonDigits(value)\n if (!digits) return ''\n\n const groups =\n options.groupPattern ?? PHONE_GROUPS[options.countryCode?.toUpperCase() ?? ''] ?? PHONE_GROUPS.DEFAULT\n\n const parts: string[] = []\n let pos = 0\n for (const len of groups) {\n if (pos >= digits.length) break\n parts.push(digits.slice(pos, pos + len))\n pos += len\n }\n if (pos < digits.length) {\n parts.push(digits.slice(pos))\n }\n return parts.join(' ')\n}\n\n// Format Polish NIP values with dash separators.\nexport function formatNIP(value: string): string {\n const digits = stripNonDigits(value)\n if (digits.length <= 3) return digits\n if (digits.length <= 6) return `${digits.slice(0, 3)}-${digits.slice(3)}`\n if (digits.length <= 8) return `${digits.slice(0, 3)}-${digits.slice(3, 6)}-${digits.slice(6)}`\n return `${digits.slice(0, 3)}-${digits.slice(3, 6)}-${digits.slice(6, 8)}-${digits.slice(8, 10)}`\n}\n\nexport interface CurrencyFormatOptions {\n decimalSeparator?: '.' | ','\n thousandSeparator?: ' ' | '.' | ',' | ''\n precision?: number\n}\n\n// Format a numeric string using configurable currency separators and precision.\nexport function formatCurrency(value: string, options: CurrencyFormatOptions = {}): string {\n const {decimalSeparator = ',', thousandSeparator = ' ', precision = 2} = options\n\n let clean = value.replace(/[^\\d.,-]/g, '')\n clean = clean.replace(',', '.')\n\n const parts = clean.split('.')\n let intPart = parts[0] || '0'\n let decPart = parts.length > 1 ? parts[1] : ''\n\n const isNegative = intPart.startsWith('-')\n if (isNegative) intPart = intPart.slice(1)\n\n intPart = intPart.replace(/^0+/, '') || '0'\n\n if (thousandSeparator) {\n intPart = intPart.replace(/\\B(?=(\\d{3})+(?!\\d))/g, thousandSeparator)\n }\n\n decPart = decPart.slice(0, precision)\n\n const result = decPart ? `${intPart}${decimalSeparator}${decPart}` : intPart\n\n return isNegative ? `-${result}` : result\n}\n\n// Parse a formatted currency string back into a number.\nexport function parseCurrencyToNumber(\n formatted: string,\n thousandSeparator: string = ' ',\n decimalSeparator: string = ','\n): number | null {\n let clean = formatted\n if (thousandSeparator) {\n clean = clean.split(thousandSeparator).join('')\n }\n clean = clean.replace(decimalSeparator, '.')\n clean = clean.replace(/[^\\d.-]/g, '')\n const num = parseFloat(clean)\n return isNaN(num) ? null : num\n}\n\n// Preserve the logical cursor position after inserting separators into the value.\nexport function adjustCursorAfterFormat(oldValue: string, newValue: string, oldCursor: number): number {\n let realCharsBefore = 0\n for (let i = 0; i < oldCursor && i < oldValue.length; i++) {\n if (oldValue[i] !== ' ' && oldValue[i] !== '-') {\n realCharsBefore++\n }\n }\n\n let count = 0\n for (let i = 0; i < newValue.length; i++) {\n if (newValue[i] !== ' ' && newValue[i] !== '-') {\n count++\n }\n if (count === realCharsBefore) {\n return i + 1\n }\n }\n return newValue.length\n}\n\n// Format date digits into a display string with the chosen separator.\nexport function formatDateInput(\n digits: string,\n format: 'DD/MM/YYYY' | 'MM/DD/YYYY' | 'YYYY/MM/DD' = 'DD/MM/YYYY',\n separator: string = '/'\n): string {\n if (!digits) return ''\n\n if (format === 'YYYY/MM/DD') {\n if (digits.length <= 4) return digits\n if (digits.length <= 6) return `${digits.slice(0, 4)}${separator}${digits.slice(4)}`\n return `${digits.slice(0, 4)}${separator}${digits.slice(4, 6)}${separator}${digits.slice(6, 8)}`\n }\n\n // DD/MM/YYYY or MM/DD/YYYY — first two groups are 2 digits\n if (digits.length <= 2) return digits\n if (digits.length <= 4) return `${digits.slice(0, 2)}${separator}${digits.slice(2)}`\n return `${digits.slice(0, 2)}${separator}${digits.slice(2, 4)}${separator}${digits.slice(4, 8)}`\n}\n\nexport {formatPostCode} from './postalCodes'\nexport {formatCardNumber} from './creditCards'\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require(`./validationMessages-iHu7apWr.cjs`);require(`./core-w629c4ND.cjs`);let t=require(`react`),n=require(`react/jsx-runtime`);var r=`mineralui-locale`,i=typeof window<`u`?t.useLayoutEffect:t.useEffect;function a(e){try{return localStorage.getItem(r)??e}catch{return e}}function o(e,t){return t.split(`.`).reduce((e,t)=>typeof e==`object`&&e?e[t]:void 0,e)}var s=(0,t.createContext)(null);function c({locales:e,defaultLocale:c,persist:l,setDocumentLang:u,children:d}){let f=(0,t.useContext)(s)!==null,p=l??!f,m=u??!f,h=(0,t.useMemo)(()=>Object.keys(e),[e]),g=c??h[0]??`en`,[_,v]=(0,t.useState)(()=>{if(p){let t=a(g);if(t in e)return t}return g}),y=(0,t.useCallback)(e=>{if(v(e),p)try{localStorage.setItem(r,e)}catch{}},[p]),b=(0,t.useCallback)(()=>{let e=h[(h.indexOf(_)+1)%h.length];y(e)},[h,_,y]);i(()=>{m&&(document.documentElement.lang=_)},[_,m]);let x=e[_]??e[g]??{},S=(0,t.useCallback)((e,t)=>{let n=o(x,e);if(typeof n==`string`)return n;let r=typeof x==`object`&&x&&typeof x.docsTranslations==`object`?x.docsTranslations[e]:void 0;return typeof r==`string`?r:t??e},[x]),C=(0,t.useMemo)(()=>({locale:_,setLocale:y,toggleLocale:b,dict:x,t:S}),[_,y,b,x,S]);return(0,n.jsx)(s.Provider,{value:C,children:d})}function l(){let e=(0,t.useContext)(s);if(!e)throw Error(`useMI18n must be used within MI18nProvider`);return e}function u(){return(0,t.useContext)(s)}function d(){let e=u();return(0,t.useCallback)((t,n)=>e?.t(t,n)??n,[e])}function f(){let e=d();return(0,t.useMemo)(()=>({today:e(`mineralui.datePicker.today`,`Today`),clear:e(`mineralui.datePicker.clear`,`Clear`),previousMonth:e(`mineralui.datePicker.previousMonth`,`Previous month`),nextMonth:e(`mineralui.datePicker.nextMonth`,`Next month`),dialogLabel:e(`mineralui.datePicker.dialogLabel`,`Choose date`)}),[e])}function p(){let e=d();return(0,t.useMemo)(()=>({today:e(`mineralui.dateRangePicker.today`,`Today`),clear:e(`mineralui.dateRangePicker.clear`,`Clear`),previousMonth:e(`mineralui.dateRangePicker.previousMonth`,`Previous month`),nextMonth:e(`mineralui.dateRangePicker.nextMonth`,`Next month`),dialogLabel:e(`mineralui.dateRangePicker.dialogLabel`,`Choose date range`),rangeSubtitle:e(`mineralui.dateRangePicker.rangeSubtitle`,`Select start and end dates in one panel.`),defaultRangePlaceholder:e(`mineralui.dateRangePicker.defaultRangePlaceholder`,`Select date range...`),presets:{today:e(`mineralui.dateRangePicker.presets.today`,`Today`),days2:e(`mineralui.dateRangePicker.presets.days2`,`2 days`),days3:e(`mineralui.dateRangePicker.presets.days3`,`3 days`),days7:e(`mineralui.dateRangePicker.presets.days7`,`7 days`),days14:e(`mineralui.dateRangePicker.presets.days14`,`14 days`),days31:e(`mineralui.dateRangePicker.presets.days31`,`31 days`),thisMonth:e(`mineralui.dateRangePicker.presets.thisMonth`,`This month`),previousMonth:e(`mineralui.dateRangePicker.presets.previousMonth`,`Previous month`),months2:e(`mineralui.dateRangePicker.presets.months2`,`2 months`),months3:e(`mineralui.dateRangePicker.presets.months3`,`3 months`),months6:e(`mineralui.dateRangePicker.presets.months6`,`6 months`),year1:e(`mineralui.dateRangePicker.presets.year1`,`1 year`)}}),[e])}function m(e,t){return e.replace(/\{(\w+)\}/g,(e,n)=>n in t?String(t[n]):e)}function h(e){return!!(e&&e.toLowerCase().startsWith(`pl`))}function g(e,n){let r=d();return(0,t.useMemo)(()=>{let t=h(e);return{previousMonth:n?.previousMonth??r(`mineralui.miniCalendar.previousMonth`,t?`Poprzedni miesiąc`:`Previous month`),nextMonth:n?.nextMonth??r(`mineralui.miniCalendar.nextMonth`,t?`Następny miesiąc`:`Next month`)}},[r,e,n])}function _(){let e=d();return(0,t.useMemo)(()=>({scale:e(`mineralui.weekGrid.scale`,`Scale: {min} — {max}{unit}`),bands:[e(`mineralui.weekGrid.bands.none`,`None`),e(`mineralui.weekGrid.bands.few`,`Few`),e(`mineralui.weekGrid.bands.some`,`Some`),e(`mineralui.weekGrid.bands.many`,`Many`)],cellLabel:e(`mineralui.weekGrid.cellLabel`,`{day} {slot}: {value}`),days:[e(`mineralui.weekGrid.days.sun`,`Sun`),e(`mineralui.weekGrid.days.mon`,`Mon`),e(`mineralui.weekGrid.days.tue`,`Tue`),e(`mineralui.weekGrid.days.wed`,`Wed`),e(`mineralui.weekGrid.days.thu`,`Thu`),e(`mineralui.weekGrid.days.fri`,`Fri`),e(`mineralui.weekGrid.days.sat`,`Sat`)]}),[e])}function v(){let e=d();return(0,t.useMemo)(()=>({close:e(`mineralui.common.close`,`Close`),dismiss:e(`mineralui.common.dismiss`,`Dismiss`),remove:e(`mineralui.common.remove`,`Remove`),removeItem:e(`mineralui.common.removeItem`,`Remove {name}`),clearInput:e(`mineralui.common.clearInput`,`Clear input`),clearSelection:e(`mineralui.common.clearSelection`,`Clear selection`),clearTime:e(`mineralui.common.clearTime`,`Clear time`),clearFiles:e(`mineralui.common.clearFiles`,`Clear files`),clearCode:e(`mineralui.common.clearCode`,`Clear code`),increment:e(`mineralui.common.increment`,`Increment`),decrement:e(`mineralui.common.decrement`,`Decrement`),increase:e(`mineralui.common.increase`,`Increase`),decrease:e(`mineralui.common.decrease`,`Decrease`),moreOptions:e(`mineralui.common.moreOptions`,`More options`),scrollToTop:e(`mineralui.common.scrollToTop`,`Scroll to top`),openMenu:e(`mineralui.common.openMenu`,`Open menu`),openCalendar:e(`mineralui.common.openCalendar`,`Open calendar`),loading:e(`mineralui.common.loading`,`Loading`),preview:e(`mineralui.common.preview`,`Preview`),imagePreview:e(`mineralui.common.imagePreview`,`Image preview`),closePreview:e(`mineralui.common.closePreview`,`Close preview`),previewItem:e(`mineralui.common.previewItem`,`Preview {name}`),image:e(`mineralui.common.image`,`image`),imageNumber:e(`mineralui.common.imageNumber`,`Image {index}`),previousImage:e(`mineralui.common.previousImage`,`Previous image`),nextImage:e(`mineralui.common.nextImage`,`Next image`),previousSlide:e(`mineralui.common.previousSlide`,`Previous slide`),nextSlide:e(`mineralui.common.nextSlide`,`Next slide`),slideNumber:e(`mineralui.common.slideNumber`,`Slide {index}`),dragToClose:e(`mineralui.common.dragToClose`,`Drag down to close`),scrollLeft:e(`mineralui.common.scrollLeft`,`Scroll topbar left`),scrollRight:e(`mineralui.common.scrollRight`,`Scroll topbar right`),editTile:e(`mineralui.common.editTile`,`Edit tile`),expandTile:e(`mineralui.common.expandTile`,`Expand tile`),removeTile:e(`mineralui.common.removeTile`,`Remove tile`),expirationDate:e(`mineralui.common.expirationDate`,`Expiration date`),postalCodeCountry:e(`mineralui.common.postalCodeCountry`,`Postal code country`),digitNumber:e(`mineralui.common.digitNumber`,`Digit {index}`),removeImage:e(`mineralui.common.removeImage`,`Remove image`),emoji:e(`mineralui.common.emoji`,`Emoji`),attachImage:e(`mineralui.common.attachImage`,`Attach image`),send:e(`mineralui.common.send`,`Send`),eventActions:e(`mineralui.common.eventActions`,`Event actions`),documentActions:e(`mineralui.common.documentActions`,`Open document actions`),dayNavigator:e(`mineralui.common.dayNavigator`,`Day navigator`),previousDay:e(`mineralui.common.previousDay`,`Previous day`),nextDay:e(`mineralui.common.nextDay`,`Next day`),timeline:e(`mineralui.common.timeline`,`Timeline`)}),[e])}function y(){let e=d();return(0,t.useMemo)(()=>({breadcrumbLabel:e(`mineralui.breadcrumb.label`,`breadcrumb`),paginationLabel:e(`mineralui.pagination.label`,`pagination`),previousPage:e(`mineralui.pagination.previous`,`Previous page`),nextPage:e(`mineralui.pagination.next`,`Next page`),pageNumber:e(`mineralui.pagination.page`,`Page {page}`),navbarMenu:e(`mineralui.navbar.menu`,`Open navigation`),sidebarExpand:e(`mineralui.sidebar.expand`,`Expand sidebar`),sidebarCollapse:e(`mineralui.sidebar.collapse`,`Collapse sidebar`),breadcrumbShowHidden:e(`mineralui.breadcrumb.showHidden`,`Show {count} hidden items`),sidebarDialogLabel:e(`mineralui.sidebar.dialogLabel`,`Navigation`),canvasGridTile:e(`mineralui.canvasGrid.tile`,`Tile {number}`),canvasGridEdit:e(`mineralui.canvasGrid.edit`,`Edit {label}`),canvasGridExpand:e(`mineralui.canvasGrid.expand`,`Expand {label}`),canvasGridRemove:e(`mineralui.canvasGrid.remove`,`Remove {label}`),canvasGridHandle:e(`mineralui.canvasGrid.handle`,`Move or resize {label}`),canvasGridInstructions:e(`mineralui.canvasGrid.instructions`,`Press Enter or Space to pick up the tile. Arrow keys move it, Shift+arrow keys resize it, Enter or Space drops it and Escape cancels.`),canvasGridGrabbed:e(`mineralui.canvasGrid.grabbed`,`{label} picked up. Column {column}, row {row}, {width} by {height}.`),canvasGridPosition:e(`mineralui.canvasGrid.position`,`{label}: column {column}, row {row}, {width} by {height}`),canvasGridDropped:e(`mineralui.canvasGrid.dropped`,`{label} dropped at column {column}, row {row}, {width} by {height}`),canvasGridCancelled:e(`mineralui.canvasGrid.cancelled`,`{label}: move cancelled`)}),[e])}function b(){let e=d();return(0,t.useMemo)(()=>({label:e(`mineralui.spinner.label`,`Loading`)}),[e])}function x(){let e=d();return(0,t.useMemo)(()=>({label:e(`mineralui.loadMore.label`,`Load more`),loading:e(`mineralui.loadMore.loading`,`Loading...`),done:e(`mineralui.loadMore.done`,`All items loaded`)}),[e])}function S(){let e=d();return(0,t.useMemo)(()=>({signIn:e(`mineralui.socialButton.signIn`,`Sign in with {platform}`)}),[e])}function C(){let e=d();return(0,t.useMemo)(()=>({label:e(`mineralui.progressRing.label`,`Loading {value}%`)}),[e])}function w(){let e=d();return(0,t.useMemo)(()=>({copy:e(`mineralui.codeBlock.copy`,`Copy`),copied:e(`mineralui.codeBlock.copied`,`Copied`),label:e(`mineralui.codeBlock.label`,`Code`)}),[e])}function T(){let e=d();return(0,t.useMemo)(()=>({optional:e(`mineralui.stepper.optional`,`Optional`),completed:e(`mineralui.stepper.completed`,`Completed`),error:e(`mineralui.stepper.error`,`Error`)}),[e])}function E(){let e=d();return(0,t.useMemo)(()=>({label:e(`mineralui.rating.label`,`MRating`),star:e(`mineralui.rating.star`,`{count} star`),stars:e(`mineralui.rating.stars`,`{count} stars`),readOnlyValue:e(`mineralui.rating.readOnlyValue`,`{value} of {max} stars`)}),[e])}function D(){let e=d();return(0,t.useMemo)(()=>({input:e(`mineralui.colorPicker.input`,`Color value`),swatch:e(`mineralui.colorPicker.swatch`,`Color {color}`),area:e(`mineralui.colorPicker.area`,`Saturation and brightness`),areaValue:e(`mineralui.colorPicker.areaValue`,`Saturation {saturation}%, brightness {brightness}%`),hue:e(`mineralui.colorPicker.hue`,`Hue`),hueValue:e(`mineralui.colorPicker.hueValue`,`{value} degrees`),swatches:e(`mineralui.colorPicker.swatches`,`Swatches`)}),[e])}function O(){let e=d();return(0,t.useMemo)(()=>({avatar:e(`mineralui.avatar.fallback`,`Avatar`),avatarPresence:e(`mineralui.avatar.presenceLabel`,`{name}, {presence}`),presence:{online:e(`mineralui.avatar.presence.online`,`Online`),offline:e(`mineralui.avatar.presence.offline`,`Offline`),away:e(`mineralui.avatar.presence.away`,`Away`),busy:e(`mineralui.avatar.presence.busy`,`Busy`)},avatarStackMore:e(`mineralui.avatarStack.more`,`{count} more`),showcasePrevious:e(`mineralui.showcaseCarousel.previous`,`Previous`),showcaseNext:e(`mineralui.showcaseCarousel.next`,`Next`),carouselLabel:e(`mineralui.carousel.label`,`Carousel`),carouselRoleDescription:e(`mineralui.carousel.roleDescription`,`carousel`),slideRoleDescription:e(`mineralui.carousel.slideRoleDescription`,`slide`),slideOf:e(`mineralui.carousel.slideOf`,`{index} of {count}`),stopRotation:e(`mineralui.carousel.stopRotation`,`Stop slide rotation`),startRotation:e(`mineralui.carousel.startRotation`,`Start slide rotation`),chooseSlide:e(`mineralui.carousel.chooseSlide`,`Choose slide`)}),[e])}function k(){let e=d();return(0,t.useMemo)(()=>({addToFavorites:e(`mineralui.card.addToFavorites`,`Add to favorites`),removeFromFavorites:e(`mineralui.card.removeFromFavorites`,`Remove from favorites`),serviceCard:{available:e(`mineralui.serviceCard.available`,`Available`),unavailable:e(`mineralui.serviceCard.unavailable`,`Unavailable`),spots:e(`mineralui.serviceCard.spots`,`{count} spots`),register:e(`mineralui.serviceCard.register`,`Register`),addToCart:e(`mineralui.serviceCard.addToCart`,`Add to cart`),bookNow:e(`mineralui.serviceCard.bookNow`,`Book now`),joinCourse:e(`mineralui.serviceCard.joinCourse`,`Join course`),rating:e(`mineralui.serviceCard.rating`,`Rated {value} out of 5`),ratingWithReviews:e(`mineralui.serviceCard.ratingWithReviews`,`Rated {value} out of 5, {count} reviews`),participants:e(`mineralui.serviceCard.participants`,`{count} of {max} participants`)},cardPayment:{currentBalance:e(`mineralui.cardPayment.currentBalance`,`Current balance`),cardHolder:e(`mineralui.cardPayment.cardHolder`,`Card holder`),expirationDate:e(`mineralui.cardPayment.expirationDate`,`Expiration date`)},cardPaymentMethod:{title:e(`mineralui.cardPaymentMethod.title`,`Your payment methods`),change:e(`mineralui.cardPaymentMethod.change`,`Change`),helperText:e(`mineralui.cardPaymentMethod.helperText`,`All fields are required, unless stated otherwise.`),expirationDate:e(`mineralui.cardPaymentMethod.expirationDate`,`Expiration date`),securityCode:e(`mineralui.cardPaymentMethod.securityCode`,`Security code`),defaultBadge:e(`mineralui.cardPaymentMethod.defaultBadge`,`Default`),creditCard:e(`mineralui.cardPaymentMethod.creditCard`,`Credit card`),creditCardExpires:e(`mineralui.cardPaymentMethod.creditCardExpires`,`Credit card - Expiration date {date}`)},daySchedule:{title:e(`mineralui.daySchedule.title`,`Today`),emptyTimeline:e(`mineralui.daySchedule.emptyTimeline`,`No events scheduled for this day.`)},cardBusiness:{qrCode:e(`mineralui.cardBusiness.qrCode`,`QR`)},cardDocumentTree:{title:e(`mineralui.cardDocumentTree.title`,`Documents`),emptyDetails:e(`mineralui.cardDocumentTree.emptyDetails`,`Select a document to inspect its details.`)},cardGrid:{searchPlaceholder:e(`mineralui.cardGrid.searchPlaceholder`,`Search...`),filter:e(`mineralui.cardGrid.filter`,`Filter`),sort:e(`mineralui.cardGrid.sort`,`Sort`),sortBy:e(`mineralui.cardGrid.sortBy`,`Sort: {label}`),loading:e(`mineralui.cardGrid.loading`,`Loading`),emptyMessage:e(`mineralui.cardGrid.emptyMessage`,`No results found.`),sortAscending:e(`mineralui.cardGrid.sortAscending`,`ascending`),sortDescending:e(`mineralui.cardGrid.sortDescending`,`descending`)}}),[e])}function A(){let e=d();return(0,t.useMemo)(()=>{let t=e(`mineralui.common.digitNumber`,``);return{showPassword:e(`mineralui.input.showPassword`,`Show password`),passwordStrength:e(`mineralui.input.passwordStrength`,`Password strength: {strength}`),strength:{weak:e(`mineralui.input.strength.weak`,`Weak`),fair:e(`mineralui.input.strength.fair`,`Fair`),good:e(`mineralui.input.strength.good`,`Good`),strong:e(`mineralui.input.strength.strong`,`Strong`)},searchPlaceholder:e(`mineralui.input.searchPlaceholder`,`Search...`),ibanCountry:e(`mineralui.input.ibanCountry`,`IBAN country`),formatHint:e(`mineralui.input.formatHint`,`Format: {example}`),otpGroup:e(`mineralui.input.otpGroup`,`Verification code`),otpDigit:e(`mineralui.input.otpDigit`,t||`Digit {index} of {count}`),sliderValue:e(`mineralui.input.sliderValue`,`Slider value`),expMonthPlaceholder:e(`mineralui.input.expMonthPlaceholder`,`MM`),expYearPlaceholder:e(`mineralui.input.expYearPlaceholder`,`YYYY`),expMonth:e(`mineralui.input.expMonth`,`Month`),expYear:e(`mineralui.input.expYear`,`Year`)}},[e])}function j(){let e=d();return(0,t.useMemo)(()=>({placeholder:e(`mineralui.inputFile.placeholder`,`Drop files here or click to browse`),drop:e(`mineralui.inputFile.drop`,`Drop files here`),maxSize:e(`mineralui.inputFile.maxSize`,`Max file size: {size}`),maxFilesOne:e(`mineralui.inputFile.maxFilesOne`,`Max {count} file`),maxFiles:e(`mineralui.inputFile.maxFiles`,`Max {count} files`),type:e(`mineralui.inputFile.type`,`File type not allowed: {name}`),cropHint:e(`mineralui.inputFile.cropHint`,`Drag the image to reposition, scroll or use the slider to zoom, then click {apply} to confirm the crop.`),cropApply:e(`mineralui.inputFile.cropApply`,`Apply`),cropCancel:e(`mineralui.inputFile.cropCancel`,`Cancel`),cropZoom:e(`mineralui.inputFile.cropZoom`,`Zoom`),cropArea:e(`mineralui.inputFile.cropArea`,`Crop area`),cropKeyboardHint:e(`mineralui.inputFile.cropKeyboardHint`,`Use the arrow keys to move the image (hold Shift to move faster), plus and minus to zoom.`)}),[e])}function M(){let e=d();return(0,t.useMemo)(()=>({searchPlaceholder:e(`mineralui.dataView.searchPlaceholder`,`Search...`),filter:e(`mineralui.dataView.filter`,`Filter`),sort:e(`mineralui.dataView.sort`,`Sort`),sortBy:e(`mineralui.dataView.sortBy`,`Sort: {label}`),sortAscending:e(`mineralui.dataView.sortAscending`,`ascending`),sortDescending:e(`mineralui.dataView.sortDescending`,`descending`)}),[e])}function N(){let e=d();return(0,t.useMemo)(()=>({empty:e(`mineralui.dataTable.empty`,`No data`),selectAllRows:e(`mineralui.dataTable.selectAllRows`,`Select all rows`),selectRow:e(`mineralui.dataTable.selectRow`,`Select row {index}`)}),[e])}function P(){let e=d();return(0,t.useMemo)(()=>({menuLabel:e(`mineralui.treeView.menuLabel`,`{label} actions`),cut:e(`mineralui.treeView.cut`,`Cut`),moveHere:e(`mineralui.treeView.moveHere`,`Move here`),cancelMove:e(`mineralui.treeView.cancelMove`,`Cancel move`),cutAnnouncement:e(`mineralui.treeView.cutAnnouncement`,`{label} cut. Go to a folder and press Ctrl+V, or choose Move here from its menu.`),movedAnnouncement:e(`mineralui.treeView.movedAnnouncement`,`{label} moved to {target}.`),moveCancelled:e(`mineralui.treeView.moveCancelled`,`Move cancelled.`)}),[e])}function F(){let n=d();return(0,t.useCallback)(t=>{let r=t.valid?void 0:e.n(t);if(!r)return t;let i=n(`mineralui.validation.${r.key}`,r.template);return{...t,error:e.t(i,r.params)}},[n])}function I(){let e=d();return(0,t.useMemo)(()=>({placeholder:e(`mineralui.select.placeholder`,`Select...`),searchPlaceholder:e(`mineralui.select.searchPlaceholder`,`Search...`),noOptions:e(`mineralui.select.noOptions`,`No options`),searchLabel:e(`mineralui.select.searchLabel`,`Search options`)}),[e])}function L(){let e=d();return(0,t.useMemo)(()=>({placeholder:e(`mineralui.autocomplete.placeholder`,`Type to search...`),noOptions:e(`mineralui.autocomplete.noOptions`,`No options`),loading:e(`mineralui.autocomplete.loading`,`Loading...`)}),[e])}function R(){let e=d();return(0,t.useMemo)(()=>({time:e(`mineralui.time.time`,`Time`),hours:e(`mineralui.time.hours`,`Hr`),minutes:e(`mineralui.time.minutes`,`Min`),seconds:e(`mineralui.time.seconds`,`Sec`),meridiem:e(`mineralui.time.meridiem`,`AM/PM`),dialogLabel:e(`mineralui.time.dialogLabel`,`Choose time`)}),[e])}function z(){let e=d();return(0,t.useMemo)(()=>({confirm:e(`mineralui.popconfirm.confirm`,`Yes`),cancel:e(`mineralui.popconfirm.cancel`,`No`)}),[e])}function B(){let e=d();return(0,t.useMemo)(()=>({title:e(`mineralui.commandPalette.title`,`Command palette`),open:e(`mineralui.commandPalette.open`,`Open command palette`),placeholder:e(`mineralui.commandPalette.placeholder`,`Search modules, records and actions...`),empty:e(`mineralui.commandPalette.empty`,`No matching results.`),featured:e(`mineralui.commandPalette.featured`,`Featured`),featuredDescription:e(`mineralui.commandPalette.featuredDescription`,`Quick launch for the most frequent dashboard actions.`),results:e(`mineralui.commandPalette.results`,`Results`),resultsCount:e(`mineralui.commandPalette.resultsCount`,`{count} ready`),generalGroup:e(`mineralui.commandPalette.generalGroup`,`General`),searchLabel:e(`mineralui.commandPalette.searchLabel`,`Search commands`),resultsAnnouncement:e(`mineralui.commandPalette.resultsAnnouncement`,`Results: {count}`)}),[e])}Object.defineProperty(exports,`A`,{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,`C`,{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,`D`,{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,`E`,{enumerable:!0,get:function(){return P}}),Object.defineProperty(exports,`O`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`S`,{enumerable:!0,get:function(){return S}}),Object.defineProperty(exports,`T`,{enumerable:!0,get:function(){return R}}),Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return D}}),Object.defineProperty(exports,`b`,{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return N}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return w}}),Object.defineProperty(exports,`j`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`k`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return M}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return L}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return B}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return z}}),Object.defineProperty(exports,`w`,{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,`x`,{enumerable:!0,get:function(){return I}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return C}});
|
|
2
|
+
//# sourceMappingURL=frameworkTexts-CaqdiKHW.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frameworkTexts-CaqdiKHW.cjs","names":[],"sources":["../src/i18n/MI18nProvider.tsx","../src/i18n/frameworkTexts.ts"],"sourcesContent":["import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\n useMemo,\n useState,\n type ReactNode,\n} from 'react'\n\nconst STORAGE_KEY = 'mineralui-locale'\n\n// Set <html lang> before paint on the client; no-op during SSR.\nconst useIsomorphicLayoutEffect = typeof window !== 'undefined' ? useLayoutEffect : useEffect\n\ntype Dict = Record<string, unknown>\n\n// Read the saved locale, but fall back cleanly in SSR or blocked storage.\nfunction readStored(fallback: string): string {\n try {\n return localStorage.getItem(STORAGE_KEY) ?? fallback\n } catch {\n return fallback\n }\n}\n\n// Resolve nested translation keys like \"ui.actions.save\".\nfunction getByPath(obj: unknown, path: string): unknown {\n return path\n .split('.')\n .reduce<unknown>((cur, key) => (cur != null && typeof cur === 'object' ? (cur as Dict)[key] : undefined), obj)\n}\n\nexport interface MI18nContextValue<T extends Dict = Dict> {\n locale: string\n setLocale: (next: string) => void\n toggleLocale: () => void\n dict: T\n t: (key: string, fallback?: string) => string\n}\n\nconst I18nContext = createContext<MI18nContextValue | null>(null)\n\nexport interface MI18nProviderProps<T extends Dict = Dict> {\n locales: Record<string, T>\n defaultLocale?: string\n /** Read and write the persisted locale. Defaults to `true` for the outermost provider and `false`\n * for a nested one, so a local scope never overrides the user's global choice. */\n persist?: boolean\n /** Mirror the active locale to `<html lang>`. Defaults to `true` for the outermost provider and\n * `false` for a nested one. */\n setDocumentLang?: boolean\n children: ReactNode\n}\n\n// Provide the active locale, dictionary and a tiny dot-path translator.\nexport function MI18nProvider<T extends Dict = Dict>({\n locales,\n defaultLocale,\n persist: persistProp,\n setDocumentLang: setDocumentLangProp,\n children,\n}: MI18nProviderProps<T>) {\n const isNested = useContext(I18nContext) !== null\n const persist = persistProp ?? !isNested\n const setDocumentLang = setDocumentLangProp ?? !isNested\n const keys = useMemo(() => Object.keys(locales), [locales])\n const fallback = defaultLocale ?? keys[0] ?? 'en'\n\n const [locale, setLocaleState] = useState<string>(() => {\n if (persist) {\n const stored = readStored(fallback)\n if (stored in locales) return stored\n }\n return fallback\n })\n\n const setLocale = useCallback(\n (next: string) => {\n setLocaleState(next)\n if (persist) {\n try {\n localStorage.setItem(STORAGE_KEY, next)\n } catch {\n /* noop */\n }\n }\n },\n [persist]\n )\n\n const toggleLocale = useCallback(() => {\n const idx = keys.indexOf(locale)\n const next = keys[(idx + 1) % keys.length]\n setLocale(next)\n }, [keys, locale, setLocale])\n\n useIsomorphicLayoutEffect(() => {\n if (setDocumentLang) document.documentElement.lang = locale\n }, [locale, setDocumentLang])\n\n const dict = (locales[locale] ?? locales[fallback] ?? {}) as T\n\n const t = useCallback(\n (key: string, fb?: string): string => {\n const val = getByPath(dict, key)\n if (typeof val === 'string') return val\n\n const docsVal =\n dict != null && typeof dict === 'object' && typeof (dict as Dict).docsTranslations === 'object'\n ? ((dict as Dict).docsTranslations as Dict)[key]\n : undefined\n\n if (typeof docsVal === 'string') return docsVal\n\n return fb ?? key\n },\n [dict]\n )\n\n const ctx = useMemo<MI18nContextValue<T>>(\n () => ({\n locale,\n setLocale,\n toggleLocale,\n dict,\n t,\n }),\n [locale, setLocale, toggleLocale, dict, t]\n )\n\n return <I18nContext.Provider value={ctx as MI18nContextValue}>{children}</I18nContext.Provider>\n}\n\nexport function useMI18n<T extends Dict = Dict>(): MI18nContextValue<T> {\n const ctx = useContext(I18nContext)\n if (!ctx) throw new Error('useMI18n must be used within MI18nProvider')\n return ctx as MI18nContextValue<T>\n}\n\nexport function useOptionalMI18n<T extends Dict = Dict>(): MI18nContextValue<T> | null {\n const ctx = useContext(I18nContext)\n return ctx as MI18nContextValue<T> | null\n}\n","import {useCallback, useMemo} from 'react'\nimport {useOptionalMI18n} from './MI18nProvider'\nimport type {ValidationResult} from '../utils/validators'\nimport {fillValidationTemplate, getValidationMessageInfo} from '../utils/validationMessages'\n\nfunction useTranslate() {\n const i18n = useOptionalMI18n()\n\n return useCallback((key: string, fallback: string) => i18n?.t(key, fallback) ?? fallback, [i18n])\n}\n\nexport interface MDatePickerTexts {\n today: string\n clear: string\n previousMonth: string\n nextMonth: string\n /** Accessible name of the calendar dialog when the field has no label. */\n dialogLabel: string\n}\n\nexport interface MDateRangePickerTexts extends MDatePickerTexts {\n rangeSubtitle: string\n defaultRangePlaceholder: string\n presets: {\n today: string\n days2: string\n days3: string\n days7: string\n days14: string\n days31: string\n thisMonth: string\n previousMonth: string\n months2: string\n months3: string\n months6: string\n year1: string\n }\n}\n\nexport interface MCalendarBoardTexts {\n monthView: string\n weekView: string\n previousWeek: string\n nextWeek: string\n emptyStateText: string\n timelineTitle: string\n timelineEmptyState: string\n allDay: string\n allDayTab: string\n timelineTab: string\n itemsCount: (count: number) => string\n addEvent: string\n dayActions: string\n open: string\n edit: string\n delete: string\n overlap: string\n status: {\n planned: string\n active: string\n done: string\n cancelled: string\n }\n}\n\nexport interface MFileManagerTexts {\n home: string\n searchPlaceholder: string\n emptyText: string\n folders: string\n noFoldersAvailable: string\n currentFolder: string\n filteredBy: (query: string) => string\n listView: string\n gridView: string\n folder: string\n file: string\n preview: string\n path: string\n selectItemToInspect: string\n itemsCount: (count: number) => string\n rename: string\n moveTo: string\n delete: string\n download: string\n newFolder: string\n /** Accessible name of the breadcrumb `<nav>`. */\n breadcrumbs: string\n /** Accessible name of the list / grid view switch. */\n view: string\n}\n\nexport function useMDatePickerTexts(): MDatePickerTexts {\n const t = useTranslate()\n\n return useMemo(\n () => ({\n today: t('mineralui.datePicker.today', 'Today'),\n clear: t('mineralui.datePicker.clear', 'Clear'),\n previousMonth: t('mineralui.datePicker.previousMonth', 'Previous month'),\n nextMonth: t('mineralui.datePicker.nextMonth', 'Next month'),\n dialogLabel: t('mineralui.datePicker.dialogLabel', 'Choose date'),\n }),\n [t]\n )\n}\n\nexport function useMDateRangePickerTexts(): MDateRangePickerTexts {\n const t = useTranslate()\n\n return useMemo(\n () => ({\n today: t('mineralui.dateRangePicker.today', 'Today'),\n clear: t('mineralui.dateRangePicker.clear', 'Clear'),\n previousMonth: t('mineralui.dateRangePicker.previousMonth', 'Previous month'),\n nextMonth: t('mineralui.dateRangePicker.nextMonth', 'Next month'),\n dialogLabel: t('mineralui.dateRangePicker.dialogLabel', 'Choose date range'),\n rangeSubtitle: t('mineralui.dateRangePicker.rangeSubtitle', 'Select start and end dates in one panel.'),\n defaultRangePlaceholder: t('mineralui.dateRangePicker.defaultRangePlaceholder', 'Select date range...'),\n presets: {\n today: t('mineralui.dateRangePicker.presets.today', 'Today'),\n days2: t('mineralui.dateRangePicker.presets.days2', '2 days'),\n days3: t('mineralui.dateRangePicker.presets.days3', '3 days'),\n days7: t('mineralui.dateRangePicker.presets.days7', '7 days'),\n days14: t('mineralui.dateRangePicker.presets.days14', '14 days'),\n days31: t('mineralui.dateRangePicker.presets.days31', '31 days'),\n thisMonth: t('mineralui.dateRangePicker.presets.thisMonth', 'This month'),\n previousMonth: t('mineralui.dateRangePicker.presets.previousMonth', 'Previous month'),\n months2: t('mineralui.dateRangePicker.presets.months2', '2 months'),\n months3: t('mineralui.dateRangePicker.presets.months3', '3 months'),\n months6: t('mineralui.dateRangePicker.presets.months6', '6 months'),\n year1: t('mineralui.dateRangePicker.presets.year1', '1 year'),\n },\n }),\n [t]\n )\n}\n\nexport function useMCalendarBoardTexts(): MCalendarBoardTexts {\n const t = useTranslate()\n\n return useMemo(\n () => ({\n monthView: t('mineralui.calendarBoard.monthView', 'Month'),\n weekView: t('mineralui.calendarBoard.weekView', 'Week'),\n previousWeek: t('mineralui.calendarBoard.previousWeek', 'Previous week'),\n nextWeek: t('mineralui.calendarBoard.nextWeek', 'Next week'),\n emptyStateText: t('mineralui.calendarBoard.emptyStateText', 'No events for the selected day.'),\n timelineTitle: t('mineralui.calendarBoard.timelineTitle', 'Daily timeline'),\n timelineEmptyState: t('mineralui.calendarBoard.timelineEmptyState', 'No events in this hour.'),\n allDay: t('mineralui.calendarBoard.allDay', 'All day'),\n allDayTab: t('mineralui.calendarBoard.allDayTab', 'All day'),\n timelineTab: t('mineralui.calendarBoard.timelineTab', 'Hourly timeline'),\n itemsCount: (count) =>\n t('mineralui.calendarBoard.itemsCount', '{count} items').replace('{count}', String(count)),\n addEvent: t('mineralui.calendarBoard.addEvent', 'Add event'),\n dayActions: t('mineralui.calendarBoard.dayActions', 'Day actions'),\n open: t('mineralui.calendarBoard.open', 'Open'),\n edit: t('mineralui.calendarBoard.edit', 'Edit'),\n delete: t('mineralui.calendarBoard.delete', 'Delete'),\n overlap: t('mineralui.calendarBoard.overlap', 'Overlap'),\n status: {\n planned: t('mineralui.calendarBoard.status.planned', 'planned'),\n active: t('mineralui.calendarBoard.status.active', 'active'),\n done: t('mineralui.calendarBoard.status.done', 'done'),\n cancelled: t('mineralui.calendarBoard.status.cancelled', 'cancelled'),\n },\n }),\n [t]\n )\n}\n\nexport function useMFileManagerTexts(): MFileManagerTexts {\n const t = useTranslate()\n\n return useMemo(\n () => ({\n home: t('mineralui.fileManager.home', 'Home'),\n searchPlaceholder: t('mineralui.fileManager.searchPlaceholder', 'Search in folder...'),\n emptyText: t('mineralui.fileManager.emptyText', 'This folder is empty.'),\n folders: t('mineralui.fileManager.folders', 'Folders'),\n noFoldersAvailable: t('mineralui.fileManager.noFoldersAvailable', 'No folders available.'),\n currentFolder: t('mineralui.fileManager.currentFolder', 'Current folder'),\n filteredBy: (query) =>\n t('mineralui.fileManager.filteredBy', 'Filtered by \"{query}\"').replace('{query}', query),\n listView: t('mineralui.fileManager.listView', 'List'),\n gridView: t('mineralui.fileManager.gridView', 'Grid'),\n folder: t('mineralui.fileManager.folder', 'Folder'),\n file: t('mineralui.fileManager.file', 'File'),\n preview: t('mineralui.fileManager.preview', 'Preview'),\n path: t('mineralui.fileManager.path', 'Path'),\n selectItemToInspect: t(\n 'mineralui.fileManager.selectItemToInspect',\n 'Select a file or folder to inspect its details.'\n ),\n itemsCount: (count) =>\n t('mineralui.fileManager.itemsCount', '{count} items').replace('{count}', String(count)),\n rename: t('mineralui.fileManager.rename', 'Rename'),\n moveTo: t('mineralui.fileManager.moveTo', 'Move to...'),\n delete: t('mineralui.fileManager.delete', 'Delete'),\n download: t('mineralui.fileManager.download', 'Download'),\n newFolder: t('mineralui.fileManager.newFolder', 'New folder'),\n breadcrumbs: t('mineralui.fileManager.breadcrumbs', 'Breadcrumbs'),\n view: t('mineralui.fileManager.view', 'View'),\n }),\n [t]\n )\n}\n\n// Cookie-consent texts moved to @banzamel/honey in mineralui-pro 2.0.0.\n// Consumers that need to retheme cookie copy now pass `texts` directly to\n// `<CookieConsentProvider>` from `@banzamel/honey`.\n\n/** Count-bearing texts accept a `{count}` template or a function, so apps can pluralise. */\nexport type MSchedulerCountText = string | ((count: number) => string)\n\nexport interface MSchedulerTexts {\n today: string\n previous: string\n next: string\n chooseDate: string\n add: string\n viewLabel: string\n viewWeek: string\n viewDay: string\n viewMonth: string\n viewAgenda: string\n showWeekends: string\n filters: string\n filtersActive: MSchedulerCountText\n clearFilters: string\n allOption: string\n searchPlaceholder: string\n noOptions: string\n allDay: string\n more: MSchedulerCountText\n /** `{count}` and `{date}` placeholders. */\n moreAria: string\n eventCount: MSchedulerCountText\n emptyState: string\n loading: string\n now: string\n recurring: string\n cancelled: string\n conflict: string\n eventDetails: string\n eventActions: string\n close: string\n participants: MSchedulerCountText\n /** `{count}` and `{capacity}` placeholders. */\n participantsCapacity: string\n location: string\n /** `{title}` placeholder, announced on every period change. */\n periodAnnouncement: string\n /** `{date}` placeholder — label of a day-number button. */\n openDay: string\n viewTimeline: string\n /** `{view}` and `{set}` placeholders — view-menu entry of a resource set. */\n viewWithSet: string\n move: string\n resize: string\n moveInstructions: string\n /** Announced when the keyboard move mode starts in the month view. */\n moveInstructionsMonth: string\n /** Appended to the native tooltip of a draggable event. */\n dragHint: string\n /** `{title}` and `{when}` placeholders. */\n moved: string\n /** `{title}` and `{time}` placeholders. */\n resized: string\n moveRefused: string\n moveCancelled: string\n unavailable: string\n blocked: string\n /** Caption above the leader row in the event details. */\n leader: string\n /** Visible label of the \"open this day\" action in the month \"+N more\" popover. */\n openDayView: string\n /** Toolbar button shown in the day view after a drill-down from the month view. */\n backToMonth: string\n}\n\nfunction polishPlural(count: number, one: string, few: string, many: string): string {\n const mod10 = count % 10\n const mod100 = count % 100\n if (count === 1) {\n return one\n }\n if (mod10 >= 2 && mod10 <= 4 && (mod100 < 12 || mod100 > 14)) {\n return few\n }\n return many\n}\n\nexport const mineralSchedulerTextsEn: MSchedulerTexts = {\n today: 'Today',\n previous: 'Previous period',\n next: 'Next period',\n chooseDate: 'Choose date',\n add: 'Add',\n viewLabel: 'View',\n viewWeek: 'Week',\n viewDay: 'Day',\n viewMonth: 'Month',\n viewAgenda: 'Agenda',\n showWeekends: 'Show weekends',\n filters: 'Filters',\n filtersActive: 'Filters ({count})',\n clearFilters: 'Clear filters',\n allOption: 'All',\n searchPlaceholder: 'Search…',\n noOptions: 'No results',\n allDay: 'All day',\n more: '+{count} more',\n moreAria: 'Show {count} more events on {date}',\n eventCount: (count) => (count === 1 ? '1 event' : `${count} events`),\n emptyState: 'No events to display',\n loading: 'Loading events',\n now: 'Now',\n recurring: 'Recurring',\n cancelled: 'Cancelled',\n conflict: 'Conflict',\n eventDetails: 'Event details',\n eventActions: 'Event actions',\n close: 'Close',\n participants: 'Participants ({count})',\n participantsCapacity: 'Participants ({count} / {capacity})',\n location: 'Location',\n periodAnnouncement: '{title}',\n openDay: 'Open {date}',\n viewTimeline: 'Timeline',\n viewWithSet: '{view} – {set}',\n move: 'Move',\n resize: 'Resize',\n moveInstructions: 'Arrows move, Shift+arrows move by an hour, Enter drops, Escape cancels.',\n moveInstructionsMonth: 'Left and right arrows move by a day, up and down by a week, Enter drops, Escape cancels.',\n dragHint: 'Drag to move',\n moved: '{title} moved to {when}',\n resized: '{title} now ends at {time}',\n moveRefused: 'Cannot move here',\n moveCancelled: 'Move cancelled',\n unavailable: 'Unavailable',\n blocked: 'Blocked',\n leader: 'Leader',\n openDayView: 'Open day',\n backToMonth: 'Back to month',\n}\n\nexport const mineralSchedulerTextsPl: MSchedulerTexts = {\n today: 'Dzisiaj',\n previous: 'Poprzedni okres',\n next: 'Następny okres',\n chooseDate: 'Wybierz datę',\n add: 'Dodaj',\n viewLabel: 'Widok',\n viewWeek: 'Tydzień',\n viewDay: 'Dzień',\n viewMonth: 'Miesiąc',\n viewAgenda: 'Lista',\n showWeekends: 'Pokaż weekendy',\n filters: 'Filtry',\n filtersActive: 'Filtry ({count})',\n clearFilters: 'Wyczyść filtry',\n allOption: 'Wszystkie',\n searchPlaceholder: 'Szukaj…',\n noOptions: 'Brak wyników',\n allDay: 'Cały dzień',\n more: '+{count} więcej',\n moreAria: 'Pokaż {count} więcej wydarzeń w dniu {date}',\n eventCount: (count) => `${count} ${polishPlural(count, 'wydarzenie', 'wydarzenia', 'wydarzeń')}`,\n emptyState: 'Brak wydarzeń do wyświetlenia',\n loading: 'Wczytywanie wydarzeń',\n now: 'Teraz',\n recurring: 'Cykliczne',\n cancelled: 'Odwołane',\n conflict: 'Konflikt',\n eventDetails: 'Szczegóły wydarzenia',\n eventActions: 'Akcje wydarzenia',\n close: 'Zamknij',\n participants: 'Uczestnicy ({count})',\n participantsCapacity: 'Uczestnicy ({count} / {capacity})',\n location: 'Miejsce',\n periodAnnouncement: '{title}',\n openDay: 'Otwórz {date}',\n viewTimeline: 'Oś czasu',\n viewWithSet: '{view} – {set}',\n move: 'Przenieś',\n resize: 'Zmień długość',\n moveInstructions: 'Strzałki przesuwają, Shift+strzałki o godzinę, Enter upuszcza, Escape anuluje.',\n moveInstructionsMonth:\n 'Strzałki w lewo i w prawo przesuwają o dzień, w górę i w dół o tydzień, Enter upuszcza, Escape anuluje.',\n dragHint: 'Przeciągnij, aby przenieść',\n moved: '{title} przeniesiono na {when}',\n resized: '{title} kończy się o {time}',\n moveRefused: 'Nie można tu przenieść',\n moveCancelled: 'Anulowano przenoszenie',\n unavailable: 'Niedostępne',\n blocked: 'Zablokowane',\n leader: 'Prowadzący',\n openDayView: 'Otwórz dzień',\n backToMonth: 'Wróć do miesiąca',\n}\n\n/** Fills `{name}` placeholders. */\nexport function formatMText(template: string, values: Record<string, string | number>): string {\n return template.replace(/\\{(\\w+)\\}/g, (match, key: string) => (key in values ? String(values[key]) : match))\n}\n\n/** Resolves a count text (template or function) for `count`. */\nexport function formatMCountText(text: MSchedulerCountText, count: number): string {\n return typeof text === 'function' ? text(count) : formatMText(text, {count})\n}\n\nfunction isPolishLocale(locale?: string): boolean {\n return Boolean(locale && locale.toLowerCase().startsWith('pl'))\n}\n\n/**\n * Scheduler texts. Resolution per key: `overrides` → MI18nProvider key\n * `mineralui.scheduler.<key>` → built-in default for `locale` (Polish or English).\n */\nexport function useMSchedulerTexts(locale?: string, overrides?: Partial<MSchedulerTexts>): MSchedulerTexts {\n const t = useTranslate()\n\n return useMemo(() => {\n const defaults = isPolishLocale(locale) ? mineralSchedulerTextsPl : mineralSchedulerTextsEn\n const resolved = {} as Record<keyof MSchedulerTexts, MSchedulerTexts[keyof MSchedulerTexts]>\n ;(Object.keys(defaults) as Array<keyof MSchedulerTexts>).forEach((key) => {\n const override = overrides?.[key]\n if (override !== undefined) {\n resolved[key] = override\n return\n }\n const fallback = defaults[key]\n const i18nKey = `mineralui.scheduler.${key}`\n const translated = t(i18nKey, typeof fallback === 'string' ? fallback : i18nKey)\n resolved[key] = typeof fallback === 'function' && translated === i18nKey ? fallback : translated\n })\n return resolved as MSchedulerTexts\n }, [t, locale, overrides])\n}\n\nexport interface MMiniCalendarTexts {\n previousMonth: string\n nextMonth: string\n}\n\nexport function useMMiniCalendarTexts(locale?: string, overrides?: Partial<MMiniCalendarTexts>): MMiniCalendarTexts {\n const t = useTranslate()\n\n return useMemo(() => {\n const polish = isPolishLocale(locale)\n return {\n previousMonth:\n overrides?.previousMonth ??\n t('mineralui.miniCalendar.previousMonth', polish ? 'Poprzedni miesiąc' : 'Previous month'),\n nextMonth:\n overrides?.nextMonth ??\n t('mineralui.miniCalendar.nextMonth', polish ? 'Następny miesiąc' : 'Next month'),\n }\n }, [t, locale, overrides])\n}\n\nexport interface MWeekGridTexts {\n /** Legend scale text. Placeholders: `{min}`, `{max}`, `{unit}` (with a leading space when set). */\n scale: string\n /** Default density-band labels, lowest to highest. */\n bands: [string, string, string, string]\n /** Accessible name of an interactive cell. Placeholders: `{day}`, `{slot}`, `{value}`. */\n cellLabel: string\n /**\n * Default short day labels, Sunday first\n * (`mineralui.weekGrid.days.sun|mon|tue|wed|thu|fri|sat`).\n */\n days: [string, string, string, string, string, string, string]\n}\n\n/**\n * MWeekGrid texts. Resolution per key: MI18nProvider key `mineralui.weekGrid.<key>`\n * (bands: `mineralui.weekGrid.bands.none|few|some|many`) → built-in English default.\n */\nexport function useMWeekGridTexts(): MWeekGridTexts {\n const t = useTranslate()\n\n return useMemo(\n () => ({\n scale: t('mineralui.weekGrid.scale', 'Scale: {min} — {max}{unit}'),\n bands: [\n t('mineralui.weekGrid.bands.none', 'None'),\n t('mineralui.weekGrid.bands.few', 'Few'),\n t('mineralui.weekGrid.bands.some', 'Some'),\n t('mineralui.weekGrid.bands.many', 'Many'),\n ],\n cellLabel: t('mineralui.weekGrid.cellLabel', '{day} {slot}: {value}'),\n days: [\n t('mineralui.weekGrid.days.sun', 'Sun'),\n t('mineralui.weekGrid.days.mon', 'Mon'),\n t('mineralui.weekGrid.days.tue', 'Tue'),\n t('mineralui.weekGrid.days.wed', 'Wed'),\n t('mineralui.weekGrid.days.thu', 'Thu'),\n t('mineralui.weekGrid.days.fri', 'Fri'),\n t('mineralui.weekGrid.days.sat', 'Sat'),\n ],\n }),\n [t]\n )\n}\n\n/** Shared accessible names and short labels used across components. */\nexport interface MCommonTexts {\n close: string\n dismiss: string\n remove: string\n /** Placeholder: `{name}`. */\n removeItem: string\n clearInput: string\n clearSelection: string\n clearTime: string\n clearFiles: string\n clearCode: string\n increment: string\n decrement: string\n increase: string\n decrease: string\n moreOptions: string\n scrollToTop: string\n openMenu: string\n openCalendar: string\n loading: string\n preview: string\n imagePreview: string\n closePreview: string\n /** Placeholder: `{name}`. */\n previewItem: string\n image: string\n /** Placeholder: `{index}`. */\n imageNumber: string\n previousImage: string\n nextImage: string\n previousSlide: string\n nextSlide: string\n /** Placeholder: `{index}`. */\n slideNumber: string\n dragToClose: string\n scrollLeft: string\n scrollRight: string\n editTile: string\n expandTile: string\n removeTile: string\n expirationDate: string\n postalCodeCountry: string\n /** Placeholder: `{index}`. */\n digitNumber: string\n removeImage: string\n emoji: string\n attachImage: string\n send: string\n eventActions: string\n documentActions: string\n dayNavigator: string\n previousDay: string\n nextDay: string\n timeline: string\n}\n\n/**\n * Common texts. Resolution per key: MI18nProvider key `mineralui.common.<key>`\n * → built-in English default.\n */\nexport function useMCommonTexts(): MCommonTexts {\n const t = useTranslate()\n\n return useMemo(\n () => ({\n close: t('mineralui.common.close', 'Close'),\n dismiss: t('mineralui.common.dismiss', 'Dismiss'),\n remove: t('mineralui.common.remove', 'Remove'),\n removeItem: t('mineralui.common.removeItem', 'Remove {name}'),\n clearInput: t('mineralui.common.clearInput', 'Clear input'),\n clearSelection: t('mineralui.common.clearSelection', 'Clear selection'),\n clearTime: t('mineralui.common.clearTime', 'Clear time'),\n clearFiles: t('mineralui.common.clearFiles', 'Clear files'),\n clearCode: t('mineralui.common.clearCode', 'Clear code'),\n increment: t('mineralui.common.increment', 'Increment'),\n decrement: t('mineralui.common.decrement', 'Decrement'),\n increase: t('mineralui.common.increase', 'Increase'),\n decrease: t('mineralui.common.decrease', 'Decrease'),\n moreOptions: t('mineralui.common.moreOptions', 'More options'),\n scrollToTop: t('mineralui.common.scrollToTop', 'Scroll to top'),\n openMenu: t('mineralui.common.openMenu', 'Open menu'),\n openCalendar: t('mineralui.common.openCalendar', 'Open calendar'),\n loading: t('mineralui.common.loading', 'Loading'),\n preview: t('mineralui.common.preview', 'Preview'),\n imagePreview: t('mineralui.common.imagePreview', 'Image preview'),\n closePreview: t('mineralui.common.closePreview', 'Close preview'),\n previewItem: t('mineralui.common.previewItem', 'Preview {name}'),\n image: t('mineralui.common.image', 'image'),\n imageNumber: t('mineralui.common.imageNumber', 'Image {index}'),\n previousImage: t('mineralui.common.previousImage', 'Previous image'),\n nextImage: t('mineralui.common.nextImage', 'Next image'),\n previousSlide: t('mineralui.common.previousSlide', 'Previous slide'),\n nextSlide: t('mineralui.common.nextSlide', 'Next slide'),\n slideNumber: t('mineralui.common.slideNumber', 'Slide {index}'),\n dragToClose: t('mineralui.common.dragToClose', 'Drag down to close'),\n scrollLeft: t('mineralui.common.scrollLeft', 'Scroll topbar left'),\n scrollRight: t('mineralui.common.scrollRight', 'Scroll topbar right'),\n editTile: t('mineralui.common.editTile', 'Edit tile'),\n expandTile: t('mineralui.common.expandTile', 'Expand tile'),\n removeTile: t('mineralui.common.removeTile', 'Remove tile'),\n expirationDate: t('mineralui.common.expirationDate', 'Expiration date'),\n postalCodeCountry: t('mineralui.common.postalCodeCountry', 'Postal code country'),\n digitNumber: t('mineralui.common.digitNumber', 'Digit {index}'),\n removeImage: t('mineralui.common.removeImage', 'Remove image'),\n emoji: t('mineralui.common.emoji', 'Emoji'),\n attachImage: t('mineralui.common.attachImage', 'Attach image'),\n send: t('mineralui.common.send', 'Send'),\n eventActions: t('mineralui.common.eventActions', 'Event actions'),\n documentActions: t('mineralui.common.documentActions', 'Open document actions'),\n dayNavigator: t('mineralui.common.dayNavigator', 'Day navigator'),\n previousDay: t('mineralui.common.previousDay', 'Previous day'),\n nextDay: t('mineralui.common.nextDay', 'Next day'),\n timeline: t('mineralui.common.timeline', 'Timeline'),\n }),\n [t]\n )\n}\n\nexport interface MTimelineBoardTexts {\n /** Placeholder: `{count}`. */\n eventsCount: string\n /** Placeholder: `{count}`. */\n eventsWithConflicts: string\n /** Placeholder: `{count}` (days). */\n conflictBefore: string\n /** Placeholder: `{count}` (days). */\n conflictAfter: string\n /** Placeholder: `{count}`. */\n overlappingEvents: string\n emptyState: string\n loading: string\n dropRejected: string\n conflict: string\n /** Placeholder: `{count}`. */\n participants: string\n /** Placeholders: `{count}`, `{capacity}`. */\n participantsWithCapacity: string\n /** Keyboard move mode (M on a draggable event): announced on start and shown next to the event. */\n moveInstructions: string\n /** Announced after every keyboard move step. Placeholders: `{title}`, `{row}`, `{when}`. */\n movePosition: string\n /** Announced after a keyboard drop. Placeholders: `{title}`, `{row}`, `{when}`. */\n moved: string\n moveCancelled: string\n}\n\n/**\n * MTimelineBoard texts. Resolution per key: MI18nProvider key `mineralui.timelineBoard.<key>`\n * → built-in English default.\n */\nexport function useMTimelineBoardTexts(): MTimelineBoardTexts {\n const t = useTranslate()\n\n return useMemo(\n () => ({\n eventsCount: t('mineralui.timelineBoard.eventsCount', '{count} events'),\n eventsWithConflicts: t('mineralui.timelineBoard.eventsWithConflicts', '{count} events with conflicts'),\n conflictBefore: t('mineralui.timelineBoard.conflictBefore', 'Conflict {count} day(s) earlier'),\n conflictAfter: t('mineralui.timelineBoard.conflictAfter', 'Conflict in {count} day(s)'),\n overlappingEvents: t('mineralui.timelineBoard.overlappingEvents', '{count} overlapping events'),\n emptyState: t('mineralui.timelineBoard.emptyState', 'No events to show'),\n loading: t('mineralui.timelineBoard.loading', 'Loading…'),\n dropRejected: t('mineralui.timelineBoard.dropRejected', 'The event cannot be moved there.'),\n conflict: t('mineralui.timelineBoard.conflict', 'Conflict'),\n participants: t('mineralui.timelineBoard.participants', 'Participants ({count})'),\n participantsWithCapacity: t(\n 'mineralui.timelineBoard.participantsWithCapacity',\n 'Participants ({count} / {capacity})'\n ),\n moveInstructions: t(\n 'mineralui.timelineBoard.moveInstructions',\n 'Left and right arrows move in time, Shift+arrows by an hour, up and down change the row, Enter drops, Escape cancels.'\n ),\n movePosition: t('mineralui.timelineBoard.movePosition', '{title}: {row}, {when}'),\n moved: t('mineralui.timelineBoard.moved', '{title} moved to {row}, {when}'),\n moveCancelled: t('mineralui.timelineBoard.moveCancelled', 'Move cancelled'),\n }),\n [t]\n )\n}\n\n/** Accessible names used by the layout components (MBreadcrumb, MPagination, MNavbar). */\nexport interface MLayoutTexts {\n breadcrumbLabel: string\n paginationLabel: string\n previousPage: string\n nextPage: string\n /** Placeholder: `{page}`. */\n pageNumber: string\n navbarMenu: string\n sidebarExpand: string\n sidebarCollapse: string\n /** MBreadcrumb ellipsis button that reveals the collapsed crumbs. Placeholder: `{count}`. */\n breadcrumbShowHidden: string\n /** Accessible name of the MSidebar mobile drawer (modal dialog). */\n sidebarDialogLabel: string\n /** MCanvasGrid fallback tile name when `getItemLabel` is not set. Placeholder: `{number}`. */\n canvasGridTile: string\n /** MCanvasGrid tile button names. Placeholder: `{label}`. */\n canvasGridEdit: string\n canvasGridExpand: string\n canvasGridRemove: string\n /** MCanvasGrid keyboard move / resize handle. Placeholder: `{label}`. */\n canvasGridHandle: string\n /** MCanvasGrid keyboard instructions (description of the handle). */\n canvasGridInstructions: string\n /** Placeholders: `{label}`, `{column}`, `{row}`, `{width}`, `{height}`. */\n canvasGridGrabbed: string\n /** Placeholders: `{label}`, `{column}`, `{row}`, `{width}`, `{height}`. */\n canvasGridPosition: string\n /** Placeholders: `{label}`, `{column}`, `{row}`, `{width}`, `{height}`. */\n canvasGridDropped: string\n /** Placeholder: `{label}`. */\n canvasGridCancelled: string\n}\n\n/**\n * Layout texts. Resolution per key: MI18nProvider keys `mineralui.breadcrumb.label`,\n * `mineralui.pagination.label|previous|next|page`, `mineralui.navbar.menu`,\n * `mineralui.sidebar.expand|collapse|dialogLabel`, `mineralui.breadcrumb.showHidden`,\n * `mineralui.canvasGrid.*` → built-in English default.\n */\nexport function useMLayoutTexts(): MLayoutTexts {\n const t = useTranslate()\n\n return useMemo(\n () => ({\n breadcrumbLabel: t('mineralui.breadcrumb.label', 'breadcrumb'),\n paginationLabel: t('mineralui.pagination.label', 'pagination'),\n previousPage: t('mineralui.pagination.previous', 'Previous page'),\n nextPage: t('mineralui.pagination.next', 'Next page'),\n pageNumber: t('mineralui.pagination.page', 'Page {page}'),\n navbarMenu: t('mineralui.navbar.menu', 'Open navigation'),\n sidebarExpand: t('mineralui.sidebar.expand', 'Expand sidebar'),\n sidebarCollapse: t('mineralui.sidebar.collapse', 'Collapse sidebar'),\n breadcrumbShowHidden: t('mineralui.breadcrumb.showHidden', 'Show {count} hidden items'),\n sidebarDialogLabel: t('mineralui.sidebar.dialogLabel', 'Navigation'),\n canvasGridTile: t('mineralui.canvasGrid.tile', 'Tile {number}'),\n canvasGridEdit: t('mineralui.canvasGrid.edit', 'Edit {label}'),\n canvasGridExpand: t('mineralui.canvasGrid.expand', 'Expand {label}'),\n canvasGridRemove: t('mineralui.canvasGrid.remove', 'Remove {label}'),\n canvasGridHandle: t('mineralui.canvasGrid.handle', 'Move or resize {label}'),\n canvasGridInstructions: t(\n 'mineralui.canvasGrid.instructions',\n 'Press Enter or Space to pick up the tile. Arrow keys move it, Shift+arrow keys resize it, Enter or Space drops it and Escape cancels.'\n ),\n canvasGridGrabbed: t(\n 'mineralui.canvasGrid.grabbed',\n '{label} picked up. Column {column}, row {row}, {width} by {height}.'\n ),\n canvasGridPosition: t(\n 'mineralui.canvasGrid.position',\n '{label}: column {column}, row {row}, {width} by {height}'\n ),\n canvasGridDropped: t(\n 'mineralui.canvasGrid.dropped',\n '{label} dropped at column {column}, row {row}, {width} by {height}'\n ),\n canvasGridCancelled: t('mineralui.canvasGrid.cancelled', '{label}: move cancelled'),\n }),\n [t]\n )\n}\n\n/** MSpinner / MLoader texts. MI18nProvider key `mineralui.spinner.label`. */\nexport interface MSpinnerTexts {\n label: string\n}\n\nexport function useMSpinnerTexts(): MSpinnerTexts {\n const t = useTranslate()\n\n return useMemo(() => ({label: t('mineralui.spinner.label', 'Loading')}), [t])\n}\n\n/** MLoadMore texts. MI18nProvider keys `mineralui.loadMore.label|loading|done`. */\nexport interface MLoadMoreTexts {\n label: string\n loading: string\n done: string\n}\n\nexport function useMLoadMoreTexts(): MLoadMoreTexts {\n const t = useTranslate()\n\n return useMemo(\n () => ({\n label: t('mineralui.loadMore.label', 'Load more'),\n loading: t('mineralui.loadMore.loading', 'Loading...'),\n done: t('mineralui.loadMore.done', 'All items loaded'),\n }),\n [t]\n )\n}\n\n/** MSocialButton texts. Placeholder: `{platform}`. */\nexport interface MSocialButtonTexts {\n signIn: string\n}\n\nexport function useMSocialButtonTexts(): MSocialButtonTexts {\n const t = useTranslate()\n\n return useMemo(() => ({signIn: t('mineralui.socialButton.signIn', 'Sign in with {platform}')}), [t])\n}\n\n/** MProgressRing texts. Placeholder: `{value}`. */\nexport interface MProgressRingTexts {\n label: string\n}\n\nexport function useMProgressRingTexts(): MProgressRingTexts {\n const t = useTranslate()\n\n return useMemo(() => ({label: t('mineralui.progressRing.label', 'Loading {value}%')}), [t])\n}\n\n/** MCodeBlock texts. MI18nProvider keys `mineralui.codeBlock.copy|copied|label`. */\nexport interface MCodeBlockTexts {\n copy: string\n copied: string\n /** Accessible name of the scrollable code region. */\n label: string\n}\n\nexport function useMCodeBlockTexts(): MCodeBlockTexts {\n const t = useTranslate()\n\n return useMemo(\n () => ({\n copy: t('mineralui.codeBlock.copy', 'Copy'),\n copied: t('mineralui.codeBlock.copied', 'Copied'),\n label: t('mineralui.codeBlock.label', 'Code'),\n }),\n [t]\n )\n}\n\n/** MStepper texts. MI18nProvider keys `mineralui.stepper.optional|completed|error`. */\nexport interface MStepperTexts {\n optional: string\n completed: string\n error: string\n}\n\nexport function useMStepperTexts(): MStepperTexts {\n const t = useTranslate()\n\n return useMemo(\n () => ({\n optional: t('mineralui.stepper.optional', 'Optional'),\n completed: t('mineralui.stepper.completed', 'Completed'),\n error: t('mineralui.stepper.error', 'Error'),\n }),\n [t]\n )\n}\n\n/** MRating texts. `star` / `stars` take a `{count}` placeholder. */\nexport interface MRatingTexts {\n label: string\n star: string\n stars: string\n /** Accessible name of a read-only rating (`role=\"img\"`). Placeholders: `{value}`, `{max}`. */\n readOnlyValue: string\n}\n\nexport function useMRatingTexts(): MRatingTexts {\n const t = useTranslate()\n\n return useMemo(\n () => ({\n label: t('mineralui.rating.label', 'MRating'),\n star: t('mineralui.rating.star', '{count} star'),\n stars: t('mineralui.rating.stars', '{count} stars'),\n readOnlyValue: t('mineralui.rating.readOnlyValue', '{value} of {max} stars'),\n }),\n [t]\n )\n}\n\n/** MQrCode texts. `status` takes a `{status}` placeholder. */\nexport interface MQrCodeTexts {\n label: string\n status: string\n}\n\nexport function useMQrCodeTexts(): MQrCodeTexts {\n const t = useTranslate()\n\n return useMemo(\n () => ({\n label: t('mineralui.qrCode.label', 'QR code'),\n status: t('mineralui.qrCode.status', 'QR code {status}'),\n }),\n [t]\n )\n}\n\n/** MColorPicker texts. `swatch` takes a `{color}` placeholder. */\nexport interface MColorPickerTexts {\n input: string\n swatch: string\n /** Accessible name of the saturation / brightness area (2D slider). */\n area: string\n /** `aria-valuetext` of the area. Placeholders: `{saturation}`, `{brightness}` (percent). */\n areaValue: string\n /** Accessible name of the hue slider. */\n hue: string\n /** `aria-valuetext` of the hue slider. Placeholder: `{value}` (degrees). */\n hueValue: string\n /** Accessible name of the swatch radio group. */\n swatches: string\n}\n\nexport function useMColorPickerTexts(): MColorPickerTexts {\n const t = useTranslate()\n\n return useMemo(\n () => ({\n input: t('mineralui.colorPicker.input', 'Color value'),\n swatch: t('mineralui.colorPicker.swatch', 'Color {color}'),\n area: t('mineralui.colorPicker.area', 'Saturation and brightness'),\n areaValue: t('mineralui.colorPicker.areaValue', 'Saturation {saturation}%, brightness {brightness}%'),\n hue: t('mineralui.colorPicker.hue', 'Hue'),\n hueValue: t('mineralui.colorPicker.hueValue', '{value} degrees'),\n swatches: t('mineralui.colorPicker.swatches', 'Swatches'),\n }),\n [t]\n )\n}\n\nexport interface MMediaTexts {\n /** Accessible name of an avatar without `alt` or `name`. */\n avatar: string\n /** Accessible name of an avatar with a presence dot. Placeholders: `{name}`, `{presence}`. */\n avatarPresence: string\n presence: {\n online: string\n offline: string\n away: string\n busy: string\n }\n /** Accessible name of the avatar-stack overflow counter. Placeholder: `{count}`. */\n avatarStackMore: string\n showcasePrevious: string\n showcaseNext: string\n /** Default accessible name of MCarousel / MShowcaseCarousel (role=region). */\n carouselLabel: string\n /** `aria-roledescription` of the carousel region. */\n carouselRoleDescription: string\n /** `aria-roledescription` of each slide group. */\n slideRoleDescription: string\n /** Accessible name of each slide group. Placeholders: `{index}`, `{count}`. */\n slideOf: string\n /** MCarousel rotation control while auto-rotating. */\n stopRotation: string\n /** MCarousel rotation control while rotation is stopped. */\n startRotation: string\n /** Accessible name of the MCarousel dot picker group. */\n chooseSlide: string\n}\n\n/**\n * Media texts. Resolution per key: MI18nProvider key `mineralui.avatar.*`,\n * `mineralui.avatarStack.*`, `mineralui.showcaseCarousel.*` or `mineralui.carousel.*` → built-in English default.\n */\nexport function useMMediaTexts(): MMediaTexts {\n const t = useTranslate()\n\n return useMemo(\n () => ({\n avatar: t('mineralui.avatar.fallback', 'Avatar'),\n avatarPresence: t('mineralui.avatar.presenceLabel', '{name}, {presence}'),\n presence: {\n online: t('mineralui.avatar.presence.online', 'Online'),\n offline: t('mineralui.avatar.presence.offline', 'Offline'),\n away: t('mineralui.avatar.presence.away', 'Away'),\n busy: t('mineralui.avatar.presence.busy', 'Busy'),\n },\n avatarStackMore: t('mineralui.avatarStack.more', '{count} more'),\n showcasePrevious: t('mineralui.showcaseCarousel.previous', 'Previous'),\n showcaseNext: t('mineralui.showcaseCarousel.next', 'Next'),\n carouselLabel: t('mineralui.carousel.label', 'Carousel'),\n carouselRoleDescription: t('mineralui.carousel.roleDescription', 'carousel'),\n slideRoleDescription: t('mineralui.carousel.slideRoleDescription', 'slide'),\n slideOf: t('mineralui.carousel.slideOf', '{index} of {count}'),\n stopRotation: t('mineralui.carousel.stopRotation', 'Stop slide rotation'),\n startRotation: t('mineralui.carousel.startRotation', 'Start slide rotation'),\n chooseSlide: t('mineralui.carousel.chooseSlide', 'Choose slide'),\n }),\n [t]\n )\n}\n\nexport interface MCardTexts {\n addToFavorites: string\n removeFromFavorites: string\n serviceCard: {\n available: string\n unavailable: string\n /** Placeholder: `{count}`. */\n spots: string\n register: string\n addToCart: string\n bookNow: string\n joinCourse: string\n /** Placeholder: `{value}`. */\n rating: string\n /** Placeholders: `{value}`, `{count}`. */\n ratingWithReviews: string\n /** Placeholders: `{count}`, `{max}`. */\n participants: string\n }\n cardPayment: {\n currentBalance: string\n cardHolder: string\n expirationDate: string\n }\n cardPaymentMethod: {\n title: string\n change: string\n helperText: string\n expirationDate: string\n securityCode: string\n defaultBadge: string\n creditCard: string\n /** Placeholder: `{date}`. */\n creditCardExpires: string\n }\n daySchedule: {\n title: string\n emptyTimeline: string\n }\n cardBusiness: {\n qrCode: string\n }\n cardDocumentTree: {\n title: string\n emptyDetails: string\n }\n cardGrid: {\n searchPlaceholder: string\n filter: string\n sort: string\n /** Placeholder: `{label}`. */\n sortBy: string\n loading: string\n emptyMessage: string\n /** Visually hidden sort-direction text (ascending). */\n sortAscending: string\n /** Visually hidden sort-direction text (descending). */\n sortDescending: string\n }\n}\n\n/**\n * Card texts. Resolution per key: MI18nProvider key `mineralui.card.*`, `mineralui.serviceCard.*`,\n * `mineralui.cardPayment.*`, `mineralui.cardPaymentMethod.*`, `mineralui.daySchedule.*`,\n * `mineralui.cardBusiness.*`, `mineralui.cardDocumentTree.*` or `mineralui.cardGrid.*` → built-in English default.\n */\nexport function useMCardTexts(): MCardTexts {\n const t = useTranslate()\n\n return useMemo(\n () => ({\n addToFavorites: t('mineralui.card.addToFavorites', 'Add to favorites'),\n removeFromFavorites: t('mineralui.card.removeFromFavorites', 'Remove from favorites'),\n serviceCard: {\n available: t('mineralui.serviceCard.available', 'Available'),\n unavailable: t('mineralui.serviceCard.unavailable', 'Unavailable'),\n spots: t('mineralui.serviceCard.spots', '{count} spots'),\n register: t('mineralui.serviceCard.register', 'Register'),\n addToCart: t('mineralui.serviceCard.addToCart', 'Add to cart'),\n bookNow: t('mineralui.serviceCard.bookNow', 'Book now'),\n joinCourse: t('mineralui.serviceCard.joinCourse', 'Join course'),\n rating: t('mineralui.serviceCard.rating', 'Rated {value} out of 5'),\n ratingWithReviews: t(\n 'mineralui.serviceCard.ratingWithReviews',\n 'Rated {value} out of 5, {count} reviews'\n ),\n participants: t('mineralui.serviceCard.participants', '{count} of {max} participants'),\n },\n cardPayment: {\n currentBalance: t('mineralui.cardPayment.currentBalance', 'Current balance'),\n cardHolder: t('mineralui.cardPayment.cardHolder', 'Card holder'),\n expirationDate: t('mineralui.cardPayment.expirationDate', 'Expiration date'),\n },\n cardPaymentMethod: {\n title: t('mineralui.cardPaymentMethod.title', 'Your payment methods'),\n change: t('mineralui.cardPaymentMethod.change', 'Change'),\n helperText: t(\n 'mineralui.cardPaymentMethod.helperText',\n 'All fields are required, unless stated otherwise.'\n ),\n expirationDate: t('mineralui.cardPaymentMethod.expirationDate', 'Expiration date'),\n securityCode: t('mineralui.cardPaymentMethod.securityCode', 'Security code'),\n defaultBadge: t('mineralui.cardPaymentMethod.defaultBadge', 'Default'),\n creditCard: t('mineralui.cardPaymentMethod.creditCard', 'Credit card'),\n creditCardExpires: t(\n 'mineralui.cardPaymentMethod.creditCardExpires',\n 'Credit card - Expiration date {date}'\n ),\n },\n daySchedule: {\n title: t('mineralui.daySchedule.title', 'Today'),\n emptyTimeline: t('mineralui.daySchedule.emptyTimeline', 'No events scheduled for this day.'),\n },\n cardBusiness: {\n qrCode: t('mineralui.cardBusiness.qrCode', 'QR'),\n },\n cardDocumentTree: {\n title: t('mineralui.cardDocumentTree.title', 'Documents'),\n emptyDetails: t('mineralui.cardDocumentTree.emptyDetails', 'Select a document to inspect its details.'),\n },\n cardGrid: {\n searchPlaceholder: t('mineralui.cardGrid.searchPlaceholder', 'Search...'),\n filter: t('mineralui.cardGrid.filter', 'Filter'),\n sort: t('mineralui.cardGrid.sort', 'Sort'),\n sortBy: t('mineralui.cardGrid.sortBy', 'Sort: {label}'),\n loading: t('mineralui.cardGrid.loading', 'Loading'),\n emptyMessage: t('mineralui.cardGrid.emptyMessage', 'No results found.'),\n sortAscending: t('mineralui.cardGrid.sortAscending', 'ascending'),\n sortDescending: t('mineralui.cardGrid.sortDescending', 'descending'),\n },\n }),\n [t]\n )\n}\n\n/** Built-in texts of the specialised inputs (password, search, OTP, slider, postal code, IBAN, expiry date). */\nexport interface MInputTexts {\n showPassword: string\n /** Placeholder: `{strength}`. */\n passwordStrength: string\n strength: {\n weak: string\n fair: string\n good: string\n strong: string\n }\n searchPlaceholder: string\n ibanCountry: string\n /** Placeholder: `{example}`. */\n formatHint: string\n otpGroup: string\n /** Placeholders: `{index}`, `{count}`. Falls back to a translated `mineralui.common.digitNumber`. */\n otpDigit: string\n sliderValue: string\n expMonthPlaceholder: string\n expYearPlaceholder: string\n /** Accessible name of the expiry month picker. */\n expMonth: string\n /** Accessible name of the expiry year picker. */\n expYear: string\n}\n\n/**\n * Input texts. Resolution per key: MI18nProvider key `mineralui.input.<key>`\n * (strength labels: `mineralui.input.strength.weak|fair|good|strong`) → built-in English default.\n */\nexport function useMInputTexts(): MInputTexts {\n const t = useTranslate()\n\n return useMemo(() => {\n // Apps that already translated the older `mineralui.common.digitNumber` keep their text.\n const legacyDigit = t('mineralui.common.digitNumber', '')\n\n return {\n showPassword: t('mineralui.input.showPassword', 'Show password'),\n passwordStrength: t('mineralui.input.passwordStrength', 'Password strength: {strength}'),\n strength: {\n weak: t('mineralui.input.strength.weak', 'Weak'),\n fair: t('mineralui.input.strength.fair', 'Fair'),\n good: t('mineralui.input.strength.good', 'Good'),\n strong: t('mineralui.input.strength.strong', 'Strong'),\n },\n searchPlaceholder: t('mineralui.input.searchPlaceholder', 'Search...'),\n ibanCountry: t('mineralui.input.ibanCountry', 'IBAN country'),\n formatHint: t('mineralui.input.formatHint', 'Format: {example}'),\n otpGroup: t('mineralui.input.otpGroup', 'Verification code'),\n otpDigit: t('mineralui.input.otpDigit', legacyDigit || 'Digit {index} of {count}'),\n sliderValue: t('mineralui.input.sliderValue', 'Slider value'),\n expMonthPlaceholder: t('mineralui.input.expMonthPlaceholder', 'MM'),\n expYearPlaceholder: t('mineralui.input.expYearPlaceholder', 'YYYY'),\n expMonth: t('mineralui.input.expMonth', 'Month'),\n expYear: t('mineralui.input.expYear', 'Year'),\n }\n }, [t])\n}\n\n/** Built-in texts of MInputFile and its crop editor. */\nexport interface MInputFileTexts {\n placeholder: string\n drop: string\n /** Placeholder: `{size}`. */\n maxSize: string\n /** Placeholder: `{count}` — used when the limit is 1. */\n maxFilesOne: string\n /** Placeholder: `{count}`. */\n maxFiles: string\n /** Placeholder: `{name}` — the rejected file names. */\n type: string\n /** Placeholder: `{apply}` — rendered as the emphasised apply label. */\n cropHint: string\n cropApply: string\n cropCancel: string\n /** Accessible name of the crop editor's zoom slider. */\n cropZoom: string\n /** Accessible name of the crop editor's image area (`role=\"application\"`). */\n cropArea: string\n /** Keyboard instructions announced with the crop area. */\n cropKeyboardHint: string\n}\n\n/** MInputFile texts. Resolution per key: MI18nProvider key `mineralui.inputFile.<key>` → built-in English default. */\nexport function useMInputFileTexts(): MInputFileTexts {\n const t = useTranslate()\n\n return useMemo(\n () => ({\n placeholder: t('mineralui.inputFile.placeholder', 'Drop files here or click to browse'),\n drop: t('mineralui.inputFile.drop', 'Drop files here'),\n maxSize: t('mineralui.inputFile.maxSize', 'Max file size: {size}'),\n maxFilesOne: t('mineralui.inputFile.maxFilesOne', 'Max {count} file'),\n maxFiles: t('mineralui.inputFile.maxFiles', 'Max {count} files'),\n type: t('mineralui.inputFile.type', 'File type not allowed: {name}'),\n cropHint: t(\n 'mineralui.inputFile.cropHint',\n 'Drag the image to reposition, scroll or use the slider to zoom, then click {apply} to confirm the crop.'\n ),\n cropApply: t('mineralui.inputFile.cropApply', 'Apply'),\n cropCancel: t('mineralui.inputFile.cropCancel', 'Cancel'),\n cropZoom: t('mineralui.inputFile.cropZoom', 'Zoom'),\n cropArea: t('mineralui.inputFile.cropArea', 'Crop area'),\n cropKeyboardHint: t(\n 'mineralui.inputFile.cropKeyboardHint',\n 'Use the arrow keys to move the image (hold Shift to move faster), plus and minus to zoom.'\n ),\n }),\n [t]\n )\n}\n\n/** Toolbar texts shared by data views (MDataTable). */\nexport interface MDataViewTexts {\n searchPlaceholder: string\n filter: string\n sort: string\n /** Sort button label while a sort key is active. Placeholder: `{label}`. */\n sortBy: string\n /** Visually hidden sort-direction text (ascending). */\n sortAscending: string\n /** Visually hidden sort-direction text (descending). */\n sortDescending: string\n}\n\n/**\n * Data-view toolbar texts. Resolution per key: MI18nProvider key `mineralui.dataView.<key>`\n * → built-in English default.\n */\nexport function useMDataViewTexts(): MDataViewTexts {\n const t = useTranslate()\n\n return useMemo(\n () => ({\n searchPlaceholder: t('mineralui.dataView.searchPlaceholder', 'Search...'),\n filter: t('mineralui.dataView.filter', 'Filter'),\n sort: t('mineralui.dataView.sort', 'Sort'),\n sortBy: t('mineralui.dataView.sortBy', 'Sort: {label}'),\n sortAscending: t('mineralui.dataView.sortAscending', 'ascending'),\n sortDescending: t('mineralui.dataView.sortDescending', 'descending'),\n }),\n [t]\n )\n}\n\nexport interface MDataTableTexts {\n empty: string\n /** Accessible name of the header \"select all\" checkbox. */\n selectAllRows: string\n /** Accessible name of a row checkbox. Placeholder: `{index}` (1-based row number). */\n selectRow: string\n}\n\n/**\n * MDataTable texts. Resolution per key: MI18nProvider key `mineralui.dataTable.<key>`\n * → built-in English default.\n */\nexport function useMDataTableTexts(): MDataTableTexts {\n const t = useTranslate()\n\n return useMemo(\n () => ({\n empty: t('mineralui.dataTable.empty', 'No data'),\n selectAllRows: t('mineralui.dataTable.selectAllRows', 'Select all rows'),\n selectRow: t('mineralui.dataTable.selectRow', 'Select row {index}'),\n }),\n [t]\n )\n}\n\nexport interface MChartTexts {\n /** Fallback pie-segment label. Placeholder: `{index}` (1-based). */\n segment: string\n /** Fallback accessible name of the chart when no `label` is given. */\n chart: string\n /** Keyboard hint attached to the focusable plot. */\n keyboardHint: string\n /** Header of the category column in the visually hidden data table. */\n category: string\n /** Header of the value column of a pie chart's data table. */\n value: string\n /** One series value in a keyboard announcement. Placeholders: `{series}`, `{value}`. */\n seriesValue: string\n /** Keyboard announcement of the active point. Placeholders: `{label}`, `{values}`. */\n pointAnnouncement: string\n}\n\n/**\n * MChart texts. Resolution per key: MI18nProvider key `mineralui.chart.<key>`\n * → built-in English default.\n */\nexport function useMChartTexts(): MChartTexts {\n const t = useTranslate()\n\n return useMemo(\n () => ({\n segment: t('mineralui.chart.segment', 'Segment {index}'),\n chart: t('mineralui.chart.chart', 'Chart'),\n keyboardHint: t('mineralui.chart.keyboardHint', 'Use the arrow keys to move between data points.'),\n category: t('mineralui.chart.category', 'Category'),\n value: t('mineralui.chart.value', 'Value'),\n seriesValue: t('mineralui.chart.seriesValue', '{series}: {value}'),\n pointAnnouncement: t('mineralui.chart.pointAnnouncement', '{label}, {values}'),\n }),\n [t]\n )\n}\n\nexport interface MTreeViewTexts {\n /** Accessible name of the node context menu. Placeholder: `{label}`. */\n menuLabel: string\n /** Built-in context-menu action that picks a node up for a move (alternative to dragging). */\n cut: string\n /** Built-in context-menu action that moves the picked-up node into this folder. */\n moveHere: string\n /** Built-in context-menu action that drops the pending move. */\n cancelMove: string\n /** Announced after cutting. Placeholder: `{label}`. */\n cutAnnouncement: string\n /** Announced after a keyboard / menu move. Placeholders: `{label}`, `{target}`. */\n movedAnnouncement: string\n /** Announced when a pending move is cancelled. */\n moveCancelled: string\n}\n\n/**\n * MTreeView texts. Resolution per key: MI18nProvider key `mineralui.treeView.<key>`\n * → built-in English default.\n */\nexport function useMTreeViewTexts(): MTreeViewTexts {\n const t = useTranslate()\n\n return useMemo(\n () => ({\n menuLabel: t('mineralui.treeView.menuLabel', '{label} actions'),\n cut: t('mineralui.treeView.cut', 'Cut'),\n moveHere: t('mineralui.treeView.moveHere', 'Move here'),\n cancelMove: t('mineralui.treeView.cancelMove', 'Cancel move'),\n cutAnnouncement: t(\n 'mineralui.treeView.cutAnnouncement',\n '{label} cut. Go to a folder and press Ctrl+V, or choose Move here from its menu.'\n ),\n movedAnnouncement: t('mineralui.treeView.movedAnnouncement', '{label} moved to {target}.'),\n moveCancelled: t('mineralui.treeView.moveCancelled', 'Move cancelled.'),\n }),\n [t]\n )\n}\n\nexport interface MDashboardGridTexts {\n dragHandle: string\n widthLabel: string\n /** Placeholders: `{span}`, `{columns}`. */\n widthValue: string\n remove: string\n moveLeft: string\n moveRight: string\n narrower: string\n wider: string\n emptyHint: string\n /** Placeholder: `{label}`. */\n itemActions: string\n /** Placeholders: `{label}`, `{position}`, `{total}`. */\n positionAnnouncement: string\n /** Placeholders: `{label}`, `{span}`, `{columns}`. */\n widthAnnouncement: string\n /** Placeholder: `{label}`. */\n lifted: string\n /** Placeholder: `{label}`. */\n dropped: string\n /** Placeholder: `{label}`. */\n resizeHandle: string\n /** `aria-roledescription` of a drag handle. */\n sortableItem: string\n}\n\n/**\n * MDashboardGrid texts. Resolution per key: `locale` prop → MI18nProvider key\n * `mineralui.dashboardGrid.<key>` → built-in English default.\n */\nexport function useMDashboardGridTexts(overrides?: Partial<MDashboardGridTexts>): MDashboardGridTexts {\n const t = useTranslate()\n\n return useMemo(\n () => ({\n dragHandle: t('mineralui.dashboardGrid.dragHandle', 'Drag to reorder'),\n widthLabel: t('mineralui.dashboardGrid.widthLabel', 'Width'),\n widthValue: t('mineralui.dashboardGrid.widthValue', '{span} of {columns} columns'),\n remove: t('mineralui.dashboardGrid.remove', 'Remove from dashboard'),\n moveLeft: t('mineralui.dashboardGrid.moveLeft', 'Move earlier'),\n moveRight: t('mineralui.dashboardGrid.moveRight', 'Move later'),\n narrower: t('mineralui.dashboardGrid.narrower', 'Narrower'),\n wider: t('mineralui.dashboardGrid.wider', 'Wider'),\n emptyHint: t('mineralui.dashboardGrid.emptyHint', 'No widgets on this dashboard yet.'),\n itemActions: t('mineralui.dashboardGrid.itemActions', '{label} actions'),\n positionAnnouncement: t(\n 'mineralui.dashboardGrid.positionAnnouncement',\n '{label}: position {position} of {total}'\n ),\n widthAnnouncement: t('mineralui.dashboardGrid.widthAnnouncement', '{label}: {span} of {columns} columns'),\n lifted: t('mineralui.dashboardGrid.lifted', '{label} lifted. Use the arrow keys to move it.'),\n dropped: t('mineralui.dashboardGrid.dropped', '{label} dropped.'),\n resizeHandle: t('mineralui.dashboardGrid.resizeHandle', 'Resize {label}'),\n sortableItem: t('mineralui.dashboardGrid.sortableItem', 'sortable item'),\n ...overrides,\n }),\n [t, overrides]\n )\n}\n\nexport interface MChatTexts {\n /** Accessible name of the chat region. */\n chat: string\n openChat: string\n closeChat: string\n /** Accessible name of the message log. */\n messages: string\n /** Accessible name of the message field. */\n messageInput: string\n placeholder: string\n /** Prefix of an own last message in a conversation preview. */\n youPrefix: string\n /** Compact \"just now\" timestamp in a conversation item. */\n now: string\n statusSent: string\n statusDelivered: string\n statusRead: string\n /** Placeholder: `{name}`. */\n typingOne: string\n /** Placeholders: `{first}`, `{second}`. */\n typingTwo: string\n /** Placeholders: `{name}`, `{count}`. */\n typingMany: string\n}\n\n/**\n * MChat texts. Resolution per key: MI18nProvider key `mineralui.chat.<key>`\n * → built-in English default.\n */\nexport function useMChatTexts(): MChatTexts {\n const t = useTranslate()\n\n return useMemo(\n () => ({\n chat: t('mineralui.chat.chat', 'Chat'),\n openChat: t('mineralui.chat.openChat', 'Open chat'),\n closeChat: t('mineralui.chat.closeChat', 'Close chat'),\n messages: t('mineralui.chat.messages', 'Messages'),\n messageInput: t('mineralui.chat.messageInput', 'Message'),\n placeholder: t('mineralui.chat.placeholder', 'Type a message…'),\n youPrefix: t('mineralui.chat.youPrefix', 'You: '),\n now: t('mineralui.chat.now', 'now'),\n statusSent: t('mineralui.chat.statusSent', 'sent'),\n statusDelivered: t('mineralui.chat.statusDelivered', 'delivered'),\n statusRead: t('mineralui.chat.statusRead', 'read'),\n typingOne: t('mineralui.chat.typingOne', '{name} is typing'),\n typingTwo: t('mineralui.chat.typingTwo', '{first} and {second} are typing'),\n typingMany: t('mineralui.chat.typingMany', '{name} and {count} others are typing'),\n }),\n [t]\n )\n}\n\n/**\n * Translate results of the built-in `validate*` functions through `mineralui.validation.<key>`\n * (e.g. `mineralui.validation.email`, `mineralui.validation.minLength` with `{min}`,\n * `mineralui.validation.postCode.PL`). Results from custom validators are returned unchanged.\n */\nexport function useMValidationMessage(): (result: ValidationResult) => ValidationResult {\n const t = useTranslate()\n\n return useCallback(\n (result: ValidationResult) => {\n const info = result.valid ? undefined : getValidationMessageInfo(result)\n if (!info) return result\n const template = t(`mineralui.validation.${info.key}`, info.template)\n return {...result, error: fillValidationTemplate(template, info.params)}\n },\n [t]\n )\n}\n\nexport interface MSelectTexts {\n placeholder: string\n searchPlaceholder: string\n noOptions: string\n /** Accessible name of the search combobox when the field has no visible label. */\n searchLabel: string\n}\n\n/** MSelect texts. Resolution per key: MI18nProvider key `mineralui.select.<key>` → built-in English default. */\nexport function useMSelectTexts(): MSelectTexts {\n const t = useTranslate()\n\n return useMemo(\n () => ({\n placeholder: t('mineralui.select.placeholder', 'Select...'),\n searchPlaceholder: t('mineralui.select.searchPlaceholder', 'Search...'),\n noOptions: t('mineralui.select.noOptions', 'No options'),\n searchLabel: t('mineralui.select.searchLabel', 'Search options'),\n }),\n [t]\n )\n}\n\nexport interface MAutocompleteTexts {\n placeholder: string\n noOptions: string\n loading: string\n}\n\n/** MAutocomplete texts. Resolution per key: MI18nProvider key `mineralui.autocomplete.<key>` → built-in English default. */\nexport function useMAutocompleteTexts(): MAutocompleteTexts {\n const t = useTranslate()\n\n return useMemo(\n () => ({\n placeholder: t('mineralui.autocomplete.placeholder', 'Type to search...'),\n noOptions: t('mineralui.autocomplete.noOptions', 'No options'),\n loading: t('mineralui.autocomplete.loading', 'Loading...'),\n }),\n [t]\n )\n}\n\nexport interface MTimePickerTexts {\n /** Heading of the time panel in MDatePicker (`withTime`). */\n time: string\n hours: string\n minutes: string\n seconds: string\n meridiem: string\n /** Accessible name of the MTimePicker dialog when the field has no label. */\n dialogLabel: string\n}\n\n/** Time column texts (MTimePicker, MDatePicker). Resolution per key: `mineralui.time.<key>` → built-in English default. */\nexport function useMTimePickerTexts(): MTimePickerTexts {\n const t = useTranslate()\n\n return useMemo(\n () => ({\n time: t('mineralui.time.time', 'Time'),\n hours: t('mineralui.time.hours', 'Hr'),\n minutes: t('mineralui.time.minutes', 'Min'),\n seconds: t('mineralui.time.seconds', 'Sec'),\n meridiem: t('mineralui.time.meridiem', 'AM/PM'),\n dialogLabel: t('mineralui.time.dialogLabel', 'Choose time'),\n }),\n [t]\n )\n}\n\nexport interface MPopconfirmTexts {\n confirm: string\n cancel: string\n}\n\n/** MPopconfirm texts. Resolution per key: `mineralui.popconfirm.<key>` → built-in English default. */\nexport function useMPopconfirmTexts(): MPopconfirmTexts {\n const t = useTranslate()\n\n return useMemo(\n () => ({\n confirm: t('mineralui.popconfirm.confirm', 'Yes'),\n cancel: t('mineralui.popconfirm.cancel', 'No'),\n }),\n [t]\n )\n}\n\nexport interface MCommandPaletteTexts {\n title: string\n open: string\n placeholder: string\n empty: string\n featured: string\n featuredDescription: string\n results: string\n /** Placeholder: `{count}`. */\n resultsCount: string\n generalGroup: string\n /** Accessible name of the search combobox. */\n searchLabel: string\n /** Screen-reader announcement after the results change. Placeholder: `{count}`. */\n resultsAnnouncement: string\n}\n\n/** MCommandPalette texts. Resolution per key: `mineralui.commandPalette.<key>` → built-in English default. */\nexport function useMCommandPaletteTexts(): MCommandPaletteTexts {\n const t = useTranslate()\n\n return useMemo(\n () => ({\n title: t('mineralui.commandPalette.title', 'Command palette'),\n open: t('mineralui.commandPalette.open', 'Open command palette'),\n placeholder: t('mineralui.commandPalette.placeholder', 'Search modules, records and actions...'),\n empty: t('mineralui.commandPalette.empty', 'No matching results.'),\n featured: t('mineralui.commandPalette.featured', 'Featured'),\n featuredDescription: t(\n 'mineralui.commandPalette.featuredDescription',\n 'Quick launch for the most frequent dashboard actions.'\n ),\n results: t('mineralui.commandPalette.results', 'Results'),\n resultsCount: t('mineralui.commandPalette.resultsCount', '{count} ready'),\n generalGroup: t('mineralui.commandPalette.generalGroup', 'General'),\n searchLabel: t('mineralui.commandPalette.searchLabel', 'Search commands'),\n resultsAnnouncement: t('mineralui.commandPalette.resultsAnnouncement', 'Results: {count}'),\n }),\n [t]\n )\n}\n"],"mappings":"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"}
|