@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.
Files changed (207) hide show
  1. package/README.md +1 -1
  2. package/dist/{MAvatar-tpFpLFPO.js → MAvatar-BoO51a6m.js} +2 -2
  3. package/dist/{MAvatar-tpFpLFPO.js.map → MAvatar-BoO51a6m.js.map} +1 -1
  4. package/dist/{MAvatar-nLlGAprq.cjs → MAvatar-DJKtca9j.cjs} +2 -2
  5. package/dist/{MAvatar-nLlGAprq.cjs.map → MAvatar-DJKtca9j.cjs.map} +1 -1
  6. package/dist/{MBadge-imAk1gYn.cjs → MBadge-CexVV675.cjs} +1 -1
  7. package/dist/{MBadge-imAk1gYn.cjs.map → MBadge-CexVV675.cjs.map} +1 -1
  8. package/dist/{MBadge-UTUlEAik.js → MBadge-Y1JnZiIC.js} +1 -1
  9. package/dist/{MBadge-UTUlEAik.js.map → MBadge-Y1JnZiIC.js.map} +1 -1
  10. package/dist/{MButton-CX8SV1m0.cjs → MButton-B8rXmFX9.cjs} +1 -1
  11. package/dist/{MButton-CX8SV1m0.cjs.map → MButton-B8rXmFX9.cjs.map} +1 -1
  12. package/dist/{MButton-BJdrNg2I.js → MButton-BmTDe5Oa.js} +1 -1
  13. package/dist/{MButton-BJdrNg2I.js.map → MButton-BmTDe5Oa.js.map} +1 -1
  14. package/dist/{MCheckbox-DfCD0EtS.js → MCheckbox-B7SpcD4H.js} +1 -1
  15. package/dist/{MCheckbox-DfCD0EtS.js.map → MCheckbox-B7SpcD4H.js.map} +1 -1
  16. package/dist/{MCheckbox-CAZA97h7.cjs → MCheckbox-Bea3orrs.cjs} +1 -1
  17. package/dist/{MCheckbox-CAZA97h7.cjs.map → MCheckbox-Bea3orrs.cjs.map} +1 -1
  18. package/dist/{MCookieBootstrap-BhTMPs8T.js → MCookieBootstrap-CNYLvKjW.js} +1 -1
  19. package/dist/{MCookieBootstrap-BhTMPs8T.js.map → MCookieBootstrap-CNYLvKjW.js.map} +1 -1
  20. package/dist/{MCookieBootstrap-Fxpem-gF.cjs → MCookieBootstrap-DSOT4FQo.cjs} +1 -1
  21. package/dist/{MCookieBootstrap-Fxpem-gF.cjs.map → MCookieBootstrap-DSOT4FQo.cjs.map} +1 -1
  22. package/dist/{MDataTable-BZs6Cn9e.cjs → MDataTable-BI7wFZYN.cjs} +2 -2
  23. package/dist/{MDataTable-BZs6Cn9e.cjs.map → MDataTable-BI7wFZYN.cjs.map} +1 -1
  24. package/dist/{MDataTable-D-ASD4g3.js → MDataTable-Cqwkiq7A.js} +10 -10
  25. package/dist/{MDataTable-D-ASD4g3.js.map → MDataTable-Cqwkiq7A.js.map} +1 -1
  26. package/dist/{MDrawer-CTVEF34p.cjs → MDrawer-CSvjLrhB.cjs} +2 -2
  27. package/dist/{MDrawer-CTVEF34p.cjs.map → MDrawer-CSvjLrhB.cjs.map} +1 -1
  28. package/dist/{MDrawer-CscOMXBg.js → MDrawer-DXHtAckQ.js} +2 -2
  29. package/dist/{MDrawer-CscOMXBg.js.map → MDrawer-DXHtAckQ.js.map} +1 -1
  30. package/dist/{MDropdownMenu-B1eOmM7u.js → MDropdownMenu-CxBhYxQb.js} +1 -1
  31. package/dist/{MDropdownMenu-B1eOmM7u.js.map → MDropdownMenu-CxBhYxQb.js.map} +1 -1
  32. package/dist/{MDropdownMenu-CiJ_7DQ2.cjs → MDropdownMenu-X7ywPqth.cjs} +1 -1
  33. package/dist/{MDropdownMenu-CiJ_7DQ2.cjs.map → MDropdownMenu-X7ywPqth.cjs.map} +1 -1
  34. package/dist/{MHeading-CMGPJwul.js → MHeading-C3IgV22T.js} +2 -2
  35. package/dist/{MHeading-CMGPJwul.js.map → MHeading-C3IgV22T.js.map} +1 -1
  36. package/dist/{MHeading-sW0j7ssI.cjs → MHeading-DqvWKia1.cjs} +2 -2
  37. package/dist/{MHeading-sW0j7ssI.cjs.map → MHeading-DqvWKia1.cjs.map} +1 -1
  38. package/dist/{MImage-3UVzZIgA.js → MImage-BDcrV6IC.js} +2 -2
  39. package/dist/{MImage-3UVzZIgA.js.map → MImage-BDcrV6IC.js.map} +1 -1
  40. package/dist/{MImage-BHgzEHMO.cjs → MImage-BsQJ_eYf.cjs} +2 -2
  41. package/dist/{MImage-BHgzEHMO.cjs.map → MImage-BsQJ_eYf.cjs.map} +1 -1
  42. package/dist/{MInline-DUzpnZoB.cjs → MInline-BAhu2zT-.cjs} +1 -1
  43. package/dist/{MInline-DUzpnZoB.cjs.map → MInline-BAhu2zT-.cjs.map} +1 -1
  44. package/dist/{MInline-cTj903A4.js → MInline-Dfy3Lrjs.js} +1 -1
  45. package/dist/{MInline-cTj903A4.js.map → MInline-Dfy3Lrjs.js.map} +1 -1
  46. package/dist/{MInput-B8RPS-wr.js → MInput-BSaKw0Uc.js} +2 -2
  47. package/dist/{MInput-B8RPS-wr.js.map → MInput-BSaKw0Uc.js.map} +1 -1
  48. package/dist/{MInput-BZ1ZPuk3.cjs → MInput-W7DJQ_ng.cjs} +2 -2
  49. package/dist/{MInput-BZ1ZPuk3.cjs.map → MInput-W7DJQ_ng.cjs.map} +1 -1
  50. package/dist/{MInputCVC-DOBmGhJL.cjs → MInputCVC-DH_bjV5R.cjs} +2 -2
  51. package/dist/{MInputCVC-DOBmGhJL.cjs.map → MInputCVC-DH_bjV5R.cjs.map} +1 -1
  52. package/dist/{MInputCVC-BJQWuuwR.js → MInputCVC-Dqbl1zG9.js} +3 -3
  53. package/dist/{MInputCVC-BJQWuuwR.js.map → MInputCVC-Dqbl1zG9.js.map} +1 -1
  54. package/dist/{MInputSearch-DAAg9FXv.cjs → MInputSearch-C7betxTa.cjs} +2 -2
  55. package/dist/{MInputSearch-DAAg9FXv.cjs.map → MInputSearch-C7betxTa.cjs.map} +1 -1
  56. package/dist/{MInputSearch-PMHykVrc.js → MInputSearch-CH5ZcjLq.js} +2 -2
  57. package/dist/{MInputSearch-PMHykVrc.js.map → MInputSearch-CH5ZcjLq.js.map} +1 -1
  58. package/dist/{MLink-D10DD8oX.cjs → MLink-DHryXq_D.cjs} +1 -1
  59. package/dist/{MLink-D10DD8oX.cjs.map → MLink-DHryXq_D.cjs.map} +1 -1
  60. package/dist/{MLink-CBmT8zaD.js → MLink-ODytrwne.js} +1 -1
  61. package/dist/{MLink-CBmT8zaD.js.map → MLink-ODytrwne.js.map} +1 -1
  62. package/dist/{MModal-BogYYyZE.js → MModal-DShADuLw.js} +2 -2
  63. package/dist/{MModal-BogYYyZE.js.map → MModal-DShADuLw.js.map} +1 -1
  64. package/dist/{MModal-CfzduXaI.cjs → MModal-pMcPs3pw.cjs} +2 -2
  65. package/dist/{MModal-CfzduXaI.cjs.map → MModal-pMcPs3pw.cjs.map} +1 -1
  66. package/dist/{MPagination-CgvjKhLN.js → MPagination-B7aho7rQ.js} +2 -2
  67. package/dist/{MPagination-CgvjKhLN.js.map → MPagination-B7aho7rQ.js.map} +1 -1
  68. package/dist/{MPagination-vg2EqB8z.cjs → MPagination-BWHAVgWN.cjs} +2 -2
  69. package/dist/{MPagination-vg2EqB8z.cjs.map → MPagination-BWHAVgWN.cjs.map} +1 -1
  70. package/dist/{MQrCode-l0FzrNCq.js → MQrCode-6Cz9B7Qy.js} +2 -2
  71. package/dist/{MQrCode-l0FzrNCq.js.map → MQrCode-6Cz9B7Qy.js.map} +1 -1
  72. package/dist/{MQrCode-DB9vELHq.cjs → MQrCode-Bp2CWpmX.cjs} +2 -2
  73. package/dist/{MQrCode-DB9vELHq.cjs.map → MQrCode-Bp2CWpmX.cjs.map} +1 -1
  74. package/dist/{MSkeleton-D7wnoEE8.cjs → MSkeleton-BfRBJ6ku.cjs} +1 -1
  75. package/dist/{MSkeleton-D7wnoEE8.cjs.map → MSkeleton-BfRBJ6ku.cjs.map} +1 -1
  76. package/dist/{MSkeleton-Bh9cCe49.js → MSkeleton-CauCfkzj.js} +1 -1
  77. package/dist/{MSkeleton-Bh9cCe49.js.map → MSkeleton-CauCfkzj.js.map} +1 -1
  78. package/dist/{MSlider-YDSrVUQ8.cjs → MSlider-BCMJkvcA.cjs} +1 -1
  79. package/dist/{MSlider-YDSrVUQ8.cjs.map → MSlider-BCMJkvcA.cjs.map} +1 -1
  80. package/dist/{MSlider-BlgzLtHa.js → MSlider-CqrusKJQ.js} +1 -1
  81. package/dist/{MSlider-BlgzLtHa.js.map → MSlider-CqrusKJQ.js.map} +1 -1
  82. package/dist/{MSparkline-Bl5-EHJr.cjs → MSparkline-BOaNmbeB.cjs} +1 -1
  83. package/dist/{MSparkline-Bl5-EHJr.cjs.map → MSparkline-BOaNmbeB.cjs.map} +1 -1
  84. package/dist/{MSparkline-C8tnqhJm.js → MSparkline-Cb_EwR-E.js} +1 -1
  85. package/dist/{MSparkline-C8tnqhJm.js.map → MSparkline-Cb_EwR-E.js.map} +1 -1
  86. package/dist/{MStack-XTsT_kLJ.js → MStack-Cifiqeb2.js} +1 -1
  87. package/dist/{MStack-XTsT_kLJ.js.map → MStack-Cifiqeb2.js.map} +1 -1
  88. package/dist/{MStack-BKDsNitR.cjs → MStack-lrvy7l3w.cjs} +1 -1
  89. package/dist/{MStack-BKDsNitR.cjs.map → MStack-lrvy7l3w.cjs.map} +1 -1
  90. package/dist/{MSubText-BIaYgtU4.cjs → MSubText-78oYdJQy.cjs} +2 -2
  91. package/dist/{MSubText-BIaYgtU4.cjs.map → MSubText-78oYdJQy.cjs.map} +1 -1
  92. package/dist/{MSubText-uoh7Qx7S.js → MSubText-C2oxXwKT.js} +2 -2
  93. package/dist/{MSubText-uoh7Qx7S.js.map → MSubText-C2oxXwKT.js.map} +1 -1
  94. package/dist/{MTag-BVo9zFIj.cjs → MTag-C4_rBj4b.cjs} +2 -2
  95. package/dist/{MTag-BVo9zFIj.cjs.map → MTag-C4_rBj4b.cjs.map} +1 -1
  96. package/dist/{MTag-Bq9b51kE.js → MTag-DOcKm3c2.js} +2 -2
  97. package/dist/{MTag-Bq9b51kE.js.map → MTag-DOcKm3c2.js.map} +1 -1
  98. package/dist/{MText-B4koGfYi.cjs → MText-CxSZ2md0.cjs} +1 -1
  99. package/dist/{MText-B4koGfYi.cjs.map → MText-CxSZ2md0.cjs.map} +1 -1
  100. package/dist/{MText-CKyns1SE.js → MText-DX9O7gh7.js} +1 -1
  101. package/dist/{MText-CKyns1SE.js.map → MText-DX9O7gh7.js.map} +1 -1
  102. package/dist/{MTimeAgo-LWntwbKg.cjs → MTimeAgo-91_ndjxU.cjs} +2 -2
  103. package/dist/{MTimeAgo-LWntwbKg.cjs.map → MTimeAgo-91_ndjxU.cjs.map} +1 -1
  104. package/dist/{MTimeAgo-irsvTFAY.js → MTimeAgo-xxl53mct.js} +2 -2
  105. package/dist/{MTimeAgo-irsvTFAY.js.map → MTimeAgo-xxl53mct.js.map} +1 -1
  106. package/dist/{MToggle-BbSDIAJq.js → MToggle-B6emKoKq.js} +1 -1
  107. package/dist/{MToggle-BbSDIAJq.js.map → MToggle-B6emKoKq.js.map} +1 -1
  108. package/dist/{MToggle-GhhAJgUa.cjs → MToggle-CsGS_W3X.cjs} +1 -1
  109. package/dist/{MToggle-GhhAJgUa.cjs.map → MToggle-CsGS_W3X.cjs.map} +1 -1
  110. package/dist/{MTooltip-eTM5DKtM.cjs → MTooltip-CNXoyQEN.cjs} +1 -1
  111. package/dist/{MTooltip-eTM5DKtM.cjs.map → MTooltip-CNXoyQEN.cjs.map} +1 -1
  112. package/dist/{MTooltip-BVQ7wBrO.js → MTooltip-UYOjDBOu.js} +1 -1
  113. package/dist/{MTooltip-BVQ7wBrO.js.map → MTooltip-UYOjDBOu.js.map} +1 -1
  114. package/dist/{cards-JqA2VWit.js → cards-BE77zKTI.js} +64 -64
  115. package/dist/{cards-JqA2VWit.js.map → cards-BE77zKTI.js.map} +1 -1
  116. package/dist/{cards-QoMhQlao.cjs → cards-BINs-dmS.cjs} +2 -2
  117. package/dist/{cards-QoMhQlao.cjs.map → cards-BINs-dmS.cjs.map} +1 -1
  118. package/dist/cards.cjs +1 -1
  119. package/dist/cards.js +2 -2
  120. package/dist/components/feedback/MCookie/MCookieBootstrap/MCookieBootstrap.script.d.ts +4 -0
  121. package/dist/components/layout/MNavbar/MNavbar.d.ts +1 -1
  122. package/dist/components/layout/MNavbar/MNavbar.types.d.ts +4 -0
  123. package/dist/components/layout/MNavbar/index.d.ts +1 -1
  124. package/dist/components/layout/MNavs/MNavs.types.d.ts +12 -2
  125. package/dist/components/layout/MNavs/index.d.ts +1 -1
  126. package/dist/{controls-Dbev0qSy.js → controls-BMwQ3C1R.js} +2 -2
  127. package/dist/{controls-Dbev0qSy.js.map → controls-BMwQ3C1R.js.map} +1 -1
  128. package/dist/{controls-BFmZuejK.cjs → controls-DwL1-nVC.cjs} +2 -2
  129. package/dist/{controls-BFmZuejK.cjs.map → controls-DwL1-nVC.cjs.map} +1 -1
  130. package/dist/controls.cjs +1 -1
  131. package/dist/controls.js +6 -6
  132. package/dist/cookie-consent-bootstrap.cjs +1 -1
  133. package/dist/cookie-consent-bootstrap.cjs.map +1 -1
  134. package/dist/cookie-consent-bootstrap.js +45 -32
  135. package/dist/cookie-consent-bootstrap.js.map +1 -1
  136. package/dist/{data-BooVW8q_.cjs → data-BESfox0z.cjs} +2 -2
  137. package/dist/{data-BooVW8q_.cjs.map → data-BESfox0z.cjs.map} +1 -1
  138. package/dist/{data-B1hbWMzU.js → data-s8Hkht1B.js} +608 -608
  139. package/dist/{data-B1hbWMzU.js.map → data-s8Hkht1B.js.map} +1 -1
  140. package/dist/data.cjs +1 -1
  141. package/dist/data.js +3 -3
  142. package/dist/{display-B-zP1BEz.cjs → display-B0lpgApV.cjs} +2 -2
  143. package/dist/{display-B-zP1BEz.cjs.map → display-B0lpgApV.cjs.map} +1 -1
  144. package/dist/{display-DC0d-nPm.js → display-DuBRiEKr.js} +3 -3
  145. package/dist/{display-DC0d-nPm.js.map → display-DuBRiEKr.js.map} +1 -1
  146. package/dist/display.cjs +1 -1
  147. package/dist/display.js +3 -3
  148. package/dist/{dropdowns-Vo7Oo_ii.js → dropdowns-BcVrUMPE.js} +43 -43
  149. package/dist/{dropdowns-Vo7Oo_ii.js.map → dropdowns-BcVrUMPE.js.map} +1 -1
  150. package/dist/dropdowns-CK-oxd62.cjs +2 -0
  151. package/dist/{dropdowns-CMt9-Jpa.cjs.map → dropdowns-CK-oxd62.cjs.map} +1 -1
  152. package/dist/dropdowns.cjs +1 -1
  153. package/dist/dropdowns.js +1 -1
  154. package/dist/{feedback-D29Er-TD.js → feedback-D3LLKNlY.js} +196 -196
  155. package/dist/{feedback-D29Er-TD.js.map → feedback-D3LLKNlY.js.map} +1 -1
  156. package/dist/{feedback-B-PVXL68.cjs → feedback-DYjg0Dbp.cjs} +2 -2
  157. package/dist/{feedback-B-PVXL68.cjs.map → feedback-DYjg0Dbp.cjs.map} +1 -1
  158. package/dist/feedback.cjs +1 -1
  159. package/dist/feedback.js +6 -6
  160. package/dist/{frameworkTexts-BgzNvcs2.js → frameworkTexts-B6oE8pMk.js} +1 -1
  161. package/dist/{frameworkTexts-BgzNvcs2.js.map → frameworkTexts-B6oE8pMk.js.map} +1 -1
  162. package/dist/{frameworkTexts-r4jSfpMt.cjs → frameworkTexts-C_9KZK_A.cjs} +1 -1
  163. package/dist/{frameworkTexts-r4jSfpMt.cjs.map → frameworkTexts-C_9KZK_A.cjs.map} +1 -1
  164. package/dist/index.cjs +1 -1
  165. package/dist/index.js +40 -40
  166. package/dist/{inputs-Dw9Uv8f4.cjs → inputs-Dcj6C_Fn.cjs} +2 -2
  167. package/dist/{inputs-Dw9Uv8f4.cjs.map → inputs-Dcj6C_Fn.cjs.map} +1 -1
  168. package/dist/{inputs-Bl7ssV3Q.js → inputs-bCxSLz-U.js} +115 -115
  169. package/dist/{inputs-Bl7ssV3Q.js.map → inputs-bCxSLz-U.js.map} +1 -1
  170. package/dist/inputs.cjs +1 -1
  171. package/dist/inputs.js +4 -4
  172. package/dist/{layout-UP_12LRD.js → layout-Cb94o3oU.js} +282 -208
  173. package/dist/layout-Cb94o3oU.js.map +1 -0
  174. package/dist/layout-DgfsQ-Tn.cjs +2 -0
  175. package/dist/layout-DgfsQ-Tn.cjs.map +1 -0
  176. package/dist/layout.cjs +1 -1
  177. package/dist/layout.js +5 -5
  178. package/dist/{locale-uMMj57KX.js → locale-BNyzqXAU.js} +1 -1
  179. package/dist/{locale-uMMj57KX.js.map → locale-BNyzqXAU.js.map} +1 -1
  180. package/dist/{locale-LCAQDJCd.cjs → locale-BltrWJtd.cjs} +1 -1
  181. package/dist/{locale-LCAQDJCd.cjs.map → locale-BltrWJtd.cjs.map} +1 -1
  182. package/dist/{media-D5zF3vH6.js → media-8aMOtckF.js} +5 -5
  183. package/dist/{media-D5zF3vH6.js.map → media-8aMOtckF.js.map} +1 -1
  184. package/dist/{media-C4WtzWxU.cjs → media-D5YGOTm7.cjs} +2 -2
  185. package/dist/{media-C4WtzWxU.cjs.map → media-D5YGOTm7.cjs.map} +1 -1
  186. package/dist/media.cjs +1 -1
  187. package/dist/media.js +3 -3
  188. package/dist/{overlays-D9_8GEse.cjs → overlays-DCj-oV2H.cjs} +2 -2
  189. package/dist/{overlays-D9_8GEse.cjs.map → overlays-DCj-oV2H.cjs.map} +1 -1
  190. package/dist/{overlays-BahWPCPW.js → overlays-gjg00CAf.js} +3 -3
  191. package/dist/{overlays-BahWPCPW.js.map → overlays-gjg00CAf.js.map} +1 -1
  192. package/dist/overlays.cjs +1 -1
  193. package/dist/overlays.js +5 -5
  194. package/dist/style-runtime.cjs +1 -1
  195. package/dist/style-runtime.js +1 -1
  196. package/dist/styles.css +1 -1
  197. package/dist/{typography-BR2o3w3X.js → typography-DKdr1Tds.js} +2 -2
  198. package/dist/{typography-BR2o3w3X.js.map → typography-DKdr1Tds.js.map} +1 -1
  199. package/dist/{typography-BobOsDbn.cjs → typography-qbFGv1gA.cjs} +2 -2
  200. package/dist/{typography-BobOsDbn.cjs.map → typography-qbFGv1gA.cjs.map} +1 -1
  201. package/dist/typography.cjs +1 -1
  202. package/dist/typography.js +5 -5
  203. package/package.json +1 -1
  204. package/dist/dropdowns-CMt9-Jpa.cjs +0 -2
  205. package/dist/layout-C1QKiv2J.cjs +0 -2
  206. package/dist/layout-C1QKiv2J.cjs.map +0 -1
  207. package/dist/layout-UP_12LRD.js.map +0 -1
package/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  Modern React UI framework with a sharp admin aesthetic, theming system, and production-ready components.
4
4
 
5
5
  - npm: `@banzamel/mineralui`
6
- - version: `1.1.1`
6
+ - version: `1.2.0`
7
7
  - peer dependencies: `react >= 19`, `react-dom >= 19`
8
8
  - repository: `https://github.com/Banzamel/mineralui`
9
9
  - homepage: `https://mineralui.io`
@@ -1,6 +1,6 @@
1
1
  import { t as e } from "./cn-YER3QsV1.js";
2
2
  import { t } from "./useInteractionEffect-DtpbVd77.js";
3
- import { n } from "./MButton-BJdrNg2I.js";
3
+ import { n } from "./MButton-BmTDe5Oa.js";
4
4
  import { jsx as r, jsxs as i } from "react/jsx-runtime";
5
5
  //#region src/components/media/MAvatar/MAvatar.tsx
6
6
  function a(e, t) {
@@ -52,4 +52,4 @@ function o({ src: o, alt: s, name: c, initials: l, size: u = "md", shape: d = "c
52
52
  //#endregion
53
53
  export { o as t };
54
54
 
55
- //# sourceMappingURL=MAvatar-tpFpLFPO.js.map
55
+ //# sourceMappingURL=MAvatar-BoO51a6m.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MAvatar-tpFpLFPO.js","names":[],"sources":["../src/components/media/MAvatar/MAvatar.tsx"],"sourcesContent":["import type {CSSProperties} from 'react'\nimport type {MAvatarProps} from './MAvatar.types'\nimport {cn} from '../../../utils/cn'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport {renderOverlayBadge} from '../../../utils/overlayBadge'\nimport './MAvatar.css'\n\nfunction getFallbackInitials(name?: string, initials?: string) {\n if (initials) return initials.slice(0, 2).toUpperCase()\n if (!name) return '?'\n const parts = name.trim().split(/\\s+/).filter(Boolean)\n if (parts.length === 0) return '?'\n if (parts.length === 1) return parts[0].slice(0, 2).toUpperCase()\n return `${parts[0][0]}${parts[1][0]}`.toUpperCase()\n}\n\n// Render user or entity identity as an image with initials fallback.\nexport function MAvatar({\n src,\n alt,\n name,\n initials,\n size = 'md',\n shape = 'circle',\n color,\n badge,\n badgeColor,\n badgePulsing = false,\n backgroundColor,\n clickEffect,\n rippleColor,\n skeleton = false,\n className,\n style,\n onPointerDown,\n ...rest\n}: MAvatarProps) {\n const fallbackInitials = getFallbackInitials(name, initials)\n const isInteractive = typeof rest.onClick === 'function' || rest.role === 'button' || rest.tabIndex !== undefined\n const {effectClassName, effectLayer, handlePointerDown} = useInteractionEffect<HTMLSpanElement>({\n effect: clickEffect ?? (isInteractive ? 'ripple' : 'none'),\n disabled: !isInteractive || skeleton,\n color: rippleColor,\n })\n const inlineStyle: CSSProperties =\n typeof size === 'number'\n ? {\n width: `${size}px`,\n height: `${size}px`,\n ...style,\n ...(backgroundColor && !skeleton ? {backgroundColor} : {}),\n }\n : {\n ...style,\n ...(backgroundColor && !skeleton ? {backgroundColor} : {}),\n }\n\n return (\n <span\n className={cn(\n 'avatar',\n typeof size === 'string' && size,\n shape,\n skeleton && 'skeleton animate',\n isInteractive && !skeleton && 'interactive',\n effectClassName,\n !skeleton && color && `color-${color}`,\n className\n )}\n style={inlineStyle}\n aria-label={skeleton ? 'Loading' : (alt ?? name ?? 'MAvatar')}\n onPointerDown={(event) => {\n handlePointerDown(event)\n onPointerDown?.(event)\n }}\n {...rest}\n >\n {effectLayer}\n {renderOverlayBadge({badge, badgeColor, badgePulsing})}\n {skeleton ? null : src ? (\n <img src={src} alt={alt ?? name ?? ''} className={'image'} />\n ) : (\n <span className={'fallback'}>{fallbackInitials}</span>\n )}\n </span>\n )\n}\n"],"mappings":";;;;;AAOA,SAAS,EAAoB,GAAe,GAAmB;AAC3D,KAAI,EAAU,QAAO,EAAS,MAAM,GAAG,EAAE,CAAC,aAAa;AACvD,KAAI,CAAC,EAAM,QAAO;CAClB,IAAM,IAAQ,EAAK,MAAM,CAAC,MAAM,MAAM,CAAC,OAAO,QAAQ;AAGtD,QAFI,EAAM,WAAW,IAAU,MAC3B,EAAM,WAAW,IAAU,EAAM,GAAG,MAAM,GAAG,EAAE,CAAC,aAAa,GAC1D,GAAG,EAAM,GAAG,KAAK,EAAM,GAAG,KAAK,aAAa;;AAIvD,SAAgB,EAAQ,EACpB,QACA,QACA,SACA,aACA,UAAO,MACP,WAAQ,UACR,UACA,UACA,eACA,kBAAe,IACf,oBACA,gBACA,gBACA,cAAW,IACX,cACA,UACA,kBACA,GAAG,KACU;CACb,IAAM,IAAmB,EAAoB,GAAM,EAAS,EACtD,IAAgB,OAAO,EAAK,WAAY,cAAc,EAAK,SAAS,YAAY,EAAK,aAAa,KAAA,GAClG,EAAC,oBAAiB,gBAAa,yBAAqB,EAAsC;EAC5F,QAAQ,MAAgB,IAAgB,WAAW;EACnD,UAAU,CAAC,KAAiB;EAC5B,OAAO;EACV,CAAC,EACI,IACF,OAAO,KAAS,WACV;EACI,OAAO,GAAG,EAAK;EACf,QAAQ,GAAG,EAAK;EAChB,GAAG;EACH,GAAI,KAAmB,CAAC,IAAW,EAAC,oBAAgB,GAAG,EAAE;EAC5D,GACD;EACI,GAAG;EACH,GAAI,KAAmB,CAAC,IAAW,EAAC,oBAAgB,GAAG,EAAE;EAC5D;AAEX,QACI,kBAAC,QAAD;EACI,WAAW,EACP,UACA,OAAO,KAAS,YAAY,GAC5B,GACA,KAAY,oBACZ,KAAiB,CAAC,KAAY,eAC9B,GACA,CAAC,KAAY,KAAS,SAAS,KAC/B,EACH;EACD,OAAO;EACP,cAAY,IAAW,YAAa,KAAO,KAAQ;EACnD,gBAAgB,MAAU;AAEtB,GADA,EAAkB,EAAM,EACxB,IAAgB,EAAM;;EAE1B,GAAI;YAjBR;GAmBK;GACA,EAAmB;IAAC;IAAO;IAAY;IAAa,CAAC;GACrD,IAAW,OAAO,IACf,kBAAC,OAAD;IAAU;IAAK,KAAK,KAAO,KAAQ;IAAI,WAAW;IAAW,CAAA,GAE7D,kBAAC,QAAD;IAAM,WAAW;cAAa;IAAwB,CAAA;GAEvD"}
1
+ {"version":3,"file":"MAvatar-BoO51a6m.js","names":[],"sources":["../src/components/media/MAvatar/MAvatar.tsx"],"sourcesContent":["import type {CSSProperties} from 'react'\nimport type {MAvatarProps} from './MAvatar.types'\nimport {cn} from '../../../utils/cn'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport {renderOverlayBadge} from '../../../utils/overlayBadge'\nimport './MAvatar.css'\n\nfunction getFallbackInitials(name?: string, initials?: string) {\n if (initials) return initials.slice(0, 2).toUpperCase()\n if (!name) return '?'\n const parts = name.trim().split(/\\s+/).filter(Boolean)\n if (parts.length === 0) return '?'\n if (parts.length === 1) return parts[0].slice(0, 2).toUpperCase()\n return `${parts[0][0]}${parts[1][0]}`.toUpperCase()\n}\n\n// Render user or entity identity as an image with initials fallback.\nexport function MAvatar({\n src,\n alt,\n name,\n initials,\n size = 'md',\n shape = 'circle',\n color,\n badge,\n badgeColor,\n badgePulsing = false,\n backgroundColor,\n clickEffect,\n rippleColor,\n skeleton = false,\n className,\n style,\n onPointerDown,\n ...rest\n}: MAvatarProps) {\n const fallbackInitials = getFallbackInitials(name, initials)\n const isInteractive = typeof rest.onClick === 'function' || rest.role === 'button' || rest.tabIndex !== undefined\n const {effectClassName, effectLayer, handlePointerDown} = useInteractionEffect<HTMLSpanElement>({\n effect: clickEffect ?? (isInteractive ? 'ripple' : 'none'),\n disabled: !isInteractive || skeleton,\n color: rippleColor,\n })\n const inlineStyle: CSSProperties =\n typeof size === 'number'\n ? {\n width: `${size}px`,\n height: `${size}px`,\n ...style,\n ...(backgroundColor && !skeleton ? {backgroundColor} : {}),\n }\n : {\n ...style,\n ...(backgroundColor && !skeleton ? {backgroundColor} : {}),\n }\n\n return (\n <span\n className={cn(\n 'avatar',\n typeof size === 'string' && size,\n shape,\n skeleton && 'skeleton animate',\n isInteractive && !skeleton && 'interactive',\n effectClassName,\n !skeleton && color && `color-${color}`,\n className\n )}\n style={inlineStyle}\n aria-label={skeleton ? 'Loading' : (alt ?? name ?? 'MAvatar')}\n onPointerDown={(event) => {\n handlePointerDown(event)\n onPointerDown?.(event)\n }}\n {...rest}\n >\n {effectLayer}\n {renderOverlayBadge({badge, badgeColor, badgePulsing})}\n {skeleton ? null : src ? (\n <img src={src} alt={alt ?? name ?? ''} className={'image'} />\n ) : (\n <span className={'fallback'}>{fallbackInitials}</span>\n )}\n </span>\n )\n}\n"],"mappings":";;;;;AAOA,SAAS,EAAoB,GAAe,GAAmB;AAC3D,KAAI,EAAU,QAAO,EAAS,MAAM,GAAG,EAAE,CAAC,aAAa;AACvD,KAAI,CAAC,EAAM,QAAO;CAClB,IAAM,IAAQ,EAAK,MAAM,CAAC,MAAM,MAAM,CAAC,OAAO,QAAQ;AAGtD,QAFI,EAAM,WAAW,IAAU,MAC3B,EAAM,WAAW,IAAU,EAAM,GAAG,MAAM,GAAG,EAAE,CAAC,aAAa,GAC1D,GAAG,EAAM,GAAG,KAAK,EAAM,GAAG,KAAK,aAAa;;AAIvD,SAAgB,EAAQ,EACpB,QACA,QACA,SACA,aACA,UAAO,MACP,WAAQ,UACR,UACA,UACA,eACA,kBAAe,IACf,oBACA,gBACA,gBACA,cAAW,IACX,cACA,UACA,kBACA,GAAG,KACU;CACb,IAAM,IAAmB,EAAoB,GAAM,EAAS,EACtD,IAAgB,OAAO,EAAK,WAAY,cAAc,EAAK,SAAS,YAAY,EAAK,aAAa,KAAA,GAClG,EAAC,oBAAiB,gBAAa,yBAAqB,EAAsC;EAC5F,QAAQ,MAAgB,IAAgB,WAAW;EACnD,UAAU,CAAC,KAAiB;EAC5B,OAAO;EACV,CAAC,EACI,IACF,OAAO,KAAS,WACV;EACI,OAAO,GAAG,EAAK;EACf,QAAQ,GAAG,EAAK;EAChB,GAAG;EACH,GAAI,KAAmB,CAAC,IAAW,EAAC,oBAAgB,GAAG,EAAE;EAC5D,GACD;EACI,GAAG;EACH,GAAI,KAAmB,CAAC,IAAW,EAAC,oBAAgB,GAAG,EAAE;EAC5D;AAEX,QACI,kBAAC,QAAD;EACI,WAAW,EACP,UACA,OAAO,KAAS,YAAY,GAC5B,GACA,KAAY,oBACZ,KAAiB,CAAC,KAAY,eAC9B,GACA,CAAC,KAAY,KAAS,SAAS,KAC/B,EACH;EACD,OAAO;EACP,cAAY,IAAW,YAAa,KAAO,KAAQ;EACnD,gBAAgB,MAAU;AAEtB,GADA,EAAkB,EAAM,EACxB,IAAgB,EAAM;;EAE1B,GAAI;YAjBR;GAmBK;GACA,EAAmB;IAAC;IAAO;IAAY;IAAa,CAAC;GACrD,IAAW,OAAO,IACf,kBAAC,OAAD;IAAU;IAAK,KAAK,KAAO,KAAQ;IAAI,WAAW;IAAW,CAAA,GAE7D,kBAAC,QAAD;IAAM,WAAW;cAAa;IAAwB,CAAA;GAEvD"}
@@ -1,2 +1,2 @@
1
- const e=require(`./cn-CU5TNITO.cjs`),t=require(`./useInteractionEffect-DnEfbCrX.cjs`),n=require(`./MButton-CX8SV1m0.cjs`);let r=require(`react/jsx-runtime`);function i(e,t){if(t)return t.slice(0,2).toUpperCase();if(!e)return`?`;let n=e.trim().split(/\s+/).filter(Boolean);return n.length===0?`?`:n.length===1?n[0].slice(0,2).toUpperCase():`${n[0][0]}${n[1][0]}`.toUpperCase()}function a({src:a,alt:o,name:s,initials:c,size:l=`md`,shape:u=`circle`,color:d,badge:f,badgeColor:p,badgePulsing:m=!1,backgroundColor:h,clickEffect:g,rippleColor:_,skeleton:v=!1,className:y,style:b,onPointerDown:x,...S}){let C=i(s,c),w=typeof S.onClick==`function`||S.role===`button`||S.tabIndex!==void 0,{effectClassName:T,effectLayer:E,handlePointerDown:D}=t.t({effect:g??(w?`ripple`:`none`),disabled:!w||v,color:_}),O=typeof l==`number`?{width:`${l}px`,height:`${l}px`,...b,...h&&!v?{backgroundColor:h}:{}}:{...b,...h&&!v?{backgroundColor:h}:{}};return(0,r.jsxs)(`span`,{className:e.t(`avatar`,typeof l==`string`&&l,u,v&&`skeleton animate`,w&&!v&&`interactive`,T,!v&&d&&`color-${d}`,y),style:O,"aria-label":v?`Loading`:o??s??`MAvatar`,onPointerDown:e=>{D(e),x?.(e)},...S,children:[E,n.n({badge:f,badgeColor:p,badgePulsing:m}),v?null:a?(0,r.jsx)(`img`,{src:a,alt:o??s??``,className:`image`}):(0,r.jsx)(`span`,{className:`fallback`,children:C})]})}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return a}});
2
- //# sourceMappingURL=MAvatar-nLlGAprq.cjs.map
1
+ const e=require(`./cn-CU5TNITO.cjs`),t=require(`./useInteractionEffect-DnEfbCrX.cjs`),n=require(`./MButton-B8rXmFX9.cjs`);let r=require(`react/jsx-runtime`);function i(e,t){if(t)return t.slice(0,2).toUpperCase();if(!e)return`?`;let n=e.trim().split(/\s+/).filter(Boolean);return n.length===0?`?`:n.length===1?n[0].slice(0,2).toUpperCase():`${n[0][0]}${n[1][0]}`.toUpperCase()}function a({src:a,alt:o,name:s,initials:c,size:l=`md`,shape:u=`circle`,color:d,badge:f,badgeColor:p,badgePulsing:m=!1,backgroundColor:h,clickEffect:g,rippleColor:_,skeleton:v=!1,className:y,style:b,onPointerDown:x,...S}){let C=i(s,c),w=typeof S.onClick==`function`||S.role===`button`||S.tabIndex!==void 0,{effectClassName:T,effectLayer:E,handlePointerDown:D}=t.t({effect:g??(w?`ripple`:`none`),disabled:!w||v,color:_}),O=typeof l==`number`?{width:`${l}px`,height:`${l}px`,...b,...h&&!v?{backgroundColor:h}:{}}:{...b,...h&&!v?{backgroundColor:h}:{}};return(0,r.jsxs)(`span`,{className:e.t(`avatar`,typeof l==`string`&&l,u,v&&`skeleton animate`,w&&!v&&`interactive`,T,!v&&d&&`color-${d}`,y),style:O,"aria-label":v?`Loading`:o??s??`MAvatar`,onPointerDown:e=>{D(e),x?.(e)},...S,children:[E,n.n({badge:f,badgeColor:p,badgePulsing:m}),v?null:a?(0,r.jsx)(`img`,{src:a,alt:o??s??``,className:`image`}):(0,r.jsx)(`span`,{className:`fallback`,children:C})]})}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return a}});
2
+ //# sourceMappingURL=MAvatar-DJKtca9j.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"MAvatar-nLlGAprq.cjs","names":[],"sources":["../src/components/media/MAvatar/MAvatar.tsx"],"sourcesContent":["import type {CSSProperties} from 'react'\nimport type {MAvatarProps} from './MAvatar.types'\nimport {cn} from '../../../utils/cn'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport {renderOverlayBadge} from '../../../utils/overlayBadge'\nimport './MAvatar.css'\n\nfunction getFallbackInitials(name?: string, initials?: string) {\n if (initials) return initials.slice(0, 2).toUpperCase()\n if (!name) return '?'\n const parts = name.trim().split(/\\s+/).filter(Boolean)\n if (parts.length === 0) return '?'\n if (parts.length === 1) return parts[0].slice(0, 2).toUpperCase()\n return `${parts[0][0]}${parts[1][0]}`.toUpperCase()\n}\n\n// Render user or entity identity as an image with initials fallback.\nexport function MAvatar({\n src,\n alt,\n name,\n initials,\n size = 'md',\n shape = 'circle',\n color,\n badge,\n badgeColor,\n badgePulsing = false,\n backgroundColor,\n clickEffect,\n rippleColor,\n skeleton = false,\n className,\n style,\n onPointerDown,\n ...rest\n}: MAvatarProps) {\n const fallbackInitials = getFallbackInitials(name, initials)\n const isInteractive = typeof rest.onClick === 'function' || rest.role === 'button' || rest.tabIndex !== undefined\n const {effectClassName, effectLayer, handlePointerDown} = useInteractionEffect<HTMLSpanElement>({\n effect: clickEffect ?? (isInteractive ? 'ripple' : 'none'),\n disabled: !isInteractive || skeleton,\n color: rippleColor,\n })\n const inlineStyle: CSSProperties =\n typeof size === 'number'\n ? {\n width: `${size}px`,\n height: `${size}px`,\n ...style,\n ...(backgroundColor && !skeleton ? {backgroundColor} : {}),\n }\n : {\n ...style,\n ...(backgroundColor && !skeleton ? {backgroundColor} : {}),\n }\n\n return (\n <span\n className={cn(\n 'avatar',\n typeof size === 'string' && size,\n shape,\n skeleton && 'skeleton animate',\n isInteractive && !skeleton && 'interactive',\n effectClassName,\n !skeleton && color && `color-${color}`,\n className\n )}\n style={inlineStyle}\n aria-label={skeleton ? 'Loading' : (alt ?? name ?? 'MAvatar')}\n onPointerDown={(event) => {\n handlePointerDown(event)\n onPointerDown?.(event)\n }}\n {...rest}\n >\n {effectLayer}\n {renderOverlayBadge({badge, badgeColor, badgePulsing})}\n {skeleton ? null : src ? (\n <img src={src} alt={alt ?? name ?? ''} className={'image'} />\n ) : (\n <span className={'fallback'}>{fallbackInitials}</span>\n )}\n </span>\n )\n}\n"],"mappings":"6JAOA,SAAS,EAAoB,EAAe,EAAmB,CAC3D,GAAI,EAAU,OAAO,EAAS,MAAM,EAAG,EAAE,CAAC,aAAa,CACvD,GAAI,CAAC,EAAM,MAAO,IAClB,IAAM,EAAQ,EAAK,MAAM,CAAC,MAAM,MAAM,CAAC,OAAO,QAAQ,CAGtD,OAFI,EAAM,SAAW,EAAU,IAC3B,EAAM,SAAW,EAAU,EAAM,GAAG,MAAM,EAAG,EAAE,CAAC,aAAa,CAC1D,GAAG,EAAM,GAAG,KAAK,EAAM,GAAG,KAAK,aAAa,CAIvD,SAAgB,EAAQ,CACpB,MACA,MACA,OACA,WACA,OAAO,KACP,QAAQ,SACR,QACA,QACA,aACA,eAAe,GACf,kBACA,cACA,cACA,WAAW,GACX,YACA,QACA,gBACA,GAAG,GACU,CACb,IAAM,EAAmB,EAAoB,EAAM,EAAS,CACtD,EAAgB,OAAO,EAAK,SAAY,YAAc,EAAK,OAAS,UAAY,EAAK,WAAa,IAAA,GAClG,CAAC,kBAAiB,cAAa,qBAAqB,EAAA,EAAsC,CAC5F,OAAQ,IAAgB,EAAgB,SAAW,QACnD,SAAU,CAAC,GAAiB,EAC5B,MAAO,EACV,CAAC,CACI,EACF,OAAO,GAAS,SACV,CACI,MAAO,GAAG,EAAK,IACf,OAAQ,GAAG,EAAK,IAChB,GAAG,EACH,GAAI,GAAmB,CAAC,EAAW,CAAC,kBAAgB,CAAG,EAAE,CAC5D,CACD,CACI,GAAG,EACH,GAAI,GAAmB,CAAC,EAAW,CAAC,kBAAgB,CAAG,EAAE,CAC5D,CAEX,OACI,EAAA,EAAA,MAAC,OAAD,CACI,UAAW,EAAA,EACP,SACA,OAAO,GAAS,UAAY,EAC5B,EACA,GAAY,mBACZ,GAAiB,CAAC,GAAY,cAC9B,EACA,CAAC,GAAY,GAAS,SAAS,IAC/B,EACH,CACD,MAAO,EACP,aAAY,EAAW,UAAa,GAAO,GAAQ,UACnD,cAAgB,GAAU,CACtB,EAAkB,EAAM,CACxB,IAAgB,EAAM,EAE1B,GAAI,WAjBR,CAmBK,EACA,EAAA,EAAmB,CAAC,QAAO,aAAY,eAAa,CAAC,CACrD,EAAW,KAAO,GACf,EAAA,EAAA,KAAC,MAAD,CAAU,MAAK,IAAK,GAAO,GAAQ,GAAI,UAAW,QAAW,CAAA,EAE7D,EAAA,EAAA,KAAC,OAAD,CAAM,UAAW,oBAAa,EAAwB,CAAA,CAEvD"}
1
+ {"version":3,"file":"MAvatar-DJKtca9j.cjs","names":[],"sources":["../src/components/media/MAvatar/MAvatar.tsx"],"sourcesContent":["import type {CSSProperties} from 'react'\nimport type {MAvatarProps} from './MAvatar.types'\nimport {cn} from '../../../utils/cn'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport {renderOverlayBadge} from '../../../utils/overlayBadge'\nimport './MAvatar.css'\n\nfunction getFallbackInitials(name?: string, initials?: string) {\n if (initials) return initials.slice(0, 2).toUpperCase()\n if (!name) return '?'\n const parts = name.trim().split(/\\s+/).filter(Boolean)\n if (parts.length === 0) return '?'\n if (parts.length === 1) return parts[0].slice(0, 2).toUpperCase()\n return `${parts[0][0]}${parts[1][0]}`.toUpperCase()\n}\n\n// Render user or entity identity as an image with initials fallback.\nexport function MAvatar({\n src,\n alt,\n name,\n initials,\n size = 'md',\n shape = 'circle',\n color,\n badge,\n badgeColor,\n badgePulsing = false,\n backgroundColor,\n clickEffect,\n rippleColor,\n skeleton = false,\n className,\n style,\n onPointerDown,\n ...rest\n}: MAvatarProps) {\n const fallbackInitials = getFallbackInitials(name, initials)\n const isInteractive = typeof rest.onClick === 'function' || rest.role === 'button' || rest.tabIndex !== undefined\n const {effectClassName, effectLayer, handlePointerDown} = useInteractionEffect<HTMLSpanElement>({\n effect: clickEffect ?? (isInteractive ? 'ripple' : 'none'),\n disabled: !isInteractive || skeleton,\n color: rippleColor,\n })\n const inlineStyle: CSSProperties =\n typeof size === 'number'\n ? {\n width: `${size}px`,\n height: `${size}px`,\n ...style,\n ...(backgroundColor && !skeleton ? {backgroundColor} : {}),\n }\n : {\n ...style,\n ...(backgroundColor && !skeleton ? {backgroundColor} : {}),\n }\n\n return (\n <span\n className={cn(\n 'avatar',\n typeof size === 'string' && size,\n shape,\n skeleton && 'skeleton animate',\n isInteractive && !skeleton && 'interactive',\n effectClassName,\n !skeleton && color && `color-${color}`,\n className\n )}\n style={inlineStyle}\n aria-label={skeleton ? 'Loading' : (alt ?? name ?? 'MAvatar')}\n onPointerDown={(event) => {\n handlePointerDown(event)\n onPointerDown?.(event)\n }}\n {...rest}\n >\n {effectLayer}\n {renderOverlayBadge({badge, badgeColor, badgePulsing})}\n {skeleton ? null : src ? (\n <img src={src} alt={alt ?? name ?? ''} className={'image'} />\n ) : (\n <span className={'fallback'}>{fallbackInitials}</span>\n )}\n </span>\n )\n}\n"],"mappings":"6JAOA,SAAS,EAAoB,EAAe,EAAmB,CAC3D,GAAI,EAAU,OAAO,EAAS,MAAM,EAAG,EAAE,CAAC,aAAa,CACvD,GAAI,CAAC,EAAM,MAAO,IAClB,IAAM,EAAQ,EAAK,MAAM,CAAC,MAAM,MAAM,CAAC,OAAO,QAAQ,CAGtD,OAFI,EAAM,SAAW,EAAU,IAC3B,EAAM,SAAW,EAAU,EAAM,GAAG,MAAM,EAAG,EAAE,CAAC,aAAa,CAC1D,GAAG,EAAM,GAAG,KAAK,EAAM,GAAG,KAAK,aAAa,CAIvD,SAAgB,EAAQ,CACpB,MACA,MACA,OACA,WACA,OAAO,KACP,QAAQ,SACR,QACA,QACA,aACA,eAAe,GACf,kBACA,cACA,cACA,WAAW,GACX,YACA,QACA,gBACA,GAAG,GACU,CACb,IAAM,EAAmB,EAAoB,EAAM,EAAS,CACtD,EAAgB,OAAO,EAAK,SAAY,YAAc,EAAK,OAAS,UAAY,EAAK,WAAa,IAAA,GAClG,CAAC,kBAAiB,cAAa,qBAAqB,EAAA,EAAsC,CAC5F,OAAQ,IAAgB,EAAgB,SAAW,QACnD,SAAU,CAAC,GAAiB,EAC5B,MAAO,EACV,CAAC,CACI,EACF,OAAO,GAAS,SACV,CACI,MAAO,GAAG,EAAK,IACf,OAAQ,GAAG,EAAK,IAChB,GAAG,EACH,GAAI,GAAmB,CAAC,EAAW,CAAC,kBAAgB,CAAG,EAAE,CAC5D,CACD,CACI,GAAG,EACH,GAAI,GAAmB,CAAC,EAAW,CAAC,kBAAgB,CAAG,EAAE,CAC5D,CAEX,OACI,EAAA,EAAA,MAAC,OAAD,CACI,UAAW,EAAA,EACP,SACA,OAAO,GAAS,UAAY,EAC5B,EACA,GAAY,mBACZ,GAAiB,CAAC,GAAY,cAC9B,EACA,CAAC,GAAY,GAAS,SAAS,IAC/B,EACH,CACD,MAAO,EACP,aAAY,EAAW,UAAa,GAAO,GAAQ,UACnD,cAAgB,GAAU,CACtB,EAAkB,EAAM,CACxB,IAAgB,EAAM,EAE1B,GAAI,WAjBR,CAmBK,EACA,EAAA,EAAmB,CAAC,QAAO,aAAY,eAAa,CAAC,CACrD,EAAW,KAAO,GACf,EAAA,EAAA,KAAC,MAAD,CAAU,MAAK,IAAK,GAAO,GAAQ,GAAI,UAAW,QAAW,CAAA,EAE7D,EAAA,EAAA,KAAC,OAAD,CAAM,UAAW,oBAAa,EAAwB,CAAA,CAEvD"}
@@ -1,2 +1,2 @@
1
1
  const e=require(`./cn-CU5TNITO.cjs`);let t=require(`react/jsx-runtime`);function n({color:n=`primary`,size:r=`md`,pulsing:i=!1,rounded:a=!1,fullWidth:o=!1,icon:s,className:c,children:l,...u}){return(0,t.jsxs)(`span`,{className:e.t(`badge`,`color-${n}`,r,i&&`pulsing`,a&&`rounded`,o&&`full-width`,c),...u,children:[s&&(0,t.jsx)(`span`,{className:`badge-icon`,children:s}),l]})}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return n}});
2
- //# sourceMappingURL=MBadge-imAk1gYn.cjs.map
2
+ //# sourceMappingURL=MBadge-CexVV675.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"MBadge-imAk1gYn.cjs","names":[],"sources":["../src/components/feedback/MBadge/MBadge.tsx"],"sourcesContent":["import type {MBadgeProps} from './MBadge.types'\nimport {cn} from '../../../utils/cn'\nimport './MBadge.css'\n\n// Render a compact semantic label for status and metadata.\nexport function MBadge({\n color = 'primary',\n size = 'md',\n pulsing = false,\n rounded = false,\n fullWidth = false,\n icon,\n className,\n children,\n ...rest\n}: MBadgeProps) {\n return (\n <span\n className={cn(\n 'badge',\n `color-${color}`,\n size,\n pulsing && 'pulsing',\n rounded && 'rounded',\n fullWidth && 'full-width',\n className\n )}\n {...rest}\n >\n {icon && <span className=\"badge-icon\">{icon}</span>}\n {children}\n </span>\n )\n}\n"],"mappings":"wEAKA,SAAgB,EAAO,CACnB,QAAQ,UACR,OAAO,KACP,UAAU,GACV,UAAU,GACV,YAAY,GACZ,OACA,YACA,WACA,GAAG,GACS,CACZ,OACI,EAAA,EAAA,MAAC,OAAD,CACI,UAAW,EAAA,EACP,QACA,SAAS,IACT,EACA,GAAW,UACX,GAAW,UACX,GAAa,aACb,EACH,CACD,GAAI,WAVR,CAYK,IAAQ,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,sBAAc,EAAY,CAAA,CAClD,EACE"}
1
+ {"version":3,"file":"MBadge-CexVV675.cjs","names":[],"sources":["../src/components/feedback/MBadge/MBadge.tsx"],"sourcesContent":["import type {MBadgeProps} from './MBadge.types'\nimport {cn} from '../../../utils/cn'\nimport './MBadge.css'\n\n// Render a compact semantic label for status and metadata.\nexport function MBadge({\n color = 'primary',\n size = 'md',\n pulsing = false,\n rounded = false,\n fullWidth = false,\n icon,\n className,\n children,\n ...rest\n}: MBadgeProps) {\n return (\n <span\n className={cn(\n 'badge',\n `color-${color}`,\n size,\n pulsing && 'pulsing',\n rounded && 'rounded',\n fullWidth && 'full-width',\n className\n )}\n {...rest}\n >\n {icon && <span className=\"badge-icon\">{icon}</span>}\n {children}\n </span>\n )\n}\n"],"mappings":"wEAKA,SAAgB,EAAO,CACnB,QAAQ,UACR,OAAO,KACP,UAAU,GACV,UAAU,GACV,YAAY,GACZ,OACA,YACA,WACA,GAAG,GACS,CACZ,OACI,EAAA,EAAA,MAAC,OAAD,CACI,UAAW,EAAA,EACP,QACA,SAAS,IACT,EACA,GAAW,UACX,GAAW,UACX,GAAa,aACb,EACH,CACD,GAAI,WAVR,CAYK,IAAQ,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,sBAAc,EAAY,CAAA,CAClD,EACE"}
@@ -14,4 +14,4 @@ function r({ color: r = "primary", size: i = "md", pulsing: a = !1, rounded: o =
14
14
  //#endregion
15
15
  export { r as t };
16
16
 
17
- //# sourceMappingURL=MBadge-UTUlEAik.js.map
17
+ //# sourceMappingURL=MBadge-Y1JnZiIC.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MBadge-UTUlEAik.js","names":[],"sources":["../src/components/feedback/MBadge/MBadge.tsx"],"sourcesContent":["import type {MBadgeProps} from './MBadge.types'\nimport {cn} from '../../../utils/cn'\nimport './MBadge.css'\n\n// Render a compact semantic label for status and metadata.\nexport function MBadge({\n color = 'primary',\n size = 'md',\n pulsing = false,\n rounded = false,\n fullWidth = false,\n icon,\n className,\n children,\n ...rest\n}: MBadgeProps) {\n return (\n <span\n className={cn(\n 'badge',\n `color-${color}`,\n size,\n pulsing && 'pulsing',\n rounded && 'rounded',\n fullWidth && 'full-width',\n className\n )}\n {...rest}\n >\n {icon && <span className=\"badge-icon\">{icon}</span>}\n {children}\n </span>\n )\n}\n"],"mappings":";;;AAKA,SAAgB,EAAO,EACnB,WAAQ,WACR,UAAO,MACP,aAAU,IACV,aAAU,IACV,eAAY,IACZ,SACA,cACA,aACA,GAAG,KACS;AACZ,QACI,kBAAC,QAAD;EACI,WAAW,EACP,SACA,SAAS,KACT,GACA,KAAW,WACX,KAAW,WACX,KAAa,cACb,EACH;EACD,GAAI;YAVR,CAYK,KAAQ,kBAAC,QAAD;GAAM,WAAU;aAAc;GAAY,CAAA,EAClD,EACE"}
1
+ {"version":3,"file":"MBadge-Y1JnZiIC.js","names":[],"sources":["../src/components/feedback/MBadge/MBadge.tsx"],"sourcesContent":["import type {MBadgeProps} from './MBadge.types'\nimport {cn} from '../../../utils/cn'\nimport './MBadge.css'\n\n// Render a compact semantic label for status and metadata.\nexport function MBadge({\n color = 'primary',\n size = 'md',\n pulsing = false,\n rounded = false,\n fullWidth = false,\n icon,\n className,\n children,\n ...rest\n}: MBadgeProps) {\n return (\n <span\n className={cn(\n 'badge',\n `color-${color}`,\n size,\n pulsing && 'pulsing',\n rounded && 'rounded',\n fullWidth && 'full-width',\n className\n )}\n {...rest}\n >\n {icon && <span className=\"badge-icon\">{icon}</span>}\n {children}\n </span>\n )\n}\n"],"mappings":";;;AAKA,SAAgB,EAAO,EACnB,WAAQ,WACR,UAAO,MACP,aAAU,IACV,aAAU,IACV,eAAY,IACZ,SACA,cACA,aACA,GAAG,KACS;AACZ,QACI,kBAAC,QAAD;EACI,WAAW,EACP,SACA,SAAS,KACT,GACA,KAAW,WACX,KAAW,WACX,KAAa,cACb,EACH;EACD,GAAI;YAVR,CAYK,KAAQ,kBAAC,QAAD;GAAM,WAAU;aAAc;GAAY,CAAA,EAClD,EACE"}
@@ -1,2 +1,2 @@
1
1
  const e=require(`./cn-CU5TNITO.cjs`),t=require(`./useInteractionEffect-DnEfbCrX.cjs`);let n=require(`react`),r=require(`react/jsx-runtime`);var i=(0,n.createContext)(null);function a(){return(0,n.useContext)(i)}function o({color:t=`primary`,size:n=`md`,label:i=`Loading`,className:a,style:o,...s}){let c=typeof n==`number`?{width:`${n}px`,height:`${n}px`,...o}:o||{};return(0,r.jsx)(`span`,{className:e.t(`spinner`,typeof n==`string`&&n,t&&`color-${t}`,a),style:c,role:`status`,"aria-label":i,...s})}function s(e){return e!=null&&e!==!1}function c({badge:e,badgeColor:t,badgePulsing:n}){return s(e)}function l({badge:t,badgeColor:n=`primary`,badgePulsing:i=!1,className:a}){if(!c({badge:t,badgeColor:n,badgePulsing:i}))return null;let o=t===!0;return(0,r.jsx)(`span`,{className:e.t(`overlay-badge`,`color-${n}`,o&&`dot`,i&&`pulsing`,a),"aria-hidden":`true`,children:o?null:t})}var u=(0,n.forwardRef)(function({component:n,to:i,href:s,variant:c,size:u,color:d,fullWidth:f=!1,rounded:p=!1,shape:m,iconOnly:h=!1,loading:g=!1,active:_=!1,pulsing:v=!1,badge:y,badgeColor:b,badgePulsing:x=!1,startIcon:S,endIcon:C,clickEffect:w=`ripple`,rippleColor:T,className:E,style:D,children:O,disabled:k=!1,type:A=`button`,onClick:j,onPointerDown:M,onKeyDown:N,...P},F){let I=n??`button`,L=!n||I===`button`,R=a(),z=c??R?.variant??`filled`,B=u??R?.size??`md`,V=d??R?.color??`primary`,H=k||g,{effectClassName:U,effectLayer:W,handlePointerDown:G,triggerEffect:K}=t.t({effect:w,disabled:H,centered:h,color:T});function q(e){if(H&&!L){e.preventDefault();return}j?.(e)}return(0,r.jsxs)(I,{ref:F,type:L?A:void 0,to:n?H?void 0:i:void 0,href:n?H?void 0:s:void 0,className:e.t(`button`,z,B,`color-${V}`,f&&`full-width`,p&&`rounded`,m===`circle`&&`circle`,h&&`icon-only`,g&&`loading`,_&&`active`,v&&`pulsing`,H&&`disabled`,U,E),style:D,disabled:L?H:void 0,"aria-busy":g||void 0,"aria-disabled":!L&&H?!0:void 0,onClick:q,onPointerDown:e=>{G(e),M?.(e)},onKeyDown:e=>{(e.key===` `||e.key===`Enter`)&&K(e.currentTarget),N?.(e)},...P,children:[W,l({badge:y,badgeColor:b,badgePulsing:x}),g&&(0,r.jsx)(o,{size:`sm`,color:`inherit`,"aria-hidden":`true`}),S&&(0,r.jsx)(`span`,{className:`icon start`,children:S}),O&&(0,r.jsx)(`span`,{className:`content`,children:O}),C&&(0,r.jsx)(`span`,{className:`icon end`,children:C})]})});Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return u}});
2
- //# sourceMappingURL=MButton-CX8SV1m0.cjs.map
2
+ //# sourceMappingURL=MButton-B8rXmFX9.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"MButton-CX8SV1m0.cjs","names":[],"sources":["../src/components/controls/MButtonGroup/MButtonGroupContext.ts","../src/components/feedback/MSpinner/MSpinner.tsx","../src/utils/overlayBadge.tsx","../src/components/controls/MButton/MButton.tsx"],"sourcesContent":["import {createContext, useContext} from 'react'\nimport type {MButtonVariant} from '../MButton/MButton.types'\nimport type {MColor, MSize} from '../../../theme'\n\nexport interface MButtonGroupContextValue {\n variant?: MButtonVariant\n size?: MSize\n color?: MColor\n}\n\nexport const ButtonGroupContext = createContext<MButtonGroupContextValue | null>(null)\n\nexport function useButtonGroup(): MButtonGroupContextValue | null {\n return useContext(ButtonGroupContext)\n}\n","import type {CSSProperties} from 'react'\nimport type {MSpinnerProps} from './MSpinner.types'\nimport {cn} from '../../../utils/cn'\nimport './MSpinner.css'\n\n// Render a minimal semantic loading indicator with token-aware sizing and color.\nexport function MSpinner({\n color = 'primary',\n size = 'md',\n label = 'Loading',\n className,\n style,\n ...rest\n}: MSpinnerProps) {\n const inlineStyle: CSSProperties =\n typeof size === 'number'\n ? {\n width: `${size}px`,\n height: `${size}px`,\n ...style,\n }\n : style || {}\n\n return (\n <span\n className={cn('spinner', typeof size === 'string' && size, color && `color-${color}`, className)}\n style={inlineStyle}\n role=\"status\"\n aria-label={label}\n {...rest}\n />\n )\n}\n","import type {ReactNode} from 'react'\nimport type {MColor} from '../theme'\nimport {cn} from './cn'\n\nexport interface MOverlayBadgeProps {\n badge?: ReactNode | number | boolean\n badgeColor?: MColor\n badgePulsing?: boolean\n className?: string\n}\n\nfunction hasBadgeContent(badge: MOverlayBadgeProps['badge']) {\n return badge !== undefined && badge !== null && badge !== false\n}\n\nexport function shouldRenderOverlayBadge({badge, badgeColor, badgePulsing}: MOverlayBadgeProps) {\n return hasBadgeContent(badge)\n}\n\nexport function renderOverlayBadge({\n badge,\n badgeColor = 'primary',\n badgePulsing = false,\n className,\n}: MOverlayBadgeProps) {\n if (!shouldRenderOverlayBadge({badge, badgeColor, badgePulsing})) {\n return null\n }\n\n const dotOnly = badge === true\n\n return (\n <span\n className={cn(\n 'overlay-badge',\n `color-${badgeColor}`,\n dotOnly && 'dot',\n badgePulsing && 'pulsing',\n className\n )}\n aria-hidden=\"true\"\n >\n {dotOnly ? null : badge}\n </span>\n )\n}\n","import {forwardRef} from 'react'\nimport type {KeyboardEvent, MouseEvent, PointerEvent} from 'react'\nimport type {MButtonProps} from './MButton.types'\nimport {useButtonGroup} from '../MButtonGroup/MButtonGroupContext'\nimport {MSpinner} from '../../feedback'\nimport {cn} from '../../../utils/cn'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport {renderOverlayBadge} from '../../../utils/overlayBadge'\nimport './MButton.css'\n\n// Render the main action primitive with semantic variants and built-in click feedback.\nexport const MButton = forwardRef<HTMLElement, MButtonProps>(function MButton(\n {\n component,\n to,\n href,\n variant: variantProp,\n size: sizeProp,\n color: colorProp,\n fullWidth = false,\n rounded = false,\n shape,\n iconOnly = false,\n loading = false,\n active = false,\n pulsing = false,\n badge,\n badgeColor,\n badgePulsing = false,\n startIcon,\n endIcon,\n clickEffect = 'ripple',\n rippleColor,\n className,\n style,\n children,\n disabled = false,\n type = 'button',\n onClick,\n onPointerDown,\n onKeyDown,\n ...rest\n },\n ref\n) {\n const Component = component ?? 'button'\n const isNativeButton = !component || Component === 'button'\n const group = useButtonGroup()\n const variant = variantProp ?? group?.variant ?? 'filled'\n const size = sizeProp ?? group?.size ?? 'md'\n const color = colorProp ?? group?.color ?? 'primary'\n\n const isDisabled = disabled || loading\n const {effectClassName, effectLayer, handlePointerDown, triggerEffect} = useInteractionEffect<HTMLElement>({\n effect: clickEffect,\n disabled: isDisabled,\n centered: iconOnly,\n color: rippleColor,\n })\n\n function handleClick(event: MouseEvent<HTMLElement>) {\n if (isDisabled && !isNativeButton) {\n event.preventDefault()\n return\n }\n\n onClick?.(event as never)\n }\n\n return (\n <Component\n ref={ref}\n type={isNativeButton ? type : undefined}\n to={component ? (isDisabled ? undefined : to) : undefined}\n href={component ? (isDisabled ? undefined : href) : undefined}\n className={cn(\n 'button',\n variant,\n size,\n `color-${color}`,\n fullWidth && 'full-width',\n rounded && 'rounded',\n shape === 'circle' && 'circle',\n iconOnly && 'icon-only',\n loading && 'loading',\n active && 'active',\n pulsing && 'pulsing',\n isDisabled && 'disabled',\n effectClassName,\n className\n )}\n style={style}\n disabled={isNativeButton ? isDisabled : undefined}\n aria-busy={loading || undefined}\n aria-disabled={!isNativeButton && isDisabled ? true : undefined}\n onClick={handleClick}\n onPointerDown={(event: PointerEvent<HTMLElement>) => {\n handlePointerDown(event as never)\n onPointerDown?.(event as never)\n }}\n onKeyDown={(event: KeyboardEvent<HTMLElement>) => {\n if (event.key === ' ' || event.key === 'Enter') {\n triggerEffect(event.currentTarget as HTMLElement)\n }\n\n onKeyDown?.(event as never)\n }}\n {...rest}\n >\n {effectLayer}\n {renderOverlayBadge({badge, badgeColor, badgePulsing})}\n {loading && <MSpinner size=\"sm\" color=\"inherit\" aria-hidden=\"true\" />}\n {startIcon && <span className=\"icon start\">{startIcon}</span>}\n {children && <span className=\"content\">{children}</span>}\n {endIcon && <span className=\"icon end\">{endIcon}</span>}\n </Component>\n )\n})\n"],"mappings":"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"}
1
+ {"version":3,"file":"MButton-B8rXmFX9.cjs","names":[],"sources":["../src/components/controls/MButtonGroup/MButtonGroupContext.ts","../src/components/feedback/MSpinner/MSpinner.tsx","../src/utils/overlayBadge.tsx","../src/components/controls/MButton/MButton.tsx"],"sourcesContent":["import {createContext, useContext} from 'react'\nimport type {MButtonVariant} from '../MButton/MButton.types'\nimport type {MColor, MSize} from '../../../theme'\n\nexport interface MButtonGroupContextValue {\n variant?: MButtonVariant\n size?: MSize\n color?: MColor\n}\n\nexport const ButtonGroupContext = createContext<MButtonGroupContextValue | null>(null)\n\nexport function useButtonGroup(): MButtonGroupContextValue | null {\n return useContext(ButtonGroupContext)\n}\n","import type {CSSProperties} from 'react'\nimport type {MSpinnerProps} from './MSpinner.types'\nimport {cn} from '../../../utils/cn'\nimport './MSpinner.css'\n\n// Render a minimal semantic loading indicator with token-aware sizing and color.\nexport function MSpinner({\n color = 'primary',\n size = 'md',\n label = 'Loading',\n className,\n style,\n ...rest\n}: MSpinnerProps) {\n const inlineStyle: CSSProperties =\n typeof size === 'number'\n ? {\n width: `${size}px`,\n height: `${size}px`,\n ...style,\n }\n : style || {}\n\n return (\n <span\n className={cn('spinner', typeof size === 'string' && size, color && `color-${color}`, className)}\n style={inlineStyle}\n role=\"status\"\n aria-label={label}\n {...rest}\n />\n )\n}\n","import type {ReactNode} from 'react'\nimport type {MColor} from '../theme'\nimport {cn} from './cn'\n\nexport interface MOverlayBadgeProps {\n badge?: ReactNode | number | boolean\n badgeColor?: MColor\n badgePulsing?: boolean\n className?: string\n}\n\nfunction hasBadgeContent(badge: MOverlayBadgeProps['badge']) {\n return badge !== undefined && badge !== null && badge !== false\n}\n\nexport function shouldRenderOverlayBadge({badge, badgeColor, badgePulsing}: MOverlayBadgeProps) {\n return hasBadgeContent(badge)\n}\n\nexport function renderOverlayBadge({\n badge,\n badgeColor = 'primary',\n badgePulsing = false,\n className,\n}: MOverlayBadgeProps) {\n if (!shouldRenderOverlayBadge({badge, badgeColor, badgePulsing})) {\n return null\n }\n\n const dotOnly = badge === true\n\n return (\n <span\n className={cn(\n 'overlay-badge',\n `color-${badgeColor}`,\n dotOnly && 'dot',\n badgePulsing && 'pulsing',\n className\n )}\n aria-hidden=\"true\"\n >\n {dotOnly ? null : badge}\n </span>\n )\n}\n","import {forwardRef} from 'react'\nimport type {KeyboardEvent, MouseEvent, PointerEvent} from 'react'\nimport type {MButtonProps} from './MButton.types'\nimport {useButtonGroup} from '../MButtonGroup/MButtonGroupContext'\nimport {MSpinner} from '../../feedback'\nimport {cn} from '../../../utils/cn'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport {renderOverlayBadge} from '../../../utils/overlayBadge'\nimport './MButton.css'\n\n// Render the main action primitive with semantic variants and built-in click feedback.\nexport const MButton = forwardRef<HTMLElement, MButtonProps>(function MButton(\n {\n component,\n to,\n href,\n variant: variantProp,\n size: sizeProp,\n color: colorProp,\n fullWidth = false,\n rounded = false,\n shape,\n iconOnly = false,\n loading = false,\n active = false,\n pulsing = false,\n badge,\n badgeColor,\n badgePulsing = false,\n startIcon,\n endIcon,\n clickEffect = 'ripple',\n rippleColor,\n className,\n style,\n children,\n disabled = false,\n type = 'button',\n onClick,\n onPointerDown,\n onKeyDown,\n ...rest\n },\n ref\n) {\n const Component = component ?? 'button'\n const isNativeButton = !component || Component === 'button'\n const group = useButtonGroup()\n const variant = variantProp ?? group?.variant ?? 'filled'\n const size = sizeProp ?? group?.size ?? 'md'\n const color = colorProp ?? group?.color ?? 'primary'\n\n const isDisabled = disabled || loading\n const {effectClassName, effectLayer, handlePointerDown, triggerEffect} = useInteractionEffect<HTMLElement>({\n effect: clickEffect,\n disabled: isDisabled,\n centered: iconOnly,\n color: rippleColor,\n })\n\n function handleClick(event: MouseEvent<HTMLElement>) {\n if (isDisabled && !isNativeButton) {\n event.preventDefault()\n return\n }\n\n onClick?.(event as never)\n }\n\n return (\n <Component\n ref={ref}\n type={isNativeButton ? type : undefined}\n to={component ? (isDisabled ? undefined : to) : undefined}\n href={component ? (isDisabled ? undefined : href) : undefined}\n className={cn(\n 'button',\n variant,\n size,\n `color-${color}`,\n fullWidth && 'full-width',\n rounded && 'rounded',\n shape === 'circle' && 'circle',\n iconOnly && 'icon-only',\n loading && 'loading',\n active && 'active',\n pulsing && 'pulsing',\n isDisabled && 'disabled',\n effectClassName,\n className\n )}\n style={style}\n disabled={isNativeButton ? isDisabled : undefined}\n aria-busy={loading || undefined}\n aria-disabled={!isNativeButton && isDisabled ? true : undefined}\n onClick={handleClick}\n onPointerDown={(event: PointerEvent<HTMLElement>) => {\n handlePointerDown(event as never)\n onPointerDown?.(event as never)\n }}\n onKeyDown={(event: KeyboardEvent<HTMLElement>) => {\n if (event.key === ' ' || event.key === 'Enter') {\n triggerEffect(event.currentTarget as HTMLElement)\n }\n\n onKeyDown?.(event as never)\n }}\n {...rest}\n >\n {effectLayer}\n {renderOverlayBadge({badge, badgeColor, badgePulsing})}\n {loading && <MSpinner size=\"sm\" color=\"inherit\" aria-hidden=\"true\" />}\n {startIcon && <span className=\"icon start\">{startIcon}</span>}\n {children && <span className=\"content\">{children}</span>}\n {endIcon && <span className=\"icon end\">{endIcon}</span>}\n </Component>\n )\n})\n"],"mappings":"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"}
@@ -108,4 +108,4 @@ var p = r(function({ component: n, to: r, href: i, variant: s, size: u, color: d
108
108
  //#endregion
109
109
  export { s as i, f as n, l as r, p as t };
110
110
 
111
- //# sourceMappingURL=MButton-BJdrNg2I.js.map
111
+ //# sourceMappingURL=MButton-BmTDe5Oa.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MButton-BJdrNg2I.js","names":[],"sources":["../src/components/controls/MButtonGroup/MButtonGroupContext.ts","../src/components/feedback/MSpinner/MSpinner.tsx","../src/utils/overlayBadge.tsx","../src/components/controls/MButton/MButton.tsx"],"sourcesContent":["import {createContext, useContext} from 'react'\nimport type {MButtonVariant} from '../MButton/MButton.types'\nimport type {MColor, MSize} from '../../../theme'\n\nexport interface MButtonGroupContextValue {\n variant?: MButtonVariant\n size?: MSize\n color?: MColor\n}\n\nexport const ButtonGroupContext = createContext<MButtonGroupContextValue | null>(null)\n\nexport function useButtonGroup(): MButtonGroupContextValue | null {\n return useContext(ButtonGroupContext)\n}\n","import type {CSSProperties} from 'react'\nimport type {MSpinnerProps} from './MSpinner.types'\nimport {cn} from '../../../utils/cn'\nimport './MSpinner.css'\n\n// Render a minimal semantic loading indicator with token-aware sizing and color.\nexport function MSpinner({\n color = 'primary',\n size = 'md',\n label = 'Loading',\n className,\n style,\n ...rest\n}: MSpinnerProps) {\n const inlineStyle: CSSProperties =\n typeof size === 'number'\n ? {\n width: `${size}px`,\n height: `${size}px`,\n ...style,\n }\n : style || {}\n\n return (\n <span\n className={cn('spinner', typeof size === 'string' && size, color && `color-${color}`, className)}\n style={inlineStyle}\n role=\"status\"\n aria-label={label}\n {...rest}\n />\n )\n}\n","import type {ReactNode} from 'react'\nimport type {MColor} from '../theme'\nimport {cn} from './cn'\n\nexport interface MOverlayBadgeProps {\n badge?: ReactNode | number | boolean\n badgeColor?: MColor\n badgePulsing?: boolean\n className?: string\n}\n\nfunction hasBadgeContent(badge: MOverlayBadgeProps['badge']) {\n return badge !== undefined && badge !== null && badge !== false\n}\n\nexport function shouldRenderOverlayBadge({badge, badgeColor, badgePulsing}: MOverlayBadgeProps) {\n return hasBadgeContent(badge)\n}\n\nexport function renderOverlayBadge({\n badge,\n badgeColor = 'primary',\n badgePulsing = false,\n className,\n}: MOverlayBadgeProps) {\n if (!shouldRenderOverlayBadge({badge, badgeColor, badgePulsing})) {\n return null\n }\n\n const dotOnly = badge === true\n\n return (\n <span\n className={cn(\n 'overlay-badge',\n `color-${badgeColor}`,\n dotOnly && 'dot',\n badgePulsing && 'pulsing',\n className\n )}\n aria-hidden=\"true\"\n >\n {dotOnly ? null : badge}\n </span>\n )\n}\n","import {forwardRef} from 'react'\nimport type {KeyboardEvent, MouseEvent, PointerEvent} from 'react'\nimport type {MButtonProps} from './MButton.types'\nimport {useButtonGroup} from '../MButtonGroup/MButtonGroupContext'\nimport {MSpinner} from '../../feedback'\nimport {cn} from '../../../utils/cn'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport {renderOverlayBadge} from '../../../utils/overlayBadge'\nimport './MButton.css'\n\n// Render the main action primitive with semantic variants and built-in click feedback.\nexport const MButton = forwardRef<HTMLElement, MButtonProps>(function MButton(\n {\n component,\n to,\n href,\n variant: variantProp,\n size: sizeProp,\n color: colorProp,\n fullWidth = false,\n rounded = false,\n shape,\n iconOnly = false,\n loading = false,\n active = false,\n pulsing = false,\n badge,\n badgeColor,\n badgePulsing = false,\n startIcon,\n endIcon,\n clickEffect = 'ripple',\n rippleColor,\n className,\n style,\n children,\n disabled = false,\n type = 'button',\n onClick,\n onPointerDown,\n onKeyDown,\n ...rest\n },\n ref\n) {\n const Component = component ?? 'button'\n const isNativeButton = !component || Component === 'button'\n const group = useButtonGroup()\n const variant = variantProp ?? group?.variant ?? 'filled'\n const size = sizeProp ?? group?.size ?? 'md'\n const color = colorProp ?? group?.color ?? 'primary'\n\n const isDisabled = disabled || loading\n const {effectClassName, effectLayer, handlePointerDown, triggerEffect} = useInteractionEffect<HTMLElement>({\n effect: clickEffect,\n disabled: isDisabled,\n centered: iconOnly,\n color: rippleColor,\n })\n\n function handleClick(event: MouseEvent<HTMLElement>) {\n if (isDisabled && !isNativeButton) {\n event.preventDefault()\n return\n }\n\n onClick?.(event as never)\n }\n\n return (\n <Component\n ref={ref}\n type={isNativeButton ? type : undefined}\n to={component ? (isDisabled ? undefined : to) : undefined}\n href={component ? (isDisabled ? undefined : href) : undefined}\n className={cn(\n 'button',\n variant,\n size,\n `color-${color}`,\n fullWidth && 'full-width',\n rounded && 'rounded',\n shape === 'circle' && 'circle',\n iconOnly && 'icon-only',\n loading && 'loading',\n active && 'active',\n pulsing && 'pulsing',\n isDisabled && 'disabled',\n effectClassName,\n className\n )}\n style={style}\n disabled={isNativeButton ? isDisabled : undefined}\n aria-busy={loading || undefined}\n aria-disabled={!isNativeButton && isDisabled ? true : undefined}\n onClick={handleClick}\n onPointerDown={(event: PointerEvent<HTMLElement>) => {\n handlePointerDown(event as never)\n onPointerDown?.(event as never)\n }}\n onKeyDown={(event: KeyboardEvent<HTMLElement>) => {\n if (event.key === ' ' || event.key === 'Enter') {\n triggerEffect(event.currentTarget as HTMLElement)\n }\n\n onKeyDown?.(event as never)\n }}\n {...rest}\n >\n {effectLayer}\n {renderOverlayBadge({badge, badgeColor, badgePulsing})}\n {loading && <MSpinner size=\"sm\" color=\"inherit\" aria-hidden=\"true\" />}\n {startIcon && <span className=\"icon start\">{startIcon}</span>}\n {children && <span className=\"content\">{children}</span>}\n {endIcon && <span className=\"icon end\">{endIcon}</span>}\n </Component>\n )\n})\n"],"mappings":"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"}
1
+ {"version":3,"file":"MButton-BmTDe5Oa.js","names":[],"sources":["../src/components/controls/MButtonGroup/MButtonGroupContext.ts","../src/components/feedback/MSpinner/MSpinner.tsx","../src/utils/overlayBadge.tsx","../src/components/controls/MButton/MButton.tsx"],"sourcesContent":["import {createContext, useContext} from 'react'\nimport type {MButtonVariant} from '../MButton/MButton.types'\nimport type {MColor, MSize} from '../../../theme'\n\nexport interface MButtonGroupContextValue {\n variant?: MButtonVariant\n size?: MSize\n color?: MColor\n}\n\nexport const ButtonGroupContext = createContext<MButtonGroupContextValue | null>(null)\n\nexport function useButtonGroup(): MButtonGroupContextValue | null {\n return useContext(ButtonGroupContext)\n}\n","import type {CSSProperties} from 'react'\nimport type {MSpinnerProps} from './MSpinner.types'\nimport {cn} from '../../../utils/cn'\nimport './MSpinner.css'\n\n// Render a minimal semantic loading indicator with token-aware sizing and color.\nexport function MSpinner({\n color = 'primary',\n size = 'md',\n label = 'Loading',\n className,\n style,\n ...rest\n}: MSpinnerProps) {\n const inlineStyle: CSSProperties =\n typeof size === 'number'\n ? {\n width: `${size}px`,\n height: `${size}px`,\n ...style,\n }\n : style || {}\n\n return (\n <span\n className={cn('spinner', typeof size === 'string' && size, color && `color-${color}`, className)}\n style={inlineStyle}\n role=\"status\"\n aria-label={label}\n {...rest}\n />\n )\n}\n","import type {ReactNode} from 'react'\nimport type {MColor} from '../theme'\nimport {cn} from './cn'\n\nexport interface MOverlayBadgeProps {\n badge?: ReactNode | number | boolean\n badgeColor?: MColor\n badgePulsing?: boolean\n className?: string\n}\n\nfunction hasBadgeContent(badge: MOverlayBadgeProps['badge']) {\n return badge !== undefined && badge !== null && badge !== false\n}\n\nexport function shouldRenderOverlayBadge({badge, badgeColor, badgePulsing}: MOverlayBadgeProps) {\n return hasBadgeContent(badge)\n}\n\nexport function renderOverlayBadge({\n badge,\n badgeColor = 'primary',\n badgePulsing = false,\n className,\n}: MOverlayBadgeProps) {\n if (!shouldRenderOverlayBadge({badge, badgeColor, badgePulsing})) {\n return null\n }\n\n const dotOnly = badge === true\n\n return (\n <span\n className={cn(\n 'overlay-badge',\n `color-${badgeColor}`,\n dotOnly && 'dot',\n badgePulsing && 'pulsing',\n className\n )}\n aria-hidden=\"true\"\n >\n {dotOnly ? null : badge}\n </span>\n )\n}\n","import {forwardRef} from 'react'\nimport type {KeyboardEvent, MouseEvent, PointerEvent} from 'react'\nimport type {MButtonProps} from './MButton.types'\nimport {useButtonGroup} from '../MButtonGroup/MButtonGroupContext'\nimport {MSpinner} from '../../feedback'\nimport {cn} from '../../../utils/cn'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport {renderOverlayBadge} from '../../../utils/overlayBadge'\nimport './MButton.css'\n\n// Render the main action primitive with semantic variants and built-in click feedback.\nexport const MButton = forwardRef<HTMLElement, MButtonProps>(function MButton(\n {\n component,\n to,\n href,\n variant: variantProp,\n size: sizeProp,\n color: colorProp,\n fullWidth = false,\n rounded = false,\n shape,\n iconOnly = false,\n loading = false,\n active = false,\n pulsing = false,\n badge,\n badgeColor,\n badgePulsing = false,\n startIcon,\n endIcon,\n clickEffect = 'ripple',\n rippleColor,\n className,\n style,\n children,\n disabled = false,\n type = 'button',\n onClick,\n onPointerDown,\n onKeyDown,\n ...rest\n },\n ref\n) {\n const Component = component ?? 'button'\n const isNativeButton = !component || Component === 'button'\n const group = useButtonGroup()\n const variant = variantProp ?? group?.variant ?? 'filled'\n const size = sizeProp ?? group?.size ?? 'md'\n const color = colorProp ?? group?.color ?? 'primary'\n\n const isDisabled = disabled || loading\n const {effectClassName, effectLayer, handlePointerDown, triggerEffect} = useInteractionEffect<HTMLElement>({\n effect: clickEffect,\n disabled: isDisabled,\n centered: iconOnly,\n color: rippleColor,\n })\n\n function handleClick(event: MouseEvent<HTMLElement>) {\n if (isDisabled && !isNativeButton) {\n event.preventDefault()\n return\n }\n\n onClick?.(event as never)\n }\n\n return (\n <Component\n ref={ref}\n type={isNativeButton ? type : undefined}\n to={component ? (isDisabled ? undefined : to) : undefined}\n href={component ? (isDisabled ? undefined : href) : undefined}\n className={cn(\n 'button',\n variant,\n size,\n `color-${color}`,\n fullWidth && 'full-width',\n rounded && 'rounded',\n shape === 'circle' && 'circle',\n iconOnly && 'icon-only',\n loading && 'loading',\n active && 'active',\n pulsing && 'pulsing',\n isDisabled && 'disabled',\n effectClassName,\n className\n )}\n style={style}\n disabled={isNativeButton ? isDisabled : undefined}\n aria-busy={loading || undefined}\n aria-disabled={!isNativeButton && isDisabled ? true : undefined}\n onClick={handleClick}\n onPointerDown={(event: PointerEvent<HTMLElement>) => {\n handlePointerDown(event as never)\n onPointerDown?.(event as never)\n }}\n onKeyDown={(event: KeyboardEvent<HTMLElement>) => {\n if (event.key === ' ' || event.key === 'Enter') {\n triggerEffect(event.currentTarget as HTMLElement)\n }\n\n onKeyDown?.(event as never)\n }}\n {...rest}\n >\n {effectLayer}\n {renderOverlayBadge({badge, badgeColor, badgePulsing})}\n {loading && <MSpinner size=\"sm\" color=\"inherit\" aria-hidden=\"true\" />}\n {startIcon && <span className=\"icon start\">{startIcon}</span>}\n {children && <span className=\"content\">{children}</span>}\n {endIcon && <span className=\"icon end\">{endIcon}</span>}\n </Component>\n )\n})\n"],"mappings":"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"}
@@ -56,4 +56,4 @@ var s = n(function({ checked: n, defaultChecked: s, indeterminate: c = !1, name:
56
56
  //#endregion
57
57
  export { s as t };
58
58
 
59
- //# sourceMappingURL=MCheckbox-DfCD0EtS.js.map
59
+ //# sourceMappingURL=MCheckbox-B7SpcD4H.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MCheckbox-DfCD0EtS.js","names":[],"sources":["../src/components/controls/MCheckbox/MCheckbox.tsx"],"sourcesContent":["import {forwardRef, useEffect, useRef} from 'react'\nimport type * as React from 'react'\nimport type {MCheckboxProps} from './MCheckbox.types'\nimport {cn} from '../../../utils/cn'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport './MCheckbox.css'\n\n// Render a styled checkbox while keeping the native input for accessibility.\nexport const MCheckbox = forwardRef<HTMLInputElement, MCheckboxProps>(function MCheckbox(\n {\n checked,\n defaultChecked,\n indeterminate = false,\n name,\n id,\n value,\n disabled = false,\n size = 'md',\n color = 'primary',\n label,\n labelPosition = 'right',\n error = false,\n errorText,\n onChange,\n clickEffect = 'ripple',\n rippleColor,\n className,\n style,\n },\n ref\n) {\n const internalRef = useRef<HTMLInputElement>(null)\n const inputRef = (ref as React.RefObject<HTMLInputElement>) ?? internalRef\n const {effectClassName, effectLayer, handlePointerDown, triggerEffect} = useInteractionEffect<HTMLSpanElement>({\n effect: clickEffect,\n disabled,\n centered: true,\n color: rippleColor,\n })\n\n // Keep the browser indeterminate flag in sync with React props.\n useEffect(() => {\n if (inputRef.current) {\n inputRef.current.indeterminate = indeterminate\n }\n }, [indeterminate, inputRef])\n\n const hasError = error || !!errorText\n\n return (\n <div className={cn('checkbox', className)} style={style}>\n <label className={cn('label', size, labelPosition === 'left' && 'label-left', disabled && 'disabled')}>\n <span\n className={cn('box', `color-${color}`, hasError && 'error', effectClassName)}\n onPointerDown={handlePointerDown}\n >\n {effectLayer}\n <input\n ref={inputRef}\n type=\"checkbox\"\n checked={checked}\n defaultChecked={defaultChecked}\n name={name}\n id={id}\n value={value}\n disabled={disabled}\n onChange={onChange}\n onKeyDown={(event) => {\n if (event.key === ' ' || event.key === 'Enter') {\n triggerEffect(event.currentTarget.parentElement as HTMLSpanElement | null)\n }\n }}\n className=\"input\"\n aria-invalid={hasError || undefined}\n />\n <span className=\"indeterminate-mark\" />\n </span>\n {label && <span className={cn('label-text', hasError && 'error')}>{label}</span>}\n </label>\n {errorText && (\n <span className=\"field-error\" role=\"alert\">\n {errorText}\n </span>\n )}\n </div>\n )\n})\n"],"mappings":";;;;;AAQA,IAAa,IAAY,EAA6C,SAClE,EACI,YACA,mBACA,mBAAgB,IAChB,SACA,OACA,UACA,cAAW,IACX,UAAO,MACP,WAAQ,WACR,UACA,mBAAgB,SAChB,WAAQ,IACR,cACA,aACA,iBAAc,UACd,gBACA,cACA,YAEJ,GACF;CACE,IAAM,IAAc,EAAyB,KAAK,EAC5C,IAAY,KAA6C,GACzD,EAAC,oBAAiB,gBAAa,sBAAmB,qBAAiB,EAAsC;EAC3G,QAAQ;EACR;EACA,UAAU;EACV,OAAO;EACV,CAAC;AAGF,SAAgB;AACZ,EAAI,EAAS,YACT,EAAS,QAAQ,gBAAgB;IAEtC,CAAC,GAAe,EAAS,CAAC;CAE7B,IAAM,IAAW,KAAS,CAAC,CAAC;AAE5B,QACI,kBAAC,OAAD;EAAK,WAAW,EAAG,YAAY,EAAU;EAAS;YAAlD,CACI,kBAAC,SAAD;GAAO,WAAW,EAAG,SAAS,GAAM,MAAkB,UAAU,cAAc,KAAY,WAAW;aAArG,CACI,kBAAC,QAAD;IACI,WAAW,EAAG,OAAO,SAAS,KAAS,KAAY,SAAS,EAAgB;IAC5E,eAAe;cAFnB;KAIK;KACD,kBAAC,SAAD;MACI,KAAK;MACL,MAAK;MACI;MACO;MACV;MACF;MACG;MACG;MACA;MACV,YAAY,MAAU;AAClB,QAAI,EAAM,QAAQ,OAAO,EAAM,QAAQ,YACnC,EAAc,EAAM,cAAc,cAAwC;;MAGlF,WAAU;MACV,gBAAc,KAAY,KAAA;MAC5B,CAAA;KACF,kBAAC,QAAD,EAAM,WAAU,sBAAuB,CAAA;KACpC;OACN,KAAS,kBAAC,QAAD;IAAM,WAAW,EAAG,cAAc,KAAY,QAAQ;cAAG;IAAa,CAAA,CAC5E;MACP,KACG,kBAAC,QAAD;GAAM,WAAU;GAAc,MAAK;aAC9B;GACE,CAAA,CAET;;EAEZ"}
1
+ {"version":3,"file":"MCheckbox-B7SpcD4H.js","names":[],"sources":["../src/components/controls/MCheckbox/MCheckbox.tsx"],"sourcesContent":["import {forwardRef, useEffect, useRef} from 'react'\nimport type * as React from 'react'\nimport type {MCheckboxProps} from './MCheckbox.types'\nimport {cn} from '../../../utils/cn'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport './MCheckbox.css'\n\n// Render a styled checkbox while keeping the native input for accessibility.\nexport const MCheckbox = forwardRef<HTMLInputElement, MCheckboxProps>(function MCheckbox(\n {\n checked,\n defaultChecked,\n indeterminate = false,\n name,\n id,\n value,\n disabled = false,\n size = 'md',\n color = 'primary',\n label,\n labelPosition = 'right',\n error = false,\n errorText,\n onChange,\n clickEffect = 'ripple',\n rippleColor,\n className,\n style,\n },\n ref\n) {\n const internalRef = useRef<HTMLInputElement>(null)\n const inputRef = (ref as React.RefObject<HTMLInputElement>) ?? internalRef\n const {effectClassName, effectLayer, handlePointerDown, triggerEffect} = useInteractionEffect<HTMLSpanElement>({\n effect: clickEffect,\n disabled,\n centered: true,\n color: rippleColor,\n })\n\n // Keep the browser indeterminate flag in sync with React props.\n useEffect(() => {\n if (inputRef.current) {\n inputRef.current.indeterminate = indeterminate\n }\n }, [indeterminate, inputRef])\n\n const hasError = error || !!errorText\n\n return (\n <div className={cn('checkbox', className)} style={style}>\n <label className={cn('label', size, labelPosition === 'left' && 'label-left', disabled && 'disabled')}>\n <span\n className={cn('box', `color-${color}`, hasError && 'error', effectClassName)}\n onPointerDown={handlePointerDown}\n >\n {effectLayer}\n <input\n ref={inputRef}\n type=\"checkbox\"\n checked={checked}\n defaultChecked={defaultChecked}\n name={name}\n id={id}\n value={value}\n disabled={disabled}\n onChange={onChange}\n onKeyDown={(event) => {\n if (event.key === ' ' || event.key === 'Enter') {\n triggerEffect(event.currentTarget.parentElement as HTMLSpanElement | null)\n }\n }}\n className=\"input\"\n aria-invalid={hasError || undefined}\n />\n <span className=\"indeterminate-mark\" />\n </span>\n {label && <span className={cn('label-text', hasError && 'error')}>{label}</span>}\n </label>\n {errorText && (\n <span className=\"field-error\" role=\"alert\">\n {errorText}\n </span>\n )}\n </div>\n )\n})\n"],"mappings":";;;;;AAQA,IAAa,IAAY,EAA6C,SAClE,EACI,YACA,mBACA,mBAAgB,IAChB,SACA,OACA,UACA,cAAW,IACX,UAAO,MACP,WAAQ,WACR,UACA,mBAAgB,SAChB,WAAQ,IACR,cACA,aACA,iBAAc,UACd,gBACA,cACA,YAEJ,GACF;CACE,IAAM,IAAc,EAAyB,KAAK,EAC5C,IAAY,KAA6C,GACzD,EAAC,oBAAiB,gBAAa,sBAAmB,qBAAiB,EAAsC;EAC3G,QAAQ;EACR;EACA,UAAU;EACV,OAAO;EACV,CAAC;AAGF,SAAgB;AACZ,EAAI,EAAS,YACT,EAAS,QAAQ,gBAAgB;IAEtC,CAAC,GAAe,EAAS,CAAC;CAE7B,IAAM,IAAW,KAAS,CAAC,CAAC;AAE5B,QACI,kBAAC,OAAD;EAAK,WAAW,EAAG,YAAY,EAAU;EAAS;YAAlD,CACI,kBAAC,SAAD;GAAO,WAAW,EAAG,SAAS,GAAM,MAAkB,UAAU,cAAc,KAAY,WAAW;aAArG,CACI,kBAAC,QAAD;IACI,WAAW,EAAG,OAAO,SAAS,KAAS,KAAY,SAAS,EAAgB;IAC5E,eAAe;cAFnB;KAIK;KACD,kBAAC,SAAD;MACI,KAAK;MACL,MAAK;MACI;MACO;MACV;MACF;MACG;MACG;MACA;MACV,YAAY,MAAU;AAClB,QAAI,EAAM,QAAQ,OAAO,EAAM,QAAQ,YACnC,EAAc,EAAM,cAAc,cAAwC;;MAGlF,WAAU;MACV,gBAAc,KAAY,KAAA;MAC5B,CAAA;KACF,kBAAC,QAAD,EAAM,WAAU,sBAAuB,CAAA;KACpC;OACN,KAAS,kBAAC,QAAD;IAAM,WAAW,EAAG,cAAc,KAAY,QAAQ;cAAG;IAAa,CAAA,CAC5E;MACP,KACG,kBAAC,QAAD;GAAM,WAAU;GAAc,MAAK;aAC9B;GACE,CAAA,CAET;;EAEZ"}
@@ -1,2 +1,2 @@
1
1
  const e=require(`./cn-CU5TNITO.cjs`),t=require(`./useInteractionEffect-DnEfbCrX.cjs`);let n=require(`react`),r=require(`react/jsx-runtime`);var i=(0,n.forwardRef)(function({checked:i,defaultChecked:a,indeterminate:o=!1,name:s,id:c,value:l,disabled:u=!1,size:d=`md`,color:f=`primary`,label:p,labelPosition:m=`right`,error:h=!1,errorText:g,onChange:_,clickEffect:v=`ripple`,rippleColor:y,className:b,style:x},S){let C=(0,n.useRef)(null),w=S??C,{effectClassName:T,effectLayer:E,handlePointerDown:D,triggerEffect:O}=t.t({effect:v,disabled:u,centered:!0,color:y});(0,n.useEffect)(()=>{w.current&&(w.current.indeterminate=o)},[o,w]);let k=h||!!g;return(0,r.jsxs)(`div`,{className:e.t(`checkbox`,b),style:x,children:[(0,r.jsxs)(`label`,{className:e.t(`label`,d,m===`left`&&`label-left`,u&&`disabled`),children:[(0,r.jsxs)(`span`,{className:e.t(`box`,`color-${f}`,k&&`error`,T),onPointerDown:D,children:[E,(0,r.jsx)(`input`,{ref:w,type:`checkbox`,checked:i,defaultChecked:a,name:s,id:c,value:l,disabled:u,onChange:_,onKeyDown:e=>{(e.key===` `||e.key===`Enter`)&&O(e.currentTarget.parentElement)},className:`input`,"aria-invalid":k||void 0}),(0,r.jsx)(`span`,{className:`indeterminate-mark`})]}),p&&(0,r.jsx)(`span`,{className:e.t(`label-text`,k&&`error`),children:p})]}),g&&(0,r.jsx)(`span`,{className:`field-error`,role:`alert`,children:g})]})});Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return i}});
2
- //# sourceMappingURL=MCheckbox-CAZA97h7.cjs.map
2
+ //# sourceMappingURL=MCheckbox-Bea3orrs.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"MCheckbox-CAZA97h7.cjs","names":[],"sources":["../src/components/controls/MCheckbox/MCheckbox.tsx"],"sourcesContent":["import {forwardRef, useEffect, useRef} from 'react'\nimport type * as React from 'react'\nimport type {MCheckboxProps} from './MCheckbox.types'\nimport {cn} from '../../../utils/cn'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport './MCheckbox.css'\n\n// Render a styled checkbox while keeping the native input for accessibility.\nexport const MCheckbox = forwardRef<HTMLInputElement, MCheckboxProps>(function MCheckbox(\n {\n checked,\n defaultChecked,\n indeterminate = false,\n name,\n id,\n value,\n disabled = false,\n size = 'md',\n color = 'primary',\n label,\n labelPosition = 'right',\n error = false,\n errorText,\n onChange,\n clickEffect = 'ripple',\n rippleColor,\n className,\n style,\n },\n ref\n) {\n const internalRef = useRef<HTMLInputElement>(null)\n const inputRef = (ref as React.RefObject<HTMLInputElement>) ?? internalRef\n const {effectClassName, effectLayer, handlePointerDown, triggerEffect} = useInteractionEffect<HTMLSpanElement>({\n effect: clickEffect,\n disabled,\n centered: true,\n color: rippleColor,\n })\n\n // Keep the browser indeterminate flag in sync with React props.\n useEffect(() => {\n if (inputRef.current) {\n inputRef.current.indeterminate = indeterminate\n }\n }, [indeterminate, inputRef])\n\n const hasError = error || !!errorText\n\n return (\n <div className={cn('checkbox', className)} style={style}>\n <label className={cn('label', size, labelPosition === 'left' && 'label-left', disabled && 'disabled')}>\n <span\n className={cn('box', `color-${color}`, hasError && 'error', effectClassName)}\n onPointerDown={handlePointerDown}\n >\n {effectLayer}\n <input\n ref={inputRef}\n type=\"checkbox\"\n checked={checked}\n defaultChecked={defaultChecked}\n name={name}\n id={id}\n value={value}\n disabled={disabled}\n onChange={onChange}\n onKeyDown={(event) => {\n if (event.key === ' ' || event.key === 'Enter') {\n triggerEffect(event.currentTarget.parentElement as HTMLSpanElement | null)\n }\n }}\n className=\"input\"\n aria-invalid={hasError || undefined}\n />\n <span className=\"indeterminate-mark\" />\n </span>\n {label && <span className={cn('label-text', hasError && 'error')}>{label}</span>}\n </label>\n {errorText && (\n <span className=\"field-error\" role=\"alert\">\n {errorText}\n </span>\n )}\n </div>\n )\n})\n"],"mappings":"4IAQA,IAAa,GAAA,EAAA,EAAA,YAAyD,SAClE,CACI,UACA,iBACA,gBAAgB,GAChB,OACA,KACA,QACA,WAAW,GACX,OAAO,KACP,QAAQ,UACR,QACA,gBAAgB,QAChB,QAAQ,GACR,YACA,WACA,cAAc,SACd,cACA,YACA,SAEJ,EACF,CACE,IAAM,GAAA,EAAA,EAAA,QAAuC,KAAK,CAC5C,EAAY,GAA6C,EACzD,CAAC,kBAAiB,cAAa,oBAAmB,iBAAiB,EAAA,EAAsC,CAC3G,OAAQ,EACR,WACA,SAAU,GACV,MAAO,EACV,CAAC,EAGF,EAAA,EAAA,eAAgB,CACR,EAAS,UACT,EAAS,QAAQ,cAAgB,IAEtC,CAAC,EAAe,EAAS,CAAC,CAE7B,IAAM,EAAW,GAAS,CAAC,CAAC,EAE5B,OACI,EAAA,EAAA,MAAC,MAAD,CAAK,UAAW,EAAA,EAAG,WAAY,EAAU,CAAS,iBAAlD,EACI,EAAA,EAAA,MAAC,QAAD,CAAO,UAAW,EAAA,EAAG,QAAS,EAAM,IAAkB,QAAU,aAAc,GAAY,WAAW,UAArG,EACI,EAAA,EAAA,MAAC,OAAD,CACI,UAAW,EAAA,EAAG,MAAO,SAAS,IAAS,GAAY,QAAS,EAAgB,CAC5E,cAAe,WAFnB,CAIK,GACD,EAAA,EAAA,KAAC,QAAD,CACI,IAAK,EACL,KAAK,WACI,UACO,iBACV,OACF,KACG,QACG,WACA,WACV,UAAY,GAAU,EACd,EAAM,MAAQ,KAAO,EAAM,MAAQ,UACnC,EAAc,EAAM,cAAc,cAAwC,EAGlF,UAAU,QACV,eAAc,GAAY,IAAA,GAC5B,CAAA,EACF,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,qBAAuB,CAAA,CACpC,GACN,IAAS,EAAA,EAAA,KAAC,OAAD,CAAM,UAAW,EAAA,EAAG,aAAc,GAAY,QAAQ,UAAG,EAAa,CAAA,CAC5E,GACP,IACG,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,cAAc,KAAK,iBAC9B,EACE,CAAA,CAET,IAEZ"}
1
+ {"version":3,"file":"MCheckbox-Bea3orrs.cjs","names":[],"sources":["../src/components/controls/MCheckbox/MCheckbox.tsx"],"sourcesContent":["import {forwardRef, useEffect, useRef} from 'react'\nimport type * as React from 'react'\nimport type {MCheckboxProps} from './MCheckbox.types'\nimport {cn} from '../../../utils/cn'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport './MCheckbox.css'\n\n// Render a styled checkbox while keeping the native input for accessibility.\nexport const MCheckbox = forwardRef<HTMLInputElement, MCheckboxProps>(function MCheckbox(\n {\n checked,\n defaultChecked,\n indeterminate = false,\n name,\n id,\n value,\n disabled = false,\n size = 'md',\n color = 'primary',\n label,\n labelPosition = 'right',\n error = false,\n errorText,\n onChange,\n clickEffect = 'ripple',\n rippleColor,\n className,\n style,\n },\n ref\n) {\n const internalRef = useRef<HTMLInputElement>(null)\n const inputRef = (ref as React.RefObject<HTMLInputElement>) ?? internalRef\n const {effectClassName, effectLayer, handlePointerDown, triggerEffect} = useInteractionEffect<HTMLSpanElement>({\n effect: clickEffect,\n disabled,\n centered: true,\n color: rippleColor,\n })\n\n // Keep the browser indeterminate flag in sync with React props.\n useEffect(() => {\n if (inputRef.current) {\n inputRef.current.indeterminate = indeterminate\n }\n }, [indeterminate, inputRef])\n\n const hasError = error || !!errorText\n\n return (\n <div className={cn('checkbox', className)} style={style}>\n <label className={cn('label', size, labelPosition === 'left' && 'label-left', disabled && 'disabled')}>\n <span\n className={cn('box', `color-${color}`, hasError && 'error', effectClassName)}\n onPointerDown={handlePointerDown}\n >\n {effectLayer}\n <input\n ref={inputRef}\n type=\"checkbox\"\n checked={checked}\n defaultChecked={defaultChecked}\n name={name}\n id={id}\n value={value}\n disabled={disabled}\n onChange={onChange}\n onKeyDown={(event) => {\n if (event.key === ' ' || event.key === 'Enter') {\n triggerEffect(event.currentTarget.parentElement as HTMLSpanElement | null)\n }\n }}\n className=\"input\"\n aria-invalid={hasError || undefined}\n />\n <span className=\"indeterminate-mark\" />\n </span>\n {label && <span className={cn('label-text', hasError && 'error')}>{label}</span>}\n </label>\n {errorText && (\n <span className=\"field-error\" role=\"alert\">\n {errorText}\n </span>\n )}\n </div>\n )\n})\n"],"mappings":"4IAQA,IAAa,GAAA,EAAA,EAAA,YAAyD,SAClE,CACI,UACA,iBACA,gBAAgB,GAChB,OACA,KACA,QACA,WAAW,GACX,OAAO,KACP,QAAQ,UACR,QACA,gBAAgB,QAChB,QAAQ,GACR,YACA,WACA,cAAc,SACd,cACA,YACA,SAEJ,EACF,CACE,IAAM,GAAA,EAAA,EAAA,QAAuC,KAAK,CAC5C,EAAY,GAA6C,EACzD,CAAC,kBAAiB,cAAa,oBAAmB,iBAAiB,EAAA,EAAsC,CAC3G,OAAQ,EACR,WACA,SAAU,GACV,MAAO,EACV,CAAC,EAGF,EAAA,EAAA,eAAgB,CACR,EAAS,UACT,EAAS,QAAQ,cAAgB,IAEtC,CAAC,EAAe,EAAS,CAAC,CAE7B,IAAM,EAAW,GAAS,CAAC,CAAC,EAE5B,OACI,EAAA,EAAA,MAAC,MAAD,CAAK,UAAW,EAAA,EAAG,WAAY,EAAU,CAAS,iBAAlD,EACI,EAAA,EAAA,MAAC,QAAD,CAAO,UAAW,EAAA,EAAG,QAAS,EAAM,IAAkB,QAAU,aAAc,GAAY,WAAW,UAArG,EACI,EAAA,EAAA,MAAC,OAAD,CACI,UAAW,EAAA,EAAG,MAAO,SAAS,IAAS,GAAY,QAAS,EAAgB,CAC5E,cAAe,WAFnB,CAIK,GACD,EAAA,EAAA,KAAC,QAAD,CACI,IAAK,EACL,KAAK,WACI,UACO,iBACV,OACF,KACG,QACG,WACA,WACV,UAAY,GAAU,EACd,EAAM,MAAQ,KAAO,EAAM,MAAQ,UACnC,EAAc,EAAM,cAAc,cAAwC,EAGlF,UAAU,QACV,eAAc,GAAY,IAAA,GAC5B,CAAA,EACF,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,qBAAuB,CAAA,CACpC,GACN,IAAS,EAAA,EAAA,KAAC,OAAD,CAAM,UAAW,EAAA,EAAG,aAAc,GAAY,QAAQ,UAAG,EAAa,CAAA,CAC5E,GACP,IACG,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,cAAc,KAAK,iBAC9B,EACE,CAAA,CAET,IAEZ"}
@@ -433,4 +433,4 @@ function q() {
433
433
  //#endregion
434
434
  export { i as _, W as a, S as c, _ as d, v as f, e as g, n as h, G as i, C as l, t as m, K as n, x as o, f as p, U as r, b as s, q as t, y as u, a as v, r as y };
435
435
 
436
- //# sourceMappingURL=MCookieBootstrap-BhTMPs8T.js.map
436
+ //# sourceMappingURL=MCookieBootstrap-CNYLvKjW.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MCookieBootstrap-BhTMPs8T.js","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-CNYLvKjW.js","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
1
  var e=`mineralui-cookie-consent`,t=`mineralui-cookie-consent`,n=`localStorage`;function r(e,t){return{...e,...t}}function i(e){return[{key:`necessary`,label:e.necessaryLabel,description:e.necessaryDescription,required:!0,defaultValue:!0},{key:`preferences`,label:e.preferencesLabel,description:e.preferencesDescriptionLabel,defaultValue:!1},{key:`analytics`,label:e.analyticsLabel,description:e.analyticsDescription,defaultValue:!1},{key:`marketing`,label:e.marketingLabel,description:e.marketingDescription,defaultValue:!1}]}function a(){return[]}var o=[t,/^PHPSESSID$/i,/^JSESSIONID$/i,/^ASP\.NET_SessionId$/i,/^__Host-/i,/^__Secure-/i,/csrf/i,/xsrf/i,/session/i,/auth/i,/token/i,/^sid$/i],s={preferences:[/theme/i,/locale/i,/lang/i,/currency/i,/timezone/i,/consent/i],analytics:[/^_ga/i,/^_gid/i,/^_gat/i,/^_pk_/i,/^pk_/i,/^_hj/i,/^hj/i,/^amplitude/i,/^mp_/i,/^matomo/i],marketing:[/^_fbp$/i,/^_fbc$/i,/^_gcl_/i,/^IDE$/i,/^test_cookie$/i,/^li_/i,/^tt_/i,/^_uet/i,/^pin_utm/i]};function c(e,t){if(typeof t==`string`){let n=t.trim().toLowerCase(),r=e.trim().toLowerCase();return n.endsWith(`*`)?r.startsWith(n.slice(0,-1)):r===n}return t.test(e)}function l(e,t){return Array.isArray(t)&&t.some(t=>c(e,t))}function u(e){return e.trim()?e.split(`;`).map(e=>e.trim()).filter(Boolean).map(e=>{let t=e.indexOf(`=`);return t===-1?{name:e,value:``}:{name:e.slice(0,t).trim(),value:e.slice(t+1).trim()}}).filter(e=>e.name.length>0):[]}function d(e,t,n){if(l(e,[...o,...t]))return{category:`necessary`,required:!0,matchedBy:`required`};for(let[t,r]of Object.entries(n))if(l(e,r))return{category:t,required:!1,matchedBy:`custom`};for(let[t,n]of Object.entries(s))if(l(e,n))return{category:t,required:!1,matchedBy:`built-in`};return{category:`preferences`,required:!1,matchedBy:`fallback`}}function f({cookieString:e,requiredCookies:t=[],categoryRules:n={}}){return u(e??(typeof document<`u`?document.cookie:``)).map(e=>{let r=d(e.name,t,n);return{name:e.name,value:e.value,category:r.category,required:r.required,matchedBy:r.matchedBy,source:`document.cookie`}})}function p(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.version==`string`&&typeof t.decidedAt==`string`&&typeof t.source==`string`&&t.categories!=null&&typeof t.categories==`object`}function m(e){if(typeof document>`u`)return null;let t=`${encodeURIComponent(e)}=`;for(let e of document.cookie.split(`;`)){let n=e.trim();if(n.startsWith(t))return decodeURIComponent(n.slice(t.length))}return null}function h(e,t,n){typeof document>`u`||(document.cookie=`${encodeURIComponent(e)}=${encodeURIComponent(t)}; path=/; max-age=${Math.floor(n*24*60*60)}; samesite=lax`)}function g(e){typeof document>`u`||(document.cookie=`${encodeURIComponent(e)}=; path=/; max-age=0; samesite=lax`)}function _({storage:e,storageKey:t,cookieName:n}){try{let r=e===`cookie`?m(n):localStorage.getItem(t);if(!r)return null;let i=JSON.parse(r);return p(i)?i:null}catch{return null}}function v({storage:e,storageKey:t,cookieName:n,cookieMaxAgeDays:r},i){try{let a=JSON.stringify(i);if(e===`cookie`){h(n,a,r);return}localStorage.setItem(t,a)}catch{}}function y({storage:e,storageKey:t,cookieName:n}){try{if(e===`cookie`){g(n);return}localStorage.removeItem(t)}catch{}}var b=`mineralui:cookie-consent-change`,x=`__MINERAL_COOKIE_CONFIG__`,S=`__MINERAL_COOKIE_RUNTIME__`,C=`mineralui:cookie-runtime-ready`,w=`data-mineral-cookie-category`,T=`data-mineral-cookie-blocked`,E=`data-mineral-cookie-src`,D=`data-mineral-cookie-type`;function O(e){let t=e.replace(/[.+?^${}()|[\]\\]/g,`\\$&`).replace(/\*/g,`.*`);return RegExp(`^${t}$`,`i`)}function k(e,t){return O(t).test(e)}function A(e){return e instanceof HTMLScriptElement||e instanceof HTMLIFrameElement||e instanceof HTMLImageElement?e.getAttribute(`src`)??e.getAttribute(E)??``:``}function j(e){try{return new URL(e,window.location.href).hostname}catch{return``}}function M(e){return _({storage:e.storage??`localStorage`,storageKey:e.storageKey??`mineralui-cookie-consent`,cookieName:e.cookieName??`mineralui-cookie-consent`})}function N(e,t){return t===`necessary`?!0:e?.categories?.[t]===!0}function P(e,t){let n=e.getAttribute(w);if(n)return n;let r=A(e);if(!r)return null;let i=j(r);if(!i)return null;let a=e instanceof HTMLScriptElement?`script`:e instanceof HTMLIFrameElement?`iframe`:e instanceof HTMLImageElement?`image`:null;if(!a)return null;let o=a===`script`?t.resources?.scripts:a===`iframe`?t.resources?.iframes:t.resources?.images;if(!o)return null;for(let[t,n]of Object.entries(o))if(n.some(e=>k(i,e)||k(r,e)))return e.setAttribute(w,t),t;return null}function F(e){if(e.getAttribute(T)!==`true`){if(e instanceof HTMLScriptElement){let t=e.getAttribute(`type`)??``,n=e.getAttribute(`src`);n&&(e.setAttribute(E,n),e.removeAttribute(`src`)),e.setAttribute(D,t===`text/plain`?``:t),e.type=`text/plain`,e.setAttribute(T,`true`);return}if(e instanceof HTMLIFrameElement||e instanceof HTMLImageElement){let t=e.getAttribute(`src`);t&&(e.setAttribute(E,t),e.removeAttribute(`src`)),e.setAttribute(T,`true`)}}}function I(e){let t=e.getAttribute(E),n=document.createElement(`script`);for(let t of e.getAttributeNames())t===`type`||t===T||t===E||t===D||n.setAttribute(t,e.getAttribute(t)??``);let r=e.getAttribute(D);r&&(n.type=r),t?n.src=t:n.textContent=e.textContent,e.replaceWith(n)}function L(e){if(e instanceof HTMLScriptElement){if(!(e.getAttribute(T)===`true`||e.type===`text/plain`&&e.hasAttribute(w)))return;I(e);return}if(e instanceof HTMLIFrameElement||e instanceof HTMLImageElement){if(e.getAttribute(T)!==`true`&&!e.hasAttribute(E))return;let t=e.getAttribute(E);t&&e.setAttribute(`src`,t),e.removeAttribute(E),e.removeAttribute(T)}}function R(e){let t=[];e instanceof Element&&t.push(e);let n=Array.from(e.querySelectorAll(`script, iframe, img`));return[...t,...n]}function z(e,t,n){let r=P(e,n);if(r){if(N(t,r)){L(e);return}F(e)}}function B(e,t){for(let n of R(document))z(n,e,t)}function V(e,t){let n=Node.prototype.appendChild,r=Node.prototype.insertBefore,i=Node.prototype.replaceChild;return Node.prototype.appendChild=function(r){if(r instanceof Element)for(let n of R(r))z(n,e(),t);return n.call(this,r)},Node.prototype.insertBefore=function(n,i){if(n instanceof Element)for(let r of R(n))z(r,e(),t);return r.call(this,n,i)},Node.prototype.replaceChild=function(n,r){if(n instanceof Element)for(let r of R(n))z(r,e(),t);return i.call(this,n,r)},()=>{Node.prototype.appendChild=n,Node.prototype.insertBefore=r,Node.prototype.replaceChild=i}}function H(e,t){let n=[];try{for(let r=0;r<e.length;r+=1){let i=e.key(r);i&&n.push({kind:t,key:i,value:e.getItem(i)??``})}}catch{return[]}return n}function U(e){return e||(typeof window>`u`?null:window.__MINERAL_COOKIE_CONFIG__??null)}function W(e){if(typeof window>`u`||typeof document>`u`)return null;let t=U(e);if(!t)return null;let n=t.scan??{},r=[],i=[];n.storage!==!1&&(r.push(...H(window.localStorage,`localStorage`)),r.push(...H(window.sessionStorage,`sessionStorage`)));let a=[[n.scripts!==!1,`script[src], script[data-mineral-cookie-src]`,`script`],[n.iframes!==!1,`iframe[src], iframe[data-mineral-cookie-src]`,`iframe`],[n.images!==!1,`img[src], img[data-mineral-cookie-src]`,`image`]];for(let[e,t,n]of a)if(e)for(let e of Array.from(document.querySelectorAll(t))){let t=A(e);t&&i.push({kind:n,src:t,host:j(t),category:e.getAttribute(w)??void 0})}return{siteKey:t.siteKey,domain:t.domain??window.location.hostname,url:window.location.href,scannedAt:new Date().toISOString(),cookies:n.cookies===!1?[]:f({requiredCookies:t.requiredCookies??[],categoryRules:t.categoryRules??{}}).map(e=>({...e,matchedBy:e.matchedBy,source:e.source})),storage:r,resources:i}}async function G(e,t){let n=U(e),r=n?.scanEndpoint??n?.reportEndpoint;if(!r||typeof fetch>`u`||!n)return t??null;let i=t??W(n);return i?(await fetch(r,{method:n.reportMethod??`POST`,headers:{"content-type":`application/json`,...n.siteKey?{"x-mineral-site-key":n.siteKey}:{},...n.reportHeaders},body:JSON.stringify(i)}),i):null}function K(e){if(typeof window>`u`||typeof document>`u`)return null;let t=U(e);if(!t)return null;let n=M(t),r=null,i=null,a=()=>{r!=null&&(window.clearTimeout(r),r=null),i!=null&&(window.clearTimeout(i),i=null)},o=(e=0,n)=>{!t.scanEndpoint&&!t.reportEndpoint||(a(),r=window.setTimeout(()=>{r=null,G(t)},e),typeof n==`number`&&(i=window.setTimeout(()=>{i=null,G(t)},n)))},s=e=>{n=e===void 0?M(t):e,B(n,t)};s(n);let c=new MutationObserver(e=>{for(let r of e)for(let e of Array.from(r.addedNodes))if(e instanceof Element)for(let r of R(e))z(r,n,t)});c.observe(document.documentElement,{childList:!0,subtree:!0});let l=e=>{let t=e.detail;s(t?.state??null),o(300,1500)};window.addEventListener(b,l);let u=V(()=>n,t),d=()=>{o()};document.readyState===`complete`?d():window.addEventListener(`load`,d,{once:!0});let f={config:t,destroy:()=>{c.disconnect(),u(),a(),window.removeEventListener(`load`,d),window.removeEventListener(b,l),window.MineralCookieConsentBootstrap===f&&delete window.MineralCookieConsentBootstrap},getState:()=>n,sync:s};return window.MineralCookieConsentBootstrap=f,f}function q(){return typeof window>`u`||typeof document>`u`?null:K(U())}Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return W}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return S}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return e}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return n}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return G}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return C}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return t}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return K}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return U}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return q}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return r}});
2
- //# sourceMappingURL=MCookieBootstrap-Fxpem-gF.cjs.map
2
+ //# sourceMappingURL=MCookieBootstrap-DSOT4FQo.cjs.map