@banzamel/mineralui 1.1.0 → 1.2.0
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-BDfA-fQT.js → MAvatar-BoO51a6m.js} +4 -4
- package/dist/{MAvatar-BDfA-fQT.js.map → MAvatar-BoO51a6m.js.map} +1 -1
- package/dist/{MAvatar-C8tWuy5K.cjs → MAvatar-DJKtca9j.cjs} +2 -2
- package/dist/{MAvatar-C8tWuy5K.cjs.map → MAvatar-DJKtca9j.cjs.map} +1 -1
- package/dist/{MBadge-Babyr1R9.cjs → MBadge-CexVV675.cjs} +2 -2
- package/dist/MBadge-CexVV675.cjs.map +1 -0
- package/dist/{MBadge-BjZX0MIC.js → MBadge-Y1JnZiIC.js} +2 -2
- package/dist/MBadge-Y1JnZiIC.js.map +1 -0
- package/dist/{MButton-C_WTyNvw.cjs → MButton-B8rXmFX9.cjs} +2 -2
- package/dist/{MButton-C_WTyNvw.cjs.map → MButton-B8rXmFX9.cjs.map} +1 -1
- package/dist/{MButton-33EzpGvQ.js → MButton-BmTDe5Oa.js} +3 -3
- package/dist/{MButton-33EzpGvQ.js.map → MButton-BmTDe5Oa.js.map} +1 -1
- package/dist/{MCheckbox-DW-liYve.js → MCheckbox-B7SpcD4H.js} +3 -3
- package/dist/{MCheckbox-DW-liYve.js.map → MCheckbox-B7SpcD4H.js.map} +1 -1
- package/dist/{MCheckbox-9WMKKIUO.cjs → MCheckbox-Bea3orrs.cjs} +2 -2
- package/dist/{MCheckbox-9WMKKIUO.cjs.map → MCheckbox-Bea3orrs.cjs.map} +1 -1
- package/dist/{MCookieBootstrap-v2JRvgUH.js → MCookieBootstrap-CNYLvKjW.js} +1 -1
- package/dist/{MCookieBootstrap-v2JRvgUH.js.map → MCookieBootstrap-CNYLvKjW.js.map} +1 -1
- package/dist/{MCookieBootstrap-I7jiqvBM.cjs → MCookieBootstrap-DSOT4FQo.cjs} +1 -1
- package/dist/{MCookieBootstrap-I7jiqvBM.cjs.map → MCookieBootstrap-DSOT4FQo.cjs.map} +1 -1
- package/dist/MDataTable-BI7wFZYN.cjs +2 -0
- package/dist/{MDataTable-B0QbAjVI.cjs.map → MDataTable-BI7wFZYN.cjs.map} +1 -1
- package/dist/{MDataTable-C-CRvZ45.js → MDataTable-Cqwkiq7A.js} +13 -15
- package/dist/{MDataTable-C-CRvZ45.js.map → MDataTable-Cqwkiq7A.js.map} +1 -1
- package/dist/MDrawer-CSvjLrhB.cjs +2 -0
- package/dist/{MDrawer-_Bao-x1w.cjs.map → MDrawer-CSvjLrhB.cjs.map} +1 -1
- package/dist/{MDrawer-CHbmY08J.js → MDrawer-DXHtAckQ.js} +5 -5
- package/dist/{MDrawer-CHbmY08J.js.map → MDrawer-DXHtAckQ.js.map} +1 -1
- package/dist/{MDropdownMenu-D3O3-l8O.js → MDropdownMenu-CxBhYxQb.js} +4 -4
- package/dist/{MDropdownMenu-D3O3-l8O.js.map → MDropdownMenu-CxBhYxQb.js.map} +1 -1
- package/dist/{MDropdownMenu-Bd6MfUmF.cjs → MDropdownMenu-X7ywPqth.cjs} +2 -2
- package/dist/{MDropdownMenu-Bd6MfUmF.cjs.map → MDropdownMenu-X7ywPqth.cjs.map} +1 -1
- package/dist/{illustrations.entry-DtMxssXq.cjs → MGalleryIllustration-CeOMHzpt.cjs} +2 -2
- package/dist/MGalleryIllustration-CeOMHzpt.cjs.map +1 -0
- package/dist/{illustrations.entry-C0rSNpF1.js → MGalleryIllustration-D7CVMSwO.js} +2 -2
- package/dist/{illustrations.entry-DtMxssXq.cjs.map → MGalleryIllustration-D7CVMSwO.js.map} +1 -1
- package/dist/{MHeading-BlDlbYcY.js → MHeading-C3IgV22T.js} +3 -3
- package/dist/{MHeading-BlDlbYcY.js.map → MHeading-C3IgV22T.js.map} +1 -1
- package/dist/{MHeading-7-5TESyc.cjs → MHeading-DqvWKia1.cjs} +2 -2
- package/dist/{MHeading-7-5TESyc.cjs.map → MHeading-DqvWKia1.cjs.map} +1 -1
- package/dist/{MImage-C99xrQQ9.js → MImage-BDcrV6IC.js} +4 -4
- package/dist/MImage-BDcrV6IC.js.map +1 -0
- package/dist/{MImage-DbianX0t.cjs → MImage-BsQJ_eYf.cjs} +2 -2
- package/dist/MImage-BsQJ_eYf.cjs.map +1 -0
- package/dist/{MInline-Bvfuvqsf.cjs → MInline-BAhu2zT-.cjs} +2 -2
- package/dist/{MInline-Bvfuvqsf.cjs.map → MInline-BAhu2zT-.cjs.map} +1 -1
- package/dist/{MInline-NJeL5tcC.js → MInline-Dfy3Lrjs.js} +4 -4
- package/dist/{MInline-NJeL5tcC.js.map → MInline-Dfy3Lrjs.js.map} +1 -1
- package/dist/{MInput-OmuQ2Tds.js → MInput-BSaKw0Uc.js} +6 -6
- package/dist/{MInput-OmuQ2Tds.js.map → MInput-BSaKw0Uc.js.map} +1 -1
- package/dist/MInput-W7DJQ_ng.cjs +2 -0
- package/dist/{MInput-Bpkn3gOQ.cjs.map → MInput-W7DJQ_ng.cjs.map} +1 -1
- package/dist/MInputCVC-DH_bjV5R.cjs +2 -0
- package/dist/MInputCVC-DH_bjV5R.cjs.map +1 -0
- package/dist/{MInputCVC-CcG_KJvq.js → MInputCVC-Dqbl1zG9.js} +21 -23
- package/dist/MInputCVC-Dqbl1zG9.js.map +1 -0
- package/dist/MInputSearch-C7betxTa.cjs +2 -0
- package/dist/{MInputSearch-APMIHkYb.cjs.map → MInputSearch-C7betxTa.cjs.map} +1 -1
- package/dist/{MInputSearch-k2ESY4ZG.js → MInputSearch-CH5ZcjLq.js} +4 -4
- package/dist/{MInputSearch-k2ESY4ZG.js.map → MInputSearch-CH5ZcjLq.js.map} +1 -1
- package/dist/{MLink-B4JrRZ29.cjs → MLink-DHryXq_D.cjs} +2 -2
- package/dist/{MLink-B4JrRZ29.cjs.map → MLink-DHryXq_D.cjs.map} +1 -1
- package/dist/{MLink-_WcD95E0.js → MLink-ODytrwne.js} +2 -2
- package/dist/{MLink-_WcD95E0.js.map → MLink-ODytrwne.js.map} +1 -1
- package/dist/{MModal-Dni2MR1n.js → MModal-DShADuLw.js} +4 -4
- package/dist/{MModal-Dni2MR1n.js.map → MModal-DShADuLw.js.map} +1 -1
- package/dist/{MModal-D-3jQ-c5.cjs → MModal-pMcPs3pw.cjs} +2 -2
- package/dist/{MModal-D-3jQ-c5.cjs.map → MModal-pMcPs3pw.cjs.map} +1 -1
- package/dist/{MPagination-DCeU7MHM.js → MPagination-B7aho7rQ.js} +8 -8
- package/dist/{MPagination-DCeU7MHM.js.map → MPagination-B7aho7rQ.js.map} +1 -1
- package/dist/MPagination-BWHAVgWN.cjs +2 -0
- package/dist/{MPagination-3fsF3pCM.cjs.map → MPagination-BWHAVgWN.cjs.map} +1 -1
- package/dist/{MPopover-DKBdLfrw.js → MPopover-BC9C5967.js} +3 -3
- package/dist/{MPopover-DKBdLfrw.js.map → MPopover-BC9C5967.js.map} +1 -1
- package/dist/{MPopover-BXPkE575.cjs → MPopover-C3-fGAke.cjs} +2 -2
- package/dist/{MPopover-BXPkE575.cjs.map → MPopover-C3-fGAke.cjs.map} +1 -1
- package/dist/{MPortal-CbpNkzfC.js → MPortal-Dqlkh3hw.js} +1 -1
- package/dist/{MPortal-CbpNkzfC.js.map → MPortal-Dqlkh3hw.js.map} +1 -1
- package/dist/{MPortal-BysJLuEi.cjs → MPortal-PyRKsZxc.cjs} +1 -1
- package/dist/{MPortal-BysJLuEi.cjs.map → MPortal-PyRKsZxc.cjs.map} +1 -1
- package/dist/{MQrCode-DGq8ktvf.js → MQrCode-6Cz9B7Qy.js} +15 -16
- package/dist/{MQrCode-DGq8ktvf.js.map → MQrCode-6Cz9B7Qy.js.map} +1 -1
- package/dist/MQrCode-Bp2CWpmX.cjs +2 -0
- package/dist/{MQrCode-ClP7YJFt.cjs.map → MQrCode-Bp2CWpmX.cjs.map} +1 -1
- package/dist/{MSkeleton-CRgCZZqm.cjs → MSkeleton-BfRBJ6ku.cjs} +2 -2
- package/dist/{MSkeleton-CRgCZZqm.cjs.map → MSkeleton-BfRBJ6ku.cjs.map} +1 -1
- package/dist/{MSkeleton-QQ8Lk3Cr.js → MSkeleton-CauCfkzj.js} +4 -4
- package/dist/{MSkeleton-QQ8Lk3Cr.js.map → MSkeleton-CauCfkzj.js.map} +1 -1
- package/dist/{MSlider-DNAOirz9.cjs → MSlider-BCMJkvcA.cjs} +2 -2
- package/dist/{MSlider-DNAOirz9.cjs.map → MSlider-BCMJkvcA.cjs.map} +1 -1
- package/dist/{MSlider-C65mv2h1.js → MSlider-CqrusKJQ.js} +2 -2
- package/dist/{MSlider-C65mv2h1.js.map → MSlider-CqrusKJQ.js.map} +1 -1
- package/dist/{MSparkline-lRq3gAYU.cjs → MSparkline-BOaNmbeB.cjs} +2 -2
- package/dist/MSparkline-BOaNmbeB.cjs.map +1 -0
- package/dist/{MSparkline-LfEfA310.js → MSparkline-Cb_EwR-E.js} +2 -2
- package/dist/MSparkline-Cb_EwR-E.js.map +1 -0
- package/dist/{MStack-CuUE9u4h.js → MStack-Cifiqeb2.js} +4 -4
- package/dist/{MStack-CuUE9u4h.js.map → MStack-Cifiqeb2.js.map} +1 -1
- package/dist/{MStack-CFZf6I8F.cjs → MStack-lrvy7l3w.cjs} +2 -2
- package/dist/{MStack-CFZf6I8F.cjs.map → MStack-lrvy7l3w.cjs.map} +1 -1
- package/dist/{MSubText-Dr0rAnX7.cjs → MSubText-78oYdJQy.cjs} +2 -2
- package/dist/{MSubText-Dr0rAnX7.cjs.map → MSubText-78oYdJQy.cjs.map} +1 -1
- package/dist/{MSubText-BxDWVjjs.js → MSubText-C2oxXwKT.js} +3 -3
- package/dist/{MSubText-BxDWVjjs.js.map → MSubText-C2oxXwKT.js.map} +1 -1
- package/dist/{MSurface-BiusHYSB.js → MSurface-B1LXFczo.js} +4 -4
- package/dist/{MSurface-BiusHYSB.js.map → MSurface-B1LXFczo.js.map} +1 -1
- package/dist/{MSurface-BlCLcifq.cjs → MSurface-BgZ86iYn.cjs} +2 -2
- package/dist/{MSurface-BlCLcifq.cjs.map → MSurface-BgZ86iYn.cjs.map} +1 -1
- package/dist/MTag-C4_rBj4b.cjs +2 -0
- package/dist/{MTag-BMi1GS7v.cjs.map → MTag-C4_rBj4b.cjs.map} +1 -1
- package/dist/{MTag-Cor8ZIW3.js → MTag-DOcKm3c2.js} +4 -4
- package/dist/{MTag-Cor8ZIW3.js.map → MTag-DOcKm3c2.js.map} +1 -1
- package/dist/{MText-DEKnLtLk.cjs → MText-CxSZ2md0.cjs} +2 -2
- package/dist/{MText-DEKnLtLk.cjs.map → MText-CxSZ2md0.cjs.map} +1 -1
- package/dist/{MText-lZjEtV_i.js → MText-DX9O7gh7.js} +3 -3
- package/dist/{MText-lZjEtV_i.js.map → MText-DX9O7gh7.js.map} +1 -1
- package/dist/{MTimeAgo-Ci8UkEEk.cjs → MTimeAgo-91_ndjxU.cjs} +2 -2
- package/dist/{MTimeAgo-Ci8UkEEk.cjs.map → MTimeAgo-91_ndjxU.cjs.map} +1 -1
- package/dist/{MTimeAgo-4pfAn0iE.js → MTimeAgo-xxl53mct.js} +4 -4
- package/dist/{MTimeAgo-4pfAn0iE.js.map → MTimeAgo-xxl53mct.js.map} +1 -1
- package/dist/{MToggle-CndejlPX.js → MToggle-B6emKoKq.js} +3 -3
- package/dist/{MToggle-CndejlPX.js.map → MToggle-B6emKoKq.js.map} +1 -1
- package/dist/{MToggle-Dom6azGw.cjs → MToggle-CsGS_W3X.cjs} +2 -2
- package/dist/{MToggle-Dom6azGw.cjs.map → MToggle-CsGS_W3X.cjs.map} +1 -1
- package/dist/{MTooltip-CsJogGMW.cjs → MTooltip-CNXoyQEN.cjs} +2 -2
- package/dist/{MTooltip-CsJogGMW.cjs.map → MTooltip-CNXoyQEN.cjs.map} +1 -1
- package/dist/{MTooltip-DIqh59S2.js → MTooltip-UYOjDBOu.js} +3 -3
- package/dist/{MTooltip-DIqh59S2.js.map → MTooltip-UYOjDBOu.js.map} +1 -1
- package/dist/{cards-CuxycY_U.js → cards-BE77zKTI.js} +299 -304
- package/dist/cards-BE77zKTI.js.map +1 -0
- package/dist/cards-BINs-dmS.cjs +2 -0
- package/dist/cards-BINs-dmS.cjs.map +1 -0
- package/dist/cards.cjs +1 -1
- package/dist/cards.js +2 -2
- package/dist/{cn-SOcVdnX6.cjs → cn-CU5TNITO.cjs} +1 -1
- package/dist/{cn-SOcVdnX6.cjs.map → cn-CU5TNITO.cjs.map} +1 -1
- package/dist/{cn-DZLxql0l.js → cn-YER3QsV1.js} +1 -1
- package/dist/{cn-DZLxql0l.js.map → cn-YER3QsV1.js.map} +1 -1
- package/dist/components/data/index.d.ts +1 -1
- package/dist/components/feedback/MCookie/MCookieBootstrap/MCookieBootstrap.script.d.ts +4 -0
- package/dist/components/feedback/MCookie/MCookieConsent/index.d.ts +1 -1
- package/dist/components/layout/MNavbar/MNavbar.d.ts +1 -1
- package/dist/components/layout/MNavbar/MNavbar.types.d.ts +4 -0
- package/dist/components/layout/MNavbar/index.d.ts +1 -1
- package/dist/components/layout/MNavs/MNavs.types.d.ts +12 -2
- package/dist/components/layout/MNavs/index.d.ts +1 -1
- package/dist/{controls-CO70zfcl.js → controls-BMwQ3C1R.js} +5 -5
- package/dist/controls-BMwQ3C1R.js.map +1 -0
- package/dist/controls-DwL1-nVC.cjs +2 -0
- package/dist/controls-DwL1-nVC.cjs.map +1 -0
- package/dist/controls.cjs +1 -1
- package/dist/controls.js +6 -6
- package/dist/cookie-consent-bootstrap.cjs +1 -1
- package/dist/cookie-consent-bootstrap.cjs.map +1 -1
- package/dist/cookie-consent-bootstrap.js +45 -32
- package/dist/cookie-consent-bootstrap.js.map +1 -1
- package/dist/{creditCards-CoZpbB1e.js → creditCards-CCysEwry.js} +1 -1
- package/dist/{creditCards-CoZpbB1e.js.map → creditCards-CCysEwry.js.map} +1 -1
- package/dist/{creditCards-BjHGqAFx.cjs → creditCards-ljs044xt.cjs} +1 -1
- package/dist/{creditCards-BjHGqAFx.cjs.map → creditCards-ljs044xt.cjs.map} +1 -1
- package/dist/data-BESfox0z.cjs +2 -0
- package/dist/data-BESfox0z.cjs.map +1 -0
- package/dist/{data-CaRwdLlD.js → data-s8Hkht1B.js} +714 -718
- package/dist/data-s8Hkht1B.js.map +1 -0
- package/dist/data.cjs +1 -1
- package/dist/data.js +3 -3
- package/dist/{dateUtils-BOsYyWde.js → dateUtils-CUY6CRCf.js} +1 -1
- package/dist/{dateUtils-BOsYyWde.js.map → dateUtils-CUY6CRCf.js.map} +1 -1
- package/dist/{dateUtils-xSfrXjbY.cjs → dateUtils-Dq1vaA-D.cjs} +1 -1
- package/dist/{dateUtils-xSfrXjbY.cjs.map → dateUtils-Dq1vaA-D.cjs.map} +1 -1
- package/dist/display-B0lpgApV.cjs +2 -0
- package/dist/{display-DHpFRcAP.cjs.map → display-B0lpgApV.cjs.map} +1 -1
- package/dist/{display-CkzrTEdb.js → display-DuBRiEKr.js} +5 -6
- package/dist/{display-CkzrTEdb.js.map → display-DuBRiEKr.js.map} +1 -1
- package/dist/display.cjs +1 -1
- package/dist/display.js +3 -3
- package/dist/{dropdowns-BPRJL_2d.js → dropdowns-BcVrUMPE.js} +106 -110
- package/dist/dropdowns-BcVrUMPE.js.map +1 -0
- package/dist/dropdowns-CK-oxd62.cjs +2 -0
- package/dist/dropdowns-CK-oxd62.cjs.map +1 -0
- package/dist/dropdowns.cjs +1 -1
- package/dist/dropdowns.js +1 -1
- package/dist/{feedback-Cgu8ez5M.js → feedback-D3LLKNlY.js} +238 -240
- package/dist/{feedback-Cgu8ez5M.js.map → feedback-D3LLKNlY.js.map} +1 -1
- package/dist/feedback-DYjg0Dbp.cjs +2 -0
- package/dist/{feedback-DBhETzTM.cjs.map → feedback-DYjg0Dbp.cjs.map} +1 -1
- package/dist/feedback.cjs +1 -1
- package/dist/feedback.js +6 -6
- package/dist/{form-rDra9x3X.cjs → form-6JwrowsS.cjs} +2 -2
- package/dist/{form-rDra9x3X.cjs.map → form-6JwrowsS.cjs.map} +1 -1
- package/dist/{form-XhjrsBOv.js → form-CFWADsyf.js} +2 -2
- package/dist/{form-XhjrsBOv.js.map → form-CFWADsyf.js.map} +1 -1
- package/dist/form.cjs +1 -1
- package/dist/form.js +1 -1
- package/dist/{formatters-BIijIfCB.cjs → formatters-CNjg_h7-.cjs} +1 -1
- package/dist/{formatters-BIijIfCB.cjs.map → formatters-CNjg_h7-.cjs.map} +1 -1
- package/dist/{formatters-DMI5QqhS.js → formatters-T0vvjMtB.js} +1 -1
- package/dist/{formatters-DMI5QqhS.js.map → formatters-T0vvjMtB.js.map} +1 -1
- package/dist/{frameworkTexts-DH2N7l8F.js → frameworkTexts-B6oE8pMk.js} +1 -1
- package/dist/{frameworkTexts-DH2N7l8F.js.map → frameworkTexts-B6oE8pMk.js.map} +1 -1
- package/dist/{frameworkTexts-Ds2orE1v.cjs → frameworkTexts-C_9KZK_A.cjs} +1 -1
- package/dist/{frameworkTexts-Ds2orE1v.cjs.map → frameworkTexts-C_9KZK_A.cjs.map} +1 -1
- package/dist/i18n.d.ts +1 -1
- package/dist/icons-D5DK-J2C.js +4855 -0
- package/dist/icons-D5DK-J2C.js.map +1 -0
- package/dist/icons-Dv1T-cF4.cjs +2 -0
- package/dist/icons-Dv1T-cF4.cjs.map +1 -0
- package/dist/icons.cjs +1 -1
- package/dist/icons.d.ts +1 -1
- package/dist/icons.js +2 -23
- package/dist/illustrations.cjs +1 -1
- package/dist/illustrations.d.ts +1 -1
- package/dist/illustrations.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +59 -79
- package/dist/inputs-Dcj6C_Fn.cjs +2 -0
- package/dist/{inputs-DPhzLJZH.cjs.map → inputs-Dcj6C_Fn.cjs.map} +1 -1
- package/dist/{inputs-BBJgVLXO.js → inputs-bCxSLz-U.js} +424 -430
- package/dist/{inputs-BBJgVLXO.js.map → inputs-bCxSLz-U.js.map} +1 -1
- package/dist/inputs.cjs +1 -1
- package/dist/inputs.js +4 -4
- package/dist/{layout-CdAUOdYv.js → layout-Cb94o3oU.js} +291 -219
- package/dist/layout-Cb94o3oU.js.map +1 -0
- package/dist/layout-DgfsQ-Tn.cjs +2 -0
- package/dist/layout-DgfsQ-Tn.cjs.map +1 -0
- package/dist/layout.cjs +1 -1
- package/dist/layout.js +6 -6
- package/dist/{layoutProps-CZ-XhpIX.cjs → layoutProps-Ck4VtGm9.cjs} +1 -1
- package/dist/{layoutProps-CZ-XhpIX.cjs.map → layoutProps-Ck4VtGm9.cjs.map} +1 -1
- package/dist/{layoutProps-DUPQsWy9.js → layoutProps-Cl6d1KmH.js} +1 -1
- package/dist/{layoutProps-DUPQsWy9.js.map → layoutProps-Cl6d1KmH.js.map} +1 -1
- package/dist/{licensing-CMLexRJk.cjs → licensing-BXFauUj_.cjs} +1 -1
- package/dist/{licensing-CMLexRJk.cjs.map → licensing-BXFauUj_.cjs.map} +1 -1
- package/dist/{licensing-SQAMYrOI.js → licensing-CwzqhHH9.js} +1 -1
- package/dist/{licensing-SQAMYrOI.js.map → licensing-CwzqhHH9.js.map} +1 -1
- package/dist/{locale-DPqdZjGC.js → locale-BNyzqXAU.js} +1 -1
- package/dist/{locale-DPqdZjGC.js.map → locale-BNyzqXAU.js.map} +1 -1
- package/dist/{locale-BG4Q6P_O.cjs → locale-BltrWJtd.cjs} +1 -1
- package/dist/{locale-BG4Q6P_O.cjs.map → locale-BltrWJtd.cjs.map} +1 -1
- package/dist/{media-Yp4PedIi.js → media-8aMOtckF.js} +12 -12
- package/dist/{media-Yp4PedIi.js.map → media-8aMOtckF.js.map} +1 -1
- package/dist/media-D5YGOTm7.cjs +2 -0
- package/dist/{media-Cc2wBvkb.cjs.map → media-D5YGOTm7.cjs.map} +1 -1
- package/dist/media.cjs +1 -1
- package/dist/media.js +3 -3
- package/dist/overlays-DCj-oV2H.cjs +2 -0
- package/dist/{overlays-CmF2tV32.cjs.map → overlays-DCj-oV2H.cjs.map} +1 -1
- package/dist/{overlays-BBlMSWS8.js → overlays-gjg00CAf.js} +7 -7
- package/dist/{overlays-BBlMSWS8.js.map → overlays-gjg00CAf.js.map} +1 -1
- package/dist/overlays.cjs +1 -1
- package/dist/overlays.js +5 -5
- package/dist/primitives.cjs +1 -1
- package/dist/primitives.js +2 -2
- package/dist/{relativeTime-3dGgniAK.js → relativeTime-Cr-NVzij.js} +1 -1
- package/dist/{relativeTime-3dGgniAK.js.map → relativeTime-Cr-NVzij.js.map} +1 -1
- package/dist/{relativeTime-D5qYOJVu.cjs → relativeTime-DgYBUaVm.cjs} +1 -1
- package/dist/{relativeTime-D5qYOJVu.cjs.map → relativeTime-DgYBUaVm.cjs.map} +1 -1
- package/dist/style-runtime.cjs +1 -1
- package/dist/style-runtime.js +1 -1
- package/dist/styles.css +1 -1
- package/dist/{MThemeProvider-DUuTvWdm.js → theme-BV4qkzZU.js} +1 -1
- package/dist/theme-BV4qkzZU.js.map +1 -0
- package/dist/{MThemeProvider-9JHArSd7.cjs → theme-DLorpkJc.cjs} +1 -1
- package/dist/theme-DLorpkJc.cjs.map +1 -0
- package/dist/theme.cjs +1 -1
- package/dist/theme.d.ts +1 -1
- package/dist/theme.js +1 -1
- package/dist/{typography-DZx1M8Wc.js → typography-DKdr1Tds.js} +3 -3
- package/dist/{typography-DZx1M8Wc.js.map → typography-DKdr1Tds.js.map} +1 -1
- package/dist/{typography-B9-sCjsR.cjs → typography-qbFGv1gA.cjs} +2 -2
- package/dist/{typography-B9-sCjsR.cjs.map → typography-qbFGv1gA.cjs.map} +1 -1
- package/dist/typography.cjs +1 -1
- package/dist/typography.js +5 -5
- package/dist/{useGhostText-Zq3iktss.js → useGhostText-DG0bzcao.js} +1 -1
- package/dist/{useGhostText-Zq3iktss.js.map → useGhostText-DG0bzcao.js.map} +1 -1
- package/dist/{useGhostText-CL1kSB_V.cjs → useGhostText-QMdO_HK6.cjs} +1 -1
- package/dist/{useGhostText-CL1kSB_V.cjs.map → useGhostText-QMdO_HK6.cjs.map} +1 -1
- package/dist/{useInteractionEffect-BLehDk91.cjs → useInteractionEffect-DnEfbCrX.cjs} +1 -1
- package/dist/{useInteractionEffect-BLehDk91.cjs.map → useInteractionEffect-DnEfbCrX.cjs.map} +1 -1
- package/dist/{useInteractionEffect-Dfqq8lGO.js → useInteractionEffect-DtpbVd77.js} +1 -1
- package/dist/{useInteractionEffect-Dfqq8lGO.js.map → useInteractionEffect-DtpbVd77.js.map} +1 -1
- package/dist/{useKeyboardNav-DBeCcTmg.cjs → useKeyboardNav-BrODLJaL.cjs} +1 -1
- package/dist/{useKeyboardNav-DBeCcTmg.cjs.map → useKeyboardNav-BrODLJaL.cjs.map} +1 -1
- package/dist/{useKeyboardNav-DXvrPrx9.js → useKeyboardNav-iEXOdEMB.js} +1 -1
- package/dist/{useKeyboardNav-DXvrPrx9.js.map → useKeyboardNav-iEXOdEMB.js.map} +1 -1
- package/dist/{useReveal-DzskFHKb.js → useReveal-BJ59usiL.js} +1 -1
- package/dist/{useReveal-DzskFHKb.js.map → useReveal-BJ59usiL.js.map} +1 -1
- package/dist/{useReveal-CdIoh0Rk.cjs → useReveal-B_17PI89.cjs} +1 -1
- package/dist/{useReveal-CdIoh0Rk.cjs.map → useReveal-B_17PI89.cjs.map} +1 -1
- package/dist/utils.cjs +1 -1
- package/dist/utils.js +11 -11
- package/dist/{validators-CyDTl6cC.cjs → validators-BeNTD8mf.cjs} +1 -1
- package/dist/{validators-CyDTl6cC.cjs.map → validators-BeNTD8mf.cjs.map} +1 -1
- package/dist/{validators-ljBWrIca.js → validators-H8tNxb8O.js} +1 -1
- package/dist/{validators-ljBWrIca.js.map → validators-H8tNxb8O.js.map} +1 -1
- package/package.json +1 -1
- package/dist/MArrowDownIcon-BcKSgdTY.js +0 -15
- package/dist/MArrowDownIcon-BcKSgdTY.js.map +0 -1
- package/dist/MArrowDownIcon-C8EAODgv.cjs +0 -2
- package/dist/MArrowDownIcon-C8EAODgv.cjs.map +0 -1
- package/dist/MArrowUpDownIcon-CW_PWr7Q.cjs +0 -2
- package/dist/MArrowUpDownIcon-CW_PWr7Q.cjs.map +0 -1
- package/dist/MArrowUpDownIcon-DukXemVA.js +0 -19
- package/dist/MArrowUpDownIcon-DukXemVA.js.map +0 -1
- package/dist/MArrowUpIcon-DWV_HYrz.cjs +0 -2
- package/dist/MArrowUpIcon-DWV_HYrz.cjs.map +0 -1
- package/dist/MArrowUpIcon-Dan-4hs8.js +0 -15
- package/dist/MArrowUpIcon-Dan-4hs8.js.map +0 -1
- package/dist/MBadge-Babyr1R9.cjs.map +0 -1
- package/dist/MBadge-BjZX0MIC.js.map +0 -1
- package/dist/MBrandMoreIcons-IQoXQOXv.js +0 -873
- package/dist/MBrandMoreIcons-IQoXQOXv.js.map +0 -1
- package/dist/MBrandMoreIcons-aks8CSrY.cjs +0 -2
- package/dist/MBrandMoreIcons-aks8CSrY.cjs.map +0 -1
- package/dist/MCalendarIcon-DXTVH31q.js +0 -29
- package/dist/MCalendarIcon-DXTVH31q.js.map +0 -1
- package/dist/MCalendarIcon-S4GQsUlu.cjs +0 -2
- package/dist/MCalendarIcon-S4GQsUlu.cjs.map +0 -1
- package/dist/MChatIcon-Bb3DbYgB.js +0 -96
- package/dist/MChatIcon-Bb3DbYgB.js.map +0 -1
- package/dist/MChatIcon-C-5VN1TR.cjs +0 -2
- package/dist/MChatIcon-C-5VN1TR.cjs.map +0 -1
- package/dist/MCheckIcon-DQumT4HX.js +0 -15
- package/dist/MCheckIcon-DQumT4HX.js.map +0 -1
- package/dist/MCheckIcon-ck_21ybZ.cjs +0 -2
- package/dist/MCheckIcon-ck_21ybZ.cjs.map +0 -1
- package/dist/MChevronDownIcon-D3yTpzni.js +0 -15
- package/dist/MChevronDownIcon-D3yTpzni.js.map +0 -1
- package/dist/MChevronDownIcon-DCMmxkRt.cjs +0 -2
- package/dist/MChevronDownIcon-DCMmxkRt.cjs.map +0 -1
- package/dist/MChevronRightIcon-BC08M6g8.cjs +0 -2
- package/dist/MChevronRightIcon-BC08M6g8.cjs.map +0 -1
- package/dist/MChevronRightIcon-CXs8IHiV.js +0 -21
- package/dist/MChevronRightIcon-CXs8IHiV.js.map +0 -1
- package/dist/MClockIcon-DTevPaRf.js +0 -19
- package/dist/MClockIcon-DTevPaRf.js.map +0 -1
- package/dist/MClockIcon-DoskImOg.cjs +0 -2
- package/dist/MClockIcon-DoskImOg.cjs.map +0 -1
- package/dist/MCloseIcon-6cfw9trj.cjs +0 -2
- package/dist/MCloseIcon-6cfw9trj.cjs.map +0 -1
- package/dist/MCloseIcon-lDH3Vc10.js +0 -15
- package/dist/MCloseIcon-lDH3Vc10.js.map +0 -1
- package/dist/MDataTable-B0QbAjVI.cjs +0 -2
- package/dist/MDrawer-_Bao-x1w.cjs +0 -2
- package/dist/MEllipsisVerticalIcon-CXmu-bHJ.js +0 -43
- package/dist/MEllipsisVerticalIcon-CXmu-bHJ.js.map +0 -1
- package/dist/MEllipsisVerticalIcon-CufhU4cO.cjs +0 -2
- package/dist/MEllipsisVerticalIcon-CufhU4cO.cjs.map +0 -1
- package/dist/MFileExtIcons-CPsgV8eQ.cjs +0 -2
- package/dist/MFileExtIcons-CPsgV8eQ.cjs.map +0 -1
- package/dist/MFileExtIcons-Cxbgd5Fz.js +0 -145
- package/dist/MFileExtIcons-Cxbgd5Fz.js.map +0 -1
- package/dist/MIcon-BPr09_p4.js +0 -49
- package/dist/MIcon-BPr09_p4.js.map +0 -1
- package/dist/MIcon-CX5beo32.cjs +0 -2
- package/dist/MIcon-CX5beo32.cjs.map +0 -1
- package/dist/MImage-C99xrQQ9.js.map +0 -1
- package/dist/MImage-DbianX0t.cjs.map +0 -1
- package/dist/MInput-Bpkn3gOQ.cjs +0 -2
- package/dist/MInputCVC-Bl8i97Y0.cjs +0 -2
- package/dist/MInputCVC-Bl8i97Y0.cjs.map +0 -1
- package/dist/MInputCVC-CcG_KJvq.js.map +0 -1
- package/dist/MInputSearch-APMIHkYb.cjs +0 -2
- package/dist/MMenuIcon-A_eXBpM8.cjs +0 -2
- package/dist/MMenuIcon-A_eXBpM8.cjs.map +0 -1
- package/dist/MMenuIcon-CbBHfxVa.js +0 -20
- package/dist/MMenuIcon-CbBHfxVa.js.map +0 -1
- package/dist/MPagination-3fsF3pCM.cjs +0 -2
- package/dist/MPhoneIcon-D5JEg8LZ.js +0 -38
- package/dist/MPhoneIcon-D5JEg8LZ.js.map +0 -1
- package/dist/MPhoneIcon-D5unTWyf.cjs +0 -2
- package/dist/MPhoneIcon-D5unTWyf.cjs.map +0 -1
- package/dist/MProtectIcon-B_m67eu1.cjs +0 -2
- package/dist/MProtectIcon-B_m67eu1.cjs.map +0 -1
- package/dist/MProtectIcon-s_IpKWPz.js +0 -80
- package/dist/MProtectIcon-s_IpKWPz.js.map +0 -1
- package/dist/MQrCode-ClP7YJFt.cjs +0 -2
- package/dist/MSearchIcon-BakfEJQd.cjs +0 -2
- package/dist/MSearchIcon-BakfEJQd.cjs.map +0 -1
- package/dist/MSearchIcon-Dlg4Og8t.js +0 -24
- package/dist/MSearchIcon-Dlg4Og8t.js.map +0 -1
- package/dist/MSparkline-LfEfA310.js.map +0 -1
- package/dist/MSparkline-lRq3gAYU.cjs.map +0 -1
- package/dist/MStarFillIcon-BxKSY0VO.js +0 -25
- package/dist/MStarFillIcon-BxKSY0VO.js.map +0 -1
- package/dist/MStarFillIcon-CnINKvE4.cjs +0 -2
- package/dist/MStarFillIcon-CnINKvE4.cjs.map +0 -1
- package/dist/MSuccessIcon-Cvs8ER4y.cjs +0 -2
- package/dist/MSuccessIcon-Cvs8ER4y.cjs.map +0 -1
- package/dist/MSuccessIcon-DH5Z83mM.js +0 -33
- package/dist/MSuccessIcon-DH5Z83mM.js.map +0 -1
- package/dist/MTag-BMi1GS7v.cjs +0 -2
- package/dist/MThemeProvider-9JHArSd7.cjs.map +0 -1
- package/dist/MThemeProvider-DUuTvWdm.js.map +0 -1
- package/dist/MZoomInIcon-BEdmglk6.js +0 -134
- package/dist/MZoomInIcon-BEdmglk6.js.map +0 -1
- package/dist/MZoomInIcon-dhRm7zT6.cjs +0 -2
- package/dist/MZoomInIcon-dhRm7zT6.cjs.map +0 -1
- package/dist/cards-Bp7jOY3_.cjs +0 -2
- package/dist/cards-Bp7jOY3_.cjs.map +0 -1
- package/dist/cards-CuxycY_U.js.map +0 -1
- package/dist/controls-BJe59nXf.cjs +0 -2
- package/dist/controls-BJe59nXf.cjs.map +0 -1
- package/dist/controls-CO70zfcl.js.map +0 -1
- package/dist/data-CaRwdLlD.js.map +0 -1
- package/dist/data-r5uYgiWq.cjs +0 -2
- package/dist/data-r5uYgiWq.cjs.map +0 -1
- package/dist/display-DHpFRcAP.cjs +0 -2
- package/dist/dropdowns-BPRJL_2d.js.map +0 -1
- package/dist/dropdowns-BTbAnQxt.cjs +0 -2
- package/dist/dropdowns-BTbAnQxt.cjs.map +0 -1
- package/dist/feedback-DBhETzTM.cjs +0 -2
- package/dist/icons.entry-LwjwnjE2.cjs +0 -2
- package/dist/icons.entry-LwjwnjE2.cjs.map +0 -1
- package/dist/icons.entry-txsQqMvb.js +0 -3318
- package/dist/icons.entry-txsQqMvb.js.map +0 -1
- package/dist/illustrations.entry-C0rSNpF1.js.map +0 -1
- package/dist/inputs-DPhzLJZH.cjs +0 -2
- package/dist/layout-CdAUOdYv.js.map +0 -1
- package/dist/layout-DsY7-y6U.cjs +0 -2
- package/dist/layout-DsY7-y6U.cjs.map +0 -1
- package/dist/media-Cc2wBvkb.cjs +0 -2
- package/dist/overlays-CmF2tV32.cjs +0 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controls-BMwQ3C1R.js","names":[],"sources":["../src/components/controls/MButtonGroup/MButtonGroup.tsx","../src/components/controls/MRadio/RadioContext.ts","../src/components/controls/MRadio/MRadio.tsx","../src/components/controls/MRadio/MRadioGroup.tsx","../src/components/controls/MLoadMore/MLoadMore.tsx","../src/components/controls/MScrollTop/MScrollTop.tsx","../src/components/controls/MSocialButton/MSocialButton.icons.tsx","../src/components/controls/MSocialButton/MSocialButton.tsx"],"sourcesContent":["import {forwardRef, useMemo} from 'react'\nimport type {MButtonGroupProps} from './MButtonGroup.types'\nimport {ButtonGroupContext} from './MButtonGroupContext'\nimport type {MButtonGroupContextValue} from './MButtonGroupContext'\nimport {cn} from '../../../utils/cn'\nimport './MButtonGroup.css'\n\nexport const MButtonGroup = forwardRef<HTMLDivElement, MButtonGroupProps>(function MButtonGroup(\n {orientation = 'horizontal', variant, size, color, attached = true, className, children, ...rest},\n ref\n) {\n const ctx = useMemo<MButtonGroupContextValue>(() => ({variant, size, color}), [variant, size, color])\n\n return (\n <ButtonGroupContext.Provider value={ctx}>\n <div\n ref={ref}\n role=\"group\"\n className={cn('button-group', orientation, attached && 'attached', className)}\n {...rest}\n >\n {children}\n </div>\n </ButtonGroupContext.Provider>\n )\n})\n","import {createContext, useContext} from 'react'\nimport type {MRadioGroupContextValue} from './MRadio.types'\n\nexport const RadioContext = createContext<MRadioGroupContextValue | null>(null)\n\n// Read the nearest radio-group context when a radio participates in grouped state.\nexport function useRadioGroup(): MRadioGroupContextValue | null {\n return useContext(RadioContext)\n}\n","import {forwardRef, useCallback} from 'react'\nimport type * as React from 'react'\nimport type {MRadioProps} from './MRadio.types'\nimport {useRadioGroup} from './RadioContext'\nimport {cn} from '../../../utils/cn'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport './MRadio.css'\n\n// Render a single radio that can work standalone or inside MRadioGroup.\nexport const MRadio = forwardRef<HTMLInputElement, MRadioProps>(function MRadio(\n {\n checked,\n defaultChecked,\n name,\n id,\n value,\n disabled = false,\n size = 'md',\n color = 'primary',\n label,\n labelPosition = 'right',\n onChange,\n clickEffect = 'ripple',\n rippleColor,\n className,\n style,\n },\n ref\n) {\n const group = useRadioGroup()\n\n const resolvedName = group?.name ?? name\n const resolvedDisabled = group?.disabled ?? disabled\n const resolvedSize = group?.size ?? size\n const resolvedColor = group?.color ?? color\n const resolvedChecked = group ? group.value === value : checked\n const {effectClassName, effectLayer, handlePointerDown, triggerEffect} = useInteractionEffect<HTMLSpanElement>({\n effect: clickEffect,\n disabled: resolvedDisabled,\n centered: true,\n color: rippleColor,\n })\n\n // Delegate selection back to the group when one is present.\n const handleChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(event)\n if (group?.onChange && value) {\n group.onChange(value)\n }\n },\n [onChange, group, value]\n )\n\n return (\n <label\n className={cn(\n 'radio',\n resolvedSize,\n labelPosition === 'left' && 'label-left',\n resolvedDisabled && 'disabled',\n className\n )}\n style={style}\n >\n <span className={cn('circle', `color-${resolvedColor}`, effectClassName)} onPointerDown={handlePointerDown}>\n {effectLayer}\n <input\n ref={ref}\n type=\"radio\"\n name={resolvedName}\n id={id}\n value={value}\n checked={resolvedChecked}\n defaultChecked={!group ? defaultChecked : undefined}\n disabled={resolvedDisabled}\n onChange={handleChange}\n onKeyDown={(event) => {\n if (event.key === ' ' || event.key === 'Enter') {\n triggerEffect(event.currentTarget.parentElement as HTMLSpanElement | null)\n }\n }}\n className=\"input\"\n />\n </span>\n {label && <span className=\"label-text\">{label}</span>}\n </label>\n )\n})\n","import {useState, useCallback, useMemo} from 'react'\nimport type {MRadioGroupProps} from './MRadio.types'\nimport {RadioContext} from './RadioContext'\nimport {cn} from '../../../utils/cn'\nimport './MRadio.css'\n\n// Coordinate multiple radio items through shared context and optional controlled state.\nexport function MRadioGroup({\n name,\n value,\n defaultValue,\n onChange,\n direction = 'vertical',\n children,\n disabled = false,\n size = 'md',\n color = 'primary',\n error = false,\n errorText,\n label,\n className,\n style,\n}: MRadioGroupProps) {\n const [internalValue, setInternalValue] = useState(defaultValue)\n const currentValue = value !== undefined ? value : internalValue\n\n // Mirror controlled and uncontrolled usage with the same group API.\n const handleChange = useCallback(\n (val: string) => {\n if (value === undefined) {\n setInternalValue(val)\n }\n onChange?.(val)\n },\n [onChange, value]\n )\n\n // Memoize context so nested radios only update when relevant inputs change.\n const ctx = useMemo(\n () => ({name, value: currentValue, disabled, size, color, onChange: handleChange}),\n [name, currentValue, disabled, size, color, handleChange]\n )\n\n return (\n <RadioContext.Provider value={ctx}>\n <fieldset className={cn('radio-group', direction, className)} style={style} role=\"radiogroup\">\n {label && <legend className={cn('label', error && 'error')}>{label}</legend>}\n {children}\n {errorText && (\n <span className=\"field-error\" role=\"alert\">\n {errorText}\n </span>\n )}\n </fieldset>\n </RadioContext.Provider>\n )\n}\n","import {useEffect, useRef, useCallback} from 'react'\nimport type {MLoadMoreProps} from './MLoadMore.types'\nimport {MButton} from '../MButton'\nimport {cn} from '../../../utils/cn'\nimport './MLoadMore.css'\n\nexport function MLoadMore({\n onLoadMore,\n loading = false,\n hasMore = true,\n loaded,\n total,\n auto = false,\n autoThreshold = 100,\n variant = 'outlined',\n color = 'primary',\n label = 'Load more',\n loadingLabel = 'Loading...',\n doneLabel = 'All items loaded',\n className,\n ...rest\n}: MLoadMoreProps) {\n const sentinelRef = useRef<HTMLDivElement>(null)\n const loadMoreRef = useRef(onLoadMore)\n loadMoreRef.current = onLoadMore\n\n useEffect(() => {\n if (!auto || !hasMore || loading) return\n\n const sentinel = sentinelRef.current\n if (!sentinel) return\n\n const observer = new IntersectionObserver(\n (entries) => {\n if (entries[0].isIntersecting) {\n loadMoreRef.current()\n }\n },\n {rootMargin: `${autoThreshold}px`}\n )\n\n observer.observe(sentinel)\n return () => observer.disconnect()\n }, [auto, hasMore, loading, autoThreshold])\n\n const handleClick = useCallback(() => {\n if (!loading && hasMore) onLoadMore()\n }, [onLoadMore, loading, hasMore])\n\n const showCount = loaded !== undefined && total !== undefined\n\n return (\n <div className={cn('load-more', className)} {...rest}>\n {showCount && (\n <span className=\"load-more-count\">\n {loaded} / {total}\n </span>\n )}\n\n {hasMore ? (\n <MButton\n variant={variant}\n color={color}\n loading={loading}\n onClick={handleClick}\n className=\"load-more-btn\"\n >\n {loading ? loadingLabel : label}\n </MButton>\n ) : (\n <span className=\"load-more-done\">{doneLabel}</span>\n )}\n\n {auto && hasMore && <div ref={sentinelRef} className=\"load-more-sentinel\" />}\n\n {showCount && (\n <div className=\"load-more-bar\">\n <div className=\"load-more-bar-fill\" style={{width: `${Math.min((loaded / total) * 100, 100)}%`}} />\n </div>\n )}\n </div>\n )\n}\n","import {useState, useEffect, useCallback} from 'react'\nimport type {MScrollTopProps} from './MScrollTop.types'\nimport {MButton} from '../MButton'\nimport {MArrowUpIcon} from '../../../icons'\nimport {cn} from '../../../utils/cn'\nimport './MScrollTop.css'\n\nexport function MScrollTop({\n threshold = 300,\n variant = 'filled',\n color = 'primary',\n smooth = true,\n className,\n}: MScrollTopProps) {\n const [visible, setVisible] = useState(false)\n\n useEffect(() => {\n function onScroll() {\n setVisible(window.scrollY > threshold)\n }\n onScroll()\n window.addEventListener('scroll', onScroll, {passive: true})\n return () => window.removeEventListener('scroll', onScroll)\n }, [threshold])\n\n const scrollToTop = useCallback(() => {\n window.scrollTo({top: 0, behavior: smooth ? 'smooth' : 'instant'})\n }, [smooth])\n\n return (\n <MButton\n variant={variant}\n color={color}\n shape=\"circle\"\n size=\"lg\"\n iconOnly\n onClick={scrollToTop}\n aria-label=\"Scroll to top\"\n className={cn('scroll-top', visible && 'visible', className)}\n >\n <MArrowUpIcon />\n </MButton>\n )\n}\n","import type {ReactNode, SVGProps} from 'react'\n\ntype SocialMarkProps = SVGProps<SVGSVGElement>\n\nfunction createMark(children: ReactNode, props: SocialMarkProps) {\n return (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" {...props}>\n {children}\n </svg>\n )\n}\n\nexport function SocialGoogleMark(props: SocialMarkProps) {\n return createMark(\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10.2\" fill=\"#fff\" stroke=\"#dadce0\" strokeWidth=\"1.2\" />\n <path\n d=\"M17.95 12.25c0-.48-.04-.83-.13-1.2H12v2.26h3.42c-.07.56-.48 1.4-1.4 1.97l-.01.08 2 1.52.14.02c1.28-1.15 1.8-2.84 1.8-4.65z\"\n fill=\"#4285F4\"\n />\n <path\n d=\"M12 18.2c1.67 0 3.07-.54 4.1-1.48l-2.13-1.62c-.57.39-1.34.67-1.97.67-1.64 0-3.03-1.06-3.53-2.53l-.08.01-2.08 1.58-.03.08c1.02 1.97 3.09 3.29 5.72 3.29z\"\n fill=\"#34A853\"\n />\n <path\n d=\"M8.47 13.24a3.72 3.72 0 0 1-.2-1.24c0-.43.08-.84.19-1.24l-.01-.08-2.1-1.6-.07.03a6.02 6.02 0 0 0 0 5.78l2.19-1.65z\"\n fill=\"#FBBC05\"\n />\n <path\n d=\"M12 8.22c.8 0 1.53.27 2.1.8l1.54-1.48C14.99 6.96 13.67 6.5 12 6.5c-2.63 0-4.7 1.32-5.72 3.29l2.18 1.66c.5-1.47 1.9-2.53 3.54-2.53z\"\n fill=\"#EA4335\"\n />\n </>,\n props\n )\n}\n\nexport function SocialFacebookMark(props: SocialMarkProps) {\n return createMark(\n <>\n <rect x=\"2.2\" y=\"2.2\" width=\"19.6\" height=\"19.6\" rx=\"6.2\" fill=\"#1877F2\" />\n <path\n d=\"M13.28 20v-6.02h2.02l.31-2.43h-2.33V10c0-.78.27-1.37 1.35-1.37h1.11V6.4c-.4-.06-1.09-.11-2.03-.11-2.3 0-3.64 1.22-3.64 3.76v1.49h-1.9v2.44h1.9V20z\"\n fill=\"#fff\"\n />\n </>,\n props\n )\n}\n\nexport function SocialAppleMark(props: SocialMarkProps) {\n return createMark(\n <>\n <path\n d=\"M15.38 11.84c.02 2.33 2.04 3.1 2.07 3.12-.03.07-.33 1.09-1.06 2.16-.63.91-1.3 1.84-2.34 1.86-1.03.02-1.37-.61-2.57-.61-1.2 0-1.57.59-2.53.63-1.02.04-1.79-1.01-2.43-1.92-1.3-1.89-2.3-5.33-.97-7.64.67-1.15 1.86-1.88 3.14-1.9.98-.02 1.89.65 2.57.65.67 0 1.92-.81 3.24-.69.55.02 2.1.22 3.09 1.67-.08.05-1.84 1.07-1.81 2.67z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M13.59 4.67c.53-.64.9-1.52.8-2.42-.77.04-1.69.52-2.24 1.15-.5.58-.93 1.49-.82 2.35.86.07 1.72-.44 2.26-1.08z\"\n fill=\"currentColor\"\n />\n </>,\n props\n )\n}\n\nexport function SocialMicrosoftMark(props: SocialMarkProps) {\n return createMark(\n <>\n <rect x=\"3.5\" y=\"3.5\" width=\"7.8\" height=\"7.8\" rx=\"1.3\" fill=\"#F25022\" />\n <rect x=\"12.7\" y=\"3.5\" width=\"7.8\" height=\"7.8\" rx=\"1.3\" fill=\"#7FBA00\" />\n <rect x=\"3.5\" y=\"12.7\" width=\"7.8\" height=\"7.8\" rx=\"1.3\" fill=\"#00A4EF\" />\n <rect x=\"12.7\" y=\"12.7\" width=\"7.8\" height=\"7.8\" rx=\"1.3\" fill=\"#FFB900\" />\n </>,\n props\n )\n}\n\nexport function SocialPinterestMark(props: SocialMarkProps) {\n return createMark(\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10.1\" fill=\"#fff\" />\n <path\n d=\"M12.87 6.76c-2.95 0-4.74 2.03-4.74 4.34 0 1.65.92 3.07 2.38 3.62.1.03.14.01.17-.06l.32-1.23c.05-.14.02-.19-.09-.33-.26-.33-.47-.96-.47-1.57 0-1.52 1.14-2.97 3.08-2.97 1.68 0 2.86 1.14 2.86 2.78 0 1.86-.93 3.13-2.14 3.13-.67 0-1.17-.56-1-1.23.18-.8.55-1.64.55-2.2 0-.51-.28-.93-.84-.93-.67 0-1.2.69-1.2 1.62 0 .59.2.99.2.99l-.78 3.28c-.14.58-.03 1.55.01 1.68.02.08.1.1.15.03.09-.11 1.07-1.49 1.24-2.18l.27-1.06c.25.48.99.89 1.77.89 2.34 0 4.04-2.15 4.04-4.79 0-2.54-2.08-4.44-4.78-4.44z\"\n fill=\"#E60023\"\n />\n </>,\n props\n )\n}\n\nexport function SocialLinkedInMark(props: SocialMarkProps) {\n return createMark(\n <>\n <rect x=\"2.4\" y=\"2.4\" width=\"19.2\" height=\"19.2\" rx=\"4.8\" fill=\"#fff\" />\n <path\n d=\"M8.1 10.02h2.04v7.24H8.1zm1.03-3.22a1.17 1.17 0 1 1 0 2.35 1.17 1.17 0 0 1 0-2.35zm2.68 3.22h1.95v.99c.34-.61 1.08-1.15 2.13-1.15 2.15 0 2.82 1.42 2.82 3.78v3.62h-2.04v-3.26c0-.98-.35-1.67-1.23-1.67-.66 0-1.05.45-1.23.88-.08.16-.08.38-.08.59v3.46h-2.32z\"\n fill=\"#0A66C2\"\n />\n </>,\n props\n )\n}\n","import {forwardRef} from 'react'\nimport type {MSocialButtonProps} from './MSocialButton.types'\nimport {\n SocialAppleMark,\n SocialFacebookMark,\n SocialGoogleMark,\n SocialLinkedInMark,\n SocialMicrosoftMark,\n SocialPinterestMark,\n} from './MSocialButton.icons'\nimport {MSpinner} from '../../feedback'\nimport {cn} from '../../../utils/cn'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport './MSocialButton.css'\n\nconst socialButtonConfig = {\n google: {\n label: 'Sign in with Google',\n iconLabel: 'Google',\n mode: 'google',\n Icon: SocialGoogleMark,\n },\n facebook: {\n label: 'Sign in with Facebook',\n iconLabel: 'Facebook',\n mode: 'outline',\n Icon: SocialFacebookMark,\n },\n apple: {\n label: 'Sign in with Apple',\n iconLabel: 'Apple',\n mode: 'brand',\n Icon: SocialAppleMark,\n },\n microsoft: {\n label: 'Sign in with Microsoft',\n iconLabel: 'Microsoft',\n mode: 'brand',\n Icon: SocialMicrosoftMark,\n },\n pinterest: {\n label: 'Sign in with Pinterest',\n iconLabel: 'Pinterest',\n mode: 'brand',\n Icon: SocialPinterestMark,\n },\n linkedin: {\n label: 'Sign in with LinkedIn',\n iconLabel: 'LinkedIn',\n mode: 'brand',\n Icon: SocialLinkedInMark,\n },\n} as const\n\nexport const MSocialButton = forwardRef<HTMLButtonElement, MSocialButtonProps>(function MSocialButton(\n {\n platform = 'google',\n variant = 'outline',\n size = 'md',\n iconOnly = false,\n iconShape = 'circle',\n fullWidth = false,\n loading = false,\n active = false,\n pulsing = false,\n clickEffect = 'ripple',\n rippleColor,\n className,\n style,\n children,\n disabled = false,\n type = 'button',\n onPointerDown,\n onKeyDown,\n 'aria-label': ariaLabel,\n ...rest\n },\n ref\n) {\n const config = socialButtonConfig[platform]\n const Icon = config.Icon\n const label = children ?? config.label\n const resolvedAriaLabel = ariaLabel ?? (iconOnly ? config.iconLabel : undefined)\n const resolvedVariant = config.mode === 'google' ? variant : config.mode\n const isDisabled = disabled || loading\n const {effectClassName, effectLayer, handlePointerDown, triggerEffect} = useInteractionEffect<HTMLButtonElement>({\n effect: clickEffect,\n disabled: isDisabled,\n centered: iconOnly,\n color: rippleColor,\n })\n\n return (\n <button\n ref={ref}\n type={type}\n className={cn(\n 'social-button-root',\n platform,\n resolvedVariant,\n size,\n fullWidth && 'full-width',\n iconOnly && 'icon-only',\n iconOnly && `icon-shape-${iconShape}`,\n loading && 'loading',\n active && 'active',\n pulsing && 'pulsing',\n isDisabled && 'disabled',\n effectClassName,\n className\n )}\n style={style}\n disabled={isDisabled}\n aria-busy={loading || undefined}\n aria-label={resolvedAriaLabel}\n onPointerDown={(event) => {\n handlePointerDown(event)\n onPointerDown?.(event)\n }}\n onKeyDown={(event) => {\n if (event.key === ' ' || event.key === 'Enter') {\n triggerEffect(event.currentTarget)\n }\n\n onKeyDown?.(event)\n }}\n {...rest}\n >\n {effectLayer}\n {loading && <MSpinner size=\"sm\" color=\"inherit\" className=\"social-button-spinner\" aria-hidden=\"true\" />}\n <span className=\"social-button-brand\" aria-hidden=\"true\">\n <Icon className=\"social-button-mark\" />\n </span>\n {!iconOnly && <span className=\"social-button-label\">{label}</span>}\n </button>\n )\n})\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require(`./icons-Dv1T-cF4.cjs`),t=require(`./cn-CU5TNITO.cjs`),n=require(`./useInteractionEffect-DnEfbCrX.cjs`),r=require(`./MButton-B8rXmFX9.cjs`);let i=require(`react`),a=require(`react/jsx-runtime`);var o=(0,i.forwardRef)(function({orientation:e=`horizontal`,variant:n,size:o,color:s,attached:c=!0,className:l,children:u,...d},f){let p=(0,i.useMemo)(()=>({variant:n,size:o,color:s}),[n,o,s]);return(0,a.jsx)(r.i.Provider,{value:p,children:(0,a.jsx)(`div`,{ref:f,role:`group`,className:t.t(`button-group`,e,c&&`attached`,l),...d,children:u})})}),s=(0,i.createContext)(null);function c(){return(0,i.useContext)(s)}var l=(0,i.forwardRef)(function({checked:e,defaultChecked:r,name:o,id:s,value:l,disabled:u=!1,size:d=`md`,color:f=`primary`,label:p,labelPosition:m=`right`,onChange:h,clickEffect:g=`ripple`,rippleColor:_,className:v,style:y},b){let x=c(),S=x?.name??o,C=x?.disabled??u,w=x?.size??d,T=x?.color??f,E=x?x.value===l:e,{effectClassName:D,effectLayer:O,handlePointerDown:k,triggerEffect:A}=n.t({effect:g,disabled:C,centered:!0,color:_}),j=(0,i.useCallback)(e=>{h?.(e),x?.onChange&&l&&x.onChange(l)},[h,x,l]);return(0,a.jsxs)(`label`,{className:t.t(`radio`,w,m===`left`&&`label-left`,C&&`disabled`,v),style:y,children:[(0,a.jsxs)(`span`,{className:t.t(`circle`,`color-${T}`,D),onPointerDown:k,children:[O,(0,a.jsx)(`input`,{ref:b,type:`radio`,name:S,id:s,value:l,checked:E,defaultChecked:x?void 0:r,disabled:C,onChange:j,onKeyDown:e=>{(e.key===` `||e.key===`Enter`)&&A(e.currentTarget.parentElement)},className:`input`})]}),p&&(0,a.jsx)(`span`,{className:`label-text`,children:p})]})});function u({name:e,value:n,defaultValue:r,onChange:o,direction:c=`vertical`,children:l,disabled:u=!1,size:d=`md`,color:f=`primary`,error:p=!1,errorText:m,label:h,className:g,style:_}){let[v,y]=(0,i.useState)(r),b=n===void 0?v:n,x=(0,i.useCallback)(e=>{n===void 0&&y(e),o?.(e)},[o,n]),S=(0,i.useMemo)(()=>({name:e,value:b,disabled:u,size:d,color:f,onChange:x}),[e,b,u,d,f,x]);return(0,a.jsx)(s.Provider,{value:S,children:(0,a.jsxs)(`fieldset`,{className:t.t(`radio-group`,c,g),style:_,role:`radiogroup`,children:[h&&(0,a.jsx)(`legend`,{className:t.t(`label`,p&&`error`),children:h}),l,m&&(0,a.jsx)(`span`,{className:`field-error`,role:`alert`,children:m})]})})}function d({onLoadMore:e,loading:n=!1,hasMore:o=!0,loaded:s,total:c,auto:l=!1,autoThreshold:u=100,variant:d=`outlined`,color:f=`primary`,label:p=`Load more`,loadingLabel:m=`Loading...`,doneLabel:h=`All items loaded`,className:g,..._}){let v=(0,i.useRef)(null),y=(0,i.useRef)(e);y.current=e,(0,i.useEffect)(()=>{if(!l||!o||n)return;let e=v.current;if(!e)return;let t=new IntersectionObserver(e=>{e[0].isIntersecting&&y.current()},{rootMargin:`${u}px`});return t.observe(e),()=>t.disconnect()},[l,o,n,u]);let b=(0,i.useCallback)(()=>{!n&&o&&e()},[e,n,o]),x=s!==void 0&&c!==void 0;return(0,a.jsxs)(`div`,{className:t.t(`load-more`,g),..._,children:[x&&(0,a.jsxs)(`span`,{className:`load-more-count`,children:[s,` / `,c]}),o?(0,a.jsx)(r.t,{variant:d,color:f,loading:n,onClick:b,className:`load-more-btn`,children:n?m:p}):(0,a.jsx)(`span`,{className:`load-more-done`,children:h}),l&&o&&(0,a.jsx)(`div`,{ref:v,className:`load-more-sentinel`}),x&&(0,a.jsx)(`div`,{className:`load-more-bar`,children:(0,a.jsx)(`div`,{className:`load-more-bar-fill`,style:{width:`${Math.min(s/c*100,100)}%`}})})]})}function f({threshold:n=300,variant:o=`filled`,color:s=`primary`,smooth:c=!0,className:l}){let[u,d]=(0,i.useState)(!1);return(0,i.useEffect)(()=>{function e(){d(window.scrollY>n)}return e(),window.addEventListener(`scroll`,e,{passive:!0}),()=>window.removeEventListener(`scroll`,e)},[n]),(0,a.jsx)(r.t,{variant:o,color:s,shape:`circle`,size:`lg`,iconOnly:!0,onClick:(0,i.useCallback)(()=>{window.scrollTo({top:0,behavior:c?`smooth`:`instant`})},[c]),"aria-label":`Scroll to top`,className:t.t(`scroll-top`,u&&`visible`,l),children:(0,a.jsx)(e.Oi,{})})}function p(e,t){return(0,a.jsx)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,"aria-hidden":`true`,...t,children:e})}function m(e){return p((0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(`circle`,{cx:`12`,cy:`12`,r:`10.2`,fill:`#fff`,stroke:`#dadce0`,strokeWidth:`1.2`}),(0,a.jsx)(`path`,{d:`M17.95 12.25c0-.48-.04-.83-.13-1.2H12v2.26h3.42c-.07.56-.48 1.4-1.4 1.97l-.01.08 2 1.52.14.02c1.28-1.15 1.8-2.84 1.8-4.65z`,fill:`#4285F4`}),(0,a.jsx)(`path`,{d:`M12 18.2c1.67 0 3.07-.54 4.1-1.48l-2.13-1.62c-.57.39-1.34.67-1.97.67-1.64 0-3.03-1.06-3.53-2.53l-.08.01-2.08 1.58-.03.08c1.02 1.97 3.09 3.29 5.72 3.29z`,fill:`#34A853`}),(0,a.jsx)(`path`,{d:`M8.47 13.24a3.72 3.72 0 0 1-.2-1.24c0-.43.08-.84.19-1.24l-.01-.08-2.1-1.6-.07.03a6.02 6.02 0 0 0 0 5.78l2.19-1.65z`,fill:`#FBBC05`}),(0,a.jsx)(`path`,{d:`M12 8.22c.8 0 1.53.27 2.1.8l1.54-1.48C14.99 6.96 13.67 6.5 12 6.5c-2.63 0-4.7 1.32-5.72 3.29l2.18 1.66c.5-1.47 1.9-2.53 3.54-2.53z`,fill:`#EA4335`})]}),e)}function h(e){return p((0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(`rect`,{x:`2.2`,y:`2.2`,width:`19.6`,height:`19.6`,rx:`6.2`,fill:`#1877F2`}),(0,a.jsx)(`path`,{d:`M13.28 20v-6.02h2.02l.31-2.43h-2.33V10c0-.78.27-1.37 1.35-1.37h1.11V6.4c-.4-.06-1.09-.11-2.03-.11-2.3 0-3.64 1.22-3.64 3.76v1.49h-1.9v2.44h1.9V20z`,fill:`#fff`})]}),e)}function g(e){return p((0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(`path`,{d:`M15.38 11.84c.02 2.33 2.04 3.1 2.07 3.12-.03.07-.33 1.09-1.06 2.16-.63.91-1.3 1.84-2.34 1.86-1.03.02-1.37-.61-2.57-.61-1.2 0-1.57.59-2.53.63-1.02.04-1.79-1.01-2.43-1.92-1.3-1.89-2.3-5.33-.97-7.64.67-1.15 1.86-1.88 3.14-1.9.98-.02 1.89.65 2.57.65.67 0 1.92-.81 3.24-.69.55.02 2.1.22 3.09 1.67-.08.05-1.84 1.07-1.81 2.67z`,fill:`currentColor`}),(0,a.jsx)(`path`,{d:`M13.59 4.67c.53-.64.9-1.52.8-2.42-.77.04-1.69.52-2.24 1.15-.5.58-.93 1.49-.82 2.35.86.07 1.72-.44 2.26-1.08z`,fill:`currentColor`})]}),e)}function _(e){return p((0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(`rect`,{x:`3.5`,y:`3.5`,width:`7.8`,height:`7.8`,rx:`1.3`,fill:`#F25022`}),(0,a.jsx)(`rect`,{x:`12.7`,y:`3.5`,width:`7.8`,height:`7.8`,rx:`1.3`,fill:`#7FBA00`}),(0,a.jsx)(`rect`,{x:`3.5`,y:`12.7`,width:`7.8`,height:`7.8`,rx:`1.3`,fill:`#00A4EF`}),(0,a.jsx)(`rect`,{x:`12.7`,y:`12.7`,width:`7.8`,height:`7.8`,rx:`1.3`,fill:`#FFB900`})]}),e)}function v(e){return p((0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(`circle`,{cx:`12`,cy:`12`,r:`10.1`,fill:`#fff`}),(0,a.jsx)(`path`,{d:`M12.87 6.76c-2.95 0-4.74 2.03-4.74 4.34 0 1.65.92 3.07 2.38 3.62.1.03.14.01.17-.06l.32-1.23c.05-.14.02-.19-.09-.33-.26-.33-.47-.96-.47-1.57 0-1.52 1.14-2.97 3.08-2.97 1.68 0 2.86 1.14 2.86 2.78 0 1.86-.93 3.13-2.14 3.13-.67 0-1.17-.56-1-1.23.18-.8.55-1.64.55-2.2 0-.51-.28-.93-.84-.93-.67 0-1.2.69-1.2 1.62 0 .59.2.99.2.99l-.78 3.28c-.14.58-.03 1.55.01 1.68.02.08.1.1.15.03.09-.11 1.07-1.49 1.24-2.18l.27-1.06c.25.48.99.89 1.77.89 2.34 0 4.04-2.15 4.04-4.79 0-2.54-2.08-4.44-4.78-4.44z`,fill:`#E60023`})]}),e)}function y(e){return p((0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(`rect`,{x:`2.4`,y:`2.4`,width:`19.2`,height:`19.2`,rx:`4.8`,fill:`#fff`}),(0,a.jsx)(`path`,{d:`M8.1 10.02h2.04v7.24H8.1zm1.03-3.22a1.17 1.17 0 1 1 0 2.35 1.17 1.17 0 0 1 0-2.35zm2.68 3.22h1.95v.99c.34-.61 1.08-1.15 2.13-1.15 2.15 0 2.82 1.42 2.82 3.78v3.62h-2.04v-3.26c0-.98-.35-1.67-1.23-1.67-.66 0-1.05.45-1.23.88-.08.16-.08.38-.08.59v3.46h-2.32z`,fill:`#0A66C2`})]}),e)}var b={google:{label:`Sign in with Google`,iconLabel:`Google`,mode:`google`,Icon:m},facebook:{label:`Sign in with Facebook`,iconLabel:`Facebook`,mode:`outline`,Icon:h},apple:{label:`Sign in with Apple`,iconLabel:`Apple`,mode:`brand`,Icon:g},microsoft:{label:`Sign in with Microsoft`,iconLabel:`Microsoft`,mode:`brand`,Icon:_},pinterest:{label:`Sign in with Pinterest`,iconLabel:`Pinterest`,mode:`brand`,Icon:v},linkedin:{label:`Sign in with LinkedIn`,iconLabel:`LinkedIn`,mode:`brand`,Icon:y}},x=(0,i.forwardRef)(function({platform:e=`google`,variant:i=`outline`,size:o=`md`,iconOnly:s=!1,iconShape:c=`circle`,fullWidth:l=!1,loading:u=!1,active:d=!1,pulsing:f=!1,clickEffect:p=`ripple`,rippleColor:m,className:h,style:g,children:_,disabled:v=!1,type:y=`button`,onPointerDown:x,onKeyDown:S,"aria-label":C,...w},T){let E=b[e],D=E.Icon,O=_??E.label,k=C??(s?E.iconLabel:void 0),A=E.mode===`google`?i:E.mode,j=v||u,{effectClassName:M,effectLayer:N,handlePointerDown:P,triggerEffect:F}=n.t({effect:p,disabled:j,centered:s,color:m});return(0,a.jsxs)(`button`,{ref:T,type:y,className:t.t(`social-button-root`,e,A,o,l&&`full-width`,s&&`icon-only`,s&&`icon-shape-${c}`,u&&`loading`,d&&`active`,f&&`pulsing`,j&&`disabled`,M,h),style:g,disabled:j,"aria-busy":u||void 0,"aria-label":k,onPointerDown:e=>{P(e),x?.(e)},onKeyDown:e=>{(e.key===` `||e.key===`Enter`)&&F(e.currentTarget),S?.(e)},...w,children:[N,u&&(0,a.jsx)(r.r,{size:`sm`,color:`inherit`,className:`social-button-spinner`,"aria-hidden":`true`}),(0,a.jsx)(`span`,{className:`social-button-brand`,"aria-hidden":`true`,children:(0,a.jsx)(D,{className:`social-button-mark`})}),!s&&(0,a.jsx)(`span`,{className:`social-button-label`,children:O})]})});Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return x}});
|
|
2
|
+
//# sourceMappingURL=controls-DwL1-nVC.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controls-DwL1-nVC.cjs","names":[],"sources":["../src/components/controls/MButtonGroup/MButtonGroup.tsx","../src/components/controls/MRadio/RadioContext.ts","../src/components/controls/MRadio/MRadio.tsx","../src/components/controls/MRadio/MRadioGroup.tsx","../src/components/controls/MLoadMore/MLoadMore.tsx","../src/components/controls/MScrollTop/MScrollTop.tsx","../src/components/controls/MSocialButton/MSocialButton.icons.tsx","../src/components/controls/MSocialButton/MSocialButton.tsx"],"sourcesContent":["import {forwardRef, useMemo} from 'react'\nimport type {MButtonGroupProps} from './MButtonGroup.types'\nimport {ButtonGroupContext} from './MButtonGroupContext'\nimport type {MButtonGroupContextValue} from './MButtonGroupContext'\nimport {cn} from '../../../utils/cn'\nimport './MButtonGroup.css'\n\nexport const MButtonGroup = forwardRef<HTMLDivElement, MButtonGroupProps>(function MButtonGroup(\n {orientation = 'horizontal', variant, size, color, attached = true, className, children, ...rest},\n ref\n) {\n const ctx = useMemo<MButtonGroupContextValue>(() => ({variant, size, color}), [variant, size, color])\n\n return (\n <ButtonGroupContext.Provider value={ctx}>\n <div\n ref={ref}\n role=\"group\"\n className={cn('button-group', orientation, attached && 'attached', className)}\n {...rest}\n >\n {children}\n </div>\n </ButtonGroupContext.Provider>\n )\n})\n","import {createContext, useContext} from 'react'\nimport type {MRadioGroupContextValue} from './MRadio.types'\n\nexport const RadioContext = createContext<MRadioGroupContextValue | null>(null)\n\n// Read the nearest radio-group context when a radio participates in grouped state.\nexport function useRadioGroup(): MRadioGroupContextValue | null {\n return useContext(RadioContext)\n}\n","import {forwardRef, useCallback} from 'react'\nimport type * as React from 'react'\nimport type {MRadioProps} from './MRadio.types'\nimport {useRadioGroup} from './RadioContext'\nimport {cn} from '../../../utils/cn'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport './MRadio.css'\n\n// Render a single radio that can work standalone or inside MRadioGroup.\nexport const MRadio = forwardRef<HTMLInputElement, MRadioProps>(function MRadio(\n {\n checked,\n defaultChecked,\n name,\n id,\n value,\n disabled = false,\n size = 'md',\n color = 'primary',\n label,\n labelPosition = 'right',\n onChange,\n clickEffect = 'ripple',\n rippleColor,\n className,\n style,\n },\n ref\n) {\n const group = useRadioGroup()\n\n const resolvedName = group?.name ?? name\n const resolvedDisabled = group?.disabled ?? disabled\n const resolvedSize = group?.size ?? size\n const resolvedColor = group?.color ?? color\n const resolvedChecked = group ? group.value === value : checked\n const {effectClassName, effectLayer, handlePointerDown, triggerEffect} = useInteractionEffect<HTMLSpanElement>({\n effect: clickEffect,\n disabled: resolvedDisabled,\n centered: true,\n color: rippleColor,\n })\n\n // Delegate selection back to the group when one is present.\n const handleChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(event)\n if (group?.onChange && value) {\n group.onChange(value)\n }\n },\n [onChange, group, value]\n )\n\n return (\n <label\n className={cn(\n 'radio',\n resolvedSize,\n labelPosition === 'left' && 'label-left',\n resolvedDisabled && 'disabled',\n className\n )}\n style={style}\n >\n <span className={cn('circle', `color-${resolvedColor}`, effectClassName)} onPointerDown={handlePointerDown}>\n {effectLayer}\n <input\n ref={ref}\n type=\"radio\"\n name={resolvedName}\n id={id}\n value={value}\n checked={resolvedChecked}\n defaultChecked={!group ? defaultChecked : undefined}\n disabled={resolvedDisabled}\n onChange={handleChange}\n onKeyDown={(event) => {\n if (event.key === ' ' || event.key === 'Enter') {\n triggerEffect(event.currentTarget.parentElement as HTMLSpanElement | null)\n }\n }}\n className=\"input\"\n />\n </span>\n {label && <span className=\"label-text\">{label}</span>}\n </label>\n )\n})\n","import {useState, useCallback, useMemo} from 'react'\nimport type {MRadioGroupProps} from './MRadio.types'\nimport {RadioContext} from './RadioContext'\nimport {cn} from '../../../utils/cn'\nimport './MRadio.css'\n\n// Coordinate multiple radio items through shared context and optional controlled state.\nexport function MRadioGroup({\n name,\n value,\n defaultValue,\n onChange,\n direction = 'vertical',\n children,\n disabled = false,\n size = 'md',\n color = 'primary',\n error = false,\n errorText,\n label,\n className,\n style,\n}: MRadioGroupProps) {\n const [internalValue, setInternalValue] = useState(defaultValue)\n const currentValue = value !== undefined ? value : internalValue\n\n // Mirror controlled and uncontrolled usage with the same group API.\n const handleChange = useCallback(\n (val: string) => {\n if (value === undefined) {\n setInternalValue(val)\n }\n onChange?.(val)\n },\n [onChange, value]\n )\n\n // Memoize context so nested radios only update when relevant inputs change.\n const ctx = useMemo(\n () => ({name, value: currentValue, disabled, size, color, onChange: handleChange}),\n [name, currentValue, disabled, size, color, handleChange]\n )\n\n return (\n <RadioContext.Provider value={ctx}>\n <fieldset className={cn('radio-group', direction, className)} style={style} role=\"radiogroup\">\n {label && <legend className={cn('label', error && 'error')}>{label}</legend>}\n {children}\n {errorText && (\n <span className=\"field-error\" role=\"alert\">\n {errorText}\n </span>\n )}\n </fieldset>\n </RadioContext.Provider>\n )\n}\n","import {useEffect, useRef, useCallback} from 'react'\nimport type {MLoadMoreProps} from './MLoadMore.types'\nimport {MButton} from '../MButton'\nimport {cn} from '../../../utils/cn'\nimport './MLoadMore.css'\n\nexport function MLoadMore({\n onLoadMore,\n loading = false,\n hasMore = true,\n loaded,\n total,\n auto = false,\n autoThreshold = 100,\n variant = 'outlined',\n color = 'primary',\n label = 'Load more',\n loadingLabel = 'Loading...',\n doneLabel = 'All items loaded',\n className,\n ...rest\n}: MLoadMoreProps) {\n const sentinelRef = useRef<HTMLDivElement>(null)\n const loadMoreRef = useRef(onLoadMore)\n loadMoreRef.current = onLoadMore\n\n useEffect(() => {\n if (!auto || !hasMore || loading) return\n\n const sentinel = sentinelRef.current\n if (!sentinel) return\n\n const observer = new IntersectionObserver(\n (entries) => {\n if (entries[0].isIntersecting) {\n loadMoreRef.current()\n }\n },\n {rootMargin: `${autoThreshold}px`}\n )\n\n observer.observe(sentinel)\n return () => observer.disconnect()\n }, [auto, hasMore, loading, autoThreshold])\n\n const handleClick = useCallback(() => {\n if (!loading && hasMore) onLoadMore()\n }, [onLoadMore, loading, hasMore])\n\n const showCount = loaded !== undefined && total !== undefined\n\n return (\n <div className={cn('load-more', className)} {...rest}>\n {showCount && (\n <span className=\"load-more-count\">\n {loaded} / {total}\n </span>\n )}\n\n {hasMore ? (\n <MButton\n variant={variant}\n color={color}\n loading={loading}\n onClick={handleClick}\n className=\"load-more-btn\"\n >\n {loading ? loadingLabel : label}\n </MButton>\n ) : (\n <span className=\"load-more-done\">{doneLabel}</span>\n )}\n\n {auto && hasMore && <div ref={sentinelRef} className=\"load-more-sentinel\" />}\n\n {showCount && (\n <div className=\"load-more-bar\">\n <div className=\"load-more-bar-fill\" style={{width: `${Math.min((loaded / total) * 100, 100)}%`}} />\n </div>\n )}\n </div>\n )\n}\n","import {useState, useEffect, useCallback} from 'react'\nimport type {MScrollTopProps} from './MScrollTop.types'\nimport {MButton} from '../MButton'\nimport {MArrowUpIcon} from '../../../icons'\nimport {cn} from '../../../utils/cn'\nimport './MScrollTop.css'\n\nexport function MScrollTop({\n threshold = 300,\n variant = 'filled',\n color = 'primary',\n smooth = true,\n className,\n}: MScrollTopProps) {\n const [visible, setVisible] = useState(false)\n\n useEffect(() => {\n function onScroll() {\n setVisible(window.scrollY > threshold)\n }\n onScroll()\n window.addEventListener('scroll', onScroll, {passive: true})\n return () => window.removeEventListener('scroll', onScroll)\n }, [threshold])\n\n const scrollToTop = useCallback(() => {\n window.scrollTo({top: 0, behavior: smooth ? 'smooth' : 'instant'})\n }, [smooth])\n\n return (\n <MButton\n variant={variant}\n color={color}\n shape=\"circle\"\n size=\"lg\"\n iconOnly\n onClick={scrollToTop}\n aria-label=\"Scroll to top\"\n className={cn('scroll-top', visible && 'visible', className)}\n >\n <MArrowUpIcon />\n </MButton>\n )\n}\n","import type {ReactNode, SVGProps} from 'react'\n\ntype SocialMarkProps = SVGProps<SVGSVGElement>\n\nfunction createMark(children: ReactNode, props: SocialMarkProps) {\n return (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" {...props}>\n {children}\n </svg>\n )\n}\n\nexport function SocialGoogleMark(props: SocialMarkProps) {\n return createMark(\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10.2\" fill=\"#fff\" stroke=\"#dadce0\" strokeWidth=\"1.2\" />\n <path\n d=\"M17.95 12.25c0-.48-.04-.83-.13-1.2H12v2.26h3.42c-.07.56-.48 1.4-1.4 1.97l-.01.08 2 1.52.14.02c1.28-1.15 1.8-2.84 1.8-4.65z\"\n fill=\"#4285F4\"\n />\n <path\n d=\"M12 18.2c1.67 0 3.07-.54 4.1-1.48l-2.13-1.62c-.57.39-1.34.67-1.97.67-1.64 0-3.03-1.06-3.53-2.53l-.08.01-2.08 1.58-.03.08c1.02 1.97 3.09 3.29 5.72 3.29z\"\n fill=\"#34A853\"\n />\n <path\n d=\"M8.47 13.24a3.72 3.72 0 0 1-.2-1.24c0-.43.08-.84.19-1.24l-.01-.08-2.1-1.6-.07.03a6.02 6.02 0 0 0 0 5.78l2.19-1.65z\"\n fill=\"#FBBC05\"\n />\n <path\n d=\"M12 8.22c.8 0 1.53.27 2.1.8l1.54-1.48C14.99 6.96 13.67 6.5 12 6.5c-2.63 0-4.7 1.32-5.72 3.29l2.18 1.66c.5-1.47 1.9-2.53 3.54-2.53z\"\n fill=\"#EA4335\"\n />\n </>,\n props\n )\n}\n\nexport function SocialFacebookMark(props: SocialMarkProps) {\n return createMark(\n <>\n <rect x=\"2.2\" y=\"2.2\" width=\"19.6\" height=\"19.6\" rx=\"6.2\" fill=\"#1877F2\" />\n <path\n d=\"M13.28 20v-6.02h2.02l.31-2.43h-2.33V10c0-.78.27-1.37 1.35-1.37h1.11V6.4c-.4-.06-1.09-.11-2.03-.11-2.3 0-3.64 1.22-3.64 3.76v1.49h-1.9v2.44h1.9V20z\"\n fill=\"#fff\"\n />\n </>,\n props\n )\n}\n\nexport function SocialAppleMark(props: SocialMarkProps) {\n return createMark(\n <>\n <path\n d=\"M15.38 11.84c.02 2.33 2.04 3.1 2.07 3.12-.03.07-.33 1.09-1.06 2.16-.63.91-1.3 1.84-2.34 1.86-1.03.02-1.37-.61-2.57-.61-1.2 0-1.57.59-2.53.63-1.02.04-1.79-1.01-2.43-1.92-1.3-1.89-2.3-5.33-.97-7.64.67-1.15 1.86-1.88 3.14-1.9.98-.02 1.89.65 2.57.65.67 0 1.92-.81 3.24-.69.55.02 2.1.22 3.09 1.67-.08.05-1.84 1.07-1.81 2.67z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M13.59 4.67c.53-.64.9-1.52.8-2.42-.77.04-1.69.52-2.24 1.15-.5.58-.93 1.49-.82 2.35.86.07 1.72-.44 2.26-1.08z\"\n fill=\"currentColor\"\n />\n </>,\n props\n )\n}\n\nexport function SocialMicrosoftMark(props: SocialMarkProps) {\n return createMark(\n <>\n <rect x=\"3.5\" y=\"3.5\" width=\"7.8\" height=\"7.8\" rx=\"1.3\" fill=\"#F25022\" />\n <rect x=\"12.7\" y=\"3.5\" width=\"7.8\" height=\"7.8\" rx=\"1.3\" fill=\"#7FBA00\" />\n <rect x=\"3.5\" y=\"12.7\" width=\"7.8\" height=\"7.8\" rx=\"1.3\" fill=\"#00A4EF\" />\n <rect x=\"12.7\" y=\"12.7\" width=\"7.8\" height=\"7.8\" rx=\"1.3\" fill=\"#FFB900\" />\n </>,\n props\n )\n}\n\nexport function SocialPinterestMark(props: SocialMarkProps) {\n return createMark(\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10.1\" fill=\"#fff\" />\n <path\n d=\"M12.87 6.76c-2.95 0-4.74 2.03-4.74 4.34 0 1.65.92 3.07 2.38 3.62.1.03.14.01.17-.06l.32-1.23c.05-.14.02-.19-.09-.33-.26-.33-.47-.96-.47-1.57 0-1.52 1.14-2.97 3.08-2.97 1.68 0 2.86 1.14 2.86 2.78 0 1.86-.93 3.13-2.14 3.13-.67 0-1.17-.56-1-1.23.18-.8.55-1.64.55-2.2 0-.51-.28-.93-.84-.93-.67 0-1.2.69-1.2 1.62 0 .59.2.99.2.99l-.78 3.28c-.14.58-.03 1.55.01 1.68.02.08.1.1.15.03.09-.11 1.07-1.49 1.24-2.18l.27-1.06c.25.48.99.89 1.77.89 2.34 0 4.04-2.15 4.04-4.79 0-2.54-2.08-4.44-4.78-4.44z\"\n fill=\"#E60023\"\n />\n </>,\n props\n )\n}\n\nexport function SocialLinkedInMark(props: SocialMarkProps) {\n return createMark(\n <>\n <rect x=\"2.4\" y=\"2.4\" width=\"19.2\" height=\"19.2\" rx=\"4.8\" fill=\"#fff\" />\n <path\n d=\"M8.1 10.02h2.04v7.24H8.1zm1.03-3.22a1.17 1.17 0 1 1 0 2.35 1.17 1.17 0 0 1 0-2.35zm2.68 3.22h1.95v.99c.34-.61 1.08-1.15 2.13-1.15 2.15 0 2.82 1.42 2.82 3.78v3.62h-2.04v-3.26c0-.98-.35-1.67-1.23-1.67-.66 0-1.05.45-1.23.88-.08.16-.08.38-.08.59v3.46h-2.32z\"\n fill=\"#0A66C2\"\n />\n </>,\n props\n )\n}\n","import {forwardRef} from 'react'\nimport type {MSocialButtonProps} from './MSocialButton.types'\nimport {\n SocialAppleMark,\n SocialFacebookMark,\n SocialGoogleMark,\n SocialLinkedInMark,\n SocialMicrosoftMark,\n SocialPinterestMark,\n} from './MSocialButton.icons'\nimport {MSpinner} from '../../feedback'\nimport {cn} from '../../../utils/cn'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport './MSocialButton.css'\n\nconst socialButtonConfig = {\n google: {\n label: 'Sign in with Google',\n iconLabel: 'Google',\n mode: 'google',\n Icon: SocialGoogleMark,\n },\n facebook: {\n label: 'Sign in with Facebook',\n iconLabel: 'Facebook',\n mode: 'outline',\n Icon: SocialFacebookMark,\n },\n apple: {\n label: 'Sign in with Apple',\n iconLabel: 'Apple',\n mode: 'brand',\n Icon: SocialAppleMark,\n },\n microsoft: {\n label: 'Sign in with Microsoft',\n iconLabel: 'Microsoft',\n mode: 'brand',\n Icon: SocialMicrosoftMark,\n },\n pinterest: {\n label: 'Sign in with Pinterest',\n iconLabel: 'Pinterest',\n mode: 'brand',\n Icon: SocialPinterestMark,\n },\n linkedin: {\n label: 'Sign in with LinkedIn',\n iconLabel: 'LinkedIn',\n mode: 'brand',\n Icon: SocialLinkedInMark,\n },\n} as const\n\nexport const MSocialButton = forwardRef<HTMLButtonElement, MSocialButtonProps>(function MSocialButton(\n {\n platform = 'google',\n variant = 'outline',\n size = 'md',\n iconOnly = false,\n iconShape = 'circle',\n fullWidth = false,\n loading = false,\n active = false,\n pulsing = false,\n clickEffect = 'ripple',\n rippleColor,\n className,\n style,\n children,\n disabled = false,\n type = 'button',\n onPointerDown,\n onKeyDown,\n 'aria-label': ariaLabel,\n ...rest\n },\n ref\n) {\n const config = socialButtonConfig[platform]\n const Icon = config.Icon\n const label = children ?? config.label\n const resolvedAriaLabel = ariaLabel ?? (iconOnly ? config.iconLabel : undefined)\n const resolvedVariant = config.mode === 'google' ? variant : config.mode\n const isDisabled = disabled || loading\n const {effectClassName, effectLayer, handlePointerDown, triggerEffect} = useInteractionEffect<HTMLButtonElement>({\n effect: clickEffect,\n disabled: isDisabled,\n centered: iconOnly,\n color: rippleColor,\n })\n\n return (\n <button\n ref={ref}\n type={type}\n className={cn(\n 'social-button-root',\n platform,\n resolvedVariant,\n size,\n fullWidth && 'full-width',\n iconOnly && 'icon-only',\n iconOnly && `icon-shape-${iconShape}`,\n loading && 'loading',\n active && 'active',\n pulsing && 'pulsing',\n isDisabled && 'disabled',\n effectClassName,\n className\n )}\n style={style}\n disabled={isDisabled}\n aria-busy={loading || undefined}\n aria-label={resolvedAriaLabel}\n onPointerDown={(event) => {\n handlePointerDown(event)\n onPointerDown?.(event)\n }}\n onKeyDown={(event) => {\n if (event.key === ' ' || event.key === 'Enter') {\n triggerEffect(event.currentTarget)\n }\n\n onKeyDown?.(event)\n }}\n {...rest}\n >\n {effectLayer}\n {loading && <MSpinner size=\"sm\" color=\"inherit\" className=\"social-button-spinner\" aria-hidden=\"true\" />}\n <span className=\"social-button-brand\" aria-hidden=\"true\">\n <Icon className=\"social-button-mark\" />\n </span>\n {!iconOnly && <span className=\"social-button-label\">{label}</span>}\n </button>\n )\n})\n"],"mappings":"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"}
|
package/dist/controls.cjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
const {ensureStyles}=require('./style-runtime.cjs')
|
|
2
2
|
ensureStyles()
|
|
3
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./MButton-
|
|
3
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./MButton-B8rXmFX9.cjs`),t=require(`./controls-DwL1-nVC.cjs`),n=require(`./MCheckbox-Bea3orrs.cjs`),r=require(`./MToggle-CsGS_W3X.cjs`),i=require(`./MSlider-BCMJkvcA.cjs`);exports.MButton=e.t,exports.MButtonGroup=t.o,exports.MCheckbox=n.t,exports.MLoadMore=t.r,exports.MRadio=t.a,exports.MRadioGroup=t.i,exports.MScrollTop=t.n,exports.MSlider=i.t,exports.MSocialButton=t.t,exports.MToggle=r.t;
|
package/dist/controls.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import {ensureStyles} from './style-runtime.js'
|
|
2
2
|
ensureStyles()
|
|
3
|
-
import { t as e } from "./MButton-
|
|
4
|
-
import { t } from "./
|
|
5
|
-
import {
|
|
6
|
-
import { t as c } from "./
|
|
7
|
-
import { t as l } from "./MSlider-
|
|
8
|
-
export { e as MButton,
|
|
3
|
+
import { t as e } from "./MButton-BmTDe5Oa.js";
|
|
4
|
+
import { a as t, i as n, n as r, o as i, r as a, t as o } from "./controls-BMwQ3C1R.js";
|
|
5
|
+
import { t as s } from "./MCheckbox-B7SpcD4H.js";
|
|
6
|
+
import { t as c } from "./MToggle-B6emKoKq.js";
|
|
7
|
+
import { t as l } from "./MSlider-CqrusKJQ.js";
|
|
8
|
+
export { e as MButton, i as MButtonGroup, s as MCheckbox, a as MLoadMore, t as MRadio, n as MRadioGroup, r as MScrollTop, l as MSlider, o as MSocialButton, c as MToggle };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./MCookieBootstrap-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./MCookieBootstrap-DSOT4FQo.cjs`);function t(e){return e.replace(/\/+$/,``)}function n(e){return`${e.storageKey??`mineralui-cookie-consent`}-key`}function r(e){if(typeof window>`u`)return null;try{return window.localStorage.getItem(e)}catch{return null}}function i(e,t){if(!(typeof window>`u`||!t))try{window.localStorage.setItem(e,t)}catch{}}function a(t){typeof window>`u`||(window[e.o]=t.config,window[e.c]=t,window.dispatchEvent(new CustomEvent(e.l)))}function o(e){if(!e?.src||typeof window>`u`)return null;try{return new URL(e.src,window.location.href)}catch{return null}}function s(e){if(typeof document>`u`)return null;let t=document.getElementById(`mineral-cookie-bootstrap`);if(t instanceof HTMLScriptElement)return t;let n=document.currentScript;if(n instanceof HTMLScriptElement)return n;if(!e||typeof window>`u`)return null;for(let t of Array.from(document.querySelectorAll(`script[src]`)))try{let n=new URL(t.src,window.location.href);if(n.href===e.href||n.origin===e.origin&&n.pathname===e.pathname)return t}catch{}return null}function c(e,a,o){let s=`${t(a)}/cookie/sites/${encodeURIComponent(o)}`,c=n(e);return{config:e,getDeclaration:async()=>{let e=await fetch(`${s}/declaration`);return e.ok?(await e.json()).items??[]:[]},getConsent:async()=>{let e=r(c);if(!e)return null;let t=await fetch(`${s}/consent?consentKey=${encodeURIComponent(e)}`);return t.ok?(await t.json()).state??null:null},saveConsent:async t=>{let n=r(c),a=await fetch(`${s}/consent`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({...n?{consentKey:n}:{},version:t.version,decidedAt:t.decidedAt,source:t.source,categories:t.categories,domain:typeof window<`u`?window.location.hostname:e.domain??null})});a.ok&&i(c,(await a.json()).consentKey)}}}async function l(n){if(typeof window>`u`||typeof fetch>`u`)return null;let r=window[e.o];if(r)return r;let i=s(n),l=n??o(i),u=i?.dataset.siteKey??l?.searchParams.get(`siteKey`);if(!u)return null;let d=i?.dataset.apiBase??l?.searchParams.get(`apiBase`)??l?.origin??window.location.origin,f=i?.dataset.configEndpoint??l?.searchParams.get(`configEndpoint`)??`${t(d)}/cookie/bootstrap/${encodeURIComponent(u)}`;try{let e=await fetch(f,{headers:{"x-mineral-site-key":u}});if(!e.ok)return null;let t=await e.json(),n={...t,siteKey:t.siteKey??u,scanEndpoint:t.scanEndpoint??i?.dataset.scanEndpoint??l?.searchParams.get(`scanEndpoint`)??void 0};return a(c(n,d,u)),n}catch{return null}}async function u(t){return await l(t),e.t()}u(new URL({}.url)),exports.MCOOKIE_BOOTSTRAP_CONFIG_KEY=e.o,exports.MCOOKIE_CONSENT_CHANGE_EVENT=e.s,exports.MCOOKIE_RUNTIME_KEY=e.c,exports.MCOOKIE_RUNTIME_READY_EVENT=e.l,exports.autoBootstrapMCookieConsent=e.t,exports.bootstrapMCookieConsent=e.n,exports.readMCookieBootstrapConfig=e.r,exports.reportMCookieSurface=e.i,exports.scanMCookieSurface=e.a;
|
|
2
2
|
//# sourceMappingURL=cookie-consent-bootstrap.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cookie-consent-bootstrap.cjs","names":[],"sources":["../src/cookie-consent-bootstrap.ts"],"sourcesContent":["export * from './components/feedback/MCookie/MCookieBootstrap'\n\nimport {\n autoBootstrapMCookieConsent,\n MCOOKIE_BOOTSTRAP_CONFIG_KEY,\n MCOOKIE_RUNTIME_KEY,\n MCOOKIE_RUNTIME_READY_EVENT,\n} from './components/feedback/MCookie/MCookieBootstrap'\nimport type {\n MCookieBootstrapConfig,\n MCookieRuntime,\n} from './components/feedback/MCookie/MCookieBootstrap'\nimport type {MCookieConsentState} from './components/feedback/MCookie/MCookieConsentProvider'\n\nfunction getConsentKeyStorageKey(config: MCookieBootstrapConfig) {\n return `${config.storageKey ?? 'mineralui-cookie-consent'}-key`\n}\n\nfunction readStoredConsentKey(storageKey: string) {\n if (typeof window === 'undefined') {\n return null\n }\n\n try {\n return window.localStorage.getItem(storageKey)\n } catch {\n return null\n }\n}\n\nfunction writeStoredConsentKey(storageKey: string, consentKey: string | null | undefined) {\n if (typeof window === 'undefined' || !consentKey) {\n return\n }\n\n try {\n window.localStorage.setItem(storageKey, consentKey)\n } catch {\n // ignore storage issues\n }\n}\n\nfunction dispatchRuntimeReady(runtime: MCookieRuntime) {\n if (typeof window === 'undefined') {\n return\n }\n\n window[MCOOKIE_BOOTSTRAP_CONFIG_KEY] = runtime.config\n window[MCOOKIE_RUNTIME_KEY] = runtime\n window.dispatchEvent(new CustomEvent(MCOOKIE_RUNTIME_READY_EVENT))\n}\n\nfunction findBootstrapScriptElement(scriptUrl: URL) {\n if (typeof document === 'undefined') {\n return null\n }\n\n for (const candidate of Array.from(document.querySelectorAll<HTMLScriptElement>('script[src]'))) {\n try {\n const candidateUrl = new URL(candidate.src, window.location.href)\n\n if (candidateUrl.href === scriptUrl.href) {\n return candidate\n }\n\n if (candidateUrl.origin === scriptUrl.origin && candidateUrl.pathname === scriptUrl.pathname) {\n return candidate\n }\n } catch {\n // ignore invalid script urls\n }\n }\n\n return null\n}\n\nfunction createRuntime(config: MCookieBootstrapConfig, scriptUrl: URL, siteKey: string): MCookieRuntime {\n const cookieSiteBase = `${scriptUrl.origin}/cookie/sites/${encodeURIComponent(siteKey)}`\n const consentKeyStorage = getConsentKeyStorageKey(config)\n\n return {\n config,\n getDeclaration: async () => {\n const response = await fetch(`${cookieSiteBase}/declaration`)\n\n if (!response.ok) {\n return []\n }\n\n const payload = await response.json()\n return payload.items ?? []\n },\n getConsent: async () => {\n const consentKey = readStoredConsentKey(consentKeyStorage)\n\n if (!consentKey) {\n return null\n }\n\n const response = await fetch(`${cookieSiteBase}/consent?consentKey=${encodeURIComponent(consentKey)}`)\n\n if (!response.ok) {\n return null\n }\n\n const payload = await response.json()\n return payload.state ?? null\n },\n saveConsent: async (state: MCookieConsentState) => {\n const consentKey = readStoredConsentKey(consentKeyStorage)\n const response = await fetch(`${cookieSiteBase}/consent`, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n },\n body: JSON.stringify({\n ...(consentKey ? {consentKey} : {}),\n version: state.version,\n decidedAt: state.decidedAt,\n source: state.source,\n categories: state.categories,\n domain: typeof window !== 'undefined' ? window.location.hostname : config.domain ?? null,\n }),\n })\n\n if (!response.ok) {\n return\n }\n\n const payload = await response.json()\n writeStoredConsentKey(consentKeyStorage, payload.consentKey)\n },\n }\n}\n\nasync function resolveBootstrapConfigFromScript() {\n if (typeof window === 'undefined' || typeof fetch === 'undefined') {\n return null\n }\n\n const existingConfig = window[MCOOKIE_BOOTSTRAP_CONFIG_KEY]\n if (existingConfig) {\n return existingConfig\n }\n\n let scriptUrl: URL\n\n try {\n scriptUrl = new URL(import.meta.url)\n } catch {\n return null\n }\n\n const bootstrapScript = findBootstrapScriptElement(scriptUrl)\n const siteKey = bootstrapScript?.dataset.siteKey ?? scriptUrl.searchParams.get('siteKey')\n\n if (!siteKey) {\n return null\n }\n\n const configEndpoint =\n bootstrapScript?.dataset.configEndpoint ??\n scriptUrl.searchParams.get('configEndpoint') ??\n `${scriptUrl.origin}/cookie/bootstrap/${encodeURIComponent(siteKey)}`\n\n try {\n const response = await fetch(configEndpoint, {\n headers: {\n 'x-mineral-site-key': siteKey,\n },\n })\n\n if (!response.ok) {\n return null\n }\n\n const resolvedConfig = (await response.json()) as MCookieBootstrapConfig\n const mergedConfig: MCookieBootstrapConfig = {\n ...resolvedConfig,\n siteKey: resolvedConfig.siteKey ?? siteKey,\n scanEndpoint:\n resolvedConfig.scanEndpoint ??\n bootstrapScript?.dataset.scanEndpoint ??\n scriptUrl.searchParams.get('scanEndpoint') ??\n undefined,\n }\n\n dispatchRuntimeReady(createRuntime(mergedConfig, scriptUrl, siteKey))\n return mergedConfig\n } catch {\n return null\n }\n}\n\nvoid resolveBootstrapConfigFromScript().finally(() => {\n autoBootstrapMCookieConsent()\n})\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cookie-consent-bootstrap.cjs","names":[],"sources":["../src/components/feedback/MCookie/MCookieBootstrap/MCookieBootstrap.script.ts","../src/cookie-consent-bootstrap.ts"],"sourcesContent":["import {autoBootstrapMCookieConsent} from './MCookieBootstrap'\nimport {\n MCOOKIE_BOOTSTRAP_CONFIG_KEY,\n MCOOKIE_RUNTIME_KEY,\n MCOOKIE_RUNTIME_READY_EVENT,\n type MCookieBootstrapConfig,\n type MCookieRuntime,\n} from './MCookieBootstrap.types'\nimport type {MCookieConsentState} from '../MCookieConsentProvider'\n\nfunction trimTrailingSlash(value: string) {\n return value.replace(/\\/+$/, '')\n}\n\nfunction getConsentKeyStorageKey(config: MCookieBootstrapConfig) {\n return `${config.storageKey ?? 'mineralui-cookie-consent'}-key`\n}\n\nfunction readStoredConsentKey(storageKey: string) {\n if (typeof window === 'undefined') {\n return null\n }\n\n try {\n return window.localStorage.getItem(storageKey)\n } catch {\n return null\n }\n}\n\nfunction writeStoredConsentKey(storageKey: string, consentKey: string | null | undefined) {\n if (typeof window === 'undefined' || !consentKey) {\n return\n }\n\n try {\n window.localStorage.setItem(storageKey, consentKey)\n } catch {\n // ignore storage issues\n }\n}\n\nfunction dispatchRuntimeReady(runtime: MCookieRuntime) {\n if (typeof window === 'undefined') {\n return\n }\n\n window[MCOOKIE_BOOTSTRAP_CONFIG_KEY] = runtime.config\n window[MCOOKIE_RUNTIME_KEY] = runtime\n window.dispatchEvent(new CustomEvent(MCOOKIE_RUNTIME_READY_EVENT))\n}\n\nfunction readScriptUrl(candidate: HTMLScriptElement | null) {\n if (!candidate?.src || typeof window === 'undefined') {\n return null\n }\n\n try {\n return new URL(candidate.src, window.location.href)\n } catch {\n return null\n }\n}\n\nfunction findBootstrapScriptElement(scriptUrl?: URL | null) {\n if (typeof document === 'undefined') {\n return null\n }\n\n const namedScript = document.getElementById('mineral-cookie-bootstrap')\n if (namedScript instanceof HTMLScriptElement) {\n return namedScript\n }\n\n const currentScript = document.currentScript\n if (currentScript instanceof HTMLScriptElement) {\n return currentScript\n }\n\n if (!scriptUrl || typeof window === 'undefined') {\n return null\n }\n\n for (const candidate of Array.from(document.querySelectorAll<HTMLScriptElement>('script[src]'))) {\n try {\n const candidateUrl = new URL(candidate.src, window.location.href)\n\n if (candidateUrl.href === scriptUrl.href) {\n return candidate\n }\n\n if (candidateUrl.origin === scriptUrl.origin && candidateUrl.pathname === scriptUrl.pathname) {\n return candidate\n }\n } catch {\n // ignore invalid script urls\n }\n }\n\n return null\n}\n\nexport function createMCookieRuntime(\n config: MCookieBootstrapConfig,\n apiBaseUrl: string,\n siteKey: string\n): MCookieRuntime {\n const cookieSiteBase = `${trimTrailingSlash(apiBaseUrl)}/cookie/sites/${encodeURIComponent(siteKey)}`\n const consentKeyStorage = getConsentKeyStorageKey(config)\n\n return {\n config,\n getDeclaration: async () => {\n const response = await fetch(`${cookieSiteBase}/declaration`)\n\n if (!response.ok) {\n return []\n }\n\n const payload = await response.json()\n return payload.items ?? []\n },\n getConsent: async () => {\n const consentKey = readStoredConsentKey(consentKeyStorage)\n\n if (!consentKey) {\n return null\n }\n\n const response = await fetch(`${cookieSiteBase}/consent?consentKey=${encodeURIComponent(consentKey)}`)\n\n if (!response.ok) {\n return null\n }\n\n const payload = await response.json()\n return payload.state ?? null\n },\n saveConsent: async (state: MCookieConsentState) => {\n const consentKey = readStoredConsentKey(consentKeyStorage)\n const response = await fetch(`${cookieSiteBase}/consent`, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n },\n body: JSON.stringify({\n ...(consentKey ? {consentKey} : {}),\n version: state.version,\n decidedAt: state.decidedAt,\n source: state.source,\n categories: state.categories,\n domain: typeof window !== 'undefined' ? window.location.hostname : (config.domain ?? null),\n }),\n })\n\n if (!response.ok) {\n return\n }\n\n const payload = await response.json()\n writeStoredConsentKey(consentKeyStorage, payload.consentKey)\n },\n }\n}\n\nexport async function resolveMCookieBootstrapConfigFromScript(scriptUrl?: URL | null) {\n if (typeof window === 'undefined' || typeof fetch === 'undefined') {\n return null\n }\n\n const existingConfig = window[MCOOKIE_BOOTSTRAP_CONFIG_KEY]\n if (existingConfig) {\n return existingConfig\n }\n\n const bootstrapScript = findBootstrapScriptElement(scriptUrl)\n const resolvedScriptUrl = scriptUrl ?? readScriptUrl(bootstrapScript)\n const siteKey = bootstrapScript?.dataset.siteKey ?? resolvedScriptUrl?.searchParams.get('siteKey')\n\n if (!siteKey) {\n return null\n }\n\n const apiBaseUrl =\n bootstrapScript?.dataset.apiBase ??\n resolvedScriptUrl?.searchParams.get('apiBase') ??\n resolvedScriptUrl?.origin ??\n window.location.origin\n\n const configEndpoint =\n bootstrapScript?.dataset.configEndpoint ??\n resolvedScriptUrl?.searchParams.get('configEndpoint') ??\n `${trimTrailingSlash(apiBaseUrl)}/cookie/bootstrap/${encodeURIComponent(siteKey)}`\n\n try {\n const response = await fetch(configEndpoint, {\n headers: {\n 'x-mineral-site-key': siteKey,\n },\n })\n\n if (!response.ok) {\n return null\n }\n\n const resolvedConfig = (await response.json()) as MCookieBootstrapConfig\n const mergedConfig: MCookieBootstrapConfig = {\n ...resolvedConfig,\n siteKey: resolvedConfig.siteKey ?? siteKey,\n scanEndpoint:\n resolvedConfig.scanEndpoint ??\n bootstrapScript?.dataset.scanEndpoint ??\n resolvedScriptUrl?.searchParams.get('scanEndpoint') ??\n undefined,\n }\n\n dispatchRuntimeReady(createMCookieRuntime(mergedConfig, apiBaseUrl, siteKey))\n return mergedConfig\n } catch {\n return null\n }\n}\n\nexport async function initializeMCookieConsentBootstrapScript(scriptUrl?: URL | null) {\n await resolveMCookieBootstrapConfigFromScript(scriptUrl)\n return autoBootstrapMCookieConsent()\n}\n","export * from './components/feedback/MCookie/MCookieBootstrap'\n\nimport {initializeMCookieConsentBootstrapScript} from './components/feedback/MCookie/MCookieBootstrap/MCookieBootstrap.script'\n\nvoid initializeMCookieConsentBootstrapScript(new URL(import.meta.url))\n"],"mappings":"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"}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
import { a as e, c as t, i as n, l as r, n as i, o as a, r as o, s, t as c } from "./MCookieBootstrap-
|
|
2
|
-
//#region src/
|
|
1
|
+
import { a as e, c as t, i as n, l as r, n as i, o as a, r as o, s, t as c } from "./MCookieBootstrap-CNYLvKjW.js";
|
|
2
|
+
//#region src/components/feedback/MCookie/MCookieBootstrap/MCookieBootstrap.script.ts
|
|
3
3
|
function l(e) {
|
|
4
|
-
return
|
|
4
|
+
return e.replace(/\/+$/, "");
|
|
5
5
|
}
|
|
6
6
|
function u(e) {
|
|
7
|
+
return `${e.storageKey ?? "mineralui-cookie-consent"}-key`;
|
|
8
|
+
}
|
|
9
|
+
function d(e) {
|
|
7
10
|
if (typeof window > "u") return null;
|
|
8
11
|
try {
|
|
9
12
|
return window.localStorage.getItem(e);
|
|
@@ -11,24 +14,37 @@ function u(e) {
|
|
|
11
14
|
return null;
|
|
12
15
|
}
|
|
13
16
|
}
|
|
14
|
-
function
|
|
17
|
+
function f(e, t) {
|
|
15
18
|
if (!(typeof window > "u" || !t)) try {
|
|
16
19
|
window.localStorage.setItem(e, t);
|
|
17
20
|
} catch {}
|
|
18
21
|
}
|
|
19
|
-
function
|
|
22
|
+
function p(e) {
|
|
20
23
|
typeof window > "u" || (window[a] = e.config, window[t] = e, window.dispatchEvent(new CustomEvent(r)));
|
|
21
24
|
}
|
|
22
|
-
function
|
|
25
|
+
function m(e) {
|
|
26
|
+
if (!e?.src || typeof window > "u") return null;
|
|
27
|
+
try {
|
|
28
|
+
return new URL(e.src, window.location.href);
|
|
29
|
+
} catch {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function h(e) {
|
|
23
34
|
if (typeof document > "u") return null;
|
|
35
|
+
let t = document.getElementById("mineral-cookie-bootstrap");
|
|
36
|
+
if (t instanceof HTMLScriptElement) return t;
|
|
37
|
+
let n = document.currentScript;
|
|
38
|
+
if (n instanceof HTMLScriptElement) return n;
|
|
39
|
+
if (!e || typeof window > "u") return null;
|
|
24
40
|
for (let t of Array.from(document.querySelectorAll("script[src]"))) try {
|
|
25
41
|
let n = new URL(t.src, window.location.href);
|
|
26
42
|
if (n.href === e.href || n.origin === e.origin && n.pathname === e.pathname) return t;
|
|
27
43
|
} catch {}
|
|
28
44
|
return null;
|
|
29
45
|
}
|
|
30
|
-
function
|
|
31
|
-
let r = `${t
|
|
46
|
+
function g(e, t, n) {
|
|
47
|
+
let r = `${l(t)}/cookie/sites/${encodeURIComponent(n)}`, i = u(e);
|
|
32
48
|
return {
|
|
33
49
|
config: e,
|
|
34
50
|
getDeclaration: async () => {
|
|
@@ -36,13 +52,13 @@ function m(e, t, n) {
|
|
|
36
52
|
return e.ok ? (await e.json()).items ?? [] : [];
|
|
37
53
|
},
|
|
38
54
|
getConsent: async () => {
|
|
39
|
-
let e =
|
|
55
|
+
let e = d(i);
|
|
40
56
|
if (!e) return null;
|
|
41
57
|
let t = await fetch(`${r}/consent?consentKey=${encodeURIComponent(e)}`);
|
|
42
58
|
return t.ok ? (await t.json()).state ?? null : null;
|
|
43
59
|
},
|
|
44
60
|
saveConsent: async (t) => {
|
|
45
|
-
let n =
|
|
61
|
+
let n = d(i), a = await fetch(`${r}/consent`, {
|
|
46
62
|
method: "POST",
|
|
47
63
|
headers: { "content-type": "application/json" },
|
|
48
64
|
body: JSON.stringify({
|
|
@@ -54,39 +70,36 @@ function m(e, t, n) {
|
|
|
54
70
|
domain: typeof window < "u" ? window.location.hostname : e.domain ?? null
|
|
55
71
|
})
|
|
56
72
|
});
|
|
57
|
-
a.ok &&
|
|
73
|
+
a.ok && f(i, (await a.json()).consentKey);
|
|
58
74
|
}
|
|
59
75
|
};
|
|
60
76
|
}
|
|
61
|
-
async function
|
|
77
|
+
async function _(e) {
|
|
62
78
|
if (typeof window > "u" || typeof fetch > "u") return null;
|
|
63
|
-
let
|
|
64
|
-
if (
|
|
65
|
-
let
|
|
79
|
+
let t = window[a];
|
|
80
|
+
if (t) return t;
|
|
81
|
+
let n = h(e), r = e ?? m(n), i = n?.dataset.siteKey ?? r?.searchParams.get("siteKey");
|
|
82
|
+
if (!i) return null;
|
|
83
|
+
let o = n?.dataset.apiBase ?? r?.searchParams.get("apiBase") ?? r?.origin ?? window.location.origin, s = n?.dataset.configEndpoint ?? r?.searchParams.get("configEndpoint") ?? `${l(o)}/cookie/bootstrap/${encodeURIComponent(i)}`;
|
|
66
84
|
try {
|
|
67
|
-
|
|
68
|
-
} catch {
|
|
69
|
-
return null;
|
|
70
|
-
}
|
|
71
|
-
let n = p(t), r = n?.dataset.siteKey ?? t.searchParams.get("siteKey");
|
|
72
|
-
if (!r) return null;
|
|
73
|
-
let i = n?.dataset.configEndpoint ?? t.searchParams.get("configEndpoint") ?? `${t.origin}/cookie/bootstrap/${encodeURIComponent(r)}`;
|
|
74
|
-
try {
|
|
75
|
-
let e = await fetch(i, { headers: { "x-mineral-site-key": r } });
|
|
85
|
+
let e = await fetch(s, { headers: { "x-mineral-site-key": i } });
|
|
76
86
|
if (!e.ok) return null;
|
|
77
|
-
let
|
|
78
|
-
...
|
|
79
|
-
siteKey:
|
|
80
|
-
scanEndpoint:
|
|
87
|
+
let t = await e.json(), a = {
|
|
88
|
+
...t,
|
|
89
|
+
siteKey: t.siteKey ?? i,
|
|
90
|
+
scanEndpoint: t.scanEndpoint ?? n?.dataset.scanEndpoint ?? r?.searchParams.get("scanEndpoint") ?? void 0
|
|
81
91
|
};
|
|
82
|
-
return
|
|
92
|
+
return p(g(a, o, i)), a;
|
|
83
93
|
} catch {
|
|
84
94
|
return null;
|
|
85
95
|
}
|
|
86
96
|
}
|
|
87
|
-
|
|
88
|
-
c();
|
|
89
|
-
}
|
|
97
|
+
async function v(e) {
|
|
98
|
+
return await _(e), c();
|
|
99
|
+
}
|
|
100
|
+
//#endregion
|
|
101
|
+
//#region src/cookie-consent-bootstrap.ts
|
|
102
|
+
v(new URL(import.meta.url));
|
|
90
103
|
//#endregion
|
|
91
104
|
export { a as MCOOKIE_BOOTSTRAP_CONFIG_KEY, s as MCOOKIE_CONSENT_CHANGE_EVENT, t as MCOOKIE_RUNTIME_KEY, r as MCOOKIE_RUNTIME_READY_EVENT, c as autoBootstrapMCookieConsent, i as bootstrapMCookieConsent, o as readMCookieBootstrapConfig, n as reportMCookieSurface, e as scanMCookieSurface };
|
|
92
105
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cookie-consent-bootstrap.js","names":[],"sources":["../src/cookie-consent-bootstrap.ts"],"sourcesContent":["export * from './components/feedback/MCookie/MCookieBootstrap'\n\nimport {\n autoBootstrapMCookieConsent,\n MCOOKIE_BOOTSTRAP_CONFIG_KEY,\n MCOOKIE_RUNTIME_KEY,\n MCOOKIE_RUNTIME_READY_EVENT,\n} from './components/feedback/MCookie/MCookieBootstrap'\nimport type {\n MCookieBootstrapConfig,\n MCookieRuntime,\n} from './components/feedback/MCookie/MCookieBootstrap'\nimport type {MCookieConsentState} from './components/feedback/MCookie/MCookieConsentProvider'\n\nfunction getConsentKeyStorageKey(config: MCookieBootstrapConfig) {\n return `${config.storageKey ?? 'mineralui-cookie-consent'}-key`\n}\n\nfunction readStoredConsentKey(storageKey: string) {\n if (typeof window === 'undefined') {\n return null\n }\n\n try {\n return window.localStorage.getItem(storageKey)\n } catch {\n return null\n }\n}\n\nfunction writeStoredConsentKey(storageKey: string, consentKey: string | null | undefined) {\n if (typeof window === 'undefined' || !consentKey) {\n return\n }\n\n try {\n window.localStorage.setItem(storageKey, consentKey)\n } catch {\n // ignore storage issues\n }\n}\n\nfunction dispatchRuntimeReady(runtime: MCookieRuntime) {\n if (typeof window === 'undefined') {\n return\n }\n\n window[MCOOKIE_BOOTSTRAP_CONFIG_KEY] = runtime.config\n window[MCOOKIE_RUNTIME_KEY] = runtime\n window.dispatchEvent(new CustomEvent(MCOOKIE_RUNTIME_READY_EVENT))\n}\n\nfunction findBootstrapScriptElement(scriptUrl: URL) {\n if (typeof document === 'undefined') {\n return null\n }\n\n for (const candidate of Array.from(document.querySelectorAll<HTMLScriptElement>('script[src]'))) {\n try {\n const candidateUrl = new URL(candidate.src, window.location.href)\n\n if (candidateUrl.href === scriptUrl.href) {\n return candidate\n }\n\n if (candidateUrl.origin === scriptUrl.origin && candidateUrl.pathname === scriptUrl.pathname) {\n return candidate\n }\n } catch {\n // ignore invalid script urls\n }\n }\n\n return null\n}\n\nfunction createRuntime(config: MCookieBootstrapConfig, scriptUrl: URL, siteKey: string): MCookieRuntime {\n const cookieSiteBase = `${scriptUrl.origin}/cookie/sites/${encodeURIComponent(siteKey)}`\n const consentKeyStorage = getConsentKeyStorageKey(config)\n\n return {\n config,\n getDeclaration: async () => {\n const response = await fetch(`${cookieSiteBase}/declaration`)\n\n if (!response.ok) {\n return []\n }\n\n const payload = await response.json()\n return payload.items ?? []\n },\n getConsent: async () => {\n const consentKey = readStoredConsentKey(consentKeyStorage)\n\n if (!consentKey) {\n return null\n }\n\n const response = await fetch(`${cookieSiteBase}/consent?consentKey=${encodeURIComponent(consentKey)}`)\n\n if (!response.ok) {\n return null\n }\n\n const payload = await response.json()\n return payload.state ?? null\n },\n saveConsent: async (state: MCookieConsentState) => {\n const consentKey = readStoredConsentKey(consentKeyStorage)\n const response = await fetch(`${cookieSiteBase}/consent`, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n },\n body: JSON.stringify({\n ...(consentKey ? {consentKey} : {}),\n version: state.version,\n decidedAt: state.decidedAt,\n source: state.source,\n categories: state.categories,\n domain: typeof window !== 'undefined' ? window.location.hostname : config.domain ?? null,\n }),\n })\n\n if (!response.ok) {\n return\n }\n\n const payload = await response.json()\n writeStoredConsentKey(consentKeyStorage, payload.consentKey)\n },\n }\n}\n\nasync function resolveBootstrapConfigFromScript() {\n if (typeof window === 'undefined' || typeof fetch === 'undefined') {\n return null\n }\n\n const existingConfig = window[MCOOKIE_BOOTSTRAP_CONFIG_KEY]\n if (existingConfig) {\n return existingConfig\n }\n\n let scriptUrl: URL\n\n try {\n scriptUrl = new URL(import.meta.url)\n } catch {\n return null\n }\n\n const bootstrapScript = findBootstrapScriptElement(scriptUrl)\n const siteKey = bootstrapScript?.dataset.siteKey ?? scriptUrl.searchParams.get('siteKey')\n\n if (!siteKey) {\n return null\n }\n\n const configEndpoint =\n bootstrapScript?.dataset.configEndpoint ??\n scriptUrl.searchParams.get('configEndpoint') ??\n `${scriptUrl.origin}/cookie/bootstrap/${encodeURIComponent(siteKey)}`\n\n try {\n const response = await fetch(configEndpoint, {\n headers: {\n 'x-mineral-site-key': siteKey,\n },\n })\n\n if (!response.ok) {\n return null\n }\n\n const resolvedConfig = (await response.json()) as MCookieBootstrapConfig\n const mergedConfig: MCookieBootstrapConfig = {\n ...resolvedConfig,\n siteKey: resolvedConfig.siteKey ?? siteKey,\n scanEndpoint:\n resolvedConfig.scanEndpoint ??\n bootstrapScript?.dataset.scanEndpoint ??\n scriptUrl.searchParams.get('scanEndpoint') ??\n undefined,\n }\n\n dispatchRuntimeReady(createRuntime(mergedConfig, scriptUrl, siteKey))\n return mergedConfig\n } catch {\n return null\n }\n}\n\nvoid resolveBootstrapConfigFromScript().finally(() => {\n autoBootstrapMCookieConsent()\n})\n"],"mappings":";;AAcA,SAAS,EAAwB,GAAgC;AAC7D,QAAO,GAAG,EAAO,cAAc,2BAA2B;;AAG9D,SAAS,EAAqB,GAAoB;AAC9C,KAAI,OAAO,SAAW,IAClB,QAAO;AAGX,KAAI;AACA,SAAO,OAAO,aAAa,QAAQ,EAAW;SAC1C;AACJ,SAAO;;;AAIf,SAAS,EAAsB,GAAoB,GAAuC;AAClF,cAAO,SAAW,OAAe,CAAC,GAItC,KAAI;AACA,SAAO,aAAa,QAAQ,GAAY,EAAW;SAC/C;;AAKZ,SAAS,EAAqB,GAAyB;AAC/C,QAAO,SAAW,QAItB,OAAO,KAAgC,EAAQ,QAC/C,OAAO,KAAuB,GAC9B,OAAO,cAAc,IAAI,YAAY,EAA4B,CAAC;;AAGtE,SAAS,EAA2B,GAAgB;AAChD,KAAI,OAAO,WAAa,IACpB,QAAO;AAGX,MAAK,IAAM,KAAa,MAAM,KAAK,SAAS,iBAAoC,cAAc,CAAC,CAC3F,KAAI;EACA,IAAM,IAAe,IAAI,IAAI,EAAU,KAAK,OAAO,SAAS,KAAK;AAMjE,MAJI,EAAa,SAAS,EAAU,QAIhC,EAAa,WAAW,EAAU,UAAU,EAAa,aAAa,EAAU,SAChF,QAAO;SAEP;AAKZ,QAAO;;AAGX,SAAS,EAAc,GAAgC,GAAgB,GAAiC;CACpG,IAAM,IAAiB,GAAG,EAAU,OAAO,gBAAgB,mBAAmB,EAAQ,IAChF,IAAoB,EAAwB,EAAO;AAEzD,QAAO;EACH;EACA,gBAAgB,YAAY;GACxB,IAAM,IAAW,MAAM,MAAM,GAAG,EAAe,cAAc;AAO7D,UALK,EAAS,MAIE,MAAM,EAAS,MAAM,EACtB,SAAS,EAAE,GAJf,EAAE;;EAMjB,YAAY,YAAY;GACpB,IAAM,IAAa,EAAqB,EAAkB;AAE1D,OAAI,CAAC,EACD,QAAO;GAGX,IAAM,IAAW,MAAM,MAAM,GAAG,EAAe,sBAAsB,mBAAmB,EAAW,GAAG;AAOtG,UALK,EAAS,MAIE,MAAM,EAAS,MAAM,EACtB,SAAS,OAJb;;EAMf,aAAa,OAAO,MAA+B;GAC/C,IAAM,IAAa,EAAqB,EAAkB,EACpD,IAAW,MAAM,MAAM,GAAG,EAAe,WAAW;IACtD,QAAQ;IACR,SAAS,EACL,gBAAgB,oBACnB;IACD,MAAM,KAAK,UAAU;KACjB,GAAI,IAAa,EAAC,eAAW,GAAG,EAAE;KAClC,SAAS,EAAM;KACf,WAAW,EAAM;KACjB,QAAQ,EAAM;KACd,YAAY,EAAM;KAClB,QAAQ,OAAO,SAAW,MAAc,OAAO,SAAS,WAAW,EAAO,UAAU;KACvF,CAAC;IACL,CAAC;AAEG,KAAS,MAKd,EAAsB,IADN,MAAM,EAAS,MAAM,EACY,WAAW;;EAEnE;;AAGL,eAAe,IAAmC;AAC9C,KAAI,OAAO,SAAW,OAAe,OAAO,QAAU,IAClD,QAAO;CAGX,IAAM,IAAiB,OAAO;AAC9B,KAAI,EACA,QAAO;CAGX,IAAI;AAEJ,KAAI;AACA,MAAY,IAAI,IAAI,OAAO,KAAK,IAAI;SAChC;AACJ,SAAO;;CAGX,IAAM,IAAkB,EAA2B,EAAU,EACvD,IAAU,GAAiB,QAAQ,WAAW,EAAU,aAAa,IAAI,UAAU;AAEzF,KAAI,CAAC,EACD,QAAO;CAGX,IAAM,IACF,GAAiB,QAAQ,kBACzB,EAAU,aAAa,IAAI,iBAAiB,IAC5C,GAAG,EAAU,OAAO,oBAAoB,mBAAmB,EAAQ;AAEvE,KAAI;EACA,IAAM,IAAW,MAAM,MAAM,GAAgB,EACzC,SAAS,EACL,sBAAsB,GACzB,EACJ,CAAC;AAEF,MAAI,CAAC,EAAS,GACV,QAAO;EAGX,IAAM,IAAkB,MAAM,EAAS,MAAM,EACvC,IAAuC;GACzC,GAAG;GACH,SAAS,EAAe,WAAW;GACnC,cACI,EAAe,gBACf,GAAiB,QAAQ,gBACzB,EAAU,aAAa,IAAI,eAAe,IAC1C,KAAA;GACP;AAGD,SADA,EAAqB,EAAc,GAAc,GAAW,EAAQ,CAAC,EAC9D;SACH;AACJ,SAAO;;;AAIV,GAAkC,CAAC,cAAc;AAClD,IAA6B;EAC/B"}
|
|
1
|
+
{"version":3,"file":"cookie-consent-bootstrap.js","names":[],"sources":["../src/components/feedback/MCookie/MCookieBootstrap/MCookieBootstrap.script.ts","../src/cookie-consent-bootstrap.ts"],"sourcesContent":["import {autoBootstrapMCookieConsent} from './MCookieBootstrap'\nimport {\n MCOOKIE_BOOTSTRAP_CONFIG_KEY,\n MCOOKIE_RUNTIME_KEY,\n MCOOKIE_RUNTIME_READY_EVENT,\n type MCookieBootstrapConfig,\n type MCookieRuntime,\n} from './MCookieBootstrap.types'\nimport type {MCookieConsentState} from '../MCookieConsentProvider'\n\nfunction trimTrailingSlash(value: string) {\n return value.replace(/\\/+$/, '')\n}\n\nfunction getConsentKeyStorageKey(config: MCookieBootstrapConfig) {\n return `${config.storageKey ?? 'mineralui-cookie-consent'}-key`\n}\n\nfunction readStoredConsentKey(storageKey: string) {\n if (typeof window === 'undefined') {\n return null\n }\n\n try {\n return window.localStorage.getItem(storageKey)\n } catch {\n return null\n }\n}\n\nfunction writeStoredConsentKey(storageKey: string, consentKey: string | null | undefined) {\n if (typeof window === 'undefined' || !consentKey) {\n return\n }\n\n try {\n window.localStorage.setItem(storageKey, consentKey)\n } catch {\n // ignore storage issues\n }\n}\n\nfunction dispatchRuntimeReady(runtime: MCookieRuntime) {\n if (typeof window === 'undefined') {\n return\n }\n\n window[MCOOKIE_BOOTSTRAP_CONFIG_KEY] = runtime.config\n window[MCOOKIE_RUNTIME_KEY] = runtime\n window.dispatchEvent(new CustomEvent(MCOOKIE_RUNTIME_READY_EVENT))\n}\n\nfunction readScriptUrl(candidate: HTMLScriptElement | null) {\n if (!candidate?.src || typeof window === 'undefined') {\n return null\n }\n\n try {\n return new URL(candidate.src, window.location.href)\n } catch {\n return null\n }\n}\n\nfunction findBootstrapScriptElement(scriptUrl?: URL | null) {\n if (typeof document === 'undefined') {\n return null\n }\n\n const namedScript = document.getElementById('mineral-cookie-bootstrap')\n if (namedScript instanceof HTMLScriptElement) {\n return namedScript\n }\n\n const currentScript = document.currentScript\n if (currentScript instanceof HTMLScriptElement) {\n return currentScript\n }\n\n if (!scriptUrl || typeof window === 'undefined') {\n return null\n }\n\n for (const candidate of Array.from(document.querySelectorAll<HTMLScriptElement>('script[src]'))) {\n try {\n const candidateUrl = new URL(candidate.src, window.location.href)\n\n if (candidateUrl.href === scriptUrl.href) {\n return candidate\n }\n\n if (candidateUrl.origin === scriptUrl.origin && candidateUrl.pathname === scriptUrl.pathname) {\n return candidate\n }\n } catch {\n // ignore invalid script urls\n }\n }\n\n return null\n}\n\nexport function createMCookieRuntime(\n config: MCookieBootstrapConfig,\n apiBaseUrl: string,\n siteKey: string\n): MCookieRuntime {\n const cookieSiteBase = `${trimTrailingSlash(apiBaseUrl)}/cookie/sites/${encodeURIComponent(siteKey)}`\n const consentKeyStorage = getConsentKeyStorageKey(config)\n\n return {\n config,\n getDeclaration: async () => {\n const response = await fetch(`${cookieSiteBase}/declaration`)\n\n if (!response.ok) {\n return []\n }\n\n const payload = await response.json()\n return payload.items ?? []\n },\n getConsent: async () => {\n const consentKey = readStoredConsentKey(consentKeyStorage)\n\n if (!consentKey) {\n return null\n }\n\n const response = await fetch(`${cookieSiteBase}/consent?consentKey=${encodeURIComponent(consentKey)}`)\n\n if (!response.ok) {\n return null\n }\n\n const payload = await response.json()\n return payload.state ?? null\n },\n saveConsent: async (state: MCookieConsentState) => {\n const consentKey = readStoredConsentKey(consentKeyStorage)\n const response = await fetch(`${cookieSiteBase}/consent`, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n },\n body: JSON.stringify({\n ...(consentKey ? {consentKey} : {}),\n version: state.version,\n decidedAt: state.decidedAt,\n source: state.source,\n categories: state.categories,\n domain: typeof window !== 'undefined' ? window.location.hostname : (config.domain ?? null),\n }),\n })\n\n if (!response.ok) {\n return\n }\n\n const payload = await response.json()\n writeStoredConsentKey(consentKeyStorage, payload.consentKey)\n },\n }\n}\n\nexport async function resolveMCookieBootstrapConfigFromScript(scriptUrl?: URL | null) {\n if (typeof window === 'undefined' || typeof fetch === 'undefined') {\n return null\n }\n\n const existingConfig = window[MCOOKIE_BOOTSTRAP_CONFIG_KEY]\n if (existingConfig) {\n return existingConfig\n }\n\n const bootstrapScript = findBootstrapScriptElement(scriptUrl)\n const resolvedScriptUrl = scriptUrl ?? readScriptUrl(bootstrapScript)\n const siteKey = bootstrapScript?.dataset.siteKey ?? resolvedScriptUrl?.searchParams.get('siteKey')\n\n if (!siteKey) {\n return null\n }\n\n const apiBaseUrl =\n bootstrapScript?.dataset.apiBase ??\n resolvedScriptUrl?.searchParams.get('apiBase') ??\n resolvedScriptUrl?.origin ??\n window.location.origin\n\n const configEndpoint =\n bootstrapScript?.dataset.configEndpoint ??\n resolvedScriptUrl?.searchParams.get('configEndpoint') ??\n `${trimTrailingSlash(apiBaseUrl)}/cookie/bootstrap/${encodeURIComponent(siteKey)}`\n\n try {\n const response = await fetch(configEndpoint, {\n headers: {\n 'x-mineral-site-key': siteKey,\n },\n })\n\n if (!response.ok) {\n return null\n }\n\n const resolvedConfig = (await response.json()) as MCookieBootstrapConfig\n const mergedConfig: MCookieBootstrapConfig = {\n ...resolvedConfig,\n siteKey: resolvedConfig.siteKey ?? siteKey,\n scanEndpoint:\n resolvedConfig.scanEndpoint ??\n bootstrapScript?.dataset.scanEndpoint ??\n resolvedScriptUrl?.searchParams.get('scanEndpoint') ??\n undefined,\n }\n\n dispatchRuntimeReady(createMCookieRuntime(mergedConfig, apiBaseUrl, siteKey))\n return mergedConfig\n } catch {\n return null\n }\n}\n\nexport async function initializeMCookieConsentBootstrapScript(scriptUrl?: URL | null) {\n await resolveMCookieBootstrapConfigFromScript(scriptUrl)\n return autoBootstrapMCookieConsent()\n}\n","export * from './components/feedback/MCookie/MCookieBootstrap'\n\nimport {initializeMCookieConsentBootstrapScript} from './components/feedback/MCookie/MCookieBootstrap/MCookieBootstrap.script'\n\nvoid initializeMCookieConsentBootstrapScript(new URL(import.meta.url))\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"creditCards-
|
|
1
|
+
{"version":3,"file":"creditCards-CCysEwry.js","names":[],"sources":["../src/utils/creditCards.ts"],"sourcesContent":["import type {ValidationResult} from './validators'\n\nexport type CreditCardBrand = 'visa' | 'mastercard' | 'amex' | 'discover' | 'maestro' | 'unknown'\n\nexport interface CreditCardBrandDetails {\n brand: CreditCardBrand\n label: string\n iconLabel: string\n maxLength: number\n formatGroups: number[]\n regex: RegExp\n}\n\nconst OK_RESULT: ValidationResult = {valid: true}\n\n// MCard brand rules also drive formatting and visible brand badges.\nconst creditCardBrands: CreditCardBrandDetails[] = [\n {\n brand: 'visa',\n label: 'Visa',\n iconLabel: 'VISA',\n maxLength: 16,\n formatGroups: [4, 4, 4, 4],\n regex: /^4\\d{12}(?:\\d{3})?$/,\n },\n {\n brand: 'mastercard',\n label: 'Mastercard',\n iconLabel: 'MC',\n maxLength: 16,\n formatGroups: [4, 4, 4, 4],\n regex: /^(5[1-5]\\d{14}|2(?:2[2-9]|[3-6]\\d|7[01])\\d{12}|2720\\d{12})$/,\n },\n {\n brand: 'amex',\n label: 'American Express',\n iconLabel: 'AMEX',\n maxLength: 15,\n formatGroups: [4, 6, 5],\n regex: /^3[47]\\d{13}$/,\n },\n {\n brand: 'discover',\n label: 'Discover',\n iconLabel: 'DISC',\n maxLength: 16,\n formatGroups: [4, 4, 4, 4],\n regex: /^(6011\\d{12}|65\\d{14}|64[4-9]\\d{13})$/,\n },\n {\n brand: 'maestro',\n label: 'Maestro',\n iconLabel: 'MAES',\n maxLength: 19,\n formatGroups: [4, 4, 4, 4, 3],\n regex: /^(5[06789]\\d{0,17}|6\\d{0,18})$/,\n },\n]\n\n// Fall back to a generic brand so formatting still works for unknown prefixes.\nfunction fallbackBrand(digits: string): CreditCardBrandDetails {\n return {\n brand: 'unknown',\n label: 'MCard',\n iconLabel: 'CARD',\n maxLength: Math.min(Math.max(digits.length || 16, 16), 19),\n formatGroups: [4, 4, 4, 4, 3],\n regex: /^\\d{12,19}$/,\n }\n}\n\n// Remove every separator so card validation can work on raw digits.\nexport function stripCardNumber(value: string): string {\n return value.replace(/\\D/g, '')\n}\n\n// Detect the best matching payment brand from the visible card prefix.\nexport function detectCardBrand(value: string): CreditCardBrandDetails {\n const digits = stripCardNumber(value)\n return creditCardBrands.find((rule) => rule.regex.test(digits)) ?? fallbackBrand(digits)\n}\n\n// Group card digits according to the detected payment brand.\nexport function formatCardNumber(value: string): string {\n const digits = stripCardNumber(value)\n const rule = detectCardBrand(digits)\n const trimmedDigits = digits.slice(0, rule.maxLength)\n const parts: string[] = []\n let offset = 0\n\n for (const length of rule.formatGroups) {\n if (offset >= trimmedDigits.length) {\n break\n }\n\n parts.push(trimmedDigits.slice(offset, offset + length))\n offset += length\n }\n\n if (offset < trimmedDigits.length) {\n parts.push(trimmedDigits.slice(offset))\n }\n\n return parts.join(' ')\n}\n\n// Run the Luhn checksum used by most card numbers.\nfunction passesLuhn(value: string): boolean {\n let sum = 0\n let shouldDouble = false\n\n for (let index = value.length - 1; index >= 0; index -= 1) {\n let digit = parseInt(value[index], 10)\n\n if (Number.isNaN(digit)) {\n return false\n }\n\n if (shouldDouble) {\n digit *= 2\n if (digit > 9) {\n digit -= 9\n }\n }\n\n sum += digit\n shouldDouble = !shouldDouble\n }\n\n return sum % 10 === 0\n}\n\n// Validate the detected card brand and Luhn checksum without third-party runtime dependencies.\nexport function validateCardNumber(value: string): ValidationResult {\n if (!value) {\n return OK_RESULT\n }\n\n const digits = stripCardNumber(value)\n const rule = detectCardBrand(digits)\n\n if (digits.length < 12) {\n return {valid: false, error: 'MCard number is too short'}\n }\n\n if (digits.length > rule.maxLength) {\n return {valid: false, error: `${rule.label} card number is too long`}\n }\n\n if (rule.brand !== 'unknown' && !rule.regex.test(digits)) {\n return {valid: false, error: `Invalid ${rule.label} card number`}\n }\n\n if (!passesLuhn(digits)) {\n return {valid: false, error: 'Invalid card checksum'}\n }\n\n return OK_RESULT\n}\n\nexport {creditCardBrands}\n"],"mappings":";AAaA,IAAM,IAA8B,EAAC,OAAO,IAAK,EAG3C,IAA6C;CAC/C;EACI,OAAO;EACP,OAAO;EACP,WAAW;EACX,WAAW;EACX,cAAc;GAAC;GAAG;GAAG;GAAG;GAAE;EAC1B,OAAO;EACV;CACD;EACI,OAAO;EACP,OAAO;EACP,WAAW;EACX,WAAW;EACX,cAAc;GAAC;GAAG;GAAG;GAAG;GAAE;EAC1B,OAAO;EACV;CACD;EACI,OAAO;EACP,OAAO;EACP,WAAW;EACX,WAAW;EACX,cAAc;GAAC;GAAG;GAAG;GAAE;EACvB,OAAO;EACV;CACD;EACI,OAAO;EACP,OAAO;EACP,WAAW;EACX,WAAW;EACX,cAAc;GAAC;GAAG;GAAG;GAAG;GAAE;EAC1B,OAAO;EACV;CACD;EACI,OAAO;EACP,OAAO;EACP,WAAW;EACX,WAAW;EACX,cAAc;GAAC;GAAG;GAAG;GAAG;GAAG;GAAE;EAC7B,OAAO;EACV;CACJ;AAGD,SAAS,EAAc,GAAwC;AAC3D,QAAO;EACH,OAAO;EACP,OAAO;EACP,WAAW;EACX,WAAW,KAAK,IAAI,KAAK,IAAI,EAAO,UAAU,IAAI,GAAG,EAAE,GAAG;EAC1D,cAAc;GAAC;GAAG;GAAG;GAAG;GAAG;GAAE;EAC7B,OAAO;EACV;;AAIL,SAAgB,EAAgB,GAAuB;AACnD,QAAO,EAAM,QAAQ,OAAO,GAAG;;AAInC,SAAgB,EAAgB,GAAuC;CACnE,IAAM,IAAS,EAAgB,EAAM;AACrC,QAAO,EAAiB,MAAM,MAAS,EAAK,MAAM,KAAK,EAAO,CAAC,IAAI,EAAc,EAAO;;AAI5F,SAAgB,EAAiB,GAAuB;CACpD,IAAM,IAAS,EAAgB,EAAM,EAC/B,IAAO,EAAgB,EAAO,EAC9B,IAAgB,EAAO,MAAM,GAAG,EAAK,UAAU,EAC/C,IAAkB,EAAE,EACtB,IAAS;AAEb,MAAK,IAAM,KAAU,EAAK,cAAc;AACpC,MAAI,KAAU,EAAc,OACxB;AAIJ,EADA,EAAM,KAAK,EAAc,MAAM,GAAQ,IAAS,EAAO,CAAC,EACxD,KAAU;;AAOd,QAJI,IAAS,EAAc,UACvB,EAAM,KAAK,EAAc,MAAM,EAAO,CAAC,EAGpC,EAAM,KAAK,IAAI;;AAI1B,SAAS,EAAW,GAAwB;CACxC,IAAI,IAAM,GACN,IAAe;AAEnB,MAAK,IAAI,IAAQ,EAAM,SAAS,GAAG,KAAS,GAAG,KAAY;EACvD,IAAI,IAAQ,SAAS,EAAM,IAAQ,GAAG;AAEtC,MAAI,OAAO,MAAM,EAAM,CACnB,QAAO;AAWX,EARI,MACA,KAAS,GACL,IAAQ,MACR,KAAS,KAIjB,KAAO,GACP,IAAe,CAAC;;AAGpB,QAAO,IAAM,MAAO;;AAIxB,SAAgB,EAAmB,GAAiC;AAChE,KAAI,CAAC,EACD,QAAO;CAGX,IAAM,IAAS,EAAgB,EAAM,EAC/B,IAAO,EAAgB,EAAO;AAkBpC,QAhBI,EAAO,SAAS,KACT;EAAC,OAAO;EAAO,OAAO;EAA4B,GAGzD,EAAO,SAAS,EAAK,YACd;EAAC,OAAO;EAAO,OAAO,GAAG,EAAK,MAAM;EAA0B,GAGrE,EAAK,UAAU,aAAa,CAAC,EAAK,MAAM,KAAK,EAAO,GAC7C;EAAC,OAAO;EAAO,OAAO,WAAW,EAAK,MAAM;EAAc,GAGhE,EAAW,EAAO,GAIhB,IAHI;EAAC,OAAO;EAAO,OAAO;EAAwB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
var e={valid:!0},t=[{brand:`visa`,label:`Visa`,iconLabel:`VISA`,maxLength:16,formatGroups:[4,4,4,4],regex:/^4\d{12}(?:\d{3})?$/},{brand:`mastercard`,label:`Mastercard`,iconLabel:`MC`,maxLength:16,formatGroups:[4,4,4,4],regex:/^(5[1-5]\d{14}|2(?:2[2-9]|[3-6]\d|7[01])\d{12}|2720\d{12})$/},{brand:`amex`,label:`American Express`,iconLabel:`AMEX`,maxLength:15,formatGroups:[4,6,5],regex:/^3[47]\d{13}$/},{brand:`discover`,label:`Discover`,iconLabel:`DISC`,maxLength:16,formatGroups:[4,4,4,4],regex:/^(6011\d{12}|65\d{14}|64[4-9]\d{13})$/},{brand:`maestro`,label:`Maestro`,iconLabel:`MAES`,maxLength:19,formatGroups:[4,4,4,4,3],regex:/^(5[06789]\d{0,17}|6\d{0,18})$/}];function n(e){return{brand:`unknown`,label:`MCard`,iconLabel:`CARD`,maxLength:Math.min(Math.max(e.length||16,16),19),formatGroups:[4,4,4,4,3],regex:/^\d{12,19}$/}}function r(e){return e.replace(/\D/g,``)}function i(e){let i=r(e);return t.find(e=>e.regex.test(i))??n(i)}function a(e){let t=r(e),n=i(t),a=t.slice(0,n.maxLength),o=[],s=0;for(let e of n.formatGroups){if(s>=a.length)break;o.push(a.slice(s,s+e)),s+=e}return s<a.length&&o.push(a.slice(s)),o.join(` `)}function o(e){let t=0,n=!1;for(let r=e.length-1;r>=0;--r){let i=parseInt(e[r],10);if(Number.isNaN(i))return!1;n&&(i*=2,i>9&&(i-=9)),t+=i,n=!n}return t%10==0}function s(t){if(!t)return e;let n=r(t),a=i(n);return n.length<12?{valid:!1,error:`MCard number is too short`}:n.length>a.maxLength?{valid:!1,error:`${a.label} card number is too long`}:a.brand!==`unknown`&&!a.regex.test(n)?{valid:!1,error:`Invalid ${a.label} card number`}:o(n)?e:{valid:!1,error:`Invalid card checksum`}}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return t}});
|
|
2
|
-
//# sourceMappingURL=creditCards-
|
|
2
|
+
//# sourceMappingURL=creditCards-ljs044xt.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"creditCards-
|
|
1
|
+
{"version":3,"file":"creditCards-ljs044xt.cjs","names":[],"sources":["../src/utils/creditCards.ts"],"sourcesContent":["import type {ValidationResult} from './validators'\n\nexport type CreditCardBrand = 'visa' | 'mastercard' | 'amex' | 'discover' | 'maestro' | 'unknown'\n\nexport interface CreditCardBrandDetails {\n brand: CreditCardBrand\n label: string\n iconLabel: string\n maxLength: number\n formatGroups: number[]\n regex: RegExp\n}\n\nconst OK_RESULT: ValidationResult = {valid: true}\n\n// MCard brand rules also drive formatting and visible brand badges.\nconst creditCardBrands: CreditCardBrandDetails[] = [\n {\n brand: 'visa',\n label: 'Visa',\n iconLabel: 'VISA',\n maxLength: 16,\n formatGroups: [4, 4, 4, 4],\n regex: /^4\\d{12}(?:\\d{3})?$/,\n },\n {\n brand: 'mastercard',\n label: 'Mastercard',\n iconLabel: 'MC',\n maxLength: 16,\n formatGroups: [4, 4, 4, 4],\n regex: /^(5[1-5]\\d{14}|2(?:2[2-9]|[3-6]\\d|7[01])\\d{12}|2720\\d{12})$/,\n },\n {\n brand: 'amex',\n label: 'American Express',\n iconLabel: 'AMEX',\n maxLength: 15,\n formatGroups: [4, 6, 5],\n regex: /^3[47]\\d{13}$/,\n },\n {\n brand: 'discover',\n label: 'Discover',\n iconLabel: 'DISC',\n maxLength: 16,\n formatGroups: [4, 4, 4, 4],\n regex: /^(6011\\d{12}|65\\d{14}|64[4-9]\\d{13})$/,\n },\n {\n brand: 'maestro',\n label: 'Maestro',\n iconLabel: 'MAES',\n maxLength: 19,\n formatGroups: [4, 4, 4, 4, 3],\n regex: /^(5[06789]\\d{0,17}|6\\d{0,18})$/,\n },\n]\n\n// Fall back to a generic brand so formatting still works for unknown prefixes.\nfunction fallbackBrand(digits: string): CreditCardBrandDetails {\n return {\n brand: 'unknown',\n label: 'MCard',\n iconLabel: 'CARD',\n maxLength: Math.min(Math.max(digits.length || 16, 16), 19),\n formatGroups: [4, 4, 4, 4, 3],\n regex: /^\\d{12,19}$/,\n }\n}\n\n// Remove every separator so card validation can work on raw digits.\nexport function stripCardNumber(value: string): string {\n return value.replace(/\\D/g, '')\n}\n\n// Detect the best matching payment brand from the visible card prefix.\nexport function detectCardBrand(value: string): CreditCardBrandDetails {\n const digits = stripCardNumber(value)\n return creditCardBrands.find((rule) => rule.regex.test(digits)) ?? fallbackBrand(digits)\n}\n\n// Group card digits according to the detected payment brand.\nexport function formatCardNumber(value: string): string {\n const digits = stripCardNumber(value)\n const rule = detectCardBrand(digits)\n const trimmedDigits = digits.slice(0, rule.maxLength)\n const parts: string[] = []\n let offset = 0\n\n for (const length of rule.formatGroups) {\n if (offset >= trimmedDigits.length) {\n break\n }\n\n parts.push(trimmedDigits.slice(offset, offset + length))\n offset += length\n }\n\n if (offset < trimmedDigits.length) {\n parts.push(trimmedDigits.slice(offset))\n }\n\n return parts.join(' ')\n}\n\n// Run the Luhn checksum used by most card numbers.\nfunction passesLuhn(value: string): boolean {\n let sum = 0\n let shouldDouble = false\n\n for (let index = value.length - 1; index >= 0; index -= 1) {\n let digit = parseInt(value[index], 10)\n\n if (Number.isNaN(digit)) {\n return false\n }\n\n if (shouldDouble) {\n digit *= 2\n if (digit > 9) {\n digit -= 9\n }\n }\n\n sum += digit\n shouldDouble = !shouldDouble\n }\n\n return sum % 10 === 0\n}\n\n// Validate the detected card brand and Luhn checksum without third-party runtime dependencies.\nexport function validateCardNumber(value: string): ValidationResult {\n if (!value) {\n return OK_RESULT\n }\n\n const digits = stripCardNumber(value)\n const rule = detectCardBrand(digits)\n\n if (digits.length < 12) {\n return {valid: false, error: 'MCard number is too short'}\n }\n\n if (digits.length > rule.maxLength) {\n return {valid: false, error: `${rule.label} card number is too long`}\n }\n\n if (rule.brand !== 'unknown' && !rule.regex.test(digits)) {\n return {valid: false, error: `Invalid ${rule.label} card number`}\n }\n\n if (!passesLuhn(digits)) {\n return {valid: false, error: 'Invalid card checksum'}\n }\n\n return OK_RESULT\n}\n\nexport {creditCardBrands}\n"],"mappings":"AAaA,IAAM,EAA8B,CAAC,MAAO,GAAK,CAG3C,EAA6C,CAC/C,CACI,MAAO,OACP,MAAO,OACP,UAAW,OACX,UAAW,GACX,aAAc,CAAC,EAAG,EAAG,EAAG,EAAE,CAC1B,MAAO,sBACV,CACD,CACI,MAAO,aACP,MAAO,aACP,UAAW,KACX,UAAW,GACX,aAAc,CAAC,EAAG,EAAG,EAAG,EAAE,CAC1B,MAAO,8DACV,CACD,CACI,MAAO,OACP,MAAO,mBACP,UAAW,OACX,UAAW,GACX,aAAc,CAAC,EAAG,EAAG,EAAE,CACvB,MAAO,gBACV,CACD,CACI,MAAO,WACP,MAAO,WACP,UAAW,OACX,UAAW,GACX,aAAc,CAAC,EAAG,EAAG,EAAG,EAAE,CAC1B,MAAO,wCACV,CACD,CACI,MAAO,UACP,MAAO,UACP,UAAW,OACX,UAAW,GACX,aAAc,CAAC,EAAG,EAAG,EAAG,EAAG,EAAE,CAC7B,MAAO,iCACV,CACJ,CAGD,SAAS,EAAc,EAAwC,CAC3D,MAAO,CACH,MAAO,UACP,MAAO,QACP,UAAW,OACX,UAAW,KAAK,IAAI,KAAK,IAAI,EAAO,QAAU,GAAI,GAAG,CAAE,GAAG,CAC1D,aAAc,CAAC,EAAG,EAAG,EAAG,EAAG,EAAE,CAC7B,MAAO,cACV,CAIL,SAAgB,EAAgB,EAAuB,CACnD,OAAO,EAAM,QAAQ,MAAO,GAAG,CAInC,SAAgB,EAAgB,EAAuC,CACnE,IAAM,EAAS,EAAgB,EAAM,CACrC,OAAO,EAAiB,KAAM,GAAS,EAAK,MAAM,KAAK,EAAO,CAAC,EAAI,EAAc,EAAO,CAI5F,SAAgB,EAAiB,EAAuB,CACpD,IAAM,EAAS,EAAgB,EAAM,CAC/B,EAAO,EAAgB,EAAO,CAC9B,EAAgB,EAAO,MAAM,EAAG,EAAK,UAAU,CAC/C,EAAkB,EAAE,CACtB,EAAS,EAEb,IAAK,IAAM,KAAU,EAAK,aAAc,CACpC,GAAI,GAAU,EAAc,OACxB,MAGJ,EAAM,KAAK,EAAc,MAAM,EAAQ,EAAS,EAAO,CAAC,CACxD,GAAU,EAOd,OAJI,EAAS,EAAc,QACvB,EAAM,KAAK,EAAc,MAAM,EAAO,CAAC,CAGpC,EAAM,KAAK,IAAI,CAI1B,SAAS,EAAW,EAAwB,CACxC,IAAI,EAAM,EACN,EAAe,GAEnB,IAAK,IAAI,EAAQ,EAAM,OAAS,EAAG,GAAS,EAAG,IAAY,CACvD,IAAI,EAAQ,SAAS,EAAM,GAAQ,GAAG,CAEtC,GAAI,OAAO,MAAM,EAAM,CACnB,MAAO,GAGP,IACA,GAAS,EACL,EAAQ,IACR,GAAS,IAIjB,GAAO,EACP,EAAe,CAAC,EAGpB,OAAO,EAAM,IAAO,EAIxB,SAAgB,EAAmB,EAAiC,CAChE,GAAI,CAAC,EACD,OAAO,EAGX,IAAM,EAAS,EAAgB,EAAM,CAC/B,EAAO,EAAgB,EAAO,CAkBpC,OAhBI,EAAO,OAAS,GACT,CAAC,MAAO,GAAO,MAAO,4BAA4B,CAGzD,EAAO,OAAS,EAAK,UACd,CAAC,MAAO,GAAO,MAAO,GAAG,EAAK,MAAM,0BAA0B,CAGrE,EAAK,QAAU,WAAa,CAAC,EAAK,MAAM,KAAK,EAAO,CAC7C,CAAC,MAAO,GAAO,MAAO,WAAW,EAAK,MAAM,cAAc,CAGhE,EAAW,EAAO,CAIhB,EAHI,CAAC,MAAO,GAAO,MAAO,wBAAwB"}
|