@banzamel/mineralui 1.0.8 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (432) hide show
  1. package/README.md +1 -1
  2. package/dist/{MAvatar-DMM1CsdO.cjs → MAvatar-nLlGAprq.cjs} +2 -2
  3. package/dist/{MAvatar-DMM1CsdO.cjs.map → MAvatar-nLlGAprq.cjs.map} +1 -1
  4. package/dist/{MAvatar-Blh5pfSO.js → MAvatar-tpFpLFPO.js} +4 -4
  5. package/dist/{MAvatar-Blh5pfSO.js.map → MAvatar-tpFpLFPO.js.map} +1 -1
  6. package/dist/{MBadge-BjZX0MIC.js → MBadge-UTUlEAik.js} +2 -2
  7. package/dist/MBadge-UTUlEAik.js.map +1 -0
  8. package/dist/{MBadge-Babyr1R9.cjs → MBadge-imAk1gYn.cjs} +2 -2
  9. package/dist/MBadge-imAk1gYn.cjs.map +1 -0
  10. package/dist/{MButton-33EzpGvQ.js → MButton-BJdrNg2I.js} +3 -3
  11. package/dist/{MButton-33EzpGvQ.js.map → MButton-BJdrNg2I.js.map} +1 -1
  12. package/dist/{MButton-C_WTyNvw.cjs → MButton-CX8SV1m0.cjs} +2 -2
  13. package/dist/{MButton-C_WTyNvw.cjs.map → MButton-CX8SV1m0.cjs.map} +1 -1
  14. package/dist/{MCheckbox-BhtJDdip.cjs → MCheckbox-CAZA97h7.cjs} +2 -2
  15. package/dist/{MCheckbox-BhtJDdip.cjs.map → MCheckbox-CAZA97h7.cjs.map} +1 -1
  16. package/dist/{MCheckbox-CugP7F6H.js → MCheckbox-DfCD0EtS.js} +3 -3
  17. package/dist/{MCheckbox-CugP7F6H.js.map → MCheckbox-DfCD0EtS.js.map} +1 -1
  18. package/dist/{MCookieBootstrap-BbpXuRtS.js → MCookieBootstrap-BhTMPs8T.js} +1 -1
  19. package/dist/{MCookieBootstrap-BbpXuRtS.js.map → MCookieBootstrap-BhTMPs8T.js.map} +1 -1
  20. package/dist/{MCookieBootstrap-Ck_8aUQK.cjs → MCookieBootstrap-Fxpem-gF.cjs} +1 -1
  21. package/dist/{MCookieBootstrap-Ck_8aUQK.cjs.map → MCookieBootstrap-Fxpem-gF.cjs.map} +1 -1
  22. package/dist/MDataTable-BZs6Cn9e.cjs +2 -0
  23. package/dist/{MDataTable-8ZhnWhqW.cjs.map → MDataTable-BZs6Cn9e.cjs.map} +1 -1
  24. package/dist/{MDataTable--pUkQHAv.js → MDataTable-D-ASD4g3.js} +10 -12
  25. package/dist/{MDataTable--pUkQHAv.js.map → MDataTable-D-ASD4g3.js.map} +1 -1
  26. package/dist/MDrawer-CTVEF34p.cjs +2 -0
  27. package/dist/{MDrawer-FYS50FtQ.cjs.map → MDrawer-CTVEF34p.cjs.map} +1 -1
  28. package/dist/{MDrawer-00BvU8Dn.js → MDrawer-CscOMXBg.js} +5 -5
  29. package/dist/{MDrawer-00BvU8Dn.js.map → MDrawer-CscOMXBg.js.map} +1 -1
  30. package/dist/{MDropdownMenu-BgOiM5yr.js → MDropdownMenu-B1eOmM7u.js} +4 -4
  31. package/dist/{MDropdownMenu-BgOiM5yr.js.map → MDropdownMenu-B1eOmM7u.js.map} +1 -1
  32. package/dist/{MDropdownMenu-BLBdToIz.cjs → MDropdownMenu-CiJ_7DQ2.cjs} +2 -2
  33. package/dist/{MDropdownMenu-BLBdToIz.cjs.map → MDropdownMenu-CiJ_7DQ2.cjs.map} +1 -1
  34. package/dist/{illustrations.entry-DtMxssXq.cjs → MGalleryIllustration-CeOMHzpt.cjs} +2 -2
  35. package/dist/MGalleryIllustration-CeOMHzpt.cjs.map +1 -0
  36. package/dist/{illustrations.entry-C0rSNpF1.js → MGalleryIllustration-D7CVMSwO.js} +2 -2
  37. package/dist/{illustrations.entry-DtMxssXq.cjs.map → MGalleryIllustration-D7CVMSwO.js.map} +1 -1
  38. package/dist/MHeading-CMGPJwul.js +19 -0
  39. package/dist/MHeading-CMGPJwul.js.map +1 -0
  40. package/dist/MHeading-sW0j7ssI.cjs +2 -0
  41. package/dist/MHeading-sW0j7ssI.cjs.map +1 -0
  42. package/dist/{MImage-CKrjXRmf.js → MImage-3UVzZIgA.js} +4 -4
  43. package/dist/MImage-3UVzZIgA.js.map +1 -0
  44. package/dist/{MImage-f854avZS.cjs → MImage-BHgzEHMO.cjs} +2 -2
  45. package/dist/MImage-BHgzEHMO.cjs.map +1 -0
  46. package/dist/MInline-DUzpnZoB.cjs +2 -0
  47. package/dist/MInline-DUzpnZoB.cjs.map +1 -0
  48. package/dist/MInline-cTj903A4.js +39 -0
  49. package/dist/MInline-cTj903A4.js.map +1 -0
  50. package/dist/{MInput-BUCcLWSI.js → MInput-B8RPS-wr.js} +6 -6
  51. package/dist/{MInput-BUCcLWSI.js.map → MInput-B8RPS-wr.js.map} +1 -1
  52. package/dist/MInput-BZ1ZPuk3.cjs +2 -0
  53. package/dist/{MInput-CQ3MqKsk.cjs.map → MInput-BZ1ZPuk3.cjs.map} +1 -1
  54. package/dist/MInputCVC-BJQWuuwR.js +320 -0
  55. package/dist/MInputCVC-BJQWuuwR.js.map +1 -0
  56. package/dist/MInputCVC-DOBmGhJL.cjs +2 -0
  57. package/dist/MInputCVC-DOBmGhJL.cjs.map +1 -0
  58. package/dist/MInputSearch-DAAg9FXv.cjs +2 -0
  59. package/dist/{MInputSearch-Dt79qbZg.cjs.map → MInputSearch-DAAg9FXv.cjs.map} +1 -1
  60. package/dist/{MInputSearch-BeXUh4lz.js → MInputSearch-PMHykVrc.js} +4 -4
  61. package/dist/{MInputSearch-BeXUh4lz.js.map → MInputSearch-PMHykVrc.js.map} +1 -1
  62. package/dist/{MLink-DH4vk7O5.js → MLink-CBmT8zaD.js} +2 -2
  63. package/dist/{MLink-DH4vk7O5.js.map → MLink-CBmT8zaD.js.map} +1 -1
  64. package/dist/{MLink-CVN-Vll4.cjs → MLink-D10DD8oX.cjs} +2 -2
  65. package/dist/{MLink-CVN-Vll4.cjs.map → MLink-D10DD8oX.cjs.map} +1 -1
  66. package/dist/{MModal-D1Knn-bg.js → MModal-BogYYyZE.js} +4 -4
  67. package/dist/{MModal-D1Knn-bg.js.map → MModal-BogYYyZE.js.map} +1 -1
  68. package/dist/{MModal-BQvk1KKc.cjs → MModal-CfzduXaI.cjs} +2 -2
  69. package/dist/{MModal-BQvk1KKc.cjs.map → MModal-CfzduXaI.cjs.map} +1 -1
  70. package/dist/MPagination-CgvjKhLN.js +113 -0
  71. package/dist/MPagination-CgvjKhLN.js.map +1 -0
  72. package/dist/MPagination-vg2EqB8z.cjs +2 -0
  73. package/dist/MPagination-vg2EqB8z.cjs.map +1 -0
  74. package/dist/{MPopover-DKBdLfrw.js → MPopover-BC9C5967.js} +3 -3
  75. package/dist/{MPopover-DKBdLfrw.js.map → MPopover-BC9C5967.js.map} +1 -1
  76. package/dist/{MPopover-BXPkE575.cjs → MPopover-C3-fGAke.cjs} +2 -2
  77. package/dist/{MPopover-BXPkE575.cjs.map → MPopover-C3-fGAke.cjs.map} +1 -1
  78. package/dist/{MPortal-CbpNkzfC.js → MPortal-Dqlkh3hw.js} +1 -1
  79. package/dist/{MPortal-CbpNkzfC.js.map → MPortal-Dqlkh3hw.js.map} +1 -1
  80. package/dist/{MPortal-BysJLuEi.cjs → MPortal-PyRKsZxc.cjs} +1 -1
  81. package/dist/{MPortal-BysJLuEi.cjs.map → MPortal-PyRKsZxc.cjs.map} +1 -1
  82. package/dist/MQrCode-DB9vELHq.cjs +2 -0
  83. package/dist/{MQrCode-CbUPPd4S.cjs.map → MQrCode-DB9vELHq.cjs.map} +1 -1
  84. package/dist/{MQrCode-AttGRC6v.js → MQrCode-l0FzrNCq.js} +15 -16
  85. package/dist/{MQrCode-AttGRC6v.js.map → MQrCode-l0FzrNCq.js.map} +1 -1
  86. package/dist/{MSkeleton-BL4C5FkH.js → MSkeleton-Bh9cCe49.js} +4 -4
  87. package/dist/{MSkeleton-BL4C5FkH.js.map → MSkeleton-Bh9cCe49.js.map} +1 -1
  88. package/dist/{MSkeleton-B5jZNFOG.cjs → MSkeleton-D7wnoEE8.cjs} +2 -2
  89. package/dist/{MSkeleton-B5jZNFOG.cjs.map → MSkeleton-D7wnoEE8.cjs.map} +1 -1
  90. package/dist/{MSlider-D5ckYDop.js → MSlider-BlgzLtHa.js} +2 -2
  91. package/dist/{MSlider-D5ckYDop.js.map → MSlider-BlgzLtHa.js.map} +1 -1
  92. package/dist/{MSlider-vD6Sla2p.cjs → MSlider-YDSrVUQ8.cjs} +2 -2
  93. package/dist/{MSlider-vD6Sla2p.cjs.map → MSlider-YDSrVUQ8.cjs.map} +1 -1
  94. package/dist/{MSparkline-U-XaDvpV.cjs → MSparkline-Bl5-EHJr.cjs} +2 -2
  95. package/dist/MSparkline-Bl5-EHJr.cjs.map +1 -0
  96. package/dist/{MSparkline-DjcDtnZH.js → MSparkline-C8tnqhJm.js} +2 -2
  97. package/dist/MSparkline-C8tnqhJm.js.map +1 -0
  98. package/dist/{MStack-BvFI0AFv.cjs → MStack-BKDsNitR.cjs} +2 -2
  99. package/dist/{MStack-BvFI0AFv.cjs.map → MStack-BKDsNitR.cjs.map} +1 -1
  100. package/dist/{MStack-DhdMFSUL.js → MStack-XTsT_kLJ.js} +4 -4
  101. package/dist/{MStack-DhdMFSUL.js.map → MStack-XTsT_kLJ.js.map} +1 -1
  102. package/dist/{MSubText-CfWNytoK.cjs → MSubText-BIaYgtU4.cjs} +2 -2
  103. package/dist/{MSubText-CfWNytoK.cjs.map → MSubText-BIaYgtU4.cjs.map} +1 -1
  104. package/dist/{MSubText-uvcBr9Ba.js → MSubText-uoh7Qx7S.js} +3 -3
  105. package/dist/{MSubText-uvcBr9Ba.js.map → MSubText-uoh7Qx7S.js.map} +1 -1
  106. package/dist/{MSurface-DlcK6Bre.js → MSurface-B1LXFczo.js} +4 -4
  107. package/dist/{MSurface-DlcK6Bre.js.map → MSurface-B1LXFczo.js.map} +1 -1
  108. package/dist/{MSurface-qcGLaTIK.cjs → MSurface-BgZ86iYn.cjs} +2 -2
  109. package/dist/{MSurface-qcGLaTIK.cjs.map → MSurface-BgZ86iYn.cjs.map} +1 -1
  110. package/dist/MTag-BVo9zFIj.cjs +2 -0
  111. package/dist/{MTag-BMi1GS7v.cjs.map → MTag-BVo9zFIj.cjs.map} +1 -1
  112. package/dist/{MTag-Cor8ZIW3.js → MTag-Bq9b51kE.js} +4 -4
  113. package/dist/{MTag-Cor8ZIW3.js.map → MTag-Bq9b51kE.js.map} +1 -1
  114. package/dist/MText-B4koGfYi.cjs +2 -0
  115. package/dist/MText-B4koGfYi.cjs.map +1 -0
  116. package/dist/MText-CKyns1SE.js +43 -0
  117. package/dist/MText-CKyns1SE.js.map +1 -0
  118. package/dist/{MTimeAgo-BOXKcDYN.cjs → MTimeAgo-LWntwbKg.cjs} +2 -2
  119. package/dist/{MTimeAgo-BOXKcDYN.cjs.map → MTimeAgo-LWntwbKg.cjs.map} +1 -1
  120. package/dist/{MTimeAgo-DrDs52Y1.js → MTimeAgo-irsvTFAY.js} +4 -4
  121. package/dist/{MTimeAgo-DrDs52Y1.js.map → MTimeAgo-irsvTFAY.js.map} +1 -1
  122. package/dist/{MToggle-B7cKH5Tl.js → MToggle-BbSDIAJq.js} +3 -3
  123. package/dist/{MToggle-B7cKH5Tl.js.map → MToggle-BbSDIAJq.js.map} +1 -1
  124. package/dist/{MToggle-Hheo-jfZ.cjs → MToggle-GhhAJgUa.cjs} +2 -2
  125. package/dist/{MToggle-Hheo-jfZ.cjs.map → MToggle-GhhAJgUa.cjs.map} +1 -1
  126. package/dist/{MTooltip-D3xuZ5kG.js → MTooltip-BVQ7wBrO.js} +3 -3
  127. package/dist/{MTooltip-D3xuZ5kG.js.map → MTooltip-BVQ7wBrO.js.map} +1 -1
  128. package/dist/{MTooltip-DzwZ637q.cjs → MTooltip-eTM5DKtM.cjs} +2 -2
  129. package/dist/{MTooltip-DzwZ637q.cjs.map → MTooltip-eTM5DKtM.cjs.map} +1 -1
  130. package/dist/cards-JqA2VWit.js +1013 -0
  131. package/dist/cards-JqA2VWit.js.map +1 -0
  132. package/dist/cards-QoMhQlao.cjs +2 -0
  133. package/dist/cards-QoMhQlao.cjs.map +1 -0
  134. package/dist/cards.cjs +1 -1
  135. package/dist/cards.js +3 -3
  136. package/dist/{cn-SOcVdnX6.cjs → cn-CU5TNITO.cjs} +1 -1
  137. package/dist/{cn-SOcVdnX6.cjs.map → cn-CU5TNITO.cjs.map} +1 -1
  138. package/dist/{cn-DZLxql0l.js → cn-YER3QsV1.js} +1 -1
  139. package/dist/{cn-DZLxql0l.js.map → cn-YER3QsV1.js.map} +1 -1
  140. package/dist/components/cards/MCardPaymentMethod/MCardPaymentMethod.d.ts +2 -0
  141. package/dist/components/cards/MCardPaymentMethod/MCardPaymentMethod.types.d.ts +22 -0
  142. package/dist/components/cards/MCardPaymentMethod/index.d.ts +2 -0
  143. package/dist/components/cards/index.d.ts +2 -0
  144. package/dist/components/data/index.d.ts +1 -1
  145. package/dist/components/feedback/MCookie/MCookieConsent/index.d.ts +1 -1
  146. package/dist/components/inputs/MInputCVC/MInputCVC.d.ts +3 -0
  147. package/dist/components/inputs/MInputCVC/MInputCVC.types.d.ts +9 -0
  148. package/dist/components/inputs/MInputCVC/index.d.ts +2 -0
  149. package/dist/components/inputs/MInputExpDate/MInputExpDate.d.ts +3 -0
  150. package/dist/components/inputs/MInputExpDate/MInputExpDate.types.d.ts +10 -0
  151. package/dist/components/inputs/MInputExpDate/index.d.ts +2 -0
  152. package/dist/components/inputs/index.d.ts +4 -0
  153. package/dist/controls-BFmZuejK.cjs +2 -0
  154. package/dist/controls-BFmZuejK.cjs.map +1 -0
  155. package/dist/{controls-IsOBNxW0.js → controls-Dbev0qSy.js} +5 -5
  156. package/dist/controls-Dbev0qSy.js.map +1 -0
  157. package/dist/controls.cjs +1 -1
  158. package/dist/controls.js +5 -5
  159. package/dist/cookie-consent-bootstrap.cjs +1 -1
  160. package/dist/cookie-consent-bootstrap.cjs.map +1 -1
  161. package/dist/cookie-consent-bootstrap.js +1 -1
  162. package/dist/cookie-consent-bootstrap.js.map +1 -1
  163. package/dist/{creditCards-CoZpbB1e.js → creditCards-CCysEwry.js} +1 -1
  164. package/dist/{creditCards-CoZpbB1e.js.map → creditCards-CCysEwry.js.map} +1 -1
  165. package/dist/{creditCards-BjHGqAFx.cjs → creditCards-ljs044xt.cjs} +1 -1
  166. package/dist/{creditCards-BjHGqAFx.cjs.map → creditCards-ljs044xt.cjs.map} +1 -1
  167. package/dist/{data-Bp3Fd2Al.js → data-B1hbWMzU.js} +696 -699
  168. package/dist/data-B1hbWMzU.js.map +1 -0
  169. package/dist/data-BooVW8q_.cjs +2 -0
  170. package/dist/data-BooVW8q_.cjs.map +1 -0
  171. package/dist/data.cjs +1 -1
  172. package/dist/data.js +3 -3
  173. package/dist/{dateUtils-BOsYyWde.js → dateUtils-CUY6CRCf.js} +1 -1
  174. package/dist/{dateUtils-BOsYyWde.js.map → dateUtils-CUY6CRCf.js.map} +1 -1
  175. package/dist/{dateUtils-xSfrXjbY.cjs → dateUtils-Dq1vaA-D.cjs} +1 -1
  176. package/dist/{dateUtils-xSfrXjbY.cjs.map → dateUtils-Dq1vaA-D.cjs.map} +1 -1
  177. package/dist/display-B-zP1BEz.cjs +2 -0
  178. package/dist/{display-DmB5CZYB.cjs.map → display-B-zP1BEz.cjs.map} +1 -1
  179. package/dist/{display-B0Db8pF3.js → display-DC0d-nPm.js} +5 -6
  180. package/dist/{display-B0Db8pF3.js.map → display-DC0d-nPm.js.map} +1 -1
  181. package/dist/display.cjs +1 -1
  182. package/dist/display.js +3 -3
  183. package/dist/dropdowns-CMt9-Jpa.cjs +2 -0
  184. package/dist/dropdowns-CMt9-Jpa.cjs.map +1 -0
  185. package/dist/{dropdowns-BkBtQP4v.js → dropdowns-Vo7Oo_ii.js} +87 -91
  186. package/dist/dropdowns-Vo7Oo_ii.js.map +1 -0
  187. package/dist/dropdowns.cjs +1 -1
  188. package/dist/dropdowns.js +1 -1
  189. package/dist/feedback-B-PVXL68.cjs +2 -0
  190. package/dist/{feedback-CmOz23FV.cjs.map → feedback-B-PVXL68.cjs.map} +1 -1
  191. package/dist/{feedback-DCIGou8P.js → feedback-D29Er-TD.js} +315 -299
  192. package/dist/{feedback-DCIGou8P.js.map → feedback-D29Er-TD.js.map} +1 -1
  193. package/dist/feedback.cjs +1 -1
  194. package/dist/feedback.js +6 -6
  195. package/dist/{form-BQ6-ieVC.cjs → form-6JwrowsS.cjs} +2 -2
  196. package/dist/{form-BQ6-ieVC.cjs.map → form-6JwrowsS.cjs.map} +1 -1
  197. package/dist/{form-JanaUHTQ.js → form-CFWADsyf.js} +2 -2
  198. package/dist/{form-JanaUHTQ.js.map → form-CFWADsyf.js.map} +1 -1
  199. package/dist/form.cjs +1 -1
  200. package/dist/form.js +1 -1
  201. package/dist/{formatters-BIijIfCB.cjs → formatters-CNjg_h7-.cjs} +1 -1
  202. package/dist/{formatters-BIijIfCB.cjs.map → formatters-CNjg_h7-.cjs.map} +1 -1
  203. package/dist/{formatters-DMI5QqhS.js → formatters-T0vvjMtB.js} +1 -1
  204. package/dist/{formatters-DMI5QqhS.js.map → formatters-T0vvjMtB.js.map} +1 -1
  205. package/dist/{frameworkTexts-5_DBGFFg.js → frameworkTexts-BgzNvcs2.js} +3 -3
  206. package/dist/{frameworkTexts-5_DBGFFg.js.map → frameworkTexts-BgzNvcs2.js.map} +1 -1
  207. package/dist/{frameworkTexts-CwSSRPWS.cjs → frameworkTexts-r4jSfpMt.cjs} +2 -2
  208. package/dist/{frameworkTexts-CwSSRPWS.cjs.map → frameworkTexts-r4jSfpMt.cjs.map} +1 -1
  209. package/dist/i18n.d.ts +1 -1
  210. package/dist/icons-D5DK-J2C.js +4855 -0
  211. package/dist/icons-D5DK-J2C.js.map +1 -0
  212. package/dist/icons-Dv1T-cF4.cjs +2 -0
  213. package/dist/icons-Dv1T-cF4.cjs.map +1 -0
  214. package/dist/icons.cjs +1 -1
  215. package/dist/icons.d.ts +1 -1
  216. package/dist/icons.js +2 -23
  217. package/dist/illustrations.cjs +1 -1
  218. package/dist/illustrations.d.ts +1 -1
  219. package/dist/illustrations.js +1 -1
  220. package/dist/index.cjs +1 -1
  221. package/dist/index.js +59 -76
  222. package/dist/{inputs-DFoD2MMX.js → inputs-Bl7ssV3Q.js} +333 -339
  223. package/dist/{inputs-DFoD2MMX.js.map → inputs-Bl7ssV3Q.js.map} +1 -1
  224. package/dist/inputs-Dw9Uv8f4.cjs +2 -0
  225. package/dist/{inputs-BRjbpf9P.cjs.map → inputs-Dw9Uv8f4.cjs.map} +1 -1
  226. package/dist/inputs.cjs +1 -1
  227. package/dist/inputs.js +5 -4
  228. package/dist/layout-C1QKiv2J.cjs +2 -0
  229. package/dist/{layout-BWhQ1VXM.cjs.map → layout-C1QKiv2J.cjs.map} +1 -1
  230. package/dist/{layout-yIAZ4bP6.js → layout-UP_12LRD.js} +22 -24
  231. package/dist/{layout-yIAZ4bP6.js.map → layout-UP_12LRD.js.map} +1 -1
  232. package/dist/layout.cjs +1 -1
  233. package/dist/layout.js +6 -5
  234. package/dist/{layoutProps-CZ-XhpIX.cjs → layoutProps-Ck4VtGm9.cjs} +1 -1
  235. package/dist/{layoutProps-CZ-XhpIX.cjs.map → layoutProps-Ck4VtGm9.cjs.map} +1 -1
  236. package/dist/{layoutProps-DUPQsWy9.js → layoutProps-Cl6d1KmH.js} +1 -1
  237. package/dist/{layoutProps-DUPQsWy9.js.map → layoutProps-Cl6d1KmH.js.map} +1 -1
  238. package/dist/{licensing-CMLexRJk.cjs → licensing-BXFauUj_.cjs} +1 -1
  239. package/dist/{licensing-CMLexRJk.cjs.map → licensing-BXFauUj_.cjs.map} +1 -1
  240. package/dist/{licensing-SQAMYrOI.js → licensing-CwzqhHH9.js} +1 -1
  241. package/dist/{licensing-SQAMYrOI.js.map → licensing-CwzqhHH9.js.map} +1 -1
  242. package/dist/{locale-DpCe_7mG.cjs → locale-LCAQDJCd.cjs} +1 -1
  243. package/dist/{locale-DpCe_7mG.cjs.map → locale-LCAQDJCd.cjs.map} +1 -1
  244. package/dist/{locale-Crzgecoe.js → locale-uMMj57KX.js} +1 -1
  245. package/dist/{locale-Crzgecoe.js.map → locale-uMMj57KX.js.map} +1 -1
  246. package/dist/media-C4WtzWxU.cjs +2 -0
  247. package/dist/{media-D0KRmTG_.cjs.map → media-C4WtzWxU.cjs.map} +1 -1
  248. package/dist/{media-DWG2uW1h.js → media-D5zF3vH6.js} +12 -12
  249. package/dist/{media-DWG2uW1h.js.map → media-D5zF3vH6.js.map} +1 -1
  250. package/dist/media.cjs +1 -1
  251. package/dist/media.js +3 -3
  252. package/dist/{overlays-DQOnI2NS.js → overlays-BahWPCPW.js} +7 -7
  253. package/dist/{overlays-DQOnI2NS.js.map → overlays-BahWPCPW.js.map} +1 -1
  254. package/dist/overlays-D9_8GEse.cjs +2 -0
  255. package/dist/{overlays-CROlfKrR.cjs.map → overlays-D9_8GEse.cjs.map} +1 -1
  256. package/dist/overlays.cjs +1 -1
  257. package/dist/overlays.js +5 -5
  258. package/dist/primitives.cjs +1 -1
  259. package/dist/primitives.js +2 -2
  260. package/dist/{relativeTime-3dGgniAK.js → relativeTime-Cr-NVzij.js} +1 -1
  261. package/dist/{relativeTime-3dGgniAK.js.map → relativeTime-Cr-NVzij.js.map} +1 -1
  262. package/dist/{relativeTime-D5qYOJVu.cjs → relativeTime-DgYBUaVm.cjs} +1 -1
  263. package/dist/{relativeTime-D5qYOJVu.cjs.map → relativeTime-DgYBUaVm.cjs.map} +1 -1
  264. package/dist/style-runtime.cjs +1 -1
  265. package/dist/style-runtime.js +1 -1
  266. package/dist/styles.css +1 -1
  267. package/dist/{MThemeProvider-DUuTvWdm.js → theme-BV4qkzZU.js} +1 -1
  268. package/dist/theme-BV4qkzZU.js.map +1 -0
  269. package/dist/{MThemeProvider-9JHArSd7.cjs → theme-DLorpkJc.cjs} +1 -1
  270. package/dist/theme-DLorpkJc.cjs.map +1 -0
  271. package/dist/theme.cjs +1 -1
  272. package/dist/theme.d.ts +1 -1
  273. package/dist/theme.js +1 -1
  274. package/dist/{typography-CCkJaTzp.js → typography-BR2o3w3X.js} +3 -3
  275. package/dist/{typography-CCkJaTzp.js.map → typography-BR2o3w3X.js.map} +1 -1
  276. package/dist/{typography-CtITQOAU.cjs → typography-BobOsDbn.cjs} +2 -2
  277. package/dist/{typography-CtITQOAU.cjs.map → typography-BobOsDbn.cjs.map} +1 -1
  278. package/dist/typography.cjs +1 -1
  279. package/dist/typography.js +6 -5
  280. package/dist/{useGhostText-Zq3iktss.js → useGhostText-DG0bzcao.js} +1 -1
  281. package/dist/{useGhostText-Zq3iktss.js.map → useGhostText-DG0bzcao.js.map} +1 -1
  282. package/dist/{useGhostText-CL1kSB_V.cjs → useGhostText-QMdO_HK6.cjs} +1 -1
  283. package/dist/{useGhostText-CL1kSB_V.cjs.map → useGhostText-QMdO_HK6.cjs.map} +1 -1
  284. package/dist/{useInteractionEffect-BLehDk91.cjs → useInteractionEffect-DnEfbCrX.cjs} +1 -1
  285. package/dist/{useInteractionEffect-BLehDk91.cjs.map → useInteractionEffect-DnEfbCrX.cjs.map} +1 -1
  286. package/dist/{useInteractionEffect-Dfqq8lGO.js → useInteractionEffect-DtpbVd77.js} +1 -1
  287. package/dist/{useInteractionEffect-Dfqq8lGO.js.map → useInteractionEffect-DtpbVd77.js.map} +1 -1
  288. package/dist/{useKeyboardNav-DBeCcTmg.cjs → useKeyboardNav-BrODLJaL.cjs} +1 -1
  289. package/dist/{useKeyboardNav-DBeCcTmg.cjs.map → useKeyboardNav-BrODLJaL.cjs.map} +1 -1
  290. package/dist/{useKeyboardNav-DXvrPrx9.js → useKeyboardNav-iEXOdEMB.js} +1 -1
  291. package/dist/{useKeyboardNav-DXvrPrx9.js.map → useKeyboardNav-iEXOdEMB.js.map} +1 -1
  292. package/dist/{useReveal-DzskFHKb.js → useReveal-BJ59usiL.js} +1 -1
  293. package/dist/{useReveal-DzskFHKb.js.map → useReveal-BJ59usiL.js.map} +1 -1
  294. package/dist/{useReveal-CdIoh0Rk.cjs → useReveal-B_17PI89.cjs} +1 -1
  295. package/dist/{useReveal-CdIoh0Rk.cjs.map → useReveal-B_17PI89.cjs.map} +1 -1
  296. package/dist/utils.cjs +1 -1
  297. package/dist/utils.js +11 -11
  298. package/dist/{validators-CyDTl6cC.cjs → validators-BeNTD8mf.cjs} +1 -1
  299. package/dist/{validators-CyDTl6cC.cjs.map → validators-BeNTD8mf.cjs.map} +1 -1
  300. package/dist/{validators-ljBWrIca.js → validators-H8tNxb8O.js} +1 -1
  301. package/dist/{validators-ljBWrIca.js.map → validators-H8tNxb8O.js.map} +1 -1
  302. package/package.json +1 -1
  303. package/dist/MArrowDownIcon-BcKSgdTY.js +0 -15
  304. package/dist/MArrowDownIcon-BcKSgdTY.js.map +0 -1
  305. package/dist/MArrowDownIcon-C8EAODgv.cjs +0 -2
  306. package/dist/MArrowDownIcon-C8EAODgv.cjs.map +0 -1
  307. package/dist/MArrowUpDownIcon-CW_PWr7Q.cjs +0 -2
  308. package/dist/MArrowUpDownIcon-CW_PWr7Q.cjs.map +0 -1
  309. package/dist/MArrowUpDownIcon-DukXemVA.js +0 -19
  310. package/dist/MArrowUpDownIcon-DukXemVA.js.map +0 -1
  311. package/dist/MArrowUpIcon-DWV_HYrz.cjs +0 -2
  312. package/dist/MArrowUpIcon-DWV_HYrz.cjs.map +0 -1
  313. package/dist/MArrowUpIcon-Dan-4hs8.js +0 -15
  314. package/dist/MArrowUpIcon-Dan-4hs8.js.map +0 -1
  315. package/dist/MBadge-Babyr1R9.cjs.map +0 -1
  316. package/dist/MBadge-BjZX0MIC.js.map +0 -1
  317. package/dist/MBrandMoreIcons-ClUq3DXO.js +0 -873
  318. package/dist/MBrandMoreIcons-ClUq3DXO.js.map +0 -1
  319. package/dist/MBrandMoreIcons-Xxf9FaIx.cjs +0 -2
  320. package/dist/MBrandMoreIcons-Xxf9FaIx.cjs.map +0 -1
  321. package/dist/MCalendarIcon-4PilFCrR.cjs +0 -2
  322. package/dist/MCalendarIcon-4PilFCrR.cjs.map +0 -1
  323. package/dist/MCalendarIcon-DXx62vjV.js +0 -29
  324. package/dist/MCalendarIcon-DXx62vjV.js.map +0 -1
  325. package/dist/MChatIcon-CnDOfqkO.js +0 -102
  326. package/dist/MChatIcon-CnDOfqkO.js.map +0 -1
  327. package/dist/MChatIcon-DX-u8_6S.cjs +0 -2
  328. package/dist/MChatIcon-DX-u8_6S.cjs.map +0 -1
  329. package/dist/MCheckIcon-DQumT4HX.js +0 -15
  330. package/dist/MCheckIcon-DQumT4HX.js.map +0 -1
  331. package/dist/MCheckIcon-ck_21ybZ.cjs +0 -2
  332. package/dist/MCheckIcon-ck_21ybZ.cjs.map +0 -1
  333. package/dist/MChevronDownIcon-D3yTpzni.js +0 -15
  334. package/dist/MChevronDownIcon-D3yTpzni.js.map +0 -1
  335. package/dist/MChevronDownIcon-DCMmxkRt.cjs +0 -2
  336. package/dist/MChevronDownIcon-DCMmxkRt.cjs.map +0 -1
  337. package/dist/MChevronRightIcon-BC08M6g8.cjs +0 -2
  338. package/dist/MChevronRightIcon-BC08M6g8.cjs.map +0 -1
  339. package/dist/MChevronRightIcon-CXs8IHiV.js +0 -21
  340. package/dist/MChevronRightIcon-CXs8IHiV.js.map +0 -1
  341. package/dist/MClockIcon-C-zYY2A0.cjs +0 -2
  342. package/dist/MClockIcon-C-zYY2A0.cjs.map +0 -1
  343. package/dist/MClockIcon-DefFl5ks.js +0 -19
  344. package/dist/MClockIcon-DefFl5ks.js.map +0 -1
  345. package/dist/MCloseIcon-6cfw9trj.cjs +0 -2
  346. package/dist/MCloseIcon-6cfw9trj.cjs.map +0 -1
  347. package/dist/MCloseIcon-lDH3Vc10.js +0 -15
  348. package/dist/MCloseIcon-lDH3Vc10.js.map +0 -1
  349. package/dist/MDataTable-8ZhnWhqW.cjs +0 -2
  350. package/dist/MDrawer-FYS50FtQ.cjs +0 -2
  351. package/dist/MEllipsisVerticalIcon-C87B9UQK.cjs +0 -2
  352. package/dist/MEllipsisVerticalIcon-C87B9UQK.cjs.map +0 -1
  353. package/dist/MEllipsisVerticalIcon-CNn1AQ8W.js +0 -37
  354. package/dist/MEllipsisVerticalIcon-CNn1AQ8W.js.map +0 -1
  355. package/dist/MFileExtIcons-BoG3GPxg.js +0 -145
  356. package/dist/MFileExtIcons-BoG3GPxg.js.map +0 -1
  357. package/dist/MFileExtIcons-DH9oZPpf.cjs +0 -2
  358. package/dist/MFileExtIcons-DH9oZPpf.cjs.map +0 -1
  359. package/dist/MIcon-BPr09_p4.js +0 -49
  360. package/dist/MIcon-BPr09_p4.js.map +0 -1
  361. package/dist/MIcon-CX5beo32.cjs +0 -2
  362. package/dist/MIcon-CX5beo32.cjs.map +0 -1
  363. package/dist/MImage-CKrjXRmf.js.map +0 -1
  364. package/dist/MImage-f854avZS.cjs.map +0 -1
  365. package/dist/MInput-CQ3MqKsk.cjs +0 -2
  366. package/dist/MInputSearch-Dt79qbZg.cjs +0 -2
  367. package/dist/MMenuIcon-Brpitjq1.cjs +0 -2
  368. package/dist/MMenuIcon-Brpitjq1.cjs.map +0 -1
  369. package/dist/MMenuIcon-idfVpVQD.js +0 -20
  370. package/dist/MMenuIcon-idfVpVQD.js.map +0 -1
  371. package/dist/MPagination-Bu84ZlVh.cjs +0 -2
  372. package/dist/MPagination-Bu84ZlVh.cjs.map +0 -1
  373. package/dist/MPagination-CbkRMnL1.js +0 -147
  374. package/dist/MPagination-CbkRMnL1.js.map +0 -1
  375. package/dist/MPhoneIcon-efl6BqwU.js +0 -38
  376. package/dist/MPhoneIcon-efl6BqwU.js.map +0 -1
  377. package/dist/MPhoneIcon-lgC9DH5a.cjs +0 -2
  378. package/dist/MPhoneIcon-lgC9DH5a.cjs.map +0 -1
  379. package/dist/MProtectIcon-BPYP06QD.cjs +0 -2
  380. package/dist/MProtectIcon-BPYP06QD.cjs.map +0 -1
  381. package/dist/MProtectIcon-BTtMmrib.js +0 -80
  382. package/dist/MProtectIcon-BTtMmrib.js.map +0 -1
  383. package/dist/MQrCode-CbUPPd4S.cjs +0 -2
  384. package/dist/MSearchIcon-BakfEJQd.cjs +0 -2
  385. package/dist/MSearchIcon-BakfEJQd.cjs.map +0 -1
  386. package/dist/MSearchIcon-Dlg4Og8t.js +0 -24
  387. package/dist/MSearchIcon-Dlg4Og8t.js.map +0 -1
  388. package/dist/MSparkline-DjcDtnZH.js.map +0 -1
  389. package/dist/MSparkline-U-XaDvpV.cjs.map +0 -1
  390. package/dist/MStarFillIcon-CGyQPFi8.js +0 -25
  391. package/dist/MStarFillIcon-CGyQPFi8.js.map +0 -1
  392. package/dist/MStarFillIcon-DJHfl_Qy.cjs +0 -2
  393. package/dist/MStarFillIcon-DJHfl_Qy.cjs.map +0 -1
  394. package/dist/MSuccessIcon-CatQ4FmG.cjs +0 -2
  395. package/dist/MSuccessIcon-CatQ4FmG.cjs.map +0 -1
  396. package/dist/MSuccessIcon-D3GrOvye.js +0 -33
  397. package/dist/MSuccessIcon-D3GrOvye.js.map +0 -1
  398. package/dist/MTag-BMi1GS7v.cjs +0 -2
  399. package/dist/MText-C0FdseW1.js +0 -57
  400. package/dist/MText-C0FdseW1.js.map +0 -1
  401. package/dist/MText-OV0ihtQ6.cjs +0 -2
  402. package/dist/MText-OV0ihtQ6.cjs.map +0 -1
  403. package/dist/MThemeProvider-9JHArSd7.cjs.map +0 -1
  404. package/dist/MThemeProvider-DUuTvWdm.js.map +0 -1
  405. package/dist/MZoomInIcon-BEdmglk6.js +0 -134
  406. package/dist/MZoomInIcon-BEdmglk6.js.map +0 -1
  407. package/dist/MZoomInIcon-dhRm7zT6.cjs +0 -2
  408. package/dist/MZoomInIcon-dhRm7zT6.cjs.map +0 -1
  409. package/dist/cards-CKCr-GuJ.js +0 -934
  410. package/dist/cards-CKCr-GuJ.js.map +0 -1
  411. package/dist/cards-yPK4lBAA.cjs +0 -2
  412. package/dist/cards-yPK4lBAA.cjs.map +0 -1
  413. package/dist/controls-DEEbLT5o.cjs +0 -2
  414. package/dist/controls-DEEbLT5o.cjs.map +0 -1
  415. package/dist/controls-IsOBNxW0.js.map +0 -1
  416. package/dist/data-BEH7TbuW.cjs +0 -2
  417. package/dist/data-BEH7TbuW.cjs.map +0 -1
  418. package/dist/data-Bp3Fd2Al.js.map +0 -1
  419. package/dist/display-DmB5CZYB.cjs +0 -2
  420. package/dist/dropdowns-BkBtQP4v.js.map +0 -1
  421. package/dist/dropdowns-CD2myl19.cjs +0 -2
  422. package/dist/dropdowns-CD2myl19.cjs.map +0 -1
  423. package/dist/feedback-CmOz23FV.cjs +0 -2
  424. package/dist/icons.entry-LwjwnjE2.cjs +0 -2
  425. package/dist/icons.entry-LwjwnjE2.cjs.map +0 -1
  426. package/dist/icons.entry-txsQqMvb.js +0 -3318
  427. package/dist/icons.entry-txsQqMvb.js.map +0 -1
  428. package/dist/illustrations.entry-C0rSNpF1.js.map +0 -1
  429. package/dist/inputs-BRjbpf9P.cjs +0 -2
  430. package/dist/layout-BWhQ1VXM.cjs +0 -2
  431. package/dist/media-D0KRmTG_.cjs +0 -2
  432. package/dist/overlays-CROlfKrR.cjs +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"layout-yIAZ4bP6.js","names":[],"sources":["../src/components/layout/MContainer/MContainer.tsx","../src/components/layout/MHeader/MHeader.tsx","../src/components/layout/MFooter/MFooter.tsx","../src/components/layout/MNavbar/MNavbar.tsx","../src/components/layout/MTopbar/MTopbar.tsx","../src/components/layout/MNavs/MNavs.tsx","../src/components/layout/MTabs/MTabs.tsx","../src/components/layout/MSection/MSection.tsx","../src/components/layout/MSimpleGrid/MSimpleGrid.tsx","../src/components/layout/MGrid/MGrid.tsx","../src/components/layout/MDivider/MDivider.tsx","../src/components/layout/MSidebar/MSidebar.tsx","../src/components/layout/MBreadcrumb/MBreadcrumb.tsx","../src/components/layout/MAppShell/MAppShell.tsx"],"sourcesContent":["import type {MContainerProps} from './MContainer.types'\nimport {cn} from '../../../utils/cn'\nimport {getLayoutUtilityClassNames, getLayoutUtilityStyles} from '../../../utils/layoutProps'\nimport './MContainer.css'\n\n// Constrain page content widths and apply shared spacing utilities.\nexport function MContainer({\n size = 'content',\n padded = true,\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n className,\n style,\n children,\n ...rest\n}: MContainerProps) {\n const utilityStyle = getLayoutUtilityStyles({fsize})\n\n return (\n <div\n className={cn(\n 'container',\n size,\n padded && 'padded',\n ...getLayoutUtilityClassNames({\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n }),\n className\n )}\n style={{...utilityStyle, ...style}}\n {...rest}\n >\n {children}\n </div>\n )\n}\n","import type {MHeaderProps} from './MHeader.types'\nimport {cn} from '../../../utils/cn'\nimport {MContainer} from '../MContainer'\nimport './MHeader.css'\n\n// Render a reusable page header shell aligned to a shared container.\nexport function MHeader({\n container = 'wide',\n padded = true,\n bordered = true,\n sticky = false,\n tone = 'surface',\n layout = 'split',\n className,\n children,\n ...rest\n}: MHeaderProps) {\n return (\n <header className={cn('header', tone, bordered && 'bordered', sticky && 'sticky', className)} {...rest}>\n <MContainer size={container} padded={padded} className={cn('inner', `layout-${layout}`)}>\n {children}\n </MContainer>\n </header>\n )\n}\n","import type {MFooterProps} from './MFooter.types'\nimport {cn} from '../../../utils/cn'\nimport {getLayoutUtilityClassNames, getLayoutUtilityStyles} from '../../../utils/layoutProps'\nimport {MContainer} from '../MContainer'\nimport './MFooter.css'\n\n// Render a reusable page footer shell with shared spacing utilities.\nexport function MFooter({\n container = 'wide',\n padded = true,\n bordered = true,\n tone = 'surface',\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n className,\n style,\n children,\n ...rest\n}: MFooterProps) {\n const utilityStyle = getLayoutUtilityStyles({fsize})\n\n return (\n <footer\n className={cn(\n 'footer',\n tone,\n bordered && 'bordered',\n ...getLayoutUtilityClassNames({\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n }),\n className\n )}\n style={{...utilityStyle, ...style}}\n {...rest}\n >\n <MContainer size={container} padded={padded} className=\"inner\" fullWidth>\n {children}\n </MContainer>\n </footer>\n )\n}\n","import type {MNavbarProps} from './MNavbar.types'\nimport {cn} from '../../../utils/cn'\nimport {MContainer} from '../MContainer'\nimport './MNavbar.css'\n\n// Render a horizontal app or site navigation shell with container alignment.\nexport function MNavbar({\n container = 'content',\n padded = true,\n bordered = true,\n sticky = false,\n tone = 'surface',\n justify = 'between',\n wrap = false,\n className,\n children,\n ...rest\n}: MNavbarProps) {\n return (\n <nav className={cn('navbar', tone, bordered && 'bordered', sticky && 'sticky', className)} {...rest}>\n <MContainer size={container} padded={padded} className=\"container\">\n <div className={cn('inner', justify, wrap && 'wrap')}>{children}</div>\n </MContainer>\n </nav>\n )\n}\n","import {useEffect, useMemo, useRef, useState} from 'react'\nimport type {ReactNode} from 'react'\nimport type {MTopbarItem, MTopbarProps} from './MTopbar.types'\nimport {cn} from '../../../utils/cn'\nimport {MContainer} from '../MContainer'\nimport {MButton} from '../../controls'\nimport {MLink} from '../../typography'\nimport {MChevronDownIcon, MChevronLeftIcon, MChevronRightIcon} from '../../../icons'\nimport {MDropdownGroup, MDropdownItem, MDropdownMenu} from '../../overlays/MDropdownMenu'\nimport './MTopbar.css'\n\nfunction getItemKey(item: MTopbarItem): string {\n return item.key ?? item.to ?? item.href ?? String(item.label)\n}\n\nfunction itemHasActiveDescendant(item: MTopbarItem): boolean {\n if (item.active) return true\n return (item.children ?? []).some(itemHasActiveDescendant)\n}\n\nfunction renderItemContent(item: MTopbarItem, withChevron = false, isOpen = false): ReactNode {\n return (\n <>\n {item.icon ? <span className=\"topbar-icon\">{item.icon}</span> : null}\n <span>{item.label}</span>\n {item.badge ? <span className=\"topbar-badge\">{item.badge}</span> : null}\n {withChevron ? (\n <span className={cn('topbar-chevron', isOpen && 'open')} aria-hidden=\"true\">\n <MChevronDownIcon size=\"sm\" />\n </span>\n ) : null}\n </>\n )\n}\n\nfunction renderDropdownChildren(children: MTopbarItem[]): ReactNode {\n return children.map((child) => {\n if (child.children?.length) {\n return (\n <MDropdownGroup key={getItemKey(child)} label={String(child.label)}>\n {renderDropdownChildren(child.children)}\n </MDropdownGroup>\n )\n }\n\n return (\n <MDropdownItem\n key={getItemKey(child)}\n icon={child.icon}\n label={child.label}\n href={child.href}\n to={child.to}\n onClick={child.onClick}\n color={child.color}\n disabled={child.disabled}\n active={child.active}\n component={child.component}\n className={child.className}\n />\n )\n })\n}\n\nexport function MTopbar({\n items,\n container = 'full',\n padded = true,\n bordered = true,\n sticky = false,\n tone = 'surface',\n justify = 'left',\n size = 'md',\n openOn = 'hover',\n dropdownPlacement = 'bottom-start',\n className,\n style,\n ...rest\n}: MTopbarProps) {\n const [coarsePointer, setCoarsePointer] = useState(false)\n const [openMap, setOpenMap] = useState<Record<string, boolean>>({})\n const [hasOverflow, setHasOverflow] = useState(false)\n const [canScrollLeft, setCanScrollLeft] = useState(false)\n const [canScrollRight, setCanScrollRight] = useState(false)\n const viewportRef = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n const media = window.matchMedia('(pointer: coarse)')\n const sync = () => setCoarsePointer(media.matches)\n\n sync()\n\n if (typeof media.addEventListener === 'function') {\n media.addEventListener('change', sync)\n return () => media.removeEventListener('change', sync)\n }\n\n media.addListener(sync)\n return () => media.removeListener(sync)\n }, [])\n\n useEffect(() => {\n const viewport = viewportRef.current\n if (!viewport) return\n\n const updateOverflow = () => {\n const nextHasOverflow = viewport.scrollWidth > viewport.clientWidth + 1\n setHasOverflow(nextHasOverflow)\n setCanScrollLeft(viewport.scrollLeft > 4)\n setCanScrollRight(viewport.scrollLeft + viewport.clientWidth < viewport.scrollWidth - 4)\n }\n\n updateOverflow()\n\n viewport.addEventListener('scroll', updateOverflow, {passive: true})\n\n const observer = new ResizeObserver(updateOverflow)\n observer.observe(viewport)\n Array.from(viewport.children).forEach((child) => observer.observe(child))\n\n return () => {\n viewport.removeEventListener('scroll', updateOverflow)\n observer.disconnect()\n }\n }, [items, justify, size, tone, bordered, padded, container])\n\n const resolvedOpenOn = useMemo(() => (coarsePointer ? 'click' : openOn), [coarsePointer, openOn])\n\n const scrollByAmount = (direction: 'left' | 'right') => {\n const viewport = viewportRef.current\n if (!viewport) return\n\n const amount = Math.max(180, Math.floor(viewport.clientWidth * 0.45))\n viewport.scrollBy({\n left: direction === 'left' ? -amount : amount,\n behavior: 'smooth',\n })\n }\n\n return (\n <nav\n className={cn('topbar', tone, size, bordered && 'bordered', sticky && 'sticky', className)}\n style={style}\n {...rest}\n >\n <MContainer size={container} padded={padded} className=\"topbar-container\">\n <div className={cn('topbar-scroll-shell', hasOverflow && 'overflowing')}>\n {hasOverflow && (\n <MButton\n variant=\"ghost\"\n color=\"neutral\"\n iconOnly\n shape=\"circle\"\n className={cn('topbar-scroll-button', 'left', !canScrollLeft && 'hidden')}\n onClick={() => scrollByAmount('left')}\n aria-label=\"Scroll topbar left\"\n >\n <MChevronLeftIcon />\n </MButton>\n )}\n\n <div ref={viewportRef} className=\"topbar-viewport\">\n <div className={cn('topbar-list', `justify-${justify}`, hasOverflow && 'overflowing')}>\n {items.map((item) => {\n const itemKey = getItemKey(item)\n const isActive = itemHasActiveDescendant(item)\n const isOpen = !!openMap[itemKey]\n\n if (item.children?.length) {\n if (item.disabled) {\n return (\n <div\n key={itemKey}\n className={cn('topbar-trigger', item.color, 'disabled', item.className)}\n aria-disabled=\"true\"\n >\n {renderItemContent(item, true)}\n </div>\n )\n }\n\n return (\n <MDropdownMenu\n key={itemKey}\n trigger={\n <div\n className={cn(\n 'topbar-trigger',\n item.color,\n isActive && 'active',\n isOpen && 'open',\n item.disabled && 'disabled',\n item.className\n )}\n >\n {renderItemContent(item, true, isOpen)}\n </div>\n }\n openOn={item.openOn ?? resolvedOpenOn}\n onOpenChange={(nextOpen) =>\n setOpenMap((prev) => ({...prev, [itemKey]: nextOpen}))\n }\n placement={dropdownPlacement}\n popoverClassName=\"topbar-dropdown-popover\"\n >\n {renderDropdownChildren(item.children)}\n </MDropdownMenu>\n )\n }\n\n return (\n <MLink\n key={itemKey}\n component={item.component}\n href={item.href}\n to={item.to}\n onClick={item.onClick}\n current={item.active}\n disabled={item.disabled}\n underline=\"none\"\n tone=\"inherit\"\n className={cn(\n 'topbar-link',\n item.color,\n item.className,\n item.active && 'active'\n )}\n >\n {renderItemContent(item)}\n </MLink>\n )\n })}\n </div>\n </div>\n\n {hasOverflow && (\n <MButton\n variant=\"ghost\"\n color=\"neutral\"\n iconOnly\n shape=\"circle\"\n className={cn('topbar-scroll-button', 'right', !canScrollRight && 'hidden')}\n onClick={() => scrollByAmount('right')}\n aria-label=\"Scroll topbar right\"\n >\n <MChevronRightIcon />\n </MButton>\n )}\n </div>\n </MContainer>\n </nav>\n )\n}\n","import type {MNavsProps} from './MNavs.types'\nimport {cn} from '../../../utils/cn'\nimport {MLink} from '../../typography'\nimport './MNavs.css'\n\n// Render a lightweight navigation list from data or custom children.\nexport function MNavs({items, orientation = 'horizontal', wrap = false, className, children, ...rest}: MNavsProps) {\n return (\n <div className={cn('navs', orientation, wrap && 'wrap', className)} {...rest}>\n {items\n ? items.map((item) => (\n <MLink\n key={item.key ?? item.href ?? item.title?.toString() ?? item.label?.toString()}\n component={item.component}\n href={item.href}\n to={item.to}\n target={item.target}\n rel={item.rel}\n title={item.title}\n current={item.current}\n disabled={item.disabled}\n className={cn('link', item.className)}\n >\n {item.label}\n </MLink>\n ))\n : children}\n </div>\n )\n}\n","import {useId, useMemo, useState} from 'react'\nimport type {KeyboardEvent} from 'react'\nimport type {MTabsItem, MTabsProps} from './MTabs.types'\nimport {cn} from '../../../utils/cn'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport './MTabs.css'\n\ninterface MTabsTriggerProps {\n item: MTabsItem\n isActive: boolean\n tabId: string\n panelId: string\n clickEffect: MTabsProps['clickEffect']\n rippleColor: string | undefined\n onSelect: (value: string) => void\n}\n\n// Keep the tab trigger behavior isolated from the list and panel rendering.\nfunction MTabsTrigger({item, isActive, tabId, panelId, clickEffect, rippleColor, onSelect}: MTabsTriggerProps) {\n const {effectClassName, effectLayer, handlePointerDown, triggerEffect} = useInteractionEffect<HTMLButtonElement>({\n effect: clickEffect,\n disabled: item.disabled,\n centered: true,\n color: rippleColor,\n })\n\n return (\n <button\n type=\"button\"\n id={tabId}\n role=\"tab\"\n aria-selected={isActive}\n aria-controls={panelId}\n tabIndex={isActive ? 0 : -1}\n disabled={item.disabled}\n className={cn('tabs-trigger', isActive && 'active', item.disabled && 'disabled', effectClassName)}\n onPointerDown={handlePointerDown}\n onKeyDown={(event) => {\n if (event.key === ' ' || event.key === 'Enter') {\n triggerEffect(event.currentTarget)\n }\n }}\n onClick={() => onSelect(item.value)}\n >\n {effectLayer}\n {item.icon && <span className=\"tabs-icon\">{item.icon}</span>}\n <span className=\"tabs-label\">{item.label}</span>\n </button>\n )\n}\n\nexport function MTabs({\n items,\n value,\n defaultValue,\n onValueChange,\n variant = 'underline',\n orientation = 'horizontal',\n size = 'md',\n fullWidth = false,\n showPanels = true,\n panelClassName,\n clickEffect = 'ripple',\n rippleColor,\n className,\n ...rest\n}: MTabsProps) {\n // Pick the first enabled item when the caller does not control the active tab.\n const fallbackValue = useMemo(\n () => defaultValue ?? items.find((item) => !item.disabled)?.value ?? '',\n [defaultValue, items]\n )\n const [internalValue, setInternalValue] = useState(fallbackValue)\n const activeValue = value ?? internalValue\n const activeItem = items.find((item) => item.value === activeValue) ?? items[0]\n const baseId = useId()\n\n // Support both controlled and uncontrolled tab state.\n function selectTab(nextValue: string) {\n if (value === undefined) {\n setInternalValue(nextValue)\n }\n onValueChange?.(nextValue)\n }\n\n // Re-map keyboard navigation depending on the rendered orientation.\n function handleKeyDown(event: KeyboardEvent<HTMLDivElement>) {\n const enabledItems = items.filter((item) => !item.disabled)\n const currentIndex = enabledItems.findIndex((item) => item.value === activeItem?.value)\n\n if (currentIndex === -1) {\n return\n }\n\n const nextKeys = orientation === 'vertical' ? ['ArrowDown'] : ['ArrowRight', 'ArrowDown']\n const previousKeys = orientation === 'vertical' ? ['ArrowUp'] : ['ArrowLeft', 'ArrowUp']\n\n if (nextKeys.includes(event.key)) {\n event.preventDefault()\n const nextItem = enabledItems[(currentIndex + 1) % enabledItems.length]\n selectTab(nextItem.value)\n }\n\n if (previousKeys.includes(event.key)) {\n event.preventDefault()\n const nextItem = enabledItems[(currentIndex - 1 + enabledItems.length) % enabledItems.length]\n selectTab(nextItem.value)\n }\n }\n\n return (\n <div className={cn('tabs', variant, orientation, size, fullWidth && 'full-width', className)} {...rest}>\n <div className=\"tabs-list\" role=\"tablist\" aria-orientation={orientation} onKeyDown={handleKeyDown}>\n {items.map((item) => {\n const isActive = item.value === activeItem?.value\n const tabId = `${baseId}-${item.value}-tab`\n const panelId = `${baseId}-${item.value}-panel`\n\n return (\n <MTabsTrigger\n key={item.value}\n item={item}\n isActive={isActive}\n tabId={tabId}\n panelId={panelId}\n clickEffect={clickEffect}\n rippleColor={rippleColor}\n onSelect={selectTab}\n />\n )\n })}\n </div>\n\n {showPanels && activeItem?.content !== undefined && (\n <div\n key={activeItem.value}\n id={`${baseId}-${activeItem.value}-panel`}\n role=\"tabpanel\"\n aria-labelledby={`${baseId}-${activeItem.value}-tab`}\n className={cn('tabs-panel', panelClassName)}\n >\n {activeItem.content}\n </div>\n )}\n </div>\n )\n}\n","import type React from 'react'\nimport type {MSectionProps} from './MSection.types'\nimport {cn} from '../../../utils/cn'\nimport {useReveal} from '../../../utils/useReveal'\nimport './MSection.css'\n\n// Render a semantic page section with predefined spacing and tone.\nexport function MSection({\n as = 'section',\n spacing = 'lg',\n tone = 'default',\n reveal,\n className,\n style,\n children,\n ...rest\n}: MSectionProps) {\n const Component = as\n const revealRef = useReveal(reveal)\n const hasReveal = reveal !== undefined && reveal !== false\n\n return (\n <Component\n ref={hasReveal ? (revealRef as React.RefObject<never>) : undefined}\n className={cn('section', spacing, tone, hasReveal && 'reveal', className)}\n style={style}\n {...rest}\n >\n {children}\n </Component>\n )\n}\n","import type {MSimpleGridProps} from './MSimpleGrid.types'\nimport {cn} from '../../../utils/cn'\nimport './MSimpleGrid.css'\n\n// Render a simple equal-column grid with a shared default spacing.\nexport function MSimpleGrid({columns = 2, minItemWidth, className, style, children, ...rest}: MSimpleGridProps) {\n return (\n <div\n className={cn('grid', `columns-${columns}`, className)}\n style={{\n ...(minItemWidth ? {'--grid-min-item-width': minItemWidth} : {}),\n ...style,\n }}\n {...rest}\n >\n {children}\n </div>\n )\n}\n","import {Children, cloneElement, isValidElement} from 'react'\nimport type {ReactElement} from 'react'\nimport type {MGridColumns, MGridItemProps, MGridProps} from './MGrid.types'\nimport {cn} from '../../../utils/cn'\nimport {getLayoutUtilityClassNames, getLayoutUtilityStyles} from '../../../utils/layoutProps'\nimport './MGrid.css'\n\ntype GridBreakpoint = 'span' | 'xl' | 'lg' | 'md' | 'sm'\n\nfunction isGridColumnElement(child: unknown): child is ReactElement<MGridProps | MGridItemProps> {\n if (!isValidElement(child)) {\n return false\n }\n\n if (child.type === MGridItem) {\n return true\n }\n\n return child.type === MGrid && (child.props as MGridProps).type === 'col'\n}\n\nfunction getNormalizedSpans(props: Partial<MGridProps>) {\n return {\n span: props.span ?? props.xl ?? props.lg ?? props.md ?? props.sm,\n xl: props.xl ?? props.lg ?? props.md ?? props.sm,\n lg: props.lg ?? props.md ?? props.sm,\n md: props.md ?? props.sm,\n sm: props.sm,\n }\n}\n\nfunction distributeRemainingColumns(remaining: number, count: number): Array<MGridColumns | undefined> {\n if (count <= 0) {\n return []\n }\n\n if (remaining <= 0) {\n return Array.from({length: count}, () => undefined)\n }\n\n const base = Math.floor(remaining / count)\n const extra = remaining % count\n\n return Array.from({length: count}, (_, index) => {\n const value = base + (index < extra ? 1 : 0)\n return value >= 1 ? (value as MGridColumns) : undefined\n })\n}\n\nfunction resolveAutoSpans(columnProps: Array<Partial<MGridProps>>) {\n const breakpoints: GridBreakpoint[] = ['span', 'xl', 'lg', 'md', 'sm']\n const normalized = columnProps.map((props) => getNormalizedSpans(props))\n const resolved = normalized.map((spans) => ({...spans}))\n\n for (const breakpoint of breakpoints) {\n const autoIndexes: number[] = []\n let usedColumns = 0\n\n normalized.forEach((spans, index) => {\n const value = spans[breakpoint]\n\n if (value) {\n usedColumns += value\n return\n }\n\n autoIndexes.push(index)\n })\n\n const distributed = distributeRemainingColumns(Math.max(12 - usedColumns, 0), autoIndexes.length)\n\n autoIndexes.forEach((columnIndex, autoIndex) => {\n resolved[columnIndex][breakpoint] = distributed[autoIndex]\n })\n }\n\n return resolved\n}\n\n// Render either a responsive row or a responsive column using one shared grid API.\nexport function MGrid({\n type = 'row',\n span,\n sm,\n md,\n lg,\n xl,\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n className,\n style,\n children,\n ...rest\n}: MGridProps) {\n const utilityStyle = getLayoutUtilityStyles({fsize})\n const baseSpan = span ?? xl ?? lg\n\n if (type === 'col') {\n return (\n <div\n className={cn(\n 'grid',\n 'col',\n baseSpan ? `span-${baseSpan}` : 'span-auto',\n xl && `xl-${xl}`,\n lg && `lg-${lg}`,\n md && `md-${md}`,\n sm && `sm-${sm}`,\n ...getLayoutUtilityClassNames({\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n }),\n className\n )}\n style={{...utilityStyle, ...style}}\n {...rest}\n >\n {children}\n </div>\n )\n }\n\n const childArray = Children.toArray(children)\n const columnEntries = childArray.flatMap((child, index) => (isGridColumnElement(child) ? [{child, index}] : []))\n const autoColumns = Math.min(Math.max(columnEntries.length || childArray.length, 1), 12)\n const hasTrackedSizing = columnEntries.some(({child}) => {\n const p = child.props as MGridProps\n return Boolean(p.span || p.xl || p.lg || p.md || p.sm)\n })\n const resolvedSpans = hasTrackedSizing\n ? resolveAutoSpans(columnEntries.map(({child}) => child.props as Partial<MGridProps>))\n : null\n const resolvedChildren =\n hasTrackedSizing && resolvedSpans\n ? childArray.map((child, childIndex) => {\n const columnIndex = columnEntries.findIndex((entry) => entry.index === childIndex)\n\n if (columnIndex === -1 || !isGridColumnElement(child)) {\n return child\n }\n\n const spans = resolvedSpans[columnIndex]\n\n return cloneElement(child, {\n span: spans.span,\n xl: spans.xl,\n lg: spans.lg,\n md: spans.md,\n sm: spans.sm,\n })\n })\n : childArray\n\n return (\n <div\n className={cn(\n 'grid',\n 'row',\n hasTrackedSizing ? 'tracked' : `auto-cols-${autoColumns}`,\n ...getLayoutUtilityClassNames({\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth: fullWidth ?? true,\n }),\n className\n )}\n style={{...utilityStyle, ...style}}\n {...rest}\n >\n {resolvedChildren}\n </div>\n )\n}\n\n// Keep MGridItem as a compatibility alias for explicit column declarations.\nexport function MGridItem({span, sm, md, lg, xl, ...rest}: MGridItemProps) {\n return <MGrid type=\"col\" span={span} sm={sm} md={md} lg={lg} xl={xl} {...rest} />\n}\n","import type {MDividerProps} from './MDivider.types'\nimport {cn} from '../../../utils/cn'\nimport './MDivider.css'\n\n// Render a semantic divider line between related content blocks.\nexport function MDivider({orientation = 'horizontal', variant = 'solid', className, style, ...rest}: MDividerProps) {\n return (\n <div\n role=\"separator\"\n aria-orientation={orientation}\n className={cn('divider', orientation, variant, className)}\n style={style}\n {...rest}\n />\n )\n}\n","import {createContext, useContext, useState, useEffect, useCallback, useMemo} from 'react'\nimport {cn} from '../../../utils/cn'\nimport {MButton} from '../../controls'\nimport {MChevronRightIcon, MMenuIcon} from '../../../icons'\nimport {MDropdownMenu, MTooltip} from '../../overlays'\nimport type {\n MSidebarProps,\n MSidebarHeaderProps,\n MSidebarBodyProps,\n MSidebarNavProps,\n MSidebarItemProps,\n MSidebarGroupProps,\n MSidebarFooterProps,\n MSidebarDividerProps,\n MSidebarMode,\n} from './MSidebar.types'\nimport './MSidebar.css'\n\nconst STORAGE_KEY = 'mineralui-sidebar'\n\ninterface SidebarContextValue {\n mode: MSidebarMode\n mobile: boolean\n mobileOpen: boolean\n canToggle: boolean\n toggleMode: () => void\n}\n\nconst SidebarCtx = createContext<SidebarContextValue>({\n mode: 'expanded',\n mobile: false,\n mobileOpen: false,\n canToggle: false,\n toggleMode: () => {},\n})\n\n// Read shared sidebar state inside slot components.\nfunction useSidebar() {\n return useContext(SidebarCtx)\n}\n\n// Track the responsive breakpoint once for the whole sidebar tree.\nfunction useIsMobile(breakpoint: number): boolean {\n const [mobile, setMobile] = useState(() => (typeof window !== 'undefined' ? window.innerWidth < breakpoint : false))\n\n useEffect(() => {\n const mq = window.matchMedia(`(max-width: ${breakpoint - 1}px)`)\n const handler = (e: MediaQueryListEvent) => setMobile(e.matches)\n\n setMobile(mq.matches)\n mq.addEventListener('change', handler)\n return () => mq.removeEventListener('change', handler)\n }, [breakpoint])\n\n return mobile\n}\n\n// Render the sidebar shell and coordinate desktop and mobile behavior.\nexport function MSidebar({\n mode: modeProp = 'auto',\n defaultMode = 'expanded',\n onModeChange,\n persist = false,\n side = 'left',\n tone = 'subtle',\n bordered = true,\n mobileBreakpoint = 768,\n className,\n style,\n children,\n}: MSidebarProps) {\n const mobile = useIsMobile(mobileBreakpoint)\n const [mobileOpen, setMobileOpen] = useState(false)\n\n const [internalMode, setInternalMode] = useState<MSidebarMode>(() => {\n if (persist) {\n try {\n const v = localStorage.getItem(STORAGE_KEY)\n if (v === 'expanded' || v === 'collapsed') return v\n } catch {\n /* noop */\n }\n }\n\n return defaultMode\n })\n\n const resolvedMode: MSidebarMode =\n modeProp === 'auto' ? internalMode : modeProp === 'collapsed' ? 'collapsed' : 'expanded'\n\n // MToggle only the desktop width state. Mobile uses its own overlay flow.\n const toggleMode = useCallback(() => {\n const next: MSidebarMode = resolvedMode === 'expanded' ? 'collapsed' : 'expanded'\n\n setInternalMode(next)\n onModeChange?.(next)\n\n if (persist) {\n try {\n localStorage.setItem(STORAGE_KEY, next)\n } catch {\n /* noop */\n }\n }\n }, [resolvedMode, onModeChange, persist])\n\n const closeMobile = useCallback(() => setMobileOpen(false), [])\n\n // Let Escape close the temporary mobile drawer.\n useEffect(() => {\n if (!mobileOpen) return\n\n const handler = (e: KeyboardEvent) => {\n if (e.key === 'Escape') setMobileOpen(false)\n }\n\n document.addEventListener('keydown', handler)\n return () => document.removeEventListener('keydown', handler)\n }, [mobileOpen])\n\n const canToggle = !mobile && modeProp === 'auto'\n\n const ctx = useMemo<SidebarContextValue>(\n () => ({mode: resolvedMode, mobile, mobileOpen, canToggle, toggleMode}),\n [resolvedMode, mobile, mobileOpen, canToggle, toggleMode]\n )\n\n const isCollapsed = !mobile && resolvedMode === 'collapsed'\n\n const sidebarCls = cn(\n 'sidebar',\n tone,\n side,\n isCollapsed && 'collapsed',\n bordered && 'bordered',\n mobile && 'mobile',\n mobile && mobileOpen && 'mobile-open',\n className\n )\n\n return (\n <SidebarCtx.Provider value={ctx}>\n {mobile && mobileOpen && <div className=\"sidebar-backdrop\" onClick={closeMobile} />}\n\n <aside className={sidebarCls} style={style}>\n {children}\n </aside>\n\n {mobile && !mobileOpen && (\n <button\n className={cn('sidebar-hamburger', side)}\n onClick={() => setMobileOpen(true)}\n aria-label=\"Open menu\"\n >\n <span className=\"sidebar-hamburger-icon\" aria-hidden=\"true\">\n <MMenuIcon />\n </span>\n </button>\n )}\n </SidebarCtx.Provider>\n )\n}\n\n// Render the top area with branding and an optional collapse toggle.\nexport function MSidebarHeader({bordered = false, className, children}: MSidebarHeaderProps) {\n const {mode, mobile, canToggle, toggleMode} = useSidebar()\n const isCollapsed = !mobile && mode === 'collapsed'\n\n return (\n <div className={cn('sidebar-header', bordered && 'bordered', className)}>\n <div className=\"sidebar-header-content\">{children}</div>\n {canToggle && (\n <MButton\n variant=\"outlined\"\n color=\"neutral\"\n iconOnly\n size=\"sm\"\n onClick={toggleMode}\n aria-label={isCollapsed ? 'Expand sidebar' : 'Collapse sidebar'}\n className=\"sidebar-toggle\"\n >\n <span className={cn('sidebar-chevron', isCollapsed && 'flipped')}>\n <MChevronRightIcon />\n </span>\n </MButton>\n )}\n </div>\n )\n}\n\n// Wrap the scrollable middle area between header and footer.\nexport function MSidebarBody({className, children}: MSidebarBodyProps) {\n return <div className={cn('sidebar-body', className)}>{children}</div>\n}\n\n// Wrap sidebar links in a navigation landmark.\nexport function MSidebarNav({className, children}: MSidebarNavProps) {\n return <nav className={cn('sidebar-nav', className)}>{children}</nav>\n}\n\n// Render one clickable sidebar row as a link, button or custom component.\nexport function MSidebarItem({\n icon,\n label,\n href,\n to,\n onClick,\n active = false,\n disabled = false,\n badge,\n color,\n component,\n className,\n}: MSidebarItemProps) {\n const {mode, mobile} = useSidebar()\n const isCollapsed = !mobile && mode === 'collapsed'\n\n const Tag = component ?? (href || to ? 'a' : 'button')\n const linkProps = component ? (to ? {to} : href ? {href} : {}) : href ? {href} : to ? {href: to} : {}\n const cls = cn('sidebar-item', active && 'active', disabled && 'disabled', color, className)\n\n return (\n <Tag\n className={cls}\n onClick={disabled ? undefined : onClick}\n aria-disabled={disabled || undefined}\n title={isCollapsed ? label : undefined}\n {...linkProps}\n >\n {icon && <span className=\"sidebar-item-icon\">{icon}</span>}\n {!isCollapsed && (\n <MTooltip content={label} placement=\"top\" className=\"sidebar-item-label-tooltip\">\n <span className=\"sidebar-item-label\">{label}</span>\n </MTooltip>\n )}\n {!isCollapsed && badge && <span className=\"sidebar-item-badge\">{badge}</span>}\n </Tag>\n )\n}\n\n// Group related sidebar items and swap to a dropdown when collapsed.\nexport function MSidebarGroup({\n label,\n icon,\n active = false,\n defaultOpen = true,\n collapsible = true,\n children,\n className,\n}: MSidebarGroupProps) {\n const sidebarCtx = useSidebar()\n const {mode, mobile} = sidebarCtx\n const isCollapsed = !mobile && mode === 'collapsed'\n const [open, setOpen] = useState(defaultOpen)\n\n const expandedCtx = useMemo<SidebarContextValue>(() => ({...sidebarCtx, mode: 'expanded'}), [sidebarCtx])\n\n // Keep expand/collapse local to this group.\n const toggle = () => {\n if (collapsible) setOpen((o) => !o)\n }\n\n if (isCollapsed) {\n const trigger = (\n <span className={cn('sidebar-group-icon collapsed', active && 'active')} title={label}>\n {icon}\n </span>\n )\n\n return (\n <div className={cn('sidebar-group', className)}>\n <MDropdownMenu trigger={trigger} placement=\"right-start\" closeOnSelect openOn=\"hover\">\n <SidebarCtx.Provider value={expandedCtx}>{children}</SidebarCtx.Provider>\n </MDropdownMenu>\n </div>\n )\n }\n\n return (\n <div className={cn('sidebar-group', className)}>\n <button className={cn('sidebar-group-header', active && 'active')} onClick={toggle} aria-expanded={open}>\n {icon && <span className=\"sidebar-group-icon\">{icon}</span>}\n <span className=\"sidebar-group-label\">{label}</span>\n {collapsible && (\n <span className={cn('sidebar-group-arrow', open && 'open')}>\n <MChevronRightIcon />\n </span>\n )}\n </button>\n {open && <div className=\"sidebar-group-items\">{children}</div>}\n </div>\n )\n}\n\n// Render the bottom slot for version info or quick actions.\nexport function MSidebarFooter({bordered = false, className, children}: MSidebarFooterProps) {\n return <div className={cn('sidebar-footer', bordered && 'bordered', className)}>{children}</div>\n}\n\n// Render a spacing-aware divider between sidebar regions.\nexport function MSidebarDivider({className, spacing = 'md'}: MSidebarDividerProps) {\n return <hr className={cn('sidebar-divider', spacing, className)} />\n}\n","import {useMemo} from 'react'\nimport {cn} from '../../../utils/cn'\nimport type {MBreadcrumbProps} from './MBreadcrumb.types'\nimport './MBreadcrumb.css'\n\n// Render a compact path and collapse the middle when needed.\nexport function MBreadcrumb({items, separator = '/', maxItems, className, ...rest}: MBreadcrumbProps) {\n // Keep the current page visible while shortening deep paths.\n const visible = useMemo(() => {\n if (!maxItems || maxItems >= items.length) return items\n if (maxItems < 2) return [items[items.length - 1]]\n const head = items.slice(0, 1)\n const tail = items.slice(-(maxItems - 1))\n return [...head, null, ...tail]\n }, [items, maxItems])\n\n return (\n <nav aria-label=\"breadcrumb\" className={cn('breadcrumb', className)} {...rest}>\n <ol className=\"trail\">\n {visible.map((item, i) => {\n if (item === null) {\n return (\n <li key=\"ellipsis\" className=\"crumb dots\">\n <span className=\"sep\">{separator}</span>\n <span>&#8230;</span>\n </li>\n )\n }\n\n const isLast = i === visible.length - 1\n\n return (\n <li key={i} className={cn('crumb', isLast && 'active')}>\n {i > 0 && <span className=\"sep\">{separator}</span>}\n {item.href && !isLast ? (\n <a href={item.href} className=\"link\" onClick={item.onClick}>\n {item.label}\n </a>\n ) : item.onClick && !isLast ? (\n <button type=\"button\" className=\"link btn\" onClick={item.onClick}>\n {item.label}\n </button>\n ) : (\n <span className=\"current\" aria-current={isLast ? 'page' : undefined}>\n {item.label}\n </span>\n )}\n </li>\n )\n })}\n </ol>\n </nav>\n )\n}\n","import {forwardRef, Children, isValidElement} from 'react'\nimport type * as React from 'react'\nimport type {MAppShellProps, MBodyProps} from './MAppShell.types'\nimport {cn} from '../../../utils/cn'\nimport {MSidebar} from '../MSidebar'\nimport './MAppShell.css'\n\nexport const MAppShell = forwardRef<HTMLDivElement, MAppShellProps>(function MAppShell(\n {className, children, ...rest},\n ref\n) {\n const sidebarElements: React.ReactNode[] = []\n const otherElements: React.ReactNode[] = []\n\n Children.forEach(children, (child) => {\n if (isValidElement(child) && child.type === MSidebar) {\n sidebarElements.push(child)\n } else {\n otherElements.push(child)\n }\n })\n\n return (\n <div ref={ref} className={cn('app-shell', className)} {...rest}>\n {sidebarElements}\n <div className=\"app-main\">{otherElements}</div>\n </div>\n )\n})\n\nexport const MBody = forwardRef<HTMLDivElement, MBodyProps>(function MBody({className, children, ...rest}, ref) {\n return (\n <div ref={ref} className={cn('app-body', className)} {...rest}>\n {children}\n </div>\n )\n})\n"],"mappings":"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"}
1
+ {"version":3,"file":"layout-UP_12LRD.js","names":[],"sources":["../src/components/layout/MContainer/MContainer.tsx","../src/components/layout/MHeader/MHeader.tsx","../src/components/layout/MFooter/MFooter.tsx","../src/components/layout/MNavbar/MNavbar.tsx","../src/components/layout/MTopbar/MTopbar.tsx","../src/components/layout/MNavs/MNavs.tsx","../src/components/layout/MTabs/MTabs.tsx","../src/components/layout/MSection/MSection.tsx","../src/components/layout/MSimpleGrid/MSimpleGrid.tsx","../src/components/layout/MGrid/MGrid.tsx","../src/components/layout/MDivider/MDivider.tsx","../src/components/layout/MSidebar/MSidebar.tsx","../src/components/layout/MBreadcrumb/MBreadcrumb.tsx","../src/components/layout/MAppShell/MAppShell.tsx"],"sourcesContent":["import type {MContainerProps} from './MContainer.types'\nimport {cn} from '../../../utils/cn'\nimport {getLayoutUtilityClassNames, getLayoutUtilityStyles} from '../../../utils/layoutProps'\nimport './MContainer.css'\n\n// Constrain page content widths and apply shared spacing utilities.\nexport function MContainer({\n size = 'content',\n padded = true,\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n className,\n style,\n children,\n ...rest\n}: MContainerProps) {\n const utilityStyle = getLayoutUtilityStyles({fsize})\n\n return (\n <div\n className={cn(\n 'container',\n size,\n padded && 'padded',\n ...getLayoutUtilityClassNames({\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n }),\n className\n )}\n style={{...utilityStyle, ...style}}\n {...rest}\n >\n {children}\n </div>\n )\n}\n","import type {MHeaderProps} from './MHeader.types'\nimport {cn} from '../../../utils/cn'\nimport {MContainer} from '../MContainer'\nimport './MHeader.css'\n\n// Render a reusable page header shell aligned to a shared container.\nexport function MHeader({\n container = 'wide',\n padded = true,\n bordered = true,\n sticky = false,\n tone = 'surface',\n layout = 'split',\n className,\n children,\n ...rest\n}: MHeaderProps) {\n return (\n <header className={cn('header', tone, bordered && 'bordered', sticky && 'sticky', className)} {...rest}>\n <MContainer size={container} padded={padded} className={cn('inner', `layout-${layout}`)}>\n {children}\n </MContainer>\n </header>\n )\n}\n","import type {MFooterProps} from './MFooter.types'\nimport {cn} from '../../../utils/cn'\nimport {getLayoutUtilityClassNames, getLayoutUtilityStyles} from '../../../utils/layoutProps'\nimport {MContainer} from '../MContainer'\nimport './MFooter.css'\n\n// Render a reusable page footer shell with shared spacing utilities.\nexport function MFooter({\n container = 'wide',\n padded = true,\n bordered = true,\n tone = 'surface',\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n className,\n style,\n children,\n ...rest\n}: MFooterProps) {\n const utilityStyle = getLayoutUtilityStyles({fsize})\n\n return (\n <footer\n className={cn(\n 'footer',\n tone,\n bordered && 'bordered',\n ...getLayoutUtilityClassNames({\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n }),\n className\n )}\n style={{...utilityStyle, ...style}}\n {...rest}\n >\n <MContainer size={container} padded={padded} className=\"inner\" fullWidth>\n {children}\n </MContainer>\n </footer>\n )\n}\n","import type {MNavbarProps} from './MNavbar.types'\nimport {cn} from '../../../utils/cn'\nimport {MContainer} from '../MContainer'\nimport './MNavbar.css'\n\n// Render a horizontal app or site navigation shell with container alignment.\nexport function MNavbar({\n container = 'content',\n padded = true,\n bordered = true,\n sticky = false,\n tone = 'surface',\n justify = 'between',\n wrap = false,\n className,\n children,\n ...rest\n}: MNavbarProps) {\n return (\n <nav className={cn('navbar', tone, bordered && 'bordered', sticky && 'sticky', className)} {...rest}>\n <MContainer size={container} padded={padded} className=\"container\">\n <div className={cn('inner', justify, wrap && 'wrap')}>{children}</div>\n </MContainer>\n </nav>\n )\n}\n","import {useEffect, useMemo, useRef, useState} from 'react'\nimport type {ReactNode} from 'react'\nimport type {MTopbarItem, MTopbarProps} from './MTopbar.types'\nimport {cn} from '../../../utils/cn'\nimport {MContainer} from '../MContainer'\nimport {MButton} from '../../controls'\nimport {MLink} from '../../typography'\nimport {MChevronDownIcon, MChevronLeftIcon, MChevronRightIcon} from '../../../icons'\nimport {MDropdownGroup, MDropdownItem, MDropdownMenu} from '../../overlays/MDropdownMenu'\nimport './MTopbar.css'\n\nfunction getItemKey(item: MTopbarItem): string {\n return item.key ?? item.to ?? item.href ?? String(item.label)\n}\n\nfunction itemHasActiveDescendant(item: MTopbarItem): boolean {\n if (item.active) return true\n return (item.children ?? []).some(itemHasActiveDescendant)\n}\n\nfunction renderItemContent(item: MTopbarItem, withChevron = false, isOpen = false): ReactNode {\n return (\n <>\n {item.icon ? <span className=\"topbar-icon\">{item.icon}</span> : null}\n <span>{item.label}</span>\n {item.badge ? <span className=\"topbar-badge\">{item.badge}</span> : null}\n {withChevron ? (\n <span className={cn('topbar-chevron', isOpen && 'open')} aria-hidden=\"true\">\n <MChevronDownIcon size=\"sm\" />\n </span>\n ) : null}\n </>\n )\n}\n\nfunction renderDropdownChildren(children: MTopbarItem[]): ReactNode {\n return children.map((child) => {\n if (child.children?.length) {\n return (\n <MDropdownGroup key={getItemKey(child)} label={String(child.label)}>\n {renderDropdownChildren(child.children)}\n </MDropdownGroup>\n )\n }\n\n return (\n <MDropdownItem\n key={getItemKey(child)}\n icon={child.icon}\n label={child.label}\n href={child.href}\n to={child.to}\n onClick={child.onClick}\n color={child.color}\n disabled={child.disabled}\n active={child.active}\n component={child.component}\n className={child.className}\n />\n )\n })\n}\n\nexport function MTopbar({\n items,\n container = 'full',\n padded = true,\n bordered = true,\n sticky = false,\n tone = 'surface',\n justify = 'left',\n size = 'md',\n openOn = 'hover',\n dropdownPlacement = 'bottom-start',\n className,\n style,\n ...rest\n}: MTopbarProps) {\n const [coarsePointer, setCoarsePointer] = useState(false)\n const [openMap, setOpenMap] = useState<Record<string, boolean>>({})\n const [hasOverflow, setHasOverflow] = useState(false)\n const [canScrollLeft, setCanScrollLeft] = useState(false)\n const [canScrollRight, setCanScrollRight] = useState(false)\n const viewportRef = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n const media = window.matchMedia('(pointer: coarse)')\n const sync = () => setCoarsePointer(media.matches)\n\n sync()\n\n if (typeof media.addEventListener === 'function') {\n media.addEventListener('change', sync)\n return () => media.removeEventListener('change', sync)\n }\n\n media.addListener(sync)\n return () => media.removeListener(sync)\n }, [])\n\n useEffect(() => {\n const viewport = viewportRef.current\n if (!viewport) return\n\n const updateOverflow = () => {\n const nextHasOverflow = viewport.scrollWidth > viewport.clientWidth + 1\n setHasOverflow(nextHasOverflow)\n setCanScrollLeft(viewport.scrollLeft > 4)\n setCanScrollRight(viewport.scrollLeft + viewport.clientWidth < viewport.scrollWidth - 4)\n }\n\n updateOverflow()\n\n viewport.addEventListener('scroll', updateOverflow, {passive: true})\n\n const observer = new ResizeObserver(updateOverflow)\n observer.observe(viewport)\n Array.from(viewport.children).forEach((child) => observer.observe(child))\n\n return () => {\n viewport.removeEventListener('scroll', updateOverflow)\n observer.disconnect()\n }\n }, [items, justify, size, tone, bordered, padded, container])\n\n const resolvedOpenOn = useMemo(() => (coarsePointer ? 'click' : openOn), [coarsePointer, openOn])\n\n const scrollByAmount = (direction: 'left' | 'right') => {\n const viewport = viewportRef.current\n if (!viewport) return\n\n const amount = Math.max(180, Math.floor(viewport.clientWidth * 0.45))\n viewport.scrollBy({\n left: direction === 'left' ? -amount : amount,\n behavior: 'smooth',\n })\n }\n\n return (\n <nav\n className={cn('topbar', tone, size, bordered && 'bordered', sticky && 'sticky', className)}\n style={style}\n {...rest}\n >\n <MContainer size={container} padded={padded} className=\"topbar-container\">\n <div className={cn('topbar-scroll-shell', hasOverflow && 'overflowing')}>\n {hasOverflow && (\n <MButton\n variant=\"ghost\"\n color=\"neutral\"\n iconOnly\n shape=\"circle\"\n className={cn('topbar-scroll-button', 'left', !canScrollLeft && 'hidden')}\n onClick={() => scrollByAmount('left')}\n aria-label=\"Scroll topbar left\"\n >\n <MChevronLeftIcon />\n </MButton>\n )}\n\n <div ref={viewportRef} className=\"topbar-viewport\">\n <div className={cn('topbar-list', `justify-${justify}`, hasOverflow && 'overflowing')}>\n {items.map((item) => {\n const itemKey = getItemKey(item)\n const isActive = itemHasActiveDescendant(item)\n const isOpen = !!openMap[itemKey]\n\n if (item.children?.length) {\n if (item.disabled) {\n return (\n <div\n key={itemKey}\n className={cn('topbar-trigger', item.color, 'disabled', item.className)}\n aria-disabled=\"true\"\n >\n {renderItemContent(item, true)}\n </div>\n )\n }\n\n return (\n <MDropdownMenu\n key={itemKey}\n trigger={\n <div\n className={cn(\n 'topbar-trigger',\n item.color,\n isActive && 'active',\n isOpen && 'open',\n item.disabled && 'disabled',\n item.className\n )}\n >\n {renderItemContent(item, true, isOpen)}\n </div>\n }\n openOn={item.openOn ?? resolvedOpenOn}\n onOpenChange={(nextOpen) =>\n setOpenMap((prev) => ({...prev, [itemKey]: nextOpen}))\n }\n placement={dropdownPlacement}\n popoverClassName=\"topbar-dropdown-popover\"\n >\n {renderDropdownChildren(item.children)}\n </MDropdownMenu>\n )\n }\n\n return (\n <MLink\n key={itemKey}\n component={item.component}\n href={item.href}\n to={item.to}\n onClick={item.onClick}\n current={item.active}\n disabled={item.disabled}\n underline=\"none\"\n tone=\"inherit\"\n className={cn(\n 'topbar-link',\n item.color,\n item.className,\n item.active && 'active'\n )}\n >\n {renderItemContent(item)}\n </MLink>\n )\n })}\n </div>\n </div>\n\n {hasOverflow && (\n <MButton\n variant=\"ghost\"\n color=\"neutral\"\n iconOnly\n shape=\"circle\"\n className={cn('topbar-scroll-button', 'right', !canScrollRight && 'hidden')}\n onClick={() => scrollByAmount('right')}\n aria-label=\"Scroll topbar right\"\n >\n <MChevronRightIcon />\n </MButton>\n )}\n </div>\n </MContainer>\n </nav>\n )\n}\n","import type {MNavsProps} from './MNavs.types'\nimport {cn} from '../../../utils/cn'\nimport {MLink} from '../../typography'\nimport './MNavs.css'\n\n// Render a lightweight navigation list from data or custom children.\nexport function MNavs({items, orientation = 'horizontal', wrap = false, className, children, ...rest}: MNavsProps) {\n return (\n <div className={cn('navs', orientation, wrap && 'wrap', className)} {...rest}>\n {items\n ? items.map((item) => (\n <MLink\n key={item.key ?? item.href ?? item.title?.toString() ?? item.label?.toString()}\n component={item.component}\n href={item.href}\n to={item.to}\n target={item.target}\n rel={item.rel}\n title={item.title}\n current={item.current}\n disabled={item.disabled}\n className={cn('link', item.className)}\n >\n {item.label}\n </MLink>\n ))\n : children}\n </div>\n )\n}\n","import {useId, useMemo, useState} from 'react'\nimport type {KeyboardEvent} from 'react'\nimport type {MTabsItem, MTabsProps} from './MTabs.types'\nimport {cn} from '../../../utils/cn'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport './MTabs.css'\n\ninterface MTabsTriggerProps {\n item: MTabsItem\n isActive: boolean\n tabId: string\n panelId: string\n clickEffect: MTabsProps['clickEffect']\n rippleColor: string | undefined\n onSelect: (value: string) => void\n}\n\n// Keep the tab trigger behavior isolated from the list and panel rendering.\nfunction MTabsTrigger({item, isActive, tabId, panelId, clickEffect, rippleColor, onSelect}: MTabsTriggerProps) {\n const {effectClassName, effectLayer, handlePointerDown, triggerEffect} = useInteractionEffect<HTMLButtonElement>({\n effect: clickEffect,\n disabled: item.disabled,\n centered: true,\n color: rippleColor,\n })\n\n return (\n <button\n type=\"button\"\n id={tabId}\n role=\"tab\"\n aria-selected={isActive}\n aria-controls={panelId}\n tabIndex={isActive ? 0 : -1}\n disabled={item.disabled}\n className={cn('tabs-trigger', isActive && 'active', item.disabled && 'disabled', effectClassName)}\n onPointerDown={handlePointerDown}\n onKeyDown={(event) => {\n if (event.key === ' ' || event.key === 'Enter') {\n triggerEffect(event.currentTarget)\n }\n }}\n onClick={() => onSelect(item.value)}\n >\n {effectLayer}\n {item.icon && <span className=\"tabs-icon\">{item.icon}</span>}\n <span className=\"tabs-label\">{item.label}</span>\n </button>\n )\n}\n\nexport function MTabs({\n items,\n value,\n defaultValue,\n onValueChange,\n variant = 'underline',\n orientation = 'horizontal',\n size = 'md',\n fullWidth = false,\n showPanels = true,\n panelClassName,\n clickEffect = 'ripple',\n rippleColor,\n className,\n ...rest\n}: MTabsProps) {\n // Pick the first enabled item when the caller does not control the active tab.\n const fallbackValue = useMemo(\n () => defaultValue ?? items.find((item) => !item.disabled)?.value ?? '',\n [defaultValue, items]\n )\n const [internalValue, setInternalValue] = useState(fallbackValue)\n const activeValue = value ?? internalValue\n const activeItem = items.find((item) => item.value === activeValue) ?? items[0]\n const baseId = useId()\n\n // Support both controlled and uncontrolled tab state.\n function selectTab(nextValue: string) {\n if (value === undefined) {\n setInternalValue(nextValue)\n }\n onValueChange?.(nextValue)\n }\n\n // Re-map keyboard navigation depending on the rendered orientation.\n function handleKeyDown(event: KeyboardEvent<HTMLDivElement>) {\n const enabledItems = items.filter((item) => !item.disabled)\n const currentIndex = enabledItems.findIndex((item) => item.value === activeItem?.value)\n\n if (currentIndex === -1) {\n return\n }\n\n const nextKeys = orientation === 'vertical' ? ['ArrowDown'] : ['ArrowRight', 'ArrowDown']\n const previousKeys = orientation === 'vertical' ? ['ArrowUp'] : ['ArrowLeft', 'ArrowUp']\n\n if (nextKeys.includes(event.key)) {\n event.preventDefault()\n const nextItem = enabledItems[(currentIndex + 1) % enabledItems.length]\n selectTab(nextItem.value)\n }\n\n if (previousKeys.includes(event.key)) {\n event.preventDefault()\n const nextItem = enabledItems[(currentIndex - 1 + enabledItems.length) % enabledItems.length]\n selectTab(nextItem.value)\n }\n }\n\n return (\n <div className={cn('tabs', variant, orientation, size, fullWidth && 'full-width', className)} {...rest}>\n <div className=\"tabs-list\" role=\"tablist\" aria-orientation={orientation} onKeyDown={handleKeyDown}>\n {items.map((item) => {\n const isActive = item.value === activeItem?.value\n const tabId = `${baseId}-${item.value}-tab`\n const panelId = `${baseId}-${item.value}-panel`\n\n return (\n <MTabsTrigger\n key={item.value}\n item={item}\n isActive={isActive}\n tabId={tabId}\n panelId={panelId}\n clickEffect={clickEffect}\n rippleColor={rippleColor}\n onSelect={selectTab}\n />\n )\n })}\n </div>\n\n {showPanels && activeItem?.content !== undefined && (\n <div\n key={activeItem.value}\n id={`${baseId}-${activeItem.value}-panel`}\n role=\"tabpanel\"\n aria-labelledby={`${baseId}-${activeItem.value}-tab`}\n className={cn('tabs-panel', panelClassName)}\n >\n {activeItem.content}\n </div>\n )}\n </div>\n )\n}\n","import type React from 'react'\nimport type {MSectionProps} from './MSection.types'\nimport {cn} from '../../../utils/cn'\nimport {useReveal} from '../../../utils/useReveal'\nimport './MSection.css'\n\n// Render a semantic page section with predefined spacing and tone.\nexport function MSection({\n as = 'section',\n spacing = 'lg',\n tone = 'default',\n reveal,\n className,\n style,\n children,\n ...rest\n}: MSectionProps) {\n const Component = as\n const revealRef = useReveal(reveal)\n const hasReveal = reveal !== undefined && reveal !== false\n\n return (\n <Component\n ref={hasReveal ? (revealRef as React.RefObject<never>) : undefined}\n className={cn('section', spacing, tone, hasReveal && 'reveal', className)}\n style={style}\n {...rest}\n >\n {children}\n </Component>\n )\n}\n","import type {MSimpleGridProps} from './MSimpleGrid.types'\nimport {cn} from '../../../utils/cn'\nimport './MSimpleGrid.css'\n\n// Render a simple equal-column grid with a shared default spacing.\nexport function MSimpleGrid({columns = 2, minItemWidth, className, style, children, ...rest}: MSimpleGridProps) {\n return (\n <div\n className={cn('grid', `columns-${columns}`, className)}\n style={{\n ...(minItemWidth ? {'--grid-min-item-width': minItemWidth} : {}),\n ...style,\n }}\n {...rest}\n >\n {children}\n </div>\n )\n}\n","import {Children, cloneElement, isValidElement} from 'react'\nimport type {ReactElement} from 'react'\nimport type {MGridColumns, MGridItemProps, MGridProps} from './MGrid.types'\nimport {cn} from '../../../utils/cn'\nimport {getLayoutUtilityClassNames, getLayoutUtilityStyles} from '../../../utils/layoutProps'\nimport './MGrid.css'\n\ntype GridBreakpoint = 'span' | 'xl' | 'lg' | 'md' | 'sm'\n\nfunction isGridColumnElement(child: unknown): child is ReactElement<MGridProps | MGridItemProps> {\n if (!isValidElement(child)) {\n return false\n }\n\n if (child.type === MGridItem) {\n return true\n }\n\n return child.type === MGrid && (child.props as MGridProps).type === 'col'\n}\n\nfunction getNormalizedSpans(props: Partial<MGridProps>) {\n return {\n span: props.span ?? props.xl ?? props.lg ?? props.md ?? props.sm,\n xl: props.xl ?? props.lg ?? props.md ?? props.sm,\n lg: props.lg ?? props.md ?? props.sm,\n md: props.md ?? props.sm,\n sm: props.sm,\n }\n}\n\nfunction distributeRemainingColumns(remaining: number, count: number): Array<MGridColumns | undefined> {\n if (count <= 0) {\n return []\n }\n\n if (remaining <= 0) {\n return Array.from({length: count}, () => undefined)\n }\n\n const base = Math.floor(remaining / count)\n const extra = remaining % count\n\n return Array.from({length: count}, (_, index) => {\n const value = base + (index < extra ? 1 : 0)\n return value >= 1 ? (value as MGridColumns) : undefined\n })\n}\n\nfunction resolveAutoSpans(columnProps: Array<Partial<MGridProps>>) {\n const breakpoints: GridBreakpoint[] = ['span', 'xl', 'lg', 'md', 'sm']\n const normalized = columnProps.map((props) => getNormalizedSpans(props))\n const resolved = normalized.map((spans) => ({...spans}))\n\n for (const breakpoint of breakpoints) {\n const autoIndexes: number[] = []\n let usedColumns = 0\n\n normalized.forEach((spans, index) => {\n const value = spans[breakpoint]\n\n if (value) {\n usedColumns += value\n return\n }\n\n autoIndexes.push(index)\n })\n\n const distributed = distributeRemainingColumns(Math.max(12 - usedColumns, 0), autoIndexes.length)\n\n autoIndexes.forEach((columnIndex, autoIndex) => {\n resolved[columnIndex][breakpoint] = distributed[autoIndex]\n })\n }\n\n return resolved\n}\n\n// Render either a responsive row or a responsive column using one shared grid API.\nexport function MGrid({\n type = 'row',\n span,\n sm,\n md,\n lg,\n xl,\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n className,\n style,\n children,\n ...rest\n}: MGridProps) {\n const utilityStyle = getLayoutUtilityStyles({fsize})\n const baseSpan = span ?? xl ?? lg\n\n if (type === 'col') {\n return (\n <div\n className={cn(\n 'grid',\n 'col',\n baseSpan ? `span-${baseSpan}` : 'span-auto',\n xl && `xl-${xl}`,\n lg && `lg-${lg}`,\n md && `md-${md}`,\n sm && `sm-${sm}`,\n ...getLayoutUtilityClassNames({\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n }),\n className\n )}\n style={{...utilityStyle, ...style}}\n {...rest}\n >\n {children}\n </div>\n )\n }\n\n const childArray = Children.toArray(children)\n const columnEntries = childArray.flatMap((child, index) => (isGridColumnElement(child) ? [{child, index}] : []))\n const autoColumns = Math.min(Math.max(columnEntries.length || childArray.length, 1), 12)\n const hasTrackedSizing = columnEntries.some(({child}) => {\n const p = child.props as MGridProps\n return Boolean(p.span || p.xl || p.lg || p.md || p.sm)\n })\n const resolvedSpans = hasTrackedSizing\n ? resolveAutoSpans(columnEntries.map(({child}) => child.props as Partial<MGridProps>))\n : null\n const resolvedChildren =\n hasTrackedSizing && resolvedSpans\n ? childArray.map((child, childIndex) => {\n const columnIndex = columnEntries.findIndex((entry) => entry.index === childIndex)\n\n if (columnIndex === -1 || !isGridColumnElement(child)) {\n return child\n }\n\n const spans = resolvedSpans[columnIndex]\n\n return cloneElement(child, {\n span: spans.span,\n xl: spans.xl,\n lg: spans.lg,\n md: spans.md,\n sm: spans.sm,\n })\n })\n : childArray\n\n return (\n <div\n className={cn(\n 'grid',\n 'row',\n hasTrackedSizing ? 'tracked' : `auto-cols-${autoColumns}`,\n ...getLayoutUtilityClassNames({\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth: fullWidth ?? true,\n }),\n className\n )}\n style={{...utilityStyle, ...style}}\n {...rest}\n >\n {resolvedChildren}\n </div>\n )\n}\n\n// Keep MGridItem as a compatibility alias for explicit column declarations.\nexport function MGridItem({span, sm, md, lg, xl, ...rest}: MGridItemProps) {\n return <MGrid type=\"col\" span={span} sm={sm} md={md} lg={lg} xl={xl} {...rest} />\n}\n","import type {MDividerProps} from './MDivider.types'\nimport {cn} from '../../../utils/cn'\nimport './MDivider.css'\n\n// Render a semantic divider line between related content blocks.\nexport function MDivider({orientation = 'horizontal', variant = 'solid', className, style, ...rest}: MDividerProps) {\n return (\n <div\n role=\"separator\"\n aria-orientation={orientation}\n className={cn('divider', orientation, variant, className)}\n style={style}\n {...rest}\n />\n )\n}\n","import {createContext, useContext, useState, useEffect, useCallback, useMemo} from 'react'\nimport {cn} from '../../../utils/cn'\nimport {MButton} from '../../controls'\nimport {MChevronRightIcon, MMenuIcon} from '../../../icons'\nimport {MDropdownMenu, MTooltip} from '../../overlays'\nimport type {\n MSidebarProps,\n MSidebarHeaderProps,\n MSidebarBodyProps,\n MSidebarNavProps,\n MSidebarItemProps,\n MSidebarGroupProps,\n MSidebarFooterProps,\n MSidebarDividerProps,\n MSidebarMode,\n} from './MSidebar.types'\nimport './MSidebar.css'\n\nconst STORAGE_KEY = 'mineralui-sidebar'\n\ninterface SidebarContextValue {\n mode: MSidebarMode\n mobile: boolean\n mobileOpen: boolean\n canToggle: boolean\n toggleMode: () => void\n}\n\nconst SidebarCtx = createContext<SidebarContextValue>({\n mode: 'expanded',\n mobile: false,\n mobileOpen: false,\n canToggle: false,\n toggleMode: () => {},\n})\n\n// Read shared sidebar state inside slot components.\nfunction useSidebar() {\n return useContext(SidebarCtx)\n}\n\n// Track the responsive breakpoint once for the whole sidebar tree.\nfunction useIsMobile(breakpoint: number): boolean {\n const [mobile, setMobile] = useState(() => (typeof window !== 'undefined' ? window.innerWidth < breakpoint : false))\n\n useEffect(() => {\n const mq = window.matchMedia(`(max-width: ${breakpoint - 1}px)`)\n const handler = (e: MediaQueryListEvent) => setMobile(e.matches)\n\n setMobile(mq.matches)\n mq.addEventListener('change', handler)\n return () => mq.removeEventListener('change', handler)\n }, [breakpoint])\n\n return mobile\n}\n\n// Render the sidebar shell and coordinate desktop and mobile behavior.\nexport function MSidebar({\n mode: modeProp = 'auto',\n defaultMode = 'expanded',\n onModeChange,\n persist = false,\n side = 'left',\n tone = 'subtle',\n bordered = true,\n mobileBreakpoint = 768,\n className,\n style,\n children,\n}: MSidebarProps) {\n const mobile = useIsMobile(mobileBreakpoint)\n const [mobileOpen, setMobileOpen] = useState(false)\n\n const [internalMode, setInternalMode] = useState<MSidebarMode>(() => {\n if (persist) {\n try {\n const v = localStorage.getItem(STORAGE_KEY)\n if (v === 'expanded' || v === 'collapsed') return v\n } catch {\n /* noop */\n }\n }\n\n return defaultMode\n })\n\n const resolvedMode: MSidebarMode =\n modeProp === 'auto' ? internalMode : modeProp === 'collapsed' ? 'collapsed' : 'expanded'\n\n // MToggle only the desktop width state. Mobile uses its own overlay flow.\n const toggleMode = useCallback(() => {\n const next: MSidebarMode = resolvedMode === 'expanded' ? 'collapsed' : 'expanded'\n\n setInternalMode(next)\n onModeChange?.(next)\n\n if (persist) {\n try {\n localStorage.setItem(STORAGE_KEY, next)\n } catch {\n /* noop */\n }\n }\n }, [resolvedMode, onModeChange, persist])\n\n const closeMobile = useCallback(() => setMobileOpen(false), [])\n\n // Let Escape close the temporary mobile drawer.\n useEffect(() => {\n if (!mobileOpen) return\n\n const handler = (e: KeyboardEvent) => {\n if (e.key === 'Escape') setMobileOpen(false)\n }\n\n document.addEventListener('keydown', handler)\n return () => document.removeEventListener('keydown', handler)\n }, [mobileOpen])\n\n const canToggle = !mobile && modeProp === 'auto'\n\n const ctx = useMemo<SidebarContextValue>(\n () => ({mode: resolvedMode, mobile, mobileOpen, canToggle, toggleMode}),\n [resolvedMode, mobile, mobileOpen, canToggle, toggleMode]\n )\n\n const isCollapsed = !mobile && resolvedMode === 'collapsed'\n\n const sidebarCls = cn(\n 'sidebar',\n tone,\n side,\n isCollapsed && 'collapsed',\n bordered && 'bordered',\n mobile && 'mobile',\n mobile && mobileOpen && 'mobile-open',\n className\n )\n\n return (\n <SidebarCtx.Provider value={ctx}>\n {mobile && mobileOpen && <div className=\"sidebar-backdrop\" onClick={closeMobile} />}\n\n <aside className={sidebarCls} style={style}>\n {children}\n </aside>\n\n {mobile && !mobileOpen && (\n <button\n className={cn('sidebar-hamburger', side)}\n onClick={() => setMobileOpen(true)}\n aria-label=\"Open menu\"\n >\n <span className=\"sidebar-hamburger-icon\" aria-hidden=\"true\">\n <MMenuIcon />\n </span>\n </button>\n )}\n </SidebarCtx.Provider>\n )\n}\n\n// Render the top area with branding and an optional collapse toggle.\nexport function MSidebarHeader({bordered = false, className, children}: MSidebarHeaderProps) {\n const {mode, mobile, canToggle, toggleMode} = useSidebar()\n const isCollapsed = !mobile && mode === 'collapsed'\n\n return (\n <div className={cn('sidebar-header', bordered && 'bordered', className)}>\n <div className=\"sidebar-header-content\">{children}</div>\n {canToggle && (\n <MButton\n variant=\"outlined\"\n color=\"neutral\"\n iconOnly\n size=\"sm\"\n onClick={toggleMode}\n aria-label={isCollapsed ? 'Expand sidebar' : 'Collapse sidebar'}\n className=\"sidebar-toggle\"\n >\n <span className={cn('sidebar-chevron', isCollapsed && 'flipped')}>\n <MChevronRightIcon />\n </span>\n </MButton>\n )}\n </div>\n )\n}\n\n// Wrap the scrollable middle area between header and footer.\nexport function MSidebarBody({className, children}: MSidebarBodyProps) {\n return <div className={cn('sidebar-body', className)}>{children}</div>\n}\n\n// Wrap sidebar links in a navigation landmark.\nexport function MSidebarNav({className, children}: MSidebarNavProps) {\n return <nav className={cn('sidebar-nav', className)}>{children}</nav>\n}\n\n// Render one clickable sidebar row as a link, button or custom component.\nexport function MSidebarItem({\n icon,\n label,\n href,\n to,\n onClick,\n active = false,\n disabled = false,\n badge,\n color,\n component,\n className,\n}: MSidebarItemProps) {\n const {mode, mobile} = useSidebar()\n const isCollapsed = !mobile && mode === 'collapsed'\n\n const Tag = component ?? (href || to ? 'a' : 'button')\n const linkProps = component ? (to ? {to} : href ? {href} : {}) : href ? {href} : to ? {href: to} : {}\n const cls = cn('sidebar-item', active && 'active', disabled && 'disabled', color, className)\n\n return (\n <Tag\n className={cls}\n onClick={disabled ? undefined : onClick}\n aria-disabled={disabled || undefined}\n title={isCollapsed ? label : undefined}\n {...linkProps}\n >\n {icon && <span className=\"sidebar-item-icon\">{icon}</span>}\n {!isCollapsed && (\n <MTooltip content={label} placement=\"top\" className=\"sidebar-item-label-tooltip\">\n <span className=\"sidebar-item-label\">{label}</span>\n </MTooltip>\n )}\n {!isCollapsed && badge && <span className=\"sidebar-item-badge\">{badge}</span>}\n </Tag>\n )\n}\n\n// Group related sidebar items and swap to a dropdown when collapsed.\nexport function MSidebarGroup({\n label,\n icon,\n active = false,\n defaultOpen = true,\n collapsible = true,\n children,\n className,\n}: MSidebarGroupProps) {\n const sidebarCtx = useSidebar()\n const {mode, mobile} = sidebarCtx\n const isCollapsed = !mobile && mode === 'collapsed'\n const [open, setOpen] = useState(defaultOpen)\n\n const expandedCtx = useMemo<SidebarContextValue>(() => ({...sidebarCtx, mode: 'expanded'}), [sidebarCtx])\n\n // Keep expand/collapse local to this group.\n const toggle = () => {\n if (collapsible) setOpen((o) => !o)\n }\n\n if (isCollapsed) {\n const trigger = (\n <span className={cn('sidebar-group-icon collapsed', active && 'active')} title={label}>\n {icon}\n </span>\n )\n\n return (\n <div className={cn('sidebar-group', className)}>\n <MDropdownMenu trigger={trigger} placement=\"right-start\" closeOnSelect openOn=\"hover\">\n <SidebarCtx.Provider value={expandedCtx}>{children}</SidebarCtx.Provider>\n </MDropdownMenu>\n </div>\n )\n }\n\n return (\n <div className={cn('sidebar-group', className)}>\n <button className={cn('sidebar-group-header', active && 'active')} onClick={toggle} aria-expanded={open}>\n {icon && <span className=\"sidebar-group-icon\">{icon}</span>}\n <span className=\"sidebar-group-label\">{label}</span>\n {collapsible && (\n <span className={cn('sidebar-group-arrow', open && 'open')}>\n <MChevronRightIcon />\n </span>\n )}\n </button>\n {open && <div className=\"sidebar-group-items\">{children}</div>}\n </div>\n )\n}\n\n// Render the bottom slot for version info or quick actions.\nexport function MSidebarFooter({bordered = false, className, children}: MSidebarFooterProps) {\n return <div className={cn('sidebar-footer', bordered && 'bordered', className)}>{children}</div>\n}\n\n// Render a spacing-aware divider between sidebar regions.\nexport function MSidebarDivider({className, spacing = 'md'}: MSidebarDividerProps) {\n return <hr className={cn('sidebar-divider', spacing, className)} />\n}\n","import {useMemo} from 'react'\nimport {cn} from '../../../utils/cn'\nimport type {MBreadcrumbProps} from './MBreadcrumb.types'\nimport './MBreadcrumb.css'\n\n// Render a compact path and collapse the middle when needed.\nexport function MBreadcrumb({items, separator = '/', maxItems, className, ...rest}: MBreadcrumbProps) {\n // Keep the current page visible while shortening deep paths.\n const visible = useMemo(() => {\n if (!maxItems || maxItems >= items.length) return items\n if (maxItems < 2) return [items[items.length - 1]]\n const head = items.slice(0, 1)\n const tail = items.slice(-(maxItems - 1))\n return [...head, null, ...tail]\n }, [items, maxItems])\n\n return (\n <nav aria-label=\"breadcrumb\" className={cn('breadcrumb', className)} {...rest}>\n <ol className=\"trail\">\n {visible.map((item, i) => {\n if (item === null) {\n return (\n <li key=\"ellipsis\" className=\"crumb dots\">\n <span className=\"sep\">{separator}</span>\n <span>&#8230;</span>\n </li>\n )\n }\n\n const isLast = i === visible.length - 1\n\n return (\n <li key={i} className={cn('crumb', isLast && 'active')}>\n {i > 0 && <span className=\"sep\">{separator}</span>}\n {item.href && !isLast ? (\n <a href={item.href} className=\"link\" onClick={item.onClick}>\n {item.label}\n </a>\n ) : item.onClick && !isLast ? (\n <button type=\"button\" className=\"link btn\" onClick={item.onClick}>\n {item.label}\n </button>\n ) : (\n <span className=\"current\" aria-current={isLast ? 'page' : undefined}>\n {item.label}\n </span>\n )}\n </li>\n )\n })}\n </ol>\n </nav>\n )\n}\n","import {forwardRef, Children, isValidElement} from 'react'\nimport type * as React from 'react'\nimport type {MAppShellProps, MBodyProps} from './MAppShell.types'\nimport {cn} from '../../../utils/cn'\nimport {MSidebar} from '../MSidebar'\nimport './MAppShell.css'\n\nexport const MAppShell = forwardRef<HTMLDivElement, MAppShellProps>(function MAppShell(\n {className, children, ...rest},\n ref\n) {\n const sidebarElements: React.ReactNode[] = []\n const otherElements: React.ReactNode[] = []\n\n Children.forEach(children, (child) => {\n if (isValidElement(child) && child.type === MSidebar) {\n sidebarElements.push(child)\n } else {\n otherElements.push(child)\n }\n })\n\n return (\n <div ref={ref} className={cn('app-shell', className)} {...rest}>\n {sidebarElements}\n <div className=\"app-main\">{otherElements}</div>\n </div>\n )\n})\n\nexport const MBody = forwardRef<HTMLDivElement, MBodyProps>(function MBody({className, children, ...rest}, ref) {\n return (\n <div ref={ref} className={cn('app-body', className)} {...rest}>\n {children}\n </div>\n )\n})\n"],"mappings":"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"}
package/dist/layout.cjs CHANGED
@@ -1,3 +1,3 @@
1
1
  const {ensureStyles}=require('./style-runtime.cjs')
2
2
  ensureStyles()
3
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./layout-BWhQ1VXM.cjs`),t=require(`./MPagination-Bu84ZlVh.cjs`),n=require(`./MStack-BvFI0AFv.cjs`),r=require(`./MSurface-qcGLaTIK.cjs`);exports.MAppShell=e.t,exports.MBody=e.n,exports.MBreadcrumb=e.r,exports.MContainer=e.C,exports.MDivider=e.f,exports.MFooter=e.x,exports.MGrid=e.p,exports.MGridItem=e.m,exports.MHeader=e.S,exports.MInline=t.n,exports.MNavbar=e.b,exports.MNavs=e.v,exports.MPagination=t.t,exports.MSection=e.g,exports.MSidebar=e.i,exports.MSidebarBody=e.a,exports.MSidebarDivider=e.o,exports.MSidebarFooter=e.s,exports.MSidebarGroup=e.c,exports.MSidebarHeader=e.l,exports.MSidebarItem=e.u,exports.MSidebarNav=e.d,exports.MSimpleGrid=e.h,exports.MStack=n.t,exports.MSurface=r.t,exports.MTabs=e._,exports.MTopbar=e.y;
3
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./layout-C1QKiv2J.cjs`),t=require(`./MInline-DUzpnZoB.cjs`),n=require(`./MStack-BKDsNitR.cjs`),r=require(`./MSurface-BgZ86iYn.cjs`),i=require(`./MPagination-vg2EqB8z.cjs`);exports.MAppShell=e.t,exports.MBody=e.n,exports.MBreadcrumb=e.r,exports.MContainer=e.C,exports.MDivider=e.f,exports.MFooter=e.x,exports.MGrid=e.p,exports.MGridItem=e.m,exports.MHeader=e.S,exports.MInline=t.t,exports.MNavbar=e.b,exports.MNavs=e.v,exports.MPagination=i.t,exports.MSection=e.g,exports.MSidebar=e.i,exports.MSidebarBody=e.a,exports.MSidebarDivider=e.o,exports.MSidebarFooter=e.s,exports.MSidebarGroup=e.c,exports.MSidebarHeader=e.l,exports.MSidebarItem=e.u,exports.MSidebarNav=e.d,exports.MSimpleGrid=e.h,exports.MStack=n.t,exports.MSurface=r.t,exports.MTabs=e._,exports.MTopbar=e.y;
package/dist/layout.js CHANGED
@@ -1,7 +1,8 @@
1
1
  import {ensureStyles} from './style-runtime.js'
2
2
  ensureStyles()
3
- import { C as e, S as t, _ as n, a as r, b as i, c as a, d as o, f as s, g as c, h as l, i as u, l as d, m as f, n as p, o as m, p as h, r as g, s as _, t as v, u as y, v as b, x, y as S } from "./layout-yIAZ4bP6.js";
4
- import { n as C, t as w } from "./MPagination-CbkRMnL1.js";
5
- import { t as T } from "./MStack-DhdMFSUL.js";
6
- import { t as E } from "./MSurface-DlcK6Bre.js";
7
- export { v as MAppShell, p as MBody, g as MBreadcrumb, e as MContainer, s as MDivider, x as MFooter, h as MGrid, f as MGridItem, t as MHeader, C as MInline, i as MNavbar, b as MNavs, w as MPagination, c as MSection, u as MSidebar, r as MSidebarBody, m as MSidebarDivider, _ as MSidebarFooter, a as MSidebarGroup, d as MSidebarHeader, y as MSidebarItem, o as MSidebarNav, l as MSimpleGrid, T as MStack, E as MSurface, n as MTabs, S as MTopbar };
3
+ import { C as e, S as t, _ as n, a as r, b as i, c as a, d as o, f as s, g as c, h as l, i as u, l as d, m as f, n as p, o as m, p as h, r as g, s as _, t as v, u as y, v as b, x, y as S } from "./layout-UP_12LRD.js";
4
+ import { t as C } from "./MInline-cTj903A4.js";
5
+ import { t as w } from "./MStack-XTsT_kLJ.js";
6
+ import { t as T } from "./MSurface-B1LXFczo.js";
7
+ import { t as E } from "./MPagination-CgvjKhLN.js";
8
+ export { v as MAppShell, p as MBody, g as MBreadcrumb, e as MContainer, s as MDivider, x as MFooter, h as MGrid, f as MGridItem, t as MHeader, C as MInline, i as MNavbar, b as MNavs, E as MPagination, c as MSection, u as MSidebar, r as MSidebarBody, m as MSidebarDivider, _ as MSidebarFooter, a as MSidebarGroup, d as MSidebarHeader, y as MSidebarItem, o as MSidebarNav, l as MSimpleGrid, w as MStack, T as MSurface, n as MTabs, S as MTopbar };
@@ -1,2 +1,2 @@
1
1
  function e({spacing:e,padding:t,fsize:n,mt:r,mb:i,ml:a,mr:o,mx:s,my:c,pt:l,pb:u,pl:d,pr:f,px:p,py:m,fullWidth:h}){return[e!==void 0&&`spacing-${e}`,t!==void 0&&`padding-${t}`,n!==void 0&&`has-fsize`,r!==void 0&&`mt-${r}`,i!==void 0&&`mb-${i}`,a!==void 0&&`ml-${a}`,o!==void 0&&`mr-${o}`,s!==void 0&&`mx-${s}`,c!==void 0&&`my-${c}`,l!==void 0&&`pt-${l}`,u!==void 0&&`pb-${u}`,d!==void 0&&`pl-${d}`,f!==void 0&&`pr-${f}`,p!==void 0&&`px-${p}`,m!==void 0&&`py-${m}`,h&&`full-width`]}function t({fsize:e}){if(!(e==null||e===``))return{"--mineral-layout-fsize":typeof e==`number`?`${e}px`:e}}Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return t}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return e}});
2
- //# sourceMappingURL=layoutProps-CZ-XhpIX.cjs.map
2
+ //# sourceMappingURL=layoutProps-Ck4VtGm9.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"layoutProps-CZ-XhpIX.cjs","names":[],"sources":["../src/utils/layoutProps.ts"],"sourcesContent":["import type {CSSProperties} from 'react'\n\n// Keep the utility scale in one place so props and CSS stay in sync.\nexport const mineralUtilityScaleValues = ['none', 'xs', 'sm', 'md', 'lg', 'xl', '2xl'] as const\n\nexport type MUtilityScale = (typeof mineralUtilityScaleValues)[number]\n\nexport interface LayoutUtilityProps {\n spacing?: MUtilityScale\n padding?: MUtilityScale\n fsize?: string | number\n mt?: MUtilityScale\n mb?: MUtilityScale\n ml?: MUtilityScale\n mr?: MUtilityScale\n mx?: MUtilityScale\n my?: MUtilityScale\n pt?: MUtilityScale\n pb?: MUtilityScale\n pl?: MUtilityScale\n pr?: MUtilityScale\n px?: MUtilityScale\n py?: MUtilityScale\n fullWidth?: boolean\n}\n\n// Translate spacing and typography utility props into deterministic class names.\nexport function getLayoutUtilityClassNames({\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n}: LayoutUtilityProps): Array<string | false | undefined> {\n return [\n spacing !== undefined && `spacing-${spacing}`,\n padding !== undefined && `padding-${padding}`,\n fsize !== undefined && 'has-fsize',\n mt !== undefined && `mt-${mt}`,\n mb !== undefined && `mb-${mb}`,\n ml !== undefined && `ml-${ml}`,\n mr !== undefined && `mr-${mr}`,\n mx !== undefined && `mx-${mx}`,\n my !== undefined && `my-${my}`,\n pt !== undefined && `pt-${pt}`,\n pb !== undefined && `pb-${pb}`,\n pl !== undefined && `pl-${pl}`,\n pr !== undefined && `pr-${pr}`,\n px !== undefined && `px-${px}`,\n py !== undefined && `py-${py}`,\n fullWidth && 'full-width',\n ]\n}\n\n// Keep dynamic font sizes in CSS variables so layout helpers can accept any valid CSS length.\nexport function getLayoutUtilityStyles({fsize}: Pick<LayoutUtilityProps, 'fsize'>): CSSProperties | undefined {\n if (fsize === undefined || fsize === null || fsize === '') {\n return undefined\n }\n\n return {\n '--mineral-layout-fsize': typeof fsize === 'number' ? `${fsize}px` : fsize,\n } as CSSProperties\n}\n"],"mappings":"AA2BA,SAAgB,EAA2B,CACvC,UACA,UACA,QACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,aACsD,CACtD,MAAO,CACH,IAAY,IAAA,IAAa,WAAW,IACpC,IAAY,IAAA,IAAa,WAAW,IACpC,IAAU,IAAA,IAAa,YACvB,IAAO,IAAA,IAAa,MAAM,IAC1B,IAAO,IAAA,IAAa,MAAM,IAC1B,IAAO,IAAA,IAAa,MAAM,IAC1B,IAAO,IAAA,IAAa,MAAM,IAC1B,IAAO,IAAA,IAAa,MAAM,IAC1B,IAAO,IAAA,IAAa,MAAM,IAC1B,IAAO,IAAA,IAAa,MAAM,IAC1B,IAAO,IAAA,IAAa,MAAM,IAC1B,IAAO,IAAA,IAAa,MAAM,IAC1B,IAAO,IAAA,IAAa,MAAM,IAC1B,IAAO,IAAA,IAAa,MAAM,IAC1B,IAAO,IAAA,IAAa,MAAM,IAC1B,GAAa,aAChB,CAIL,SAAgB,EAAuB,CAAC,SAAsE,CACtG,QAAiC,MAAQ,IAAU,IAIvD,MAAO,CACH,yBAA0B,OAAO,GAAU,SAAW,GAAG,EAAM,IAAM,EACxE"}
1
+ {"version":3,"file":"layoutProps-Ck4VtGm9.cjs","names":[],"sources":["../src/utils/layoutProps.ts"],"sourcesContent":["import type {CSSProperties} from 'react'\n\n// Keep the utility scale in one place so props and CSS stay in sync.\nexport const mineralUtilityScaleValues = ['none', 'xs', 'sm', 'md', 'lg', 'xl', '2xl'] as const\n\nexport type MUtilityScale = (typeof mineralUtilityScaleValues)[number]\n\nexport interface LayoutUtilityProps {\n spacing?: MUtilityScale\n padding?: MUtilityScale\n fsize?: string | number\n mt?: MUtilityScale\n mb?: MUtilityScale\n ml?: MUtilityScale\n mr?: MUtilityScale\n mx?: MUtilityScale\n my?: MUtilityScale\n pt?: MUtilityScale\n pb?: MUtilityScale\n pl?: MUtilityScale\n pr?: MUtilityScale\n px?: MUtilityScale\n py?: MUtilityScale\n fullWidth?: boolean\n}\n\n// Translate spacing and typography utility props into deterministic class names.\nexport function getLayoutUtilityClassNames({\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n}: LayoutUtilityProps): Array<string | false | undefined> {\n return [\n spacing !== undefined && `spacing-${spacing}`,\n padding !== undefined && `padding-${padding}`,\n fsize !== undefined && 'has-fsize',\n mt !== undefined && `mt-${mt}`,\n mb !== undefined && `mb-${mb}`,\n ml !== undefined && `ml-${ml}`,\n mr !== undefined && `mr-${mr}`,\n mx !== undefined && `mx-${mx}`,\n my !== undefined && `my-${my}`,\n pt !== undefined && `pt-${pt}`,\n pb !== undefined && `pb-${pb}`,\n pl !== undefined && `pl-${pl}`,\n pr !== undefined && `pr-${pr}`,\n px !== undefined && `px-${px}`,\n py !== undefined && `py-${py}`,\n fullWidth && 'full-width',\n ]\n}\n\n// Keep dynamic font sizes in CSS variables so layout helpers can accept any valid CSS length.\nexport function getLayoutUtilityStyles({fsize}: Pick<LayoutUtilityProps, 'fsize'>): CSSProperties | undefined {\n if (fsize === undefined || fsize === null || fsize === '') {\n return undefined\n }\n\n return {\n '--mineral-layout-fsize': typeof fsize === 'number' ? `${fsize}px` : fsize,\n } as CSSProperties\n}\n"],"mappings":"AA2BA,SAAgB,EAA2B,CACvC,UACA,UACA,QACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,aACsD,CACtD,MAAO,CACH,IAAY,IAAA,IAAa,WAAW,IACpC,IAAY,IAAA,IAAa,WAAW,IACpC,IAAU,IAAA,IAAa,YACvB,IAAO,IAAA,IAAa,MAAM,IAC1B,IAAO,IAAA,IAAa,MAAM,IAC1B,IAAO,IAAA,IAAa,MAAM,IAC1B,IAAO,IAAA,IAAa,MAAM,IAC1B,IAAO,IAAA,IAAa,MAAM,IAC1B,IAAO,IAAA,IAAa,MAAM,IAC1B,IAAO,IAAA,IAAa,MAAM,IAC1B,IAAO,IAAA,IAAa,MAAM,IAC1B,IAAO,IAAA,IAAa,MAAM,IAC1B,IAAO,IAAA,IAAa,MAAM,IAC1B,IAAO,IAAA,IAAa,MAAM,IAC1B,IAAO,IAAA,IAAa,MAAM,IAC1B,GAAa,aAChB,CAIL,SAAgB,EAAuB,CAAC,SAAsE,CACtG,QAAiC,MAAQ,IAAU,IAIvD,MAAO,CACH,yBAA0B,OAAO,GAAU,SAAW,GAAG,EAAM,IAAM,EACxE"}
@@ -25,4 +25,4 @@ function t({ fsize: e }) {
25
25
  //#endregion
26
26
  export { t as n, e as t };
27
27
 
28
- //# sourceMappingURL=layoutProps-DUPQsWy9.js.map
28
+ //# sourceMappingURL=layoutProps-Cl6d1KmH.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"layoutProps-DUPQsWy9.js","names":[],"sources":["../src/utils/layoutProps.ts"],"sourcesContent":["import type {CSSProperties} from 'react'\n\n// Keep the utility scale in one place so props and CSS stay in sync.\nexport const mineralUtilityScaleValues = ['none', 'xs', 'sm', 'md', 'lg', 'xl', '2xl'] as const\n\nexport type MUtilityScale = (typeof mineralUtilityScaleValues)[number]\n\nexport interface LayoutUtilityProps {\n spacing?: MUtilityScale\n padding?: MUtilityScale\n fsize?: string | number\n mt?: MUtilityScale\n mb?: MUtilityScale\n ml?: MUtilityScale\n mr?: MUtilityScale\n mx?: MUtilityScale\n my?: MUtilityScale\n pt?: MUtilityScale\n pb?: MUtilityScale\n pl?: MUtilityScale\n pr?: MUtilityScale\n px?: MUtilityScale\n py?: MUtilityScale\n fullWidth?: boolean\n}\n\n// Translate spacing and typography utility props into deterministic class names.\nexport function getLayoutUtilityClassNames({\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n}: LayoutUtilityProps): Array<string | false | undefined> {\n return [\n spacing !== undefined && `spacing-${spacing}`,\n padding !== undefined && `padding-${padding}`,\n fsize !== undefined && 'has-fsize',\n mt !== undefined && `mt-${mt}`,\n mb !== undefined && `mb-${mb}`,\n ml !== undefined && `ml-${ml}`,\n mr !== undefined && `mr-${mr}`,\n mx !== undefined && `mx-${mx}`,\n my !== undefined && `my-${my}`,\n pt !== undefined && `pt-${pt}`,\n pb !== undefined && `pb-${pb}`,\n pl !== undefined && `pl-${pl}`,\n pr !== undefined && `pr-${pr}`,\n px !== undefined && `px-${px}`,\n py !== undefined && `py-${py}`,\n fullWidth && 'full-width',\n ]\n}\n\n// Keep dynamic font sizes in CSS variables so layout helpers can accept any valid CSS length.\nexport function getLayoutUtilityStyles({fsize}: Pick<LayoutUtilityProps, 'fsize'>): CSSProperties | undefined {\n if (fsize === undefined || fsize === null || fsize === '') {\n return undefined\n }\n\n return {\n '--mineral-layout-fsize': typeof fsize === 'number' ? `${fsize}px` : fsize,\n } as CSSProperties\n}\n"],"mappings":";AA2BA,SAAgB,EAA2B,EACvC,YACA,YACA,UACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,gBACsD;AACtD,QAAO;EACH,MAAY,KAAA,KAAa,WAAW;EACpC,MAAY,KAAA,KAAa,WAAW;EACpC,MAAU,KAAA,KAAa;EACvB,MAAO,KAAA,KAAa,MAAM;EAC1B,MAAO,KAAA,KAAa,MAAM;EAC1B,MAAO,KAAA,KAAa,MAAM;EAC1B,MAAO,KAAA,KAAa,MAAM;EAC1B,MAAO,KAAA,KAAa,MAAM;EAC1B,MAAO,KAAA,KAAa,MAAM;EAC1B,MAAO,KAAA,KAAa,MAAM;EAC1B,MAAO,KAAA,KAAa,MAAM;EAC1B,MAAO,KAAA,KAAa,MAAM;EAC1B,MAAO,KAAA,KAAa,MAAM;EAC1B,MAAO,KAAA,KAAa,MAAM;EAC1B,MAAO,KAAA,KAAa,MAAM;EAC1B,KAAa;EAChB;;AAIL,SAAgB,EAAuB,EAAC,YAAsE;AACtG,YAAiC,QAAQ,MAAU,IAIvD,QAAO,EACH,0BAA0B,OAAO,KAAU,WAAW,GAAG,EAAM,MAAM,GACxE"}
1
+ {"version":3,"file":"layoutProps-Cl6d1KmH.js","names":[],"sources":["../src/utils/layoutProps.ts"],"sourcesContent":["import type {CSSProperties} from 'react'\n\n// Keep the utility scale in one place so props and CSS stay in sync.\nexport const mineralUtilityScaleValues = ['none', 'xs', 'sm', 'md', 'lg', 'xl', '2xl'] as const\n\nexport type MUtilityScale = (typeof mineralUtilityScaleValues)[number]\n\nexport interface LayoutUtilityProps {\n spacing?: MUtilityScale\n padding?: MUtilityScale\n fsize?: string | number\n mt?: MUtilityScale\n mb?: MUtilityScale\n ml?: MUtilityScale\n mr?: MUtilityScale\n mx?: MUtilityScale\n my?: MUtilityScale\n pt?: MUtilityScale\n pb?: MUtilityScale\n pl?: MUtilityScale\n pr?: MUtilityScale\n px?: MUtilityScale\n py?: MUtilityScale\n fullWidth?: boolean\n}\n\n// Translate spacing and typography utility props into deterministic class names.\nexport function getLayoutUtilityClassNames({\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n}: LayoutUtilityProps): Array<string | false | undefined> {\n return [\n spacing !== undefined && `spacing-${spacing}`,\n padding !== undefined && `padding-${padding}`,\n fsize !== undefined && 'has-fsize',\n mt !== undefined && `mt-${mt}`,\n mb !== undefined && `mb-${mb}`,\n ml !== undefined && `ml-${ml}`,\n mr !== undefined && `mr-${mr}`,\n mx !== undefined && `mx-${mx}`,\n my !== undefined && `my-${my}`,\n pt !== undefined && `pt-${pt}`,\n pb !== undefined && `pb-${pb}`,\n pl !== undefined && `pl-${pl}`,\n pr !== undefined && `pr-${pr}`,\n px !== undefined && `px-${px}`,\n py !== undefined && `py-${py}`,\n fullWidth && 'full-width',\n ]\n}\n\n// Keep dynamic font sizes in CSS variables so layout helpers can accept any valid CSS length.\nexport function getLayoutUtilityStyles({fsize}: Pick<LayoutUtilityProps, 'fsize'>): CSSProperties | undefined {\n if (fsize === undefined || fsize === null || fsize === '') {\n return undefined\n }\n\n return {\n '--mineral-layout-fsize': typeof fsize === 'number' ? `${fsize}px` : fsize,\n } as CSSProperties\n}\n"],"mappings":";AA2BA,SAAgB,EAA2B,EACvC,YACA,YACA,UACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,gBACsD;AACtD,QAAO;EACH,MAAY,KAAA,KAAa,WAAW;EACpC,MAAY,KAAA,KAAa,WAAW;EACpC,MAAU,KAAA,KAAa;EACvB,MAAO,KAAA,KAAa,MAAM;EAC1B,MAAO,KAAA,KAAa,MAAM;EAC1B,MAAO,KAAA,KAAa,MAAM;EAC1B,MAAO,KAAA,KAAa,MAAM;EAC1B,MAAO,KAAA,KAAa,MAAM;EAC1B,MAAO,KAAA,KAAa,MAAM;EAC1B,MAAO,KAAA,KAAa,MAAM;EAC1B,MAAO,KAAA,KAAa,MAAM;EAC1B,MAAO,KAAA,KAAa,MAAM;EAC1B,MAAO,KAAA,KAAa,MAAM;EAC1B,MAAO,KAAA,KAAa,MAAM;EAC1B,MAAO,KAAA,KAAa,MAAM;EAC1B,KAAa;EAChB;;AAIL,SAAgB,EAAuB,EAAC,YAAsE;AACtG,YAAiC,QAAQ,MAAU,IAIvD,QAAO,EACH,0BAA0B,OAAO,KAAU,WAAW,GAAG,EAAM,MAAM,GACxE"}
@@ -1,2 +1,2 @@
1
1
  let e=require(`react`);function t(t,n){(0,e.useEffect)(()=>{let e=e=>{!t.current||t.current.contains(e.target)||n()};return document.addEventListener(`mousedown`,e),document.addEventListener(`touchstart`,e),()=>{document.removeEventListener(`mousedown`,e),document.removeEventListener(`touchstart`,e)}},[t,n])}var n={MFileManager:{group:`data`,plan:`pro`},MCalendarBoard:{group:`data`,plan:`pro`},MChat:{group:`data`,plan:`pro`},MStepper:{group:`display`,plan:`pro`},MTimeline:{group:`display`,plan:`pro`},MAvatarStack:{group:`media`,plan:`pro`},MIconV2:{group:`icons`,plan:`pro`},MTopbar:{group:`layout`,plan:`pro`},MMasonry:{group:`media`,plan:`pro`},MShowcaseCarousel:{group:`media`,plan:`pro`},MCookieConsent:{group:`feedback`,plan:`pro`},MQrCode:{group:`display`,plan:`pro`},MCardBusiness:{group:`cards`,plan:`pro`},MCardFinance:{group:`cards`,plan:`pro`},MLineChart:{group:`charts`,plan:`pro`},MBarChart:{group:`charts`,plan:`pro`},MAreaChart:{group:`charts`,plan:`pro`},MPieChart:{group:`charts`,plan:`pro`},MSparkline:{group:`charts`,plan:`pro`}},r=Object.keys(n);function i(e){return Object.prototype.hasOwnProperty.call(n,e)}function a(e){if(i(e))return n[e]}function o(e){return a(e)?.plan??`free`}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return n}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return t}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return a}});
2
- //# sourceMappingURL=licensing-CMLexRJk.cjs.map
2
+ //# sourceMappingURL=licensing-BXFauUj_.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"licensing-CMLexRJk.cjs","names":[],"sources":["../src/utils/useClickOutside.ts","../src/utils/licensing.ts"],"sourcesContent":["import {useEffect, type RefObject} from 'react'\n\n// Trigger a callback when pointer interaction happens outside the referenced element.\nexport function useClickOutside(ref: RefObject<HTMLElement | null>, handler: () => void): void {\n useEffect(() => {\n const listener = (e: MouseEvent | TouchEvent) => {\n if (!ref.current || ref.current.contains(e.target as Node)) return\n handler()\n }\n\n document.addEventListener('mousedown', listener)\n document.addEventListener('touchstart', listener)\n return () => {\n document.removeEventListener('mousedown', listener)\n document.removeEventListener('touchstart', listener)\n }\n }, [ref, handler])\n}\n","export type MineralPlan = 'free' | 'pro'\n\nexport interface MineralComponentLicense {\n group: 'cards' | 'charts' | 'data' | 'display' | 'media' | 'icons' | 'layout' | 'feedback'\n plan: MineralPlan\n}\n\nexport const mineralComponentLicenses = {\n MFileManager: {group: 'data', plan: 'pro'},\n MCalendarBoard: {group: 'data', plan: 'pro'},\n MChat: {group: 'data', plan: 'pro'},\n MStepper: {group: 'display', plan: 'pro'},\n MTimeline: {group: 'display', plan: 'pro'},\n MAvatarStack: {group: 'media', plan: 'pro'},\n MIconV2: {group: 'icons', plan: 'pro'},\n MTopbar: {group: 'layout', plan: 'pro'},\n MMasonry: {group: 'media', plan: 'pro'},\n MShowcaseCarousel: {group: 'media', plan: 'pro'},\n MCookieConsent: {group: 'feedback', plan: 'pro'},\n MQrCode: {group: 'display', plan: 'pro'},\n MCardBusiness: {group: 'cards', plan: 'pro'},\n MCardFinance: {group: 'cards', plan: 'pro'},\n MLineChart: {group: 'charts', plan: 'pro'},\n MBarChart: {group: 'charts', plan: 'pro'},\n MAreaChart: {group: 'charts', plan: 'pro'},\n MPieChart: {group: 'charts', plan: 'pro'},\n MSparkline: {group: 'charts', plan: 'pro'},\n} as const satisfies Record<string, MineralComponentLicense>\n\nexport type MineralProComponentName = keyof typeof mineralComponentLicenses\n\nexport const mineralProComponents = Object.keys(mineralComponentLicenses) as MineralProComponentName[]\n\nexport function isMineralProComponent(componentName: string): componentName is MineralProComponentName {\n return Object.prototype.hasOwnProperty.call(mineralComponentLicenses, componentName)\n}\n\nexport function getMineralComponentLicense(componentName: string): MineralComponentLicense | undefined {\n if (!isMineralProComponent(componentName)) {\n return undefined\n }\n\n return mineralComponentLicenses[componentName]\n}\n\nexport function getMineralComponentPlan(componentName: string): MineralPlan {\n return getMineralComponentLicense(componentName)?.plan ?? 'free'\n}\n"],"mappings":"uBAGA,SAAgB,EAAgB,EAAoC,EAA2B,EAC3F,EAAA,EAAA,eAAgB,CACZ,IAAM,EAAY,GAA+B,CACzC,CAAC,EAAI,SAAW,EAAI,QAAQ,SAAS,EAAE,OAAe,EAC1D,GAAS,EAKb,OAFA,SAAS,iBAAiB,YAAa,EAAS,CAChD,SAAS,iBAAiB,aAAc,EAAS,KACpC,CACT,SAAS,oBAAoB,YAAa,EAAS,CACnD,SAAS,oBAAoB,aAAc,EAAS,GAEzD,CAAC,EAAK,EAAQ,CAAC,CCTtB,IAAa,EAA2B,CACpC,aAAc,CAAC,MAAO,OAAQ,KAAM,MAAM,CAC1C,eAAgB,CAAC,MAAO,OAAQ,KAAM,MAAM,CAC5C,MAAO,CAAC,MAAO,OAAQ,KAAM,MAAM,CACnC,SAAU,CAAC,MAAO,UAAW,KAAM,MAAM,CACzC,UAAW,CAAC,MAAO,UAAW,KAAM,MAAM,CAC1C,aAAc,CAAC,MAAO,QAAS,KAAM,MAAM,CAC3C,QAAS,CAAC,MAAO,QAAS,KAAM,MAAM,CACtC,QAAS,CAAC,MAAO,SAAU,KAAM,MAAM,CACvC,SAAU,CAAC,MAAO,QAAS,KAAM,MAAM,CACvC,kBAAmB,CAAC,MAAO,QAAS,KAAM,MAAM,CAChD,eAAgB,CAAC,MAAO,WAAY,KAAM,MAAM,CAChD,QAAS,CAAC,MAAO,UAAW,KAAM,MAAM,CACxC,cAAe,CAAC,MAAO,QAAS,KAAM,MAAM,CAC5C,aAAc,CAAC,MAAO,QAAS,KAAM,MAAM,CAC3C,WAAY,CAAC,MAAO,SAAU,KAAM,MAAM,CAC1C,UAAW,CAAC,MAAO,SAAU,KAAM,MAAM,CACzC,WAAY,CAAC,MAAO,SAAU,KAAM,MAAM,CAC1C,UAAW,CAAC,MAAO,SAAU,KAAM,MAAM,CACzC,WAAY,CAAC,MAAO,SAAU,KAAM,MAAM,CAC7C,CAIY,EAAuB,OAAO,KAAK,EAAyB,CAEzE,SAAgB,EAAsB,EAAiE,CACnG,OAAO,OAAO,UAAU,eAAe,KAAK,EAA0B,EAAc,CAGxF,SAAgB,EAA2B,EAA4D,CAC9F,KAAsB,EAAc,CAIzC,OAAO,EAAyB,GAGpC,SAAgB,EAAwB,EAAoC,CACxE,OAAO,EAA2B,EAAc,EAAE,MAAQ"}
1
+ {"version":3,"file":"licensing-BXFauUj_.cjs","names":[],"sources":["../src/utils/useClickOutside.ts","../src/utils/licensing.ts"],"sourcesContent":["import {useEffect, type RefObject} from 'react'\n\n// Trigger a callback when pointer interaction happens outside the referenced element.\nexport function useClickOutside(ref: RefObject<HTMLElement | null>, handler: () => void): void {\n useEffect(() => {\n const listener = (e: MouseEvent | TouchEvent) => {\n if (!ref.current || ref.current.contains(e.target as Node)) return\n handler()\n }\n\n document.addEventListener('mousedown', listener)\n document.addEventListener('touchstart', listener)\n return () => {\n document.removeEventListener('mousedown', listener)\n document.removeEventListener('touchstart', listener)\n }\n }, [ref, handler])\n}\n","export type MineralPlan = 'free' | 'pro'\n\nexport interface MineralComponentLicense {\n group: 'cards' | 'charts' | 'data' | 'display' | 'media' | 'icons' | 'layout' | 'feedback'\n plan: MineralPlan\n}\n\nexport const mineralComponentLicenses = {\n MFileManager: {group: 'data', plan: 'pro'},\n MCalendarBoard: {group: 'data', plan: 'pro'},\n MChat: {group: 'data', plan: 'pro'},\n MStepper: {group: 'display', plan: 'pro'},\n MTimeline: {group: 'display', plan: 'pro'},\n MAvatarStack: {group: 'media', plan: 'pro'},\n MIconV2: {group: 'icons', plan: 'pro'},\n MTopbar: {group: 'layout', plan: 'pro'},\n MMasonry: {group: 'media', plan: 'pro'},\n MShowcaseCarousel: {group: 'media', plan: 'pro'},\n MCookieConsent: {group: 'feedback', plan: 'pro'},\n MQrCode: {group: 'display', plan: 'pro'},\n MCardBusiness: {group: 'cards', plan: 'pro'},\n MCardFinance: {group: 'cards', plan: 'pro'},\n MLineChart: {group: 'charts', plan: 'pro'},\n MBarChart: {group: 'charts', plan: 'pro'},\n MAreaChart: {group: 'charts', plan: 'pro'},\n MPieChart: {group: 'charts', plan: 'pro'},\n MSparkline: {group: 'charts', plan: 'pro'},\n} as const satisfies Record<string, MineralComponentLicense>\n\nexport type MineralProComponentName = keyof typeof mineralComponentLicenses\n\nexport const mineralProComponents = Object.keys(mineralComponentLicenses) as MineralProComponentName[]\n\nexport function isMineralProComponent(componentName: string): componentName is MineralProComponentName {\n return Object.prototype.hasOwnProperty.call(mineralComponentLicenses, componentName)\n}\n\nexport function getMineralComponentLicense(componentName: string): MineralComponentLicense | undefined {\n if (!isMineralProComponent(componentName)) {\n return undefined\n }\n\n return mineralComponentLicenses[componentName]\n}\n\nexport function getMineralComponentPlan(componentName: string): MineralPlan {\n return getMineralComponentLicense(componentName)?.plan ?? 'free'\n}\n"],"mappings":"uBAGA,SAAgB,EAAgB,EAAoC,EAA2B,EAC3F,EAAA,EAAA,eAAgB,CACZ,IAAM,EAAY,GAA+B,CACzC,CAAC,EAAI,SAAW,EAAI,QAAQ,SAAS,EAAE,OAAe,EAC1D,GAAS,EAKb,OAFA,SAAS,iBAAiB,YAAa,EAAS,CAChD,SAAS,iBAAiB,aAAc,EAAS,KACpC,CACT,SAAS,oBAAoB,YAAa,EAAS,CACnD,SAAS,oBAAoB,aAAc,EAAS,GAEzD,CAAC,EAAK,EAAQ,CAAC,CCTtB,IAAa,EAA2B,CACpC,aAAc,CAAC,MAAO,OAAQ,KAAM,MAAM,CAC1C,eAAgB,CAAC,MAAO,OAAQ,KAAM,MAAM,CAC5C,MAAO,CAAC,MAAO,OAAQ,KAAM,MAAM,CACnC,SAAU,CAAC,MAAO,UAAW,KAAM,MAAM,CACzC,UAAW,CAAC,MAAO,UAAW,KAAM,MAAM,CAC1C,aAAc,CAAC,MAAO,QAAS,KAAM,MAAM,CAC3C,QAAS,CAAC,MAAO,QAAS,KAAM,MAAM,CACtC,QAAS,CAAC,MAAO,SAAU,KAAM,MAAM,CACvC,SAAU,CAAC,MAAO,QAAS,KAAM,MAAM,CACvC,kBAAmB,CAAC,MAAO,QAAS,KAAM,MAAM,CAChD,eAAgB,CAAC,MAAO,WAAY,KAAM,MAAM,CAChD,QAAS,CAAC,MAAO,UAAW,KAAM,MAAM,CACxC,cAAe,CAAC,MAAO,QAAS,KAAM,MAAM,CAC5C,aAAc,CAAC,MAAO,QAAS,KAAM,MAAM,CAC3C,WAAY,CAAC,MAAO,SAAU,KAAM,MAAM,CAC1C,UAAW,CAAC,MAAO,SAAU,KAAM,MAAM,CACzC,WAAY,CAAC,MAAO,SAAU,KAAM,MAAM,CAC1C,UAAW,CAAC,MAAO,SAAU,KAAM,MAAM,CACzC,WAAY,CAAC,MAAO,SAAU,KAAM,MAAM,CAC7C,CAIY,EAAuB,OAAO,KAAK,EAAyB,CAEzE,SAAgB,EAAsB,EAAiE,CACnG,OAAO,OAAO,UAAU,eAAe,KAAK,EAA0B,EAAc,CAGxF,SAAgB,EAA2B,EAA4D,CAC9F,KAAsB,EAAc,CAIzC,OAAO,EAAyB,GAGpC,SAAgB,EAAwB,EAAoC,CACxE,OAAO,EAA2B,EAAc,EAAE,MAAQ"}
@@ -102,4 +102,4 @@ function o(e) {
102
102
  //#endregion
103
103
  export { r as a, n as i, o as n, t as o, i as r, a as t };
104
104
 
105
- //# sourceMappingURL=licensing-SQAMYrOI.js.map
105
+ //# sourceMappingURL=licensing-CwzqhHH9.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"licensing-SQAMYrOI.js","names":[],"sources":["../src/utils/useClickOutside.ts","../src/utils/licensing.ts"],"sourcesContent":["import {useEffect, type RefObject} from 'react'\n\n// Trigger a callback when pointer interaction happens outside the referenced element.\nexport function useClickOutside(ref: RefObject<HTMLElement | null>, handler: () => void): void {\n useEffect(() => {\n const listener = (e: MouseEvent | TouchEvent) => {\n if (!ref.current || ref.current.contains(e.target as Node)) return\n handler()\n }\n\n document.addEventListener('mousedown', listener)\n document.addEventListener('touchstart', listener)\n return () => {\n document.removeEventListener('mousedown', listener)\n document.removeEventListener('touchstart', listener)\n }\n }, [ref, handler])\n}\n","export type MineralPlan = 'free' | 'pro'\n\nexport interface MineralComponentLicense {\n group: 'cards' | 'charts' | 'data' | 'display' | 'media' | 'icons' | 'layout' | 'feedback'\n plan: MineralPlan\n}\n\nexport const mineralComponentLicenses = {\n MFileManager: {group: 'data', plan: 'pro'},\n MCalendarBoard: {group: 'data', plan: 'pro'},\n MChat: {group: 'data', plan: 'pro'},\n MStepper: {group: 'display', plan: 'pro'},\n MTimeline: {group: 'display', plan: 'pro'},\n MAvatarStack: {group: 'media', plan: 'pro'},\n MIconV2: {group: 'icons', plan: 'pro'},\n MTopbar: {group: 'layout', plan: 'pro'},\n MMasonry: {group: 'media', plan: 'pro'},\n MShowcaseCarousel: {group: 'media', plan: 'pro'},\n MCookieConsent: {group: 'feedback', plan: 'pro'},\n MQrCode: {group: 'display', plan: 'pro'},\n MCardBusiness: {group: 'cards', plan: 'pro'},\n MCardFinance: {group: 'cards', plan: 'pro'},\n MLineChart: {group: 'charts', plan: 'pro'},\n MBarChart: {group: 'charts', plan: 'pro'},\n MAreaChart: {group: 'charts', plan: 'pro'},\n MPieChart: {group: 'charts', plan: 'pro'},\n MSparkline: {group: 'charts', plan: 'pro'},\n} as const satisfies Record<string, MineralComponentLicense>\n\nexport type MineralProComponentName = keyof typeof mineralComponentLicenses\n\nexport const mineralProComponents = Object.keys(mineralComponentLicenses) as MineralProComponentName[]\n\nexport function isMineralProComponent(componentName: string): componentName is MineralProComponentName {\n return Object.prototype.hasOwnProperty.call(mineralComponentLicenses, componentName)\n}\n\nexport function getMineralComponentLicense(componentName: string): MineralComponentLicense | undefined {\n if (!isMineralProComponent(componentName)) {\n return undefined\n }\n\n return mineralComponentLicenses[componentName]\n}\n\nexport function getMineralComponentPlan(componentName: string): MineralPlan {\n return getMineralComponentLicense(componentName)?.plan ?? 'free'\n}\n"],"mappings":";;AAGA,SAAgB,EAAgB,GAAoC,GAA2B;AAC3F,SAAgB;EACZ,IAAM,KAAY,MAA+B;AACzC,IAAC,EAAI,WAAW,EAAI,QAAQ,SAAS,EAAE,OAAe,IAC1D,GAAS;;AAKb,SAFA,SAAS,iBAAiB,aAAa,EAAS,EAChD,SAAS,iBAAiB,cAAc,EAAS,QACpC;AAET,GADA,SAAS,oBAAoB,aAAa,EAAS,EACnD,SAAS,oBAAoB,cAAc,EAAS;;IAEzD,CAAC,GAAK,EAAQ,CAAC;;;;ACTtB,IAAa,IAA2B;CACpC,cAAc;EAAC,OAAO;EAAQ,MAAM;EAAM;CAC1C,gBAAgB;EAAC,OAAO;EAAQ,MAAM;EAAM;CAC5C,OAAO;EAAC,OAAO;EAAQ,MAAM;EAAM;CACnC,UAAU;EAAC,OAAO;EAAW,MAAM;EAAM;CACzC,WAAW;EAAC,OAAO;EAAW,MAAM;EAAM;CAC1C,cAAc;EAAC,OAAO;EAAS,MAAM;EAAM;CAC3C,SAAS;EAAC,OAAO;EAAS,MAAM;EAAM;CACtC,SAAS;EAAC,OAAO;EAAU,MAAM;EAAM;CACvC,UAAU;EAAC,OAAO;EAAS,MAAM;EAAM;CACvC,mBAAmB;EAAC,OAAO;EAAS,MAAM;EAAM;CAChD,gBAAgB;EAAC,OAAO;EAAY,MAAM;EAAM;CAChD,SAAS;EAAC,OAAO;EAAW,MAAM;EAAM;CACxC,eAAe;EAAC,OAAO;EAAS,MAAM;EAAM;CAC5C,cAAc;EAAC,OAAO;EAAS,MAAM;EAAM;CAC3C,YAAY;EAAC,OAAO;EAAU,MAAM;EAAM;CAC1C,WAAW;EAAC,OAAO;EAAU,MAAM;EAAM;CACzC,YAAY;EAAC,OAAO;EAAU,MAAM;EAAM;CAC1C,WAAW;EAAC,OAAO;EAAU,MAAM;EAAM;CACzC,YAAY;EAAC,OAAO;EAAU,MAAM;EAAM;CAC7C,EAIY,IAAuB,OAAO,KAAK,EAAyB;AAEzE,SAAgB,EAAsB,GAAiE;AACnG,QAAO,OAAO,UAAU,eAAe,KAAK,GAA0B,EAAc;;AAGxF,SAAgB,EAA2B,GAA4D;AAC9F,OAAsB,EAAc,CAIzC,QAAO,EAAyB;;AAGpC,SAAgB,EAAwB,GAAoC;AACxE,QAAO,EAA2B,EAAc,EAAE,QAAQ"}
1
+ {"version":3,"file":"licensing-CwzqhHH9.js","names":[],"sources":["../src/utils/useClickOutside.ts","../src/utils/licensing.ts"],"sourcesContent":["import {useEffect, type RefObject} from 'react'\n\n// Trigger a callback when pointer interaction happens outside the referenced element.\nexport function useClickOutside(ref: RefObject<HTMLElement | null>, handler: () => void): void {\n useEffect(() => {\n const listener = (e: MouseEvent | TouchEvent) => {\n if (!ref.current || ref.current.contains(e.target as Node)) return\n handler()\n }\n\n document.addEventListener('mousedown', listener)\n document.addEventListener('touchstart', listener)\n return () => {\n document.removeEventListener('mousedown', listener)\n document.removeEventListener('touchstart', listener)\n }\n }, [ref, handler])\n}\n","export type MineralPlan = 'free' | 'pro'\n\nexport interface MineralComponentLicense {\n group: 'cards' | 'charts' | 'data' | 'display' | 'media' | 'icons' | 'layout' | 'feedback'\n plan: MineralPlan\n}\n\nexport const mineralComponentLicenses = {\n MFileManager: {group: 'data', plan: 'pro'},\n MCalendarBoard: {group: 'data', plan: 'pro'},\n MChat: {group: 'data', plan: 'pro'},\n MStepper: {group: 'display', plan: 'pro'},\n MTimeline: {group: 'display', plan: 'pro'},\n MAvatarStack: {group: 'media', plan: 'pro'},\n MIconV2: {group: 'icons', plan: 'pro'},\n MTopbar: {group: 'layout', plan: 'pro'},\n MMasonry: {group: 'media', plan: 'pro'},\n MShowcaseCarousel: {group: 'media', plan: 'pro'},\n MCookieConsent: {group: 'feedback', plan: 'pro'},\n MQrCode: {group: 'display', plan: 'pro'},\n MCardBusiness: {group: 'cards', plan: 'pro'},\n MCardFinance: {group: 'cards', plan: 'pro'},\n MLineChart: {group: 'charts', plan: 'pro'},\n MBarChart: {group: 'charts', plan: 'pro'},\n MAreaChart: {group: 'charts', plan: 'pro'},\n MPieChart: {group: 'charts', plan: 'pro'},\n MSparkline: {group: 'charts', plan: 'pro'},\n} as const satisfies Record<string, MineralComponentLicense>\n\nexport type MineralProComponentName = keyof typeof mineralComponentLicenses\n\nexport const mineralProComponents = Object.keys(mineralComponentLicenses) as MineralProComponentName[]\n\nexport function isMineralProComponent(componentName: string): componentName is MineralProComponentName {\n return Object.prototype.hasOwnProperty.call(mineralComponentLicenses, componentName)\n}\n\nexport function getMineralComponentLicense(componentName: string): MineralComponentLicense | undefined {\n if (!isMineralProComponent(componentName)) {\n return undefined\n }\n\n return mineralComponentLicenses[componentName]\n}\n\nexport function getMineralComponentPlan(componentName: string): MineralPlan {\n return getMineralComponentLicense(componentName)?.plan ?? 'free'\n}\n"],"mappings":";;AAGA,SAAgB,EAAgB,GAAoC,GAA2B;AAC3F,SAAgB;EACZ,IAAM,KAAY,MAA+B;AACzC,IAAC,EAAI,WAAW,EAAI,QAAQ,SAAS,EAAE,OAAe,IAC1D,GAAS;;AAKb,SAFA,SAAS,iBAAiB,aAAa,EAAS,EAChD,SAAS,iBAAiB,cAAc,EAAS,QACpC;AAET,GADA,SAAS,oBAAoB,aAAa,EAAS,EACnD,SAAS,oBAAoB,cAAc,EAAS;;IAEzD,CAAC,GAAK,EAAQ,CAAC;;;;ACTtB,IAAa,IAA2B;CACpC,cAAc;EAAC,OAAO;EAAQ,MAAM;EAAM;CAC1C,gBAAgB;EAAC,OAAO;EAAQ,MAAM;EAAM;CAC5C,OAAO;EAAC,OAAO;EAAQ,MAAM;EAAM;CACnC,UAAU;EAAC,OAAO;EAAW,MAAM;EAAM;CACzC,WAAW;EAAC,OAAO;EAAW,MAAM;EAAM;CAC1C,cAAc;EAAC,OAAO;EAAS,MAAM;EAAM;CAC3C,SAAS;EAAC,OAAO;EAAS,MAAM;EAAM;CACtC,SAAS;EAAC,OAAO;EAAU,MAAM;EAAM;CACvC,UAAU;EAAC,OAAO;EAAS,MAAM;EAAM;CACvC,mBAAmB;EAAC,OAAO;EAAS,MAAM;EAAM;CAChD,gBAAgB;EAAC,OAAO;EAAY,MAAM;EAAM;CAChD,SAAS;EAAC,OAAO;EAAW,MAAM;EAAM;CACxC,eAAe;EAAC,OAAO;EAAS,MAAM;EAAM;CAC5C,cAAc;EAAC,OAAO;EAAS,MAAM;EAAM;CAC3C,YAAY;EAAC,OAAO;EAAU,MAAM;EAAM;CAC1C,WAAW;EAAC,OAAO;EAAU,MAAM;EAAM;CACzC,YAAY;EAAC,OAAO;EAAU,MAAM;EAAM;CAC1C,WAAW;EAAC,OAAO;EAAU,MAAM;EAAM;CACzC,YAAY;EAAC,OAAO;EAAU,MAAM;EAAM;CAC7C,EAIY,IAAuB,OAAO,KAAK,EAAyB;AAEzE,SAAgB,EAAsB,GAAiE;AACnG,QAAO,OAAO,UAAU,eAAe,KAAK,GAA0B,EAAc;;AAGxF,SAAgB,EAA2B,GAA4D;AAC9F,OAAsB,EAAc,CAIzC,QAAO,EAAyB;;AAGpC,SAAgB,EAAwB,GAAoC;AACxE,QAAO,EAA2B,EAAc,EAAE,QAAQ"}
@@ -1,2 +1,2 @@
1
1
  let e=require(`react`);function t(){if(typeof document<`u`){let e=document.documentElement.lang?.trim();if(e)return e}return typeof navigator<`u`&&(navigator.language||navigator.languages?.[0])||`en`}function n(n){let[r,i]=(0,e.useState)(()=>n||t());return(0,e.useEffect)(()=>{if(n){i(n);return}if(typeof document>`u`)return;let e=()=>i(t());e();let r=new MutationObserver(e);return r.observe(document.documentElement,{attributes:!0,attributeFilter:[`lang`]}),window.addEventListener(`languagechange`,e),()=>{r.disconnect(),window.removeEventListener(`languagechange`,e)}},[n]),r}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return n}});
2
- //# sourceMappingURL=locale-DpCe_7mG.cjs.map
2
+ //# sourceMappingURL=locale-LCAQDJCd.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"locale-DpCe_7mG.cjs","names":[],"sources":["../src/utils/locale.ts"],"sourcesContent":["import {useEffect, useState} from 'react'\n\nexport function resolveRuntimeLocale(): string {\n if (typeof document !== 'undefined') {\n const lang = document.documentElement.lang?.trim()\n if (lang) return lang\n }\n\n if (typeof navigator !== 'undefined') {\n return navigator.language || navigator.languages?.[0] || 'en'\n }\n\n return 'en'\n}\n\n// React to MI18nProvider lang updates without requiring direct provider access.\nexport function useDocumentLocale(explicitLocale?: string): string {\n const [locale, setLocale] = useState(() => explicitLocale || resolveRuntimeLocale())\n\n useEffect(() => {\n if (explicitLocale) {\n setLocale(explicitLocale)\n return\n }\n\n if (typeof document === 'undefined') return\n\n const update = () => setLocale(resolveRuntimeLocale())\n update()\n\n const observer = new MutationObserver(update)\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['lang'],\n })\n\n window.addEventListener('languagechange', update)\n\n return () => {\n observer.disconnect()\n window.removeEventListener('languagechange', update)\n }\n }, [explicitLocale])\n\n return locale\n}\n"],"mappings":"uBAEA,SAAgB,GAA+B,CAC3C,GAAI,OAAO,SAAa,IAAa,CACjC,IAAM,EAAO,SAAS,gBAAgB,MAAM,MAAM,CAClD,GAAI,EAAM,OAAO,EAOrB,OAJI,OAAO,UAAc,MACd,UAAU,UAAY,UAAU,YAAY,KAGhD,KAIX,SAAgB,EAAkB,EAAiC,CAC/D,GAAM,CAAC,EAAQ,IAAA,EAAA,EAAA,cAA4B,GAAkB,GAAsB,CAAC,CA2BpF,OAzBA,EAAA,EAAA,eAAgB,CACZ,GAAI,EAAgB,CAChB,EAAU,EAAe,CACzB,OAGJ,GAAI,OAAO,SAAa,IAAa,OAErC,IAAM,MAAe,EAAU,GAAsB,CAAC,CACtD,GAAQ,CAER,IAAM,EAAW,IAAI,iBAAiB,EAAO,CAQ7C,OAPA,EAAS,QAAQ,SAAS,gBAAiB,CACvC,WAAY,GACZ,gBAAiB,CAAC,OAAO,CAC5B,CAAC,CAEF,OAAO,iBAAiB,iBAAkB,EAAO,KAEpC,CACT,EAAS,YAAY,CACrB,OAAO,oBAAoB,iBAAkB,EAAO,GAEzD,CAAC,EAAe,CAAC,CAEb"}
1
+ {"version":3,"file":"locale-LCAQDJCd.cjs","names":[],"sources":["../src/utils/locale.ts"],"sourcesContent":["import {useEffect, useState} from 'react'\n\nexport function resolveRuntimeLocale(): string {\n if (typeof document !== 'undefined') {\n const lang = document.documentElement.lang?.trim()\n if (lang) return lang\n }\n\n if (typeof navigator !== 'undefined') {\n return navigator.language || navigator.languages?.[0] || 'en'\n }\n\n return 'en'\n}\n\n// React to MI18nProvider lang updates without requiring direct provider access.\nexport function useDocumentLocale(explicitLocale?: string): string {\n const [locale, setLocale] = useState(() => explicitLocale || resolveRuntimeLocale())\n\n useEffect(() => {\n if (explicitLocale) {\n setLocale(explicitLocale)\n return\n }\n\n if (typeof document === 'undefined') return\n\n const update = () => setLocale(resolveRuntimeLocale())\n update()\n\n const observer = new MutationObserver(update)\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['lang'],\n })\n\n window.addEventListener('languagechange', update)\n\n return () => {\n observer.disconnect()\n window.removeEventListener('languagechange', update)\n }\n }, [explicitLocale])\n\n return locale\n}\n"],"mappings":"uBAEA,SAAgB,GAA+B,CAC3C,GAAI,OAAO,SAAa,IAAa,CACjC,IAAM,EAAO,SAAS,gBAAgB,MAAM,MAAM,CAClD,GAAI,EAAM,OAAO,EAOrB,OAJI,OAAO,UAAc,MACd,UAAU,UAAY,UAAU,YAAY,KAGhD,KAIX,SAAgB,EAAkB,EAAiC,CAC/D,GAAM,CAAC,EAAQ,IAAA,EAAA,EAAA,cAA4B,GAAkB,GAAsB,CAAC,CA2BpF,OAzBA,EAAA,EAAA,eAAgB,CACZ,GAAI,EAAgB,CAChB,EAAU,EAAe,CACzB,OAGJ,GAAI,OAAO,SAAa,IAAa,OAErC,IAAM,MAAe,EAAU,GAAsB,CAAC,CACtD,GAAQ,CAER,IAAM,EAAW,IAAI,iBAAiB,EAAO,CAQ7C,OAPA,EAAS,QAAQ,SAAS,gBAAiB,CACvC,WAAY,GACZ,gBAAiB,CAAC,OAAO,CAC5B,CAAC,CAEF,OAAO,iBAAiB,iBAAkB,EAAO,KAEpC,CACT,EAAS,YAAY,CACrB,OAAO,oBAAoB,iBAAkB,EAAO,GAEzD,CAAC,EAAe,CAAC,CAEb"}
@@ -29,4 +29,4 @@ function r(r) {
29
29
  //#endregion
30
30
  export { r as t };
31
31
 
32
- //# sourceMappingURL=locale-Crzgecoe.js.map
32
+ //# sourceMappingURL=locale-uMMj57KX.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"locale-Crzgecoe.js","names":[],"sources":["../src/utils/locale.ts"],"sourcesContent":["import {useEffect, useState} from 'react'\n\nexport function resolveRuntimeLocale(): string {\n if (typeof document !== 'undefined') {\n const lang = document.documentElement.lang?.trim()\n if (lang) return lang\n }\n\n if (typeof navigator !== 'undefined') {\n return navigator.language || navigator.languages?.[0] || 'en'\n }\n\n return 'en'\n}\n\n// React to MI18nProvider lang updates without requiring direct provider access.\nexport function useDocumentLocale(explicitLocale?: string): string {\n const [locale, setLocale] = useState(() => explicitLocale || resolveRuntimeLocale())\n\n useEffect(() => {\n if (explicitLocale) {\n setLocale(explicitLocale)\n return\n }\n\n if (typeof document === 'undefined') return\n\n const update = () => setLocale(resolveRuntimeLocale())\n update()\n\n const observer = new MutationObserver(update)\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['lang'],\n })\n\n window.addEventListener('languagechange', update)\n\n return () => {\n observer.disconnect()\n window.removeEventListener('languagechange', update)\n }\n }, [explicitLocale])\n\n return locale\n}\n"],"mappings":";;AAEA,SAAgB,IAA+B;AAC3C,KAAI,OAAO,WAAa,KAAa;EACjC,IAAM,IAAO,SAAS,gBAAgB,MAAM,MAAM;AAClD,MAAI,EAAM,QAAO;;AAOrB,QAJI,OAAO,YAAc,QACd,UAAU,YAAY,UAAU,YAAY,OAGhD;;AAIX,SAAgB,EAAkB,GAAiC;CAC/D,IAAM,CAAC,GAAQ,KAAa,QAAe,KAAkB,GAAsB,CAAC;AA2BpF,QAzBA,QAAgB;AACZ,MAAI,GAAgB;AAChB,KAAU,EAAe;AACzB;;AAGJ,MAAI,OAAO,WAAa,IAAa;EAErC,IAAM,UAAe,EAAU,GAAsB,CAAC;AACtD,KAAQ;EAER,IAAM,IAAW,IAAI,iBAAiB,EAAO;AAQ7C,SAPA,EAAS,QAAQ,SAAS,iBAAiB;GACvC,YAAY;GACZ,iBAAiB,CAAC,OAAO;GAC5B,CAAC,EAEF,OAAO,iBAAiB,kBAAkB,EAAO,QAEpC;AAET,GADA,EAAS,YAAY,EACrB,OAAO,oBAAoB,kBAAkB,EAAO;;IAEzD,CAAC,EAAe,CAAC,EAEb"}
1
+ {"version":3,"file":"locale-uMMj57KX.js","names":[],"sources":["../src/utils/locale.ts"],"sourcesContent":["import {useEffect, useState} from 'react'\n\nexport function resolveRuntimeLocale(): string {\n if (typeof document !== 'undefined') {\n const lang = document.documentElement.lang?.trim()\n if (lang) return lang\n }\n\n if (typeof navigator !== 'undefined') {\n return navigator.language || navigator.languages?.[0] || 'en'\n }\n\n return 'en'\n}\n\n// React to MI18nProvider lang updates without requiring direct provider access.\nexport function useDocumentLocale(explicitLocale?: string): string {\n const [locale, setLocale] = useState(() => explicitLocale || resolveRuntimeLocale())\n\n useEffect(() => {\n if (explicitLocale) {\n setLocale(explicitLocale)\n return\n }\n\n if (typeof document === 'undefined') return\n\n const update = () => setLocale(resolveRuntimeLocale())\n update()\n\n const observer = new MutationObserver(update)\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['lang'],\n })\n\n window.addEventListener('languagechange', update)\n\n return () => {\n observer.disconnect()\n window.removeEventListener('languagechange', update)\n }\n }, [explicitLocale])\n\n return locale\n}\n"],"mappings":";;AAEA,SAAgB,IAA+B;AAC3C,KAAI,OAAO,WAAa,KAAa;EACjC,IAAM,IAAO,SAAS,gBAAgB,MAAM,MAAM;AAClD,MAAI,EAAM,QAAO;;AAOrB,QAJI,OAAO,YAAc,QACd,UAAU,YAAY,UAAU,YAAY,OAGhD;;AAIX,SAAgB,EAAkB,GAAiC;CAC/D,IAAM,CAAC,GAAQ,KAAa,QAAe,KAAkB,GAAsB,CAAC;AA2BpF,QAzBA,QAAgB;AACZ,MAAI,GAAgB;AAChB,KAAU,EAAe;AACzB;;AAGJ,MAAI,OAAO,WAAa,IAAa;EAErC,IAAM,UAAe,EAAU,GAAsB,CAAC;AACtD,KAAQ;EAER,IAAM,IAAW,IAAI,iBAAiB,EAAO;AAQ7C,SAPA,EAAS,QAAQ,SAAS,iBAAiB;GACvC,YAAY;GACZ,iBAAiB,CAAC,OAAO;GAC5B,CAAC,EAEF,OAAO,iBAAiB,kBAAkB,EAAO,QAEpC;AAET,GADA,EAAS,YAAY,EACrB,OAAO,oBAAoB,kBAAkB,EAAO;;IAEzD,CAAC,EAAe,CAAC,EAEb"}
@@ -0,0 +1,2 @@
1
+ const e=require(`./icons-Dv1T-cF4.cjs`),t=require(`./cn-CU5TNITO.cjs`),n=require(`./useInteractionEffect-DnEfbCrX.cjs`),r=require(`./MButton-CX8SV1m0.cjs`),i=require(`./MSkeleton-D7wnoEE8.cjs`),a=require(`./MImage-BHgzEHMO.cjs`),o=require(`./MAvatar-nLlGAprq.cjs`);let s=require(`react`),c=require(`react/jsx-runtime`);function l({items:e,columns:n=3,rounded:r=!0,clickEffect:i=`ripple`,className:a,...o}){return(0,c.jsx)(`div`,{className:t.t(`gallery`,`columns-${n}`,a),...o,children:e.map((e,t)=>(0,c.jsx)(u,{item:e,rounded:r,clickEffect:i},t))})}function u({item:e,rounded:r,clickEffect:i}){let{effectClassName:a,effectLayer:o,handlePointerDown:s}=n.t({effect:i});return(0,c.jsxs)(`figure`,{className:t.t(`gallery-item`,r&&`rounded`,a),onPointerDown:s,children:[(0,c.jsx)(`img`,{className:`gallery-image`,src:e.src,alt:e.alt||``,loading:`lazy`}),e.caption&&(0,c.jsx)(`figcaption`,{className:`gallery-caption`,children:e.caption}),o]})}function d({autoPlay:n=!1,interval:i=5e3,showDots:a=!0,showArrows:o=!0,loop:l=!0,draggable:u=!0,transition:d=`slide`,className:f,children:p,...m}){let h=s.Children.toArray(p),g=h.length,[_,v]=(0,s.useState)(0),[y,b]=(0,s.useState)(0),[x,S]=(0,s.useState)(!1),C=(0,s.useRef)(0),w=(0,s.useRef)(null),T=(0,s.useCallback)(e=>{v(l?(e+g)%g:Math.max(0,Math.min(e,g-1)))},[g,l]),E=(0,s.useCallback)(()=>T(_-1),[_,T]),D=(0,s.useCallback)(()=>T(_+1),[_,T]);(0,s.useEffect)(()=>{if(!n||g<=1||x)return;let e=setInterval(D,i);return()=>clearInterval(e)},[n,i,D,g,x]);let O=e=>{u&&(S(!0),C.current=e,b(0))},k=e=>{x&&b(e-C.current)},A=()=>{x&&(S(!1),y<-50?D():y>50&&E(),b(0))},j=e=>{u&&(e.currentTarget.setPointerCapture(e.pointerId),O(e.clientX))},M=e=>{k(e.clientX)},N=()=>{A()};if(g===0)return null;let P=d===`fade`,F=P?void 0:{transform:`translateX(calc(-${_*100}% + ${x?y:0}px))`};return(0,c.jsxs)(`div`,{className:t.t(`carousel`,P&&`fade`,f),...m,children:[(0,c.jsx)(`div`,{className:`carousel-viewport`,onPointerDown:j,onPointerMove:M,onPointerUp:N,onPointerCancel:N,style:{touchAction:u?`pan-y`:void 0,cursor:u?x?`grabbing`:`grab`:void 0},children:(0,c.jsx)(`div`,{ref:w,className:t.t(`carousel-track`,x&&`dragging`),style:F,children:h.map((e,n)=>(0,c.jsx)(`div`,{className:t.t(`carousel-slide`,P&&n===_&&`active`,P&&n!==_&&`hidden`),children:e},n))})}),o&&g>1&&(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(r.t,{variant:`ghost`,color:`primary`,iconOnly:!0,shape:`circle`,onClick:E,"aria-label":`Previous slide`,className:`carousel-arrow carousel-arrow-prev`,children:(0,c.jsx)(e.Pi,{})}),(0,c.jsx)(r.t,{variant:`ghost`,color:`primary`,iconOnly:!0,shape:`circle`,onClick:D,"aria-label":`Next slide`,className:`carousel-arrow carousel-arrow-next`,children:(0,c.jsx)(e.Ni,{})})]}),a&&g>1&&(0,c.jsx)(`div`,{className:`carousel-dots`,children:h.map((e,n)=>(0,c.jsx)(`button`,{className:t.t(`carousel-dot`,n===_&&`active`),onClick:()=>T(n),"aria-label":`Slide ${n+1}`,type:`button`},n))})]})}function f(e){return e===`ripple`||e===`zoom-ripple`}function p(e){return e===`zoom`||e===`zoom-ripple`}function m(e){return e===`dim`}function h({src:e,alt:n=``,media:r,mediaHeight:o,overlay:s,body:l,footer:u,interactive:d=!1,imageClickEffect:h=`ripple`,ratio:g=`16:9`,fit:_=`cover`,imgProps:v,children:y}){let b=l??y,x=f(h),S=o?{"--media-height":typeof o==`number`?`${o}px`:o}:void 0,C=!!(r||e);return(0,c.jsxs)(i.n,{interactive:d,clickEffect:h===`none`?void 0:`none`,className:t.t(`showcase card`,d&&`interactive`),style:S,children:[C?(0,c.jsxs)(`div`,{className:t.t(`showcase media`,p(h)&&`effect-zoom`,m(h)&&`effect-dim`),children:[r?(0,c.jsx)(`div`,{className:`showcase media-content`,children:r}):(0,c.jsx)(a.t,{...v,src:e,alt:n,ratio:g,fit:_,rounded:!0,shadow:!0,clickEffect:x?`ripple`:`none`}),s?(0,c.jsx)(`div`,{className:`showcase overlay`,children:s}):null]}):null,b?(0,c.jsx)(i.r,{className:`showcase body`,children:b}):null,u?(0,c.jsx)(i.i,{className:`showcase footer`,children:u}):null]})}function g(e,t,n){return Math.min(Math.max(e,t),n)}function _(e){return e instanceof Element?!!e.closest(`button, a, input, select, textarea, label, summary, [role="button"], [role="link"], [data-carousel-ignore-drag="true"]`):!1}function v(e,t,n){return e&&t?e.map((e,n)=>t(e,n)):e?e.map((e,t)=>y(e)?(0,c.jsx)(b,{item:e},t):null).filter(Boolean):s.Children.toArray(n)}function y(e){let t=e;return!!e&&typeof e==`object`&&`src`in e&&typeof t.src==`string`}function b({item:e}){return(0,c.jsx)(h,{src:e.src,alt:e.alt||``,overlay:e.overlay})}function x({items:n,renderItem:i,initialIndex:a,showButtons:o=!0,loop:l=!0,draggable:u=!0,wheel:d=!0,itemMinWidth:f=220,itemMaxWidth:p=520,itemWidthRatio:m=.56,className:h,children:y,style:b,...x}){let S=(0,s.useMemo)(()=>v(n,i,y),[y,n,i]),C=S.length,[w,T]=(0,s.useState)(0),[E,D]=(0,s.useState)(0),[O,k]=(0,s.useState)(!1),[A,j]=(0,s.useState)(0),M=(0,s.useRef)(null),N=(0,s.useRef)(0),P=(0,s.useRef)(!1),F=g(A*(A<640?Math.max(m,.78):A<960?Math.max(m,.66):m)||f,f,p),I=g(A*.022||16,10,24);(0,s.useEffect)(()=>{let e=M.current;if(!e)return;let t=()=>j(e.clientWidth);t();let n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},[]),(0,s.useEffect)(()=>{C&&T(g(a??Math.floor((C-1)/2),0,C-1))},[C,a]);let L=(0,s.useCallback)(e=>{if(!(C<1)){if(l){T((e+C)%C);return}T(g(e,0,C-1))}},[C,l]),R=(0,s.useCallback)(()=>L(w-1),[w,L]),z=(0,s.useCallback)(()=>L(w+1),[w,L]),B=e=>{!u||C<=1||_(e.target)||(e.currentTarget.setPointerCapture(e.pointerId),k(!0),N.current=e.clientX,D(0))},V=e=>{O&&D(e.clientX-N.current)},H=()=>{if(!O)return;let e=Math.max(56,F*.12);E<=-e?z():E>=e&&R(),k(!1),D(0)};if((0,s.useEffect)(()=>{let e=M.current;if(!e)return;let t=e=>{if(!d||C<=1||P.current)return;let t=Math.abs(e.deltaX)>Math.abs(e.deltaY)?e.deltaX:e.deltaY;Math.abs(t)<28||(e.preventDefault(),e.stopPropagation(),P.current=!0,window.setTimeout(()=>{P.current=!1},260),t>0?z():R())};return e.addEventListener(`wheel`,t,{passive:!1}),()=>e.removeEventListener(`wheel`,t)},[C,z,R,d]),!C)return null;let U=A/2-w*(F+I)-F/2+E;return(0,c.jsxs)(`div`,{className:t.t(`showcase`,h),style:{...b,"--item-width":`${F}px`},...x,children:[(0,c.jsx)(`div`,{ref:M,className:`showcase-stage`,onPointerDown:B,onPointerMove:V,onPointerUp:H,onPointerCancel:H,onPointerLeave:H,style:{cursor:u&&C>1?O?`grabbing`:`grab`:void 0},children:(0,c.jsx)(`div`,{className:t.t(`showcase-track`,O&&`dragging`),style:{transform:`translateX(${U}px)`,gap:`${I}px`},children:S.map((e,n)=>{let r=Math.abs(n-w);return(0,c.jsx)(`div`,{className:t.t(`showcase-item`,n===w&&`active`,r===1&&`near`,r>=2&&`far`),style:{zIndex:Math.max(1,C-r)},children:e},n)})})}),o&&C>1&&(0,c.jsxs)(`div`,{className:`showcase-actions`,children:[(0,c.jsx)(r.t,{type:`button`,variant:`secondary`,className:`showcase-btn`,startIcon:(0,c.jsx)(e.Pi,{}),onClick:R,children:`Previous`}),(0,c.jsx)(r.t,{type:`button`,className:`showcase-btn`,endIcon:(0,c.jsx)(e.Ni,{}),onClick:z,children:`Next`})]})]})}function S(e,t,n){return e&&t?e.map((e,n)=>t(e,n)):s.Children.toArray(n)}function C({items:e,renderItem:n,columns:r=3,className:i,children:a,style:o,...s}){let l=S(e,n,a);return l.length?(0,c.jsx)(`div`,{className:t.t(`masonry`,i),style:{...o,columnCount:r},...s,children:l.map((e,t)=>(0,c.jsx)(`div`,{className:`masonry item`,children:e},t))}):null}function w({src:e,alt:r=``,height:a,overlay:o,body:s,footer:l,interactive:u=!1,imageClickEffect:d=`none`,imgProps:h,children:g}){let _=a?{...h?.style,height:a}:h?.style,v=s??g,{effectClassName:y,effectLayer:b,handlePointerDown:x}=n.t({effect:f(d)?`ripple`:`none`});return(0,c.jsxs)(i.n,{interactive:u,clickEffect:d===`none`?void 0:`none`,className:t.t(`masonry card`,u&&`interactive`),children:[(0,c.jsxs)(`div`,{className:t.t(`masonry media`,y,p(d)&&`effect-zoom`,m(d)&&`effect-dim`),onPointerDown:e=>{e.target.closest(`.masonry.overlay`)||x(e)},children:[(0,c.jsx)(`img`,{...h,src:e,alt:r,className:`masonry img`,style:_}),o?(0,c.jsx)(`div`,{className:`masonry overlay`,children:o}):null,b]}),v?(0,c.jsx)(i.r,{className:`masonry body`,children:v}):null,l?(0,c.jsx)(i.i,{className:`masonry footer`,children:l}):null]})}function T({items:e,max:n=5,size:r=`sm`,color:i=`primary`,overlap:a=10,className:s,style:l,...u}){if(!e||e.length===0)return null;let d=e.slice(0,n),f=e.length-n,p=typeof r==`number`?r:{xs:20,sm:28,md:40,lg:56,xl:72}[r]??28;return(0,c.jsxs)(`div`,{className:t.t(`avatar-stack`,s),style:{"--avatar-stack-overlap":`-${a}px`,...l},...u,children:[d.map((e,t)=>(0,c.jsx)(o.t,{src:e.avatar,name:e.name,size:r,color:i,className:`avatar-stack-item`,style:{zIndex:t+1}},t)),f>0&&(0,c.jsxs)(`span`,{className:`avatar-stack-overflow`,style:{width:p,height:p,fontSize:p*.38,zIndex:d.length+1},children:[`+`,f]})]})}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return w}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return C}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return T}});
2
+ //# sourceMappingURL=media-C4WtzWxU.cjs.map