@banzamel/mineralui 1.1.1 → 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-tpFpLFPO.js → MAvatar-BoO51a6m.js} +2 -2
- package/dist/{MAvatar-tpFpLFPO.js.map → MAvatar-BoO51a6m.js.map} +1 -1
- package/dist/{MAvatar-nLlGAprq.cjs → MAvatar-DJKtca9j.cjs} +2 -2
- package/dist/{MAvatar-nLlGAprq.cjs.map → MAvatar-DJKtca9j.cjs.map} +1 -1
- package/dist/{MBadge-imAk1gYn.cjs → MBadge-CexVV675.cjs} +1 -1
- package/dist/{MBadge-imAk1gYn.cjs.map → MBadge-CexVV675.cjs.map} +1 -1
- package/dist/{MBadge-UTUlEAik.js → MBadge-Y1JnZiIC.js} +1 -1
- package/dist/{MBadge-UTUlEAik.js.map → MBadge-Y1JnZiIC.js.map} +1 -1
- package/dist/{MButton-CX8SV1m0.cjs → MButton-B8rXmFX9.cjs} +1 -1
- package/dist/{MButton-CX8SV1m0.cjs.map → MButton-B8rXmFX9.cjs.map} +1 -1
- package/dist/{MButton-BJdrNg2I.js → MButton-BmTDe5Oa.js} +1 -1
- package/dist/{MButton-BJdrNg2I.js.map → MButton-BmTDe5Oa.js.map} +1 -1
- package/dist/{MCheckbox-DfCD0EtS.js → MCheckbox-B7SpcD4H.js} +1 -1
- package/dist/{MCheckbox-DfCD0EtS.js.map → MCheckbox-B7SpcD4H.js.map} +1 -1
- package/dist/{MCheckbox-CAZA97h7.cjs → MCheckbox-Bea3orrs.cjs} +1 -1
- package/dist/{MCheckbox-CAZA97h7.cjs.map → MCheckbox-Bea3orrs.cjs.map} +1 -1
- package/dist/{MCookieBootstrap-BhTMPs8T.js → MCookieBootstrap-CNYLvKjW.js} +1 -1
- package/dist/{MCookieBootstrap-BhTMPs8T.js.map → MCookieBootstrap-CNYLvKjW.js.map} +1 -1
- package/dist/{MCookieBootstrap-Fxpem-gF.cjs → MCookieBootstrap-DSOT4FQo.cjs} +1 -1
- package/dist/{MCookieBootstrap-Fxpem-gF.cjs.map → MCookieBootstrap-DSOT4FQo.cjs.map} +1 -1
- package/dist/{MDataTable-BZs6Cn9e.cjs → MDataTable-BI7wFZYN.cjs} +2 -2
- package/dist/{MDataTable-BZs6Cn9e.cjs.map → MDataTable-BI7wFZYN.cjs.map} +1 -1
- package/dist/{MDataTable-D-ASD4g3.js → MDataTable-Cqwkiq7A.js} +10 -10
- package/dist/{MDataTable-D-ASD4g3.js.map → MDataTable-Cqwkiq7A.js.map} +1 -1
- package/dist/{MDrawer-CTVEF34p.cjs → MDrawer-CSvjLrhB.cjs} +2 -2
- package/dist/{MDrawer-CTVEF34p.cjs.map → MDrawer-CSvjLrhB.cjs.map} +1 -1
- package/dist/{MDrawer-CscOMXBg.js → MDrawer-DXHtAckQ.js} +2 -2
- package/dist/{MDrawer-CscOMXBg.js.map → MDrawer-DXHtAckQ.js.map} +1 -1
- package/dist/{MDropdownMenu-B1eOmM7u.js → MDropdownMenu-CxBhYxQb.js} +1 -1
- package/dist/{MDropdownMenu-B1eOmM7u.js.map → MDropdownMenu-CxBhYxQb.js.map} +1 -1
- package/dist/{MDropdownMenu-CiJ_7DQ2.cjs → MDropdownMenu-X7ywPqth.cjs} +1 -1
- package/dist/{MDropdownMenu-CiJ_7DQ2.cjs.map → MDropdownMenu-X7ywPqth.cjs.map} +1 -1
- package/dist/{MHeading-CMGPJwul.js → MHeading-C3IgV22T.js} +2 -2
- package/dist/{MHeading-CMGPJwul.js.map → MHeading-C3IgV22T.js.map} +1 -1
- package/dist/{MHeading-sW0j7ssI.cjs → MHeading-DqvWKia1.cjs} +2 -2
- package/dist/{MHeading-sW0j7ssI.cjs.map → MHeading-DqvWKia1.cjs.map} +1 -1
- package/dist/{MImage-3UVzZIgA.js → MImage-BDcrV6IC.js} +2 -2
- package/dist/{MImage-3UVzZIgA.js.map → MImage-BDcrV6IC.js.map} +1 -1
- package/dist/{MImage-BHgzEHMO.cjs → MImage-BsQJ_eYf.cjs} +2 -2
- package/dist/{MImage-BHgzEHMO.cjs.map → MImage-BsQJ_eYf.cjs.map} +1 -1
- package/dist/{MInline-DUzpnZoB.cjs → MInline-BAhu2zT-.cjs} +1 -1
- package/dist/{MInline-DUzpnZoB.cjs.map → MInline-BAhu2zT-.cjs.map} +1 -1
- package/dist/{MInline-cTj903A4.js → MInline-Dfy3Lrjs.js} +1 -1
- package/dist/{MInline-cTj903A4.js.map → MInline-Dfy3Lrjs.js.map} +1 -1
- package/dist/{MInput-B8RPS-wr.js → MInput-BSaKw0Uc.js} +2 -2
- package/dist/{MInput-B8RPS-wr.js.map → MInput-BSaKw0Uc.js.map} +1 -1
- package/dist/{MInput-BZ1ZPuk3.cjs → MInput-W7DJQ_ng.cjs} +2 -2
- package/dist/{MInput-BZ1ZPuk3.cjs.map → MInput-W7DJQ_ng.cjs.map} +1 -1
- package/dist/{MInputCVC-DOBmGhJL.cjs → MInputCVC-DH_bjV5R.cjs} +2 -2
- package/dist/{MInputCVC-DOBmGhJL.cjs.map → MInputCVC-DH_bjV5R.cjs.map} +1 -1
- package/dist/{MInputCVC-BJQWuuwR.js → MInputCVC-Dqbl1zG9.js} +3 -3
- package/dist/{MInputCVC-BJQWuuwR.js.map → MInputCVC-Dqbl1zG9.js.map} +1 -1
- package/dist/{MInputSearch-DAAg9FXv.cjs → MInputSearch-C7betxTa.cjs} +2 -2
- package/dist/{MInputSearch-DAAg9FXv.cjs.map → MInputSearch-C7betxTa.cjs.map} +1 -1
- package/dist/{MInputSearch-PMHykVrc.js → MInputSearch-CH5ZcjLq.js} +2 -2
- package/dist/{MInputSearch-PMHykVrc.js.map → MInputSearch-CH5ZcjLq.js.map} +1 -1
- package/dist/{MLink-D10DD8oX.cjs → MLink-DHryXq_D.cjs} +1 -1
- package/dist/{MLink-D10DD8oX.cjs.map → MLink-DHryXq_D.cjs.map} +1 -1
- package/dist/{MLink-CBmT8zaD.js → MLink-ODytrwne.js} +1 -1
- package/dist/{MLink-CBmT8zaD.js.map → MLink-ODytrwne.js.map} +1 -1
- package/dist/{MModal-BogYYyZE.js → MModal-DShADuLw.js} +2 -2
- package/dist/{MModal-BogYYyZE.js.map → MModal-DShADuLw.js.map} +1 -1
- package/dist/{MModal-CfzduXaI.cjs → MModal-pMcPs3pw.cjs} +2 -2
- package/dist/{MModal-CfzduXaI.cjs.map → MModal-pMcPs3pw.cjs.map} +1 -1
- package/dist/{MPagination-CgvjKhLN.js → MPagination-B7aho7rQ.js} +2 -2
- package/dist/{MPagination-CgvjKhLN.js.map → MPagination-B7aho7rQ.js.map} +1 -1
- package/dist/{MPagination-vg2EqB8z.cjs → MPagination-BWHAVgWN.cjs} +2 -2
- package/dist/{MPagination-vg2EqB8z.cjs.map → MPagination-BWHAVgWN.cjs.map} +1 -1
- package/dist/{MQrCode-l0FzrNCq.js → MQrCode-6Cz9B7Qy.js} +2 -2
- package/dist/{MQrCode-l0FzrNCq.js.map → MQrCode-6Cz9B7Qy.js.map} +1 -1
- package/dist/{MQrCode-DB9vELHq.cjs → MQrCode-Bp2CWpmX.cjs} +2 -2
- package/dist/{MQrCode-DB9vELHq.cjs.map → MQrCode-Bp2CWpmX.cjs.map} +1 -1
- package/dist/{MSkeleton-D7wnoEE8.cjs → MSkeleton-BfRBJ6ku.cjs} +1 -1
- package/dist/{MSkeleton-D7wnoEE8.cjs.map → MSkeleton-BfRBJ6ku.cjs.map} +1 -1
- package/dist/{MSkeleton-Bh9cCe49.js → MSkeleton-CauCfkzj.js} +1 -1
- package/dist/{MSkeleton-Bh9cCe49.js.map → MSkeleton-CauCfkzj.js.map} +1 -1
- package/dist/{MSlider-YDSrVUQ8.cjs → MSlider-BCMJkvcA.cjs} +1 -1
- package/dist/{MSlider-YDSrVUQ8.cjs.map → MSlider-BCMJkvcA.cjs.map} +1 -1
- package/dist/{MSlider-BlgzLtHa.js → MSlider-CqrusKJQ.js} +1 -1
- package/dist/{MSlider-BlgzLtHa.js.map → MSlider-CqrusKJQ.js.map} +1 -1
- package/dist/{MSparkline-Bl5-EHJr.cjs → MSparkline-BOaNmbeB.cjs} +1 -1
- package/dist/{MSparkline-Bl5-EHJr.cjs.map → MSparkline-BOaNmbeB.cjs.map} +1 -1
- package/dist/{MSparkline-C8tnqhJm.js → MSparkline-Cb_EwR-E.js} +1 -1
- package/dist/{MSparkline-C8tnqhJm.js.map → MSparkline-Cb_EwR-E.js.map} +1 -1
- package/dist/{MStack-XTsT_kLJ.js → MStack-Cifiqeb2.js} +1 -1
- package/dist/{MStack-XTsT_kLJ.js.map → MStack-Cifiqeb2.js.map} +1 -1
- package/dist/{MStack-BKDsNitR.cjs → MStack-lrvy7l3w.cjs} +1 -1
- package/dist/{MStack-BKDsNitR.cjs.map → MStack-lrvy7l3w.cjs.map} +1 -1
- package/dist/{MSubText-BIaYgtU4.cjs → MSubText-78oYdJQy.cjs} +2 -2
- package/dist/{MSubText-BIaYgtU4.cjs.map → MSubText-78oYdJQy.cjs.map} +1 -1
- package/dist/{MSubText-uoh7Qx7S.js → MSubText-C2oxXwKT.js} +2 -2
- package/dist/{MSubText-uoh7Qx7S.js.map → MSubText-C2oxXwKT.js.map} +1 -1
- package/dist/{MTag-BVo9zFIj.cjs → MTag-C4_rBj4b.cjs} +2 -2
- package/dist/{MTag-BVo9zFIj.cjs.map → MTag-C4_rBj4b.cjs.map} +1 -1
- package/dist/{MTag-Bq9b51kE.js → MTag-DOcKm3c2.js} +2 -2
- package/dist/{MTag-Bq9b51kE.js.map → MTag-DOcKm3c2.js.map} +1 -1
- package/dist/{MText-B4koGfYi.cjs → MText-CxSZ2md0.cjs} +1 -1
- package/dist/{MText-B4koGfYi.cjs.map → MText-CxSZ2md0.cjs.map} +1 -1
- package/dist/{MText-CKyns1SE.js → MText-DX9O7gh7.js} +1 -1
- package/dist/{MText-CKyns1SE.js.map → MText-DX9O7gh7.js.map} +1 -1
- package/dist/{MTimeAgo-LWntwbKg.cjs → MTimeAgo-91_ndjxU.cjs} +2 -2
- package/dist/{MTimeAgo-LWntwbKg.cjs.map → MTimeAgo-91_ndjxU.cjs.map} +1 -1
- package/dist/{MTimeAgo-irsvTFAY.js → MTimeAgo-xxl53mct.js} +2 -2
- package/dist/{MTimeAgo-irsvTFAY.js.map → MTimeAgo-xxl53mct.js.map} +1 -1
- package/dist/{MToggle-BbSDIAJq.js → MToggle-B6emKoKq.js} +1 -1
- package/dist/{MToggle-BbSDIAJq.js.map → MToggle-B6emKoKq.js.map} +1 -1
- package/dist/{MToggle-GhhAJgUa.cjs → MToggle-CsGS_W3X.cjs} +1 -1
- package/dist/{MToggle-GhhAJgUa.cjs.map → MToggle-CsGS_W3X.cjs.map} +1 -1
- package/dist/{MTooltip-eTM5DKtM.cjs → MTooltip-CNXoyQEN.cjs} +1 -1
- package/dist/{MTooltip-eTM5DKtM.cjs.map → MTooltip-CNXoyQEN.cjs.map} +1 -1
- package/dist/{MTooltip-BVQ7wBrO.js → MTooltip-UYOjDBOu.js} +1 -1
- package/dist/{MTooltip-BVQ7wBrO.js.map → MTooltip-UYOjDBOu.js.map} +1 -1
- package/dist/{cards-JqA2VWit.js → cards-BE77zKTI.js} +64 -64
- package/dist/{cards-JqA2VWit.js.map → cards-BE77zKTI.js.map} +1 -1
- package/dist/{cards-QoMhQlao.cjs → cards-BINs-dmS.cjs} +2 -2
- package/dist/{cards-QoMhQlao.cjs.map → cards-BINs-dmS.cjs.map} +1 -1
- package/dist/cards.cjs +1 -1
- package/dist/cards.js +2 -2
- package/dist/components/feedback/MCookie/MCookieBootstrap/MCookieBootstrap.script.d.ts +4 -0
- 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-Dbev0qSy.js → controls-BMwQ3C1R.js} +2 -2
- package/dist/{controls-Dbev0qSy.js.map → controls-BMwQ3C1R.js.map} +1 -1
- package/dist/{controls-BFmZuejK.cjs → controls-DwL1-nVC.cjs} +2 -2
- package/dist/{controls-BFmZuejK.cjs.map → controls-DwL1-nVC.cjs.map} +1 -1
- 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/{data-BooVW8q_.cjs → data-BESfox0z.cjs} +2 -2
- package/dist/{data-BooVW8q_.cjs.map → data-BESfox0z.cjs.map} +1 -1
- package/dist/{data-B1hbWMzU.js → data-s8Hkht1B.js} +608 -608
- package/dist/{data-B1hbWMzU.js.map → data-s8Hkht1B.js.map} +1 -1
- package/dist/data.cjs +1 -1
- package/dist/data.js +3 -3
- package/dist/{display-B-zP1BEz.cjs → display-B0lpgApV.cjs} +2 -2
- package/dist/{display-B-zP1BEz.cjs.map → display-B0lpgApV.cjs.map} +1 -1
- package/dist/{display-DC0d-nPm.js → display-DuBRiEKr.js} +3 -3
- package/dist/{display-DC0d-nPm.js.map → display-DuBRiEKr.js.map} +1 -1
- package/dist/display.cjs +1 -1
- package/dist/display.js +3 -3
- package/dist/{dropdowns-Vo7Oo_ii.js → dropdowns-BcVrUMPE.js} +43 -43
- package/dist/{dropdowns-Vo7Oo_ii.js.map → dropdowns-BcVrUMPE.js.map} +1 -1
- package/dist/dropdowns-CK-oxd62.cjs +2 -0
- package/dist/{dropdowns-CMt9-Jpa.cjs.map → dropdowns-CK-oxd62.cjs.map} +1 -1
- package/dist/dropdowns.cjs +1 -1
- package/dist/dropdowns.js +1 -1
- package/dist/{feedback-D29Er-TD.js → feedback-D3LLKNlY.js} +196 -196
- package/dist/{feedback-D29Er-TD.js.map → feedback-D3LLKNlY.js.map} +1 -1
- package/dist/{feedback-B-PVXL68.cjs → feedback-DYjg0Dbp.cjs} +2 -2
- package/dist/{feedback-B-PVXL68.cjs.map → feedback-DYjg0Dbp.cjs.map} +1 -1
- package/dist/feedback.cjs +1 -1
- package/dist/feedback.js +6 -6
- package/dist/{frameworkTexts-BgzNvcs2.js → frameworkTexts-B6oE8pMk.js} +1 -1
- package/dist/{frameworkTexts-BgzNvcs2.js.map → frameworkTexts-B6oE8pMk.js.map} +1 -1
- package/dist/{frameworkTexts-r4jSfpMt.cjs → frameworkTexts-C_9KZK_A.cjs} +1 -1
- package/dist/{frameworkTexts-r4jSfpMt.cjs.map → frameworkTexts-C_9KZK_A.cjs.map} +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +40 -40
- package/dist/{inputs-Dw9Uv8f4.cjs → inputs-Dcj6C_Fn.cjs} +2 -2
- package/dist/{inputs-Dw9Uv8f4.cjs.map → inputs-Dcj6C_Fn.cjs.map} +1 -1
- package/dist/{inputs-Bl7ssV3Q.js → inputs-bCxSLz-U.js} +115 -115
- package/dist/{inputs-Bl7ssV3Q.js.map → inputs-bCxSLz-U.js.map} +1 -1
- package/dist/inputs.cjs +1 -1
- package/dist/inputs.js +4 -4
- package/dist/{layout-UP_12LRD.js → layout-Cb94o3oU.js} +282 -208
- 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 +5 -5
- package/dist/{locale-uMMj57KX.js → locale-BNyzqXAU.js} +1 -1
- package/dist/{locale-uMMj57KX.js.map → locale-BNyzqXAU.js.map} +1 -1
- package/dist/{locale-LCAQDJCd.cjs → locale-BltrWJtd.cjs} +1 -1
- package/dist/{locale-LCAQDJCd.cjs.map → locale-BltrWJtd.cjs.map} +1 -1
- package/dist/{media-D5zF3vH6.js → media-8aMOtckF.js} +5 -5
- package/dist/{media-D5zF3vH6.js.map → media-8aMOtckF.js.map} +1 -1
- package/dist/{media-C4WtzWxU.cjs → media-D5YGOTm7.cjs} +2 -2
- package/dist/{media-C4WtzWxU.cjs.map → media-D5YGOTm7.cjs.map} +1 -1
- package/dist/media.cjs +1 -1
- package/dist/media.js +3 -3
- package/dist/{overlays-D9_8GEse.cjs → overlays-DCj-oV2H.cjs} +2 -2
- package/dist/{overlays-D9_8GEse.cjs.map → overlays-DCj-oV2H.cjs.map} +1 -1
- package/dist/{overlays-BahWPCPW.js → overlays-gjg00CAf.js} +3 -3
- package/dist/{overlays-BahWPCPW.js.map → overlays-gjg00CAf.js.map} +1 -1
- package/dist/overlays.cjs +1 -1
- package/dist/overlays.js +5 -5
- package/dist/style-runtime.cjs +1 -1
- package/dist/style-runtime.js +1 -1
- package/dist/styles.css +1 -1
- package/dist/{typography-BR2o3w3X.js → typography-DKdr1Tds.js} +2 -2
- package/dist/{typography-BR2o3w3X.js.map → typography-DKdr1Tds.js.map} +1 -1
- package/dist/{typography-BobOsDbn.cjs → typography-qbFGv1gA.cjs} +2 -2
- package/dist/{typography-BobOsDbn.cjs.map → typography-qbFGv1gA.cjs.map} +1 -1
- package/dist/typography.cjs +1 -1
- package/dist/typography.js +5 -5
- package/package.json +1 -1
- package/dist/dropdowns-CMt9-Jpa.cjs +0 -2
- package/dist/layout-C1QKiv2J.cjs +0 -2
- package/dist/layout-C1QKiv2J.cjs.map +0 -1
- package/dist/layout-UP_12LRD.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MCookieBootstrap-Fxpem-gF.cjs","names":[],"sources":["../src/components/feedback/MCookie/MCookieConsentProvider/MCookieConsent.defaults.ts","../src/components/feedback/MCookie/MCookieConsentProvider/MCookieConsent.inventory.ts","../src/components/feedback/MCookie/MCookieConsentProvider/MCookieConsent.storage.ts","../src/components/feedback/MCookie/MCookieBootstrap/MCookieBootstrap.types.ts","../src/components/feedback/MCookie/MCookieBootstrap/MCookieBootstrap.ts"],"sourcesContent":["import type {MCookieConsentTexts} from '../../../../i18n/frameworkTexts'\nimport type {MCookieCategoryDefinition, MCookieConsentPersistence, MCookieDeclarationItem} from './MCookieConsent.types'\n\nexport const COOKIE_CONSENT_STORAGE_KEY = 'mineralui-cookie-consent'\nexport const COOKIE_CONSENT_COOKIE_NAME = 'mineralui-cookie-consent'\nexport const COOKIE_CONSENT_COOKIE_MAX_AGE_DAYS = 180\nexport const COOKIE_CONSENT_STORAGE: MCookieConsentPersistence = 'localStorage'\n\nexport function mergeCookieConsentTexts(\n baseTexts: MCookieConsentTexts,\n override?: Partial<MCookieConsentTexts>\n): MCookieConsentTexts {\n return {\n ...baseTexts,\n ...override,\n }\n}\n\nexport function createCookieConsentCategories(texts: MCookieConsentTexts): MCookieCategoryDefinition[] {\n return [\n {\n key: 'necessary',\n label: texts.necessaryLabel,\n description: texts.necessaryDescription,\n required: true,\n defaultValue: true,\n },\n {\n key: 'preferences',\n label: texts.preferencesLabel,\n description: texts.preferencesDescriptionLabel,\n defaultValue: false,\n },\n {\n key: 'analytics',\n label: texts.analyticsLabel,\n description: texts.analyticsDescription,\n defaultValue: false,\n },\n {\n key: 'marketing',\n label: texts.marketingLabel,\n description: texts.marketingDescription,\n defaultValue: false,\n },\n ]\n}\n\nexport function createCookieConsentDeclaration(): MCookieDeclarationItem[] {\n return []\n}\n","import {COOKIE_CONSENT_COOKIE_NAME} from './MCookieConsent.defaults'\nimport type {\n MCookieCategoryRules,\n MCookieDetectedCookie,\n MCookieDetectedCookieMatch,\n MCookieMatchRule,\n} from './MCookieConsent.types'\n\nconst INTERNAL_REQUIRED_COOKIE_RULES: MCookieMatchRule[] = [\n COOKIE_CONSENT_COOKIE_NAME,\n /^PHPSESSID$/i,\n /^JSESSIONID$/i,\n /^ASP\\.NET_SessionId$/i,\n /^__Host-/i,\n /^__Secure-/i,\n /csrf/i,\n /xsrf/i,\n /session/i,\n /auth/i,\n /token/i,\n /^sid$/i,\n]\n\nconst BUILT_IN_CATEGORY_RULES: Record<string, MCookieMatchRule[]> = {\n preferences: [/theme/i, /locale/i, /lang/i, /currency/i, /timezone/i, /consent/i],\n analytics: [/^_ga/i, /^_gid/i, /^_gat/i, /^_pk_/i, /^pk_/i, /^_hj/i, /^hj/i, /^amplitude/i, /^mp_/i, /^matomo/i],\n marketing: [/^_fbp$/i, /^_fbc$/i, /^_gcl_/i, /^IDE$/i, /^test_cookie$/i, /^li_/i, /^tt_/i, /^_uet/i, /^pin_utm/i],\n}\n\nfunction matchCookieRule(name: string, rule: MCookieMatchRule) {\n if (typeof rule === 'string') {\n const normalizedRule = rule.trim().toLowerCase()\n const normalizedName = name.trim().toLowerCase()\n\n if (normalizedRule.endsWith('*')) {\n return normalizedName.startsWith(normalizedRule.slice(0, -1))\n }\n\n return normalizedName === normalizedRule\n }\n\n return rule.test(name)\n}\n\nfunction matchCookieRules(name: string, rules?: MCookieMatchRule[]) {\n return Array.isArray(rules) && rules.some((rule) => matchCookieRule(name, rule))\n}\n\nfunction parseDocumentCookies(cookieString: string) {\n if (!cookieString.trim()) {\n return []\n }\n\n return cookieString\n .split(';')\n .map((chunk) => chunk.trim())\n .filter(Boolean)\n .map((chunk) => {\n const separatorIndex = chunk.indexOf('=')\n if (separatorIndex === -1) {\n return {\n name: chunk,\n value: '',\n }\n }\n\n return {\n name: chunk.slice(0, separatorIndex).trim(),\n value: chunk.slice(separatorIndex + 1).trim(),\n }\n })\n .filter((item) => item.name.length > 0)\n}\n\nfunction classifyCookie(\n name: string,\n requiredCookies: MCookieMatchRule[],\n categoryRules: MCookieCategoryRules\n): Pick<MCookieDetectedCookie, 'category' | 'required' | 'matchedBy'> {\n if (matchCookieRules(name, [...INTERNAL_REQUIRED_COOKIE_RULES, ...requiredCookies])) {\n return {\n category: 'necessary',\n required: true,\n matchedBy: 'required',\n }\n }\n\n for (const [category, rules] of Object.entries(categoryRules)) {\n if (matchCookieRules(name, rules)) {\n return {\n category,\n required: false,\n matchedBy: 'custom',\n }\n }\n }\n\n for (const [category, rules] of Object.entries(BUILT_IN_CATEGORY_RULES)) {\n if (matchCookieRules(name, rules)) {\n return {\n category,\n required: false,\n matchedBy: 'built-in',\n }\n }\n }\n\n return {\n category: 'preferences',\n required: false,\n matchedBy: 'fallback',\n }\n}\n\nexport function detectDocumentCookies({\n cookieString,\n requiredCookies = [],\n categoryRules = {},\n}: {\n cookieString?: string\n requiredCookies?: MCookieMatchRule[]\n categoryRules?: MCookieCategoryRules\n}) {\n const source = cookieString ?? (typeof document !== 'undefined' ? document.cookie : '')\n\n return parseDocumentCookies(source).map<MCookieDetectedCookie>((item) => {\n const classification = classifyCookie(item.name, requiredCookies, categoryRules)\n\n return {\n name: item.name,\n value: item.value,\n category: classification.category,\n required: classification.required,\n matchedBy: classification.matchedBy as MCookieDetectedCookieMatch,\n source: 'document.cookie',\n }\n })\n}\n","import type {MCookieConsentPersistence, MCookieConsentState} from './MCookieConsent.types'\n\ninterface CookieConsentStorageOptions {\n storage: MCookieConsentPersistence\n storageKey: string\n cookieName: string\n cookieMaxAgeDays: number\n}\n\nfunction isCookieConsentState(value: unknown): value is MCookieConsentState {\n if (!value || typeof value !== 'object') {\n return false\n }\n\n const candidate = value as MCookieConsentState\n\n return (\n typeof candidate.version === 'string' &&\n typeof candidate.decidedAt === 'string' &&\n typeof candidate.source === 'string' &&\n candidate.categories != null &&\n typeof candidate.categories === 'object'\n )\n}\n\nfunction readCookieValue(name: string): string | null {\n if (typeof document === 'undefined') {\n return null\n }\n\n const prefix = `${encodeURIComponent(name)}=`\n\n for (const chunk of document.cookie.split(';')) {\n const trimmed = chunk.trim()\n if (trimmed.startsWith(prefix)) {\n return decodeURIComponent(trimmed.slice(prefix.length))\n }\n }\n\n return null\n}\n\nfunction writeCookieValue(name: string, value: string, maxAgeDays: number) {\n if (typeof document === 'undefined') {\n return\n }\n\n document.cookie = `${encodeURIComponent(name)}=${encodeURIComponent(value)}; path=/; max-age=${Math.floor(\n maxAgeDays * 24 * 60 * 60\n )}; samesite=lax`\n}\n\nfunction clearCookieValue(name: string) {\n if (typeof document === 'undefined') {\n return\n }\n\n document.cookie = `${encodeURIComponent(name)}=; path=/; max-age=0; samesite=lax`\n}\n\nexport function readStoredCookieConsent({\n storage,\n storageKey,\n cookieName,\n}: Pick<CookieConsentStorageOptions, 'storage' | 'storageKey' | 'cookieName'>): MCookieConsentState | null {\n try {\n const raw = storage === 'cookie' ? readCookieValue(cookieName) : localStorage.getItem(storageKey)\n if (!raw) {\n return null\n }\n\n const parsed = JSON.parse(raw) as unknown\n return isCookieConsentState(parsed) ? parsed : null\n } catch {\n return null\n }\n}\n\nexport function writeStoredCookieConsent(\n {storage, storageKey, cookieName, cookieMaxAgeDays}: CookieConsentStorageOptions,\n state: MCookieConsentState\n) {\n try {\n const serialized = JSON.stringify(state)\n\n if (storage === 'cookie') {\n writeCookieValue(cookieName, serialized, cookieMaxAgeDays)\n return\n }\n\n localStorage.setItem(storageKey, serialized)\n } catch {\n /* noop */\n }\n}\n\nexport function clearStoredCookieConsent({\n storage,\n storageKey,\n cookieName,\n}: Pick<CookieConsentStorageOptions, 'storage' | 'storageKey' | 'cookieName'>) {\n try {\n if (storage === 'cookie') {\n clearCookieValue(cookieName)\n return\n }\n\n localStorage.removeItem(storageKey)\n } catch {\n /* noop */\n }\n}\n","import type {\n MCookieCategoryDefinition,\n MCookieConsentPersistence,\n MCookieConsentState,\n MCookieDeclarationItem,\n} from '../MCookieConsentProvider'\n\nexport const MCOOKIE_CONSENT_CHANGE_EVENT = 'mineralui:cookie-consent-change'\nexport const MCOOKIE_BOOTSTRAP_CONFIG_KEY = '__MINERAL_COOKIE_CONFIG__'\nexport const MCOOKIE_RUNTIME_KEY = '__MINERAL_COOKIE_RUNTIME__'\nexport const MCOOKIE_RUNTIME_READY_EVENT = 'mineralui:cookie-runtime-ready'\n\nexport type MCookieBootstrapResourceKind = 'script' | 'iframe' | 'image'\n\nexport interface MCookieBootstrapResourceRules {\n scripts?: Record<string, string[]>\n iframes?: Record<string, string[]>\n images?: Record<string, string[]>\n}\n\nexport interface MCookieBootstrapScanOptions {\n cookies?: boolean\n storage?: boolean\n scripts?: boolean\n iframes?: boolean\n images?: boolean\n}\n\nexport interface MCookieBootstrapConfig {\n siteKey?: string\n domain?: string\n version?: string\n storage?: MCookieConsentPersistence\n storageKey?: string\n cookieName?: string\n cookieMaxAgeDays?: number\n categories?: MCookieCategoryDefinition[]\n hideOnAccept?: boolean\n autoShow?: boolean\n reopenOnVersionChange?: boolean\n requiredCookies?: string[]\n categoryRules?: Record<string, string[]>\n resources?: MCookieBootstrapResourceRules\n scan?: MCookieBootstrapScanOptions\n configEndpoint?: string\n scanEndpoint?: string\n reportEndpoint?: string\n reportMethod?: 'POST' | 'PUT'\n reportHeaders?: Record<string, string>\n}\n\nexport interface MCookieRuntime {\n config: MCookieBootstrapConfig\n getDeclaration?: () => Promise<MCookieDeclarationItem[]>\n getConsent?: () => Promise<MCookieConsentState | null>\n saveConsent?: (state: MCookieConsentState) => void | Promise<void>\n}\n\nexport interface MCookieBootstrapChangeDetail {\n state: MCookieConsentState | null\n}\n\nexport interface MCookieScanStorageItem {\n kind: 'localStorage' | 'sessionStorage'\n key: string\n value: string\n}\n\nexport interface MCookieScanResourceItem {\n kind: MCookieBootstrapResourceKind\n src: string\n host: string\n category?: string\n}\n\nexport interface MCookieScanCookieItem {\n name: string\n value: string\n category: string\n required: boolean\n matchedBy: string\n source: string\n}\n\nexport interface MCookieScanReport {\n siteKey?: string\n domain: string\n url: string\n scannedAt: string\n cookies: MCookieScanCookieItem[]\n storage: MCookieScanStorageItem[]\n resources: MCookieScanResourceItem[]\n}\n\nexport interface MCookieBootstrapHandle {\n config: MCookieBootstrapConfig\n destroy: () => void\n getState: () => MCookieConsentState | null\n sync: (state?: MCookieConsentState | null) => void\n}\n\ndeclare global {\n interface Window {\n __MINERAL_COOKIE_CONFIG__?: MCookieBootstrapConfig\n __MINERAL_COOKIE_RUNTIME__?: MCookieRuntime\n MineralCookieConsentBootstrap?: MCookieBootstrapHandle\n }\n}\n","import {detectDocumentCookies} from '../MCookieConsentProvider/MCookieConsent.inventory'\nimport {\n COOKIE_CONSENT_COOKIE_NAME,\n COOKIE_CONSENT_STORAGE,\n COOKIE_CONSENT_STORAGE_KEY,\n} from '../MCookieConsentProvider/MCookieConsent.defaults'\nimport {readStoredCookieConsent} from '../MCookieConsentProvider/MCookieConsent.storage'\nimport type {MCookieConsentState} from '../MCookieConsentProvider'\nimport {MCOOKIE_BOOTSTRAP_CONFIG_KEY, MCOOKIE_CONSENT_CHANGE_EVENT} from './MCookieBootstrap.types'\nimport type {\n MCookieBootstrapConfig,\n MCookieBootstrapHandle,\n MCookieBootstrapResourceKind,\n MCookieScanReport,\n MCookieScanResourceItem,\n MCookieScanStorageItem,\n} from './MCookieBootstrap.types'\n\nconst CATEGORY_ATTRIBUTE = 'data-mineral-cookie-category'\nconst BLOCKED_ATTRIBUTE = 'data-mineral-cookie-blocked'\nconst SRC_ATTRIBUTE = 'data-mineral-cookie-src'\nconst TYPE_ATTRIBUTE = 'data-mineral-cookie-type'\n\nfunction toPatternRegExp(pattern: string) {\n const escaped = pattern.replace(/[.+?^${}()|[\\]\\\\]/g, '\\\\$&').replace(/\\*/g, '.*')\n return new RegExp(`^${escaped}$`, 'i')\n}\n\nfunction matchesPattern(value: string, pattern: string) {\n return toPatternRegExp(pattern).test(value)\n}\n\nfunction getElementSource(node: Element) {\n if (node instanceof HTMLScriptElement || node instanceof HTMLIFrameElement || node instanceof HTMLImageElement) {\n return node.getAttribute('src') ?? node.getAttribute(SRC_ATTRIBUTE) ?? ''\n }\n\n return ''\n}\n\nfunction getSourceHost(src: string) {\n try {\n return new URL(src, window.location.href).hostname\n } catch {\n return ''\n }\n}\n\nfunction getConsentState(config: MCookieBootstrapConfig) {\n return readStoredCookieConsent({\n storage: config.storage ?? COOKIE_CONSENT_STORAGE,\n storageKey: config.storageKey ?? COOKIE_CONSENT_STORAGE_KEY,\n cookieName: config.cookieName ?? COOKIE_CONSENT_COOKIE_NAME,\n })\n}\n\nfunction isCategoryAllowed(state: MCookieConsentState | null, category: string) {\n if (category === 'necessary') {\n return true\n }\n\n return state?.categories?.[category] === true\n}\n\nfunction findMatchedCategory(node: Element, config: MCookieBootstrapConfig) {\n const explicitCategory = node.getAttribute(CATEGORY_ATTRIBUTE)\n if (explicitCategory) {\n return explicitCategory\n }\n\n const src = getElementSource(node)\n if (!src) {\n return null\n }\n\n const host = getSourceHost(src)\n if (!host) {\n return null\n }\n\n const kind: MCookieBootstrapResourceKind | null =\n node instanceof HTMLScriptElement\n ? 'script'\n : node instanceof HTMLIFrameElement\n ? 'iframe'\n : node instanceof HTMLImageElement\n ? 'image'\n : null\n\n if (!kind) {\n return null\n }\n\n const rules =\n kind === 'script'\n ? config.resources?.scripts\n : kind === 'iframe'\n ? config.resources?.iframes\n : config.resources?.images\n\n if (!rules) {\n return null\n }\n\n for (const [category, patterns] of Object.entries(rules)) {\n if (patterns.some((pattern) => matchesPattern(host, pattern) || matchesPattern(src, pattern))) {\n node.setAttribute(CATEGORY_ATTRIBUTE, category)\n return category\n }\n }\n\n return null\n}\n\nfunction blockNode(node: Element) {\n if (node.getAttribute(BLOCKED_ATTRIBUTE) === 'true') {\n return\n }\n\n if (node instanceof HTMLScriptElement) {\n const currentType = node.getAttribute('type') ?? ''\n const src = node.getAttribute('src')\n if (src) {\n node.setAttribute(SRC_ATTRIBUTE, src)\n node.removeAttribute('src')\n }\n\n node.setAttribute(TYPE_ATTRIBUTE, currentType === 'text/plain' ? '' : currentType)\n node.type = 'text/plain'\n node.setAttribute(BLOCKED_ATTRIBUTE, 'true')\n return\n }\n\n if (node instanceof HTMLIFrameElement || node instanceof HTMLImageElement) {\n const src = node.getAttribute('src')\n if (src) {\n node.setAttribute(SRC_ATTRIBUTE, src)\n node.removeAttribute('src')\n }\n\n node.setAttribute(BLOCKED_ATTRIBUTE, 'true')\n }\n}\n\nfunction activateScript(node: HTMLScriptElement) {\n const src = node.getAttribute(SRC_ATTRIBUTE)\n const clone = document.createElement('script')\n\n for (const attribute of node.getAttributeNames()) {\n if (\n attribute === 'type' ||\n attribute === BLOCKED_ATTRIBUTE ||\n attribute === SRC_ATTRIBUTE ||\n attribute === TYPE_ATTRIBUTE\n ) {\n continue\n }\n\n clone.setAttribute(attribute, node.getAttribute(attribute) ?? '')\n }\n\n const originalType = node.getAttribute(TYPE_ATTRIBUTE)\n if (originalType) {\n clone.type = originalType\n }\n\n if (src) {\n clone.src = src\n } else {\n clone.textContent = node.textContent\n }\n\n node.replaceWith(clone)\n}\n\nfunction activateNode(node: Element) {\n if (node instanceof HTMLScriptElement) {\n const canActivate =\n node.getAttribute(BLOCKED_ATTRIBUTE) === 'true' ||\n (node.type === 'text/plain' && node.hasAttribute(CATEGORY_ATTRIBUTE))\n\n if (!canActivate) {\n return\n }\n\n activateScript(node)\n return\n }\n\n if (node instanceof HTMLIFrameElement || node instanceof HTMLImageElement) {\n if (node.getAttribute(BLOCKED_ATTRIBUTE) !== 'true' && !node.hasAttribute(SRC_ATTRIBUTE)) {\n return\n }\n\n const src = node.getAttribute(SRC_ATTRIBUTE)\n if (src) {\n node.setAttribute('src', src)\n }\n\n node.removeAttribute(SRC_ATTRIBUTE)\n node.removeAttribute(BLOCKED_ATTRIBUTE)\n }\n}\n\nfunction collectCandidateNodes(root: ParentNode) {\n const directNodes: Element[] = []\n\n if (root instanceof Element) {\n directNodes.push(root)\n }\n\n const nestedNodes = Array.from(root.querySelectorAll('script, iframe, img'))\n return [...directNodes, ...nestedNodes]\n}\n\nfunction syncNode(node: Element, state: MCookieConsentState | null, config: MCookieBootstrapConfig) {\n const category = findMatchedCategory(node, config)\n if (!category) {\n return\n }\n\n if (isCategoryAllowed(state, category)) {\n activateNode(node)\n return\n }\n\n blockNode(node)\n}\n\nfunction syncDocument(state: MCookieConsentState | null, config: MCookieBootstrapConfig) {\n for (const node of collectCandidateNodes(document)) {\n syncNode(node, state, config)\n }\n}\n\nfunction patchDomInsertion(getState: () => MCookieConsentState | null, config: MCookieBootstrapConfig) {\n const appendChild = Node.prototype.appendChild\n const insertBefore = Node.prototype.insertBefore\n const replaceChild = Node.prototype.replaceChild\n\n Node.prototype.appendChild = function patchedAppendChild<T extends Node>(node: T) {\n if (node instanceof Element) {\n for (const element of collectCandidateNodes(node)) {\n syncNode(element, getState(), config)\n }\n }\n\n return appendChild.call(this, node) as T\n }\n\n Node.prototype.insertBefore = function patchedInsertBefore<T extends Node>(node: T, child: Node | null) {\n if (node instanceof Element) {\n for (const element of collectCandidateNodes(node)) {\n syncNode(element, getState(), config)\n }\n }\n\n return insertBefore.call(this, node, child) as T\n }\n\n Node.prototype.replaceChild = function patchedReplaceChild<T extends Node>(node: Node, child: T) {\n if (node instanceof Element) {\n for (const element of collectCandidateNodes(node)) {\n syncNode(element, getState(), config)\n }\n }\n\n return replaceChild.call(this, node, child) as T\n }\n\n return () => {\n Node.prototype.appendChild = appendChild\n Node.prototype.insertBefore = insertBefore\n Node.prototype.replaceChild = replaceChild\n }\n}\n\nfunction scanStorage(storage: Storage, kind: 'localStorage' | 'sessionStorage') {\n const items: MCookieScanStorageItem[] = []\n\n try {\n for (let index = 0; index < storage.length; index += 1) {\n const key = storage.key(index)\n if (!key) {\n continue\n }\n\n items.push({\n kind,\n key,\n value: storage.getItem(key) ?? '',\n })\n }\n } catch {\n return []\n }\n\n return items\n}\n\nexport function readMCookieBootstrapConfig(config?: MCookieBootstrapConfig | null) {\n if (config) {\n return config\n }\n\n if (typeof window === 'undefined') {\n return null\n }\n\n return window[MCOOKIE_BOOTSTRAP_CONFIG_KEY] ?? null\n}\n\nexport function scanMCookieSurface(config?: MCookieBootstrapConfig | null): MCookieScanReport | null {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n return null\n }\n\n const resolvedConfig = readMCookieBootstrapConfig(config)\n if (!resolvedConfig) {\n return null\n }\n\n const scan = resolvedConfig.scan ?? {}\n const storageItems: MCookieScanStorageItem[] = []\n const resources: MCookieScanResourceItem[] = []\n\n if (scan.storage !== false) {\n storageItems.push(...scanStorage(window.localStorage, 'localStorage'))\n storageItems.push(...scanStorage(window.sessionStorage, 'sessionStorage'))\n }\n\n const resourceSelectors: Array<[boolean, string, MCookieBootstrapResourceKind]> = [\n [scan.scripts !== false, 'script[src], script[data-mineral-cookie-src]', 'script'],\n [scan.iframes !== false, 'iframe[src], iframe[data-mineral-cookie-src]', 'iframe'],\n [scan.images !== false, 'img[src], img[data-mineral-cookie-src]', 'image'],\n ]\n\n for (const [enabled, selector, kind] of resourceSelectors) {\n if (!enabled) {\n continue\n }\n\n for (const node of Array.from(document.querySelectorAll(selector))) {\n const src = getElementSource(node)\n if (!src) {\n continue\n }\n\n resources.push({\n kind,\n src,\n host: getSourceHost(src),\n category: node.getAttribute(CATEGORY_ATTRIBUTE) ?? undefined,\n })\n }\n }\n\n return {\n siteKey: resolvedConfig.siteKey,\n domain: resolvedConfig.domain ?? window.location.hostname,\n url: window.location.href,\n scannedAt: new Date().toISOString(),\n cookies:\n scan.cookies === false\n ? []\n : detectDocumentCookies({\n requiredCookies: resolvedConfig.requiredCookies ?? [],\n categoryRules: resolvedConfig.categoryRules ?? {},\n }).map((item) => ({\n ...item,\n matchedBy: item.matchedBy,\n source: item.source,\n })),\n storage: storageItems,\n resources,\n }\n}\n\nexport async function reportMCookieSurface(config?: MCookieBootstrapConfig | null, report?: MCookieScanReport | null) {\n const resolvedConfig = readMCookieBootstrapConfig(config)\n const endpoint = resolvedConfig?.scanEndpoint ?? resolvedConfig?.reportEndpoint\n\n if (!endpoint || typeof fetch === 'undefined') {\n return report ?? null\n }\n\n if (!resolvedConfig) {\n return report ?? null\n }\n\n const payload = report ?? scanMCookieSurface(resolvedConfig)\n if (!payload) {\n return null\n }\n\n await fetch(endpoint, {\n method: resolvedConfig.reportMethod ?? 'POST',\n headers: {\n 'content-type': 'application/json',\n ...(resolvedConfig.siteKey ? {'x-mineral-site-key': resolvedConfig.siteKey} : {}),\n ...resolvedConfig.reportHeaders,\n },\n body: JSON.stringify(payload),\n })\n\n return payload\n}\n\nexport function bootstrapMCookieConsent(config?: MCookieBootstrapConfig | null): MCookieBootstrapHandle | null {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n return null\n }\n\n const resolvedConfig = readMCookieBootstrapConfig(config)\n if (!resolvedConfig) {\n return null\n }\n\n let state = getConsentState(resolvedConfig)\n let reportTimer: number | null = null\n let followUpReportTimer: number | null = null\n\n const clearReportTimers = () => {\n if (reportTimer != null) {\n window.clearTimeout(reportTimer)\n reportTimer = null\n }\n\n if (followUpReportTimer != null) {\n window.clearTimeout(followUpReportTimer)\n followUpReportTimer = null\n }\n }\n\n const scheduleReport = (primaryDelay = 0, followUpDelay?: number) => {\n if (!resolvedConfig.scanEndpoint && !resolvedConfig.reportEndpoint) {\n return\n }\n\n clearReportTimers()\n\n reportTimer = window.setTimeout(() => {\n reportTimer = null\n void reportMCookieSurface(resolvedConfig)\n }, primaryDelay)\n\n if (typeof followUpDelay === 'number') {\n followUpReportTimer = window.setTimeout(() => {\n followUpReportTimer = null\n void reportMCookieSurface(resolvedConfig)\n }, followUpDelay)\n }\n }\n\n const sync = (nextState?: MCookieConsentState | null) => {\n state = nextState === undefined ? getConsentState(resolvedConfig) : nextState\n syncDocument(state, resolvedConfig)\n }\n\n sync(state)\n\n const observer = new MutationObserver((records) => {\n for (const record of records) {\n for (const node of Array.from(record.addedNodes)) {\n if (!(node instanceof Element)) {\n continue\n }\n\n for (const element of collectCandidateNodes(node)) {\n syncNode(element, state, resolvedConfig)\n }\n }\n }\n })\n\n observer.observe(document.documentElement, {\n childList: true,\n subtree: true,\n })\n\n const handleConsentChange = (event: Event) => {\n const detail = (event as CustomEvent<{state: MCookieConsentState | null}>).detail\n sync(detail?.state ?? null)\n scheduleReport(300, 1500)\n }\n\n window.addEventListener(MCOOKIE_CONSENT_CHANGE_EVENT, handleConsentChange)\n\n const restoreDom = patchDomInsertion(() => state, resolvedConfig)\n\n const handleWindowLoad = () => {\n scheduleReport()\n }\n\n if (document.readyState === 'complete') {\n handleWindowLoad()\n } else {\n window.addEventListener('load', handleWindowLoad, {once: true})\n }\n\n const handle: MCookieBootstrapHandle = {\n config: resolvedConfig,\n destroy: () => {\n observer.disconnect()\n restoreDom()\n clearReportTimers()\n window.removeEventListener('load', handleWindowLoad)\n window.removeEventListener(MCOOKIE_CONSENT_CHANGE_EVENT, handleConsentChange)\n if (window.MineralCookieConsentBootstrap === handle) {\n delete window.MineralCookieConsentBootstrap\n }\n },\n getState: () => state,\n sync,\n }\n\n window.MineralCookieConsentBootstrap = handle\n return handle\n}\n\nexport function autoBootstrapMCookieConsent() {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n return null\n }\n\n return bootstrapMCookieConsent(readMCookieBootstrapConfig())\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MCookieBootstrap-DSOT4FQo.cjs","names":[],"sources":["../src/components/feedback/MCookie/MCookieConsentProvider/MCookieConsent.defaults.ts","../src/components/feedback/MCookie/MCookieConsentProvider/MCookieConsent.inventory.ts","../src/components/feedback/MCookie/MCookieConsentProvider/MCookieConsent.storage.ts","../src/components/feedback/MCookie/MCookieBootstrap/MCookieBootstrap.types.ts","../src/components/feedback/MCookie/MCookieBootstrap/MCookieBootstrap.ts"],"sourcesContent":["import type {MCookieConsentTexts} from '../../../../i18n/frameworkTexts'\nimport type {MCookieCategoryDefinition, MCookieConsentPersistence, MCookieDeclarationItem} from './MCookieConsent.types'\n\nexport const COOKIE_CONSENT_STORAGE_KEY = 'mineralui-cookie-consent'\nexport const COOKIE_CONSENT_COOKIE_NAME = 'mineralui-cookie-consent'\nexport const COOKIE_CONSENT_COOKIE_MAX_AGE_DAYS = 180\nexport const COOKIE_CONSENT_STORAGE: MCookieConsentPersistence = 'localStorage'\n\nexport function mergeCookieConsentTexts(\n baseTexts: MCookieConsentTexts,\n override?: Partial<MCookieConsentTexts>\n): MCookieConsentTexts {\n return {\n ...baseTexts,\n ...override,\n }\n}\n\nexport function createCookieConsentCategories(texts: MCookieConsentTexts): MCookieCategoryDefinition[] {\n return [\n {\n key: 'necessary',\n label: texts.necessaryLabel,\n description: texts.necessaryDescription,\n required: true,\n defaultValue: true,\n },\n {\n key: 'preferences',\n label: texts.preferencesLabel,\n description: texts.preferencesDescriptionLabel,\n defaultValue: false,\n },\n {\n key: 'analytics',\n label: texts.analyticsLabel,\n description: texts.analyticsDescription,\n defaultValue: false,\n },\n {\n key: 'marketing',\n label: texts.marketingLabel,\n description: texts.marketingDescription,\n defaultValue: false,\n },\n ]\n}\n\nexport function createCookieConsentDeclaration(): MCookieDeclarationItem[] {\n return []\n}\n","import {COOKIE_CONSENT_COOKIE_NAME} from './MCookieConsent.defaults'\nimport type {\n MCookieCategoryRules,\n MCookieDetectedCookie,\n MCookieDetectedCookieMatch,\n MCookieMatchRule,\n} from './MCookieConsent.types'\n\nconst INTERNAL_REQUIRED_COOKIE_RULES: MCookieMatchRule[] = [\n COOKIE_CONSENT_COOKIE_NAME,\n /^PHPSESSID$/i,\n /^JSESSIONID$/i,\n /^ASP\\.NET_SessionId$/i,\n /^__Host-/i,\n /^__Secure-/i,\n /csrf/i,\n /xsrf/i,\n /session/i,\n /auth/i,\n /token/i,\n /^sid$/i,\n]\n\nconst BUILT_IN_CATEGORY_RULES: Record<string, MCookieMatchRule[]> = {\n preferences: [/theme/i, /locale/i, /lang/i, /currency/i, /timezone/i, /consent/i],\n analytics: [/^_ga/i, /^_gid/i, /^_gat/i, /^_pk_/i, /^pk_/i, /^_hj/i, /^hj/i, /^amplitude/i, /^mp_/i, /^matomo/i],\n marketing: [/^_fbp$/i, /^_fbc$/i, /^_gcl_/i, /^IDE$/i, /^test_cookie$/i, /^li_/i, /^tt_/i, /^_uet/i, /^pin_utm/i],\n}\n\nfunction matchCookieRule(name: string, rule: MCookieMatchRule) {\n if (typeof rule === 'string') {\n const normalizedRule = rule.trim().toLowerCase()\n const normalizedName = name.trim().toLowerCase()\n\n if (normalizedRule.endsWith('*')) {\n return normalizedName.startsWith(normalizedRule.slice(0, -1))\n }\n\n return normalizedName === normalizedRule\n }\n\n return rule.test(name)\n}\n\nfunction matchCookieRules(name: string, rules?: MCookieMatchRule[]) {\n return Array.isArray(rules) && rules.some((rule) => matchCookieRule(name, rule))\n}\n\nfunction parseDocumentCookies(cookieString: string) {\n if (!cookieString.trim()) {\n return []\n }\n\n return cookieString\n .split(';')\n .map((chunk) => chunk.trim())\n .filter(Boolean)\n .map((chunk) => {\n const separatorIndex = chunk.indexOf('=')\n if (separatorIndex === -1) {\n return {\n name: chunk,\n value: '',\n }\n }\n\n return {\n name: chunk.slice(0, separatorIndex).trim(),\n value: chunk.slice(separatorIndex + 1).trim(),\n }\n })\n .filter((item) => item.name.length > 0)\n}\n\nfunction classifyCookie(\n name: string,\n requiredCookies: MCookieMatchRule[],\n categoryRules: MCookieCategoryRules\n): Pick<MCookieDetectedCookie, 'category' | 'required' | 'matchedBy'> {\n if (matchCookieRules(name, [...INTERNAL_REQUIRED_COOKIE_RULES, ...requiredCookies])) {\n return {\n category: 'necessary',\n required: true,\n matchedBy: 'required',\n }\n }\n\n for (const [category, rules] of Object.entries(categoryRules)) {\n if (matchCookieRules(name, rules)) {\n return {\n category,\n required: false,\n matchedBy: 'custom',\n }\n }\n }\n\n for (const [category, rules] of Object.entries(BUILT_IN_CATEGORY_RULES)) {\n if (matchCookieRules(name, rules)) {\n return {\n category,\n required: false,\n matchedBy: 'built-in',\n }\n }\n }\n\n return {\n category: 'preferences',\n required: false,\n matchedBy: 'fallback',\n }\n}\n\nexport function detectDocumentCookies({\n cookieString,\n requiredCookies = [],\n categoryRules = {},\n}: {\n cookieString?: string\n requiredCookies?: MCookieMatchRule[]\n categoryRules?: MCookieCategoryRules\n}) {\n const source = cookieString ?? (typeof document !== 'undefined' ? document.cookie : '')\n\n return parseDocumentCookies(source).map<MCookieDetectedCookie>((item) => {\n const classification = classifyCookie(item.name, requiredCookies, categoryRules)\n\n return {\n name: item.name,\n value: item.value,\n category: classification.category,\n required: classification.required,\n matchedBy: classification.matchedBy as MCookieDetectedCookieMatch,\n source: 'document.cookie',\n }\n })\n}\n","import type {MCookieConsentPersistence, MCookieConsentState} from './MCookieConsent.types'\n\ninterface CookieConsentStorageOptions {\n storage: MCookieConsentPersistence\n storageKey: string\n cookieName: string\n cookieMaxAgeDays: number\n}\n\nfunction isCookieConsentState(value: unknown): value is MCookieConsentState {\n if (!value || typeof value !== 'object') {\n return false\n }\n\n const candidate = value as MCookieConsentState\n\n return (\n typeof candidate.version === 'string' &&\n typeof candidate.decidedAt === 'string' &&\n typeof candidate.source === 'string' &&\n candidate.categories != null &&\n typeof candidate.categories === 'object'\n )\n}\n\nfunction readCookieValue(name: string): string | null {\n if (typeof document === 'undefined') {\n return null\n }\n\n const prefix = `${encodeURIComponent(name)}=`\n\n for (const chunk of document.cookie.split(';')) {\n const trimmed = chunk.trim()\n if (trimmed.startsWith(prefix)) {\n return decodeURIComponent(trimmed.slice(prefix.length))\n }\n }\n\n return null\n}\n\nfunction writeCookieValue(name: string, value: string, maxAgeDays: number) {\n if (typeof document === 'undefined') {\n return\n }\n\n document.cookie = `${encodeURIComponent(name)}=${encodeURIComponent(value)}; path=/; max-age=${Math.floor(\n maxAgeDays * 24 * 60 * 60\n )}; samesite=lax`\n}\n\nfunction clearCookieValue(name: string) {\n if (typeof document === 'undefined') {\n return\n }\n\n document.cookie = `${encodeURIComponent(name)}=; path=/; max-age=0; samesite=lax`\n}\n\nexport function readStoredCookieConsent({\n storage,\n storageKey,\n cookieName,\n}: Pick<CookieConsentStorageOptions, 'storage' | 'storageKey' | 'cookieName'>): MCookieConsentState | null {\n try {\n const raw = storage === 'cookie' ? readCookieValue(cookieName) : localStorage.getItem(storageKey)\n if (!raw) {\n return null\n }\n\n const parsed = JSON.parse(raw) as unknown\n return isCookieConsentState(parsed) ? parsed : null\n } catch {\n return null\n }\n}\n\nexport function writeStoredCookieConsent(\n {storage, storageKey, cookieName, cookieMaxAgeDays}: CookieConsentStorageOptions,\n state: MCookieConsentState\n) {\n try {\n const serialized = JSON.stringify(state)\n\n if (storage === 'cookie') {\n writeCookieValue(cookieName, serialized, cookieMaxAgeDays)\n return\n }\n\n localStorage.setItem(storageKey, serialized)\n } catch {\n /* noop */\n }\n}\n\nexport function clearStoredCookieConsent({\n storage,\n storageKey,\n cookieName,\n}: Pick<CookieConsentStorageOptions, 'storage' | 'storageKey' | 'cookieName'>) {\n try {\n if (storage === 'cookie') {\n clearCookieValue(cookieName)\n return\n }\n\n localStorage.removeItem(storageKey)\n } catch {\n /* noop */\n }\n}\n","import type {\n MCookieCategoryDefinition,\n MCookieConsentPersistence,\n MCookieConsentState,\n MCookieDeclarationItem,\n} from '../MCookieConsentProvider'\n\nexport const MCOOKIE_CONSENT_CHANGE_EVENT = 'mineralui:cookie-consent-change'\nexport const MCOOKIE_BOOTSTRAP_CONFIG_KEY = '__MINERAL_COOKIE_CONFIG__'\nexport const MCOOKIE_RUNTIME_KEY = '__MINERAL_COOKIE_RUNTIME__'\nexport const MCOOKIE_RUNTIME_READY_EVENT = 'mineralui:cookie-runtime-ready'\n\nexport type MCookieBootstrapResourceKind = 'script' | 'iframe' | 'image'\n\nexport interface MCookieBootstrapResourceRules {\n scripts?: Record<string, string[]>\n iframes?: Record<string, string[]>\n images?: Record<string, string[]>\n}\n\nexport interface MCookieBootstrapScanOptions {\n cookies?: boolean\n storage?: boolean\n scripts?: boolean\n iframes?: boolean\n images?: boolean\n}\n\nexport interface MCookieBootstrapConfig {\n siteKey?: string\n domain?: string\n version?: string\n storage?: MCookieConsentPersistence\n storageKey?: string\n cookieName?: string\n cookieMaxAgeDays?: number\n categories?: MCookieCategoryDefinition[]\n hideOnAccept?: boolean\n autoShow?: boolean\n reopenOnVersionChange?: boolean\n requiredCookies?: string[]\n categoryRules?: Record<string, string[]>\n resources?: MCookieBootstrapResourceRules\n scan?: MCookieBootstrapScanOptions\n configEndpoint?: string\n scanEndpoint?: string\n reportEndpoint?: string\n reportMethod?: 'POST' | 'PUT'\n reportHeaders?: Record<string, string>\n}\n\nexport interface MCookieRuntime {\n config: MCookieBootstrapConfig\n getDeclaration?: () => Promise<MCookieDeclarationItem[]>\n getConsent?: () => Promise<MCookieConsentState | null>\n saveConsent?: (state: MCookieConsentState) => void | Promise<void>\n}\n\nexport interface MCookieBootstrapChangeDetail {\n state: MCookieConsentState | null\n}\n\nexport interface MCookieScanStorageItem {\n kind: 'localStorage' | 'sessionStorage'\n key: string\n value: string\n}\n\nexport interface MCookieScanResourceItem {\n kind: MCookieBootstrapResourceKind\n src: string\n host: string\n category?: string\n}\n\nexport interface MCookieScanCookieItem {\n name: string\n value: string\n category: string\n required: boolean\n matchedBy: string\n source: string\n}\n\nexport interface MCookieScanReport {\n siteKey?: string\n domain: string\n url: string\n scannedAt: string\n cookies: MCookieScanCookieItem[]\n storage: MCookieScanStorageItem[]\n resources: MCookieScanResourceItem[]\n}\n\nexport interface MCookieBootstrapHandle {\n config: MCookieBootstrapConfig\n destroy: () => void\n getState: () => MCookieConsentState | null\n sync: (state?: MCookieConsentState | null) => void\n}\n\ndeclare global {\n interface Window {\n __MINERAL_COOKIE_CONFIG__?: MCookieBootstrapConfig\n __MINERAL_COOKIE_RUNTIME__?: MCookieRuntime\n MineralCookieConsentBootstrap?: MCookieBootstrapHandle\n }\n}\n","import {detectDocumentCookies} from '../MCookieConsentProvider/MCookieConsent.inventory'\nimport {\n COOKIE_CONSENT_COOKIE_NAME,\n COOKIE_CONSENT_STORAGE,\n COOKIE_CONSENT_STORAGE_KEY,\n} from '../MCookieConsentProvider/MCookieConsent.defaults'\nimport {readStoredCookieConsent} from '../MCookieConsentProvider/MCookieConsent.storage'\nimport type {MCookieConsentState} from '../MCookieConsentProvider'\nimport {MCOOKIE_BOOTSTRAP_CONFIG_KEY, MCOOKIE_CONSENT_CHANGE_EVENT} from './MCookieBootstrap.types'\nimport type {\n MCookieBootstrapConfig,\n MCookieBootstrapHandle,\n MCookieBootstrapResourceKind,\n MCookieScanReport,\n MCookieScanResourceItem,\n MCookieScanStorageItem,\n} from './MCookieBootstrap.types'\n\nconst CATEGORY_ATTRIBUTE = 'data-mineral-cookie-category'\nconst BLOCKED_ATTRIBUTE = 'data-mineral-cookie-blocked'\nconst SRC_ATTRIBUTE = 'data-mineral-cookie-src'\nconst TYPE_ATTRIBUTE = 'data-mineral-cookie-type'\n\nfunction toPatternRegExp(pattern: string) {\n const escaped = pattern.replace(/[.+?^${}()|[\\]\\\\]/g, '\\\\$&').replace(/\\*/g, '.*')\n return new RegExp(`^${escaped}$`, 'i')\n}\n\nfunction matchesPattern(value: string, pattern: string) {\n return toPatternRegExp(pattern).test(value)\n}\n\nfunction getElementSource(node: Element) {\n if (node instanceof HTMLScriptElement || node instanceof HTMLIFrameElement || node instanceof HTMLImageElement) {\n return node.getAttribute('src') ?? node.getAttribute(SRC_ATTRIBUTE) ?? ''\n }\n\n return ''\n}\n\nfunction getSourceHost(src: string) {\n try {\n return new URL(src, window.location.href).hostname\n } catch {\n return ''\n }\n}\n\nfunction getConsentState(config: MCookieBootstrapConfig) {\n return readStoredCookieConsent({\n storage: config.storage ?? COOKIE_CONSENT_STORAGE,\n storageKey: config.storageKey ?? COOKIE_CONSENT_STORAGE_KEY,\n cookieName: config.cookieName ?? COOKIE_CONSENT_COOKIE_NAME,\n })\n}\n\nfunction isCategoryAllowed(state: MCookieConsentState | null, category: string) {\n if (category === 'necessary') {\n return true\n }\n\n return state?.categories?.[category] === true\n}\n\nfunction findMatchedCategory(node: Element, config: MCookieBootstrapConfig) {\n const explicitCategory = node.getAttribute(CATEGORY_ATTRIBUTE)\n if (explicitCategory) {\n return explicitCategory\n }\n\n const src = getElementSource(node)\n if (!src) {\n return null\n }\n\n const host = getSourceHost(src)\n if (!host) {\n return null\n }\n\n const kind: MCookieBootstrapResourceKind | null =\n node instanceof HTMLScriptElement\n ? 'script'\n : node instanceof HTMLIFrameElement\n ? 'iframe'\n : node instanceof HTMLImageElement\n ? 'image'\n : null\n\n if (!kind) {\n return null\n }\n\n const rules =\n kind === 'script'\n ? config.resources?.scripts\n : kind === 'iframe'\n ? config.resources?.iframes\n : config.resources?.images\n\n if (!rules) {\n return null\n }\n\n for (const [category, patterns] of Object.entries(rules)) {\n if (patterns.some((pattern) => matchesPattern(host, pattern) || matchesPattern(src, pattern))) {\n node.setAttribute(CATEGORY_ATTRIBUTE, category)\n return category\n }\n }\n\n return null\n}\n\nfunction blockNode(node: Element) {\n if (node.getAttribute(BLOCKED_ATTRIBUTE) === 'true') {\n return\n }\n\n if (node instanceof HTMLScriptElement) {\n const currentType = node.getAttribute('type') ?? ''\n const src = node.getAttribute('src')\n if (src) {\n node.setAttribute(SRC_ATTRIBUTE, src)\n node.removeAttribute('src')\n }\n\n node.setAttribute(TYPE_ATTRIBUTE, currentType === 'text/plain' ? '' : currentType)\n node.type = 'text/plain'\n node.setAttribute(BLOCKED_ATTRIBUTE, 'true')\n return\n }\n\n if (node instanceof HTMLIFrameElement || node instanceof HTMLImageElement) {\n const src = node.getAttribute('src')\n if (src) {\n node.setAttribute(SRC_ATTRIBUTE, src)\n node.removeAttribute('src')\n }\n\n node.setAttribute(BLOCKED_ATTRIBUTE, 'true')\n }\n}\n\nfunction activateScript(node: HTMLScriptElement) {\n const src = node.getAttribute(SRC_ATTRIBUTE)\n const clone = document.createElement('script')\n\n for (const attribute of node.getAttributeNames()) {\n if (\n attribute === 'type' ||\n attribute === BLOCKED_ATTRIBUTE ||\n attribute === SRC_ATTRIBUTE ||\n attribute === TYPE_ATTRIBUTE\n ) {\n continue\n }\n\n clone.setAttribute(attribute, node.getAttribute(attribute) ?? '')\n }\n\n const originalType = node.getAttribute(TYPE_ATTRIBUTE)\n if (originalType) {\n clone.type = originalType\n }\n\n if (src) {\n clone.src = src\n } else {\n clone.textContent = node.textContent\n }\n\n node.replaceWith(clone)\n}\n\nfunction activateNode(node: Element) {\n if (node instanceof HTMLScriptElement) {\n const canActivate =\n node.getAttribute(BLOCKED_ATTRIBUTE) === 'true' ||\n (node.type === 'text/plain' && node.hasAttribute(CATEGORY_ATTRIBUTE))\n\n if (!canActivate) {\n return\n }\n\n activateScript(node)\n return\n }\n\n if (node instanceof HTMLIFrameElement || node instanceof HTMLImageElement) {\n if (node.getAttribute(BLOCKED_ATTRIBUTE) !== 'true' && !node.hasAttribute(SRC_ATTRIBUTE)) {\n return\n }\n\n const src = node.getAttribute(SRC_ATTRIBUTE)\n if (src) {\n node.setAttribute('src', src)\n }\n\n node.removeAttribute(SRC_ATTRIBUTE)\n node.removeAttribute(BLOCKED_ATTRIBUTE)\n }\n}\n\nfunction collectCandidateNodes(root: ParentNode) {\n const directNodes: Element[] = []\n\n if (root instanceof Element) {\n directNodes.push(root)\n }\n\n const nestedNodes = Array.from(root.querySelectorAll('script, iframe, img'))\n return [...directNodes, ...nestedNodes]\n}\n\nfunction syncNode(node: Element, state: MCookieConsentState | null, config: MCookieBootstrapConfig) {\n const category = findMatchedCategory(node, config)\n if (!category) {\n return\n }\n\n if (isCategoryAllowed(state, category)) {\n activateNode(node)\n return\n }\n\n blockNode(node)\n}\n\nfunction syncDocument(state: MCookieConsentState | null, config: MCookieBootstrapConfig) {\n for (const node of collectCandidateNodes(document)) {\n syncNode(node, state, config)\n }\n}\n\nfunction patchDomInsertion(getState: () => MCookieConsentState | null, config: MCookieBootstrapConfig) {\n const appendChild = Node.prototype.appendChild\n const insertBefore = Node.prototype.insertBefore\n const replaceChild = Node.prototype.replaceChild\n\n Node.prototype.appendChild = function patchedAppendChild<T extends Node>(node: T) {\n if (node instanceof Element) {\n for (const element of collectCandidateNodes(node)) {\n syncNode(element, getState(), config)\n }\n }\n\n return appendChild.call(this, node) as T\n }\n\n Node.prototype.insertBefore = function patchedInsertBefore<T extends Node>(node: T, child: Node | null) {\n if (node instanceof Element) {\n for (const element of collectCandidateNodes(node)) {\n syncNode(element, getState(), config)\n }\n }\n\n return insertBefore.call(this, node, child) as T\n }\n\n Node.prototype.replaceChild = function patchedReplaceChild<T extends Node>(node: Node, child: T) {\n if (node instanceof Element) {\n for (const element of collectCandidateNodes(node)) {\n syncNode(element, getState(), config)\n }\n }\n\n return replaceChild.call(this, node, child) as T\n }\n\n return () => {\n Node.prototype.appendChild = appendChild\n Node.prototype.insertBefore = insertBefore\n Node.prototype.replaceChild = replaceChild\n }\n}\n\nfunction scanStorage(storage: Storage, kind: 'localStorage' | 'sessionStorage') {\n const items: MCookieScanStorageItem[] = []\n\n try {\n for (let index = 0; index < storage.length; index += 1) {\n const key = storage.key(index)\n if (!key) {\n continue\n }\n\n items.push({\n kind,\n key,\n value: storage.getItem(key) ?? '',\n })\n }\n } catch {\n return []\n }\n\n return items\n}\n\nexport function readMCookieBootstrapConfig(config?: MCookieBootstrapConfig | null) {\n if (config) {\n return config\n }\n\n if (typeof window === 'undefined') {\n return null\n }\n\n return window[MCOOKIE_BOOTSTRAP_CONFIG_KEY] ?? null\n}\n\nexport function scanMCookieSurface(config?: MCookieBootstrapConfig | null): MCookieScanReport | null {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n return null\n }\n\n const resolvedConfig = readMCookieBootstrapConfig(config)\n if (!resolvedConfig) {\n return null\n }\n\n const scan = resolvedConfig.scan ?? {}\n const storageItems: MCookieScanStorageItem[] = []\n const resources: MCookieScanResourceItem[] = []\n\n if (scan.storage !== false) {\n storageItems.push(...scanStorage(window.localStorage, 'localStorage'))\n storageItems.push(...scanStorage(window.sessionStorage, 'sessionStorage'))\n }\n\n const resourceSelectors: Array<[boolean, string, MCookieBootstrapResourceKind]> = [\n [scan.scripts !== false, 'script[src], script[data-mineral-cookie-src]', 'script'],\n [scan.iframes !== false, 'iframe[src], iframe[data-mineral-cookie-src]', 'iframe'],\n [scan.images !== false, 'img[src], img[data-mineral-cookie-src]', 'image'],\n ]\n\n for (const [enabled, selector, kind] of resourceSelectors) {\n if (!enabled) {\n continue\n }\n\n for (const node of Array.from(document.querySelectorAll(selector))) {\n const src = getElementSource(node)\n if (!src) {\n continue\n }\n\n resources.push({\n kind,\n src,\n host: getSourceHost(src),\n category: node.getAttribute(CATEGORY_ATTRIBUTE) ?? undefined,\n })\n }\n }\n\n return {\n siteKey: resolvedConfig.siteKey,\n domain: resolvedConfig.domain ?? window.location.hostname,\n url: window.location.href,\n scannedAt: new Date().toISOString(),\n cookies:\n scan.cookies === false\n ? []\n : detectDocumentCookies({\n requiredCookies: resolvedConfig.requiredCookies ?? [],\n categoryRules: resolvedConfig.categoryRules ?? {},\n }).map((item) => ({\n ...item,\n matchedBy: item.matchedBy,\n source: item.source,\n })),\n storage: storageItems,\n resources,\n }\n}\n\nexport async function reportMCookieSurface(config?: MCookieBootstrapConfig | null, report?: MCookieScanReport | null) {\n const resolvedConfig = readMCookieBootstrapConfig(config)\n const endpoint = resolvedConfig?.scanEndpoint ?? resolvedConfig?.reportEndpoint\n\n if (!endpoint || typeof fetch === 'undefined') {\n return report ?? null\n }\n\n if (!resolvedConfig) {\n return report ?? null\n }\n\n const payload = report ?? scanMCookieSurface(resolvedConfig)\n if (!payload) {\n return null\n }\n\n await fetch(endpoint, {\n method: resolvedConfig.reportMethod ?? 'POST',\n headers: {\n 'content-type': 'application/json',\n ...(resolvedConfig.siteKey ? {'x-mineral-site-key': resolvedConfig.siteKey} : {}),\n ...resolvedConfig.reportHeaders,\n },\n body: JSON.stringify(payload),\n })\n\n return payload\n}\n\nexport function bootstrapMCookieConsent(config?: MCookieBootstrapConfig | null): MCookieBootstrapHandle | null {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n return null\n }\n\n const resolvedConfig = readMCookieBootstrapConfig(config)\n if (!resolvedConfig) {\n return null\n }\n\n let state = getConsentState(resolvedConfig)\n let reportTimer: number | null = null\n let followUpReportTimer: number | null = null\n\n const clearReportTimers = () => {\n if (reportTimer != null) {\n window.clearTimeout(reportTimer)\n reportTimer = null\n }\n\n if (followUpReportTimer != null) {\n window.clearTimeout(followUpReportTimer)\n followUpReportTimer = null\n }\n }\n\n const scheduleReport = (primaryDelay = 0, followUpDelay?: number) => {\n if (!resolvedConfig.scanEndpoint && !resolvedConfig.reportEndpoint) {\n return\n }\n\n clearReportTimers()\n\n reportTimer = window.setTimeout(() => {\n reportTimer = null\n void reportMCookieSurface(resolvedConfig)\n }, primaryDelay)\n\n if (typeof followUpDelay === 'number') {\n followUpReportTimer = window.setTimeout(() => {\n followUpReportTimer = null\n void reportMCookieSurface(resolvedConfig)\n }, followUpDelay)\n }\n }\n\n const sync = (nextState?: MCookieConsentState | null) => {\n state = nextState === undefined ? getConsentState(resolvedConfig) : nextState\n syncDocument(state, resolvedConfig)\n }\n\n sync(state)\n\n const observer = new MutationObserver((records) => {\n for (const record of records) {\n for (const node of Array.from(record.addedNodes)) {\n if (!(node instanceof Element)) {\n continue\n }\n\n for (const element of collectCandidateNodes(node)) {\n syncNode(element, state, resolvedConfig)\n }\n }\n }\n })\n\n observer.observe(document.documentElement, {\n childList: true,\n subtree: true,\n })\n\n const handleConsentChange = (event: Event) => {\n const detail = (event as CustomEvent<{state: MCookieConsentState | null}>).detail\n sync(detail?.state ?? null)\n scheduleReport(300, 1500)\n }\n\n window.addEventListener(MCOOKIE_CONSENT_CHANGE_EVENT, handleConsentChange)\n\n const restoreDom = patchDomInsertion(() => state, resolvedConfig)\n\n const handleWindowLoad = () => {\n scheduleReport()\n }\n\n if (document.readyState === 'complete') {\n handleWindowLoad()\n } else {\n window.addEventListener('load', handleWindowLoad, {once: true})\n }\n\n const handle: MCookieBootstrapHandle = {\n config: resolvedConfig,\n destroy: () => {\n observer.disconnect()\n restoreDom()\n clearReportTimers()\n window.removeEventListener('load', handleWindowLoad)\n window.removeEventListener(MCOOKIE_CONSENT_CHANGE_EVENT, handleConsentChange)\n if (window.MineralCookieConsentBootstrap === handle) {\n delete window.MineralCookieConsentBootstrap\n }\n },\n getState: () => state,\n sync,\n }\n\n window.MineralCookieConsentBootstrap = handle\n return handle\n}\n\nexport function autoBootstrapMCookieConsent() {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n return null\n }\n\n return bootstrapMCookieConsent(readMCookieBootstrapConfig())\n}\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require(`./icons-Dv1T-cF4.cjs`),t=require(`./cn-CU5TNITO.cjs`),n=require(`./
|
|
2
|
-
//# sourceMappingURL=MDataTable-
|
|
1
|
+
const e=require(`./icons-Dv1T-cF4.cjs`),t=require(`./cn-CU5TNITO.cjs`),n=require(`./MCheckbox-Bea3orrs.cjs`),r=require(`./MInputSearch-C7betxTa.cjs`),i=require(`./MPagination-BWHAVgWN.cjs`);let a=require(`react`),o=require(`react/jsx-runtime`);function s(e,t,n){return typeof n==`function`?n(e,t):String(typeof n==`string`?e[n]:e.id??t)}function c({columns:c,data:l,rowKey:u,sortable:d=!1,filterable:f=!1,selectable:p=!1,pagination:m=!1,pageSize:h=10,striped:g=!1,compact:_=!1,stickyHeader:v=!1,sort:y,onSortChange:b,selectedKeys:x,onSelectionChange:S,emptyText:C=`No data`,filterPlaceholder:w=`Search...`,className:T,...E}){let[D,O]=(0,a.useState)(null),[k,A]=(0,a.useState)([]),[j,M]=(0,a.useState)(``),[N,P]=(0,a.useState)(0),F=y===void 0?D:y,I=x??k,L=S??A;function R(e){let t;t=F?.key===e?F.dir===`asc`?{key:e,dir:`desc`}:null:{key:e,dir:`asc`},b?b(t):O(t),P(0)}let z=(0,a.useMemo)(()=>{if(!f||!j.trim())return l;let e=j.toLowerCase();return l.filter(t=>c.some(n=>{if(n.filterable===!1)return!1;let r=t[n.key];return r!=null&&String(r).toLowerCase().includes(e)}))},[l,j,f,c]),B=(0,a.useMemo)(()=>{if(!F||!c.find(e=>e.key===F.key)?.sortable&&!d)return z;let e=F.dir===`asc`?1:-1;return[...z].sort((t,n)=>{let r=t[F.key],i=n[F.key];return r==null&&i==null?0:r==null?1:i==null?-1:typeof r==`number`&&typeof i==`number`?(r-i)*e:String(r).localeCompare(String(i))*e})},[z,F,c,d]),V=m?Math.max(1,Math.ceil(B.length/h)):1,H=m?B.slice(N*h,(N+1)*h):B,U=H.map((e,t)=>s(e,N*h+t,u)),W=U.length>0&&U.every(e=>I.includes(e));function G(){L(W?I.filter(e=>!U.includes(e)):[...new Set([...I,...U])])}function K(e){L(I.includes(e)?I.filter(t=>t!==e):[...I,e])}function q(e,t){t.target.closest(`button, a, [data-no-row-select]`)||K(e)}return(0,o.jsxs)(`div`,{className:t.t(`data-table`,T),...E,children:[f&&(0,o.jsx)(`div`,{className:`toolbar`,children:(0,o.jsx)(r.t,{className:`filter-search`,size:`sm`,fullWidth:!0,placeholder:w,value:j,onChange:e=>{M(e.target.value),P(0)},onClear:()=>{M(``),P(0)}})}),(0,o.jsx)(`div`,{className:`scroll`,children:(0,o.jsxs)(`table`,{className:t.t(`root`,g&&`striped`,_&&`compact`),children:[(0,o.jsx)(`thead`,{className:t.t(`head`,v&&`sticky`),children:(0,o.jsxs)(`tr`,{children:[p&&(0,o.jsx)(`th`,{className:`th check-col`,children:(0,o.jsx)(n.t,{checked:W,onChange:G,size:`sm`,clickEffect:`none`})}),c.map(n=>{let r=n.sortable??d,i=F?.key===n.key;return(0,o.jsx)(`th`,{className:t.t(`th`,r&&`sortable`,i&&`sorted-${F.dir}`),style:{width:n.width,textAlign:n.align},onClick:r?()=>R(n.key):void 0,children:(0,o.jsxs)(`span`,{className:`th-content`,children:[n.label,r&&(0,o.jsx)(`span`,{className:`sort-icon`,children:i?F.dir===`asc`?(0,o.jsx)(e.Oi,{"aria-hidden":`true`}):(0,o.jsx)(e.Di,{"aria-hidden":`true`}):(0,o.jsx)(e.Ei,{"aria-hidden":`true`})})]})},n.key)})]})}),(0,o.jsxs)(`tbody`,{children:[H.length===0&&(0,o.jsx)(`tr`,{children:(0,o.jsx)(`td`,{className:`empty`,colSpan:c.length+ +!!p,children:C})}),H.map((e,r)=>{let i=s(e,N*h+r,u),a=I.includes(i);return(0,o.jsxs)(`tr`,{className:t.t(`row`,a&&`selected`,p&&`selectable`),onClick:p?e=>q(i,e):void 0,children:[p&&(0,o.jsx)(`td`,{className:`td check-col`,children:(0,o.jsx)(n.t,{checked:a,onChange:()=>{},size:`sm`,clickEffect:`none`})}),c.map(t=>(0,o.jsx)(`td`,{className:`td`,style:{textAlign:t.align},children:t.render?t.render(e[t.key],e,N*h+r):e[t.key]},t.key))]},i)})]})]})}),m&&V>1&&(0,o.jsx)(i.t,{total:B.length,page:N+1,pageSize:h,onChange:e=>P(e-1)})]})}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return c}});
|
|
2
|
+
//# sourceMappingURL=MDataTable-BI7wFZYN.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MDataTable-BZs6Cn9e.cjs","names":[],"sources":["../src/components/data/MDataTable/MDataTable.tsx"],"sourcesContent":["import {useMemo, useState} from 'react'\nimport type * as React from 'react'\nimport type {MDataTableProps, MDataTableSort} from './MDataTable.types'\nimport {MCheckbox} from '../../controls'\nimport {MInputSearch} from '../../inputs'\nimport {MPagination} from '../../layout'\nimport {MArrowDownIcon, MArrowUpDownIcon, MArrowUpIcon} from '../../../icons'\nimport {cn} from '../../../utils/cn'\nimport './MDataTable.css'\n\nfunction getRowKey<T>(row: T, index: number, rowKey?: string | ((row: T, index: number) => string)): string {\n if (typeof rowKey === 'function') return rowKey(row, index)\n if (typeof rowKey === 'string') return String((row as any)[rowKey])\n return String((row as any).id ?? index)\n}\n\nexport function MDataTable<T = any>({\n columns,\n data,\n rowKey,\n sortable = false,\n filterable = false,\n selectable = false,\n pagination = false,\n pageSize = 10,\n striped = false,\n compact = false,\n stickyHeader = false,\n sort: controlledSort,\n onSortChange,\n selectedKeys: controlledSelected,\n onSelectionChange,\n emptyText = 'No data',\n filterPlaceholder = 'Search...',\n className,\n ...rest\n}: MDataTableProps<T>) {\n const [internalSort, setInternalSort] = useState<MDataTableSort | null>(null)\n const [internalSelected, setInternalSelected] = useState<string[]>([])\n const [filter, setFilter] = useState('')\n const [page, setPage] = useState(0)\n\n const activeSort = controlledSort !== undefined ? controlledSort : internalSort\n const selected = controlledSelected ?? internalSelected\n const setSelected = onSelectionChange ?? setInternalSelected\n\n function handleSort(key: string) {\n let next: MDataTableSort | null\n\n if (activeSort?.key === key) {\n next = activeSort.dir === 'asc' ? {key, dir: 'desc'} : null\n } else {\n next = {key, dir: 'asc'}\n }\n\n if (onSortChange) onSortChange(next)\n else setInternalSort(next)\n\n setPage(0)\n }\n\n const filtered = useMemo(() => {\n if (!filterable || !filter.trim()) return data\n\n const query = filter.toLowerCase()\n\n return data.filter((row) =>\n columns.some((col) => {\n if (col.filterable === false) return false\n\n const value = (row as any)[col.key]\n return value != null && String(value).toLowerCase().includes(query)\n })\n )\n }, [data, filter, filterable, columns])\n\n const sorted = useMemo(() => {\n if (!activeSort) return filtered\n\n const col = columns.find((item) => item.key === activeSort.key)\n if (!col?.sortable && !sortable) return filtered\n\n const dir = activeSort.dir === 'asc' ? 1 : -1\n\n return [...filtered].sort((a, b) => {\n const va = (a as any)[activeSort.key]\n const vb = (b as any)[activeSort.key]\n\n if (va == null && vb == null) return 0\n if (va == null) return 1\n if (vb == null) return -1\n if (typeof va === 'number' && typeof vb === 'number') return (va - vb) * dir\n\n return String(va).localeCompare(String(vb)) * dir\n })\n }, [filtered, activeSort, columns, sortable])\n\n const totalPages = pagination ? Math.max(1, Math.ceil(sorted.length / pageSize)) : 1\n const pageData = pagination ? sorted.slice(page * pageSize, (page + 1) * pageSize) : sorted\n\n const allKeys = pageData.map((row, index) => getRowKey(row, page * pageSize + index, rowKey))\n const allSelected = allKeys.length > 0 && allKeys.every((key) => selected.includes(key))\n\n function toggleAll() {\n if (allSelected) {\n setSelected(selected.filter((key) => !allKeys.includes(key)))\n } else {\n setSelected([...new Set([...selected, ...allKeys])])\n }\n }\n\n function toggleRow(key: string) {\n setSelected(selected.includes(key) ? selected.filter((item) => item !== key) : [...selected, key])\n }\n\n function handleRowClick(key: string, event: React.MouseEvent) {\n const target = event.target as HTMLElement\n if (target.closest('button, a, [data-no-row-select]')) return\n toggleRow(key)\n }\n\n return (\n <div className={cn('data-table', className)} {...rest}>\n {filterable && (\n <div className=\"toolbar\">\n <MInputSearch\n className=\"filter-search\"\n size=\"sm\"\n fullWidth\n placeholder={filterPlaceholder}\n value={filter}\n onChange={(event) => {\n setFilter(event.target.value)\n setPage(0)\n }}\n onClear={() => {\n setFilter('')\n setPage(0)\n }}\n />\n </div>\n )}\n <div className=\"scroll\">\n <table className={cn('root', striped && 'striped', compact && 'compact')}>\n <thead className={cn('head', stickyHeader && 'sticky')}>\n <tr>\n {selectable && (\n <th className=\"th check-col\">\n <MCheckbox\n checked={allSelected}\n onChange={toggleAll}\n size=\"sm\"\n clickEffect=\"none\"\n />\n </th>\n )}\n {columns.map((col) => {\n const isSortable = col.sortable ?? sortable\n const isSorted = activeSort?.key === col.key\n\n return (\n <th\n key={col.key}\n className={cn(\n 'th',\n isSortable && 'sortable',\n isSorted && `sorted-${activeSort!.dir}`\n )}\n style={{\n width: col.width,\n textAlign: col.align,\n }}\n onClick={isSortable ? () => handleSort(col.key) : undefined}\n >\n <span className=\"th-content\">\n {col.label}\n {isSortable && (\n <span className=\"sort-icon\">\n {isSorted ? (\n activeSort!.dir === 'asc' ? (\n <MArrowUpIcon aria-hidden=\"true\" />\n ) : (\n <MArrowDownIcon aria-hidden=\"true\" />\n )\n ) : (\n <MArrowUpDownIcon aria-hidden=\"true\" />\n )}\n </span>\n )}\n </span>\n </th>\n )\n })}\n </tr>\n </thead>\n <tbody>\n {pageData.length === 0 && (\n <tr>\n <td className=\"empty\" colSpan={columns.length + (selectable ? 1 : 0)}>\n {emptyText}\n </td>\n </tr>\n )}\n {pageData.map((row, index) => {\n const key = getRowKey(row, page * pageSize + index, rowKey)\n const isSelected = selected.includes(key)\n\n return (\n <tr\n key={key}\n className={cn('row', isSelected && 'selected', selectable && 'selectable')}\n onClick={selectable ? (event) => handleRowClick(key, event) : undefined}\n >\n {selectable && (\n <td className=\"td check-col\">\n <MCheckbox\n checked={isSelected}\n onChange={() => {}}\n size=\"sm\"\n clickEffect=\"none\"\n />\n </td>\n )}\n {columns.map((col) => (\n <td key={col.key} className=\"td\" style={{textAlign: col.align}}>\n {col.render\n ? col.render((row as any)[col.key], row, page * pageSize + index)\n : (row as any)[col.key]}\n </td>\n ))}\n </tr>\n )\n })}\n </tbody>\n </table>\n </div>\n {pagination && totalPages > 1 && (\n <MPagination\n total={sorted.length}\n page={page + 1}\n pageSize={pageSize}\n onChange={(nextPage) => setPage(nextPage - 1)}\n />\n )}\n </div>\n )\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MDataTable-BI7wFZYN.cjs","names":[],"sources":["../src/components/data/MDataTable/MDataTable.tsx"],"sourcesContent":["import {useMemo, useState} from 'react'\nimport type * as React from 'react'\nimport type {MDataTableProps, MDataTableSort} from './MDataTable.types'\nimport {MCheckbox} from '../../controls'\nimport {MInputSearch} from '../../inputs'\nimport {MPagination} from '../../layout'\nimport {MArrowDownIcon, MArrowUpDownIcon, MArrowUpIcon} from '../../../icons'\nimport {cn} from '../../../utils/cn'\nimport './MDataTable.css'\n\nfunction getRowKey<T>(row: T, index: number, rowKey?: string | ((row: T, index: number) => string)): string {\n if (typeof rowKey === 'function') return rowKey(row, index)\n if (typeof rowKey === 'string') return String((row as any)[rowKey])\n return String((row as any).id ?? index)\n}\n\nexport function MDataTable<T = any>({\n columns,\n data,\n rowKey,\n sortable = false,\n filterable = false,\n selectable = false,\n pagination = false,\n pageSize = 10,\n striped = false,\n compact = false,\n stickyHeader = false,\n sort: controlledSort,\n onSortChange,\n selectedKeys: controlledSelected,\n onSelectionChange,\n emptyText = 'No data',\n filterPlaceholder = 'Search...',\n className,\n ...rest\n}: MDataTableProps<T>) {\n const [internalSort, setInternalSort] = useState<MDataTableSort | null>(null)\n const [internalSelected, setInternalSelected] = useState<string[]>([])\n const [filter, setFilter] = useState('')\n const [page, setPage] = useState(0)\n\n const activeSort = controlledSort !== undefined ? controlledSort : internalSort\n const selected = controlledSelected ?? internalSelected\n const setSelected = onSelectionChange ?? setInternalSelected\n\n function handleSort(key: string) {\n let next: MDataTableSort | null\n\n if (activeSort?.key === key) {\n next = activeSort.dir === 'asc' ? {key, dir: 'desc'} : null\n } else {\n next = {key, dir: 'asc'}\n }\n\n if (onSortChange) onSortChange(next)\n else setInternalSort(next)\n\n setPage(0)\n }\n\n const filtered = useMemo(() => {\n if (!filterable || !filter.trim()) return data\n\n const query = filter.toLowerCase()\n\n return data.filter((row) =>\n columns.some((col) => {\n if (col.filterable === false) return false\n\n const value = (row as any)[col.key]\n return value != null && String(value).toLowerCase().includes(query)\n })\n )\n }, [data, filter, filterable, columns])\n\n const sorted = useMemo(() => {\n if (!activeSort) return filtered\n\n const col = columns.find((item) => item.key === activeSort.key)\n if (!col?.sortable && !sortable) return filtered\n\n const dir = activeSort.dir === 'asc' ? 1 : -1\n\n return [...filtered].sort((a, b) => {\n const va = (a as any)[activeSort.key]\n const vb = (b as any)[activeSort.key]\n\n if (va == null && vb == null) return 0\n if (va == null) return 1\n if (vb == null) return -1\n if (typeof va === 'number' && typeof vb === 'number') return (va - vb) * dir\n\n return String(va).localeCompare(String(vb)) * dir\n })\n }, [filtered, activeSort, columns, sortable])\n\n const totalPages = pagination ? Math.max(1, Math.ceil(sorted.length / pageSize)) : 1\n const pageData = pagination ? sorted.slice(page * pageSize, (page + 1) * pageSize) : sorted\n\n const allKeys = pageData.map((row, index) => getRowKey(row, page * pageSize + index, rowKey))\n const allSelected = allKeys.length > 0 && allKeys.every((key) => selected.includes(key))\n\n function toggleAll() {\n if (allSelected) {\n setSelected(selected.filter((key) => !allKeys.includes(key)))\n } else {\n setSelected([...new Set([...selected, ...allKeys])])\n }\n }\n\n function toggleRow(key: string) {\n setSelected(selected.includes(key) ? selected.filter((item) => item !== key) : [...selected, key])\n }\n\n function handleRowClick(key: string, event: React.MouseEvent) {\n const target = event.target as HTMLElement\n if (target.closest('button, a, [data-no-row-select]')) return\n toggleRow(key)\n }\n\n return (\n <div className={cn('data-table', className)} {...rest}>\n {filterable && (\n <div className=\"toolbar\">\n <MInputSearch\n className=\"filter-search\"\n size=\"sm\"\n fullWidth\n placeholder={filterPlaceholder}\n value={filter}\n onChange={(event) => {\n setFilter(event.target.value)\n setPage(0)\n }}\n onClear={() => {\n setFilter('')\n setPage(0)\n }}\n />\n </div>\n )}\n <div className=\"scroll\">\n <table className={cn('root', striped && 'striped', compact && 'compact')}>\n <thead className={cn('head', stickyHeader && 'sticky')}>\n <tr>\n {selectable && (\n <th className=\"th check-col\">\n <MCheckbox\n checked={allSelected}\n onChange={toggleAll}\n size=\"sm\"\n clickEffect=\"none\"\n />\n </th>\n )}\n {columns.map((col) => {\n const isSortable = col.sortable ?? sortable\n const isSorted = activeSort?.key === col.key\n\n return (\n <th\n key={col.key}\n className={cn(\n 'th',\n isSortable && 'sortable',\n isSorted && `sorted-${activeSort!.dir}`\n )}\n style={{\n width: col.width,\n textAlign: col.align,\n }}\n onClick={isSortable ? () => handleSort(col.key) : undefined}\n >\n <span className=\"th-content\">\n {col.label}\n {isSortable && (\n <span className=\"sort-icon\">\n {isSorted ? (\n activeSort!.dir === 'asc' ? (\n <MArrowUpIcon aria-hidden=\"true\" />\n ) : (\n <MArrowDownIcon aria-hidden=\"true\" />\n )\n ) : (\n <MArrowUpDownIcon aria-hidden=\"true\" />\n )}\n </span>\n )}\n </span>\n </th>\n )\n })}\n </tr>\n </thead>\n <tbody>\n {pageData.length === 0 && (\n <tr>\n <td className=\"empty\" colSpan={columns.length + (selectable ? 1 : 0)}>\n {emptyText}\n </td>\n </tr>\n )}\n {pageData.map((row, index) => {\n const key = getRowKey(row, page * pageSize + index, rowKey)\n const isSelected = selected.includes(key)\n\n return (\n <tr\n key={key}\n className={cn('row', isSelected && 'selected', selectable && 'selectable')}\n onClick={selectable ? (event) => handleRowClick(key, event) : undefined}\n >\n {selectable && (\n <td className=\"td check-col\">\n <MCheckbox\n checked={isSelected}\n onChange={() => {}}\n size=\"sm\"\n clickEffect=\"none\"\n />\n </td>\n )}\n {columns.map((col) => (\n <td key={col.key} className=\"td\" style={{textAlign: col.align}}>\n {col.render\n ? col.render((row as any)[col.key], row, page * pageSize + index)\n : (row as any)[col.key]}\n </td>\n ))}\n </tr>\n )\n })}\n </tbody>\n </table>\n </div>\n {pagination && totalPages > 1 && (\n <MPagination\n total={sorted.length}\n page={page + 1}\n pageSize={pageSize}\n onChange={(nextPage) => setPage(nextPage - 1)}\n />\n )}\n </div>\n )\n}\n"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Di as e, Ei as t, Oi as n } from "./icons-D5DK-J2C.js";
|
|
2
2
|
import { t as r } from "./cn-YER3QsV1.js";
|
|
3
|
-
import { t as i } from "./
|
|
4
|
-
import { t as a } from "./
|
|
5
|
-
import { t as o } from "./MPagination-
|
|
3
|
+
import { t as i } from "./MCheckbox-B7SpcD4H.js";
|
|
4
|
+
import { t as a } from "./MInputSearch-CH5ZcjLq.js";
|
|
5
|
+
import { t as o } from "./MPagination-B7aho7rQ.js";
|
|
6
6
|
import { useMemo as s, useState as c } from "react";
|
|
7
7
|
import { jsx as l, jsxs as u } from "react/jsx-runtime";
|
|
8
8
|
//#region src/components/data/MDataTable/MDataTable.tsx
|
|
@@ -62,7 +62,7 @@ function f({ columns: f, data: p, rowKey: m, sortable: h = !1, filterable: g = !
|
|
|
62
62
|
children: [
|
|
63
63
|
g && /* @__PURE__ */ l("div", {
|
|
64
64
|
className: "toolbar",
|
|
65
|
-
children: /* @__PURE__ */ l(
|
|
65
|
+
children: /* @__PURE__ */ l(a, {
|
|
66
66
|
className: "filter-search",
|
|
67
67
|
size: "sm",
|
|
68
68
|
fullWidth: !0,
|
|
@@ -84,7 +84,7 @@ function f({ columns: f, data: p, rowKey: m, sortable: h = !1, filterable: g = !
|
|
|
84
84
|
className: r("head", S && "sticky"),
|
|
85
85
|
children: /* @__PURE__ */ u("tr", { children: [_ && /* @__PURE__ */ l("th", {
|
|
86
86
|
className: "th check-col",
|
|
87
|
-
children: /* @__PURE__ */ l(
|
|
87
|
+
children: /* @__PURE__ */ l(i, {
|
|
88
88
|
checked: J,
|
|
89
89
|
onChange: Y,
|
|
90
90
|
size: "sm",
|
|
@@ -113,14 +113,14 @@ function f({ columns: f, data: p, rowKey: m, sortable: h = !1, filterable: g = !
|
|
|
113
113
|
colSpan: f.length + +!!_,
|
|
114
114
|
children: D
|
|
115
115
|
}) }), K.map((e, t) => {
|
|
116
|
-
let n = d(e, L * y + t, m),
|
|
116
|
+
let n = d(e, L * y + t, m), a = B.includes(n);
|
|
117
117
|
return /* @__PURE__ */ u("tr", {
|
|
118
|
-
className: r("row",
|
|
118
|
+
className: r("row", a && "selected", _ && "selectable"),
|
|
119
119
|
onClick: _ ? (e) => Z(n, e) : void 0,
|
|
120
120
|
children: [_ && /* @__PURE__ */ l("td", {
|
|
121
121
|
className: "td check-col",
|
|
122
|
-
children: /* @__PURE__ */ l(
|
|
123
|
-
checked:
|
|
122
|
+
children: /* @__PURE__ */ l(i, {
|
|
123
|
+
checked: a,
|
|
124
124
|
onChange: () => {},
|
|
125
125
|
size: "sm",
|
|
126
126
|
clickEffect: "none"
|
|
@@ -146,4 +146,4 @@ function f({ columns: f, data: p, rowKey: m, sortable: h = !1, filterable: g = !
|
|
|
146
146
|
//#endregion
|
|
147
147
|
export { f as t };
|
|
148
148
|
|
|
149
|
-
//# sourceMappingURL=MDataTable-
|
|
149
|
+
//# sourceMappingURL=MDataTable-Cqwkiq7A.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MDataTable-D-ASD4g3.js","names":[],"sources":["../src/components/data/MDataTable/MDataTable.tsx"],"sourcesContent":["import {useMemo, useState} from 'react'\nimport type * as React from 'react'\nimport type {MDataTableProps, MDataTableSort} from './MDataTable.types'\nimport {MCheckbox} from '../../controls'\nimport {MInputSearch} from '../../inputs'\nimport {MPagination} from '../../layout'\nimport {MArrowDownIcon, MArrowUpDownIcon, MArrowUpIcon} from '../../../icons'\nimport {cn} from '../../../utils/cn'\nimport './MDataTable.css'\n\nfunction getRowKey<T>(row: T, index: number, rowKey?: string | ((row: T, index: number) => string)): string {\n if (typeof rowKey === 'function') return rowKey(row, index)\n if (typeof rowKey === 'string') return String((row as any)[rowKey])\n return String((row as any).id ?? index)\n}\n\nexport function MDataTable<T = any>({\n columns,\n data,\n rowKey,\n sortable = false,\n filterable = false,\n selectable = false,\n pagination = false,\n pageSize = 10,\n striped = false,\n compact = false,\n stickyHeader = false,\n sort: controlledSort,\n onSortChange,\n selectedKeys: controlledSelected,\n onSelectionChange,\n emptyText = 'No data',\n filterPlaceholder = 'Search...',\n className,\n ...rest\n}: MDataTableProps<T>) {\n const [internalSort, setInternalSort] = useState<MDataTableSort | null>(null)\n const [internalSelected, setInternalSelected] = useState<string[]>([])\n const [filter, setFilter] = useState('')\n const [page, setPage] = useState(0)\n\n const activeSort = controlledSort !== undefined ? controlledSort : internalSort\n const selected = controlledSelected ?? internalSelected\n const setSelected = onSelectionChange ?? setInternalSelected\n\n function handleSort(key: string) {\n let next: MDataTableSort | null\n\n if (activeSort?.key === key) {\n next = activeSort.dir === 'asc' ? {key, dir: 'desc'} : null\n } else {\n next = {key, dir: 'asc'}\n }\n\n if (onSortChange) onSortChange(next)\n else setInternalSort(next)\n\n setPage(0)\n }\n\n const filtered = useMemo(() => {\n if (!filterable || !filter.trim()) return data\n\n const query = filter.toLowerCase()\n\n return data.filter((row) =>\n columns.some((col) => {\n if (col.filterable === false) return false\n\n const value = (row as any)[col.key]\n return value != null && String(value).toLowerCase().includes(query)\n })\n )\n }, [data, filter, filterable, columns])\n\n const sorted = useMemo(() => {\n if (!activeSort) return filtered\n\n const col = columns.find((item) => item.key === activeSort.key)\n if (!col?.sortable && !sortable) return filtered\n\n const dir = activeSort.dir === 'asc' ? 1 : -1\n\n return [...filtered].sort((a, b) => {\n const va = (a as any)[activeSort.key]\n const vb = (b as any)[activeSort.key]\n\n if (va == null && vb == null) return 0\n if (va == null) return 1\n if (vb == null) return -1\n if (typeof va === 'number' && typeof vb === 'number') return (va - vb) * dir\n\n return String(va).localeCompare(String(vb)) * dir\n })\n }, [filtered, activeSort, columns, sortable])\n\n const totalPages = pagination ? Math.max(1, Math.ceil(sorted.length / pageSize)) : 1\n const pageData = pagination ? sorted.slice(page * pageSize, (page + 1) * pageSize) : sorted\n\n const allKeys = pageData.map((row, index) => getRowKey(row, page * pageSize + index, rowKey))\n const allSelected = allKeys.length > 0 && allKeys.every((key) => selected.includes(key))\n\n function toggleAll() {\n if (allSelected) {\n setSelected(selected.filter((key) => !allKeys.includes(key)))\n } else {\n setSelected([...new Set([...selected, ...allKeys])])\n }\n }\n\n function toggleRow(key: string) {\n setSelected(selected.includes(key) ? selected.filter((item) => item !== key) : [...selected, key])\n }\n\n function handleRowClick(key: string, event: React.MouseEvent) {\n const target = event.target as HTMLElement\n if (target.closest('button, a, [data-no-row-select]')) return\n toggleRow(key)\n }\n\n return (\n <div className={cn('data-table', className)} {...rest}>\n {filterable && (\n <div className=\"toolbar\">\n <MInputSearch\n className=\"filter-search\"\n size=\"sm\"\n fullWidth\n placeholder={filterPlaceholder}\n value={filter}\n onChange={(event) => {\n setFilter(event.target.value)\n setPage(0)\n }}\n onClear={() => {\n setFilter('')\n setPage(0)\n }}\n />\n </div>\n )}\n <div className=\"scroll\">\n <table className={cn('root', striped && 'striped', compact && 'compact')}>\n <thead className={cn('head', stickyHeader && 'sticky')}>\n <tr>\n {selectable && (\n <th className=\"th check-col\">\n <MCheckbox\n checked={allSelected}\n onChange={toggleAll}\n size=\"sm\"\n clickEffect=\"none\"\n />\n </th>\n )}\n {columns.map((col) => {\n const isSortable = col.sortable ?? sortable\n const isSorted = activeSort?.key === col.key\n\n return (\n <th\n key={col.key}\n className={cn(\n 'th',\n isSortable && 'sortable',\n isSorted && `sorted-${activeSort!.dir}`\n )}\n style={{\n width: col.width,\n textAlign: col.align,\n }}\n onClick={isSortable ? () => handleSort(col.key) : undefined}\n >\n <span className=\"th-content\">\n {col.label}\n {isSortable && (\n <span className=\"sort-icon\">\n {isSorted ? (\n activeSort!.dir === 'asc' ? (\n <MArrowUpIcon aria-hidden=\"true\" />\n ) : (\n <MArrowDownIcon aria-hidden=\"true\" />\n )\n ) : (\n <MArrowUpDownIcon aria-hidden=\"true\" />\n )}\n </span>\n )}\n </span>\n </th>\n )\n })}\n </tr>\n </thead>\n <tbody>\n {pageData.length === 0 && (\n <tr>\n <td className=\"empty\" colSpan={columns.length + (selectable ? 1 : 0)}>\n {emptyText}\n </td>\n </tr>\n )}\n {pageData.map((row, index) => {\n const key = getRowKey(row, page * pageSize + index, rowKey)\n const isSelected = selected.includes(key)\n\n return (\n <tr\n key={key}\n className={cn('row', isSelected && 'selected', selectable && 'selectable')}\n onClick={selectable ? (event) => handleRowClick(key, event) : undefined}\n >\n {selectable && (\n <td className=\"td check-col\">\n <MCheckbox\n checked={isSelected}\n onChange={() => {}}\n size=\"sm\"\n clickEffect=\"none\"\n />\n </td>\n )}\n {columns.map((col) => (\n <td key={col.key} className=\"td\" style={{textAlign: col.align}}>\n {col.render\n ? col.render((row as any)[col.key], row, page * pageSize + index)\n : (row as any)[col.key]}\n </td>\n ))}\n </tr>\n )\n })}\n </tbody>\n </table>\n </div>\n {pagination && totalPages > 1 && (\n <MPagination\n total={sorted.length}\n page={page + 1}\n pageSize={pageSize}\n onChange={(nextPage) => setPage(nextPage - 1)}\n />\n )}\n </div>\n )\n}\n"],"mappings":";;;;;;;;AAUA,SAAS,EAAa,GAAQ,GAAe,GAA+D;AAGxG,QAFI,OAAO,KAAW,aAAmB,EAAO,GAAK,EAAM,GACpB,OAAnC,OAAO,KAAW,WAAyB,EAAY,KAC5C,EAAY,MAAM,EADkC;;AAIvE,SAAgB,EAAoB,EAChC,YACA,SACA,WACA,cAAW,IACX,gBAAa,IACb,gBAAa,IACb,gBAAa,IACb,cAAW,IACX,aAAU,IACV,aAAU,IACV,kBAAe,IACf,MAAM,GACN,iBACA,cAAc,GACd,sBACA,eAAY,WACZ,uBAAoB,aACpB,cACA,GAAG,KACgB;CACnB,IAAM,CAAC,GAAc,KAAmB,EAAgC,KAAK,EACvE,CAAC,GAAkB,KAAuB,EAAmB,EAAE,CAAC,EAChE,CAAC,GAAQ,KAAa,EAAS,GAAG,EAClC,CAAC,GAAM,KAAW,EAAS,EAAE,EAE7B,IAAa,MAAmB,KAAA,IAA6B,IAAjB,GAC5C,IAAW,KAAsB,GACjC,IAAc,KAAqB;CAEzC,SAAS,EAAW,GAAa;EAC7B,IAAI;AAWJ,EATA,AAGI,IAHA,GAAY,QAAQ,IACb,EAAW,QAAQ,QAAQ;GAAC;GAAK,KAAK;GAAO,GAAG,OAEhD;GAAC;GAAK,KAAK;GAAM,EAGxB,IAAc,EAAa,EAAK,GAC/B,EAAgB,EAAK,EAE1B,EAAQ,EAAE;;CAGd,IAAM,IAAW,QAAc;AAC3B,MAAI,CAAC,KAAc,CAAC,EAAO,MAAM,CAAE,QAAO;EAE1C,IAAM,IAAQ,EAAO,aAAa;AAElC,SAAO,EAAK,QAAQ,MAChB,EAAQ,MAAM,MAAQ;AAClB,OAAI,EAAI,eAAe,GAAO,QAAO;GAErC,IAAM,IAAS,EAAY,EAAI;AAC/B,UAAO,KAAS,QAAQ,OAAO,EAAM,CAAC,aAAa,CAAC,SAAS,EAAM;IACrE,CACL;IACF;EAAC;EAAM;EAAQ;EAAY;EAAQ,CAAC,EAEjC,IAAS,QAAc;AAIzB,MAHI,CAAC,KAGD,CADQ,EAAQ,MAAM,MAAS,EAAK,QAAQ,EAAW,IAAI,EACrD,YAAY,CAAC,EAAU,QAAO;EAExC,IAAM,IAAM,EAAW,QAAQ,QAAQ,IAAI;AAE3C,SAAO,CAAC,GAAG,EAAS,CAAC,MAAM,GAAG,MAAM;GAChC,IAAM,IAAM,EAAU,EAAW,MAC3B,IAAM,EAAU,EAAW;AAOjC,UALI,KAAM,QAAQ,KAAM,OAAa,IACjC,KAAM,OAAa,IACnB,KAAM,OAAa,KACnB,OAAO,KAAO,YAAY,OAAO,KAAO,YAAkB,IAAK,KAAM,IAElE,OAAO,EAAG,CAAC,cAAc,OAAO,EAAG,CAAC,GAAG;IAChD;IACH;EAAC;EAAU;EAAY;EAAS;EAAS,CAAC,EAEvC,IAAa,IAAa,KAAK,IAAI,GAAG,KAAK,KAAK,EAAO,SAAS,EAAS,CAAC,GAAG,GAC7E,IAAW,IAAa,EAAO,MAAM,IAAO,IAAW,IAAO,KAAK,EAAS,GAAG,GAE/E,IAAU,EAAS,KAAK,GAAK,MAAU,EAAU,GAAK,IAAO,IAAW,GAAO,EAAO,CAAC,EACvF,IAAc,EAAQ,SAAS,KAAK,EAAQ,OAAO,MAAQ,EAAS,SAAS,EAAI,CAAC;CAExF,SAAS,IAAY;AACjB,EACI,EADA,IACY,EAAS,QAAQ,MAAQ,CAAC,EAAQ,SAAS,EAAI,CAAC,GAEhD,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,GAAU,GAAG,EAAQ,CAAC,CAAC,CAAC;;CAI5D,SAAS,EAAU,GAAa;AAC5B,IAAY,EAAS,SAAS,EAAI,GAAG,EAAS,QAAQ,MAAS,MAAS,EAAI,GAAG,CAAC,GAAG,GAAU,EAAI,CAAC;;CAGtG,SAAS,EAAe,GAAa,GAAyB;AAC3C,IAAM,OACV,QAAQ,kCAAkC,IACrD,EAAU,EAAI;;AAGlB,QACI,kBAAC,OAAD;EAAK,WAAW,EAAG,cAAc,EAAU;EAAE,GAAI;YAAjD;GACK,KACG,kBAAC,OAAD;IAAK,WAAU;cACX,kBAAC,GAAD;KACI,WAAU;KACV,MAAK;KACL,WAAA;KACA,aAAa;KACb,OAAO;KACP,WAAW,MAAU;AAEjB,MADA,EAAU,EAAM,OAAO,MAAM,EAC7B,EAAQ,EAAE;;KAEd,eAAe;AAEX,MADA,EAAU,GAAG,EACb,EAAQ,EAAE;;KAEhB,CAAA;IACA,CAAA;GAEV,kBAAC,OAAD;IAAK,WAAU;cACX,kBAAC,SAAD;KAAO,WAAW,EAAG,QAAQ,KAAW,WAAW,KAAW,UAAU;eAAxE,CACI,kBAAC,SAAD;MAAO,WAAW,EAAG,QAAQ,KAAgB,SAAS;gBAClD,kBAAC,MAAD,EAAA,UAAA,CACK,KACG,kBAAC,MAAD;OAAI,WAAU;iBACV,kBAAC,GAAD;QACI,SAAS;QACT,UAAU;QACV,MAAK;QACL,aAAY;QACd,CAAA;OACD,CAAA,EAER,EAAQ,KAAK,MAAQ;OAClB,IAAM,IAAa,EAAI,YAAY,GAC7B,IAAW,GAAY,QAAQ,EAAI;AAEzC,cACI,kBAAC,MAAD;QAEI,WAAW,EACP,MACA,KAAc,YACd,KAAY,UAAU,EAAY,MACrC;QACD,OAAO;SACH,OAAO,EAAI;SACX,WAAW,EAAI;SAClB;QACD,SAAS,UAAmB,EAAW,EAAI,IAAI,GAAG,KAAA;kBAElD,kBAAC,QAAD;SAAM,WAAU;mBAAhB,CACK,EAAI,OACJ,KACG,kBAAC,QAAD;UAAM,WAAU;oBACX,IACG,EAAY,QAAQ,QAChB,kBAAC,GAAD,EAAc,eAAY,QAAS,CAAA,GAEnC,kBAAC,GAAD,EAAgB,eAAY,QAAS,CAAA,GAGzC,kBAAC,GAAD,EAAkB,eAAY,QAAS,CAAA;UAExC,CAAA,CAER;;QACN,EA5BI,EAAI,IA4BR;QAEX,CACD,EAAA,CAAA;MACD,CAAA,EACR,kBAAC,SAAD,EAAA,UAAA,CACK,EAAS,WAAW,KACjB,kBAAC,MAAD,EAAA,UACI,kBAAC,MAAD;MAAI,WAAU;MAAQ,SAAS,EAAQ,SAAU;gBAC5C;MACA,CAAA,EACJ,CAAA,EAER,EAAS,KAAK,GAAK,MAAU;MAC1B,IAAM,IAAM,EAAU,GAAK,IAAO,IAAW,GAAO,EAAO,EACrD,IAAa,EAAS,SAAS,EAAI;AAEzC,aACI,kBAAC,MAAD;OAEI,WAAW,EAAG,OAAO,KAAc,YAAY,KAAc,aAAa;OAC1E,SAAS,KAAc,MAAU,EAAe,GAAK,EAAM,GAAG,KAAA;iBAHlE,CAKK,KACG,kBAAC,MAAD;QAAI,WAAU;kBACV,kBAAC,GAAD;SACI,SAAS;SACT,gBAAgB;SAChB,MAAK;SACL,aAAY;SACd,CAAA;QACD,CAAA,EAER,EAAQ,KAAK,MACV,kBAAC,MAAD;QAAkB,WAAU;QAAK,OAAO,EAAC,WAAW,EAAI,OAAM;kBACzD,EAAI,SACC,EAAI,OAAQ,EAAY,EAAI,MAAM,GAAK,IAAO,IAAW,EAAM,GAC9D,EAAY,EAAI;QACtB,EAJI,EAAI,IAIR,CACP,CACD;SArBI,EAqBJ;OAEX,CACE,EAAA,CAAA,CACJ;;IACN,CAAA;GACL,KAAc,IAAa,KACxB,kBAAC,GAAD;IACI,OAAO,EAAO;IACd,MAAM,IAAO;IACH;IACV,WAAW,MAAa,EAAQ,IAAW,EAAE;IAC/C,CAAA;GAEJ"}
|
|
1
|
+
{"version":3,"file":"MDataTable-Cqwkiq7A.js","names":[],"sources":["../src/components/data/MDataTable/MDataTable.tsx"],"sourcesContent":["import {useMemo, useState} from 'react'\nimport type * as React from 'react'\nimport type {MDataTableProps, MDataTableSort} from './MDataTable.types'\nimport {MCheckbox} from '../../controls'\nimport {MInputSearch} from '../../inputs'\nimport {MPagination} from '../../layout'\nimport {MArrowDownIcon, MArrowUpDownIcon, MArrowUpIcon} from '../../../icons'\nimport {cn} from '../../../utils/cn'\nimport './MDataTable.css'\n\nfunction getRowKey<T>(row: T, index: number, rowKey?: string | ((row: T, index: number) => string)): string {\n if (typeof rowKey === 'function') return rowKey(row, index)\n if (typeof rowKey === 'string') return String((row as any)[rowKey])\n return String((row as any).id ?? index)\n}\n\nexport function MDataTable<T = any>({\n columns,\n data,\n rowKey,\n sortable = false,\n filterable = false,\n selectable = false,\n pagination = false,\n pageSize = 10,\n striped = false,\n compact = false,\n stickyHeader = false,\n sort: controlledSort,\n onSortChange,\n selectedKeys: controlledSelected,\n onSelectionChange,\n emptyText = 'No data',\n filterPlaceholder = 'Search...',\n className,\n ...rest\n}: MDataTableProps<T>) {\n const [internalSort, setInternalSort] = useState<MDataTableSort | null>(null)\n const [internalSelected, setInternalSelected] = useState<string[]>([])\n const [filter, setFilter] = useState('')\n const [page, setPage] = useState(0)\n\n const activeSort = controlledSort !== undefined ? controlledSort : internalSort\n const selected = controlledSelected ?? internalSelected\n const setSelected = onSelectionChange ?? setInternalSelected\n\n function handleSort(key: string) {\n let next: MDataTableSort | null\n\n if (activeSort?.key === key) {\n next = activeSort.dir === 'asc' ? {key, dir: 'desc'} : null\n } else {\n next = {key, dir: 'asc'}\n }\n\n if (onSortChange) onSortChange(next)\n else setInternalSort(next)\n\n setPage(0)\n }\n\n const filtered = useMemo(() => {\n if (!filterable || !filter.trim()) return data\n\n const query = filter.toLowerCase()\n\n return data.filter((row) =>\n columns.some((col) => {\n if (col.filterable === false) return false\n\n const value = (row as any)[col.key]\n return value != null && String(value).toLowerCase().includes(query)\n })\n )\n }, [data, filter, filterable, columns])\n\n const sorted = useMemo(() => {\n if (!activeSort) return filtered\n\n const col = columns.find((item) => item.key === activeSort.key)\n if (!col?.sortable && !sortable) return filtered\n\n const dir = activeSort.dir === 'asc' ? 1 : -1\n\n return [...filtered].sort((a, b) => {\n const va = (a as any)[activeSort.key]\n const vb = (b as any)[activeSort.key]\n\n if (va == null && vb == null) return 0\n if (va == null) return 1\n if (vb == null) return -1\n if (typeof va === 'number' && typeof vb === 'number') return (va - vb) * dir\n\n return String(va).localeCompare(String(vb)) * dir\n })\n }, [filtered, activeSort, columns, sortable])\n\n const totalPages = pagination ? Math.max(1, Math.ceil(sorted.length / pageSize)) : 1\n const pageData = pagination ? sorted.slice(page * pageSize, (page + 1) * pageSize) : sorted\n\n const allKeys = pageData.map((row, index) => getRowKey(row, page * pageSize + index, rowKey))\n const allSelected = allKeys.length > 0 && allKeys.every((key) => selected.includes(key))\n\n function toggleAll() {\n if (allSelected) {\n setSelected(selected.filter((key) => !allKeys.includes(key)))\n } else {\n setSelected([...new Set([...selected, ...allKeys])])\n }\n }\n\n function toggleRow(key: string) {\n setSelected(selected.includes(key) ? selected.filter((item) => item !== key) : [...selected, key])\n }\n\n function handleRowClick(key: string, event: React.MouseEvent) {\n const target = event.target as HTMLElement\n if (target.closest('button, a, [data-no-row-select]')) return\n toggleRow(key)\n }\n\n return (\n <div className={cn('data-table', className)} {...rest}>\n {filterable && (\n <div className=\"toolbar\">\n <MInputSearch\n className=\"filter-search\"\n size=\"sm\"\n fullWidth\n placeholder={filterPlaceholder}\n value={filter}\n onChange={(event) => {\n setFilter(event.target.value)\n setPage(0)\n }}\n onClear={() => {\n setFilter('')\n setPage(0)\n }}\n />\n </div>\n )}\n <div className=\"scroll\">\n <table className={cn('root', striped && 'striped', compact && 'compact')}>\n <thead className={cn('head', stickyHeader && 'sticky')}>\n <tr>\n {selectable && (\n <th className=\"th check-col\">\n <MCheckbox\n checked={allSelected}\n onChange={toggleAll}\n size=\"sm\"\n clickEffect=\"none\"\n />\n </th>\n )}\n {columns.map((col) => {\n const isSortable = col.sortable ?? sortable\n const isSorted = activeSort?.key === col.key\n\n return (\n <th\n key={col.key}\n className={cn(\n 'th',\n isSortable && 'sortable',\n isSorted && `sorted-${activeSort!.dir}`\n )}\n style={{\n width: col.width,\n textAlign: col.align,\n }}\n onClick={isSortable ? () => handleSort(col.key) : undefined}\n >\n <span className=\"th-content\">\n {col.label}\n {isSortable && (\n <span className=\"sort-icon\">\n {isSorted ? (\n activeSort!.dir === 'asc' ? (\n <MArrowUpIcon aria-hidden=\"true\" />\n ) : (\n <MArrowDownIcon aria-hidden=\"true\" />\n )\n ) : (\n <MArrowUpDownIcon aria-hidden=\"true\" />\n )}\n </span>\n )}\n </span>\n </th>\n )\n })}\n </tr>\n </thead>\n <tbody>\n {pageData.length === 0 && (\n <tr>\n <td className=\"empty\" colSpan={columns.length + (selectable ? 1 : 0)}>\n {emptyText}\n </td>\n </tr>\n )}\n {pageData.map((row, index) => {\n const key = getRowKey(row, page * pageSize + index, rowKey)\n const isSelected = selected.includes(key)\n\n return (\n <tr\n key={key}\n className={cn('row', isSelected && 'selected', selectable && 'selectable')}\n onClick={selectable ? (event) => handleRowClick(key, event) : undefined}\n >\n {selectable && (\n <td className=\"td check-col\">\n <MCheckbox\n checked={isSelected}\n onChange={() => {}}\n size=\"sm\"\n clickEffect=\"none\"\n />\n </td>\n )}\n {columns.map((col) => (\n <td key={col.key} className=\"td\" style={{textAlign: col.align}}>\n {col.render\n ? col.render((row as any)[col.key], row, page * pageSize + index)\n : (row as any)[col.key]}\n </td>\n ))}\n </tr>\n )\n })}\n </tbody>\n </table>\n </div>\n {pagination && totalPages > 1 && (\n <MPagination\n total={sorted.length}\n page={page + 1}\n pageSize={pageSize}\n onChange={(nextPage) => setPage(nextPage - 1)}\n />\n )}\n </div>\n )\n}\n"],"mappings":";;;;;;;;AAUA,SAAS,EAAa,GAAQ,GAAe,GAA+D;AAGxG,QAFI,OAAO,KAAW,aAAmB,EAAO,GAAK,EAAM,GACpB,OAAnC,OAAO,KAAW,WAAyB,EAAY,KAC5C,EAAY,MAAM,EADkC;;AAIvE,SAAgB,EAAoB,EAChC,YACA,SACA,WACA,cAAW,IACX,gBAAa,IACb,gBAAa,IACb,gBAAa,IACb,cAAW,IACX,aAAU,IACV,aAAU,IACV,kBAAe,IACf,MAAM,GACN,iBACA,cAAc,GACd,sBACA,eAAY,WACZ,uBAAoB,aACpB,cACA,GAAG,KACgB;CACnB,IAAM,CAAC,GAAc,KAAmB,EAAgC,KAAK,EACvE,CAAC,GAAkB,KAAuB,EAAmB,EAAE,CAAC,EAChE,CAAC,GAAQ,KAAa,EAAS,GAAG,EAClC,CAAC,GAAM,KAAW,EAAS,EAAE,EAE7B,IAAa,MAAmB,KAAA,IAA6B,IAAjB,GAC5C,IAAW,KAAsB,GACjC,IAAc,KAAqB;CAEzC,SAAS,EAAW,GAAa;EAC7B,IAAI;AAWJ,EATA,AAGI,IAHA,GAAY,QAAQ,IACb,EAAW,QAAQ,QAAQ;GAAC;GAAK,KAAK;GAAO,GAAG,OAEhD;GAAC;GAAK,KAAK;GAAM,EAGxB,IAAc,EAAa,EAAK,GAC/B,EAAgB,EAAK,EAE1B,EAAQ,EAAE;;CAGd,IAAM,IAAW,QAAc;AAC3B,MAAI,CAAC,KAAc,CAAC,EAAO,MAAM,CAAE,QAAO;EAE1C,IAAM,IAAQ,EAAO,aAAa;AAElC,SAAO,EAAK,QAAQ,MAChB,EAAQ,MAAM,MAAQ;AAClB,OAAI,EAAI,eAAe,GAAO,QAAO;GAErC,IAAM,IAAS,EAAY,EAAI;AAC/B,UAAO,KAAS,QAAQ,OAAO,EAAM,CAAC,aAAa,CAAC,SAAS,EAAM;IACrE,CACL;IACF;EAAC;EAAM;EAAQ;EAAY;EAAQ,CAAC,EAEjC,IAAS,QAAc;AAIzB,MAHI,CAAC,KAGD,CADQ,EAAQ,MAAM,MAAS,EAAK,QAAQ,EAAW,IAAI,EACrD,YAAY,CAAC,EAAU,QAAO;EAExC,IAAM,IAAM,EAAW,QAAQ,QAAQ,IAAI;AAE3C,SAAO,CAAC,GAAG,EAAS,CAAC,MAAM,GAAG,MAAM;GAChC,IAAM,IAAM,EAAU,EAAW,MAC3B,IAAM,EAAU,EAAW;AAOjC,UALI,KAAM,QAAQ,KAAM,OAAa,IACjC,KAAM,OAAa,IACnB,KAAM,OAAa,KACnB,OAAO,KAAO,YAAY,OAAO,KAAO,YAAkB,IAAK,KAAM,IAElE,OAAO,EAAG,CAAC,cAAc,OAAO,EAAG,CAAC,GAAG;IAChD;IACH;EAAC;EAAU;EAAY;EAAS;EAAS,CAAC,EAEvC,IAAa,IAAa,KAAK,IAAI,GAAG,KAAK,KAAK,EAAO,SAAS,EAAS,CAAC,GAAG,GAC7E,IAAW,IAAa,EAAO,MAAM,IAAO,IAAW,IAAO,KAAK,EAAS,GAAG,GAE/E,IAAU,EAAS,KAAK,GAAK,MAAU,EAAU,GAAK,IAAO,IAAW,GAAO,EAAO,CAAC,EACvF,IAAc,EAAQ,SAAS,KAAK,EAAQ,OAAO,MAAQ,EAAS,SAAS,EAAI,CAAC;CAExF,SAAS,IAAY;AACjB,EACI,EADA,IACY,EAAS,QAAQ,MAAQ,CAAC,EAAQ,SAAS,EAAI,CAAC,GAEhD,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,GAAU,GAAG,EAAQ,CAAC,CAAC,CAAC;;CAI5D,SAAS,EAAU,GAAa;AAC5B,IAAY,EAAS,SAAS,EAAI,GAAG,EAAS,QAAQ,MAAS,MAAS,EAAI,GAAG,CAAC,GAAG,GAAU,EAAI,CAAC;;CAGtG,SAAS,EAAe,GAAa,GAAyB;AAC3C,IAAM,OACV,QAAQ,kCAAkC,IACrD,EAAU,EAAI;;AAGlB,QACI,kBAAC,OAAD;EAAK,WAAW,EAAG,cAAc,EAAU;EAAE,GAAI;YAAjD;GACK,KACG,kBAAC,OAAD;IAAK,WAAU;cACX,kBAAC,GAAD;KACI,WAAU;KACV,MAAK;KACL,WAAA;KACA,aAAa;KACb,OAAO;KACP,WAAW,MAAU;AAEjB,MADA,EAAU,EAAM,OAAO,MAAM,EAC7B,EAAQ,EAAE;;KAEd,eAAe;AAEX,MADA,EAAU,GAAG,EACb,EAAQ,EAAE;;KAEhB,CAAA;IACA,CAAA;GAEV,kBAAC,OAAD;IAAK,WAAU;cACX,kBAAC,SAAD;KAAO,WAAW,EAAG,QAAQ,KAAW,WAAW,KAAW,UAAU;eAAxE,CACI,kBAAC,SAAD;MAAO,WAAW,EAAG,QAAQ,KAAgB,SAAS;gBAClD,kBAAC,MAAD,EAAA,UAAA,CACK,KACG,kBAAC,MAAD;OAAI,WAAU;iBACV,kBAAC,GAAD;QACI,SAAS;QACT,UAAU;QACV,MAAK;QACL,aAAY;QACd,CAAA;OACD,CAAA,EAER,EAAQ,KAAK,MAAQ;OAClB,IAAM,IAAa,EAAI,YAAY,GAC7B,IAAW,GAAY,QAAQ,EAAI;AAEzC,cACI,kBAAC,MAAD;QAEI,WAAW,EACP,MACA,KAAc,YACd,KAAY,UAAU,EAAY,MACrC;QACD,OAAO;SACH,OAAO,EAAI;SACX,WAAW,EAAI;SAClB;QACD,SAAS,UAAmB,EAAW,EAAI,IAAI,GAAG,KAAA;kBAElD,kBAAC,QAAD;SAAM,WAAU;mBAAhB,CACK,EAAI,OACJ,KACG,kBAAC,QAAD;UAAM,WAAU;oBACX,IACG,EAAY,QAAQ,QAChB,kBAAC,GAAD,EAAc,eAAY,QAAS,CAAA,GAEnC,kBAAC,GAAD,EAAgB,eAAY,QAAS,CAAA,GAGzC,kBAAC,GAAD,EAAkB,eAAY,QAAS,CAAA;UAExC,CAAA,CAER;;QACN,EA5BI,EAAI,IA4BR;QAEX,CACD,EAAA,CAAA;MACD,CAAA,EACR,kBAAC,SAAD,EAAA,UAAA,CACK,EAAS,WAAW,KACjB,kBAAC,MAAD,EAAA,UACI,kBAAC,MAAD;MAAI,WAAU;MAAQ,SAAS,EAAQ,SAAU;gBAC5C;MACA,CAAA,EACJ,CAAA,EAER,EAAS,KAAK,GAAK,MAAU;MAC1B,IAAM,IAAM,EAAU,GAAK,IAAO,IAAW,GAAO,EAAO,EACrD,IAAa,EAAS,SAAS,EAAI;AAEzC,aACI,kBAAC,MAAD;OAEI,WAAW,EAAG,OAAO,KAAc,YAAY,KAAc,aAAa;OAC1E,SAAS,KAAc,MAAU,EAAe,GAAK,EAAM,GAAG,KAAA;iBAHlE,CAKK,KACG,kBAAC,MAAD;QAAI,WAAU;kBACV,kBAAC,GAAD;SACI,SAAS;SACT,gBAAgB;SAChB,MAAK;SACL,aAAY;SACd,CAAA;QACD,CAAA,EAER,EAAQ,KAAK,MACV,kBAAC,MAAD;QAAkB,WAAU;QAAK,OAAO,EAAC,WAAW,EAAI,OAAM;kBACzD,EAAI,SACC,EAAI,OAAQ,EAAY,EAAI,MAAM,GAAK,IAAO,IAAW,EAAM,GAC9D,EAAY,EAAI;QACtB,EAJI,EAAI,IAIR,CACP,CACD;SArBI,EAqBJ;OAEX,CACE,EAAA,CAAA,CACJ;;IACN,CAAA;GACL,KAAc,IAAa,KACxB,kBAAC,GAAD;IACI,OAAO,EAAO;IACd,MAAM,IAAO;IACH;IACV,WAAW,MAAa,EAAQ,IAAW,EAAE;IAC/C,CAAA;GAEJ"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require(`./icons-Dv1T-cF4.cjs`),t=require(`./cn-CU5TNITO.cjs`),n=require(`./MPortal-PyRKsZxc.cjs`),r=require(`./MButton-
|
|
2
|
-
//# sourceMappingURL=MDrawer-
|
|
1
|
+
const e=require(`./icons-Dv1T-cF4.cjs`),t=require(`./cn-CU5TNITO.cjs`),n=require(`./MPortal-PyRKsZxc.cjs`),r=require(`./MButton-B8rXmFX9.cjs`);let i=require(`react`),a=require(`react/jsx-runtime`);var o=600;function s(e){return(0,i.isValidElement)(e)&&!!e.type.__drawerHeader}function c(e){return(0,i.isValidElement)(e)&&!!e.type.__drawerBody}function l(e){return(0,i.isValidElement)(e)&&!!e.type.__drawerFooter}function u({children:e}){return(0,a.jsx)(a.Fragment,{children:e})}u.__drawerHeader=!0;function d({children:e}){return(0,a.jsx)(a.Fragment,{children:e})}d.__drawerBody=!0;function f({children:e}){return(0,a.jsx)(a.Fragment,{children:e})}f.__drawerFooter=!0;function p({open:u,onClose:d,side:f=`right`,size:p=`md`,overlay:m=!0,closeOnBackdrop:h=!0,closeOnEscape:g=!0,className:_,children:v,...y}){let[b,x]=(0,i.useState)(!1),[S,C]=(0,i.useState)(!1),w=(0,i.useRef)(null);if((0,i.useEffect)(()=>{u&&(x(!0),C(!1))},[u]),(0,i.useEffect)(()=>{if(!u&&b){C(!0);let e=setTimeout(()=>{x(!1),C(!1)},o);return()=>clearTimeout(e)}},[u,b]),(0,i.useEffect)(()=>{if(!u||!g)return;let e=e=>{e.key===`Escape`&&d()};return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[u,g,d]),(0,i.useEffect)(()=>{if(!b)return;let e=document.body.style.overflow;return document.body.style.overflow=`hidden`,()=>{document.body.style.overflow=e}},[b]),!b)return null;let T=e=>{h&&e.target===e.currentTarget&&d()},E=null,D=null,O=null,k=null,A=null,j=[];i.Children.forEach(v,e=>{if(s(e)){E=e.props.children,D=e.props;return}if(c(e)){O=e.props,j.push(e.props.children);return}if(l(e)){k=e.props.children,A=e.props;return}j.push(e)});let M=D??{children:void 0},N=O??{children:void 0},P=A??{children:void 0},{children:F,className:I,bordered:L=!1,...R}=M,{children:z,className:B,...V}=N,{children:H,className:U,bordered:W=!1,...G}=P;return(0,a.jsx)(n.t,{children:(0,a.jsx)(`div`,{ref:w,className:t.t(`mineral-backdrop`,`drawer-backdrop`,!m&&`no-overlay`,S&&`closing`),onMouseDown:T,children:(0,a.jsxs)(`div`,{className:t.t(`drawer`,f,p,_),role:`dialog`,"aria-modal":`true`,...y,children:[E&&(0,a.jsxs)(`div`,{...R,className:t.t(`drawer-header`,L&&`bordered`,I),children:[(0,a.jsx)(`div`,{className:`drawer-title`,children:E}),(0,a.jsx)(r.t,{variant:`link`,color:`neutral`,iconOnly:!0,size:`sm`,onClick:d,"aria-label":`Close`,className:`close`,children:(0,a.jsx)(e.Ii,{})})]}),(0,a.jsx)(`div`,{...V,className:t.t(`drawer-body`,B),children:j}),k&&(0,a.jsx)(`div`,{...G,className:t.t(`drawer-footer`,W&&`bordered`,U),children:k})]})})})}Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return p}});
|
|
2
|
+
//# sourceMappingURL=MDrawer-CSvjLrhB.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MDrawer-
|
|
1
|
+
{"version":3,"file":"MDrawer-CSvjLrhB.cjs","names":[],"sources":["../src/components/overlays/MDrawer/MDrawer.tsx"],"sourcesContent":["import {Children, isValidElement, useEffect, useState, useRef} from 'react'\nimport type {MouseEvent, ReactElement, ReactNode} from 'react'\nimport type {MDrawerProps, MDrawerSectionProps} from './MDrawer.types'\nimport {MPortal} from '../../primitives'\nimport {MButton} from '../../controls'\nimport {MCloseIcon} from '../../../icons'\nimport {cn} from '../../../utils/cn'\nimport './MDrawer.css'\n\nconst EXIT_DURATION = 600\n\ntype DrawerSlotElement = ReactElement<MDrawerSectionProps>\n\nfunction isDrawerHeader(child: ReactNode): child is DrawerSlotElement {\n return isValidElement(child) && !!(child.type as any).__drawerHeader\n}\n\nfunction isDrawerBody(child: ReactNode): child is DrawerSlotElement {\n return isValidElement(child) && !!(child.type as any).__drawerBody\n}\n\nfunction isDrawerFooter(child: ReactNode): child is DrawerSlotElement {\n return isValidElement(child) && !!(child.type as any).__drawerFooter\n}\n\nexport function MDrawerHeader({children}: MDrawerSectionProps) {\n return <>{children}</>\n}\n;(MDrawerHeader as any).__drawerHeader = true\n\nexport function MDrawerBody({children}: MDrawerSectionProps) {\n return <>{children}</>\n}\n;(MDrawerBody as any).__drawerBody = true\n\nexport function MDrawerFooter({children}: MDrawerSectionProps) {\n return <>{children}</>\n}\n;(MDrawerFooter as any).__drawerFooter = true\n\nexport function MDrawer({\n open,\n onClose,\n side = 'right',\n size = 'md',\n overlay = true,\n closeOnBackdrop = true,\n closeOnEscape = true,\n className,\n children,\n ...rest\n}: MDrawerProps) {\n const [mounted, setMounted] = useState(false)\n const [closing, setClosing] = useState(false)\n const backdropRef = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (open) {\n setMounted(true)\n setClosing(false)\n }\n }, [open])\n\n useEffect(() => {\n if (!open && mounted) {\n setClosing(true)\n const timer = setTimeout(() => {\n setMounted(false)\n setClosing(false)\n }, EXIT_DURATION)\n return () => clearTimeout(timer)\n }\n }, [open, mounted])\n\n useEffect(() => {\n if (!open || !closeOnEscape) return\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose()\n }\n\n document.addEventListener('keydown', handleKeyDown)\n return () => document.removeEventListener('keydown', handleKeyDown)\n }, [open, closeOnEscape, onClose])\n\n useEffect(() => {\n if (!mounted) return\n\n const prev = document.body.style.overflow\n document.body.style.overflow = 'hidden'\n return () => {\n document.body.style.overflow = prev\n }\n }, [mounted])\n\n if (!mounted) return null\n\n const handleBackdropClick = (e: MouseEvent<HTMLDivElement>) => {\n if (closeOnBackdrop && e.target === e.currentTarget) onClose()\n }\n\n let header: ReactNode = null\n let headerProps: MDrawerSectionProps | null = null\n let bodyProps: MDrawerSectionProps | null = null\n let footer: ReactNode = null\n let footerProps: MDrawerSectionProps | null = null\n const body: ReactNode[] = []\n\n Children.forEach(children, (child) => {\n if (isDrawerHeader(child)) {\n header = child.props.children\n headerProps = child.props\n return\n }\n\n if (isDrawerBody(child)) {\n bodyProps = child.props\n body.push(child.props.children)\n return\n }\n\n if (isDrawerFooter(child)) {\n footer = child.props.children\n footerProps = child.props\n return\n }\n\n body.push(child)\n })\n\n const headerSection = headerProps ?? ({children: undefined} as MDrawerSectionProps)\n const bodySection = bodyProps ?? ({children: undefined} as MDrawerSectionProps)\n const footerSection = footerProps ?? ({children: undefined} as MDrawerSectionProps)\n const {\n children: _headerChildren,\n className: headerClassName,\n bordered: headerBordered = false,\n ...headerRest\n } = headerSection\n const {children: _bodyChildren, className: bodyClassName, ...bodyRest} = bodySection\n const {\n children: _footerChildren,\n className: footerClassName,\n bordered: footerBordered = false,\n ...footerRest\n } = footerSection\n\n return (\n <MPortal>\n <div\n ref={backdropRef}\n className={cn('mineral-backdrop', 'drawer-backdrop', !overlay && 'no-overlay', closing && 'closing')}\n onMouseDown={handleBackdropClick}\n >\n <div className={cn('drawer', side, size, className)} role=\"dialog\" aria-modal=\"true\" {...rest}>\n {header && (\n <div\n {...headerRest}\n className={cn('drawer-header', headerBordered && 'bordered', headerClassName)}\n >\n <div className=\"drawer-title\">{header}</div>\n <MButton\n variant=\"link\"\n color=\"neutral\"\n iconOnly\n size=\"sm\"\n onClick={onClose}\n aria-label=\"Close\"\n className=\"close\"\n >\n <MCloseIcon />\n </MButton>\n </div>\n )}\n <div {...bodyRest} className={cn('drawer-body', bodyClassName)}>\n {body}\n </div>\n {footer && (\n <div\n {...footerRest}\n className={cn('drawer-footer', footerBordered && 'bordered', footerClassName)}\n >\n {footer}\n </div>\n )}\n </div>\n </div>\n </MPortal>\n )\n}\n"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Ii as e } from "./icons-D5DK-J2C.js";
|
|
2
2
|
import { t } from "./cn-YER3QsV1.js";
|
|
3
3
|
import { t as n } from "./MPortal-Dqlkh3hw.js";
|
|
4
|
-
import { t as r } from "./MButton-
|
|
4
|
+
import { t as r } from "./MButton-BmTDe5Oa.js";
|
|
5
5
|
import { Children as i, isValidElement as a, useEffect as o, useRef as s, useState as c } from "react";
|
|
6
6
|
import { Fragment as l, jsx as u, jsxs as d } from "react/jsx-runtime";
|
|
7
7
|
//#region src/components/overlays/MDrawer/MDrawer.tsx
|
|
@@ -119,4 +119,4 @@ function y({ open: a, onClose: l, side: g = "right", size: _ = "md", overlay: v
|
|
|
119
119
|
//#endregion
|
|
120
120
|
export { g as i, _ as n, v as r, y as t };
|
|
121
121
|
|
|
122
|
-
//# sourceMappingURL=MDrawer-
|
|
122
|
+
//# sourceMappingURL=MDrawer-DXHtAckQ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MDrawer-
|
|
1
|
+
{"version":3,"file":"MDrawer-DXHtAckQ.js","names":[],"sources":["../src/components/overlays/MDrawer/MDrawer.tsx"],"sourcesContent":["import {Children, isValidElement, useEffect, useState, useRef} from 'react'\nimport type {MouseEvent, ReactElement, ReactNode} from 'react'\nimport type {MDrawerProps, MDrawerSectionProps} from './MDrawer.types'\nimport {MPortal} from '../../primitives'\nimport {MButton} from '../../controls'\nimport {MCloseIcon} from '../../../icons'\nimport {cn} from '../../../utils/cn'\nimport './MDrawer.css'\n\nconst EXIT_DURATION = 600\n\ntype DrawerSlotElement = ReactElement<MDrawerSectionProps>\n\nfunction isDrawerHeader(child: ReactNode): child is DrawerSlotElement {\n return isValidElement(child) && !!(child.type as any).__drawerHeader\n}\n\nfunction isDrawerBody(child: ReactNode): child is DrawerSlotElement {\n return isValidElement(child) && !!(child.type as any).__drawerBody\n}\n\nfunction isDrawerFooter(child: ReactNode): child is DrawerSlotElement {\n return isValidElement(child) && !!(child.type as any).__drawerFooter\n}\n\nexport function MDrawerHeader({children}: MDrawerSectionProps) {\n return <>{children}</>\n}\n;(MDrawerHeader as any).__drawerHeader = true\n\nexport function MDrawerBody({children}: MDrawerSectionProps) {\n return <>{children}</>\n}\n;(MDrawerBody as any).__drawerBody = true\n\nexport function MDrawerFooter({children}: MDrawerSectionProps) {\n return <>{children}</>\n}\n;(MDrawerFooter as any).__drawerFooter = true\n\nexport function MDrawer({\n open,\n onClose,\n side = 'right',\n size = 'md',\n overlay = true,\n closeOnBackdrop = true,\n closeOnEscape = true,\n className,\n children,\n ...rest\n}: MDrawerProps) {\n const [mounted, setMounted] = useState(false)\n const [closing, setClosing] = useState(false)\n const backdropRef = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (open) {\n setMounted(true)\n setClosing(false)\n }\n }, [open])\n\n useEffect(() => {\n if (!open && mounted) {\n setClosing(true)\n const timer = setTimeout(() => {\n setMounted(false)\n setClosing(false)\n }, EXIT_DURATION)\n return () => clearTimeout(timer)\n }\n }, [open, mounted])\n\n useEffect(() => {\n if (!open || !closeOnEscape) return\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose()\n }\n\n document.addEventListener('keydown', handleKeyDown)\n return () => document.removeEventListener('keydown', handleKeyDown)\n }, [open, closeOnEscape, onClose])\n\n useEffect(() => {\n if (!mounted) return\n\n const prev = document.body.style.overflow\n document.body.style.overflow = 'hidden'\n return () => {\n document.body.style.overflow = prev\n }\n }, [mounted])\n\n if (!mounted) return null\n\n const handleBackdropClick = (e: MouseEvent<HTMLDivElement>) => {\n if (closeOnBackdrop && e.target === e.currentTarget) onClose()\n }\n\n let header: ReactNode = null\n let headerProps: MDrawerSectionProps | null = null\n let bodyProps: MDrawerSectionProps | null = null\n let footer: ReactNode = null\n let footerProps: MDrawerSectionProps | null = null\n const body: ReactNode[] = []\n\n Children.forEach(children, (child) => {\n if (isDrawerHeader(child)) {\n header = child.props.children\n headerProps = child.props\n return\n }\n\n if (isDrawerBody(child)) {\n bodyProps = child.props\n body.push(child.props.children)\n return\n }\n\n if (isDrawerFooter(child)) {\n footer = child.props.children\n footerProps = child.props\n return\n }\n\n body.push(child)\n })\n\n const headerSection = headerProps ?? ({children: undefined} as MDrawerSectionProps)\n const bodySection = bodyProps ?? ({children: undefined} as MDrawerSectionProps)\n const footerSection = footerProps ?? ({children: undefined} as MDrawerSectionProps)\n const {\n children: _headerChildren,\n className: headerClassName,\n bordered: headerBordered = false,\n ...headerRest\n } = headerSection\n const {children: _bodyChildren, className: bodyClassName, ...bodyRest} = bodySection\n const {\n children: _footerChildren,\n className: footerClassName,\n bordered: footerBordered = false,\n ...footerRest\n } = footerSection\n\n return (\n <MPortal>\n <div\n ref={backdropRef}\n className={cn('mineral-backdrop', 'drawer-backdrop', !overlay && 'no-overlay', closing && 'closing')}\n onMouseDown={handleBackdropClick}\n >\n <div className={cn('drawer', side, size, className)} role=\"dialog\" aria-modal=\"true\" {...rest}>\n {header && (\n <div\n {...headerRest}\n className={cn('drawer-header', headerBordered && 'bordered', headerClassName)}\n >\n <div className=\"drawer-title\">{header}</div>\n <MButton\n variant=\"link\"\n color=\"neutral\"\n iconOnly\n size=\"sm\"\n onClick={onClose}\n aria-label=\"Close\"\n className=\"close\"\n >\n <MCloseIcon />\n </MButton>\n </div>\n )}\n <div {...bodyRest} className={cn('drawer-body', bodyClassName)}>\n {body}\n </div>\n {footer && (\n <div\n {...footerRest}\n className={cn('drawer-footer', footerBordered && 'bordered', footerClassName)}\n >\n {footer}\n </div>\n )}\n </div>\n </div>\n </MPortal>\n )\n}\n"],"mappings":";;;;;;;AASA,IAAM,IAAgB;AAItB,SAAS,EAAe,GAA8C;AAClE,QAAO,EAAe,EAAM,IAAI,CAAC,CAAE,EAAM,KAAa;;AAG1D,SAAS,EAAa,GAA8C;AAChE,QAAO,EAAe,EAAM,IAAI,CAAC,CAAE,EAAM,KAAa;;AAG1D,SAAS,EAAe,GAA8C;AAClE,QAAO,EAAe,EAAM,IAAI,CAAC,CAAE,EAAM,KAAa;;AAG1D,SAAgB,EAAc,EAAC,eAAgC;AAC3D,QAAO,kBAAA,GAAA,EAAG,aAAY,CAAA;;AAEzB,EAAuB,iBAAiB;AAEzC,SAAgB,EAAY,EAAC,eAAgC;AACzD,QAAO,kBAAA,GAAA,EAAG,aAAY,CAAA;;AAEzB,EAAqB,eAAe;AAErC,SAAgB,EAAc,EAAC,eAAgC;AAC3D,QAAO,kBAAA,GAAA,EAAG,aAAY,CAAA;;AAEzB,EAAuB,iBAAiB;AAEzC,SAAgB,EAAQ,EACpB,SACA,YACA,UAAO,SACP,UAAO,MACP,aAAU,IACV,qBAAkB,IAClB,mBAAgB,IAChB,cACA,aACA,GAAG,KACU;CACb,IAAM,CAAC,GAAS,KAAc,EAAS,GAAM,EACvC,CAAC,GAAS,KAAc,EAAS,GAAM,EACvC,IAAc,EAAuB,KAAK;AAyChD,KAvCA,QAAgB;AACZ,EAAI,MACA,EAAW,GAAK,EAChB,EAAW,GAAM;IAEtB,CAAC,EAAK,CAAC,EAEV,QAAgB;AACZ,MAAI,CAAC,KAAQ,GAAS;AAClB,KAAW,GAAK;GAChB,IAAM,IAAQ,iBAAiB;AAE3B,IADA,EAAW,GAAM,EACjB,EAAW,GAAM;MAClB,EAAc;AACjB,gBAAa,aAAa,EAAM;;IAErC,CAAC,GAAM,EAAQ,CAAC,EAEnB,QAAgB;AACZ,MAAI,CAAC,KAAQ,CAAC,EAAe;EAE7B,IAAM,KAAiB,MAAqB;AACxC,GAAI,EAAE,QAAQ,YAAU,GAAS;;AAIrC,SADA,SAAS,iBAAiB,WAAW,EAAc,QACtC,SAAS,oBAAoB,WAAW,EAAc;IACpE;EAAC;EAAM;EAAe;EAAQ,CAAC,EAElC,QAAgB;AACZ,MAAI,CAAC,EAAS;EAEd,IAAM,IAAO,SAAS,KAAK,MAAM;AAEjC,SADA,SAAS,KAAK,MAAM,WAAW,gBAClB;AACT,YAAS,KAAK,MAAM,WAAW;;IAEpC,CAAC,EAAQ,CAAC,EAET,CAAC,EAAS,QAAO;CAErB,IAAM,KAAuB,MAAkC;AAC3D,EAAI,KAAmB,EAAE,WAAW,EAAE,iBAAe,GAAS;IAG9D,IAAoB,MACpB,IAA0C,MAC1C,IAAwC,MACxC,IAAoB,MACpB,IAA0C,MACxC,IAAoB,EAAE;AAE5B,GAAS,QAAQ,IAAW,MAAU;AAClC,MAAI,EAAe,EAAM,EAAE;AAEvB,GADA,IAAS,EAAM,MAAM,UACrB,IAAc,EAAM;AACpB;;AAGJ,MAAI,EAAa,EAAM,EAAE;AAErB,GADA,IAAY,EAAM,OAClB,EAAK,KAAK,EAAM,MAAM,SAAS;AAC/B;;AAGJ,MAAI,EAAe,EAAM,EAAE;AAEvB,GADA,IAAS,EAAM,MAAM,UACrB,IAAc,EAAM;AACpB;;AAGJ,IAAK,KAAK,EAAM;GAClB;CAEF,IAAM,IAAgB,KAAgB,EAAC,UAAU,KAAA,GAAU,EACrD,IAAc,KAAc,EAAC,UAAU,KAAA,GAAU,EACjD,IAAgB,KAAgB,EAAC,UAAU,KAAA,GAAU,EACrD,EACF,UAAU,GACV,WAAW,GACX,UAAU,IAAiB,IAC3B,GAAG,MACH,GACE,EAAC,UAAU,GAAe,WAAW,GAAe,GAAG,MAAY,GACnE,EACF,UAAU,GACV,WAAW,GACX,UAAU,IAAiB,IAC3B,GAAG,MACH;AAEJ,QACI,kBAAC,GAAD,EAAA,UACI,kBAAC,OAAD;EACI,KAAK;EACL,WAAW,EAAG,oBAAoB,mBAAmB,CAAC,KAAW,cAAc,KAAW,UAAU;EACpG,aAAa;YAEb,kBAAC,OAAD;GAAK,WAAW,EAAG,UAAU,GAAM,GAAM,EAAU;GAAE,MAAK;GAAS,cAAW;GAAO,GAAI;aAAzF;IACK,KACG,kBAAC,OAAD;KACI,GAAI;KACJ,WAAW,EAAG,iBAAiB,KAAkB,YAAY,EAAgB;eAFjF,CAII,kBAAC,OAAD;MAAK,WAAU;gBAAgB;MAAa,CAAA,EAC5C,kBAAC,GAAD;MACI,SAAQ;MACR,OAAM;MACN,UAAA;MACA,MAAK;MACL,SAAS;MACT,cAAW;MACX,WAAU;gBAEV,kBAAC,GAAD,EAAc,CAAA;MACR,CAAA,CACR;;IAEV,kBAAC,OAAD;KAAK,GAAI;KAAU,WAAW,EAAG,eAAe,EAAc;eACzD;KACC,CAAA;IACL,KACG,kBAAC,OAAD;KACI,GAAI;KACJ,WAAW,EAAG,iBAAiB,KAAkB,YAAY,EAAgB;eAE5E;KACC,CAAA;IAER;;EACJ,CAAA,EACA,CAAA"}
|