@banzamel/mineralui 2.4.2 → 2.5.1
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-BkNf7fzo.js → MButtonGroup-DDnn8Wfy.js} +3 -3
- package/dist/{MButtonGroup-BkNf7fzo.js.map → MButtonGroup-DDnn8Wfy.js.map} +1 -1
- package/dist/{MButtonGroup-iPv14c0V.cjs → MButtonGroup-Dz8Fm-oA.cjs} +2 -2
- package/dist/{MButtonGroup-iPv14c0V.cjs.map → MButtonGroup-Dz8Fm-oA.cjs.map} +1 -1
- package/dist/{MCard-DK-_FkpE.cjs → MCard-Bqm4BjK_.cjs} +2 -2
- package/dist/MCard-Bqm4BjK_.cjs.map +1 -0
- package/dist/{MCard-azpp4YVD.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-DqMnZ7Iv.cjs → MKbd-CnW3NUIu.cjs} +2 -2
- package/dist/{MKbd-DqMnZ7Iv.cjs.map → MKbd-CnW3NUIu.cjs.map} +1 -1
- package/dist/{MKbd-v6-tJ9sP.js → MKbd-DjfGyajR.js} +2 -2
- package/dist/{MKbd-v6-tJ9sP.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-BWKurW6H.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-C5uD4Axo.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/{arduino-BdpdaLwK.cjs → arduino-C1gw-z1N.cjs} +1 -1
- package/dist/{arduino-BdpdaLwK.cjs.map → arduino-C1gw-z1N.cjs.map} +1 -1
- package/dist/{arduino-DDDlP9Yt.js → arduino-CcVvzDWF.js} +1 -1
- package/dist/{arduino-DDDlP9Yt.js.map → arduino-CcVvzDWF.js.map} +1 -1
- package/dist/{bash-D8WbAmuA.js → bash-DkMiO80l.js} +1 -1
- package/dist/{bash-D8WbAmuA.js.map → bash-DkMiO80l.js.map} +1 -1
- package/dist/{bash-eOUFh3S1.cjs → bash-wzZkpJC-.cjs} +1 -1
- package/dist/{bash-eOUFh3S1.cjs.map → bash-wzZkpJC-.cjs.map} +1 -1
- package/dist/{c-Bur7Mn-u.cjs → c-BSPjDa0P.cjs} +1 -1
- package/dist/{c-Bur7Mn-u.cjs.map → c-BSPjDa0P.cjs.map} +1 -1
- package/dist/{c-CTKNfUJI.js → c-DtlFV5Pa.js} +1 -1
- package/dist/{c-CTKNfUJI.js.map → c-DtlFV5Pa.js.map} +1 -1
- 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-CYkJqcnp.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 +8 -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/{core-D5-SQcs8.js → core-B8VC-Umz.js} +1 -1
- package/dist/{core-D5-SQcs8.js.map → core-B8VC-Umz.js.map} +1 -1
- package/dist/{core-D66c1_Wo.cjs → core-w629c4ND.cjs} +1 -1
- package/dist/{core-D66c1_Wo.cjs.map → core-w629c4ND.cjs.map} +1 -1
- package/dist/{cpp-DAzz2TpY.js → cpp-BraS2arf.js} +1 -1
- package/dist/{cpp-DAzz2TpY.js.map → cpp-BraS2arf.js.map} +1 -1
- package/dist/{cpp-BMULAf-B.cjs → cpp-LIcuHkFj.cjs} +1 -1
- package/dist/{cpp-BMULAf-B.cjs.map → cpp-LIcuHkFj.cjs.map} +1 -1
- 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/{css-9M03GzKO.cjs → css-D6fGBtGV.cjs} +1 -1
- package/dist/{css-9M03GzKO.cjs.map → css-D6fGBtGV.cjs.map} +1 -1
- package/dist/{css-EGOXTWIl.js → css-Dy8pFAWa.js} +1 -1
- package/dist/{css-EGOXTWIl.js.map → css-Dy8pFAWa.js.map} +1 -1
- 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 +572 -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/{javascript-CHSg4NGc.js → javascript-CqKLBRqa.js} +1 -1
- package/dist/{javascript-CHSg4NGc.js.map → javascript-CqKLBRqa.js.map} +1 -1
- package/dist/{javascript-CastOQF5.cjs → javascript-Oy5hkezl.cjs} +1 -1
- package/dist/{javascript-CastOQF5.cjs.map → javascript-Oy5hkezl.cjs.map} +1 -1
- package/dist/{json-DCkJ-m-p.cjs → json-BP8eqPWc.cjs} +1 -1
- package/dist/{json-DCkJ-m-p.cjs.map → json-BP8eqPWc.cjs.map} +1 -1
- package/dist/{json-Bejy9Rlg.js → json-DJkyYaPe.js} +1 -1
- package/dist/{json-Bejy9Rlg.js.map → json-DJkyYaPe.js.map} +1 -1
- 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/{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/{locale-DRRl_s5-.cjs → locale-C08q7FjE.cjs} +2 -2
- package/dist/{locale-DRRl_s5-.cjs.map → locale-C08q7FjE.cjs.map} +1 -1
- package/dist/{locale-CS1-IY_I.js → locale-CjJpk9GN.js} +1 -1
- package/dist/{locale-CS1-IY_I.js.map → locale-CjJpk9GN.js.map} +1 -1
- 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/{php-BdVXegqn.cjs → php-Cwjc-ZYq.cjs} +1 -1
- package/dist/{php-BdVXegqn.cjs.map → php-Cwjc-ZYq.cjs.map} +1 -1
- package/dist/{php-Cb_S1hXT.js → php-Db8PWzaX.js} +1 -1
- package/dist/{php-Cb_S1hXT.js.map → php-Db8PWzaX.js.map} +1 -1
- 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/{typescript-CcGBfzlS.cjs → typescript-QKlfKtex.cjs} +1 -1
- package/dist/{typescript-CcGBfzlS.cjs.map → typescript-QKlfKtex.cjs.map} +1 -1
- package/dist/{typescript-0VHxrxf2.js → typescript-chdf_txx.js} +1 -1
- package/dist/{typescript-0VHxrxf2.js.map → typescript-chdf_txx.js.map} +1 -1
- package/dist/{typography-CAW17MDj.js → typography-DNcB8dOy.js} +3 -3
- package/dist/{typography-CAW17MDj.js.map → typography-DNcB8dOy.js.map} +1 -1
- package/dist/{typography-C4_O8len.cjs → typography-I7aeG8pH.cjs} +2 -2
- package/dist/{typography-C4_O8len.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/{useInteractionEffect-CFwDX5UF.cjs → useInteractionEffect-CtXlbjhC.cjs} +2 -2
- package/dist/{useInteractionEffect-CFwDX5UF.cjs.map → useInteractionEffect-CtXlbjhC.cjs.map} +1 -1
- 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 +14 -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/dist/{xml-Dbm3mobK.cjs → xml-DEtyywwU.cjs} +1 -1
- package/dist/{xml-Dbm3mobK.cjs.map → xml-DEtyywwU.cjs.map} +1 -1
- package/dist/{xml-8GjNy8SM.js → xml-DnydRpfh.js} +1 -1
- package/dist/{xml-8GjNy8SM.js.map → xml-DnydRpfh.js.map} +1 -1
- package/package.json +1 -1
- package/dist/MAvatar-Capz5Gbc.cjs +0 -2
- package/dist/MAvatar-Capz5Gbc.cjs.map +0 -1
- package/dist/MAvatar-DtJCj3dD.js +0 -63
- package/dist/MAvatar-DtJCj3dD.js.map +0 -1
- package/dist/MButton-C1pnL4_j.js +0 -115
- package/dist/MButton-C1pnL4_j.js.map +0 -1
- package/dist/MButton-sTKnano6.cjs +0 -2
- package/dist/MButton-sTKnano6.cjs.map +0 -1
- package/dist/MCard-DK-_FkpE.cjs.map +0 -1
- package/dist/MCard-azpp4YVD.js.map +0 -1
- package/dist/MCheckbox-B7SpcD4H.js +0 -59
- package/dist/MCheckbox-B7SpcD4H.js.map +0 -1
- package/dist/MCheckbox-CIX7wp41.cjs +0 -2
- package/dist/MCheckbox-CIX7wp41.cjs.map +0 -1
- package/dist/MConflictIllustration-CZ3Md38Z.cjs +0 -2
- package/dist/MConflictIllustration-CZ3Md38Z.cjs.map +0 -1
- package/dist/MConflictIllustration-znC7ijmP.js.map +0 -1
- package/dist/MDetailList-Ce7KzUKC.cjs +0 -2
- package/dist/MDetailList-Ce7KzUKC.cjs.map +0 -1
- package/dist/MDetailList-fDhVyhm7.js +0 -98
- package/dist/MDetailList-fDhVyhm7.js.map +0 -1
- package/dist/MDropdownMenu-B_QWQhxy.cjs +0 -2
- package/dist/MDropdownMenu-B_QWQhxy.cjs.map +0 -1
- package/dist/MDropdownMenu-C4CuKMRZ.js +0 -172
- package/dist/MDropdownMenu-C4CuKMRZ.js.map +0 -1
- package/dist/MGrid-CYL3cbUI.js +0 -265
- package/dist/MGrid-CYL3cbUI.js.map +0 -1
- package/dist/MGrid-fTx6wFq_.cjs +0 -2
- package/dist/MGrid-fTx6wFq_.cjs.map +0 -1
- package/dist/MHeading-B7KgSP4T.js +0 -21
- package/dist/MHeading-B7KgSP4T.js.map +0 -1
- package/dist/MHeading-KDSpnCof.cjs +0 -2
- package/dist/MHeading-KDSpnCof.cjs.map +0 -1
- package/dist/MI18nProvider-DXRbB0VY.cjs +0 -2
- package/dist/MI18nProvider-DXRbB0VY.cjs.map +0 -1
- package/dist/MI18nProvider-VH14CI8u.js +0 -72
- package/dist/MI18nProvider-VH14CI8u.js.map +0 -1
- package/dist/MInput-C8ObGzQk.js +0 -187
- package/dist/MInput-C8ObGzQk.js.map +0 -1
- package/dist/MInput-CGl2Q-rM.cjs +0 -2
- package/dist/MInput-CGl2Q-rM.cjs.map +0 -1
- package/dist/MInputCVC-Blv5PeyS.js +0 -320
- package/dist/MInputCVC-Blv5PeyS.js.map +0 -1
- package/dist/MInputCVC-lAFKTV6y.cjs +0 -2
- package/dist/MInputCVC-lAFKTV6y.cjs.map +0 -1
- package/dist/MInputSearch-BM8gLlJ1.js +0 -43
- package/dist/MInputSearch-BM8gLlJ1.js.map +0 -1
- package/dist/MInputSearch-BZDnbFB4.cjs +0 -2
- package/dist/MInputSearch-BZDnbFB4.cjs.map +0 -1
- package/dist/MLink-Bd8fLH1N.js +0 -31
- package/dist/MLink-Bd8fLH1N.js.map +0 -1
- package/dist/MLink-U24G6KJj.cjs +0 -2
- package/dist/MLink-U24G6KJj.cjs.map +0 -1
- package/dist/MLoader-CnvWqFtA.js +0 -41
- package/dist/MLoader-CnvWqFtA.js.map +0 -1
- package/dist/MLoader-CvFIvytw.cjs +0 -2
- package/dist/MLoader-CvFIvytw.cjs.map +0 -1
- package/dist/MPagination-BkvOEZpp.js +0 -113
- package/dist/MPagination-BkvOEZpp.js.map +0 -1
- package/dist/MPagination-DgQta29Q.cjs +0 -2
- package/dist/MPagination-DgQta29Q.cjs.map +0 -1
- package/dist/MPopover-C-e1CoV0.cjs +0 -2
- package/dist/MPopover-C-e1CoV0.cjs.map +0 -1
- package/dist/MPopover-Dd-GIBU6.js +0 -155
- package/dist/MPopover-Dd-GIBU6.js.map +0 -1
- package/dist/MPortal-Ba2Sxset.js +0 -10
- package/dist/MPortal-Ba2Sxset.js.map +0 -1
- package/dist/MPortal-DUSIuINN.cjs +0 -2
- package/dist/MPortal-DUSIuINN.cjs.map +0 -1
- package/dist/MSimpleGrid-BWKurW6H.js.map +0 -1
- package/dist/MSimpleGrid-BzlIitcJ.cjs +0 -2
- package/dist/MSimpleGrid-BzlIitcJ.cjs.map +0 -1
- package/dist/MSkeleton-BoFpowFU.cjs +0 -2
- package/dist/MSkeleton-BoFpowFU.cjs.map +0 -1
- package/dist/MSkeleton-C5uD4Axo.js.map +0 -1
- package/dist/MSlider-BTDBqF8t.cjs +0 -2
- package/dist/MSlider-BTDBqF8t.cjs.map +0 -1
- package/dist/MSlider-CqrusKJQ.js +0 -75
- package/dist/MSlider-CqrusKJQ.js.map +0 -1
- package/dist/MStack-B3Ldqsc-.cjs +0 -2
- package/dist/MStack-B3Ldqsc-.cjs.map +0 -1
- package/dist/MStack-CSCw6to2.js +0 -39
- package/dist/MStack-CSCw6to2.js.map +0 -1
- package/dist/MSubText-47PsgE8T.cjs +0 -2
- package/dist/MSubText-47PsgE8T.cjs.map +0 -1
- package/dist/MSubText-C-N15d4Z.js +0 -17
- package/dist/MSubText-C-N15d4Z.js.map +0 -1
- package/dist/MSurface-B-sjyczH.js +0 -74
- package/dist/MSurface-B-sjyczH.js.map +0 -1
- package/dist/MSurface-QYEygc_0.cjs +0 -2
- package/dist/MSurface-QYEygc_0.cjs.map +0 -1
- package/dist/MTag-BjV-dXkk.cjs +0 -2
- package/dist/MTag-BjV-dXkk.cjs.map +0 -1
- package/dist/MTag-D9q6faIk.js +0 -39
- package/dist/MTag-D9q6faIk.js.map +0 -1
- package/dist/MText-CL-LPcXi.js +0 -45
- package/dist/MText-CL-LPcXi.js.map +0 -1
- package/dist/MText-Dni707tS.cjs +0 -2
- package/dist/MText-Dni707tS.cjs.map +0 -1
- package/dist/MTooltip-ChvuN4Ow.cjs +0 -2
- package/dist/MTooltip-ChvuN4Ow.cjs.map +0 -1
- package/dist/MTooltip-H3we0a7w.js +0 -57
- package/dist/MTooltip-H3we0a7w.js.map +0 -1
- package/dist/MTreeView-B1J7uqd1.js +0 -315
- package/dist/MTreeView-B1J7uqd1.js.map +0 -1
- package/dist/MTreeView-VYp0eErQ.cjs +0 -2
- package/dist/MTreeView-VYp0eErQ.cjs.map +0 -1
- package/dist/calendar-P7MwKfWS.cjs +0 -2
- package/dist/calendar-P7MwKfWS.cjs.map +0 -1
- package/dist/calendar-bzeZRst9.js +0 -193
- package/dist/calendar-bzeZRst9.js.map +0 -1
- package/dist/calendarDates-AnlGcvZM.cjs +0 -2
- package/dist/calendarDates-AnlGcvZM.cjs.map +0 -1
- package/dist/calendarDates-CYkJqcnp.js.map +0 -1
- package/dist/cards-CFDJsdxR.js +0 -1226
- package/dist/cards-CFDJsdxR.js.map +0 -1
- package/dist/cards-DeA7I2KC.cjs +0 -2
- package/dist/cards-DeA7I2KC.cjs.map +0 -1
- package/dist/controls-BKAhqjNM.js +0 -474
- package/dist/controls-BKAhqjNM.js.map +0 -1
- package/dist/controls-KK-TyUTT.cjs +0 -2
- package/dist/controls-KK-TyUTT.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-CgLutFxU.js +0 -689
- package/dist/data-CgLutFxU.js.map +0 -1
- package/dist/data-DFrkJTlF.cjs +0 -2
- package/dist/data-DFrkJTlF.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--E7rI0tk.cjs +0 -3
- package/dist/display--E7rI0tk.cjs.map +0 -1
- package/dist/display-BnkHKW1n.js +0 -782
- package/dist/display-BnkHKW1n.js.map +0 -1
- package/dist/dropdowns-DGYg9zIh.cjs +0 -2
- package/dist/dropdowns-DGYg9zIh.cjs.map +0 -1
- package/dist/dropdowns-Dq-xAplH.js +0 -1698
- package/dist/dropdowns-Dq-xAplH.js.map +0 -1
- package/dist/feedback-CA77ShtB.cjs +0 -2
- package/dist/feedback-CA77ShtB.cjs.map +0 -1
- package/dist/feedback-CCwbdNZu.js +0 -255
- package/dist/feedback-CCwbdNZu.js.map +0 -1
- package/dist/form-CAFcvmUS.js +0 -167
- package/dist/form-CAFcvmUS.js.map +0 -1
- package/dist/form-DpfzLUOn.cjs +0 -2
- package/dist/form-DpfzLUOn.cjs.map +0 -1
- package/dist/frameworkTexts-DH0Xp-Vx.js +0 -78
- package/dist/frameworkTexts-DH0Xp-Vx.js.map +0 -1
- package/dist/frameworkTexts-iDXhcW6k.cjs +0 -2
- package/dist/frameworkTexts-iDXhcW6k.cjs.map +0 -1
- package/dist/icons-CBMl-kOM.js.map +0 -1
- package/dist/icons-D_NB67he.cjs +0 -2
- package/dist/icons-D_NB67he.cjs.map +0 -1
- package/dist/inputs-B1LCddA4.js +0 -1752
- package/dist/inputs-B1LCddA4.js.map +0 -1
- package/dist/inputs-Clenc4Rm.cjs +0 -2
- package/dist/inputs-Clenc4Rm.cjs.map +0 -1
- package/dist/layout-CNoZdeXw.cjs +0 -2
- package/dist/layout-CNoZdeXw.cjs.map +0 -1
- package/dist/layout-DsE4zfpg.js +0 -882
- package/dist/layout-DsE4zfpg.js.map +0 -1
- package/dist/licensing-DGIdtfNg.cjs +0 -2
- package/dist/licensing-DGIdtfNg.cjs.map +0 -1
- package/dist/licensing-f5KYVz7D.js.map +0 -1
- package/dist/media-DRTBXDnn.cjs +0 -2
- package/dist/media-DRTBXDnn.cjs.map +0 -1
- package/dist/media-vOQOIYFD.js +0 -402
- package/dist/media-vOQOIYFD.js.map +0 -1
- package/dist/overlays-BKk_ZXue.js +0 -568
- package/dist/overlays-BKk_ZXue.js.map +0 -1
- package/dist/overlays-Qbp4d596.cjs +0 -2
- package/dist/overlays-Qbp4d596.cjs.map +0 -1
- package/dist/theme-DAOU1aPs.js.map +0 -1
- package/dist/theme-DgaM4CjM.cjs +0 -2
- package/dist/theme-DgaM4CjM.cjs.map +0 -1
- package/dist/useGhostText-DG0bzcao.js +0 -68
- package/dist/useGhostText-DG0bzcao.js.map +0 -1
- package/dist/useGhostText-Dlemg1vw.cjs +0 -2
- package/dist/useGhostText-Dlemg1vw.cjs.map +0 -1
- package/dist/useKeyboardNav-Bm-dxVq-.cjs +0 -2
- package/dist/useKeyboardNav-Bm-dxVq-.cjs.map +0 -1
- package/dist/useKeyboardNav-iEXOdEMB.js +0 -43
- package/dist/useKeyboardNav-iEXOdEMB.js.map +0 -1
- package/dist/validators-B6yWdsu2.cjs +0 -2
- package/dist/validators-B6yWdsu2.cjs.map +0 -1
- package/dist/validators-DVYOtFnw.js.map +0 -1
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const e=require(`./icons-D_NB67he.cjs`),t=require(`./cn-CU5TNITO.cjs`),n=require(`./useKeyboardNav-Bm-dxVq-.cjs`),r=require(`./MPortal-DUSIuINN.cjs`),i=require(`./MPopover-C-e1CoV0.cjs`),a=require(`./MSurface-QYEygc_0.cjs`),o=require(`./MText-Dni707tS.cjs`),s=require(`./MHeading-KDSpnCof.cjs`),c=require(`./MKbd-DqMnZ7Iv.cjs`),l=require(`./MButton-sTKnano6.cjs`),u=require(`./MSkeleton-BoFpowFU.cjs`),d=require(`./MStack-B3Ldqsc-.cjs`),f=require(`./MSimpleGrid-BzlIitcJ.cjs`),p=require(`./MCard-DK-_FkpE.cjs`),m=require(`./MInputSearch-BZDnbFB4.cjs`),h=require(`./MTooltip-ChvuN4Ow.cjs`);require(`./core-D66c1_Wo.cjs`);let g=require(`react`),_=require(`react/jsx-runtime`);var v=540;function y({open:e,onClose:n,title:i,description:a,footer:o,size:s=`md`,closeOnBackdrop:c=!0,closeOnEscape:l=!0,className:u,children:d,...f}){let[m,h]=(0,g.useState)(!1),[y,b]=(0,g.useState)(!1),x=(0,g.useRef)(null);return(0,g.useEffect)(()=>{e&&(h(!0),b(!1))},[e]),(0,g.useEffect)(()=>{if(!e&&m){b(!0);let e=setTimeout(()=>{h(!1),b(!1)},v);return()=>clearTimeout(e)}},[e,m]),(0,g.useEffect)(()=>{if(!e||!l)return;let t=e=>{e.key===`Escape`&&n()};return document.addEventListener(`keydown`,t),()=>document.removeEventListener(`keydown`,t)},[l,n,e]),(0,g.useEffect)(()=>{if(!m)return;let e=document.body.style.overflow;return document.body.style.overflow=`hidden`,()=>{document.body.style.overflow=e}},[m]),m?(0,_.jsx)(r.t,{children:(0,_.jsx)(`div`,{ref:x,className:t.t(`mineral-backdrop`,`modal-backdrop`,y&&`closing`),onMouseDown:e=>{c&&e.target===e.currentTarget&&n()},children:(0,_.jsx)(`div`,{className:`modal-shell`,children:(0,_.jsxs)(p.t,{className:t.t(`modal`,s,u),role:`dialog`,"aria-modal":`true`,"aria-labelledby":i?`mineral-modal-title`:void 0,...f,children:[(i||a)&&(0,_.jsxs)(p.i,{children:[i&&(0,_.jsx)(`div`,{id:`mineral-modal-title`,className:`modal-title`,children:i}),a&&(0,_.jsx)(`div`,{className:`modal-description`,children:a})]}),(0,_.jsx)(p.n,{children:d}),o&&(0,_.jsx)(p.r,{children:o})]})})})}):null}var b=540,x=72,S={sm:`32vh`,md:`52vh`,lg:`72vh`,full:`92vh`};function C({open:n,onClose:i,title:a,description:o,footer:s,size:c=`md`,closeOnBackdrop:u=!0,closeOnEscape:d=!0,className:f,children:m,style:h,...v}){let y=(0,g.useId)(),[C,w]=(0,g.useState)(!1),[T,E]=(0,g.useState)(!1),[D,O]=(0,g.useState)(0),k=(0,g.useRef)(null),A=(0,g.useRef)(0);(0,g.useEffect)(()=>{n&&(w(!0),E(!1),O(0),A.current=0)},[n]),(0,g.useEffect)(()=>{if(!n&&C){E(!0);let e=window.setTimeout(()=>{w(!1),E(!1)},b);return()=>window.clearTimeout(e)}},[n,C]),(0,g.useEffect)(()=>{if(!C)return;let e=document.body.style.overflow;return document.body.style.overflow=`hidden`,()=>{document.body.style.overflow=e}},[C]),(0,g.useEffect)(()=>{if(!n||!d)return;let e=e=>{e.key===`Escape`&&i()};return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[d,i,n]);function j(e){u&&e.target===e.currentTarget&&i()}function M(e){e.preventDefault(),e.currentTarget.setPointerCapture(e.pointerId),k.current={pointerId:e.pointerId,startY:e.clientY},O(0),A.current=0}function N(e){let t=k.current;if(!t||t.pointerId!==e.pointerId)return;let n=Math.max(e.clientY-t.startY,0);A.current=n,O(n)}function P(e){let t=k.current;if(!(!t||t.pointerId!==e)){if(k.current=null,A.current>x){O(0),A.current=0,i();return}O(0),A.current=0}}if(!C)return null;let F=S[c],I=D>0?`translateY(${D}px)`:void 0;return(0,_.jsx)(r.t,{children:(0,_.jsx)(`div`,{className:t.t(`mineral-backdrop`,`sheet-backdrop`,T&&`closing`),onMouseDown:j,children:(0,_.jsx)(`div`,{className:`sheet-shell`,style:{transform:I},children:(0,_.jsxs)(p.t,{className:t.t(`sheet`,`size-${c}`,f),role:`dialog`,"aria-modal":`true`,"aria-labelledby":a?y:void 0,style:{...h,height:c===`full`?F:void 0,maxHeight:F},...v,children:[(0,_.jsx)(`button`,{type:`button`,className:`sheet-grabber`,onPointerDown:M,onPointerMove:N,onPointerUp:e=>P(e.pointerId),onPointerCancel:e=>P(e.pointerId),"aria-label":`Drag down to close`,children:(0,_.jsx)(`span`,{className:`sheet-handle`})}),(a||o)&&(0,_.jsxs)(p.i,{className:`sheet-header`,children:[(0,_.jsxs)(`div`,{className:`sheet-copy`,children:[a&&(0,_.jsx)(`div`,{id:y,className:`sheet-title`,children:a}),o&&(0,_.jsx)(`div`,{className:`sheet-description`,children:o})]}),(0,_.jsx)(l.t,{variant:`link`,color:`neutral`,iconOnly:!0,size:`sm`,onClick:i,"aria-label":`Close`,className:`sheet-close`,children:(0,_.jsx)(e.Xi,{})})]}),(0,_.jsx)(p.n,{className:`sheet-body`,children:m}),s&&(0,_.jsx)(p.r,{className:`sheet-footer`,children:s})]})})})})}function w(e){return typeof e==`string`||typeof e==`number`?e.toString():``}function T(e,t){let n=t.toLowerCase().replace(/\s+/g,``).split(`+`),r=n[n.length-1];if(!r)return!1;let i=n.includes(`ctrl`),a=n.includes(`meta`)||n.includes(`cmd`),o=n.includes(`shift`),s=n.includes(`alt`)||n.includes(`option`);return e.key.toLowerCase()===r&&!!i===e.ctrlKey&&!!a===e.metaKey&&!!o===e.shiftKey&&!!s===e.altKey}function E(e,t){if(!t.trim())return e;let n=t.trim().toLowerCase();return e.filter(e=>[w(e.title),w(e.description),w(e.group),w(e.actionLabel),...e.keywords??[]].some(e=>e.toLowerCase().includes(n)))}function D(e){let t=new Map;return e.forEach(e=>{let n=w(e.group)||`General`,r=t.get(n)??{label:e.group??`General`,items:[]};r.items.push(e),t.set(n,r)}),Array.from(t.values())}function O({items:r,featuredItems:i=[],open:v,defaultOpen:y=!1,onOpenChange:b,onSelect:x,title:S=`Command palette`,description:O,trigger:k,shortcut:A=`ctrl+k`,placeholder:j=`Search modules, records and actions...`,emptyLabel:M=`No matching results.`,footer:N,size:P=`lg`,closeOnSelect:F=!0}){let[I,L]=(0,g.useState)(y),[R,z]=(0,g.useState)(``),[B,V]=(0,g.useState)(null),H=v!==void 0,U=H?v:I,W=(0,g.useRef)(null);function G(e){H||L(e),b?.(e)}let K=(0,g.useMemo)(()=>E(r,R),[r,R]),q=(0,g.useMemo)(()=>D(K),[K]),J=(0,g.useMemo)(()=>q.flatMap(e=>e.items),[q]),Y=(0,g.useMemo)(()=>i.length?i:r.slice(0,6),[i,r]);function X(e){e.onSelect?.(),x?.(e),!e.onSelect&&e.href&&window.location.assign(e.href),F&&(G(!1),z(``),V(null))}let{activeIndex:Z,setActiveIndex:Q,resetIndex:$,onKeyDown:ee}=n.t({itemCount:J.length,isOpen:U,onClose:()=>G(!1),onSelect:e=>{let t=J[e];t&&X(t)}});(0,g.useEffect)(()=>{let e=e=>{T(e,A)&&(e.preventDefault(),G(!0))};return window.addEventListener(`keydown`,e),()=>{window.removeEventListener(`keydown`,e)}},[A]),(0,g.useEffect)(()=>{if(!U){$(),V(null);return}queueMicrotask(()=>W.current?.focus())},[U,$]),(0,g.useEffect)(()=>{if(Z<0||Z>=J.length){V(null);return}V(J[Z]?.id??null)},[Z,J]);function te(e){ee(e)}return(0,_.jsxs)(_.Fragment,{children:[k??(0,_.jsx)(l.t,{variant:`filled`,size:`sm`,color:`primary`,iconOnly:!0,startIcon:(0,_.jsx)(e.Zi,{}),"aria-label":typeof S==`string`?S:`Open command palette`,onClick:()=>G(!0)}),(0,_.jsx)(C,{open:U,onClose:()=>G(!1),title:S,description:O,size:P,footer:N,children:(0,_.jsxs)(`div`,{className:`command-palette-body`,children:[(0,_.jsx)(`div`,{className:`command-palette-search`,children:(0,_.jsx)(m.t,{ref:W,value:R,onChange:e=>{z(e.target.value),Q(-1)},onKeyDown:te,placeholder:j,clearable:!0,fullWidth:!0})}),(0,_.jsxs)(`div`,{className:`command-palette-grid`,children:[(0,_.jsxs)(p.t,{stretch:!1,children:[(0,_.jsxs)(p.i,{children:[(0,_.jsx)(s.t,{level:4,children:`Featured`}),(0,_.jsx)(o.t,{size:`sm`,tone:`muted`,children:`Quick launch for the most frequent dashboard actions.`})]}),(0,_.jsx)(p.n,{children:(0,_.jsx)(f.t,{columns:4,children:Y.map(t=>{let n=t.actionLabel??t.title,r=typeof n==`string`?n:w(n);return(0,_.jsx)(h.t,{content:n,children:(0,_.jsx)(l.t,{variant:`ghost`,color:`primary`,component:t.component,to:t.to,href:t.href,target:t.target,rel:t.rel,startIcon:t.icon??(0,_.jsx)(e.On,{}),iconOnly:!0,"aria-label":r||void 0,onClick:()=>X(t)})},t.id)})})})]}),(0,_.jsxs)(p.t,{stretch:!1,children:[(0,_.jsxs)(p.i,{children:[(0,_.jsx)(s.t,{level:4,children:`Results`}),(0,_.jsxs)(a.n,{align:`center`,padding:`xs`,children:[(0,_.jsxs)(o.t,{size:`sm`,tone:`muted`,children:[J.length,` ready`]}),(0,_.jsx)(c.t,{children:A.toUpperCase()})]})]}),(0,_.jsx)(p.n,{children:q.length?(0,_.jsx)(d.t,{padding:`xs`,className:`command-palette-results`,children:q.map(n=>(0,_.jsxs)(d.t,{padding:`xs`,children:[(0,_.jsx)(o.t,{size:`sm`,tone:`muted`,children:n.label}),n.items.map(n=>(0,_.jsxs)(`button`,{type:`button`,className:t.t(`command-palette-item`,B===n.id&&`active`),onMouseEnter:()=>V(n.id),onClick:()=>X(n),children:[(0,_.jsx)(`span`,{className:`command-palette-item-icon`,children:n.icon??(0,_.jsx)(e.On,{})}),(0,_.jsxs)(`span`,{className:`command-palette-item-copy`,children:[(0,_.jsx)(`span`,{className:`command-palette-item-title`,children:n.title}),n.description&&(0,_.jsx)(`span`,{className:`command-palette-item-description`,children:n.description})]}),n.badge&&(0,_.jsx)(`span`,{className:`command-palette-item-badge`,children:(0,_.jsx)(u.n,{color:`primary`,size:`sm`,children:n.badge})})]},n.id))]},w(n.label)||`general`))}):(0,_.jsx)(o.t,{tone:`muted`,children:M})})]})]})]})})]})}var k=600;function A(e){return(0,g.isValidElement)(e)&&!!e.type.__drawerHeader}function j(e){return(0,g.isValidElement)(e)&&!!e.type.__drawerBody}function M(e){return(0,g.isValidElement)(e)&&!!e.type.__drawerFooter}function N({children:e}){return(0,_.jsx)(_.Fragment,{children:e})}N.__drawerHeader=!0;function P({children:e}){return(0,_.jsx)(_.Fragment,{children:e})}P.__drawerBody=!0;function F({children:e}){return(0,_.jsx)(_.Fragment,{children:e})}F.__drawerFooter=!0;function I({open:n,onClose:i,side:a=`right`,size:o=`md`,overlay:s=!0,closeOnBackdrop:c=!0,closeOnEscape:u=!0,className:d,children:f,...p}){let[m,h]=(0,g.useState)(!1),[v,y]=(0,g.useState)(!1),b=(0,g.useRef)(null);if((0,g.useEffect)(()=>{n&&(h(!0),y(!1))},[n]),(0,g.useEffect)(()=>{if(!n&&m){y(!0);let e=setTimeout(()=>{h(!1),y(!1)},k);return()=>clearTimeout(e)}},[n,m]),(0,g.useEffect)(()=>{if(!n||!u)return;let e=e=>{e.key===`Escape`&&i()};return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[n,u,i]),(0,g.useEffect)(()=>{if(!m)return;let e=document.body.style.overflow;return document.body.style.overflow=`hidden`,()=>{document.body.style.overflow=e}},[m]),!m)return null;let x=e=>{c&&e.target===e.currentTarget&&i()},S=null,C=null,w=null,T=null,E=null,D=[];g.Children.forEach(f,e=>{if(A(e)){S=e.props.children,C=e.props;return}if(j(e)){w=e.props,D.push(e.props.children);return}if(M(e)){T=e.props.children,E=e.props;return}D.push(e)});let O=C??{children:void 0},N=w??{children:void 0},P=E??{children:void 0},{children:F,className:I,bordered:L=!1,...R}=O,{children:z,className:B,...V}=N,{children:H,className:U,bordered:W=!1,...G}=P;return(0,_.jsx)(r.t,{children:(0,_.jsx)(`div`,{ref:b,className:t.t(`mineral-backdrop`,`drawer-backdrop`,!s&&`no-overlay`,v&&`closing`),onMouseDown:x,children:(0,_.jsxs)(`div`,{className:t.t(`drawer`,a,o,d),role:`dialog`,"aria-modal":`true`,...p,children:[S&&(0,_.jsxs)(`div`,{...R,className:t.t(`drawer-header`,L&&`bordered`,I),children:[(0,_.jsx)(`div`,{className:`drawer-title`,children:S}),(0,_.jsx)(l.t,{variant:`link`,color:`neutral`,iconOnly:!0,size:`sm`,onClick:i,"aria-label":`Close`,className:`close`,children:(0,_.jsx)(e.Xi,{})})]}),(0,_.jsx)(`div`,{...V,className:t.t(`drawer-body`,B),children:D}),T&&(0,_.jsx)(`div`,{...G,className:t.t(`drawer-footer`,W&&`bordered`,U),children:T})]})})})}function L({title:e,description:n,onConfirm:r,onCancel:a,confirmText:o=`Yes`,cancelText:s=`No`,color:c=`warning`,icon:u,placement:d=`top-start`,open:f,onOpenChange:p,anchorRef:m,className:h}){let v=(0,g.useCallback)(()=>{p(!1),a?.()},[p,a]),y=(0,g.useCallback)(()=>{p(!1),r()},[p,r]);return(0,_.jsxs)(i.t,{open:f,anchorRef:m,onClose:v,placement:d,className:t.t(`popconfirm`,`color-${c}`,h),children:[(0,_.jsxs)(`div`,{className:`body`,children:[u&&(0,_.jsx)(`div`,{className:`icon`,children:u}),(0,_.jsxs)(`div`,{className:`content`,children:[(0,_.jsx)(`div`,{className:`title`,children:e}),n&&(0,_.jsx)(`div`,{className:`description`,children:n})]})]}),(0,_.jsxs)(`div`,{className:`actions`,children:[(0,_.jsx)(l.t,{variant:`ghost`,size:`sm`,color:`neutral`,onClick:v,children:s}),(0,_.jsx)(l.t,{variant:`ghost`,size:`sm`,color:c,onClick:y,children:o})]})]})}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return N}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return I}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return P}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return C}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return L}});
|
|
2
|
-
//# sourceMappingURL=overlays-Qbp4d596.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"overlays-Qbp4d596.cjs","names":[],"sources":["../src/components/overlays/MModal/MModal.tsx","../src/components/overlays/MSheet/MSheet.tsx","../src/components/overlays/MCommandPalette/MCommandPalette.tsx","../src/components/overlays/MDrawer/MDrawer.tsx","../src/components/overlays/MPopconfirm/MPopconfirm.tsx"],"sourcesContent":["import {useEffect, useState, useCallback, useRef} from 'react'\nimport type {MouseEvent} from 'react'\nimport type {MModalProps} from './MModal.types'\nimport {MCard, MCardBody, MCardFooter, MCardHeader} from '../../cards'\nimport {MPortal} from '../../primitives'\nimport {cn} from '../../../utils/cn'\nimport './MModal.css'\n\nconst EXIT_DURATION = 540\n\n// Render blocking overlay content for dense details and mobile-friendly dialogs.\nexport function MModal({\n open,\n onClose,\n title,\n description,\n footer,\n size = 'md',\n closeOnBackdrop = true,\n closeOnEscape = true,\n className,\n children,\n ...rest\n}: MModalProps) {\n const [mounted, setMounted] = useState(false)\n const [closing, setClosing] = useState(false)\n const backdropRef = useRef<HTMLDivElement>(null)\n\n // Open → mount immediately\n useEffect(() => {\n if (open) {\n setMounted(true)\n setClosing(false)\n }\n }, [open])\n\n // Close → animate out, then unmount\n useEffect(() => {\n if (!open && mounted) {\n setClosing(true)\n const timer = setTimeout(() => {\n setMounted(false)\n setClosing(false)\n }, EXIT_DURATION)\n return () => clearTimeout(timer)\n }\n }, [open, mounted])\n\n useEffect(() => {\n if (!open || !closeOnEscape) return\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') onClose()\n }\n\n document.addEventListener('keydown', handleKeyDown)\n return () => document.removeEventListener('keydown', handleKeyDown)\n }, [closeOnEscape, onClose, open])\n\n useEffect(() => {\n if (!mounted) return\n\n const previousOverflow = document.body.style.overflow\n document.body.style.overflow = 'hidden'\n\n return () => {\n document.body.style.overflow = previousOverflow\n }\n }, [mounted])\n\n if (!mounted) return null\n\n const handleBackdropClick = (event: MouseEvent<HTMLDivElement>) => {\n if (!closeOnBackdrop) return\n if (event.target === event.currentTarget) onClose()\n }\n\n return (\n <MPortal>\n <div\n ref={backdropRef}\n className={cn('mineral-backdrop', 'modal-backdrop', closing && 'closing')}\n onMouseDown={handleBackdropClick}\n >\n <div className={'modal-shell'}>\n <MCard\n className={cn('modal', size, className)}\n role={'dialog'}\n aria-modal={'true'}\n aria-labelledby={title ? 'mineral-modal-title' : undefined}\n {...rest}\n >\n {(title || description) && (\n <MCardHeader>\n {title && (\n <div id={'mineral-modal-title'} className={'modal-title'}>\n {title}\n </div>\n )}\n {description && <div className={'modal-description'}>{description}</div>}\n </MCardHeader>\n )}\n <MCardBody>{children}</MCardBody>\n {footer && <MCardFooter>{footer}</MCardFooter>}\n </MCard>\n </div>\n </div>\n </MPortal>\n )\n}\n","import {useEffect, useId, useRef, useState} from 'react'\nimport type {PointerEvent as ReactPointerEvent, MouseEvent} from 'react'\nimport type {MSheetProps, MSheetSize} from './MSheet.types'\nimport {MCard, MCardBody, MCardFooter, MCardHeader} from '../../cards'\nimport {MButton} from '../../controls'\nimport {MPortal} from '../../primitives'\nimport {MCloseIcon} from '../../../icons'\nimport {cn} from '../../../utils/cn'\nimport './MSheet.css'\n\nconst EXIT_DURATION = 540\nconst CLOSE_DRAG_THRESHOLD = 72\n\nconst SHEET_HEIGHTS: Record<MSheetSize, string> = {\n sm: '32vh',\n md: '52vh',\n lg: '72vh',\n full: '92vh',\n}\n\nexport function MSheet({\n open,\n onClose,\n title,\n description,\n footer,\n size = 'md',\n closeOnBackdrop = true,\n closeOnEscape = true,\n className,\n children,\n style,\n ...rest\n}: MSheetProps) {\n const titleId = useId()\n const [mounted, setMounted] = useState(false)\n const [closing, setClosing] = useState(false)\n const [dragOffset, setDragOffset] = useState(0)\n\n const dragStateRef = useRef<{pointerId: number; startY: number} | null>(null)\n const dragOffsetRef = useRef(0)\n\n useEffect(() => {\n if (open) {\n setMounted(true)\n setClosing(false)\n setDragOffset(0)\n dragOffsetRef.current = 0\n }\n }, [open])\n\n useEffect(() => {\n if (!open && mounted) {\n setClosing(true)\n const timer = window.setTimeout(() => {\n setMounted(false)\n setClosing(false)\n }, EXIT_DURATION)\n return () => window.clearTimeout(timer)\n }\n }, [open, mounted])\n\n useEffect(() => {\n if (!mounted) return\n\n const previousOverflow = document.body.style.overflow\n document.body.style.overflow = 'hidden'\n\n return () => {\n document.body.style.overflow = previousOverflow\n }\n }, [mounted])\n\n useEffect(() => {\n if (!open || !closeOnEscape) return\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') onClose()\n }\n\n document.addEventListener('keydown', handleKeyDown)\n return () => document.removeEventListener('keydown', handleKeyDown)\n }, [closeOnEscape, onClose, open])\n\n function handleBackdropClick(event: MouseEvent<HTMLDivElement>) {\n if (closeOnBackdrop && event.target === event.currentTarget) {\n onClose()\n }\n }\n\n function handleHandlePointerDown(event: ReactPointerEvent<HTMLButtonElement>) {\n event.preventDefault()\n event.currentTarget.setPointerCapture(event.pointerId)\n\n dragStateRef.current = {\n pointerId: event.pointerId,\n startY: event.clientY,\n }\n setDragOffset(0)\n dragOffsetRef.current = 0\n }\n\n function handleHandlePointerMove(event: ReactPointerEvent<HTMLButtonElement>) {\n const dragState = dragStateRef.current\n if (!dragState || dragState.pointerId !== event.pointerId) {\n return\n }\n\n const nextOffset = Math.max(event.clientY - dragState.startY, 0)\n dragOffsetRef.current = nextOffset\n setDragOffset(nextOffset)\n }\n\n function finishDrag(pointerId: number) {\n const dragState = dragStateRef.current\n if (!dragState || dragState.pointerId !== pointerId) {\n return\n }\n\n dragStateRef.current = null\n\n if (dragOffsetRef.current > CLOSE_DRAG_THRESHOLD) {\n setDragOffset(0)\n dragOffsetRef.current = 0\n onClose()\n return\n }\n\n setDragOffset(0)\n dragOffsetRef.current = 0\n }\n\n if (!mounted) return null\n\n const resolvedHeight = SHEET_HEIGHTS[size]\n const transformStyle = dragOffset > 0 ? `translateY(${dragOffset}px)` : undefined\n\n return (\n <MPortal>\n <div\n className={cn('mineral-backdrop', 'sheet-backdrop', closing && 'closing')}\n onMouseDown={handleBackdropClick}\n >\n <div className=\"sheet-shell\" style={{transform: transformStyle}}>\n <MCard\n className={cn('sheet', `size-${size}`, className)}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? titleId : undefined}\n style={{\n ...style,\n height: size === 'full' ? resolvedHeight : undefined,\n maxHeight: resolvedHeight,\n }}\n {...rest}\n >\n <button\n type=\"button\"\n className=\"sheet-grabber\"\n onPointerDown={handleHandlePointerDown}\n onPointerMove={handleHandlePointerMove}\n onPointerUp={(event) => finishDrag(event.pointerId)}\n onPointerCancel={(event) => finishDrag(event.pointerId)}\n aria-label=\"Drag down to close\"\n >\n <span className=\"sheet-handle\" />\n </button>\n\n {(title || description) && (\n <MCardHeader className=\"sheet-header\">\n <div className=\"sheet-copy\">\n {title && (\n <div id={titleId} className=\"sheet-title\">\n {title}\n </div>\n )}\n {description && <div className=\"sheet-description\">{description}</div>}\n </div>\n <MButton\n variant=\"link\"\n color=\"neutral\"\n iconOnly\n size=\"sm\"\n onClick={onClose}\n aria-label=\"Close\"\n className=\"sheet-close\"\n >\n <MCloseIcon />\n </MButton>\n </MCardHeader>\n )}\n\n <MCardBody className=\"sheet-body\">{children}</MCardBody>\n\n {footer && <MCardFooter className=\"sheet-footer\">{footer}</MCardFooter>}\n </MCard>\n </div>\n </div>\n </MPortal>\n )\n}\n","import {useEffect, useMemo, useRef, useState} from 'react'\nimport type {KeyboardEvent as ReactKeyboardEvent, ReactNode} from 'react'\nimport type {MCommandPaletteItem, MCommandPaletteProps} from './MCommandPalette.types'\nimport {MButton} from '../../controls'\nimport {MInputSearch} from '../../inputs'\nimport {MCard, MCardBody, MCardHeader} from '../../cards'\nimport {MInline, MSimpleGrid, MStack} from '../../layout'\nimport {MSheet} from '../MSheet'\nimport {MTooltip} from '../MTooltip'\nimport {MBadge} from '../../feedback'\nimport {MLinkIcon, MSearchIcon} from '../../../icons'\nimport {MKbd, MHeading, MText} from '../../typography'\nimport {cn} from '../../../utils/cn'\nimport {useKeyboardNav} from '../../../utils/useKeyboardNav'\nimport './MCommandPalette.css'\n\nfunction normalizeText(value: ReactNode) {\n if (typeof value === 'string' || typeof value === 'number') {\n return value.toString()\n }\n\n return ''\n}\n\nfunction matchesShortcut(event: KeyboardEvent, shortcut: string) {\n const normalized = shortcut.toLowerCase().replace(/\\s+/g, '')\n const parts = normalized.split('+')\n const key = parts[parts.length - 1]\n\n if (!key) {\n return false\n }\n\n const expectsCtrl = parts.includes('ctrl')\n const expectsMeta = parts.includes('meta') || parts.includes('cmd')\n const expectsShift = parts.includes('shift')\n const expectsAlt = parts.includes('alt') || parts.includes('option')\n\n return (\n event.key.toLowerCase() === key &&\n !!expectsCtrl === event.ctrlKey &&\n !!expectsMeta === event.metaKey &&\n !!expectsShift === event.shiftKey &&\n !!expectsAlt === event.altKey\n )\n}\n\nfunction filterItems(items: MCommandPaletteItem[], query: string) {\n if (!query.trim()) {\n return items\n }\n\n const normalizedQuery = query.trim().toLowerCase()\n\n return items.filter((item) =>\n [\n normalizeText(item.title),\n normalizeText(item.description),\n normalizeText(item.group),\n normalizeText(item.actionLabel),\n ...(item.keywords ?? []),\n ].some((value) => value.toLowerCase().includes(normalizedQuery))\n )\n}\n\nfunction groupItems(items: MCommandPaletteItem[]) {\n const groups = new Map<string, {label: ReactNode; items: MCommandPaletteItem[]}>()\n\n items.forEach((item) => {\n const key = normalizeText(item.group) || 'General'\n const current = groups.get(key) ?? {label: item.group ?? 'General', items: []}\n current.items.push(item)\n groups.set(key, current)\n })\n\n return Array.from(groups.values())\n}\n\nexport function MCommandPalette({\n items,\n featuredItems = [],\n open,\n defaultOpen = false,\n onOpenChange,\n onSelect,\n title = 'Command palette',\n description,\n trigger,\n shortcut = 'ctrl+k',\n placeholder = 'Search modules, records and actions...',\n emptyLabel = 'No matching results.',\n footer,\n size = 'lg',\n closeOnSelect = true,\n}: MCommandPaletteProps) {\n const [internalOpen, setInternalOpen] = useState(defaultOpen)\n const [query, setQuery] = useState('')\n const [activeItemId, setActiveItemId] = useState<string | null>(null)\n const isControlled = open !== undefined\n const isOpen = isControlled ? open : internalOpen\n const inputRef = useRef<HTMLInputElement>(null)\n\n function setOpenState(nextOpen: boolean) {\n if (!isControlled) {\n setInternalOpen(nextOpen)\n }\n\n onOpenChange?.(nextOpen)\n }\n\n const filteredItems = useMemo(() => filterItems(items, query), [items, query])\n const groupedItems = useMemo(() => groupItems(filteredItems), [filteredItems])\n const flattenedItems = useMemo(() => groupedItems.flatMap((group) => group.items), [groupedItems])\n const featured = useMemo(() => (featuredItems.length ? featuredItems : items.slice(0, 6)), [featuredItems, items])\n\n function executeItem(item: MCommandPaletteItem) {\n item.onSelect?.()\n onSelect?.(item)\n\n if (!item.onSelect && item.href) {\n window.location.assign(item.href)\n }\n\n if (closeOnSelect) {\n setOpenState(false)\n setQuery('')\n setActiveItemId(null)\n }\n }\n\n const {activeIndex, setActiveIndex, resetIndex, onKeyDown} = useKeyboardNav({\n itemCount: flattenedItems.length,\n isOpen,\n onClose: () => setOpenState(false),\n onSelect: (index) => {\n const item = flattenedItems[index]\n\n if (item) {\n executeItem(item)\n }\n },\n })\n\n useEffect(() => {\n const handleKeydown = (event: KeyboardEvent) => {\n if (matchesShortcut(event, shortcut)) {\n event.preventDefault()\n setOpenState(true)\n }\n }\n\n window.addEventListener('keydown', handleKeydown)\n\n return () => {\n window.removeEventListener('keydown', handleKeydown)\n }\n }, [shortcut])\n\n useEffect(() => {\n if (!isOpen) {\n resetIndex()\n setActiveItemId(null)\n return\n }\n\n queueMicrotask(() => inputRef.current?.focus())\n }, [isOpen, resetIndex])\n\n useEffect(() => {\n if (activeIndex < 0 || activeIndex >= flattenedItems.length) {\n setActiveItemId(null)\n return\n }\n\n setActiveItemId(flattenedItems[activeIndex]?.id ?? null)\n }, [activeIndex, flattenedItems])\n\n function handleSearchKeyDown(event: ReactKeyboardEvent<HTMLInputElement>) {\n onKeyDown(event)\n }\n\n return (\n <>\n {trigger ?? (\n <MButton\n variant={'filled'}\n size={'sm'}\n color={'primary'}\n iconOnly\n startIcon={<MSearchIcon />}\n aria-label={typeof title === 'string' ? title : 'Open command palette'}\n onClick={() => setOpenState(true)}\n />\n )}\n\n <MSheet\n open={isOpen}\n onClose={() => setOpenState(false)}\n title={title}\n description={description}\n size={size}\n footer={footer}\n >\n <div className=\"command-palette-body\">\n <div className=\"command-palette-search\">\n <MInputSearch\n ref={inputRef}\n value={query}\n onChange={(event) => {\n setQuery(event.target.value)\n setActiveIndex(-1)\n }}\n onKeyDown={handleSearchKeyDown}\n placeholder={placeholder}\n clearable\n fullWidth\n />\n </div>\n\n <div className=\"command-palette-grid\">\n <MCard stretch={false}>\n <MCardHeader>\n <MHeading level={4}>Featured</MHeading>\n <MText size={'sm'} tone={'muted'}>\n Quick launch for the most frequent dashboard actions.\n </MText>\n </MCardHeader>\n <MCardBody>\n <MSimpleGrid columns={4}>\n {featured.map((item) => {\n const label = item.actionLabel ?? item.title\n const ariaLabel = typeof label === 'string' ? label : normalizeText(label)\n\n return (\n <MTooltip key={item.id} content={label}>\n <MButton\n variant={'ghost'}\n color={'primary'}\n component={item.component}\n to={item.to}\n href={item.href}\n target={item.target}\n rel={item.rel}\n startIcon={item.icon ?? <MLinkIcon />}\n iconOnly\n aria-label={ariaLabel || undefined}\n onClick={() => executeItem(item)}\n />\n </MTooltip>\n )\n })}\n </MSimpleGrid>\n </MCardBody>\n </MCard>\n\n <MCard stretch={false}>\n <MCardHeader>\n <MHeading level={4}>Results</MHeading>\n <MInline align={'center'} padding={'xs'}>\n <MText size={'sm'} tone={'muted'}>\n {flattenedItems.length} ready\n </MText>\n <MKbd>{shortcut.toUpperCase()}</MKbd>\n </MInline>\n </MCardHeader>\n <MCardBody>\n {groupedItems.length ? (\n <MStack padding={'xs'} className=\"command-palette-results\">\n {groupedItems.map((group) => (\n <MStack key={normalizeText(group.label) || 'general'} padding={'xs'}>\n <MText size={'sm'} tone={'muted'}>\n {group.label}\n </MText>\n {group.items.map((item) => (\n <button\n key={item.id}\n type=\"button\"\n className={cn(\n 'command-palette-item',\n activeItemId === item.id && 'active'\n )}\n onMouseEnter={() => setActiveItemId(item.id)}\n onClick={() => executeItem(item)}\n >\n <span className=\"command-palette-item-icon\">\n {item.icon ?? <MLinkIcon />}\n </span>\n <span className=\"command-palette-item-copy\">\n <span className=\"command-palette-item-title\">\n {item.title}\n </span>\n {item.description && (\n <span className=\"command-palette-item-description\">\n {item.description}\n </span>\n )}\n </span>\n {item.badge && (\n <span className=\"command-palette-item-badge\">\n <MBadge color={'primary'} size={'sm'}>\n {item.badge}\n </MBadge>\n </span>\n )}\n </button>\n ))}\n </MStack>\n ))}\n </MStack>\n ) : (\n <MText tone={'muted'}>{emptyLabel}</MText>\n )}\n </MCardBody>\n </MCard>\n </div>\n </div>\n </MSheet>\n </>\n )\n}\n","import {Children, isValidElement, useEffect, useState, useRef} from 'react'\nimport type {MouseEvent, ReactElement, ReactNode} from 'react'\nimport type {MDrawerProps, MDrawerSectionProps} from './MDrawer.types'\nimport {MPortal} from '../../primitives'\nimport {MButton} from '../../controls'\nimport {MCloseIcon} from '../../../icons'\nimport {cn} from '../../../utils/cn'\nimport './MDrawer.css'\n\nconst EXIT_DURATION = 600\n\ntype DrawerSlotElement = ReactElement<MDrawerSectionProps>\n\nfunction isDrawerHeader(child: ReactNode): child is DrawerSlotElement {\n return isValidElement(child) && !!(child.type as any).__drawerHeader\n}\n\nfunction isDrawerBody(child: ReactNode): child is DrawerSlotElement {\n return isValidElement(child) && !!(child.type as any).__drawerBody\n}\n\nfunction isDrawerFooter(child: ReactNode): child is DrawerSlotElement {\n return isValidElement(child) && !!(child.type as any).__drawerFooter\n}\n\nexport function MDrawerHeader({children}: MDrawerSectionProps) {\n return <>{children}</>\n}\n;(MDrawerHeader as any).__drawerHeader = true\n\nexport function MDrawerBody({children}: MDrawerSectionProps) {\n return <>{children}</>\n}\n;(MDrawerBody as any).__drawerBody = true\n\nexport function MDrawerFooter({children}: MDrawerSectionProps) {\n return <>{children}</>\n}\n;(MDrawerFooter as any).__drawerFooter = true\n\nexport function MDrawer({\n open,\n onClose,\n side = 'right',\n size = 'md',\n overlay = true,\n closeOnBackdrop = true,\n closeOnEscape = true,\n className,\n children,\n ...rest\n}: MDrawerProps) {\n const [mounted, setMounted] = useState(false)\n const [closing, setClosing] = useState(false)\n const backdropRef = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (open) {\n setMounted(true)\n setClosing(false)\n }\n }, [open])\n\n useEffect(() => {\n if (!open && mounted) {\n setClosing(true)\n const timer = setTimeout(() => {\n setMounted(false)\n setClosing(false)\n }, EXIT_DURATION)\n return () => clearTimeout(timer)\n }\n }, [open, mounted])\n\n useEffect(() => {\n if (!open || !closeOnEscape) return\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose()\n }\n\n document.addEventListener('keydown', handleKeyDown)\n return () => document.removeEventListener('keydown', handleKeyDown)\n }, [open, closeOnEscape, onClose])\n\n useEffect(() => {\n if (!mounted) return\n\n const prev = document.body.style.overflow\n document.body.style.overflow = 'hidden'\n return () => {\n document.body.style.overflow = prev\n }\n }, [mounted])\n\n if (!mounted) return null\n\n const handleBackdropClick = (e: MouseEvent<HTMLDivElement>) => {\n if (closeOnBackdrop && e.target === e.currentTarget) onClose()\n }\n\n let header: ReactNode = null\n let headerProps: MDrawerSectionProps | null = null\n let bodyProps: MDrawerSectionProps | null = null\n let footer: ReactNode = null\n let footerProps: MDrawerSectionProps | null = null\n const body: ReactNode[] = []\n\n Children.forEach(children, (child) => {\n if (isDrawerHeader(child)) {\n header = child.props.children\n headerProps = child.props\n return\n }\n\n if (isDrawerBody(child)) {\n bodyProps = child.props\n body.push(child.props.children)\n return\n }\n\n if (isDrawerFooter(child)) {\n footer = child.props.children\n footerProps = child.props\n return\n }\n\n body.push(child)\n })\n\n const headerSection = headerProps ?? ({children: undefined} as MDrawerSectionProps)\n const bodySection = bodyProps ?? ({children: undefined} as MDrawerSectionProps)\n const footerSection = footerProps ?? ({children: undefined} as MDrawerSectionProps)\n const {\n children: _headerChildren,\n className: headerClassName,\n bordered: headerBordered = false,\n ...headerRest\n } = headerSection\n const {children: _bodyChildren, className: bodyClassName, ...bodyRest} = bodySection\n const {\n children: _footerChildren,\n className: footerClassName,\n bordered: footerBordered = false,\n ...footerRest\n } = footerSection\n\n return (\n <MPortal>\n <div\n ref={backdropRef}\n className={cn('mineral-backdrop', 'drawer-backdrop', !overlay && 'no-overlay', closing && 'closing')}\n onMouseDown={handleBackdropClick}\n >\n <div className={cn('drawer', side, size, className)} role=\"dialog\" aria-modal=\"true\" {...rest}>\n {header && (\n <div\n {...headerRest}\n className={cn('drawer-header', headerBordered && 'bordered', headerClassName)}\n >\n <div className=\"drawer-title\">{header}</div>\n <MButton\n variant=\"link\"\n color=\"neutral\"\n iconOnly\n size=\"sm\"\n onClick={onClose}\n aria-label=\"Close\"\n className=\"close\"\n >\n <MCloseIcon />\n </MButton>\n </div>\n )}\n <div {...bodyRest} className={cn('drawer-body', bodyClassName)}>\n {body}\n </div>\n {footer && (\n <div\n {...footerRest}\n className={cn('drawer-footer', footerBordered && 'bordered', footerClassName)}\n >\n {footer}\n </div>\n )}\n </div>\n </div>\n </MPortal>\n )\n}\n","import {useCallback} from 'react'\nimport type {MPopconfirmProps} from './MPopconfirm.types'\nimport {MPopover} from '../../primitives'\nimport {MButton} from '../../controls'\nimport {cn} from '../../../utils/cn'\nimport './MPopconfirm.css'\n\nexport function MPopconfirm({\n title,\n description,\n onConfirm,\n onCancel,\n confirmText = 'Yes',\n cancelText = 'No',\n color = 'warning',\n icon,\n placement = 'top-start',\n open,\n onOpenChange,\n anchorRef,\n className,\n}: MPopconfirmProps) {\n const handleCancel = useCallback(() => {\n onOpenChange(false)\n onCancel?.()\n }, [onOpenChange, onCancel])\n\n const handleConfirm = useCallback(() => {\n onOpenChange(false)\n onConfirm()\n }, [onOpenChange, onConfirm])\n\n return (\n <MPopover\n open={open}\n anchorRef={anchorRef}\n onClose={handleCancel}\n placement={placement}\n className={cn('popconfirm', `color-${color}`, className)}\n >\n <div className=\"body\">\n {icon && <div className=\"icon\">{icon}</div>}\n <div className=\"content\">\n <div className=\"title\">{title}</div>\n {description && <div className=\"description\">{description}</div>}\n </div>\n </div>\n <div className=\"actions\">\n <MButton variant=\"ghost\" size=\"sm\" color=\"neutral\" onClick={handleCancel}>\n {cancelText}\n </MButton>\n <MButton variant=\"ghost\" size=\"sm\" color={color} onClick={handleConfirm}>\n {confirmText}\n </MButton>\n </div>\n </MPopover>\n )\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"theme-DAOU1aPs.js","names":[],"sources":["../src/theme/MThemeProvider.tsx","../src/theme/responsive.ts"],"sourcesContent":["import {createContext, useCallback, useContext, useEffect, useMemo, useRef, useState, type ReactNode} from 'react'\nimport type {MTheme, MMode, MModePreference} from './MTheme.types'\n\nconst STORAGE_KEY = 'mineralui-theme'\n\n// Resolve the final mode once 'system' is allowed.\nfunction resolveMode(pref: MModePreference): MMode {\n if (pref !== 'system') return pref\n if (typeof window === 'undefined') return 'dark'\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'\n}\n\n// Read a persisted mode safely when storage is available.\nfunction readStored(): MModePreference | null {\n try {\n const v = localStorage.getItem(STORAGE_KEY)\n if (v === 'dark' || v === 'light' || v === 'system') return v\n } catch {\n /* SSR / blocked storage */\n }\n return null\n}\n\nexport interface MThemeContextValue {\n theme: MTheme\n mode: MModePreference\n resolvedMode: MMode\n setMode: (next: MModePreference) => void\n toggleMode: () => void\n}\n\nconst ThemeContext = createContext<MThemeContextValue>({\n theme: {},\n mode: 'dark',\n resolvedMode: 'dark',\n setMode: () => {},\n toggleMode: () => {},\n})\n\n// Map JS theme keys to CSS custom properties.\nconst varMap: Record<keyof MTheme, string> = {\n primaryRgb: '--mineral-primary-rgb',\n primary: '--mineral-primary',\n primaryDark: '--mineral-primary-dark',\n primaryLight: '--mineral-primary-light',\n neutralRgb: '--mineral-neutral-rgb',\n neutral: '--mineral-neutral',\n dark: '--mineral-dark',\n darkLight: '--mineral-dark-light',\n surface: '--mineral-surface',\n surfaceContrast: '--mineral-surface-contrast',\n pageBg: '--mineral-page-bg',\n pageText: '--mineral-page-text',\n text: '--mineral-text',\n textSecondary: '--mineral-text-secondary',\n textHeading: '--mineral-text-heading',\n border: '--mineral-border',\n borderHover: '--mineral-border-hover',\n borderFocus: '--mineral-border-focus',\n successRgb: '--mineral-success-rgb',\n success: '--mineral-success',\n errorRgb: '--mineral-error-rgb',\n error: '--mineral-error',\n warningRgb: '--mineral-warning-rgb',\n warning: '--mineral-warning',\n infoRgb: '--mineral-info-rgb',\n info: '--mineral-info',\n fontFamily: '--mineral-font-family-sans',\n fontFamilySans: '--mineral-font-family-sans',\n fontFamilyMono: '--mineral-font-family-mono',\n fontFamilyHeading: '--mineral-font-family-heading',\n fontColorDefault: '--mineral-fcolor-default',\n fontColorMuted: '--mineral-fcolor-muted',\n fontColorHeading: '--mineral-fcolor-heading',\n fontColorInverted: '--mineral-fcolor-inverted',\n fontColorPrimary: '--mineral-fcolor-primary',\n fontColorNeutral: '--mineral-fcolor-neutral',\n fontColorSuccess: '--mineral-fcolor-success',\n fontColorError: '--mineral-fcolor-error',\n fontColorWarning: '--mineral-fcolor-warning',\n fontColorInfo: '--mineral-fcolor-info',\n radiusSm: '--mineral-radius-sm',\n radiusMd: '--mineral-radius-md',\n radiusLg: '--mineral-radius-lg',\n}\n\nexport type MThemeScope = 'body' | 'wrapper'\n\nexport interface MThemeProviderProps {\n theme?: MTheme\n mode?: MModePreference\n persist?: boolean\n scope?: MThemeScope\n children: ReactNode\n}\n\n// Sync theme tokens and mode classes with either the body or a local wrapper.\nexport function MThemeProvider({\n theme,\n mode: modeProp = 'dark',\n persist = true,\n scope = 'body',\n children,\n}: MThemeProviderProps) {\n const ref = useRef<HTMLDivElement>(null)\n const safeTheme = useMemo(() => theme ?? {}, [theme])\n\n const [mode, setModeState] = useState<MModePreference>(() => {\n if (persist) {\n const stored = readStored()\n if (stored) return stored\n }\n return modeProp\n })\n\n const resolved = resolveMode(mode)\n\n const setMode = useCallback(\n (next: MModePreference) => {\n setModeState(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 toggleMode = useCallback(() => {\n setMode(resolved === 'dark' ? 'light' : 'dark')\n }, [resolved, setMode])\n\n // Listen for system theme changes when mode is 'system'.\n useEffect(() => {\n if (mode !== 'system') return\n const mq = window.matchMedia('(prefers-color-scheme: dark)')\n const handler = () => setModeState('system')\n mq.addEventListener('change', handler)\n return () => mq.removeEventListener('change', handler)\n }, [mode])\n\n // Apply token overrides and light/dark class.\n useEffect(() => {\n const target = scope === 'body' ? document.body : ref.current\n if (!target) return\n\n for (const [key, value] of Object.entries(safeTheme)) {\n const cssVar = varMap[key as keyof MTheme]\n if (cssVar && value) {\n target.style.setProperty(cssVar, value)\n if (cssVar === '--mineral-font-family-sans') {\n target.style.setProperty('--mineral-font-family', value)\n }\n }\n }\n\n target.classList.toggle('theme-light', resolved === 'light')\n\n return () => {\n for (const key of Object.keys(safeTheme)) {\n const cssVar = varMap[key as keyof MTheme]\n if (cssVar) {\n target.style.removeProperty(cssVar)\n if (cssVar === '--mineral-font-family-sans') {\n target.style.removeProperty('--mineral-font-family')\n }\n }\n }\n target.classList.remove('theme-light')\n }\n }, [resolved, safeTheme, scope])\n\n const ctx = useMemo<MThemeContextValue>(\n () => ({\n theme: safeTheme,\n mode,\n resolvedMode: resolved,\n setMode,\n toggleMode,\n }),\n [safeTheme, mode, resolved, setMode, toggleMode]\n )\n\n return (\n <ThemeContext.Provider value={ctx}>\n {scope === 'wrapper' ? (\n <div ref={ref} className={resolved === 'light' ? 'theme-light' : undefined}>\n {children}\n </div>\n ) : (\n children\n )}\n </ThemeContext.Provider>\n )\n}\n\nexport function useMTheme(): MThemeContextValue {\n return useContext(ThemeContext)\n}\n","import {useEffect, useState} from 'react'\nimport type {MHiddenProps} from './MTheme.types'\n\nexport const MBreakpoints = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n '2xl': 1536,\n} as const\n\nexport const MShellBreakpoints = {\n mobile: 768,\n compact: 1024,\n} as const\n\nexport function useMaxWidth(breakpoint: number): boolean {\n const [matches, setMatches] = useState(() =>\n typeof window !== 'undefined' ? window.innerWidth <= breakpoint : false\n )\n\n useEffect(() => {\n if (typeof window === 'undefined') {\n return\n }\n\n const media = window.matchMedia(`(max-width: ${breakpoint}px)`)\n const sync = () => setMatches(media.matches)\n\n sync()\n\n if (typeof media.addEventListener === 'function') {\n media.addEventListener('change', sync)\n return () => media.removeEventListener('change', sync)\n }\n\n media.addListener(sync)\n return () => media.removeListener(sync)\n }, [breakpoint])\n\n return matches\n}\n\nexport function getHiddenProps(\n hidden?: MHiddenProps['hidden'],\n hiddenAbove?: MHiddenProps['hiddenAbove']\n) {\n const result: Record<string, unknown> = {}\n if (hidden === true) {\n result.hidden = true\n } else if (hidden !== undefined && hidden !== false) {\n result['data-m-hidden'] = hidden\n }\n if (hiddenAbove) {\n result['data-m-hidden-above'] = hiddenAbove\n }\n return result\n}\n"],"mappings":"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"}
|
package/dist/theme-DgaM4CjM.cjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
require(`./core-D66c1_Wo.cjs`);let e=require(`react`),t=require(`react/jsx-runtime`);var n=`mineralui-theme`;function r(e){return e===`system`?typeof window>`u`||window.matchMedia(`(prefers-color-scheme: dark)`).matches?`dark`:`light`:e}function i(){try{let e=localStorage.getItem(n);if(e===`dark`||e===`light`||e===`system`)return e}catch{}return null}var a=(0,e.createContext)({theme:{},mode:`dark`,resolvedMode:`dark`,setMode:()=>{},toggleMode:()=>{}}),o={primaryRgb:`--mineral-primary-rgb`,primary:`--mineral-primary`,primaryDark:`--mineral-primary-dark`,primaryLight:`--mineral-primary-light`,neutralRgb:`--mineral-neutral-rgb`,neutral:`--mineral-neutral`,dark:`--mineral-dark`,darkLight:`--mineral-dark-light`,surface:`--mineral-surface`,surfaceContrast:`--mineral-surface-contrast`,pageBg:`--mineral-page-bg`,pageText:`--mineral-page-text`,text:`--mineral-text`,textSecondary:`--mineral-text-secondary`,textHeading:`--mineral-text-heading`,border:`--mineral-border`,borderHover:`--mineral-border-hover`,borderFocus:`--mineral-border-focus`,successRgb:`--mineral-success-rgb`,success:`--mineral-success`,errorRgb:`--mineral-error-rgb`,error:`--mineral-error`,warningRgb:`--mineral-warning-rgb`,warning:`--mineral-warning`,infoRgb:`--mineral-info-rgb`,info:`--mineral-info`,fontFamily:`--mineral-font-family-sans`,fontFamilySans:`--mineral-font-family-sans`,fontFamilyMono:`--mineral-font-family-mono`,fontFamilyHeading:`--mineral-font-family-heading`,fontColorDefault:`--mineral-fcolor-default`,fontColorMuted:`--mineral-fcolor-muted`,fontColorHeading:`--mineral-fcolor-heading`,fontColorInverted:`--mineral-fcolor-inverted`,fontColorPrimary:`--mineral-fcolor-primary`,fontColorNeutral:`--mineral-fcolor-neutral`,fontColorSuccess:`--mineral-fcolor-success`,fontColorError:`--mineral-fcolor-error`,fontColorWarning:`--mineral-fcolor-warning`,fontColorInfo:`--mineral-fcolor-info`,radiusSm:`--mineral-radius-sm`,radiusMd:`--mineral-radius-md`,radiusLg:`--mineral-radius-lg`};function s({theme:s,mode:c=`dark`,persist:l=!0,scope:u=`body`,children:d}){let f=(0,e.useRef)(null),p=(0,e.useMemo)(()=>s??{},[s]),[m,h]=(0,e.useState)(()=>{if(l){let e=i();if(e)return e}return c}),g=r(m),_=(0,e.useCallback)(e=>{if(h(e),l)try{localStorage.setItem(n,e)}catch{}},[l]),v=(0,e.useCallback)(()=>{_(g===`dark`?`light`:`dark`)},[g,_]);(0,e.useEffect)(()=>{if(m!==`system`)return;let e=window.matchMedia(`(prefers-color-scheme: dark)`),t=()=>h(`system`);return e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)},[m]),(0,e.useEffect)(()=>{let e=u===`body`?document.body:f.current;if(e){for(let[t,n]of Object.entries(p)){let r=o[t];r&&n&&(e.style.setProperty(r,n),r===`--mineral-font-family-sans`&&e.style.setProperty(`--mineral-font-family`,n))}return e.classList.toggle(`theme-light`,g===`light`),()=>{for(let t of Object.keys(p)){let n=o[t];n&&(e.style.removeProperty(n),n===`--mineral-font-family-sans`&&e.style.removeProperty(`--mineral-font-family`))}e.classList.remove(`theme-light`)}}},[g,p,u]);let y=(0,e.useMemo)(()=>({theme:p,mode:m,resolvedMode:g,setMode:_,toggleMode:v}),[p,m,g,_,v]);return(0,t.jsx)(a.Provider,{value:y,children:u===`wrapper`?(0,t.jsx)(`div`,{ref:f,className:g===`light`?`theme-light`:void 0,children:d}):d})}function c(){return(0,e.useContext)(a)}var l={sm:640,md:768,lg:1024,xl:1280,"2xl":1536},u={mobile:768,compact:1024};function d(t){let[n,r]=(0,e.useState)(()=>typeof window<`u`?window.innerWidth<=t:!1);return(0,e.useEffect)(()=>{if(typeof window>`u`)return;let e=window.matchMedia(`(max-width: ${t}px)`),n=()=>r(e.matches);return n(),typeof e.addEventListener==`function`?(e.addEventListener(`change`,n),()=>e.removeEventListener(`change`,n)):(e.addListener(n),()=>e.removeListener(n))},[t]),n}function f(e,t){let n={};return e===!0?n.hidden=!0:e!==void 0&&e!==!1&&(n[`data-m-hidden`]=e),t&&(n[`data-m-hidden-above`]=t),n}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return l}});
|
|
2
|
-
//# sourceMappingURL=theme-DgaM4CjM.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"theme-DgaM4CjM.cjs","names":[],"sources":["../src/theme/MThemeProvider.tsx","../src/theme/responsive.ts"],"sourcesContent":["import {createContext, useCallback, useContext, useEffect, useMemo, useRef, useState, type ReactNode} from 'react'\nimport type {MTheme, MMode, MModePreference} from './MTheme.types'\n\nconst STORAGE_KEY = 'mineralui-theme'\n\n// Resolve the final mode once 'system' is allowed.\nfunction resolveMode(pref: MModePreference): MMode {\n if (pref !== 'system') return pref\n if (typeof window === 'undefined') return 'dark'\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'\n}\n\n// Read a persisted mode safely when storage is available.\nfunction readStored(): MModePreference | null {\n try {\n const v = localStorage.getItem(STORAGE_KEY)\n if (v === 'dark' || v === 'light' || v === 'system') return v\n } catch {\n /* SSR / blocked storage */\n }\n return null\n}\n\nexport interface MThemeContextValue {\n theme: MTheme\n mode: MModePreference\n resolvedMode: MMode\n setMode: (next: MModePreference) => void\n toggleMode: () => void\n}\n\nconst ThemeContext = createContext<MThemeContextValue>({\n theme: {},\n mode: 'dark',\n resolvedMode: 'dark',\n setMode: () => {},\n toggleMode: () => {},\n})\n\n// Map JS theme keys to CSS custom properties.\nconst varMap: Record<keyof MTheme, string> = {\n primaryRgb: '--mineral-primary-rgb',\n primary: '--mineral-primary',\n primaryDark: '--mineral-primary-dark',\n primaryLight: '--mineral-primary-light',\n neutralRgb: '--mineral-neutral-rgb',\n neutral: '--mineral-neutral',\n dark: '--mineral-dark',\n darkLight: '--mineral-dark-light',\n surface: '--mineral-surface',\n surfaceContrast: '--mineral-surface-contrast',\n pageBg: '--mineral-page-bg',\n pageText: '--mineral-page-text',\n text: '--mineral-text',\n textSecondary: '--mineral-text-secondary',\n textHeading: '--mineral-text-heading',\n border: '--mineral-border',\n borderHover: '--mineral-border-hover',\n borderFocus: '--mineral-border-focus',\n successRgb: '--mineral-success-rgb',\n success: '--mineral-success',\n errorRgb: '--mineral-error-rgb',\n error: '--mineral-error',\n warningRgb: '--mineral-warning-rgb',\n warning: '--mineral-warning',\n infoRgb: '--mineral-info-rgb',\n info: '--mineral-info',\n fontFamily: '--mineral-font-family-sans',\n fontFamilySans: '--mineral-font-family-sans',\n fontFamilyMono: '--mineral-font-family-mono',\n fontFamilyHeading: '--mineral-font-family-heading',\n fontColorDefault: '--mineral-fcolor-default',\n fontColorMuted: '--mineral-fcolor-muted',\n fontColorHeading: '--mineral-fcolor-heading',\n fontColorInverted: '--mineral-fcolor-inverted',\n fontColorPrimary: '--mineral-fcolor-primary',\n fontColorNeutral: '--mineral-fcolor-neutral',\n fontColorSuccess: '--mineral-fcolor-success',\n fontColorError: '--mineral-fcolor-error',\n fontColorWarning: '--mineral-fcolor-warning',\n fontColorInfo: '--mineral-fcolor-info',\n radiusSm: '--mineral-radius-sm',\n radiusMd: '--mineral-radius-md',\n radiusLg: '--mineral-radius-lg',\n}\n\nexport type MThemeScope = 'body' | 'wrapper'\n\nexport interface MThemeProviderProps {\n theme?: MTheme\n mode?: MModePreference\n persist?: boolean\n scope?: MThemeScope\n children: ReactNode\n}\n\n// Sync theme tokens and mode classes with either the body or a local wrapper.\nexport function MThemeProvider({\n theme,\n mode: modeProp = 'dark',\n persist = true,\n scope = 'body',\n children,\n}: MThemeProviderProps) {\n const ref = useRef<HTMLDivElement>(null)\n const safeTheme = useMemo(() => theme ?? {}, [theme])\n\n const [mode, setModeState] = useState<MModePreference>(() => {\n if (persist) {\n const stored = readStored()\n if (stored) return stored\n }\n return modeProp\n })\n\n const resolved = resolveMode(mode)\n\n const setMode = useCallback(\n (next: MModePreference) => {\n setModeState(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 toggleMode = useCallback(() => {\n setMode(resolved === 'dark' ? 'light' : 'dark')\n }, [resolved, setMode])\n\n // Listen for system theme changes when mode is 'system'.\n useEffect(() => {\n if (mode !== 'system') return\n const mq = window.matchMedia('(prefers-color-scheme: dark)')\n const handler = () => setModeState('system')\n mq.addEventListener('change', handler)\n return () => mq.removeEventListener('change', handler)\n }, [mode])\n\n // Apply token overrides and light/dark class.\n useEffect(() => {\n const target = scope === 'body' ? document.body : ref.current\n if (!target) return\n\n for (const [key, value] of Object.entries(safeTheme)) {\n const cssVar = varMap[key as keyof MTheme]\n if (cssVar && value) {\n target.style.setProperty(cssVar, value)\n if (cssVar === '--mineral-font-family-sans') {\n target.style.setProperty('--mineral-font-family', value)\n }\n }\n }\n\n target.classList.toggle('theme-light', resolved === 'light')\n\n return () => {\n for (const key of Object.keys(safeTheme)) {\n const cssVar = varMap[key as keyof MTheme]\n if (cssVar) {\n target.style.removeProperty(cssVar)\n if (cssVar === '--mineral-font-family-sans') {\n target.style.removeProperty('--mineral-font-family')\n }\n }\n }\n target.classList.remove('theme-light')\n }\n }, [resolved, safeTheme, scope])\n\n const ctx = useMemo<MThemeContextValue>(\n () => ({\n theme: safeTheme,\n mode,\n resolvedMode: resolved,\n setMode,\n toggleMode,\n }),\n [safeTheme, mode, resolved, setMode, toggleMode]\n )\n\n return (\n <ThemeContext.Provider value={ctx}>\n {scope === 'wrapper' ? (\n <div ref={ref} className={resolved === 'light' ? 'theme-light' : undefined}>\n {children}\n </div>\n ) : (\n children\n )}\n </ThemeContext.Provider>\n )\n}\n\nexport function useMTheme(): MThemeContextValue {\n return useContext(ThemeContext)\n}\n","import {useEffect, useState} from 'react'\nimport type {MHiddenProps} from './MTheme.types'\n\nexport const MBreakpoints = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n '2xl': 1536,\n} as const\n\nexport const MShellBreakpoints = {\n mobile: 768,\n compact: 1024,\n} as const\n\nexport function useMaxWidth(breakpoint: number): boolean {\n const [matches, setMatches] = useState(() =>\n typeof window !== 'undefined' ? window.innerWidth <= breakpoint : false\n )\n\n useEffect(() => {\n if (typeof window === 'undefined') {\n return\n }\n\n const media = window.matchMedia(`(max-width: ${breakpoint}px)`)\n const sync = () => setMatches(media.matches)\n\n sync()\n\n if (typeof media.addEventListener === 'function') {\n media.addEventListener('change', sync)\n return () => media.removeEventListener('change', sync)\n }\n\n media.addListener(sync)\n return () => media.removeListener(sync)\n }, [breakpoint])\n\n return matches\n}\n\nexport function getHiddenProps(\n hidden?: MHiddenProps['hidden'],\n hiddenAbove?: MHiddenProps['hiddenAbove']\n) {\n const result: Record<string, unknown> = {}\n if (hidden === true) {\n result.hidden = true\n } else if (hidden !== undefined && hidden !== false) {\n result['data-m-hidden'] = hidden\n }\n if (hiddenAbove) {\n result['data-m-hidden-above'] = hiddenAbove\n }\n return result\n}\n"],"mappings":"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"}
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
import { useCallback as e, useEffect as t, useMemo as n, useRef as r, useState as i } from "react";
|
|
2
|
-
//#region src/utils/useDebounce.ts
|
|
3
|
-
function a(e, n) {
|
|
4
|
-
let [r, a] = i(e);
|
|
5
|
-
return t(() => {
|
|
6
|
-
let t = setTimeout(() => a(e), n);
|
|
7
|
-
return () => clearTimeout(t);
|
|
8
|
-
}, [e, n]), r;
|
|
9
|
-
}
|
|
10
|
-
function o(t, n) {
|
|
11
|
-
let i = r(t);
|
|
12
|
-
i.current = t;
|
|
13
|
-
let a = r(null);
|
|
14
|
-
return e(((...e) => {
|
|
15
|
-
a.current && clearTimeout(a.current), a.current = setTimeout(() => i.current(...e), n);
|
|
16
|
-
}), [n]);
|
|
17
|
-
}
|
|
18
|
-
//#endregion
|
|
19
|
-
//#region src/utils/useGhostText.ts
|
|
20
|
-
function s(e) {
|
|
21
|
-
return typeof e == "string" ? e : String(e);
|
|
22
|
-
}
|
|
23
|
-
function c(e, t, n) {
|
|
24
|
-
if (!t) return [];
|
|
25
|
-
let r = t.toLowerCase();
|
|
26
|
-
return e.filter((e) => n(e).toLowerCase().startsWith(r));
|
|
27
|
-
}
|
|
28
|
-
function l({ options: t, value: r, minChars: a = 2, getLabel: o = s, filter: l }) {
|
|
29
|
-
let [u, d] = i(0), f = n(() => r.length < a ? [] : l ? l(t, r) : c(t, r, o), [
|
|
30
|
-
t,
|
|
31
|
-
r,
|
|
32
|
-
a,
|
|
33
|
-
l,
|
|
34
|
-
o
|
|
35
|
-
]), p = f.length > 0 ? f[u % f.length] : null, m = p ? o(p) : "", h = m && m.toLowerCase().startsWith(r.toLowerCase()) ? m.slice(r.length) : "", g = e(() => !h || !p ? {
|
|
36
|
-
value: r,
|
|
37
|
-
option: null
|
|
38
|
-
} : {
|
|
39
|
-
value: r + h,
|
|
40
|
-
option: p
|
|
41
|
-
}, [
|
|
42
|
-
h,
|
|
43
|
-
p,
|
|
44
|
-
r
|
|
45
|
-
]), _ = e(() => {
|
|
46
|
-
f.length > 1 && d((e) => (e + 1) % f.length);
|
|
47
|
-
}, [f.length]), v = e(() => {
|
|
48
|
-
f.length > 1 && d((e) => (e - 1 + f.length) % f.length);
|
|
49
|
-
}, [f.length]), y = e(() => d(0), []), b = e((e) => (e.key === "Tab" || e.key === "Enter") && h ? (e.preventDefault(), !0) : e.key === "ArrowDown" && f.length > 1 ? (e.preventDefault(), _(), !1) : e.key === "ArrowUp" && f.length > 1 ? (e.preventDefault(), v(), !1) : !1, [
|
|
50
|
-
h,
|
|
51
|
-
f.length,
|
|
52
|
-
_,
|
|
53
|
-
v
|
|
54
|
-
]);
|
|
55
|
-
return {
|
|
56
|
-
hint: h,
|
|
57
|
-
accept: g,
|
|
58
|
-
next: _,
|
|
59
|
-
prev: v,
|
|
60
|
-
reset: y,
|
|
61
|
-
matchCount: f.length,
|
|
62
|
-
onKeyDown: b
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
//#endregion
|
|
66
|
-
export { a as n, o as r, l as t };
|
|
67
|
-
|
|
68
|
-
//# sourceMappingURL=useGhostText-DG0bzcao.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useGhostText-DG0bzcao.js","names":[],"sources":["../src/utils/useDebounce.ts","../src/utils/useGhostText.ts"],"sourcesContent":["import {useState, useEffect, useRef, useCallback} from 'react'\n\n// Expose a value only after it stays stable for the given delay.\nexport function useDebounce<T>(value: T, delay: number): T {\n const [debounced, setDebounced] = useState(value)\n\n useEffect(() => {\n const timer = setTimeout(() => setDebounced(value), delay)\n return () => clearTimeout(timer)\n }, [value, delay])\n\n return debounced\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\n// Wrap a callback so repeated calls collapse into the latest invocation.\nexport function useDebouncedCallback<T extends (...args: any[]) => void>(callback: T, delay: number): T {\n const callbackRef = useRef(callback)\n callbackRef.current = callback\n const timerRef = useRef<ReturnType<typeof setTimeout>>(null)\n\n return useCallback(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ((...args: any[]) => {\n if (timerRef.current) clearTimeout(timerRef.current)\n timerRef.current = setTimeout(() => callbackRef.current(...args), delay)\n }) as T,\n [delay]\n )\n}\n","import {useState, useCallback, useMemo} from 'react'\nimport type * as React from 'react'\n\nexport interface GhostTextOptions<T = string> {\n options: T[]\n value: string\n minChars?: number\n getLabel?: (option: T) => string\n filter?: (options: T[], input: string) => T[]\n}\n\nexport interface GhostTextReturn<T = string> {\n /** The ghost suffix to render after the typed text. */\n hint: string\n /** Accept the current hint and return the full value. */\n accept: () => {value: string; option: T | null}\n /** Cycle to the next matching option. */\n next: () => void\n /** Cycle to the previous matching option. */\n prev: () => void\n /** Reset the hint index (call on value change). */\n reset: () => void\n /** Number of matching options. */\n matchCount: number\n /** Handle keyboard events — Tab/Enter accept, arrows cycle, Escape resets. */\n onKeyDown: (e: React.KeyboardEvent) => boolean\n}\n\nfunction defaultGetLabel<T>(option: T): string {\n return typeof option === 'string' ? option : String(option)\n}\n\nfunction defaultFilter<T>(options: T[], input: string, getLabel: (o: T) => string): T[] {\n if (!input) return []\n const lower = input.toLowerCase()\n return options.filter((o) => getLabel(o).toLowerCase().startsWith(lower))\n}\n\n// Manage inline ghost-text suggestions for any text input.\nexport function useGhostText<T = string>({\n options,\n value,\n minChars = 2,\n getLabel = defaultGetLabel,\n filter,\n}: GhostTextOptions<T>): GhostTextReturn<T> {\n const [hintIndex, setHintIndex] = useState(0)\n\n const filtered = useMemo(() => {\n if (value.length < minChars) return []\n if (filter) return filter(options, value)\n return defaultFilter(options, value, getLabel)\n }, [options, value, minChars, filter, getLabel])\n\n const current = filtered.length > 0 ? filtered[hintIndex % filtered.length] : null\n const fullLabel = current ? getLabel(current) : ''\n const hint =\n fullLabel && fullLabel.toLowerCase().startsWith(value.toLowerCase()) ? fullLabel.slice(value.length) : ''\n\n const accept = useCallback(() => {\n if (!hint || !current) return {value, option: null}\n return {value: value + hint, option: current}\n }, [hint, current, value])\n\n const next = useCallback(() => {\n if (filtered.length > 1) setHintIndex((i) => (i + 1) % filtered.length)\n }, [filtered.length])\n\n const prev = useCallback(() => {\n if (filtered.length > 1) setHintIndex((i) => (i - 1 + filtered.length) % filtered.length)\n }, [filtered.length])\n\n const reset = useCallback(() => setHintIndex(0), [])\n\n const onKeyDown = useCallback(\n (e: React.KeyboardEvent): boolean => {\n if ((e.key === 'Tab' || e.key === 'Enter') && hint) {\n e.preventDefault()\n return true // signal: caller should accept\n }\n if (e.key === 'ArrowDown' && filtered.length > 1) {\n e.preventDefault()\n next()\n return false\n }\n if (e.key === 'ArrowUp' && filtered.length > 1) {\n e.preventDefault()\n prev()\n return false\n }\n return false\n },\n [hint, filtered.length, next, prev]\n )\n\n return {hint, accept, next, prev, reset, matchCount: filtered.length, onKeyDown}\n}\n"],"mappings":";;AAGA,SAAgB,EAAe,GAAU,GAAkB;CACvD,IAAM,CAAC,GAAW,KAAgB,EAAS,EAAM;AAOjD,QALA,QAAgB;EACZ,IAAM,IAAQ,iBAAiB,EAAa,EAAM,EAAE,EAAM;AAC1D,eAAa,aAAa,EAAM;IACjC,CAAC,GAAO,EAAM,CAAC,EAEX;;AAKX,SAAgB,EAAyD,GAAa,GAAkB;CACpG,IAAM,IAAc,EAAO,EAAS;AACpC,GAAY,UAAU;CACtB,IAAM,IAAW,EAAsC,KAAK;AAE5D,QAAO,IAED,GAAG,MAAgB;AAEjB,EADI,EAAS,WAAS,aAAa,EAAS,QAAQ,EACpD,EAAS,UAAU,iBAAiB,EAAY,QAAQ,GAAG,EAAK,EAAE,EAAM;KAE5E,CAAC,EAAM,CACV;;;;ACAL,SAAS,EAAmB,GAAmB;AAC3C,QAAO,OAAO,KAAW,WAAW,IAAS,OAAO,EAAO;;AAG/D,SAAS,EAAiB,GAAc,GAAe,GAAiC;AACpF,KAAI,CAAC,EAAO,QAAO,EAAE;CACrB,IAAM,IAAQ,EAAM,aAAa;AACjC,QAAO,EAAQ,QAAQ,MAAM,EAAS,EAAE,CAAC,aAAa,CAAC,WAAW,EAAM,CAAC;;AAI7E,SAAgB,EAAyB,EACrC,YACA,UACA,cAAW,GACX,cAAW,GACX,aACwC;CACxC,IAAM,CAAC,GAAW,KAAgB,EAAS,EAAE,EAEvC,IAAW,QACT,EAAM,SAAS,IAAiB,EAAE,GAClC,IAAe,EAAO,GAAS,EAAM,GAClC,EAAc,GAAS,GAAO,EAAS,EAC/C;EAAC;EAAS;EAAO;EAAU;EAAQ;EAAS,CAAC,EAE1C,IAAU,EAAS,SAAS,IAAI,EAAS,IAAY,EAAS,UAAU,MACxE,IAAY,IAAU,EAAS,EAAQ,GAAG,IAC1C,IACF,KAAa,EAAU,aAAa,CAAC,WAAW,EAAM,aAAa,CAAC,GAAG,EAAU,MAAM,EAAM,OAAO,GAAG,IAErG,IAAS,QACP,CAAC,KAAQ,CAAC,IAAgB;EAAC;EAAO,QAAQ;EAAK,GAC5C;EAAC,OAAO,IAAQ;EAAM,QAAQ;EAAQ,EAC9C;EAAC;EAAM;EAAS;EAAM,CAAC,EAEpB,IAAO,QAAkB;AAC3B,EAAI,EAAS,SAAS,KAAG,GAAc,OAAO,IAAI,KAAK,EAAS,OAAO;IACxE,CAAC,EAAS,OAAO,CAAC,EAEf,IAAO,QAAkB;AAC3B,EAAI,EAAS,SAAS,KAAG,GAAc,OAAO,IAAI,IAAI,EAAS,UAAU,EAAS,OAAO;IAC1F,CAAC,EAAS,OAAO,CAAC,EAEf,IAAQ,QAAkB,EAAa,EAAE,EAAE,EAAE,CAAC,EAE9C,IAAY,GACb,OACQ,EAAE,QAAQ,SAAS,EAAE,QAAQ,YAAY,KAC1C,EAAE,gBAAgB,EACX,MAEP,EAAE,QAAQ,eAAe,EAAS,SAAS,KAC3C,EAAE,gBAAgB,EAClB,GAAM,EACC,MAEP,EAAE,QAAQ,aAAa,EAAS,SAAS,KACzC,EAAE,gBAAgB,EAClB,GAAM,EACC,MAEJ,IAEX;EAAC;EAAM,EAAS;EAAQ;EAAM;EAAK,CACtC;AAED,QAAO;EAAC;EAAM;EAAQ;EAAM;EAAM;EAAO,YAAY,EAAS;EAAQ;EAAU"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
require(`./core-D66c1_Wo.cjs`);let e=require(`react`);function t(t,n){let[r,i]=(0,e.useState)(t);return(0,e.useEffect)(()=>{let e=setTimeout(()=>i(t),n);return()=>clearTimeout(e)},[t,n]),r}function n(t,n){let r=(0,e.useRef)(t);r.current=t;let i=(0,e.useRef)(null);return(0,e.useCallback)(((...e)=>{i.current&&clearTimeout(i.current),i.current=setTimeout(()=>r.current(...e),n)}),[n])}function r(e){return typeof e==`string`?e:String(e)}function i(e,t,n){if(!t)return[];let r=t.toLowerCase();return e.filter(e=>n(e).toLowerCase().startsWith(r))}function a({options:t,value:n,minChars:a=2,getLabel:o=r,filter:s}){let[c,l]=(0,e.useState)(0),u=(0,e.useMemo)(()=>n.length<a?[]:s?s(t,n):i(t,n,o),[t,n,a,s,o]),d=u.length>0?u[c%u.length]:null,f=d?o(d):``,p=f&&f.toLowerCase().startsWith(n.toLowerCase())?f.slice(n.length):``,m=(0,e.useCallback)(()=>!p||!d?{value:n,option:null}:{value:n+p,option:d},[p,d,n]),h=(0,e.useCallback)(()=>{u.length>1&&l(e=>(e+1)%u.length)},[u.length]),g=(0,e.useCallback)(()=>{u.length>1&&l(e=>(e-1+u.length)%u.length)},[u.length]),_=(0,e.useCallback)(()=>l(0),[]),v=(0,e.useCallback)(e=>(e.key===`Tab`||e.key===`Enter`)&&p?(e.preventDefault(),!0):e.key===`ArrowDown`&&u.length>1?(e.preventDefault(),h(),!1):e.key===`ArrowUp`&&u.length>1?(e.preventDefault(),g(),!1):!1,[p,u.length,h,g]);return{hint:p,accept:m,next:h,prev:g,reset:_,matchCount:u.length,onKeyDown:v}}Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return t}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return n}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return a}});
|
|
2
|
-
//# sourceMappingURL=useGhostText-Dlemg1vw.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useGhostText-Dlemg1vw.cjs","names":[],"sources":["../src/utils/useDebounce.ts","../src/utils/useGhostText.ts"],"sourcesContent":["import {useState, useEffect, useRef, useCallback} from 'react'\n\n// Expose a value only after it stays stable for the given delay.\nexport function useDebounce<T>(value: T, delay: number): T {\n const [debounced, setDebounced] = useState(value)\n\n useEffect(() => {\n const timer = setTimeout(() => setDebounced(value), delay)\n return () => clearTimeout(timer)\n }, [value, delay])\n\n return debounced\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\n// Wrap a callback so repeated calls collapse into the latest invocation.\nexport function useDebouncedCallback<T extends (...args: any[]) => void>(callback: T, delay: number): T {\n const callbackRef = useRef(callback)\n callbackRef.current = callback\n const timerRef = useRef<ReturnType<typeof setTimeout>>(null)\n\n return useCallback(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ((...args: any[]) => {\n if (timerRef.current) clearTimeout(timerRef.current)\n timerRef.current = setTimeout(() => callbackRef.current(...args), delay)\n }) as T,\n [delay]\n )\n}\n","import {useState, useCallback, useMemo} from 'react'\nimport type * as React from 'react'\n\nexport interface GhostTextOptions<T = string> {\n options: T[]\n value: string\n minChars?: number\n getLabel?: (option: T) => string\n filter?: (options: T[], input: string) => T[]\n}\n\nexport interface GhostTextReturn<T = string> {\n /** The ghost suffix to render after the typed text. */\n hint: string\n /** Accept the current hint and return the full value. */\n accept: () => {value: string; option: T | null}\n /** Cycle to the next matching option. */\n next: () => void\n /** Cycle to the previous matching option. */\n prev: () => void\n /** Reset the hint index (call on value change). */\n reset: () => void\n /** Number of matching options. */\n matchCount: number\n /** Handle keyboard events — Tab/Enter accept, arrows cycle, Escape resets. */\n onKeyDown: (e: React.KeyboardEvent) => boolean\n}\n\nfunction defaultGetLabel<T>(option: T): string {\n return typeof option === 'string' ? option : String(option)\n}\n\nfunction defaultFilter<T>(options: T[], input: string, getLabel: (o: T) => string): T[] {\n if (!input) return []\n const lower = input.toLowerCase()\n return options.filter((o) => getLabel(o).toLowerCase().startsWith(lower))\n}\n\n// Manage inline ghost-text suggestions for any text input.\nexport function useGhostText<T = string>({\n options,\n value,\n minChars = 2,\n getLabel = defaultGetLabel,\n filter,\n}: GhostTextOptions<T>): GhostTextReturn<T> {\n const [hintIndex, setHintIndex] = useState(0)\n\n const filtered = useMemo(() => {\n if (value.length < minChars) return []\n if (filter) return filter(options, value)\n return defaultFilter(options, value, getLabel)\n }, [options, value, minChars, filter, getLabel])\n\n const current = filtered.length > 0 ? filtered[hintIndex % filtered.length] : null\n const fullLabel = current ? getLabel(current) : ''\n const hint =\n fullLabel && fullLabel.toLowerCase().startsWith(value.toLowerCase()) ? fullLabel.slice(value.length) : ''\n\n const accept = useCallback(() => {\n if (!hint || !current) return {value, option: null}\n return {value: value + hint, option: current}\n }, [hint, current, value])\n\n const next = useCallback(() => {\n if (filtered.length > 1) setHintIndex((i) => (i + 1) % filtered.length)\n }, [filtered.length])\n\n const prev = useCallback(() => {\n if (filtered.length > 1) setHintIndex((i) => (i - 1 + filtered.length) % filtered.length)\n }, [filtered.length])\n\n const reset = useCallback(() => setHintIndex(0), [])\n\n const onKeyDown = useCallback(\n (e: React.KeyboardEvent): boolean => {\n if ((e.key === 'Tab' || e.key === 'Enter') && hint) {\n e.preventDefault()\n return true // signal: caller should accept\n }\n if (e.key === 'ArrowDown' && filtered.length > 1) {\n e.preventDefault()\n next()\n return false\n }\n if (e.key === 'ArrowUp' && filtered.length > 1) {\n e.preventDefault()\n prev()\n return false\n }\n return false\n },\n [hint, filtered.length, next, prev]\n )\n\n return {hint, accept, next, prev, reset, matchCount: filtered.length, onKeyDown}\n}\n"],"mappings":"sDAGA,SAAgB,EAAe,EAAU,EAAkB,CACvD,GAAM,CAAC,EAAW,IAAA,EAAA,EAAA,UAAyB,EAAM,CAOjD,OALA,EAAA,EAAA,eAAgB,CACZ,IAAM,EAAQ,eAAiB,EAAa,EAAM,CAAE,EAAM,CAC1D,UAAa,aAAa,EAAM,EACjC,CAAC,EAAO,EAAM,CAAC,CAEX,EAKX,SAAgB,EAAyD,EAAa,EAAkB,CACpG,IAAM,GAAA,EAAA,EAAA,QAAqB,EAAS,CACpC,EAAY,QAAU,EACtB,IAAM,GAAA,EAAA,EAAA,QAAiD,KAAK,CAE5D,OAAA,EAAA,EAAA,eAEM,GAAG,IAAgB,CACb,EAAS,SAAS,aAAa,EAAS,QAAQ,CACpD,EAAS,QAAU,eAAiB,EAAY,QAAQ,GAAG,EAAK,CAAE,EAAM,GAE5E,CAAC,EAAM,CACV,CCAL,SAAS,EAAmB,EAAmB,CAC3C,OAAO,OAAO,GAAW,SAAW,EAAS,OAAO,EAAO,CAG/D,SAAS,EAAiB,EAAc,EAAe,EAAiC,CACpF,GAAI,CAAC,EAAO,MAAO,EAAE,CACrB,IAAM,EAAQ,EAAM,aAAa,CACjC,OAAO,EAAQ,OAAQ,GAAM,EAAS,EAAE,CAAC,aAAa,CAAC,WAAW,EAAM,CAAC,CAI7E,SAAgB,EAAyB,CACrC,UACA,QACA,WAAW,EACX,WAAW,EACX,UACwC,CACxC,GAAM,CAAC,EAAW,IAAA,EAAA,EAAA,UAAyB,EAAE,CAEvC,GAAA,EAAA,EAAA,aACE,EAAM,OAAS,EAAiB,EAAE,CAClC,EAAe,EAAO,EAAS,EAAM,CAClC,EAAc,EAAS,EAAO,EAAS,CAC/C,CAAC,EAAS,EAAO,EAAU,EAAQ,EAAS,CAAC,CAE1C,EAAU,EAAS,OAAS,EAAI,EAAS,EAAY,EAAS,QAAU,KACxE,EAAY,EAAU,EAAS,EAAQ,CAAG,GAC1C,EACF,GAAa,EAAU,aAAa,CAAC,WAAW,EAAM,aAAa,CAAC,CAAG,EAAU,MAAM,EAAM,OAAO,CAAG,GAErG,GAAA,EAAA,EAAA,iBACE,CAAC,GAAQ,CAAC,EAAgB,CAAC,QAAO,OAAQ,KAAK,CAC5C,CAAC,MAAO,EAAQ,EAAM,OAAQ,EAAQ,CAC9C,CAAC,EAAM,EAAS,EAAM,CAAC,CAEpB,GAAA,EAAA,EAAA,iBAAyB,CACvB,EAAS,OAAS,GAAG,EAAc,IAAO,EAAI,GAAK,EAAS,OAAO,EACxE,CAAC,EAAS,OAAO,CAAC,CAEf,GAAA,EAAA,EAAA,iBAAyB,CACvB,EAAS,OAAS,GAAG,EAAc,IAAO,EAAI,EAAI,EAAS,QAAU,EAAS,OAAO,EAC1F,CAAC,EAAS,OAAO,CAAC,CAEf,GAAA,EAAA,EAAA,iBAA0B,EAAa,EAAE,CAAE,EAAE,CAAC,CAE9C,GAAA,EAAA,EAAA,aACD,IACQ,EAAE,MAAQ,OAAS,EAAE,MAAQ,UAAY,GAC1C,EAAE,gBAAgB,CACX,IAEP,EAAE,MAAQ,aAAe,EAAS,OAAS,GAC3C,EAAE,gBAAgB,CAClB,GAAM,CACC,IAEP,EAAE,MAAQ,WAAa,EAAS,OAAS,GACzC,EAAE,gBAAgB,CAClB,GAAM,CACC,IAEJ,GAEX,CAAC,EAAM,EAAS,OAAQ,EAAM,EAAK,CACtC,CAED,MAAO,CAAC,OAAM,SAAQ,OAAM,OAAM,QAAO,WAAY,EAAS,OAAQ,YAAU"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
require(`./core-D66c1_Wo.cjs`);let e=require(`react`);function t({itemCount:t,onSelect:n,onClose:r,isOpen:i,loop:a=!0}){let[o,s]=(0,e.useState)(-1);return{activeIndex:o,setActiveIndex:s,resetIndex:(0,e.useCallback)(()=>s(-1),[]),onKeyDown:(0,e.useCallback)(e=>{if(!(!i||t===0))switch(e.key){case`ArrowDown`:e.preventDefault(),s(e=>e>=t-1?a?0:e:e+1);break;case`ArrowUp`:e.preventDefault(),s(e=>e<=0?a?t-1:0:e-1);break;case`Enter`:e.preventDefault(),o>=0&&o<t&&n(o);break;case`Escape`:e.preventDefault(),r();break;case`Home`:e.preventDefault(),s(0);break;case`End`:e.preventDefault(),s(t-1);break}},[i,t,o,n,r,a])}}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return t}});
|
|
2
|
-
//# sourceMappingURL=useKeyboardNav-Bm-dxVq-.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useKeyboardNav-Bm-dxVq-.cjs","names":[],"sources":["../src/utils/useKeyboardNav.ts"],"sourcesContent":["import {useState, useCallback, type KeyboardEvent} from 'react'\n\nexport interface UseKeyboardNavOptions {\n itemCount: number\n onSelect: (index: number) => void\n onClose: () => void\n isOpen: boolean\n loop?: boolean\n}\n\n// Provide arrow-key navigation and selection state for list-like widgets.\nexport function useKeyboardNav({itemCount, onSelect, onClose, isOpen, loop = true}: UseKeyboardNavOptions) {\n const [activeIndex, setActiveIndex] = useState(-1)\n\n // Reset highlight state when the owning widget closes or clears results.\n const resetIndex = useCallback(() => setActiveIndex(-1), [])\n\n const onKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (!isOpen || itemCount === 0) return\n\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault()\n setActiveIndex((prev) => {\n if (prev >= itemCount - 1) return loop ? 0 : prev\n return prev + 1\n })\n break\n }\n case 'ArrowUp': {\n e.preventDefault()\n setActiveIndex((prev) => {\n if (prev <= 0) return loop ? itemCount - 1 : 0\n return prev - 1\n })\n break\n }\n case 'Enter': {\n e.preventDefault()\n if (activeIndex >= 0 && activeIndex < itemCount) {\n onSelect(activeIndex)\n }\n break\n }\n case 'Escape': {\n e.preventDefault()\n onClose()\n break\n }\n case 'Home': {\n e.preventDefault()\n setActiveIndex(0)\n break\n }\n case 'End': {\n e.preventDefault()\n setActiveIndex(itemCount - 1)\n break\n }\n }\n },\n [isOpen, itemCount, activeIndex, onSelect, onClose, loop]\n )\n\n return {activeIndex, setActiveIndex, resetIndex, onKeyDown}\n}\n"],"mappings":"sDAWA,SAAgB,EAAe,CAAC,YAAW,WAAU,UAAS,SAAQ,OAAO,IAA8B,CACvG,GAAM,CAAC,EAAa,IAAA,EAAA,EAAA,UAA2B,GAAG,CAqDlD,MAAO,CAAC,cAAa,iBAAgB,YAAA,EAAA,EAAA,iBAlDA,EAAe,GAAG,CAAE,EAAE,CAAC,CAkDX,WAAA,EAAA,EAAA,aA/C5C,GAAqB,CACd,MAAC,GAAU,IAAc,GAE7B,OAAQ,EAAE,IAAV,CACI,IAAK,YACD,EAAE,gBAAgB,CAClB,EAAgB,GACR,GAAQ,EAAY,EAAU,EAAO,EAAI,EACtC,EAAO,EAChB,CACF,MAEJ,IAAK,UACD,EAAE,gBAAgB,CAClB,EAAgB,GACR,GAAQ,EAAU,EAAO,EAAY,EAAI,EACtC,EAAO,EAChB,CACF,MAEJ,IAAK,QACD,EAAE,gBAAgB,CACd,GAAe,GAAK,EAAc,GAClC,EAAS,EAAY,CAEzB,MAEJ,IAAK,SACD,EAAE,gBAAgB,CAClB,GAAS,CACT,MAEJ,IAAK,OACD,EAAE,gBAAgB,CAClB,EAAe,EAAE,CACjB,MAEJ,IAAK,MACD,EAAE,gBAAgB,CAClB,EAAe,EAAY,EAAE,CAC7B,QAIZ,CAAC,EAAQ,EAAW,EAAa,EAAU,EAAS,EAAK,CAC5D,CAE0D"}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { useCallback as e, useState as t } from "react";
|
|
2
|
-
//#region src/utils/useKeyboardNav.ts
|
|
3
|
-
function n({ itemCount: n, onSelect: r, onClose: i, isOpen: a, loop: o = !0 }) {
|
|
4
|
-
let [s, c] = t(-1);
|
|
5
|
-
return {
|
|
6
|
-
activeIndex: s,
|
|
7
|
-
setActiveIndex: c,
|
|
8
|
-
resetIndex: e(() => c(-1), []),
|
|
9
|
-
onKeyDown: e((e) => {
|
|
10
|
-
if (!(!a || n === 0)) switch (e.key) {
|
|
11
|
-
case "ArrowDown":
|
|
12
|
-
e.preventDefault(), c((e) => e >= n - 1 ? o ? 0 : e : e + 1);
|
|
13
|
-
break;
|
|
14
|
-
case "ArrowUp":
|
|
15
|
-
e.preventDefault(), c((e) => e <= 0 ? o ? n - 1 : 0 : e - 1);
|
|
16
|
-
break;
|
|
17
|
-
case "Enter":
|
|
18
|
-
e.preventDefault(), s >= 0 && s < n && r(s);
|
|
19
|
-
break;
|
|
20
|
-
case "Escape":
|
|
21
|
-
e.preventDefault(), i();
|
|
22
|
-
break;
|
|
23
|
-
case "Home":
|
|
24
|
-
e.preventDefault(), c(0);
|
|
25
|
-
break;
|
|
26
|
-
case "End":
|
|
27
|
-
e.preventDefault(), c(n - 1);
|
|
28
|
-
break;
|
|
29
|
-
}
|
|
30
|
-
}, [
|
|
31
|
-
a,
|
|
32
|
-
n,
|
|
33
|
-
s,
|
|
34
|
-
r,
|
|
35
|
-
i,
|
|
36
|
-
o
|
|
37
|
-
])
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
//#endregion
|
|
41
|
-
export { n as t };
|
|
42
|
-
|
|
43
|
-
//# sourceMappingURL=useKeyboardNav-iEXOdEMB.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useKeyboardNav-iEXOdEMB.js","names":[],"sources":["../src/utils/useKeyboardNav.ts"],"sourcesContent":["import {useState, useCallback, type KeyboardEvent} from 'react'\n\nexport interface UseKeyboardNavOptions {\n itemCount: number\n onSelect: (index: number) => void\n onClose: () => void\n isOpen: boolean\n loop?: boolean\n}\n\n// Provide arrow-key navigation and selection state for list-like widgets.\nexport function useKeyboardNav({itemCount, onSelect, onClose, isOpen, loop = true}: UseKeyboardNavOptions) {\n const [activeIndex, setActiveIndex] = useState(-1)\n\n // Reset highlight state when the owning widget closes or clears results.\n const resetIndex = useCallback(() => setActiveIndex(-1), [])\n\n const onKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (!isOpen || itemCount === 0) return\n\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault()\n setActiveIndex((prev) => {\n if (prev >= itemCount - 1) return loop ? 0 : prev\n return prev + 1\n })\n break\n }\n case 'ArrowUp': {\n e.preventDefault()\n setActiveIndex((prev) => {\n if (prev <= 0) return loop ? itemCount - 1 : 0\n return prev - 1\n })\n break\n }\n case 'Enter': {\n e.preventDefault()\n if (activeIndex >= 0 && activeIndex < itemCount) {\n onSelect(activeIndex)\n }\n break\n }\n case 'Escape': {\n e.preventDefault()\n onClose()\n break\n }\n case 'Home': {\n e.preventDefault()\n setActiveIndex(0)\n break\n }\n case 'End': {\n e.preventDefault()\n setActiveIndex(itemCount - 1)\n break\n }\n }\n },\n [isOpen, itemCount, activeIndex, onSelect, onClose, loop]\n )\n\n return {activeIndex, setActiveIndex, resetIndex, onKeyDown}\n}\n"],"mappings":";;AAWA,SAAgB,EAAe,EAAC,cAAW,aAAU,YAAS,WAAQ,UAAO,MAA8B;CACvG,IAAM,CAAC,GAAa,KAAkB,EAAS,GAAG;AAqDlD,QAAO;EAAC;EAAa;EAAgB,YAlDlB,QAAkB,EAAe,GAAG,EAAE,EAAE,CAAC;EAkDX,WAhD/B,GACb,MAAqB;AACd,UAAC,KAAU,MAAc,GAE7B,SAAQ,EAAE,KAAV;IACI,KAAK;AAED,KADA,EAAE,gBAAgB,EAClB,GAAgB,MACR,KAAQ,IAAY,IAAU,IAAO,IAAI,IACtC,IAAO,EAChB;AACF;IAEJ,KAAK;AAED,KADA,EAAE,gBAAgB,EAClB,GAAgB,MACR,KAAQ,IAAU,IAAO,IAAY,IAAI,IACtC,IAAO,EAChB;AACF;IAEJ,KAAK;AAED,KADA,EAAE,gBAAgB,EACd,KAAe,KAAK,IAAc,KAClC,EAAS,EAAY;AAEzB;IAEJ,KAAK;AAED,KADA,EAAE,gBAAgB,EAClB,GAAS;AACT;IAEJ,KAAK;AAED,KADA,EAAE,gBAAgB,EAClB,EAAe,EAAE;AACjB;IAEJ,KAAK;AAED,KADA,EAAE,gBAAgB,EAClB,EAAe,IAAY,EAAE;AAC7B;;KAIZ;GAAC;GAAQ;GAAW;GAAa;GAAU;GAAS;GAAK,CAC5D;EAE0D"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
var e={valid:!0};function t(e){return e.toUpperCase().replace(/[^A-Z0-9]/g,``)}function n(e){let t=e.replace(/\D/g,``).slice(0,5);return t.length<=2?t:`${t.slice(0,2)}-${t.slice(2)}`}function r(e){let t=e.replace(/\D/g,``).slice(0,9);return t.length<=5?t:`${t.slice(0,5)}-${t.slice(5)}`}function i(e,t){return e.replace(/\D/g,``).slice(0,t)}function a(e){return t(e).slice(0,6).split(``).map((e,t)=>t===3?` ${e}`:e).join(``)}function o(e){let n=t(e).slice(0,7);return n.length<=3?n:`${n.slice(0,n.length-3)} ${n.slice(-3)}`}function s(e){let n=t(e).slice(0,6);return n.length<=4?n:`${n.slice(0,4)} ${n.slice(4)}`}var c={PL:{countryCode:`PL`,label:`Poland`,placeholder:`12-345`,example:`00-001`,inputMode:`numeric`,maxLength:6,regex:/^\d{2}-\d{3}$/,sanitize:e=>e.replace(/\D/g,``).slice(0,5),format:n,message:`Use the Polish format XX-XXX`},DE:{countryCode:`DE`,label:`Germany`,placeholder:`12345`,example:`10115`,inputMode:`numeric`,maxLength:5,regex:/^\d{5}$/,sanitize:e=>e.replace(/\D/g,``).slice(0,5),format:e=>i(e,5),message:`Use a 5-digit German postal code`},FR:{countryCode:`FR`,label:`France`,placeholder:`75001`,example:`75001`,inputMode:`numeric`,maxLength:5,regex:/^\d{5}$/,sanitize:e=>e.replace(/\D/g,``).slice(0,5),format:e=>i(e,5),message:`Use a 5-digit French postal code`},ES:{countryCode:`ES`,label:`Spain`,placeholder:`28013`,example:`28013`,inputMode:`numeric`,maxLength:5,regex:/^\d{5}$/,sanitize:e=>e.replace(/\D/g,``).slice(0,5),format:e=>i(e,5),message:`Use a 5-digit Spanish postal code`},IT:{countryCode:`IT`,label:`Italy`,placeholder:`00184`,example:`00184`,inputMode:`numeric`,maxLength:5,regex:/^\d{5}$/,sanitize:e=>e.replace(/\D/g,``).slice(0,5),format:e=>i(e,5),message:`Use a 5-digit Italian postal code`},US:{countryCode:`US`,label:`United States`,placeholder:`12345 or 12345-6789`,example:`10001`,inputMode:`numeric`,maxLength:10,regex:/^\d{5}(?:-\d{4})?$/,sanitize:e=>e.replace(/\D/g,``).slice(0,9),format:r,message:`Use ZIP or ZIP+4 format`},CA:{countryCode:`CA`,label:`Canada`,placeholder:`A1A 1A1`,example:`M5V 3L9`,inputMode:`text`,maxLength:7,regex:/^[A-Z]\d[A-Z] \d[A-Z]\d$/,sanitize:e=>t(e).slice(0,6),format:a,message:`Use the Canadian format A1A 1A1`},GB:{countryCode:`GB`,label:`United Kingdom`,placeholder:`SW1A 1AA`,example:`SW1A 1AA`,inputMode:`text`,maxLength:8,regex:/^[A-Z]{1,2}\d[A-Z\d]? \d[A-Z]{2}$/,sanitize:e=>t(e).slice(0,7),format:o,message:`Use a valid UK postcode`},NL:{countryCode:`NL`,label:`Netherlands`,placeholder:`1234 AB`,example:`1012 AB`,inputMode:`text`,maxLength:7,regex:/^\d{4} [A-Z]{2}$/,sanitize:e=>t(e).slice(0,6),format:s,message:`Use the Dutch format 1234 AB`}},l=Object.values(c).map(({countryCode:e,label:t})=>({value:e,label:t}));function u(e=`PL`){return c[e.toUpperCase()]??c.PL}function d(e,t=`PL`){let n=u(t);return n.format(n.sanitize(e))}function f(t,n=`PL`){if(!t)return e;let r=u(n),i=r.format(r.sanitize(t));return r.regex.test(i)?e:{valid:!1,error:r.message}}var p={valid:!0},m=e=>({valid:!1,error:e});function h(e){return e.trim().length>0?p:m(`This field is required`)}function g(e){return t=>t.length>=e?p:m(`Minimum ${e} characters`)}function _(e){return t=>t.length<=e?p:m(`Maximum ${e} characters`)}function v(e,t){return n=>e.test(n)?p:m(t??`Invalid format`)}function y(e,t){return n=>{let r=parseFloat(n);return isNaN(r)?m(`Must be a number`):e!==void 0&&r<e?m(`Minimum value is ${e}`):t!==void 0&&r>t?m(`Maximum value is ${t}`):p}}var b=/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;function x(e){return e?b.test(e)?p:m(`Invalid email address`):p}var S={PL:9,DE:10,US:10,GB:10,FR:9,CZ:9,SK:9};function C(e,t){if(!e)return p;let n=e.replace(/\D/g,``);if(n.length<7)return m(`Phone number too short`);if(n.length>15)return m(`Phone number too long`);if(t){let e=S[t.toUpperCase()];if(e&&n.length!==e)return m(`Phone number should have ${e} digits`)}return p}var w={AL:28,AD:24,AT:20,AZ:28,BH:22,BY:28,BE:16,BA:20,BR:29,BG:22,CR:22,HR:21,CY:28,CZ:24,DK:18,DO:28,EG:29,SV:28,EE:20,FO:18,FI:18,FR:27,GE:22,DE:22,GI:23,GR:27,GL:18,GT:28,HU:28,IS:26,IQ:23,IE:22,IL:23,IT:27,JO:30,KZ:20,XK:20,KW:30,LV:21,LB:28,LI:21,LT:20,LU:20,MT:31,MR:27,MU:30,MD:24,MC:27,ME:22,NL:18,MK:19,NO:15,PK:24,PS:29,PL:28,PT:25,QA:29,RO:24,LC:32,SM:27,SA:24,RS:22,SC:31,SK:24,SI:19,ES:24,SE:24,CH:21,TL:23,TN:24,TR:26,UA:29,AE:23,GB:22,VA:22,VG:24},T=Object.keys(w).sort();function E(e){return w[e.toUpperCase()]??null}function D(e){let t=0;for(let n=0;n<e.length;n++)t=(t*10+parseInt(e[n],10))%97;return t}function O(e){if(!e)return p;let t=e.replace(/\s/g,``).toUpperCase();if(t.length<2)return m(`IBAN too short`);let n=t.slice(0,2),r=w[n];return r?t.length===r?D((t.slice(4)+t.slice(0,4)).replace(/[A-Z]/g,e=>String(e.charCodeAt(0)-55)))===1?p:m(`Invalid IBAN checksum`):m(`IBAN for ${n} should have ${r} characters`):m(`Unknown IBAN country code`)}var k=[6,5,7,2,3,4,5,6,7];function A(e){if(!e)return p;let t=e.replace(/\D/g,``);if(t.length!==10)return m(`NIP must have 10 digits`);let n=0;for(let e=0;e<9;e++)n+=parseInt(t[e],10)*k[e];let r=n%11;return r===10?m(`Invalid NIP`):r===parseInt(t[9],10)?p:m(`Invalid NIP checksum`)}var j=[1,3,7,9,1,3,7,9,1,3];function M(e){if(!e)return p;let t=e.replace(/\D/g,``);if(t.length!==11)return m(`PESEL must have 11 digits`);let n=0;for(let e=0;e<10;e++)n+=parseInt(t[e],10)*j[e];return(10-n%10)%10===parseInt(t[10],10)?p:m(`Invalid PESEL checksum`)}var N=[8,9,2,3,4,5,6,7],P=[2,4,8,5,0,9,7,3,6,1,2,4,8];function F(e){if(!e)return p;let t=e.replace(/\D/g,``);if(t.length!==9&&t.length!==14)return m(`REGON must have 9 or 14 digits`);let n=t.length===9?N:P,r=0;for(let e=0;e<n.length;e++)r+=parseInt(t[e],10)*n[e];return(r%11==10?0:r%11)===parseInt(t[t.length-1],10)?p:m(`Invalid REGON checksum`)}function I(...e){return t=>{for(let n of e){let e=n(t);if(!e.valid)return e}return p}}function L(e,t=`DD/MM/YYYY`){let n=e.replace(/\D/g,``);if(n.length!==8)return null;let r,i,a;if(t===`DD/MM/YYYY`?(r=parseInt(n.slice(0,2),10),i=parseInt(n.slice(2,4),10),a=parseInt(n.slice(4,8),10)):t===`MM/DD/YYYY`?(i=parseInt(n.slice(0,2),10),r=parseInt(n.slice(2,4),10),a=parseInt(n.slice(4,8),10)):(a=parseInt(n.slice(0,4),10),i=parseInt(n.slice(4,6),10),r=parseInt(n.slice(6,8),10)),i<1||i>12||r<1||r>31||a<1)return null;let o=new Date(a,i-1,r);return o.getFullYear()!==a||o.getMonth()!==i-1||o.getDate()!==r?null:o}function R(e,t={}){if(!e)return p;let{format:n=`DD/MM/YYYY`,minDate:r,maxDate:i}=t;if(e.replace(/\D/g,``).length!==8)return m(`Incomplete date`);let a=L(e,n);return a?r&&a<new Date(r.getFullYear(),r.getMonth(),r.getDate())?m(`Date is too early`):i&&a>new Date(i.getFullYear(),i.getMonth(),i.getDate())?m(`Date is too far in the future`):p:m(`Invalid date`)}function z(e,t={}){if(!e)return p;let{protocols:n=[`http`,`https`],requireProtocol:r=!0}=t,i=/^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(e);if(!i&&r)return m(`URL must start with ${n.map(e=>`${e}://`).join(` or `)}`);let a=i?e:`https://${e}`,o;try{o=new URL(a)}catch{return m(`Invalid URL`)}if(!o.hostname)return m(`Invalid URL`);if(i&&n.length>0){let e=o.protocol.replace(/:$/,``);if(!n.includes(e))return m(`Protocol "${e}" is not allowed`)}return p}Object.defineProperty(exports,`S`,{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return z}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return R}}),Object.defineProperty(exports,`b`,{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return M}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return L}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return C}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return I}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,`x`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return u}});
|
|
2
|
-
//# sourceMappingURL=validators-B6yWdsu2.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validators-B6yWdsu2.cjs","names":[],"sources":["../src/utils/postalCodes.ts","../src/utils/validators.ts"],"sourcesContent":["import type {ValidationResult} from './validators'\n\nexport interface PostCodeRule {\n countryCode: string\n label: string\n placeholder: string\n example: string\n inputMode: 'text' | 'numeric'\n maxLength: number\n regex: RegExp\n sanitize: (value: string) => string\n format: (value: string) => string\n message: string\n}\n\nconst OK_RESULT: ValidationResult = {valid: true}\n\n// Reuse one sanitizer for countries that mix letters and digits.\nfunction keepLettersAndDigits(value: string): string {\n return value.toUpperCase().replace(/[^A-Z0-9]/g, '')\n}\n\n// Apply the common Polish XX-XXX postcode shape.\nfunction formatPlPostCode(value: string): string {\n const digits = value.replace(/\\D/g, '').slice(0, 5)\n\n if (digits.length <= 2) {\n return digits\n }\n\n return `${digits.slice(0, 2)}-${digits.slice(2)}`\n}\n\n// Support ZIP and ZIP+4 with the same formatter.\nfunction formatUsPostCode(value: string): string {\n const digits = value.replace(/\\D/g, '').slice(0, 9)\n\n if (digits.length <= 5) {\n return digits\n }\n\n return `${digits.slice(0, 5)}-${digits.slice(5)}`\n}\n\n// Clamp countries that only need a fixed number of digits.\nfunction formatFixedDigits(value: string, maxLength: number): string {\n return value.replace(/\\D/g, '').slice(0, maxLength)\n}\n\n// Insert the standard center space used by Canadian post codes.\nfunction formatCaPostCode(value: string): string {\n const clean = keepLettersAndDigits(value).slice(0, 6)\n const chars = clean.split('')\n\n return chars\n .map((char, index) => {\n if (index === 3) {\n return ` ${char}`\n }\n\n return char\n })\n .join('')\n}\n\n// Split the outward and inward parts of a UK postcode.\nfunction formatGbPostCode(value: string): string {\n const clean = keepLettersAndDigits(value).slice(0, 7)\n\n if (clean.length <= 3) {\n return clean\n }\n\n return `${clean.slice(0, clean.length - 3)} ${clean.slice(-3)}`\n}\n\n// Split Dutch codes into four digits and two letters.\nfunction formatNlPostCode(value: string): string {\n const clean = keepLettersAndDigits(value).slice(0, 6)\n\n if (clean.length <= 4) {\n return clean\n }\n\n return `${clean.slice(0, 4)} ${clean.slice(4)}`\n}\n\nexport const postCodeRules: Record<string, PostCodeRule> = {\n PL: {\n countryCode: 'PL',\n label: 'Poland',\n placeholder: '12-345',\n example: '00-001',\n inputMode: 'numeric',\n maxLength: 6,\n regex: /^\\d{2}-\\d{3}$/,\n sanitize: (value) => value.replace(/\\D/g, '').slice(0, 5),\n format: formatPlPostCode,\n message: 'Use the Polish format XX-XXX',\n },\n DE: {\n countryCode: 'DE',\n label: 'Germany',\n placeholder: '12345',\n example: '10115',\n inputMode: 'numeric',\n maxLength: 5,\n regex: /^\\d{5}$/,\n sanitize: (value) => value.replace(/\\D/g, '').slice(0, 5),\n format: (value) => formatFixedDigits(value, 5),\n message: 'Use a 5-digit German postal code',\n },\n FR: {\n countryCode: 'FR',\n label: 'France',\n placeholder: '75001',\n example: '75001',\n inputMode: 'numeric',\n maxLength: 5,\n regex: /^\\d{5}$/,\n sanitize: (value) => value.replace(/\\D/g, '').slice(0, 5),\n format: (value) => formatFixedDigits(value, 5),\n message: 'Use a 5-digit French postal code',\n },\n ES: {\n countryCode: 'ES',\n label: 'Spain',\n placeholder: '28013',\n example: '28013',\n inputMode: 'numeric',\n maxLength: 5,\n regex: /^\\d{5}$/,\n sanitize: (value) => value.replace(/\\D/g, '').slice(0, 5),\n format: (value) => formatFixedDigits(value, 5),\n message: 'Use a 5-digit Spanish postal code',\n },\n IT: {\n countryCode: 'IT',\n label: 'Italy',\n placeholder: '00184',\n example: '00184',\n inputMode: 'numeric',\n maxLength: 5,\n regex: /^\\d{5}$/,\n sanitize: (value) => value.replace(/\\D/g, '').slice(0, 5),\n format: (value) => formatFixedDigits(value, 5),\n message: 'Use a 5-digit Italian postal code',\n },\n US: {\n countryCode: 'US',\n label: 'United States',\n placeholder: '12345 or 12345-6789',\n example: '10001',\n inputMode: 'numeric',\n maxLength: 10,\n regex: /^\\d{5}(?:-\\d{4})?$/,\n sanitize: (value) => value.replace(/\\D/g, '').slice(0, 9),\n format: formatUsPostCode,\n message: 'Use ZIP or ZIP+4 format',\n },\n CA: {\n countryCode: 'CA',\n label: 'Canada',\n placeholder: 'A1A 1A1',\n example: 'M5V 3L9',\n inputMode: 'text',\n maxLength: 7,\n regex: /^[A-Z]\\d[A-Z] \\d[A-Z]\\d$/,\n sanitize: (value) => keepLettersAndDigits(value).slice(0, 6),\n format: formatCaPostCode,\n message: 'Use the Canadian format A1A 1A1',\n },\n GB: {\n countryCode: 'GB',\n label: 'United Kingdom',\n placeholder: 'SW1A 1AA',\n example: 'SW1A 1AA',\n inputMode: 'text',\n maxLength: 8,\n regex: /^[A-Z]{1,2}\\d[A-Z\\d]? \\d[A-Z]{2}$/,\n sanitize: (value) => keepLettersAndDigits(value).slice(0, 7),\n format: formatGbPostCode,\n message: 'Use a valid UK postcode',\n },\n NL: {\n countryCode: 'NL',\n label: 'Netherlands',\n placeholder: '1234 AB',\n example: '1012 AB',\n inputMode: 'text',\n maxLength: 7,\n regex: /^\\d{4} [A-Z]{2}$/,\n sanitize: (value) => keepLettersAndDigits(value).slice(0, 6),\n format: formatNlPostCode,\n message: 'Use the Dutch format 1234 AB',\n },\n}\n\nexport const postCodeCountries = Object.values(postCodeRules).map(({countryCode, label}) => ({\n value: countryCode,\n label,\n}))\n\n// Return the active postal rule or fall back to Poland for deterministic behavior.\nexport function getPostCodeRule(countryCode: string = 'PL'): PostCodeRule {\n return postCodeRules[countryCode.toUpperCase()] ?? postCodeRules.PL\n}\n\n// Keep postal input values aligned with the selected country format.\nexport function formatPostCode(value: string, countryCode: string = 'PL'): string {\n const rule = getPostCodeRule(countryCode)\n return rule.format(rule.sanitize(value))\n}\n\n// Validate the user-visible postal code against the selected country rule.\nexport function validatePostCode(value: string, countryCode: string = 'PL'): ValidationResult {\n if (!value) {\n return OK_RESULT\n }\n\n const rule = getPostCodeRule(countryCode)\n const formatted = rule.format(rule.sanitize(value))\n\n if (!rule.regex.test(formatted)) {\n return {valid: false, error: rule.message}\n }\n\n return OK_RESULT\n}\n","export interface ValidationResult {\n valid: boolean\n error?: string\n}\n\nexport type ValidatorFn = (value: string) => ValidationResult\n\nconst ok: ValidationResult = {valid: true}\nconst fail = (error: string): ValidationResult => ({valid: false, error})\n\n// Ensure the field is not empty after trimming user input.\nexport function validateRequired(value: string): ValidationResult {\n return value.trim().length > 0 ? ok : fail('This field is required')\n}\n\n// Build a validator that enforces a minimum string length.\nexport function validateMinLength(min: number): ValidatorFn {\n return (value: string) => (value.length >= min ? ok : fail(`Minimum ${min} characters`))\n}\n\n// Build a validator that enforces a maximum string length.\nexport function validateMaxLength(max: number): ValidatorFn {\n return (value: string) => (value.length <= max ? ok : fail(`Maximum ${max} characters`))\n}\n\n// Build a validator around a custom regular expression.\nexport function validatePattern(pattern: RegExp, message?: string): ValidatorFn {\n return (value: string) => (pattern.test(value) ? ok : fail(message ?? 'Invalid format'))\n}\n\n// Validate numeric input against optional min and max bounds.\nexport function validateRange(min?: number, max?: number): ValidatorFn {\n return (value: string) => {\n const num = parseFloat(value)\n if (isNaN(num)) return fail('Must be a number')\n if (min !== undefined && num < min) return fail(`Minimum value is ${min}`)\n if (max !== undefined && num > max) return fail(`Maximum value is ${max}`)\n return ok\n }\n}\n\n// === Email ===\n\nconst EMAIL_RE =\n /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/\n\n// Validate email format while allowing empty optional fields.\nexport function validateEmail(value: string): ValidationResult {\n if (!value) return ok\n return EMAIL_RE.test(value) ? ok : fail('Invalid email address')\n}\n\n// === Phone ===\n\nconst PHONE_LENGTH: Record<string, number> = {\n PL: 9,\n DE: 10,\n US: 10,\n GB: 10,\n FR: 9,\n CZ: 9,\n SK: 9,\n}\n\n// Validate a phone number with optional country-specific digit counts.\nexport function validatePhone(value: string, countryCode?: string): ValidationResult {\n if (!value) return ok\n const digits = value.replace(/\\D/g, '')\n if (digits.length < 7) return fail('Phone number too short')\n if (digits.length > 15) return fail('Phone number too long')\n if (countryCode) {\n const expected = PHONE_LENGTH[countryCode.toUpperCase()]\n if (expected && digits.length !== expected) {\n return fail(`Phone number should have ${expected} digits`)\n }\n }\n return ok\n}\n\n// === IBAN (MOD-97, ISO 13616) ===\n\nconst IBAN_LENGTHS: Record<string, number> = {\n AL: 28,\n AD: 24,\n AT: 20,\n AZ: 28,\n BH: 22,\n BY: 28,\n BE: 16,\n BA: 20,\n BR: 29,\n BG: 22,\n CR: 22,\n HR: 21,\n CY: 28,\n CZ: 24,\n DK: 18,\n DO: 28,\n EG: 29,\n SV: 28,\n EE: 20,\n FO: 18,\n FI: 18,\n FR: 27,\n GE: 22,\n DE: 22,\n GI: 23,\n GR: 27,\n GL: 18,\n GT: 28,\n HU: 28,\n IS: 26,\n IQ: 23,\n IE: 22,\n IL: 23,\n IT: 27,\n JO: 30,\n KZ: 20,\n XK: 20,\n KW: 30,\n LV: 21,\n LB: 28,\n LI: 21,\n LT: 20,\n LU: 20,\n MT: 31,\n MR: 27,\n MU: 30,\n MD: 24,\n MC: 27,\n ME: 22,\n NL: 18,\n MK: 19,\n NO: 15,\n PK: 24,\n PS: 29,\n PL: 28,\n PT: 25,\n QA: 29,\n RO: 24,\n LC: 32,\n SM: 27,\n SA: 24,\n RS: 22,\n SC: 31,\n SK: 24,\n SI: 19,\n ES: 24,\n SE: 24,\n CH: 21,\n TL: 23,\n TN: 24,\n TR: 26,\n UA: 29,\n AE: 23,\n GB: 22,\n VA: 22,\n VG: 24,\n}\n\n// Sorted list of supported ISO IBAN country codes for selection UIs.\nexport const ibanCountries: string[] = Object.keys(IBAN_LENGTHS).sort()\n\n// Look up the expected IBAN length for a country code or return null if unknown.\nexport function getIbanCountryLength(countryCode: string): number | null {\n return IBAN_LENGTHS[countryCode.toUpperCase()] ?? null\n}\n\n// Run the MOD-97 remainder calculation on a numeric IBAN representation.\nfunction mod97(numStr: string): number {\n let remainder = 0\n for (let i = 0; i < numStr.length; i++) {\n remainder = (remainder * 10 + parseInt(numStr[i], 10)) % 97\n }\n return remainder\n}\n\n// Validate a full IBAN using country length rules and the MOD-97 checksum.\nexport function validateIBAN(value: string): ValidationResult {\n if (!value) return ok\n const iban = value.replace(/\\s/g, '').toUpperCase()\n\n if (iban.length < 2) return fail('IBAN too short')\n\n const countryCode = iban.slice(0, 2)\n const expectedLength = IBAN_LENGTHS[countryCode]\n\n if (!expectedLength) return fail('Unknown IBAN country code')\n if (iban.length !== expectedLength) {\n return fail(`IBAN for ${countryCode} should have ${expectedLength} characters`)\n }\n\n // MOD-97 check: move first 4 chars to end, convert letters to numbers\n const rearranged = iban.slice(4) + iban.slice(0, 4)\n const numStr = rearranged.replace(/[A-Z]/g, (ch) => String(ch.charCodeAt(0) - 55))\n\n return mod97(numStr) === 1 ? ok : fail('Invalid IBAN checksum')\n}\n\n// === NIP (Polish Tax ID) ===\n\nconst NIP_WEIGHTS = [6, 5, 7, 2, 3, 4, 5, 6, 7]\n\n// Validate a Polish NIP number with its weighted checksum.\nexport function validateNIP(value: string): ValidationResult {\n if (!value) return ok\n const digits = value.replace(/\\D/g, '')\n if (digits.length !== 10) return fail('NIP must have 10 digits')\n\n let sum = 0\n for (let i = 0; i < 9; i++) {\n sum += parseInt(digits[i], 10) * NIP_WEIGHTS[i]\n }\n const checkDigit = sum % 11\n if (checkDigit === 10) return fail('Invalid NIP')\n return checkDigit === parseInt(digits[9], 10) ? ok : fail('Invalid NIP checksum')\n}\n\n// === PESEL ===\n\nconst PESEL_WEIGHTS = [1, 3, 7, 9, 1, 3, 7, 9, 1, 3]\n\n// Validate a Polish PESEL number with its checksum algorithm.\nexport function validatePESEL(value: string): ValidationResult {\n if (!value) return ok\n const digits = value.replace(/\\D/g, '')\n if (digits.length !== 11) return fail('PESEL must have 11 digits')\n\n let sum = 0\n for (let i = 0; i < 10; i++) {\n sum += parseInt(digits[i], 10) * PESEL_WEIGHTS[i]\n }\n const checkDigit = (10 - (sum % 10)) % 10\n return checkDigit === parseInt(digits[10], 10) ? ok : fail('Invalid PESEL checksum')\n}\n\n// === REGON ===\n\nconst REGON9_WEIGHTS = [8, 9, 2, 3, 4, 5, 6, 7]\nconst REGON14_WEIGHTS = [2, 4, 8, 5, 0, 9, 7, 3, 6, 1, 2, 4, 8]\n\n// Validate REGON numbers in both the 9-digit and 14-digit variants.\nexport function validateREGON(value: string): ValidationResult {\n if (!value) return ok\n const digits = value.replace(/\\D/g, '')\n\n if (digits.length !== 9 && digits.length !== 14) {\n return fail('REGON must have 9 or 14 digits')\n }\n\n const weights = digits.length === 9 ? REGON9_WEIGHTS : REGON14_WEIGHTS\n let sum = 0\n for (let i = 0; i < weights.length; i++) {\n sum += parseInt(digits[i], 10) * weights[i]\n }\n const checkDigit = sum % 11 === 10 ? 0 : sum % 11\n const lastDigit = parseInt(digits[digits.length - 1], 10)\n return checkDigit === lastDigit ? ok : fail('Invalid REGON checksum')\n}\n\n// === Compose validators ===\n\n// Run validators in order and stop at the first failure.\nexport function composeValidators(...validators: ValidatorFn[]): ValidatorFn {\n return (value: string) => {\n for (const validator of validators) {\n const result = validator(value)\n if (!result.valid) return result\n }\n return ok\n }\n}\n\n// === Date (DD/MM/YYYY, MM/DD/YYYY, YYYY/MM/DD) ===\n\nexport type DateFormat = 'DD/MM/YYYY' | 'MM/DD/YYYY' | 'YYYY/MM/DD'\n\ninterface DateValidationOptions {\n format?: DateFormat\n minDate?: Date\n maxDate?: Date\n}\n\n// Parse a date string in the given format into a Date or null.\nexport function parseDateString(value: string, format: DateFormat = 'DD/MM/YYYY'): Date | null {\n const digits = value.replace(/\\D/g, '')\n if (digits.length !== 8) return null\n\n let day: number, month: number, year: number\n if (format === 'DD/MM/YYYY') {\n day = parseInt(digits.slice(0, 2), 10)\n month = parseInt(digits.slice(2, 4), 10)\n year = parseInt(digits.slice(4, 8), 10)\n } else if (format === 'MM/DD/YYYY') {\n month = parseInt(digits.slice(0, 2), 10)\n day = parseInt(digits.slice(2, 4), 10)\n year = parseInt(digits.slice(4, 8), 10)\n } else {\n year = parseInt(digits.slice(0, 4), 10)\n month = parseInt(digits.slice(4, 6), 10)\n day = parseInt(digits.slice(6, 8), 10)\n }\n\n if (month < 1 || month > 12) return null\n if (day < 1 || day > 31) return null\n if (year < 1) return null\n\n const date = new Date(year, month - 1, day)\n // Verify the date didn't overflow (e.g. Feb 30 → Mar 2)\n if (date.getFullYear() !== year || date.getMonth() !== month - 1 || date.getDate() !== day) {\n return null\n }\n return date\n}\n\n// Validate a date string with optional range constraints.\nexport function validateDate(value: string, options: DateValidationOptions = {}): ValidationResult {\n if (!value) return ok\n const {format = 'DD/MM/YYYY', minDate, maxDate} = options\n\n const digits = value.replace(/\\D/g, '')\n if (digits.length !== 8) return fail('Incomplete date')\n\n const date = parseDateString(value, format)\n if (!date) return fail('Invalid date')\n\n if (minDate) {\n const min = new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate())\n if (date < min) return fail('Date is too early')\n }\n if (maxDate) {\n const max = new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate())\n if (date > max) return fail('Date is too far in the future')\n }\n\n return ok\n}\n\nexport {validatePostCode} from './postalCodes'\nexport {validateCardNumber} from './creditCards'\n\n// === URL ===\n\nexport interface UrlValidationOptions {\n /**\n * Allowed URL protocols (without trailing colon). When the value carries a\n * protocol, it must be one of these. Defaults to `['http', 'https']`.\n */\n protocols?: string[]\n /**\n * When `true` (default), the value must include a protocol from `protocols`.\n * When `false`, a protocol-less value (e.g. `example.com/path`) still passes\n * as long as it parses as a URL after a synthetic `https://` prefix.\n */\n requireProtocol?: boolean\n}\n\n// Validate a URL while allowing empty optional fields. Uses the native URL\n// parser so we get IDN, port, query and fragment handling for free. The\n// protocol whitelist defaults to http/https — pass `protocols: []` to accept\n// any scheme.\nexport function validateUrl(value: string, options: UrlValidationOptions = {}): ValidationResult {\n if (!value) return ok\n\n const {protocols = ['http', 'https'], requireProtocol = true} = options\n\n const hasScheme = /^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(value)\n if (!hasScheme && requireProtocol) {\n return fail(`URL must start with ${protocols.map((p) => `${p}://`).join(' or ')}`)\n }\n\n const candidate = hasScheme ? value : `https://${value}`\n\n let parsed: URL\n try {\n parsed = new URL(candidate)\n } catch {\n return fail('Invalid URL')\n }\n\n // Reject the parsed URL when it has no host (e.g. `https://`) — those slip\n // past `new URL()` silently in some engines.\n if (!parsed.hostname) return fail('Invalid URL')\n\n if (hasScheme && protocols.length > 0) {\n const scheme = parsed.protocol.replace(/:$/, '')\n if (!protocols.includes(scheme)) {\n return fail(`Protocol \"${scheme}\" is not allowed`)\n }\n }\n\n return ok\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validators-DVYOtFnw.js","names":[],"sources":["../src/utils/postalCodes.ts","../src/utils/validators.ts"],"sourcesContent":["import type {ValidationResult} from './validators'\n\nexport interface PostCodeRule {\n countryCode: string\n label: string\n placeholder: string\n example: string\n inputMode: 'text' | 'numeric'\n maxLength: number\n regex: RegExp\n sanitize: (value: string) => string\n format: (value: string) => string\n message: string\n}\n\nconst OK_RESULT: ValidationResult = {valid: true}\n\n// Reuse one sanitizer for countries that mix letters and digits.\nfunction keepLettersAndDigits(value: string): string {\n return value.toUpperCase().replace(/[^A-Z0-9]/g, '')\n}\n\n// Apply the common Polish XX-XXX postcode shape.\nfunction formatPlPostCode(value: string): string {\n const digits = value.replace(/\\D/g, '').slice(0, 5)\n\n if (digits.length <= 2) {\n return digits\n }\n\n return `${digits.slice(0, 2)}-${digits.slice(2)}`\n}\n\n// Support ZIP and ZIP+4 with the same formatter.\nfunction formatUsPostCode(value: string): string {\n const digits = value.replace(/\\D/g, '').slice(0, 9)\n\n if (digits.length <= 5) {\n return digits\n }\n\n return `${digits.slice(0, 5)}-${digits.slice(5)}`\n}\n\n// Clamp countries that only need a fixed number of digits.\nfunction formatFixedDigits(value: string, maxLength: number): string {\n return value.replace(/\\D/g, '').slice(0, maxLength)\n}\n\n// Insert the standard center space used by Canadian post codes.\nfunction formatCaPostCode(value: string): string {\n const clean = keepLettersAndDigits(value).slice(0, 6)\n const chars = clean.split('')\n\n return chars\n .map((char, index) => {\n if (index === 3) {\n return ` ${char}`\n }\n\n return char\n })\n .join('')\n}\n\n// Split the outward and inward parts of a UK postcode.\nfunction formatGbPostCode(value: string): string {\n const clean = keepLettersAndDigits(value).slice(0, 7)\n\n if (clean.length <= 3) {\n return clean\n }\n\n return `${clean.slice(0, clean.length - 3)} ${clean.slice(-3)}`\n}\n\n// Split Dutch codes into four digits and two letters.\nfunction formatNlPostCode(value: string): string {\n const clean = keepLettersAndDigits(value).slice(0, 6)\n\n if (clean.length <= 4) {\n return clean\n }\n\n return `${clean.slice(0, 4)} ${clean.slice(4)}`\n}\n\nexport const postCodeRules: Record<string, PostCodeRule> = {\n PL: {\n countryCode: 'PL',\n label: 'Poland',\n placeholder: '12-345',\n example: '00-001',\n inputMode: 'numeric',\n maxLength: 6,\n regex: /^\\d{2}-\\d{3}$/,\n sanitize: (value) => value.replace(/\\D/g, '').slice(0, 5),\n format: formatPlPostCode,\n message: 'Use the Polish format XX-XXX',\n },\n DE: {\n countryCode: 'DE',\n label: 'Germany',\n placeholder: '12345',\n example: '10115',\n inputMode: 'numeric',\n maxLength: 5,\n regex: /^\\d{5}$/,\n sanitize: (value) => value.replace(/\\D/g, '').slice(0, 5),\n format: (value) => formatFixedDigits(value, 5),\n message: 'Use a 5-digit German postal code',\n },\n FR: {\n countryCode: 'FR',\n label: 'France',\n placeholder: '75001',\n example: '75001',\n inputMode: 'numeric',\n maxLength: 5,\n regex: /^\\d{5}$/,\n sanitize: (value) => value.replace(/\\D/g, '').slice(0, 5),\n format: (value) => formatFixedDigits(value, 5),\n message: 'Use a 5-digit French postal code',\n },\n ES: {\n countryCode: 'ES',\n label: 'Spain',\n placeholder: '28013',\n example: '28013',\n inputMode: 'numeric',\n maxLength: 5,\n regex: /^\\d{5}$/,\n sanitize: (value) => value.replace(/\\D/g, '').slice(0, 5),\n format: (value) => formatFixedDigits(value, 5),\n message: 'Use a 5-digit Spanish postal code',\n },\n IT: {\n countryCode: 'IT',\n label: 'Italy',\n placeholder: '00184',\n example: '00184',\n inputMode: 'numeric',\n maxLength: 5,\n regex: /^\\d{5}$/,\n sanitize: (value) => value.replace(/\\D/g, '').slice(0, 5),\n format: (value) => formatFixedDigits(value, 5),\n message: 'Use a 5-digit Italian postal code',\n },\n US: {\n countryCode: 'US',\n label: 'United States',\n placeholder: '12345 or 12345-6789',\n example: '10001',\n inputMode: 'numeric',\n maxLength: 10,\n regex: /^\\d{5}(?:-\\d{4})?$/,\n sanitize: (value) => value.replace(/\\D/g, '').slice(0, 9),\n format: formatUsPostCode,\n message: 'Use ZIP or ZIP+4 format',\n },\n CA: {\n countryCode: 'CA',\n label: 'Canada',\n placeholder: 'A1A 1A1',\n example: 'M5V 3L9',\n inputMode: 'text',\n maxLength: 7,\n regex: /^[A-Z]\\d[A-Z] \\d[A-Z]\\d$/,\n sanitize: (value) => keepLettersAndDigits(value).slice(0, 6),\n format: formatCaPostCode,\n message: 'Use the Canadian format A1A 1A1',\n },\n GB: {\n countryCode: 'GB',\n label: 'United Kingdom',\n placeholder: 'SW1A 1AA',\n example: 'SW1A 1AA',\n inputMode: 'text',\n maxLength: 8,\n regex: /^[A-Z]{1,2}\\d[A-Z\\d]? \\d[A-Z]{2}$/,\n sanitize: (value) => keepLettersAndDigits(value).slice(0, 7),\n format: formatGbPostCode,\n message: 'Use a valid UK postcode',\n },\n NL: {\n countryCode: 'NL',\n label: 'Netherlands',\n placeholder: '1234 AB',\n example: '1012 AB',\n inputMode: 'text',\n maxLength: 7,\n regex: /^\\d{4} [A-Z]{2}$/,\n sanitize: (value) => keepLettersAndDigits(value).slice(0, 6),\n format: formatNlPostCode,\n message: 'Use the Dutch format 1234 AB',\n },\n}\n\nexport const postCodeCountries = Object.values(postCodeRules).map(({countryCode, label}) => ({\n value: countryCode,\n label,\n}))\n\n// Return the active postal rule or fall back to Poland for deterministic behavior.\nexport function getPostCodeRule(countryCode: string = 'PL'): PostCodeRule {\n return postCodeRules[countryCode.toUpperCase()] ?? postCodeRules.PL\n}\n\n// Keep postal input values aligned with the selected country format.\nexport function formatPostCode(value: string, countryCode: string = 'PL'): string {\n const rule = getPostCodeRule(countryCode)\n return rule.format(rule.sanitize(value))\n}\n\n// Validate the user-visible postal code against the selected country rule.\nexport function validatePostCode(value: string, countryCode: string = 'PL'): ValidationResult {\n if (!value) {\n return OK_RESULT\n }\n\n const rule = getPostCodeRule(countryCode)\n const formatted = rule.format(rule.sanitize(value))\n\n if (!rule.regex.test(formatted)) {\n return {valid: false, error: rule.message}\n }\n\n return OK_RESULT\n}\n","export interface ValidationResult {\n valid: boolean\n error?: string\n}\n\nexport type ValidatorFn = (value: string) => ValidationResult\n\nconst ok: ValidationResult = {valid: true}\nconst fail = (error: string): ValidationResult => ({valid: false, error})\n\n// Ensure the field is not empty after trimming user input.\nexport function validateRequired(value: string): ValidationResult {\n return value.trim().length > 0 ? ok : fail('This field is required')\n}\n\n// Build a validator that enforces a minimum string length.\nexport function validateMinLength(min: number): ValidatorFn {\n return (value: string) => (value.length >= min ? ok : fail(`Minimum ${min} characters`))\n}\n\n// Build a validator that enforces a maximum string length.\nexport function validateMaxLength(max: number): ValidatorFn {\n return (value: string) => (value.length <= max ? ok : fail(`Maximum ${max} characters`))\n}\n\n// Build a validator around a custom regular expression.\nexport function validatePattern(pattern: RegExp, message?: string): ValidatorFn {\n return (value: string) => (pattern.test(value) ? ok : fail(message ?? 'Invalid format'))\n}\n\n// Validate numeric input against optional min and max bounds.\nexport function validateRange(min?: number, max?: number): ValidatorFn {\n return (value: string) => {\n const num = parseFloat(value)\n if (isNaN(num)) return fail('Must be a number')\n if (min !== undefined && num < min) return fail(`Minimum value is ${min}`)\n if (max !== undefined && num > max) return fail(`Maximum value is ${max}`)\n return ok\n }\n}\n\n// === Email ===\n\nconst EMAIL_RE =\n /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/\n\n// Validate email format while allowing empty optional fields.\nexport function validateEmail(value: string): ValidationResult {\n if (!value) return ok\n return EMAIL_RE.test(value) ? ok : fail('Invalid email address')\n}\n\n// === Phone ===\n\nconst PHONE_LENGTH: Record<string, number> = {\n PL: 9,\n DE: 10,\n US: 10,\n GB: 10,\n FR: 9,\n CZ: 9,\n SK: 9,\n}\n\n// Validate a phone number with optional country-specific digit counts.\nexport function validatePhone(value: string, countryCode?: string): ValidationResult {\n if (!value) return ok\n const digits = value.replace(/\\D/g, '')\n if (digits.length < 7) return fail('Phone number too short')\n if (digits.length > 15) return fail('Phone number too long')\n if (countryCode) {\n const expected = PHONE_LENGTH[countryCode.toUpperCase()]\n if (expected && digits.length !== expected) {\n return fail(`Phone number should have ${expected} digits`)\n }\n }\n return ok\n}\n\n// === IBAN (MOD-97, ISO 13616) ===\n\nconst IBAN_LENGTHS: Record<string, number> = {\n AL: 28,\n AD: 24,\n AT: 20,\n AZ: 28,\n BH: 22,\n BY: 28,\n BE: 16,\n BA: 20,\n BR: 29,\n BG: 22,\n CR: 22,\n HR: 21,\n CY: 28,\n CZ: 24,\n DK: 18,\n DO: 28,\n EG: 29,\n SV: 28,\n EE: 20,\n FO: 18,\n FI: 18,\n FR: 27,\n GE: 22,\n DE: 22,\n GI: 23,\n GR: 27,\n GL: 18,\n GT: 28,\n HU: 28,\n IS: 26,\n IQ: 23,\n IE: 22,\n IL: 23,\n IT: 27,\n JO: 30,\n KZ: 20,\n XK: 20,\n KW: 30,\n LV: 21,\n LB: 28,\n LI: 21,\n LT: 20,\n LU: 20,\n MT: 31,\n MR: 27,\n MU: 30,\n MD: 24,\n MC: 27,\n ME: 22,\n NL: 18,\n MK: 19,\n NO: 15,\n PK: 24,\n PS: 29,\n PL: 28,\n PT: 25,\n QA: 29,\n RO: 24,\n LC: 32,\n SM: 27,\n SA: 24,\n RS: 22,\n SC: 31,\n SK: 24,\n SI: 19,\n ES: 24,\n SE: 24,\n CH: 21,\n TL: 23,\n TN: 24,\n TR: 26,\n UA: 29,\n AE: 23,\n GB: 22,\n VA: 22,\n VG: 24,\n}\n\n// Sorted list of supported ISO IBAN country codes for selection UIs.\nexport const ibanCountries: string[] = Object.keys(IBAN_LENGTHS).sort()\n\n// Look up the expected IBAN length for a country code or return null if unknown.\nexport function getIbanCountryLength(countryCode: string): number | null {\n return IBAN_LENGTHS[countryCode.toUpperCase()] ?? null\n}\n\n// Run the MOD-97 remainder calculation on a numeric IBAN representation.\nfunction mod97(numStr: string): number {\n let remainder = 0\n for (let i = 0; i < numStr.length; i++) {\n remainder = (remainder * 10 + parseInt(numStr[i], 10)) % 97\n }\n return remainder\n}\n\n// Validate a full IBAN using country length rules and the MOD-97 checksum.\nexport function validateIBAN(value: string): ValidationResult {\n if (!value) return ok\n const iban = value.replace(/\\s/g, '').toUpperCase()\n\n if (iban.length < 2) return fail('IBAN too short')\n\n const countryCode = iban.slice(0, 2)\n const expectedLength = IBAN_LENGTHS[countryCode]\n\n if (!expectedLength) return fail('Unknown IBAN country code')\n if (iban.length !== expectedLength) {\n return fail(`IBAN for ${countryCode} should have ${expectedLength} characters`)\n }\n\n // MOD-97 check: move first 4 chars to end, convert letters to numbers\n const rearranged = iban.slice(4) + iban.slice(0, 4)\n const numStr = rearranged.replace(/[A-Z]/g, (ch) => String(ch.charCodeAt(0) - 55))\n\n return mod97(numStr) === 1 ? ok : fail('Invalid IBAN checksum')\n}\n\n// === NIP (Polish Tax ID) ===\n\nconst NIP_WEIGHTS = [6, 5, 7, 2, 3, 4, 5, 6, 7]\n\n// Validate a Polish NIP number with its weighted checksum.\nexport function validateNIP(value: string): ValidationResult {\n if (!value) return ok\n const digits = value.replace(/\\D/g, '')\n if (digits.length !== 10) return fail('NIP must have 10 digits')\n\n let sum = 0\n for (let i = 0; i < 9; i++) {\n sum += parseInt(digits[i], 10) * NIP_WEIGHTS[i]\n }\n const checkDigit = sum % 11\n if (checkDigit === 10) return fail('Invalid NIP')\n return checkDigit === parseInt(digits[9], 10) ? ok : fail('Invalid NIP checksum')\n}\n\n// === PESEL ===\n\nconst PESEL_WEIGHTS = [1, 3, 7, 9, 1, 3, 7, 9, 1, 3]\n\n// Validate a Polish PESEL number with its checksum algorithm.\nexport function validatePESEL(value: string): ValidationResult {\n if (!value) return ok\n const digits = value.replace(/\\D/g, '')\n if (digits.length !== 11) return fail('PESEL must have 11 digits')\n\n let sum = 0\n for (let i = 0; i < 10; i++) {\n sum += parseInt(digits[i], 10) * PESEL_WEIGHTS[i]\n }\n const checkDigit = (10 - (sum % 10)) % 10\n return checkDigit === parseInt(digits[10], 10) ? ok : fail('Invalid PESEL checksum')\n}\n\n// === REGON ===\n\nconst REGON9_WEIGHTS = [8, 9, 2, 3, 4, 5, 6, 7]\nconst REGON14_WEIGHTS = [2, 4, 8, 5, 0, 9, 7, 3, 6, 1, 2, 4, 8]\n\n// Validate REGON numbers in both the 9-digit and 14-digit variants.\nexport function validateREGON(value: string): ValidationResult {\n if (!value) return ok\n const digits = value.replace(/\\D/g, '')\n\n if (digits.length !== 9 && digits.length !== 14) {\n return fail('REGON must have 9 or 14 digits')\n }\n\n const weights = digits.length === 9 ? REGON9_WEIGHTS : REGON14_WEIGHTS\n let sum = 0\n for (let i = 0; i < weights.length; i++) {\n sum += parseInt(digits[i], 10) * weights[i]\n }\n const checkDigit = sum % 11 === 10 ? 0 : sum % 11\n const lastDigit = parseInt(digits[digits.length - 1], 10)\n return checkDigit === lastDigit ? ok : fail('Invalid REGON checksum')\n}\n\n// === Compose validators ===\n\n// Run validators in order and stop at the first failure.\nexport function composeValidators(...validators: ValidatorFn[]): ValidatorFn {\n return (value: string) => {\n for (const validator of validators) {\n const result = validator(value)\n if (!result.valid) return result\n }\n return ok\n }\n}\n\n// === Date (DD/MM/YYYY, MM/DD/YYYY, YYYY/MM/DD) ===\n\nexport type DateFormat = 'DD/MM/YYYY' | 'MM/DD/YYYY' | 'YYYY/MM/DD'\n\ninterface DateValidationOptions {\n format?: DateFormat\n minDate?: Date\n maxDate?: Date\n}\n\n// Parse a date string in the given format into a Date or null.\nexport function parseDateString(value: string, format: DateFormat = 'DD/MM/YYYY'): Date | null {\n const digits = value.replace(/\\D/g, '')\n if (digits.length !== 8) return null\n\n let day: number, month: number, year: number\n if (format === 'DD/MM/YYYY') {\n day = parseInt(digits.slice(0, 2), 10)\n month = parseInt(digits.slice(2, 4), 10)\n year = parseInt(digits.slice(4, 8), 10)\n } else if (format === 'MM/DD/YYYY') {\n month = parseInt(digits.slice(0, 2), 10)\n day = parseInt(digits.slice(2, 4), 10)\n year = parseInt(digits.slice(4, 8), 10)\n } else {\n year = parseInt(digits.slice(0, 4), 10)\n month = parseInt(digits.slice(4, 6), 10)\n day = parseInt(digits.slice(6, 8), 10)\n }\n\n if (month < 1 || month > 12) return null\n if (day < 1 || day > 31) return null\n if (year < 1) return null\n\n const date = new Date(year, month - 1, day)\n // Verify the date didn't overflow (e.g. Feb 30 → Mar 2)\n if (date.getFullYear() !== year || date.getMonth() !== month - 1 || date.getDate() !== day) {\n return null\n }\n return date\n}\n\n// Validate a date string with optional range constraints.\nexport function validateDate(value: string, options: DateValidationOptions = {}): ValidationResult {\n if (!value) return ok\n const {format = 'DD/MM/YYYY', minDate, maxDate} = options\n\n const digits = value.replace(/\\D/g, '')\n if (digits.length !== 8) return fail('Incomplete date')\n\n const date = parseDateString(value, format)\n if (!date) return fail('Invalid date')\n\n if (minDate) {\n const min = new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate())\n if (date < min) return fail('Date is too early')\n }\n if (maxDate) {\n const max = new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate())\n if (date > max) return fail('Date is too far in the future')\n }\n\n return ok\n}\n\nexport {validatePostCode} from './postalCodes'\nexport {validateCardNumber} from './creditCards'\n\n// === URL ===\n\nexport interface UrlValidationOptions {\n /**\n * Allowed URL protocols (without trailing colon). When the value carries a\n * protocol, it must be one of these. Defaults to `['http', 'https']`.\n */\n protocols?: string[]\n /**\n * When `true` (default), the value must include a protocol from `protocols`.\n * When `false`, a protocol-less value (e.g. `example.com/path`) still passes\n * as long as it parses as a URL after a synthetic `https://` prefix.\n */\n requireProtocol?: boolean\n}\n\n// Validate a URL while allowing empty optional fields. Uses the native URL\n// parser so we get IDN, port, query and fragment handling for free. The\n// protocol whitelist defaults to http/https — pass `protocols: []` to accept\n// any scheme.\nexport function validateUrl(value: string, options: UrlValidationOptions = {}): ValidationResult {\n if (!value) return ok\n\n const {protocols = ['http', 'https'], requireProtocol = true} = options\n\n const hasScheme = /^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(value)\n if (!hasScheme && requireProtocol) {\n return fail(`URL must start with ${protocols.map((p) => `${p}://`).join(' or ')}`)\n }\n\n const candidate = hasScheme ? value : `https://${value}`\n\n let parsed: URL\n try {\n parsed = new URL(candidate)\n } catch {\n return fail('Invalid URL')\n }\n\n // Reject the parsed URL when it has no host (e.g. `https://`) — those slip\n // past `new URL()` silently in some engines.\n if (!parsed.hostname) return fail('Invalid URL')\n\n if (hasScheme && protocols.length > 0) {\n const scheme = parsed.protocol.replace(/:$/, '')\n if (!protocols.includes(scheme)) {\n return fail(`Protocol \"${scheme}\" is not allowed`)\n }\n }\n\n return ok\n}\n"],"mappings":"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"}
|