@banzamel/mineralui 2.4.3 → 2.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/MAvatar-CvQuiGvT.cjs +2 -0
- package/dist/MAvatar-CvQuiGvT.cjs.map +1 -0
- package/dist/MAvatar-EkOBrEtS.js +73 -0
- package/dist/MAvatar-EkOBrEtS.js.map +1 -0
- package/dist/MButton-BxEky3xQ.cjs +2 -0
- package/dist/MButton-BxEky3xQ.cjs.map +1 -0
- package/dist/MButton-KELyyBw1.js +123 -0
- package/dist/MButton-KELyyBw1.js.map +1 -0
- package/dist/{MButtonGroup-BEJxXZ8u.js → MButtonGroup-DDnn8Wfy.js} +3 -3
- package/dist/{MButtonGroup-BEJxXZ8u.js.map → MButtonGroup-DDnn8Wfy.js.map} +1 -1
- package/dist/{MButtonGroup-DO1Tq3Za.cjs → MButtonGroup-Dz8Fm-oA.cjs} +2 -2
- package/dist/{MButtonGroup-DO1Tq3Za.cjs.map → MButtonGroup-Dz8Fm-oA.cjs.map} +1 -1
- package/dist/{MCard-P8OoswWM.cjs → MCard-Bqm4BjK_.cjs} +2 -2
- package/dist/MCard-Bqm4BjK_.cjs.map +1 -0
- package/dist/{MCard-BqSkGAgf.js → MCard-CqZYGaS2.js} +4 -4
- package/dist/MCard-CqZYGaS2.js.map +1 -0
- package/dist/MCheckbox-CaWgyUn5.js +72 -0
- package/dist/MCheckbox-CaWgyUn5.js.map +1 -0
- package/dist/MCheckbox-DpKJpnFF.cjs +2 -0
- package/dist/MCheckbox-DpKJpnFF.cjs.map +1 -0
- package/dist/{MConflictIllustration-znC7ijmP.js → MConflictIllustration-dwZS44ye.js} +1517 -1515
- package/dist/MConflictIllustration-dwZS44ye.js.map +1 -0
- package/dist/MConflictIllustration-vfHs-jad.cjs +2 -0
- package/dist/MConflictIllustration-vfHs-jad.cjs.map +1 -0
- package/dist/MDetailList-C3othNs3.js +127 -0
- package/dist/MDetailList-C3othNs3.js.map +1 -0
- package/dist/MDetailList-DkDHLdJ8.cjs +2 -0
- package/dist/MDetailList-DkDHLdJ8.cjs.map +1 -0
- package/dist/MDropdownMenu-C4-r7UZM.cjs +2 -0
- package/dist/MDropdownMenu-C4-r7UZM.cjs.map +1 -0
- package/dist/MDropdownMenu-Dvg9UsHB.js +219 -0
- package/dist/MDropdownMenu-Dvg9UsHB.js.map +1 -0
- package/dist/MGrid-CQqT8nHi.js +271 -0
- package/dist/MGrid-CQqT8nHi.js.map +1 -0
- package/dist/MGrid-tBsqShLG.cjs +2 -0
- package/dist/MGrid-tBsqShLG.cjs.map +1 -0
- package/dist/MHeading-DQSQ8c7L.js +21 -0
- package/dist/MHeading-DQSQ8c7L.js.map +1 -0
- package/dist/MHeading-DiGYs1FJ.cjs +2 -0
- package/dist/MHeading-DiGYs1FJ.cjs.map +1 -0
- package/dist/MInput-BeEGufZG.cjs +2 -0
- package/dist/MInput-BeEGufZG.cjs.map +1 -0
- package/dist/MInput-QnQV9L8U.js +190 -0
- package/dist/MInput-QnQV9L8U.js.map +1 -0
- package/dist/MInputCVC-CCNRAqHw.cjs +2 -0
- package/dist/MInputCVC-CCNRAqHw.cjs.map +1 -0
- package/dist/MInputCVC-IXIYZwex.js +410 -0
- package/dist/MInputCVC-IXIYZwex.js.map +1 -0
- package/dist/MInputSearch-BSIc6m2P.cjs +2 -0
- package/dist/MInputSearch-BSIc6m2P.cjs.map +1 -0
- package/dist/MInputSearch-CNuTAbYs.js +44 -0
- package/dist/MInputSearch-CNuTAbYs.js.map +1 -0
- package/dist/{MKbd-BR1GX5oK.cjs → MKbd-CnW3NUIu.cjs} +2 -2
- package/dist/{MKbd-BR1GX5oK.cjs.map → MKbd-CnW3NUIu.cjs.map} +1 -1
- package/dist/{MKbd-COb7oh_k.js → MKbd-DjfGyajR.js} +2 -2
- package/dist/{MKbd-COb7oh_k.js.map → MKbd-DjfGyajR.js.map} +1 -1
- package/dist/MLink-C6uwA6db.cjs +2 -0
- package/dist/MLink-C6uwA6db.cjs.map +1 -0
- package/dist/MLink-ixg0xFFI.js +31 -0
- package/dist/MLink-ixg0xFFI.js.map +1 -0
- package/dist/MLoader-CViA3zBo.js +44 -0
- package/dist/MLoader-CViA3zBo.js.map +1 -0
- package/dist/MLoader-DUOoOoNE.cjs +2 -0
- package/dist/MLoader-DUOoOoNE.cjs.map +1 -0
- package/dist/MPagination-BTGenxWW.js +122 -0
- package/dist/MPagination-BTGenxWW.js.map +1 -0
- package/dist/MPagination-DitmdtCc.cjs +2 -0
- package/dist/MPagination-DitmdtCc.cjs.map +1 -0
- package/dist/MPopover-CBDbUOW6.js +183 -0
- package/dist/MPopover-CBDbUOW6.js.map +1 -0
- package/dist/MPopover-ZeoU9hb5.cjs +2 -0
- package/dist/MPopover-ZeoU9hb5.cjs.map +1 -0
- package/dist/{MSimpleGrid-Ui8cI0ho.js → MSimpleGrid-C_QvLmck.js} +3 -3
- package/dist/MSimpleGrid-C_QvLmck.js.map +1 -0
- package/dist/MSimpleGrid-wgvjnxwM.cjs +2 -0
- package/dist/MSimpleGrid-wgvjnxwM.cjs.map +1 -0
- package/dist/{MSkeleton-Dhu-loDO.js → MSkeleton-BpcpBBJq.js} +12 -10
- package/dist/MSkeleton-BpcpBBJq.js.map +1 -0
- package/dist/MSkeleton-DuAN8Vcv.cjs +2 -0
- package/dist/MSkeleton-DuAN8Vcv.cjs.map +1 -0
- package/dist/MSlider-CLASUc2H.js +134 -0
- package/dist/MSlider-CLASUc2H.js.map +1 -0
- package/dist/MSlider-hONQBulE.cjs +2 -0
- package/dist/MSlider-hONQBulE.cjs.map +1 -0
- package/dist/MStack-BwAFeGGg.js +39 -0
- package/dist/MStack-BwAFeGGg.js.map +1 -0
- package/dist/MStack-CGII4A-q.cjs +2 -0
- package/dist/MStack-CGII4A-q.cjs.map +1 -0
- package/dist/MSubText-BeZk-fhz.js +17 -0
- package/dist/MSubText-BeZk-fhz.js.map +1 -0
- package/dist/MSubText-Dl1PfToZ.cjs +2 -0
- package/dist/MSubText-Dl1PfToZ.cjs.map +1 -0
- package/dist/MSurface-B_QnRLr5.js +74 -0
- package/dist/MSurface-B_QnRLr5.js.map +1 -0
- package/dist/MSurface-BrFo-JMJ.cjs +2 -0
- package/dist/MSurface-BrFo-JMJ.cjs.map +1 -0
- package/dist/MTag-BZrKN_DS.js +41 -0
- package/dist/MTag-BZrKN_DS.js.map +1 -0
- package/dist/MTag-DCE1vRJM.cjs +2 -0
- package/dist/MTag-DCE1vRJM.cjs.map +1 -0
- package/dist/MText-BUWQPoBM.js +45 -0
- package/dist/MText-BUWQPoBM.js.map +1 -0
- package/dist/MText-nsvLFsSv.cjs +2 -0
- package/dist/MText-nsvLFsSv.cjs.map +1 -0
- package/dist/MTooltip-BRSPJ3RY.js +100 -0
- package/dist/MTooltip-BRSPJ3RY.js.map +1 -0
- package/dist/MTooltip-Cj2Fxmzc.cjs +2 -0
- package/dist/MTooltip-Cj2Fxmzc.cjs.map +1 -0
- package/dist/MTreeView-BWCTlsU-.cjs +2 -0
- package/dist/MTreeView-BWCTlsU-.cjs.map +1 -0
- package/dist/MTreeView-CWcMwE-Z.js +554 -0
- package/dist/MTreeView-CWcMwE-Z.js.map +1 -0
- package/dist/calendar-2yhnCkGW.cjs +2 -0
- package/dist/calendar-2yhnCkGW.cjs.map +1 -0
- package/dist/calendar-DcNYDTVb.js +195 -0
- package/dist/calendar-DcNYDTVb.js.map +1 -0
- package/dist/calendar.cjs +1 -1
- package/dist/calendar.js +1 -1
- package/dist/{calendarDates-M_Dawj0j.js → calendarDates-Bpw_G_QR.js} +30 -19
- package/dist/calendarDates-Bpw_G_QR.js.map +1 -0
- package/dist/calendarDates-Cg0nm69Y.cjs +2 -0
- package/dist/calendarDates-Cg0nm69Y.cjs.map +1 -0
- package/dist/cards-Bp886TRb.cjs +2 -0
- package/dist/cards-Bp886TRb.cjs.map +1 -0
- package/dist/cards-BvER6Gx0.js +1277 -0
- package/dist/cards-BvER6Gx0.js.map +1 -0
- package/dist/cards.cjs +1 -1
- package/dist/cards.js +2 -2
- package/dist/{cn-YER3QsV1.js → cn-CUSXNnjF.js} +1 -1
- package/dist/{cn-YER3QsV1.js.map → cn-CUSXNnjF.js.map} +1 -1
- package/dist/{cn-CU5TNITO.cjs → cn-DYFxgzi2.cjs} +1 -1
- package/dist/{cn-CU5TNITO.cjs.map → cn-DYFxgzi2.cjs.map} +1 -1
- package/dist/components/cards/MCardDaySchedule/MCardDaySchedule.d.ts +1 -1
- package/dist/components/cards/MCardDocumentTree/MCardDocumentTree.d.ts +1 -1
- package/dist/components/cards/MCardGrid/MCardGrid.d.ts +1 -1
- package/dist/components/cards/MCardPayment/MCardPayment.d.ts +1 -1
- package/dist/components/cards/MCardPayment/MCardPayment.types.d.ts +4 -0
- package/dist/components/cards/MCardPaymentMethod/MCardPaymentMethod.d.ts +1 -1
- package/dist/components/cards/MStatCard/MStatCard.d.ts +1 -1
- package/dist/components/controls/MCheckbox/MCheckbox.types.d.ts +6 -0
- package/dist/components/controls/MLoadMore/MLoadMore.d.ts +1 -1
- package/dist/components/controls/MSlider/MSlider.d.ts +1 -1
- package/dist/components/controls/MSlider/MSlider.types.d.ts +5 -0
- package/dist/components/data/MTreeView/MTreeView.d.ts +1 -1
- package/dist/components/data/MTreeView/MTreeView.types.d.ts +6 -0
- package/dist/components/data/MWeekGrid/MWeekGrid.d.ts +1 -1
- package/dist/components/data/MWeekGrid/MWeekGrid.types.d.ts +9 -3
- package/dist/components/display/MCodeBlock/MCodeBlock.d.ts +1 -1
- package/dist/components/dropdowns/MAutocomplete/MAutocomplete.d.ts +1 -1
- package/dist/components/dropdowns/MAutocomplete/MAutocomplete.types.d.ts +8 -2
- package/dist/components/dropdowns/MSelect/MSelect.d.ts +1 -1
- package/dist/components/dropdowns/shared/TimeColumnListbox.d.ts +20 -0
- package/dist/components/feedback/MAlert/MAlert.d.ts +1 -1
- package/dist/components/feedback/MBadge/MBadge.d.ts +1 -1
- package/dist/components/feedback/MBanner/MBanner.d.ts +1 -1
- package/dist/components/feedback/MLoader/MLoader.d.ts +1 -1
- package/dist/components/feedback/MSpinner/MSpinner.d.ts +1 -1
- package/dist/components/feedback/MTag/MTag.d.ts +1 -1
- package/dist/components/inputs/MInput/MInput.types.d.ts +6 -1
- package/dist/components/inputs/MInput/useFormatCaret.d.ts +8 -0
- package/dist/components/layout/MCanvasGrid/MCanvasGrid.types.d.ts +5 -0
- package/dist/components/layout/MContainer/MContainer.d.ts +1 -1
- package/dist/components/layout/MDivider/MDivider.d.ts +1 -1
- package/dist/components/layout/MFooter/MFooter.d.ts +1 -1
- package/dist/components/layout/MHeader/MHeader.d.ts +1 -1
- package/dist/components/layout/MInline/MInline.d.ts +1 -1
- package/dist/components/layout/MNavbar/MNavbar.d.ts +1 -1
- package/dist/components/layout/MNavbar/MNavbar.types.d.ts +2 -0
- package/dist/components/layout/MSection/MSection.d.ts +1 -1
- package/dist/components/layout/MStack/MStack.d.ts +1 -1
- package/dist/components/layout/MStickyPanel/MStickyPanel.types.d.ts +4 -0
- package/dist/components/layout/MSurface/MSurface.d.ts +1 -1
- package/dist/components/media/MAvatar/MAvatar.d.ts +1 -1
- package/dist/components/media/MAvatar/MAvatar.types.d.ts +10 -0
- package/dist/components/media/MCarousel/MCarousel.d.ts +1 -1
- package/dist/components/media/MImage/MImage.d.ts +1 -1
- package/dist/components/media/carouselA11y.d.ts +9 -0
- package/dist/components/overlays/MCommandPalette/MCommandPalette.d.ts +1 -1
- package/dist/components/overlays/MDropdownMenu/MDropdownMenu.d.ts +4 -2
- package/dist/components/overlays/MDropdownMenu/MDropdownMenu.types.d.ts +3 -1
- package/dist/components/overlays/MPopconfirm/MPopconfirm.d.ts +1 -1
- package/dist/components/overlays/scrollLock.d.ts +14 -0
- package/dist/components/primitives/MPopover/MPopover.d.ts +1 -1
- package/dist/components/primitives/MPopover/MPopover.types.d.ts +32 -1
- package/dist/components/primitives/MPopover/popoverStack.d.ts +6 -0
- package/dist/components/typography/MHeading/MHeading.d.ts +2 -3
- package/dist/components/typography/MSubText/MSubText.d.ts +1 -1
- package/dist/components/typography/MText/MText.d.ts +1 -1
- package/dist/controls-B4Dxaab4.js +491 -0
- package/dist/controls-B4Dxaab4.js.map +1 -0
- package/dist/controls-CyXEIOXD.cjs +2 -0
- package/dist/controls-CyXEIOXD.cjs.map +1 -0
- package/dist/controls.cjs +1 -1
- package/dist/controls.js +5 -5
- package/dist/creditCards-Bo2mrc53.cjs +2 -0
- package/dist/creditCards-Bo2mrc53.cjs.map +1 -0
- package/dist/{creditCards-D_iWmtG6.js → creditCards-DmDOyvcw.js} +20 -31
- package/dist/creditCards-DmDOyvcw.js.map +1 -0
- package/dist/data-BM3KG8oN.cjs +2 -0
- package/dist/data-BM3KG8oN.cjs.map +1 -0
- package/dist/data-qnR8OBmj.js +808 -0
- package/dist/data-qnR8OBmj.js.map +1 -0
- package/dist/data.cjs +1 -1
- package/dist/data.js +2 -2
- package/dist/{dateUtils-CUY6CRCf.js → dateUtils-B-ToNZq_.js} +5 -6
- package/dist/dateUtils-B-ToNZq_.js.map +1 -0
- package/dist/dateUtils-z2L7ZaxA.cjs +2 -0
- package/dist/dateUtils-z2L7ZaxA.cjs.map +1 -0
- package/dist/display-BLMOBofj.cjs +3 -0
- package/dist/display-BLMOBofj.cjs.map +1 -0
- package/dist/display-Dlb79lkA.js +968 -0
- package/dist/display-Dlb79lkA.js.map +1 -0
- package/dist/display.cjs +1 -1
- package/dist/display.js +2 -2
- package/dist/dropdowns-2_7VMEDo.js +2009 -0
- package/dist/dropdowns-2_7VMEDo.js.map +1 -0
- package/dist/dropdowns-DN7j8J-V.cjs +2 -0
- package/dist/dropdowns-DN7j8J-V.cjs.map +1 -0
- package/dist/dropdowns.cjs +1 -1
- package/dist/dropdowns.js +1 -1
- package/dist/feedback-CECayytY.js +335 -0
- package/dist/feedback-CECayytY.js.map +1 -0
- package/dist/feedback-paV8Ls-h.cjs +2 -0
- package/dist/feedback-paV8Ls-h.cjs.map +1 -0
- package/dist/feedback.cjs +1 -1
- package/dist/feedback.js +5 -5
- package/dist/form-Br56h5EF.cjs +2 -0
- package/dist/form-Br56h5EF.cjs.map +1 -0
- package/dist/form-CJmMZgsH.js +165 -0
- package/dist/form-CJmMZgsH.js.map +1 -0
- package/dist/form.cjs +1 -1
- package/dist/form.js +1 -1
- package/dist/{formatters-CNjg_h7-.cjs → formatters-CauWlsnM.cjs} +1 -1
- package/dist/{formatters-CNjg_h7-.cjs.map → formatters-CauWlsnM.cjs.map} +1 -1
- package/dist/{formatters-T0vvjMtB.js → formatters-Doqdu_w1.js} +1 -1
- package/dist/{formatters-T0vvjMtB.js.map → formatters-Doqdu_w1.js.map} +1 -1
- package/dist/frameworkTexts-CaqdiKHW.cjs +2 -0
- package/dist/frameworkTexts-CaqdiKHW.cjs.map +1 -0
- package/dist/frameworkTexts-o43FqY1A.js +505 -0
- package/dist/frameworkTexts-o43FqY1A.js.map +1 -0
- package/dist/i18n/MI18nProvider.d.ts +6 -1
- package/dist/i18n/frameworkTexts.d.ts +511 -0
- package/dist/i18n/index.d.ts +1 -0
- package/dist/i18n.cjs +1 -1
- package/dist/i18n.js +2 -2
- package/dist/icons-Bp8bB9TP.cjs +2 -0
- package/dist/icons-Bp8bB9TP.cjs.map +1 -0
- package/dist/{icons-CBMl-kOM.js → icons-IqEBmGh3.js} +1223 -1220
- package/dist/icons-IqEBmGh3.js.map +1 -0
- package/dist/icons.cjs +1 -1
- package/dist/icons.js +1 -1
- package/dist/illustrations.cjs +1 -1
- package/dist/illustrations.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.js +56 -56
- package/dist/inputs-C0BJzlA-.js +1923 -0
- package/dist/inputs-C0BJzlA-.js.map +1 -0
- package/dist/inputs-CvNBBLFA.cjs +2 -0
- package/dist/inputs-CvNBBLFA.cjs.map +1 -0
- package/dist/inputs.cjs +1 -1
- package/dist/inputs.js +4 -4
- package/dist/layout-BSFqGXLZ.js +1101 -0
- package/dist/layout-BSFqGXLZ.js.map +1 -0
- package/dist/layout-MKqvUkPv.cjs +2 -0
- package/dist/layout-MKqvUkPv.cjs.map +1 -0
- package/dist/layout.cjs +1 -1
- package/dist/layout.js +6 -6
- package/dist/{layoutProps-Ck4VtGm9.cjs → layoutProps-B8y2XwHy.cjs} +1 -1
- package/dist/{layoutProps-Ck4VtGm9.cjs.map → layoutProps-B8y2XwHy.cjs.map} +1 -1
- package/dist/{layoutProps-Cl6d1KmH.js → layoutProps-CE5-ghKw.js} +1 -1
- package/dist/{layoutProps-Cl6d1KmH.js.map → layoutProps-CE5-ghKw.js.map} +1 -1
- package/dist/{licensing-f5KYVz7D.js → licensing-BKmoAdfr.js} +5 -4
- package/dist/licensing-BKmoAdfr.js.map +1 -0
- package/dist/licensing-DVgjkw-s.cjs +2 -0
- package/dist/licensing-DVgjkw-s.cjs.map +1 -0
- package/dist/media-fiasAbBv.js +485 -0
- package/dist/media-fiasAbBv.js.map +1 -0
- package/dist/media-tr1s386v.cjs +2 -0
- package/dist/media-tr1s386v.cjs.map +1 -0
- package/dist/media.cjs +1 -1
- package/dist/media.js +2 -2
- package/dist/overlays-Df-NpmkW.cjs +2 -0
- package/dist/overlays-Df-NpmkW.cjs.map +1 -0
- package/dist/overlays-W0WW3fn7.js +607 -0
- package/dist/overlays-W0WW3fn7.js.map +1 -0
- package/dist/overlays.cjs +1 -1
- package/dist/overlays.js +3 -3
- package/dist/primitives.cjs +1 -1
- package/dist/primitives.js +2 -2
- package/dist/radioGroupKeys-Bm-Qeh8G.js +28 -0
- package/dist/radioGroupKeys-Bm-Qeh8G.js.map +1 -0
- package/dist/radioGroupKeys-COL8uXbH.cjs +2 -0
- package/dist/radioGroupKeys-COL8uXbH.cjs.map +1 -0
- package/dist/{relativeTime-Cr-NVzij.js → relativeTime-BqCuaBqb.js} +1 -1
- package/dist/{relativeTime-Cr-NVzij.js.map → relativeTime-BqCuaBqb.js.map} +1 -1
- package/dist/{relativeTime-DgYBUaVm.cjs → relativeTime-DUbW4O44.cjs} +1 -1
- package/dist/{relativeTime-DgYBUaVm.cjs.map → relativeTime-DUbW4O44.cjs.map} +1 -1
- package/dist/scrollLock-C9P9o6wH.cjs +2 -0
- package/dist/scrollLock-C9P9o6wH.cjs.map +1 -0
- package/dist/scrollLock-D27VmgPV.js +14 -0
- package/dist/scrollLock-D27VmgPV.js.map +1 -0
- package/dist/style-runtime.cjs +1 -1
- package/dist/style-runtime.js +1 -1
- package/dist/styles.css +1 -1
- package/dist/theme/MThemeProvider.d.ts +18 -1
- package/dist/theme/index.d.ts +2 -2
- package/dist/{theme-DAOU1aPs.js → theme-B_juOenJ.js} +71 -61
- package/dist/theme-B_juOenJ.js.map +1 -0
- package/dist/theme-ByPZH0dh.cjs +2 -0
- package/dist/theme-ByPZH0dh.cjs.map +1 -0
- package/dist/theme.cjs +1 -1
- package/dist/theme.js +2 -2
- package/dist/{typography-C806GYT4.js → typography-DNcB8dOy.js} +3 -3
- package/dist/{typography-C806GYT4.js.map → typography-DNcB8dOy.js.map} +1 -1
- package/dist/{typography-4v01oNWx.cjs → typography-I7aeG8pH.cjs} +2 -2
- package/dist/{typography-4v01oNWx.cjs.map → typography-I7aeG8pH.cjs.map} +1 -1
- package/dist/typography.cjs +1 -1
- package/dist/typography.js +6 -6
- package/dist/useGhostText-CKsb8Ufa.js +240 -0
- package/dist/useGhostText-CKsb8Ufa.js.map +1 -0
- package/dist/useGhostText-DO-tfxS0.cjs +2 -0
- package/dist/useGhostText-DO-tfxS0.cjs.map +1 -0
- package/dist/useModalLayer-CpOPSDbf.js +128 -0
- package/dist/useModalLayer-CpOPSDbf.js.map +1 -0
- package/dist/useModalLayer-Cyt93Prs.cjs +2 -0
- package/dist/useModalLayer-Cyt93Prs.cjs.map +1 -0
- package/dist/utils/calendarDates.d.ts +5 -0
- package/dist/utils/radioGroupKeys.d.ts +9 -0
- package/dist/utils/useDateGridNav.d.ts +39 -0
- package/dist/utils/useGhostText.d.ts +2 -1
- package/dist/utils/useKeyboardNav.d.ts +51 -5
- package/dist/utils/useModalLayer.d.ts +4 -0
- package/dist/utils/useRovingToolbar.d.ts +26 -0
- package/dist/utils/validationMessages.d.ts +15 -0
- package/dist/utils.cjs +1 -1
- package/dist/utils.entry.d.ts +3 -1
- package/dist/utils.js +11 -11
- package/dist/validationMessages-BFimXxlT.js +23 -0
- package/dist/validationMessages-BFimXxlT.js.map +1 -0
- package/dist/validationMessages-iHu7apWr.cjs +2 -0
- package/dist/validationMessages-iHu7apWr.cjs.map +1 -0
- package/dist/validators-SZmLxnir.cjs +2 -0
- package/dist/validators-SZmLxnir.cjs.map +1 -0
- package/dist/{validators-DVYOtFnw.js → validators-ULebNme2.js} +107 -106
- package/dist/validators-ULebNme2.js.map +1 -0
- package/package.json +1 -1
- package/dist/MAvatar-DHNB3829.cjs +0 -2
- package/dist/MAvatar-DHNB3829.cjs.map +0 -1
- package/dist/MAvatar-GeRL-CNO.js +0 -63
- package/dist/MAvatar-GeRL-CNO.js.map +0 -1
- package/dist/MButton-CEwo8lUB.js +0 -115
- package/dist/MButton-CEwo8lUB.js.map +0 -1
- package/dist/MButton-CnAr77Za.cjs +0 -2
- package/dist/MButton-CnAr77Za.cjs.map +0 -1
- package/dist/MCard-BqSkGAgf.js.map +0 -1
- package/dist/MCard-P8OoswWM.cjs.map +0 -1
- package/dist/MCheckbox-BxFBADcE.js +0 -59
- package/dist/MCheckbox-BxFBADcE.js.map +0 -1
- package/dist/MCheckbox-DozwF2ai.cjs +0 -2
- package/dist/MCheckbox-DozwF2ai.cjs.map +0 -1
- package/dist/MConflictIllustration-2QL-BHYv.cjs +0 -2
- package/dist/MConflictIllustration-2QL-BHYv.cjs.map +0 -1
- package/dist/MConflictIllustration-znC7ijmP.js.map +0 -1
- package/dist/MDetailList-CThQvoyf.cjs +0 -2
- package/dist/MDetailList-CThQvoyf.cjs.map +0 -1
- package/dist/MDetailList-Cx9H81xT.js +0 -98
- package/dist/MDetailList-Cx9H81xT.js.map +0 -1
- package/dist/MDropdownMenu-DnKcCyW6.cjs +0 -2
- package/dist/MDropdownMenu-DnKcCyW6.cjs.map +0 -1
- package/dist/MDropdownMenu-DxbKN7Ui.js +0 -172
- package/dist/MDropdownMenu-DxbKN7Ui.js.map +0 -1
- package/dist/MGrid-BkRSGN2t.cjs +0 -2
- package/dist/MGrid-BkRSGN2t.cjs.map +0 -1
- package/dist/MGrid-CIz-2i6X.js +0 -265
- package/dist/MGrid-CIz-2i6X.js.map +0 -1
- package/dist/MHeading-AYQ8_GFP.cjs +0 -2
- package/dist/MHeading-AYQ8_GFP.cjs.map +0 -1
- package/dist/MHeading-DcGxUMwC.js +0 -21
- package/dist/MHeading-DcGxUMwC.js.map +0 -1
- package/dist/MI18nProvider-CqAwaswx.cjs +0 -2
- package/dist/MI18nProvider-CqAwaswx.cjs.map +0 -1
- package/dist/MI18nProvider-VH14CI8u.js +0 -72
- package/dist/MI18nProvider-VH14CI8u.js.map +0 -1
- package/dist/MInput-BYj2BdUe.cjs +0 -2
- package/dist/MInput-BYj2BdUe.cjs.map +0 -1
- package/dist/MInput-nodE-CZF.js +0 -188
- package/dist/MInput-nodE-CZF.js.map +0 -1
- package/dist/MInputCVC-9XWryaTz.cjs +0 -2
- package/dist/MInputCVC-9XWryaTz.cjs.map +0 -1
- package/dist/MInputCVC-CrDTaUXm.js +0 -321
- package/dist/MInputCVC-CrDTaUXm.js.map +0 -1
- package/dist/MInputSearch-BMgCHjFk.js +0 -43
- package/dist/MInputSearch-BMgCHjFk.js.map +0 -1
- package/dist/MInputSearch-BiVI1jNc.cjs +0 -2
- package/dist/MInputSearch-BiVI1jNc.cjs.map +0 -1
- package/dist/MLink-CAl6N6_z.js +0 -31
- package/dist/MLink-CAl6N6_z.js.map +0 -1
- package/dist/MLink-Dk_ReE6i.cjs +0 -2
- package/dist/MLink-Dk_ReE6i.cjs.map +0 -1
- package/dist/MLoader-CYp0OJU_.js +0 -41
- package/dist/MLoader-CYp0OJU_.js.map +0 -1
- package/dist/MLoader-DvmFle31.cjs +0 -2
- package/dist/MLoader-DvmFle31.cjs.map +0 -1
- package/dist/MPagination-E7IixIeo.js +0 -113
- package/dist/MPagination-E7IixIeo.js.map +0 -1
- package/dist/MPagination-reDU9xTW.cjs +0 -2
- package/dist/MPagination-reDU9xTW.cjs.map +0 -1
- package/dist/MPopover-8gYD3Ogq.js +0 -118
- package/dist/MPopover-8gYD3Ogq.js.map +0 -1
- package/dist/MPopover-B3npyAkL.cjs +0 -2
- package/dist/MPopover-B3npyAkL.cjs.map +0 -1
- package/dist/MPortal-Ba2Sxset.js +0 -10
- package/dist/MPortal-Ba2Sxset.js.map +0 -1
- package/dist/MPortal-CuBXhhl_.cjs +0 -2
- package/dist/MPortal-CuBXhhl_.cjs.map +0 -1
- package/dist/MSimpleGrid-BchGYPMi.cjs +0 -2
- package/dist/MSimpleGrid-BchGYPMi.cjs.map +0 -1
- package/dist/MSimpleGrid-Ui8cI0ho.js.map +0 -1
- package/dist/MSkeleton-DPa_G_2X.cjs +0 -2
- package/dist/MSkeleton-DPa_G_2X.cjs.map +0 -1
- package/dist/MSkeleton-Dhu-loDO.js.map +0 -1
- package/dist/MSlider-BRjhyBSc.js +0 -75
- package/dist/MSlider-BRjhyBSc.js.map +0 -1
- package/dist/MSlider-w5214a-W.cjs +0 -2
- package/dist/MSlider-w5214a-W.cjs.map +0 -1
- package/dist/MStack-Dt-rWvg3.js +0 -39
- package/dist/MStack-Dt-rWvg3.js.map +0 -1
- package/dist/MStack-nc6Y_9K3.cjs +0 -2
- package/dist/MStack-nc6Y_9K3.cjs.map +0 -1
- package/dist/MSubText-B0tXiuAp.js +0 -17
- package/dist/MSubText-B0tXiuAp.js.map +0 -1
- package/dist/MSubText-C6v6Exa2.cjs +0 -2
- package/dist/MSubText-C6v6Exa2.cjs.map +0 -1
- package/dist/MSurface-BjE-mL1L.cjs +0 -2
- package/dist/MSurface-BjE-mL1L.cjs.map +0 -1
- package/dist/MSurface-CpDJCdb5.js +0 -74
- package/dist/MSurface-CpDJCdb5.js.map +0 -1
- package/dist/MTag-BgOxiahL.cjs +0 -2
- package/dist/MTag-BgOxiahL.cjs.map +0 -1
- package/dist/MTag-cw3cIGHX.js +0 -41
- package/dist/MTag-cw3cIGHX.js.map +0 -1
- package/dist/MText-BDI4mdw8.cjs +0 -2
- package/dist/MText-BDI4mdw8.cjs.map +0 -1
- package/dist/MText-DhbAjtUE.js +0 -45
- package/dist/MText-DhbAjtUE.js.map +0 -1
- package/dist/MTooltip-BAgHlv5I.cjs +0 -2
- package/dist/MTooltip-BAgHlv5I.cjs.map +0 -1
- package/dist/MTooltip-CJxvlkOX.js +0 -92
- package/dist/MTooltip-CJxvlkOX.js.map +0 -1
- package/dist/MTreeView-DsBnYQMT.js +0 -315
- package/dist/MTreeView-DsBnYQMT.js.map +0 -1
- package/dist/MTreeView-LiJ5o-zy.cjs +0 -2
- package/dist/MTreeView-LiJ5o-zy.cjs.map +0 -1
- package/dist/calendar-Bq6NMNnS.js +0 -193
- package/dist/calendar-Bq6NMNnS.js.map +0 -1
- package/dist/calendar-C57BH8Nd.cjs +0 -2
- package/dist/calendar-C57BH8Nd.cjs.map +0 -1
- package/dist/calendarDates-M_Dawj0j.js.map +0 -1
- package/dist/calendarDates-qm047RW2.cjs +0 -2
- package/dist/calendarDates-qm047RW2.cjs.map +0 -1
- package/dist/cards-D4xJVd4q.js +0 -1227
- package/dist/cards-D4xJVd4q.js.map +0 -1
- package/dist/cards-Du6dbZSQ.cjs +0 -2
- package/dist/cards-Du6dbZSQ.cjs.map +0 -1
- package/dist/controls-BKoc_yel.js +0 -475
- package/dist/controls-BKoc_yel.js.map +0 -1
- package/dist/controls-Ck-PMt__.cjs +0 -2
- package/dist/controls-Ck-PMt__.cjs.map +0 -1
- package/dist/creditCards-D_HwRUBz.cjs +0 -2
- package/dist/creditCards-D_HwRUBz.cjs.map +0 -1
- package/dist/creditCards-D_iWmtG6.js.map +0 -1
- package/dist/data-CdQximqm.js +0 -689
- package/dist/data-CdQximqm.js.map +0 -1
- package/dist/data-PS4ygCyj.cjs +0 -2
- package/dist/data-PS4ygCyj.cjs.map +0 -1
- package/dist/dateUtils-CUY6CRCf.js.map +0 -1
- package/dist/dateUtils-Dq1vaA-D.cjs +0 -2
- package/dist/dateUtils-Dq1vaA-D.cjs.map +0 -1
- package/dist/display-YC1fVpXA.js +0 -782
- package/dist/display-YC1fVpXA.js.map +0 -1
- package/dist/display-slIo1bQI.cjs +0 -3
- package/dist/display-slIo1bQI.cjs.map +0 -1
- package/dist/dropdowns-DFbUoZ8Q.cjs +0 -2
- package/dist/dropdowns-DFbUoZ8Q.cjs.map +0 -1
- package/dist/dropdowns-nW3MY5XG.js +0 -1715
- package/dist/dropdowns-nW3MY5XG.js.map +0 -1
- package/dist/feedback-6MNb2Xyk.cjs +0 -2
- package/dist/feedback-6MNb2Xyk.cjs.map +0 -1
- package/dist/feedback-CPwJaQHY.js +0 -259
- package/dist/feedback-CPwJaQHY.js.map +0 -1
- package/dist/form-CMsZo6Dm.cjs +0 -2
- package/dist/form-CMsZo6Dm.cjs.map +0 -1
- package/dist/form-WU6DcQGD.js +0 -164
- package/dist/form-WU6DcQGD.js.map +0 -1
- package/dist/frameworkTexts-BSXUtXOp.cjs +0 -2
- package/dist/frameworkTexts-BSXUtXOp.cjs.map +0 -1
- package/dist/frameworkTexts-DP5RUl19.js +0 -131
- package/dist/frameworkTexts-DP5RUl19.js.map +0 -1
- package/dist/icons-CBMl-kOM.js.map +0 -1
- package/dist/icons-D3n9-919.cjs +0 -2
- package/dist/icons-D3n9-919.cjs.map +0 -1
- package/dist/inputs-B7rGMLMr.js +0 -1753
- package/dist/inputs-B7rGMLMr.js.map +0 -1
- package/dist/inputs-BiN62hgH.cjs +0 -2
- package/dist/inputs-BiN62hgH.cjs.map +0 -1
- package/dist/layout-BMggJ_qO.cjs +0 -2
- package/dist/layout-BMggJ_qO.cjs.map +0 -1
- package/dist/layout-DBYHyCTr.js +0 -883
- package/dist/layout-DBYHyCTr.js.map +0 -1
- package/dist/licensing-Be3g-PJt.cjs +0 -2
- package/dist/licensing-Be3g-PJt.cjs.map +0 -1
- package/dist/licensing-f5KYVz7D.js.map +0 -1
- package/dist/media-BPzMgzqE.js +0 -405
- package/dist/media-BPzMgzqE.js.map +0 -1
- package/dist/media-D63hxCAJ.cjs +0 -2
- package/dist/media-D63hxCAJ.cjs.map +0 -1
- package/dist/overlays-CCeYD6hT.js +0 -555
- package/dist/overlays-CCeYD6hT.js.map +0 -1
- package/dist/overlays-CsRN5OG8.cjs +0 -2
- package/dist/overlays-CsRN5OG8.cjs.map +0 -1
- package/dist/popoverStack--0r2oJCD.js +0 -44
- package/dist/popoverStack--0r2oJCD.js.map +0 -1
- package/dist/popoverStack-BmMk-VZJ.cjs +0 -2
- package/dist/popoverStack-BmMk-VZJ.cjs.map +0 -1
- package/dist/theme-CJuqObWL.cjs +0 -2
- package/dist/theme-CJuqObWL.cjs.map +0 -1
- package/dist/theme-DAOU1aPs.js.map +0 -1
- package/dist/useGhostText-DG0bzcao.js +0 -68
- package/dist/useGhostText-DG0bzcao.js.map +0 -1
- package/dist/useGhostText-mibV4s1-.cjs +0 -2
- package/dist/useGhostText-mibV4s1-.cjs.map +0 -1
- package/dist/useKeyboardNav-CCUoRMgm.cjs +0 -2
- package/dist/useKeyboardNav-CCUoRMgm.cjs.map +0 -1
- package/dist/useKeyboardNav-iEXOdEMB.js +0 -43
- package/dist/useKeyboardNav-iEXOdEMB.js.map +0 -1
- package/dist/useModalLayer-Bf4TcEz-.js +0 -58
- package/dist/useModalLayer-Bf4TcEz-.js.map +0 -1
- package/dist/useModalLayer-DxYhhgRO.cjs +0 -2
- package/dist/useModalLayer-DxYhhgRO.cjs.map +0 -1
- package/dist/utils/proActivationWarning.d.ts +0 -7
- package/dist/validators-B6yWdsu2.cjs +0 -2
- package/dist/validators-B6yWdsu2.cjs.map +0 -1
- package/dist/validators-DVYOtFnw.js.map +0 -1
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const e=require(`./icons-D3n9-919.cjs`),t=require(`./cn-CU5TNITO.cjs`),n=require(`./useKeyboardNav-CCUoRMgm.cjs`),r=require(`./MPortal-CuBXhhl_.cjs`),i=require(`./MPopover-B3npyAkL.cjs`),a=require(`./MSurface-BjE-mL1L.cjs`),o=require(`./MText-BDI4mdw8.cjs`),s=require(`./MHeading-AYQ8_GFP.cjs`),c=require(`./MKbd-BR1GX5oK.cjs`),l=require(`./MButton-CnAr77Za.cjs`),u=require(`./frameworkTexts-BSXUtXOp.cjs`),d=require(`./MSkeleton-DPa_G_2X.cjs`),f=require(`./MStack-nc6Y_9K3.cjs`),p=require(`./MSimpleGrid-BchGYPMi.cjs`),m=require(`./MCard-P8OoswWM.cjs`),h=require(`./useModalLayer-DxYhhgRO.cjs`),g=require(`./MInputSearch-BiVI1jNc.cjs`),_=require(`./MTooltip-BAgHlv5I.cjs`);require(`./core-w629c4ND.cjs`);let v=require(`react`),y=require(`react/jsx-runtime`);var b=540;function x({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 p=(0,v.useId)(),[g,_]=(0,v.useState)(!1),[x,S]=(0,v.useState)(!1),C=(0,v.useRef)(null);return h.t({active:e&&g,containerRef:C,onEscape:l?n:void 0}),(0,v.useEffect)(()=>{e&&(_(!0),S(!1))},[e]),(0,v.useEffect)(()=>{if(!e&&g){S(!0);let e=setTimeout(()=>{_(!1),S(!1)},b);return()=>clearTimeout(e)}},[e,g]),(0,v.useEffect)(()=>{if(!g)return;let e=document.body.style.overflow;return document.body.style.overflow=`hidden`,()=>{document.body.style.overflow=e}},[g]),g?(0,y.jsx)(r.t,{children:(0,y.jsx)(`div`,{ref:C,className:t.t(`mineral-backdrop`,`modal-backdrop`,x&&`closing`),onMouseDown:e=>{c&&e.target===e.currentTarget&&n()},children:(0,y.jsx)(`div`,{className:`modal-shell`,children:(0,y.jsxs)(m.t,{className:t.t(`modal`,s,u),role:`dialog`,"aria-modal":`true`,"aria-labelledby":i?p:void 0,...f,children:[(i||a)&&(0,y.jsxs)(m.i,{children:[i&&(0,y.jsx)(`div`,{id:p,className:`modal-title`,children:i}),a&&(0,y.jsx)(`div`,{className:`modal-description`,children:a})]}),(0,y.jsx)(m.n,{children:d}),o&&(0,y.jsx)(m.r,{children:o})]})})})}):null}var S=540,C=72,w={sm:`32vh`,md:`52vh`,lg:`72vh`,full:`92vh`};function T({open:n,onClose:i,title:a,description:o,footer:s,size:c=`md`,closeOnBackdrop:d=!0,closeOnEscape:f=!0,className:p,children:g,style:_,...b}){let x=u.n(),T=(0,v.useId)(),[E,D]=(0,v.useState)(!1),[O,k]=(0,v.useState)(!1),[A,j]=(0,v.useState)(0),M=(0,v.useRef)(null),N=(0,v.useRef)(0),P=(0,v.useRef)(null);h.t({active:n&&E,containerRef:P,onEscape:f?i:void 0}),(0,v.useEffect)(()=>{n&&(D(!0),k(!1),j(0),N.current=0)},[n]),(0,v.useEffect)(()=>{if(!n&&E){k(!0);let e=window.setTimeout(()=>{D(!1),k(!1)},S);return()=>window.clearTimeout(e)}},[n,E]),(0,v.useEffect)(()=>{if(!E)return;let e=document.body.style.overflow;return document.body.style.overflow=`hidden`,()=>{document.body.style.overflow=e}},[E]);function F(e){d&&e.target===e.currentTarget&&i()}function I(e){e.preventDefault(),e.currentTarget.setPointerCapture(e.pointerId),M.current={pointerId:e.pointerId,startY:e.clientY},j(0),N.current=0}function L(e){let t=M.current;if(!t||t.pointerId!==e.pointerId)return;let n=Math.max(e.clientY-t.startY,0);N.current=n,j(n)}function R(e){let t=M.current;if(!(!t||t.pointerId!==e)){if(M.current=null,N.current>C){j(0),N.current=0,i();return}j(0),N.current=0}}if(!E)return null;let z=w[c],B=A>0?`translateY(${A}px)`:void 0;return(0,y.jsx)(r.t,{children:(0,y.jsx)(`div`,{ref:P,className:t.t(`mineral-backdrop`,`sheet-backdrop`,O&&`closing`),onMouseDown:F,children:(0,y.jsx)(`div`,{className:`sheet-shell`,style:{transform:B},children:(0,y.jsxs)(m.t,{className:t.t(`sheet`,`size-${c}`,p),role:`dialog`,"aria-modal":`true`,"aria-labelledby":a?T:void 0,style:{..._,height:c===`full`?z:void 0,maxHeight:z},...b,children:[(0,y.jsx)(`button`,{type:`button`,className:`sheet-grabber`,onPointerDown:I,onPointerMove:L,onPointerUp:e=>R(e.pointerId),onPointerCancel:e=>R(e.pointerId),"aria-label":x.dragToClose,children:(0,y.jsx)(`span`,{className:`sheet-handle`})}),(a||o)&&(0,y.jsxs)(m.i,{className:`sheet-header`,children:[(0,y.jsxs)(`div`,{className:`sheet-copy`,children:[a&&(0,y.jsx)(`div`,{id:T,className:`sheet-title`,children:a}),o&&(0,y.jsx)(`div`,{className:`sheet-description`,children:o})]}),(0,y.jsx)(l.t,{variant:`link`,color:`neutral`,iconOnly:!0,size:`sm`,onClick:i,"aria-label":x.close,className:`sheet-close`,children:(0,y.jsx)(e.Xi,{})})]}),(0,y.jsx)(m.n,{className:`sheet-body`,children:g}),s&&(0,y.jsx)(m.r,{className:`sheet-footer`,children:s})]})})})})}function E(e){return typeof e==`string`||typeof e==`number`?e.toString():``}function D(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 O(e,t){if(!t.trim())return e;let n=t.trim().toLowerCase();return e.filter(e=>[E(e.title),E(e.description),E(e.group),E(e.actionLabel),...e.keywords??[]].some(e=>e.toLowerCase().includes(n)))}function k(e){let t=new Map;return e.forEach(e=>{let n=E(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 A({items:r,featuredItems:i=[],open:u,defaultOpen:h=!1,onOpenChange:b,onSelect:x,title:S=`Command palette`,description:C,trigger:w,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,v.useState)(h),[R,z]=(0,v.useState)(``),[B,V]=(0,v.useState)(null),H=u!==void 0,U=H?u:I,W=(0,v.useRef)(null);function G(e){H||L(e),b?.(e)}let K=(0,v.useMemo)(()=>O(r,R),[r,R]),q=(0,v.useMemo)(()=>k(K),[K]),J=(0,v.useMemo)(()=>q.flatMap(e=>e.items),[q]),Y=(0,v.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,v.useEffect)(()=>{let e=e=>{D(e,A)&&(e.preventDefault(),G(!0))};return window.addEventListener(`keydown`,e),()=>{window.removeEventListener(`keydown`,e)}},[A]),(0,v.useEffect)(()=>{if(!U){$(),V(null);return}queueMicrotask(()=>W.current?.focus())},[U,$]),(0,v.useEffect)(()=>{if(Z<0||Z>=J.length){V(null);return}V(J[Z]?.id??null)},[Z,J]);function te(e){ee(e)}return(0,y.jsxs)(y.Fragment,{children:[w??(0,y.jsx)(l.t,{variant:`filled`,size:`sm`,color:`primary`,iconOnly:!0,startIcon:(0,y.jsx)(e.Zi,{}),"aria-label":typeof S==`string`?S:`Open command palette`,onClick:()=>G(!0)}),(0,y.jsx)(T,{open:U,onClose:()=>G(!1),title:S,description:C,size:P,footer:N,children:(0,y.jsxs)(`div`,{className:`command-palette-body`,children:[(0,y.jsx)(`div`,{className:`command-palette-search`,children:(0,y.jsx)(g.t,{ref:W,value:R,onChange:e=>{z(e.target.value),Q(-1)},onKeyDown:te,placeholder:j,clearable:!0,fullWidth:!0})}),(0,y.jsxs)(`div`,{className:`command-palette-grid`,children:[(0,y.jsxs)(m.t,{stretch:!1,children:[(0,y.jsxs)(m.i,{children:[(0,y.jsx)(s.t,{level:4,children:`Featured`}),(0,y.jsx)(o.t,{size:`sm`,tone:`muted`,children:`Quick launch for the most frequent dashboard actions.`})]}),(0,y.jsx)(m.n,{children:(0,y.jsx)(p.t,{columns:4,children:Y.map(t=>{let n=t.actionLabel??t.title,r=typeof n==`string`?n:E(n);return(0,y.jsx)(_.t,{content:n,children:(0,y.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,y.jsx)(e.On,{}),iconOnly:!0,"aria-label":r||void 0,onClick:()=>X(t)})},t.id)})})})]}),(0,y.jsxs)(m.t,{stretch:!1,children:[(0,y.jsxs)(m.i,{children:[(0,y.jsx)(s.t,{level:4,children:`Results`}),(0,y.jsxs)(a.n,{align:`center`,padding:`xs`,children:[(0,y.jsxs)(o.t,{size:`sm`,tone:`muted`,children:[J.length,` ready`]}),(0,y.jsx)(c.t,{children:A.toUpperCase()})]})]}),(0,y.jsx)(m.n,{children:q.length?(0,y.jsx)(f.t,{padding:`xs`,className:`command-palette-results`,children:q.map(n=>(0,y.jsxs)(f.t,{padding:`xs`,children:[(0,y.jsx)(o.t,{size:`sm`,tone:`muted`,children:n.label}),n.items.map(n=>(0,y.jsxs)(`button`,{type:`button`,className:t.t(`command-palette-item`,B===n.id&&`active`),onMouseEnter:()=>V(n.id),onClick:()=>X(n),children:[(0,y.jsx)(`span`,{className:`command-palette-item-icon`,children:n.icon??(0,y.jsx)(e.On,{})}),(0,y.jsxs)(`span`,{className:`command-palette-item-copy`,children:[(0,y.jsx)(`span`,{className:`command-palette-item-title`,children:n.title}),n.description&&(0,y.jsx)(`span`,{className:`command-palette-item-description`,children:n.description})]}),n.badge&&(0,y.jsx)(`span`,{className:`command-palette-item-badge`,children:(0,y.jsx)(d.n,{color:`primary`,size:`sm`,children:n.badge})})]},n.id))]},E(n.label)||`general`))}):(0,y.jsx)(o.t,{tone:`muted`,children:M})})]})]})]})})]})}var j=600;function M(e){return(0,v.isValidElement)(e)&&!!e.type.__drawerHeader}function N(e){return(0,v.isValidElement)(e)&&!!e.type.__drawerBody}function P(e){return(0,v.isValidElement)(e)&&!!e.type.__drawerFooter}function F({children:e}){return(0,y.jsx)(y.Fragment,{children:e})}F.__drawerHeader=!0;function I({children:e}){return(0,y.jsx)(y.Fragment,{children:e})}I.__drawerBody=!0;function L({children:e}){return(0,y.jsx)(y.Fragment,{children:e})}L.__drawerFooter=!0;function R({open:n,onClose:i,side:a=`right`,size:o=`md`,overlay:s=!0,closeOnBackdrop:c=!0,closeOnEscape:d=!0,className:f,children:p,...m}){let g=u.n(),[_,b]=(0,v.useState)(!1),[x,S]=(0,v.useState)(!1),C=(0,v.useRef)(null),w=(0,v.useId)();if(h.t({active:n&&_,containerRef:C,onEscape:d?i:void 0}),(0,v.useEffect)(()=>{n&&(b(!0),S(!1))},[n]),(0,v.useEffect)(()=>{if(!n&&_){S(!0);let e=setTimeout(()=>{b(!1),S(!1)},j);return()=>clearTimeout(e)}},[n,_]),(0,v.useEffect)(()=>{if(!_)return;let e=document.body.style.overflow;return document.body.style.overflow=`hidden`,()=>{document.body.style.overflow=e}},[_]),!_)return null;let T=e=>{c&&e.target===e.currentTarget&&i()},E=null,D=null,O=null,k=null,A=null,F=[];v.Children.forEach(p,e=>{if(M(e)){E=e.props.children,D=e.props;return}if(N(e)){O=e.props,F.push(e.props.children);return}if(P(e)){k=e.props.children,A=e.props;return}F.push(e)});let I=D??{children:void 0},L=O??{children:void 0},R=A??{children:void 0},{children:z,className:B,bordered:V=!1,...H}=I,{children:U,className:W,...G}=L,{children:K,className:q,bordered:J=!1,...Y}=R;return(0,y.jsx)(r.t,{children:(0,y.jsx)(`div`,{ref:C,className:t.t(`mineral-backdrop`,`drawer-backdrop`,!s&&`no-overlay`,x&&`closing`),onMouseDown:T,children:(0,y.jsxs)(`div`,{className:t.t(`drawer`,a,o,f),role:`dialog`,"aria-modal":`true`,"aria-labelledby":E?w:void 0,...m,children:[E&&(0,y.jsxs)(`div`,{...H,className:t.t(`drawer-header`,V&&`bordered`,B),children:[(0,y.jsx)(`div`,{id:w,className:`drawer-title`,children:E}),(0,y.jsx)(l.t,{variant:`link`,color:`neutral`,iconOnly:!0,size:`sm`,onClick:i,"aria-label":g.close,className:`close`,children:(0,y.jsx)(e.Xi,{})})]}),(0,y.jsx)(`div`,{...G,className:t.t(`drawer-body`,W),children:F}),k&&(0,y.jsx)(`div`,{...Y,className:t.t(`drawer-footer`,J&&`bordered`,q),children:k})]})})})}function z({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 g=(0,v.useCallback)(()=>{p(!1),a?.()},[p,a]),_=(0,v.useCallback)(()=>{p(!1),r()},[p,r]);return(0,y.jsxs)(i.t,{open:f,anchorRef:m,onClose:g,placement:d,className:t.t(`popconfirm`,`color-${c}`,h),children:[(0,y.jsxs)(`div`,{className:`body`,children:[u&&(0,y.jsx)(`div`,{className:`icon`,children:u}),(0,y.jsxs)(`div`,{className:`content`,children:[(0,y.jsx)(`div`,{className:`title`,children:e}),n&&(0,y.jsx)(`div`,{className:`description`,children:n})]})]}),(0,y.jsxs)(`div`,{className:`actions`,children:[(0,y.jsx)(l.t,{variant:`ghost`,size:`sm`,color:`neutral`,onClick:g,children:s}),(0,y.jsx)(l.t,{variant:`ghost`,size:`sm`,color:c,onClick:_,children:o})]})]})}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return L}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return R}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return I}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return z}});
|
|
2
|
-
//# sourceMappingURL=overlays-CsRN5OG8.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"overlays-CsRN5OG8.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, useId, useState, 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 {useModalLayer} from '../../../utils/useModalLayer'\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 titleId = useId()\n const [mounted, setMounted] = useState(false)\n const [closing, setClosing] = useState(false)\n const backdropRef = useRef<HTMLDivElement>(null)\n\n useModalLayer({active: open && mounted, containerRef: backdropRef, onEscape: closeOnEscape ? onClose : undefined})\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 (!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 ? titleId : undefined}\n {...rest}\n >\n {(title || description) && (\n <MCardHeader>\n {title && (\n <div id={titleId} 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 {useModalLayer} from '../../../utils/useModalLayer'\nimport './MSheet.css'\nimport {useMCommonTexts} from '../../../i18n/frameworkTexts'\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 texts = useMCommonTexts()\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 const backdropRef = useRef<HTMLDivElement>(null)\n\n useModalLayer({active: open && mounted, containerRef: backdropRef, onEscape: closeOnEscape ? onClose : undefined})\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 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 ref={backdropRef}\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={texts.dragToClose}\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={texts.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, useId, 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 {useModalLayer} from '../../../utils/useModalLayer'\nimport './MDrawer.css'\nimport {useMCommonTexts} from '../../../i18n/frameworkTexts'\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 texts = useMCommonTexts()\n const [mounted, setMounted] = useState(false)\n const [closing, setClosing] = useState(false)\n const backdropRef = useRef<HTMLDivElement>(null)\n const titleId = useId()\n\n useModalLayer({active: open && mounted, containerRef: backdropRef, onEscape: closeOnEscape ? onClose : undefined})\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 (!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\n className={cn('drawer', side, size, className)}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={header ? titleId : undefined}\n {...rest}\n >\n {header && (\n <div\n {...headerRest}\n className={cn('drawer-header', headerBordered && 'bordered', headerClassName)}\n >\n <div id={titleId} className=\"drawer-title\">\n {header}\n </div>\n <MButton\n variant=\"link\"\n color=\"neutral\"\n iconOnly\n size=\"sm\"\n onClick={onClose}\n aria-label={texts.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,44 +0,0 @@
|
|
|
1
|
-
//#region src/components/primitives/MPopover/popoverStack.ts
|
|
2
|
-
var e = [], t = 1;
|
|
3
|
-
function n() {
|
|
4
|
-
return t++;
|
|
5
|
-
}
|
|
6
|
-
function r(t) {
|
|
7
|
-
return e.push(t), () => {
|
|
8
|
-
let n = e.indexOf(t);
|
|
9
|
-
n !== -1 && e.splice(n, 1);
|
|
10
|
-
};
|
|
11
|
-
}
|
|
12
|
-
function i() {
|
|
13
|
-
return e.length > 0;
|
|
14
|
-
}
|
|
15
|
-
function a(t) {
|
|
16
|
-
let n = t.getAnchorEl();
|
|
17
|
-
if (!n) return null;
|
|
18
|
-
for (let r of e) {
|
|
19
|
-
if (r.id === t.id) continue;
|
|
20
|
-
let e = r.getPopoverEl();
|
|
21
|
-
if (e && e.contains(n)) return r.id;
|
|
22
|
-
}
|
|
23
|
-
return null;
|
|
24
|
-
}
|
|
25
|
-
function o(t, n) {
|
|
26
|
-
if (!n) return !1;
|
|
27
|
-
for (let r of e) {
|
|
28
|
-
if (r.id === t) continue;
|
|
29
|
-
let i = r.getPopoverEl();
|
|
30
|
-
if (!i || !i.contains(n)) continue;
|
|
31
|
-
let o = /* @__PURE__ */ new Set(), s = a(r);
|
|
32
|
-
for (; s !== null && !o.has(s);) {
|
|
33
|
-
if (s === t) return !0;
|
|
34
|
-
o.add(s);
|
|
35
|
-
let n = e.find((e) => e.id === s);
|
|
36
|
-
s = n ? a(n) : null;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
return !1;
|
|
40
|
-
}
|
|
41
|
-
//#endregion
|
|
42
|
-
export { r as i, o as n, n as r, i as t };
|
|
43
|
-
|
|
44
|
-
//# sourceMappingURL=popoverStack--0r2oJCD.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"popoverStack--0r2oJCD.js","names":[],"sources":["../src/components/primitives/MPopover/popoverStack.ts"],"sourcesContent":["/**\n * Registry of currently-open MPopover instances.\n *\n * Every popover portals its content to `document.body`, so a popover opened\n * from inside another popover is NOT a DOM descendant of its parent. That\n * breaks the naive outside-click test (`parent.contains(target)`): pressing a\n * nested dropdown item looks like an outside click to the parent, the parent\n * closes, React unmounts the nested menu mid-gesture, and the browser never\n * gets to fire `click` because mousedown and mouseup landed on different\n * elements. The action silently does nothing.\n *\n * This registry restores the nesting relation the DOM lost. Nesting is derived\n * from where each popover's ANCHOR lives, not from open order: a popover whose\n * anchor sits inside another popover's element is that popover's child. Open\n * order would misclassify two independent popovers that happen to be open at\n * the same time — clicking the newer one must still close the older one.\n */\n\nexport interface PopoverRegistration {\n id: number\n getPopoverEl: () => HTMLElement | null\n getAnchorEl: () => HTMLElement | null\n}\n\nconst registrations: PopoverRegistration[] = []\nlet nextId = 1\n\nexport function nextPopoverId(): number {\n return nextId++\n}\n\nexport function registerPopover(registration: PopoverRegistration): () => void {\n registrations.push(registration)\n return () => {\n const index = registrations.indexOf(registration)\n if (index !== -1) registrations.splice(index, 1)\n }\n}\n\n/** True while any popover is open — modal layers leave Escape to it. */\nexport function hasOpenPopovers(): boolean {\n return registrations.length > 0\n}\n\n/** The registered popover whose element contains `entry`'s anchor, if any. */\nfunction parentIdOf(entry: PopoverRegistration): number | null {\n const anchor = entry.getAnchorEl()\n if (!anchor) return null\n\n for (const other of registrations) {\n if (other.id === entry.id) continue\n const element = other.getPopoverEl()\n if (element && element.contains(anchor)) return other.id\n }\n\n return null\n}\n\n/**\n * True when `target` lies inside a popover that is nested (at any depth) within\n * the popover identified by `id`. Callers use it to keep a parent open while\n * the interaction belongs to one of its descendants.\n */\nexport function isInsideDescendantPopover(id: number, target: Node | null): boolean {\n if (!target) return false\n\n for (const entry of registrations) {\n if (entry.id === id) continue\n\n const element = entry.getPopoverEl()\n if (!element || !element.contains(target)) continue\n\n // Walk the ancestor chain of the popover that was actually hit.\n // `seen` guards against a cycle if a malformed tree ever produces one.\n const seen = new Set<number>()\n let cursor = parentIdOf(entry)\n\n while (cursor !== null && !seen.has(cursor)) {\n if (cursor === id) return true\n seen.add(cursor)\n const parent = registrations.find((candidate) => candidate.id === cursor)\n cursor = parent ? parentIdOf(parent) : null\n }\n }\n\n return false\n}\n\n/** Test-only helper — the registry is module state that outlives a render. */\nexport function __resetPopoverStack(): void {\n registrations.length = 0\n nextId = 1\n}\n"],"mappings":";AAwBA,IAAM,IAAuC,EAAE,EAC3C,IAAS;AAEb,SAAgB,IAAwB;AACpC,QAAO;;AAGX,SAAgB,EAAgB,GAA+C;AAE3E,QADA,EAAc,KAAK,EAAa,QACnB;EACT,IAAM,IAAQ,EAAc,QAAQ,EAAa;AACjD,EAAI,MAAU,MAAI,EAAc,OAAO,GAAO,EAAE;;;AAKxD,SAAgB,IAA2B;AACvC,QAAO,EAAc,SAAS;;AAIlC,SAAS,EAAW,GAA2C;CAC3D,IAAM,IAAS,EAAM,aAAa;AAClC,KAAI,CAAC,EAAQ,QAAO;AAEpB,MAAK,IAAM,KAAS,GAAe;AAC/B,MAAI,EAAM,OAAO,EAAM,GAAI;EAC3B,IAAM,IAAU,EAAM,cAAc;AACpC,MAAI,KAAW,EAAQ,SAAS,EAAO,CAAE,QAAO,EAAM;;AAG1D,QAAO;;AAQX,SAAgB,EAA0B,GAAY,GAA8B;AAChF,KAAI,CAAC,EAAQ,QAAO;AAEpB,MAAK,IAAM,KAAS,GAAe;AAC/B,MAAI,EAAM,OAAO,EAAI;EAErB,IAAM,IAAU,EAAM,cAAc;AACpC,MAAI,CAAC,KAAW,CAAC,EAAQ,SAAS,EAAO,CAAE;EAI3C,IAAM,oBAAO,IAAI,KAAa,EAC1B,IAAS,EAAW,EAAM;AAE9B,SAAO,MAAW,QAAQ,CAAC,EAAK,IAAI,EAAO,GAAE;AACzC,OAAI,MAAW,EAAI,QAAO;AAC1B,KAAK,IAAI,EAAO;GAChB,IAAM,IAAS,EAAc,MAAM,MAAc,EAAU,OAAO,EAAO;AACzE,OAAS,IAAS,EAAW,EAAO,GAAG;;;AAI/C,QAAO"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
var e=[],t=1;function n(){return t++}function r(t){return e.push(t),()=>{let n=e.indexOf(t);n!==-1&&e.splice(n,1)}}function i(){return e.length>0}function a(t){let n=t.getAnchorEl();if(!n)return null;for(let r of e){if(r.id===t.id)continue;let e=r.getPopoverEl();if(e&&e.contains(n))return r.id}return null}function o(t,n){if(!n)return!1;for(let r of e){if(r.id===t)continue;let i=r.getPopoverEl();if(!i||!i.contains(n))continue;let o=new Set,s=a(r);for(;s!==null&&!o.has(s);){if(s===t)return!0;o.add(s);let n=e.find(e=>e.id===s);s=n?a(n):null}}return!1}Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return n}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return i}});
|
|
2
|
-
//# sourceMappingURL=popoverStack-BmMk-VZJ.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"popoverStack-BmMk-VZJ.cjs","names":[],"sources":["../src/components/primitives/MPopover/popoverStack.ts"],"sourcesContent":["/**\n * Registry of currently-open MPopover instances.\n *\n * Every popover portals its content to `document.body`, so a popover opened\n * from inside another popover is NOT a DOM descendant of its parent. That\n * breaks the naive outside-click test (`parent.contains(target)`): pressing a\n * nested dropdown item looks like an outside click to the parent, the parent\n * closes, React unmounts the nested menu mid-gesture, and the browser never\n * gets to fire `click` because mousedown and mouseup landed on different\n * elements. The action silently does nothing.\n *\n * This registry restores the nesting relation the DOM lost. Nesting is derived\n * from where each popover's ANCHOR lives, not from open order: a popover whose\n * anchor sits inside another popover's element is that popover's child. Open\n * order would misclassify two independent popovers that happen to be open at\n * the same time — clicking the newer one must still close the older one.\n */\n\nexport interface PopoverRegistration {\n id: number\n getPopoverEl: () => HTMLElement | null\n getAnchorEl: () => HTMLElement | null\n}\n\nconst registrations: PopoverRegistration[] = []\nlet nextId = 1\n\nexport function nextPopoverId(): number {\n return nextId++\n}\n\nexport function registerPopover(registration: PopoverRegistration): () => void {\n registrations.push(registration)\n return () => {\n const index = registrations.indexOf(registration)\n if (index !== -1) registrations.splice(index, 1)\n }\n}\n\n/** True while any popover is open — modal layers leave Escape to it. */\nexport function hasOpenPopovers(): boolean {\n return registrations.length > 0\n}\n\n/** The registered popover whose element contains `entry`'s anchor, if any. */\nfunction parentIdOf(entry: PopoverRegistration): number | null {\n const anchor = entry.getAnchorEl()\n if (!anchor) return null\n\n for (const other of registrations) {\n if (other.id === entry.id) continue\n const element = other.getPopoverEl()\n if (element && element.contains(anchor)) return other.id\n }\n\n return null\n}\n\n/**\n * True when `target` lies inside a popover that is nested (at any depth) within\n * the popover identified by `id`. Callers use it to keep a parent open while\n * the interaction belongs to one of its descendants.\n */\nexport function isInsideDescendantPopover(id: number, target: Node | null): boolean {\n if (!target) return false\n\n for (const entry of registrations) {\n if (entry.id === id) continue\n\n const element = entry.getPopoverEl()\n if (!element || !element.contains(target)) continue\n\n // Walk the ancestor chain of the popover that was actually hit.\n // `seen` guards against a cycle if a malformed tree ever produces one.\n const seen = new Set<number>()\n let cursor = parentIdOf(entry)\n\n while (cursor !== null && !seen.has(cursor)) {\n if (cursor === id) return true\n seen.add(cursor)\n const parent = registrations.find((candidate) => candidate.id === cursor)\n cursor = parent ? parentIdOf(parent) : null\n }\n }\n\n return false\n}\n\n/** Test-only helper — the registry is module state that outlives a render. */\nexport function __resetPopoverStack(): void {\n registrations.length = 0\n nextId = 1\n}\n"],"mappings":"AAwBA,IAAM,EAAuC,EAAE,CAC3C,EAAS,EAEb,SAAgB,GAAwB,CACpC,MAAO,KAGX,SAAgB,EAAgB,EAA+C,CAE3E,OADA,EAAc,KAAK,EAAa,KACnB,CACT,IAAM,EAAQ,EAAc,QAAQ,EAAa,CAC7C,IAAU,IAAI,EAAc,OAAO,EAAO,EAAE,EAKxD,SAAgB,GAA2B,CACvC,OAAO,EAAc,OAAS,EAIlC,SAAS,EAAW,EAA2C,CAC3D,IAAM,EAAS,EAAM,aAAa,CAClC,GAAI,CAAC,EAAQ,OAAO,KAEpB,IAAK,IAAM,KAAS,EAAe,CAC/B,GAAI,EAAM,KAAO,EAAM,GAAI,SAC3B,IAAM,EAAU,EAAM,cAAc,CACpC,GAAI,GAAW,EAAQ,SAAS,EAAO,CAAE,OAAO,EAAM,GAG1D,OAAO,KAQX,SAAgB,EAA0B,EAAY,EAA8B,CAChF,GAAI,CAAC,EAAQ,MAAO,GAEpB,IAAK,IAAM,KAAS,EAAe,CAC/B,GAAI,EAAM,KAAO,EAAI,SAErB,IAAM,EAAU,EAAM,cAAc,CACpC,GAAI,CAAC,GAAW,CAAC,EAAQ,SAAS,EAAO,CAAE,SAI3C,IAAM,EAAO,IAAI,IACb,EAAS,EAAW,EAAM,CAE9B,KAAO,IAAW,MAAQ,CAAC,EAAK,IAAI,EAAO,EAAE,CACzC,GAAI,IAAW,EAAI,MAAO,GAC1B,EAAK,IAAI,EAAO,CAChB,IAAM,EAAS,EAAc,KAAM,GAAc,EAAU,KAAO,EAAO,CACzE,EAAS,EAAS,EAAW,EAAO,CAAG,MAI/C,MAAO"}
|
package/dist/theme-CJuqObWL.cjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
require(`./core-w629c4ND.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-CJuqObWL.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"theme-CJuqObWL.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 +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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"}
|
|
@@ -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-w629c4ND.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-mibV4s1-.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useGhostText-mibV4s1-.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-w629c4ND.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-CCUoRMgm.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useKeyboardNav-CCUoRMgm.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,58 +0,0 @@
|
|
|
1
|
-
import { t as e } from "./popoverStack--0r2oJCD.js";
|
|
2
|
-
import { useEffect as t, useRef as n } from "react";
|
|
3
|
-
//#region src/utils/useModalLayer.ts
|
|
4
|
-
var r = [], i = [
|
|
5
|
-
"a[href]",
|
|
6
|
-
"area[href]",
|
|
7
|
-
"button:not([disabled])",
|
|
8
|
-
"input:not([disabled]):not([type=\"hidden\"])",
|
|
9
|
-
"select:not([disabled])",
|
|
10
|
-
"textarea:not([disabled])",
|
|
11
|
-
"iframe",
|
|
12
|
-
"audio[controls]",
|
|
13
|
-
"video[controls]",
|
|
14
|
-
"[contenteditable]:not([contenteditable=\"false\"])",
|
|
15
|
-
"[tabindex]:not([tabindex=\"-1\"])"
|
|
16
|
-
].join(",");
|
|
17
|
-
function a(e) {
|
|
18
|
-
return Array.from(e.querySelectorAll(i)).filter((e) => !e.closest("[inert]") && (typeof e.checkVisibility == "function" ? e.checkVisibility() : !0));
|
|
19
|
-
}
|
|
20
|
-
function o({ active: i, containerRef: o, onEscape: s }) {
|
|
21
|
-
let c = n(s);
|
|
22
|
-
t(() => {
|
|
23
|
-
c.current = s;
|
|
24
|
-
}, [s]), t(() => {
|
|
25
|
-
if (!i || typeof document > "u") return;
|
|
26
|
-
let t = {};
|
|
27
|
-
r.push(t);
|
|
28
|
-
let n = () => r[r.length - 1] === t, s = document.activeElement instanceof HTMLElement ? document.activeElement : null, l = o.current, u = l?.querySelector("[role=\"dialog\"]") ?? l;
|
|
29
|
-
u && !u.contains(document.activeElement) && (u.hasAttribute("tabindex") || u.setAttribute("tabindex", "-1"), (u.querySelector("[autofocus], [data-autofocus]") ?? u).focus({ preventScroll: !0 }));
|
|
30
|
-
let d = (t) => {
|
|
31
|
-
if (!n() || t.defaultPrevented) return;
|
|
32
|
-
if (t.key === "Escape") {
|
|
33
|
-
if (e() || !c.current) return;
|
|
34
|
-
c.current();
|
|
35
|
-
return;
|
|
36
|
-
}
|
|
37
|
-
if (t.key !== "Tab" || !u) return;
|
|
38
|
-
let r = document.activeElement;
|
|
39
|
-
if (r && !u.contains(r) && r.closest(".popover")) return;
|
|
40
|
-
let i = a(u);
|
|
41
|
-
if (i.length === 0) {
|
|
42
|
-
t.preventDefault(), u.focus({ preventScroll: !0 });
|
|
43
|
-
return;
|
|
44
|
-
}
|
|
45
|
-
let o = i[0], s = i[i.length - 1], l = !r || !u.contains(r) || r === u;
|
|
46
|
-
t.shiftKey && (l || r === o) ? (t.preventDefault(), s.focus()) : !t.shiftKey && (l || r === s) && (t.preventDefault(), o.focus());
|
|
47
|
-
};
|
|
48
|
-
return document.addEventListener("keydown", d), () => {
|
|
49
|
-
document.removeEventListener("keydown", d);
|
|
50
|
-
let e = r.indexOf(t);
|
|
51
|
-
e !== -1 && r.splice(e, 1), s && s.isConnected && s.focus({ preventScroll: !0 });
|
|
52
|
-
};
|
|
53
|
-
}, [i, o]);
|
|
54
|
-
}
|
|
55
|
-
//#endregion
|
|
56
|
-
export { o as t };
|
|
57
|
-
|
|
58
|
-
//# sourceMappingURL=useModalLayer-Bf4TcEz-.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useModalLayer-Bf4TcEz-.js","names":[],"sources":["../src/utils/useModalLayer.ts"],"sourcesContent":["import {useEffect, useRef} from 'react'\nimport type {RefObject} from 'react'\nimport {hasOpenPopovers} from '../components/primitives/MPopover/popoverStack'\n\n/**\n * Shared behaviour of blocking overlays (MModal, MDrawer, MSheet, MMediaLightbox).\n *\n * Open layers form a stack, so with a drawer opened from a modal only the top one\n * reacts to Escape and owns the Tab cycle. Focus moves into the dialog on open,\n * stays inside it while it is the top layer and returns to the opener on close.\n */\n\nconst layers: object[] = []\n\nconst FOCUSABLE = [\n 'a[href]',\n 'area[href]',\n 'button:not([disabled])',\n 'input:not([disabled]):not([type=\"hidden\"])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n 'iframe',\n 'audio[controls]',\n 'video[controls]',\n '[contenteditable]:not([contenteditable=\"false\"])',\n '[tabindex]:not([tabindex=\"-1\"])',\n].join(',')\n\nfunction getFocusable(container: HTMLElement): HTMLElement[] {\n return Array.from(container.querySelectorAll<HTMLElement>(FOCUSABLE)).filter(\n (element) =>\n !element.closest('[inert]') &&\n (typeof element.checkVisibility === 'function' ? element.checkVisibility() : true)\n )\n}\n\nexport interface UseModalLayerOptions {\n /** True while the overlay is mounted and open (not while it animates out). */\n active: boolean\n /** Element wrapping the whole overlay; the dialog is the `[role=\"dialog\"]` inside it. */\n containerRef: RefObject<HTMLElement | null>\n /** Called on Escape when this is the top layer. Omit to ignore Escape. */\n onEscape?: () => void\n}\n\nexport function useModalLayer({active, containerRef, onEscape}: UseModalLayerOptions): void {\n const onEscapeRef = useRef(onEscape)\n useEffect(() => {\n onEscapeRef.current = onEscape\n }, [onEscape])\n\n useEffect(() => {\n if (!active || typeof document === 'undefined') return\n\n const token = {}\n layers.push(token)\n const isTop = () => layers[layers.length - 1] === token\n\n const opener = document.activeElement instanceof HTMLElement ? document.activeElement : null\n const container = containerRef.current\n const dialog = container?.querySelector<HTMLElement>('[role=\"dialog\"]') ?? container\n\n if (dialog && !dialog.contains(document.activeElement)) {\n if (!dialog.hasAttribute('tabindex')) dialog.setAttribute('tabindex', '-1')\n const preferred = dialog.querySelector<HTMLElement>('[autofocus], [data-autofocus]')\n ;(preferred ?? dialog).focus({preventScroll: true})\n }\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (!isTop() || event.defaultPrevented) return\n\n if (event.key === 'Escape') {\n // An open select/menu inside the dialog closes first.\n if (hasOpenPopovers() || !onEscapeRef.current) return\n onEscapeRef.current()\n return\n }\n\n if (event.key !== 'Tab' || !dialog) return\n\n const activeElement = document.activeElement as HTMLElement | null\n // Popovers portal outside the dialog; leave their own Tab handling alone.\n if (activeElement && !dialog.contains(activeElement) && activeElement.closest('.popover')) return\n\n const focusable = getFocusable(dialog)\n if (focusable.length === 0) {\n event.preventDefault()\n dialog.focus({preventScroll: true})\n return\n }\n\n const first = focusable[0]\n const last = focusable[focusable.length - 1]\n const outside = !activeElement || !dialog.contains(activeElement) || activeElement === dialog\n\n if (event.shiftKey && (outside || activeElement === first)) {\n event.preventDefault()\n last.focus()\n } else if (!event.shiftKey && (outside || activeElement === last)) {\n event.preventDefault()\n first.focus()\n }\n }\n\n document.addEventListener('keydown', handleKeyDown)\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown)\n const index = layers.indexOf(token)\n if (index !== -1) layers.splice(index, 1)\n if (opener && opener.isConnected) opener.focus({preventScroll: true})\n }\n }, [active, containerRef])\n}\n"],"mappings":";;;AAYA,IAAM,IAAmB,EAAE,EAErB,IAAY;CACd;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACH,CAAC,KAAK,IAAI;AAEX,SAAS,EAAa,GAAuC;AACzD,QAAO,MAAM,KAAK,EAAU,iBAA8B,EAAU,CAAC,CAAC,QACjE,MACG,CAAC,EAAQ,QAAQ,UAAU,KAC1B,OAAO,EAAQ,mBAAoB,aAAa,EAAQ,iBAAiB,GAAG,IACpF;;AAYL,SAAgB,EAAc,EAAC,WAAQ,iBAAc,eAAuC;CACxF,IAAM,IAAc,EAAO,EAAS;AAKpC,CAJA,QAAgB;AACZ,IAAY,UAAU;IACvB,CAAC,EAAS,CAAC,EAEd,QAAgB;AACZ,MAAI,CAAC,KAAU,OAAO,WAAa,IAAa;EAEhD,IAAM,IAAQ,EAAE;AAChB,IAAO,KAAK,EAAM;EAClB,IAAM,UAAc,EAAO,EAAO,SAAS,OAAO,GAE5C,IAAS,SAAS,yBAAyB,cAAc,SAAS,gBAAgB,MAClF,IAAY,EAAa,SACzB,IAAS,GAAW,cAA2B,oBAAkB,IAAI;AAE3E,EAAI,KAAU,CAAC,EAAO,SAAS,SAAS,cAAc,KAC7C,EAAO,aAAa,WAAW,IAAE,EAAO,aAAa,YAAY,KAAK,GACzD,EAAO,cAA2B,gCAAgC,IACrE,GAAQ,MAAM,EAAC,eAAe,IAAK,CAAC;EAGvD,IAAM,KAAiB,MAAyB;AAC5C,OAAI,CAAC,GAAO,IAAI,EAAM,iBAAkB;AAExC,OAAI,EAAM,QAAQ,UAAU;AAExB,QAAI,GAAiB,IAAI,CAAC,EAAY,QAAS;AAC/C,MAAY,SAAS;AACrB;;AAGJ,OAAI,EAAM,QAAQ,SAAS,CAAC,EAAQ;GAEpC,IAAM,IAAgB,SAAS;AAE/B,OAAI,KAAiB,CAAC,EAAO,SAAS,EAAc,IAAI,EAAc,QAAQ,WAAW,CAAE;GAE3F,IAAM,IAAY,EAAa,EAAO;AACtC,OAAI,EAAU,WAAW,GAAG;AAExB,IADA,EAAM,gBAAgB,EACtB,EAAO,MAAM,EAAC,eAAe,IAAK,CAAC;AACnC;;GAGJ,IAAM,IAAQ,EAAU,IAClB,IAAO,EAAU,EAAU,SAAS,IACpC,IAAU,CAAC,KAAiB,CAAC,EAAO,SAAS,EAAc,IAAI,MAAkB;AAEvF,GAAI,EAAM,aAAa,KAAW,MAAkB,MAChD,EAAM,gBAAgB,EACtB,EAAK,OAAO,IACL,CAAC,EAAM,aAAa,KAAW,MAAkB,OACxD,EAAM,gBAAgB,EACtB,EAAM,OAAO;;AAMrB,SAFA,SAAS,iBAAiB,WAAW,EAAc,QAEtC;AACT,YAAS,oBAAoB,WAAW,EAAc;GACtD,IAAM,IAAQ,EAAO,QAAQ,EAAM;AAEnC,GADI,MAAU,MAAI,EAAO,OAAO,GAAO,EAAE,EACrC,KAAU,EAAO,eAAa,EAAO,MAAM,EAAC,eAAe,IAAK,CAAC;;IAE1E,CAAC,GAAQ,EAAa,CAAC"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const e=require(`./popoverStack-BmMk-VZJ.cjs`);require(`./core-w629c4ND.cjs`);let t=require(`react`);var n=[],r=[`a[href]`,`area[href]`,`button:not([disabled])`,`input:not([disabled]):not([type="hidden"])`,`select:not([disabled])`,`textarea:not([disabled])`,`iframe`,`audio[controls]`,`video[controls]`,`[contenteditable]:not([contenteditable="false"])`,`[tabindex]:not([tabindex="-1"])`].join(`,`);function i(e){return Array.from(e.querySelectorAll(r)).filter(e=>!e.closest(`[inert]`)&&(typeof e.checkVisibility==`function`?e.checkVisibility():!0))}function a({active:r,containerRef:a,onEscape:o}){let s=(0,t.useRef)(o);(0,t.useEffect)(()=>{s.current=o},[o]),(0,t.useEffect)(()=>{if(!r||typeof document>`u`)return;let t={};n.push(t);let o=()=>n[n.length-1]===t,c=document.activeElement instanceof HTMLElement?document.activeElement:null,l=a.current,u=l?.querySelector(`[role="dialog"]`)??l;u&&!u.contains(document.activeElement)&&(u.hasAttribute(`tabindex`)||u.setAttribute(`tabindex`,`-1`),(u.querySelector(`[autofocus], [data-autofocus]`)??u).focus({preventScroll:!0}));let d=t=>{if(!o()||t.defaultPrevented)return;if(t.key===`Escape`){if(e.t()||!s.current)return;s.current();return}if(t.key!==`Tab`||!u)return;let n=document.activeElement;if(n&&!u.contains(n)&&n.closest(`.popover`))return;let r=i(u);if(r.length===0){t.preventDefault(),u.focus({preventScroll:!0});return}let a=r[0],c=r[r.length-1],l=!n||!u.contains(n)||n===u;t.shiftKey&&(l||n===a)?(t.preventDefault(),c.focus()):!t.shiftKey&&(l||n===c)&&(t.preventDefault(),a.focus())};return document.addEventListener(`keydown`,d),()=>{document.removeEventListener(`keydown`,d);let e=n.indexOf(t);e!==-1&&n.splice(e,1),c&&c.isConnected&&c.focus({preventScroll:!0})}},[r,a])}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return a}});
|
|
2
|
-
//# sourceMappingURL=useModalLayer-DxYhhgRO.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useModalLayer-DxYhhgRO.cjs","names":[],"sources":["../src/utils/useModalLayer.ts"],"sourcesContent":["import {useEffect, useRef} from 'react'\nimport type {RefObject} from 'react'\nimport {hasOpenPopovers} from '../components/primitives/MPopover/popoverStack'\n\n/**\n * Shared behaviour of blocking overlays (MModal, MDrawer, MSheet, MMediaLightbox).\n *\n * Open layers form a stack, so with a drawer opened from a modal only the top one\n * reacts to Escape and owns the Tab cycle. Focus moves into the dialog on open,\n * stays inside it while it is the top layer and returns to the opener on close.\n */\n\nconst layers: object[] = []\n\nconst FOCUSABLE = [\n 'a[href]',\n 'area[href]',\n 'button:not([disabled])',\n 'input:not([disabled]):not([type=\"hidden\"])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n 'iframe',\n 'audio[controls]',\n 'video[controls]',\n '[contenteditable]:not([contenteditable=\"false\"])',\n '[tabindex]:not([tabindex=\"-1\"])',\n].join(',')\n\nfunction getFocusable(container: HTMLElement): HTMLElement[] {\n return Array.from(container.querySelectorAll<HTMLElement>(FOCUSABLE)).filter(\n (element) =>\n !element.closest('[inert]') &&\n (typeof element.checkVisibility === 'function' ? element.checkVisibility() : true)\n )\n}\n\nexport interface UseModalLayerOptions {\n /** True while the overlay is mounted and open (not while it animates out). */\n active: boolean\n /** Element wrapping the whole overlay; the dialog is the `[role=\"dialog\"]` inside it. */\n containerRef: RefObject<HTMLElement | null>\n /** Called on Escape when this is the top layer. Omit to ignore Escape. */\n onEscape?: () => void\n}\n\nexport function useModalLayer({active, containerRef, onEscape}: UseModalLayerOptions): void {\n const onEscapeRef = useRef(onEscape)\n useEffect(() => {\n onEscapeRef.current = onEscape\n }, [onEscape])\n\n useEffect(() => {\n if (!active || typeof document === 'undefined') return\n\n const token = {}\n layers.push(token)\n const isTop = () => layers[layers.length - 1] === token\n\n const opener = document.activeElement instanceof HTMLElement ? document.activeElement : null\n const container = containerRef.current\n const dialog = container?.querySelector<HTMLElement>('[role=\"dialog\"]') ?? container\n\n if (dialog && !dialog.contains(document.activeElement)) {\n if (!dialog.hasAttribute('tabindex')) dialog.setAttribute('tabindex', '-1')\n const preferred = dialog.querySelector<HTMLElement>('[autofocus], [data-autofocus]')\n ;(preferred ?? dialog).focus({preventScroll: true})\n }\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (!isTop() || event.defaultPrevented) return\n\n if (event.key === 'Escape') {\n // An open select/menu inside the dialog closes first.\n if (hasOpenPopovers() || !onEscapeRef.current) return\n onEscapeRef.current()\n return\n }\n\n if (event.key !== 'Tab' || !dialog) return\n\n const activeElement = document.activeElement as HTMLElement | null\n // Popovers portal outside the dialog; leave their own Tab handling alone.\n if (activeElement && !dialog.contains(activeElement) && activeElement.closest('.popover')) return\n\n const focusable = getFocusable(dialog)\n if (focusable.length === 0) {\n event.preventDefault()\n dialog.focus({preventScroll: true})\n return\n }\n\n const first = focusable[0]\n const last = focusable[focusable.length - 1]\n const outside = !activeElement || !dialog.contains(activeElement) || activeElement === dialog\n\n if (event.shiftKey && (outside || activeElement === first)) {\n event.preventDefault()\n last.focus()\n } else if (!event.shiftKey && (outside || activeElement === last)) {\n event.preventDefault()\n first.focus()\n }\n }\n\n document.addEventListener('keydown', handleKeyDown)\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown)\n const index = layers.indexOf(token)\n if (index !== -1) layers.splice(index, 1)\n if (opener && opener.isConnected) opener.focus({preventScroll: true})\n }\n }, [active, containerRef])\n}\n"],"mappings":"qGAYA,IAAM,EAAmB,EAAE,CAErB,EAAY,CACd,UACA,aACA,yBACA,6CACA,yBACA,2BACA,SACA,kBACA,kBACA,mDACA,kCACH,CAAC,KAAK,IAAI,CAEX,SAAS,EAAa,EAAuC,CACzD,OAAO,MAAM,KAAK,EAAU,iBAA8B,EAAU,CAAC,CAAC,OACjE,GACG,CAAC,EAAQ,QAAQ,UAAU,GAC1B,OAAO,EAAQ,iBAAoB,WAAa,EAAQ,iBAAiB,CAAG,IACpF,CAYL,SAAgB,EAAc,CAAC,SAAQ,eAAc,YAAuC,CACxF,IAAM,GAAA,EAAA,EAAA,QAAqB,EAAS,EACpC,EAAA,EAAA,eAAgB,CACZ,EAAY,QAAU,GACvB,CAAC,EAAS,CAAC,EAEd,EAAA,EAAA,eAAgB,CACZ,GAAI,CAAC,GAAU,OAAO,SAAa,IAAa,OAEhD,IAAM,EAAQ,EAAE,CAChB,EAAO,KAAK,EAAM,CAClB,IAAM,MAAc,EAAO,EAAO,OAAS,KAAO,EAE5C,EAAS,SAAS,yBAAyB,YAAc,SAAS,cAAgB,KAClF,EAAY,EAAa,QACzB,EAAS,GAAW,cAA2B,kBAAkB,EAAI,EAEvE,GAAU,CAAC,EAAO,SAAS,SAAS,cAAc,GAC7C,EAAO,aAAa,WAAW,EAAE,EAAO,aAAa,WAAY,KAAK,EACzD,EAAO,cAA2B,gCAAgC,EACrE,GAAQ,MAAM,CAAC,cAAe,GAAK,CAAC,EAGvD,IAAM,EAAiB,GAAyB,CAC5C,GAAI,CAAC,GAAO,EAAI,EAAM,iBAAkB,OAExC,GAAI,EAAM,MAAQ,SAAU,CAExB,GAAI,EAAA,GAAiB,EAAI,CAAC,EAAY,QAAS,OAC/C,EAAY,SAAS,CACrB,OAGJ,GAAI,EAAM,MAAQ,OAAS,CAAC,EAAQ,OAEpC,IAAM,EAAgB,SAAS,cAE/B,GAAI,GAAiB,CAAC,EAAO,SAAS,EAAc,EAAI,EAAc,QAAQ,WAAW,CAAE,OAE3F,IAAM,EAAY,EAAa,EAAO,CACtC,GAAI,EAAU,SAAW,EAAG,CACxB,EAAM,gBAAgB,CACtB,EAAO,MAAM,CAAC,cAAe,GAAK,CAAC,CACnC,OAGJ,IAAM,EAAQ,EAAU,GAClB,EAAO,EAAU,EAAU,OAAS,GACpC,EAAU,CAAC,GAAiB,CAAC,EAAO,SAAS,EAAc,EAAI,IAAkB,EAEnF,EAAM,WAAa,GAAW,IAAkB,IAChD,EAAM,gBAAgB,CACtB,EAAK,OAAO,EACL,CAAC,EAAM,WAAa,GAAW,IAAkB,KACxD,EAAM,gBAAgB,CACtB,EAAM,OAAO,GAMrB,OAFA,SAAS,iBAAiB,UAAW,EAAc,KAEtC,CACT,SAAS,oBAAoB,UAAW,EAAc,CACtD,IAAM,EAAQ,EAAO,QAAQ,EAAM,CAC/B,IAAU,IAAI,EAAO,OAAO,EAAO,EAAE,CACrC,GAAU,EAAO,aAAa,EAAO,MAAM,CAAC,cAAe,GAAK,CAAC,GAE1E,CAAC,EAAQ,EAAa,CAAC"}
|