@banzamel/mineralui 1.2.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (271) hide show
  1. package/README.md +1 -1
  2. package/dist/MAvatar-B0uPeciT.js +57 -0
  3. package/dist/MAvatar-B0uPeciT.js.map +1 -0
  4. package/dist/MAvatar-DlFdIi6R.cjs +2 -0
  5. package/dist/MAvatar-DlFdIi6R.cjs.map +1 -0
  6. package/dist/MBadge-5PivwWxe.js +19 -0
  7. package/dist/MBadge-5PivwWxe.js.map +1 -0
  8. package/dist/MBadge-DNqOptef.cjs +2 -0
  9. package/dist/MBadge-DNqOptef.cjs.map +1 -0
  10. package/dist/MButton-Bfe4iq51.js +113 -0
  11. package/dist/{MButton-BmTDe5Oa.js.map → MButton-Bfe4iq51.js.map} +1 -1
  12. package/dist/MButton-CtEFKjYZ.cjs +2 -0
  13. package/dist/{MButton-B8rXmFX9.cjs.map → MButton-CtEFKjYZ.cjs.map} +1 -1
  14. package/dist/{MDataTable-BI7wFZYN.cjs → MDataTable-CVwnVouZ.cjs} +2 -2
  15. package/dist/{MDataTable-BI7wFZYN.cjs.map → MDataTable-CVwnVouZ.cjs.map} +1 -1
  16. package/dist/{MDataTable-Cqwkiq7A.js → MDataTable-D0ONRmcC.js} +3 -3
  17. package/dist/{MDataTable-Cqwkiq7A.js.map → MDataTable-D0ONRmcC.js.map} +1 -1
  18. package/dist/{MDrawer-DXHtAckQ.js → MDrawer-C7rLXC_O.js} +2 -2
  19. package/dist/{MDrawer-DXHtAckQ.js.map → MDrawer-C7rLXC_O.js.map} +1 -1
  20. package/dist/{MDrawer-CSvjLrhB.cjs → MDrawer-DF42-zF2.cjs} +2 -2
  21. package/dist/{MDrawer-CSvjLrhB.cjs.map → MDrawer-DF42-zF2.cjs.map} +1 -1
  22. package/dist/MHeading-DBS5Kytw.js +21 -0
  23. package/dist/MHeading-DBS5Kytw.js.map +1 -0
  24. package/dist/MHeading-XCMJNMYB.cjs +2 -0
  25. package/dist/MHeading-XCMJNMYB.cjs.map +1 -0
  26. package/dist/MImage-2Xztd_N6.cjs +2 -0
  27. package/dist/MImage-2Xztd_N6.cjs.map +1 -0
  28. package/dist/MImage-UmiZwzDJ.js +53 -0
  29. package/dist/MImage-UmiZwzDJ.js.map +1 -0
  30. package/dist/MInline-BYsbmfkz.js +41 -0
  31. package/dist/MInline-BYsbmfkz.js.map +1 -0
  32. package/dist/MInline-oCvhfJwM.cjs +2 -0
  33. package/dist/MInline-oCvhfJwM.cjs.map +1 -0
  34. package/dist/{MInput-W7DJQ_ng.cjs → MInput-CpEJQ9SV.cjs} +2 -2
  35. package/dist/{MInput-W7DJQ_ng.cjs.map → MInput-CpEJQ9SV.cjs.map} +1 -1
  36. package/dist/{MInput-BSaKw0Uc.js → MInput-iKIeefss.js} +2 -2
  37. package/dist/{MInput-BSaKw0Uc.js.map → MInput-iKIeefss.js.map} +1 -1
  38. package/dist/{MInputCVC-Dqbl1zG9.js → MInputCVC-BpGTqkQx.js} +2 -2
  39. package/dist/{MInputCVC-Dqbl1zG9.js.map → MInputCVC-BpGTqkQx.js.map} +1 -1
  40. package/dist/{MInputCVC-DH_bjV5R.cjs → MInputCVC-BuGwm7fv.cjs} +2 -2
  41. package/dist/{MInputCVC-DH_bjV5R.cjs.map → MInputCVC-BuGwm7fv.cjs.map} +1 -1
  42. package/dist/{MInputSearch-C7betxTa.cjs → MInputSearch-B-Lqr-QG.cjs} +2 -2
  43. package/dist/{MInputSearch-C7betxTa.cjs.map → MInputSearch-B-Lqr-QG.cjs.map} +1 -1
  44. package/dist/{MInputSearch-CH5ZcjLq.js → MInputSearch-y3_ihYRj.js} +2 -2
  45. package/dist/{MInputSearch-CH5ZcjLq.js.map → MInputSearch-y3_ihYRj.js.map} +1 -1
  46. package/dist/MLink-7hndQLKM.cjs +2 -0
  47. package/dist/{MLink-DHryXq_D.cjs.map → MLink-7hndQLKM.cjs.map} +1 -1
  48. package/dist/MLink-tcICJfPn.js +31 -0
  49. package/dist/{MLink-ODytrwne.js.map → MLink-tcICJfPn.js.map} +1 -1
  50. package/dist/{MModal-pMcPs3pw.cjs → MModal-DlnT3BBp.cjs} +2 -2
  51. package/dist/{MModal-pMcPs3pw.cjs.map → MModal-DlnT3BBp.cjs.map} +1 -1
  52. package/dist/{MModal-DShADuLw.js → MModal-___Rw8YK.js} +2 -2
  53. package/dist/{MModal-DShADuLw.js.map → MModal-___Rw8YK.js.map} +1 -1
  54. package/dist/{MPagination-BWHAVgWN.cjs → MPagination-CTtr_L-Q.cjs} +2 -2
  55. package/dist/{MPagination-BWHAVgWN.cjs.map → MPagination-CTtr_L-Q.cjs.map} +1 -1
  56. package/dist/{MPagination-B7aho7rQ.js → MPagination-CzJGko3i.js} +2 -2
  57. package/dist/{MPagination-B7aho7rQ.js.map → MPagination-CzJGko3i.js.map} +1 -1
  58. package/dist/{MQrCode-6Cz9B7Qy.js → MQrCode-B7jbpcUj.js} +2 -2
  59. package/dist/{MQrCode-6Cz9B7Qy.js.map → MQrCode-B7jbpcUj.js.map} +1 -1
  60. package/dist/{MQrCode-Bp2CWpmX.cjs → MQrCode-Cha7657D.cjs} +2 -2
  61. package/dist/{MQrCode-Bp2CWpmX.cjs.map → MQrCode-Cha7657D.cjs.map} +1 -1
  62. package/dist/{MSkeleton-BfRBJ6ku.cjs → MSkeleton-BAkzwxOS.cjs} +2 -2
  63. package/dist/{MSkeleton-BfRBJ6ku.cjs.map → MSkeleton-BAkzwxOS.cjs.map} +1 -1
  64. package/dist/{MSkeleton-CauCfkzj.js → MSkeleton-Cwa-JRxo.js} +2 -2
  65. package/dist/{MSkeleton-CauCfkzj.js.map → MSkeleton-Cwa-JRxo.js.map} +1 -1
  66. package/dist/MStack-Bp1x4woD.cjs +2 -0
  67. package/dist/MStack-Bp1x4woD.cjs.map +1 -0
  68. package/dist/MStack-DVOFZo1L.js +41 -0
  69. package/dist/MStack-DVOFZo1L.js.map +1 -0
  70. package/dist/MSubText-CHvUFOlt.js +17 -0
  71. package/dist/MSubText-CHvUFOlt.js.map +1 -0
  72. package/dist/MSubText-Dg3PKnwI.cjs +2 -0
  73. package/dist/MSubText-Dg3PKnwI.cjs.map +1 -0
  74. package/dist/MSurface-ClPdv7a4.cjs +2 -0
  75. package/dist/MSurface-ClPdv7a4.cjs.map +1 -0
  76. package/dist/MSurface-FEfWBJFx.js +41 -0
  77. package/dist/MSurface-FEfWBJFx.js.map +1 -0
  78. package/dist/MTag-BxoSuAOj.cjs +2 -0
  79. package/dist/MTag-BxoSuAOj.cjs.map +1 -0
  80. package/dist/MTag-CjaE6vPj.js +39 -0
  81. package/dist/MTag-CjaE6vPj.js.map +1 -0
  82. package/dist/MText-CWHwmjs8.cjs +2 -0
  83. package/dist/MText-CWHwmjs8.cjs.map +1 -0
  84. package/dist/MText-hHMgVJ4-.js +45 -0
  85. package/dist/MText-hHMgVJ4-.js.map +1 -0
  86. package/dist/{cards-BE77zKTI.js → cards-1--Cy-KV.js} +10 -10
  87. package/dist/{cards-BE77zKTI.js.map → cards-1--Cy-KV.js.map} +1 -1
  88. package/dist/{cards-BINs-dmS.cjs → cards-CTegCxIA.cjs} +2 -2
  89. package/dist/{cards-BINs-dmS.cjs.map → cards-CTegCxIA.cjs.map} +1 -1
  90. package/dist/cards.cjs +1 -1
  91. package/dist/cards.js +2 -2
  92. package/dist/components/controls/MButton/MButton.types.d.ts +2 -2
  93. package/dist/components/feedback/MAlert/MAlert.d.ts +1 -1
  94. package/dist/components/feedback/MAlert/MAlert.types.d.ts +2 -2
  95. package/dist/components/feedback/MBadge/MBadge.d.ts +1 -1
  96. package/dist/components/feedback/MBadge/MBadge.types.d.ts +2 -2
  97. package/dist/components/feedback/MBanner/MBanner.d.ts +1 -1
  98. package/dist/components/feedback/MBanner/MBanner.types.d.ts +2 -2
  99. package/dist/components/feedback/MTag/MTag.d.ts +1 -1
  100. package/dist/components/feedback/MTag/MTag.types.d.ts +2 -2
  101. package/dist/components/layout/MContainer/MContainer.d.ts +1 -1
  102. package/dist/components/layout/MContainer/MContainer.types.d.ts +2 -1
  103. package/dist/components/layout/MDivider/MDivider.d.ts +1 -1
  104. package/dist/components/layout/MDivider/MDivider.types.d.ts +2 -1
  105. package/dist/components/layout/MFooter/MFooter.d.ts +1 -1
  106. package/dist/components/layout/MFooter/MFooter.types.d.ts +2 -1
  107. package/dist/components/layout/MGrid/MGrid.d.ts +2 -2
  108. package/dist/components/layout/MGrid/MGrid.types.d.ts +4 -2
  109. package/dist/components/layout/MHeader/MHeader.d.ts +1 -1
  110. package/dist/components/layout/MHeader/MHeader.types.d.ts +2 -1
  111. package/dist/components/layout/MInline/MInline.d.ts +1 -1
  112. package/dist/components/layout/MInline/MInline.types.d.ts +2 -1
  113. package/dist/components/layout/MNavbar/MNavbar.d.ts +1 -1
  114. package/dist/components/layout/MNavbar/MNavbar.types.d.ts +3 -1
  115. package/dist/components/layout/MNavs/index.d.ts +1 -1
  116. package/dist/components/layout/MSection/MSection.d.ts +1 -1
  117. package/dist/components/layout/MSection/MSection.types.d.ts +2 -1
  118. package/dist/components/layout/MSidebar/MSidebar.d.ts +1 -1
  119. package/dist/components/layout/MSidebar/MSidebar.types.d.ts +1 -0
  120. package/dist/components/layout/MStack/MStack.d.ts +1 -1
  121. package/dist/components/layout/MStack/MStack.types.d.ts +2 -1
  122. package/dist/components/layout/MSurface/MSurface.d.ts +1 -1
  123. package/dist/components/layout/MSurface/MSurface.types.d.ts +2 -1
  124. package/dist/components/layout/MTopbar/MTopbar.d.ts +1 -1
  125. package/dist/components/layout/MTopbar/MTopbar.types.d.ts +3 -2
  126. package/dist/components/media/MAvatar/MAvatar.d.ts +1 -1
  127. package/dist/components/media/MAvatar/MAvatar.types.d.ts +2 -2
  128. package/dist/components/media/MAvatarStack/MAvatarStack.d.ts +1 -1
  129. package/dist/components/media/MAvatarStack/MAvatarStack.types.d.ts +2 -2
  130. package/dist/components/media/MImage/MImage.d.ts +1 -1
  131. package/dist/components/media/MImage/MImage.types.d.ts +2 -1
  132. package/dist/components/typography/MHeading/MHeading.d.ts +563 -2
  133. package/dist/components/typography/MHeading/MHeading.types.d.ts +2 -2
  134. package/dist/components/typography/MLink/MLink.types.d.ts +2 -1
  135. package/dist/components/typography/MSubText/MSubText.d.ts +1 -1
  136. package/dist/components/typography/MSubText/MSubText.types.d.ts +2 -2
  137. package/dist/components/typography/MText/MText.d.ts +1 -1
  138. package/dist/components/typography/MText/MText.types.d.ts +2 -2
  139. package/dist/{controls-BMwQ3C1R.js → controls-C0qr_vMu.js} +145 -143
  140. package/dist/{controls-BMwQ3C1R.js.map → controls-C0qr_vMu.js.map} +1 -1
  141. package/dist/controls-CAab2nyg.cjs +2 -0
  142. package/dist/{controls-DwL1-nVC.cjs.map → controls-CAab2nyg.cjs.map} +1 -1
  143. package/dist/controls.cjs +1 -1
  144. package/dist/controls.js +2 -2
  145. package/dist/data-Uy_XSs32.cjs +2 -0
  146. package/dist/data-Uy_XSs32.cjs.map +1 -0
  147. package/dist/{data-s8Hkht1B.js → data-z3Uc9FSI.js} +751 -750
  148. package/dist/data-z3Uc9FSI.js.map +1 -0
  149. package/dist/data.cjs +1 -1
  150. package/dist/data.js +2 -2
  151. package/dist/{display-DuBRiEKr.js → display-GygMuO4c.js} +3 -3
  152. package/dist/{display-DuBRiEKr.js.map → display-GygMuO4c.js.map} +1 -1
  153. package/dist/{display-B0lpgApV.cjs → display-WS1tupQD.cjs} +2 -2
  154. package/dist/{display-B0lpgApV.cjs.map → display-WS1tupQD.cjs.map} +1 -1
  155. package/dist/display.cjs +1 -1
  156. package/dist/display.js +2 -2
  157. package/dist/{dropdowns-CK-oxd62.cjs → dropdowns-CzqyYQwR.cjs} +2 -2
  158. package/dist/{dropdowns-CK-oxd62.cjs.map → dropdowns-CzqyYQwR.cjs.map} +1 -1
  159. package/dist/{dropdowns-BcVrUMPE.js → dropdowns-FQlxsOYd.js} +4 -4
  160. package/dist/{dropdowns-BcVrUMPE.js.map → dropdowns-FQlxsOYd.js.map} +1 -1
  161. package/dist/dropdowns.cjs +1 -1
  162. package/dist/dropdowns.js +1 -1
  163. package/dist/feedback-C9z4MZ-V.cjs +2 -0
  164. package/dist/feedback-C9z4MZ-V.cjs.map +1 -0
  165. package/dist/{feedback-D3LLKNlY.js → feedback-xtBDPbzP.js} +304 -301
  166. package/dist/feedback-xtBDPbzP.js.map +1 -0
  167. package/dist/feedback.cjs +1 -1
  168. package/dist/feedback.js +5 -5
  169. package/dist/index.cjs +1 -1
  170. package/dist/index.js +59 -59
  171. package/dist/{inputs-bCxSLz-U.js → inputs-gB1ET0dG.js} +3 -3
  172. package/dist/{inputs-bCxSLz-U.js.map → inputs-gB1ET0dG.js.map} +1 -1
  173. package/dist/{inputs-Dcj6C_Fn.cjs → inputs-z84nU7A8.cjs} +2 -2
  174. package/dist/{inputs-Dcj6C_Fn.cjs.map → inputs-z84nU7A8.cjs.map} +1 -1
  175. package/dist/inputs.cjs +1 -1
  176. package/dist/inputs.js +4 -4
  177. package/dist/layout-BIPyHdYN.cjs +2 -0
  178. package/dist/layout-BIPyHdYN.cjs.map +1 -0
  179. package/dist/layout-DHVIqY-O.js +904 -0
  180. package/dist/layout-DHVIqY-O.js.map +1 -0
  181. package/dist/layout.cjs +1 -1
  182. package/dist/layout.js +5 -5
  183. package/dist/media-Ch3Fyf4K.cjs +2 -0
  184. package/dist/{media-D5YGOTm7.cjs.map → media-Ch3Fyf4K.cjs.map} +1 -1
  185. package/dist/{media-8aMOtckF.js → media-DV58aS3j.js} +145 -143
  186. package/dist/{media-8aMOtckF.js.map → media-DV58aS3j.js.map} +1 -1
  187. package/dist/media.cjs +1 -1
  188. package/dist/media.js +3 -3
  189. package/dist/{overlays-DCj-oV2H.cjs → overlays-7HBAQneO.cjs} +2 -2
  190. package/dist/{overlays-DCj-oV2H.cjs.map → overlays-7HBAQneO.cjs.map} +1 -1
  191. package/dist/{overlays-gjg00CAf.js → overlays-_zOs7GGk.js} +3 -3
  192. package/dist/{overlays-gjg00CAf.js.map → overlays-_zOs7GGk.js.map} +1 -1
  193. package/dist/overlays.cjs +1 -1
  194. package/dist/overlays.js +3 -3
  195. package/dist/style-runtime.cjs +1 -1
  196. package/dist/style-runtime.js +1 -1
  197. package/dist/styles.css +1 -1
  198. package/dist/theme/MTheme.types.d.ts +6 -0
  199. package/dist/theme/index.d.ts +2 -1
  200. package/dist/theme/responsive.d.ts +23 -0
  201. package/dist/{theme-DLorpkJc.cjs → theme-B9iSuxqh.cjs} +2 -2
  202. package/dist/theme-B9iSuxqh.cjs.map +1 -0
  203. package/dist/{theme-BV4qkzZU.js → theme-XRUdoLqw.js} +25 -2
  204. package/dist/theme-XRUdoLqw.js.map +1 -0
  205. package/dist/theme.cjs +1 -1
  206. package/dist/theme.js +2 -2
  207. package/dist/{typography-qbFGv1gA.cjs → typography-D0dyVQlP.cjs} +2 -2
  208. package/dist/{typography-qbFGv1gA.cjs.map → typography-D0dyVQlP.cjs.map} +1 -1
  209. package/dist/{typography-DKdr1Tds.js → typography-Db_SHI0H.js} +2 -2
  210. package/dist/{typography-DKdr1Tds.js.map → typography-Db_SHI0H.js.map} +1 -1
  211. package/dist/typography.cjs +1 -1
  212. package/dist/typography.js +5 -5
  213. package/package.json +1 -1
  214. package/dist/MAvatar-BoO51a6m.js +0 -55
  215. package/dist/MAvatar-BoO51a6m.js.map +0 -1
  216. package/dist/MAvatar-DJKtca9j.cjs +0 -2
  217. package/dist/MAvatar-DJKtca9j.cjs.map +0 -1
  218. package/dist/MBadge-CexVV675.cjs +0 -2
  219. package/dist/MBadge-CexVV675.cjs.map +0 -1
  220. package/dist/MBadge-Y1JnZiIC.js +0 -17
  221. package/dist/MBadge-Y1JnZiIC.js.map +0 -1
  222. package/dist/MButton-B8rXmFX9.cjs +0 -2
  223. package/dist/MButton-BmTDe5Oa.js +0 -111
  224. package/dist/MHeading-C3IgV22T.js +0 -19
  225. package/dist/MHeading-C3IgV22T.js.map +0 -1
  226. package/dist/MHeading-DqvWKia1.cjs +0 -2
  227. package/dist/MHeading-DqvWKia1.cjs.map +0 -1
  228. package/dist/MImage-BDcrV6IC.js +0 -49
  229. package/dist/MImage-BDcrV6IC.js.map +0 -1
  230. package/dist/MImage-BsQJ_eYf.cjs +0 -2
  231. package/dist/MImage-BsQJ_eYf.cjs.map +0 -1
  232. package/dist/MInline-BAhu2zT-.cjs +0 -2
  233. package/dist/MInline-BAhu2zT-.cjs.map +0 -1
  234. package/dist/MInline-Dfy3Lrjs.js +0 -39
  235. package/dist/MInline-Dfy3Lrjs.js.map +0 -1
  236. package/dist/MLink-DHryXq_D.cjs +0 -2
  237. package/dist/MLink-ODytrwne.js +0 -29
  238. package/dist/MStack-Cifiqeb2.js +0 -39
  239. package/dist/MStack-Cifiqeb2.js.map +0 -1
  240. package/dist/MStack-lrvy7l3w.cjs +0 -2
  241. package/dist/MStack-lrvy7l3w.cjs.map +0 -1
  242. package/dist/MSubText-78oYdJQy.cjs +0 -2
  243. package/dist/MSubText-78oYdJQy.cjs.map +0 -1
  244. package/dist/MSubText-C2oxXwKT.js +0 -15
  245. package/dist/MSubText-C2oxXwKT.js.map +0 -1
  246. package/dist/MSurface-B1LXFczo.js +0 -39
  247. package/dist/MSurface-B1LXFczo.js.map +0 -1
  248. package/dist/MSurface-BgZ86iYn.cjs +0 -2
  249. package/dist/MSurface-BgZ86iYn.cjs.map +0 -1
  250. package/dist/MTag-C4_rBj4b.cjs +0 -2
  251. package/dist/MTag-C4_rBj4b.cjs.map +0 -1
  252. package/dist/MTag-DOcKm3c2.js +0 -37
  253. package/dist/MTag-DOcKm3c2.js.map +0 -1
  254. package/dist/MText-CxSZ2md0.cjs +0 -2
  255. package/dist/MText-CxSZ2md0.cjs.map +0 -1
  256. package/dist/MText-DX9O7gh7.js +0 -43
  257. package/dist/MText-DX9O7gh7.js.map +0 -1
  258. package/dist/controls-DwL1-nVC.cjs +0 -2
  259. package/dist/data-BESfox0z.cjs +0 -2
  260. package/dist/data-BESfox0z.cjs.map +0 -1
  261. package/dist/data-s8Hkht1B.js.map +0 -1
  262. package/dist/feedback-D3LLKNlY.js.map +0 -1
  263. package/dist/feedback-DYjg0Dbp.cjs +0 -2
  264. package/dist/feedback-DYjg0Dbp.cjs.map +0 -1
  265. package/dist/layout-Cb94o3oU.js +0 -891
  266. package/dist/layout-Cb94o3oU.js.map +0 -1
  267. package/dist/layout-DgfsQ-Tn.cjs +0 -2
  268. package/dist/layout-DgfsQ-Tn.cjs.map +0 -1
  269. package/dist/media-D5YGOTm7.cjs +0 -2
  270. package/dist/theme-BV4qkzZU.js.map +0 -1
  271. package/dist/theme-DLorpkJc.cjs.map +0 -1
@@ -47,3 +47,9 @@ export interface MTheme {
47
47
  }
48
48
  export type MColor = 'primary' | 'neutral' | 'success' | 'error' | 'warning' | 'info' | 'light' | 'dark' | 'news';
49
49
  export type MSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
50
+ export type MBreakpoint = 'sm' | 'md' | 'lg' | 'xl' | '2xl';
51
+ export type MHidden = MBreakpoint;
52
+ export type MShellBreakpoint = 'mobile' | 'compact';
53
+ export interface MHiddenProps {
54
+ hidden?: MHidden | boolean;
55
+ }
@@ -1,3 +1,4 @@
1
1
  export { MThemeProvider, useMTheme } from './MThemeProvider';
2
2
  export type { MThemeScope, MThemeProviderProps, MThemeContextValue } from './MThemeProvider';
3
- export type { MTheme, MMode, MModePreference, MColor, MSize } from './MTheme.types';
3
+ export type { MTheme, MMode, MModePreference, MColor, MSize, MBreakpoint, MHidden, MHiddenProps, MShellBreakpoint, } from './MTheme.types';
4
+ export { MBreakpoints, MShellBreakpoints, getHiddenProps, useMaxWidth } from './responsive';
@@ -0,0 +1,23 @@
1
+ import { MHiddenProps } from './MTheme.types';
2
+ export declare const MBreakpoints: {
3
+ readonly sm: 640;
4
+ readonly md: 768;
5
+ readonly lg: 1024;
6
+ readonly xl: 1280;
7
+ readonly '2xl': 1536;
8
+ };
9
+ export declare const MShellBreakpoints: {
10
+ readonly mobile: 768;
11
+ readonly compact: 960;
12
+ };
13
+ export declare function useMaxWidth(breakpoint: number): boolean;
14
+ export declare function getHiddenProps(hidden?: MHiddenProps['hidden']): {
15
+ hidden?: undefined;
16
+ 'data-m-hidden'?: undefined;
17
+ } | {
18
+ hidden: boolean;
19
+ 'data-m-hidden'?: undefined;
20
+ } | {
21
+ 'data-m-hidden': import('./MTheme.types').MBreakpoint;
22
+ hidden?: undefined;
23
+ };
@@ -1,2 +1,2 @@
1
- let e=require(`react`),t=require(`react/jsx-runtime`);var n=`mineralui-theme`;function r(e){return e===`system`?typeof window>`u`||window.matchMedia(`(prefers-color-scheme: dark)`).matches?`dark`:`light`:e}function i(){try{let e=localStorage.getItem(n);if(e===`dark`||e===`light`||e===`system`)return e}catch{}return null}var a=(0,e.createContext)({theme:{},mode:`dark`,resolvedMode:`dark`,setMode:()=>{},toggleMode:()=>{}}),o={primaryRgb:`--mineral-primary-rgb`,primary:`--mineral-primary`,primaryDark:`--mineral-primary-dark`,primaryLight:`--mineral-primary-light`,neutralRgb:`--mineral-neutral-rgb`,neutral:`--mineral-neutral`,dark:`--mineral-dark`,darkLight:`--mineral-dark-light`,surface:`--mineral-surface`,surfaceContrast:`--mineral-surface-contrast`,pageBg:`--mineral-page-bg`,pageText:`--mineral-page-text`,text:`--mineral-text`,textSecondary:`--mineral-text-secondary`,textHeading:`--mineral-text-heading`,border:`--mineral-border`,borderHover:`--mineral-border-hover`,borderFocus:`--mineral-border-focus`,successRgb:`--mineral-success-rgb`,success:`--mineral-success`,errorRgb:`--mineral-error-rgb`,error:`--mineral-error`,warningRgb:`--mineral-warning-rgb`,warning:`--mineral-warning`,infoRgb:`--mineral-info-rgb`,info:`--mineral-info`,fontFamily:`--mineral-font-family-sans`,fontFamilySans:`--mineral-font-family-sans`,fontFamilyMono:`--mineral-font-family-mono`,fontFamilyHeading:`--mineral-font-family-heading`,fontColorDefault:`--mineral-fcolor-default`,fontColorMuted:`--mineral-fcolor-muted`,fontColorHeading:`--mineral-fcolor-heading`,fontColorInverted:`--mineral-fcolor-inverted`,fontColorPrimary:`--mineral-fcolor-primary`,fontColorNeutral:`--mineral-fcolor-neutral`,fontColorSuccess:`--mineral-fcolor-success`,fontColorError:`--mineral-fcolor-error`,fontColorWarning:`--mineral-fcolor-warning`,fontColorInfo:`--mineral-fcolor-info`,radiusSm:`--mineral-radius-sm`,radiusMd:`--mineral-radius-md`,radiusLg:`--mineral-radius-lg`};function s({theme:s,mode:c=`dark`,persist:l=!0,scope:u=`body`,children:d}){let f=(0,e.useRef)(null),p=(0,e.useMemo)(()=>s??{},[s]),[m,h]=(0,e.useState)(()=>{if(l){let e=i();if(e)return e}return c}),g=r(m),_=(0,e.useCallback)(e=>{if(h(e),l)try{localStorage.setItem(n,e)}catch{}},[l]),v=(0,e.useCallback)(()=>{_(g===`dark`?`light`:`dark`)},[g,_]);(0,e.useEffect)(()=>{if(m!==`system`)return;let e=window.matchMedia(`(prefers-color-scheme: dark)`),t=()=>h(`system`);return e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)},[m]),(0,e.useEffect)(()=>{let e=u===`body`?document.body:f.current;if(e){for(let[t,n]of Object.entries(p)){let r=o[t];r&&n&&(e.style.setProperty(r,n),r===`--mineral-font-family-sans`&&e.style.setProperty(`--mineral-font-family`,n))}return e.classList.toggle(`theme-light`,g===`light`),()=>{for(let t of Object.keys(p)){let n=o[t];n&&(e.style.removeProperty(n),n===`--mineral-font-family-sans`&&e.style.removeProperty(`--mineral-font-family`))}e.classList.remove(`theme-light`)}}},[g,p,u]);let y=(0,e.useMemo)(()=>({theme:p,mode:m,resolvedMode:g,setMode:_,toggleMode:v}),[p,m,g,_,v]);return(0,t.jsx)(a.Provider,{value:y,children:u===`wrapper`?(0,t.jsx)(`div`,{ref:f,className:g===`light`?`theme-light`:void 0,children:d}):d})}function c(){return(0,e.useContext)(a)}Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return s}});
2
- //# sourceMappingURL=theme-DLorpkJc.cjs.map
1
+ let e=require(`react`),t=require(`react/jsx-runtime`);var n=`mineralui-theme`;function r(e){return e===`system`?typeof window>`u`||window.matchMedia(`(prefers-color-scheme: dark)`).matches?`dark`:`light`:e}function i(){try{let e=localStorage.getItem(n);if(e===`dark`||e===`light`||e===`system`)return e}catch{}return null}var a=(0,e.createContext)({theme:{},mode:`dark`,resolvedMode:`dark`,setMode:()=>{},toggleMode:()=>{}}),o={primaryRgb:`--mineral-primary-rgb`,primary:`--mineral-primary`,primaryDark:`--mineral-primary-dark`,primaryLight:`--mineral-primary-light`,neutralRgb:`--mineral-neutral-rgb`,neutral:`--mineral-neutral`,dark:`--mineral-dark`,darkLight:`--mineral-dark-light`,surface:`--mineral-surface`,surfaceContrast:`--mineral-surface-contrast`,pageBg:`--mineral-page-bg`,pageText:`--mineral-page-text`,text:`--mineral-text`,textSecondary:`--mineral-text-secondary`,textHeading:`--mineral-text-heading`,border:`--mineral-border`,borderHover:`--mineral-border-hover`,borderFocus:`--mineral-border-focus`,successRgb:`--mineral-success-rgb`,success:`--mineral-success`,errorRgb:`--mineral-error-rgb`,error:`--mineral-error`,warningRgb:`--mineral-warning-rgb`,warning:`--mineral-warning`,infoRgb:`--mineral-info-rgb`,info:`--mineral-info`,fontFamily:`--mineral-font-family-sans`,fontFamilySans:`--mineral-font-family-sans`,fontFamilyMono:`--mineral-font-family-mono`,fontFamilyHeading:`--mineral-font-family-heading`,fontColorDefault:`--mineral-fcolor-default`,fontColorMuted:`--mineral-fcolor-muted`,fontColorHeading:`--mineral-fcolor-heading`,fontColorInverted:`--mineral-fcolor-inverted`,fontColorPrimary:`--mineral-fcolor-primary`,fontColorNeutral:`--mineral-fcolor-neutral`,fontColorSuccess:`--mineral-fcolor-success`,fontColorError:`--mineral-fcolor-error`,fontColorWarning:`--mineral-fcolor-warning`,fontColorInfo:`--mineral-fcolor-info`,radiusSm:`--mineral-radius-sm`,radiusMd:`--mineral-radius-md`,radiusLg:`--mineral-radius-lg`};function s({theme:s,mode:c=`dark`,persist:l=!0,scope:u=`body`,children:d}){let f=(0,e.useRef)(null),p=(0,e.useMemo)(()=>s??{},[s]),[m,h]=(0,e.useState)(()=>{if(l){let e=i();if(e)return e}return c}),g=r(m),_=(0,e.useCallback)(e=>{if(h(e),l)try{localStorage.setItem(n,e)}catch{}},[l]),v=(0,e.useCallback)(()=>{_(g===`dark`?`light`:`dark`)},[g,_]);(0,e.useEffect)(()=>{if(m!==`system`)return;let e=window.matchMedia(`(prefers-color-scheme: dark)`),t=()=>h(`system`);return e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)},[m]),(0,e.useEffect)(()=>{let e=u===`body`?document.body:f.current;if(e){for(let[t,n]of Object.entries(p)){let r=o[t];r&&n&&(e.style.setProperty(r,n),r===`--mineral-font-family-sans`&&e.style.setProperty(`--mineral-font-family`,n))}return e.classList.toggle(`theme-light`,g===`light`),()=>{for(let t of Object.keys(p)){let n=o[t];n&&(e.style.removeProperty(n),n===`--mineral-font-family-sans`&&e.style.removeProperty(`--mineral-font-family`))}e.classList.remove(`theme-light`)}}},[g,p,u]);let y=(0,e.useMemo)(()=>({theme:p,mode:m,resolvedMode:g,setMode:_,toggleMode:v}),[p,m,g,_,v]);return(0,t.jsx)(a.Provider,{value:y,children:u===`wrapper`?(0,t.jsx)(`div`,{ref:f,className:g===`light`?`theme-light`:void 0,children:d}):d})}function c(){return(0,e.useContext)(a)}var l={sm:640,md:768,lg:1024,xl:1280,"2xl":1536},u={mobile:768,compact:960};function d(t){let[n,r]=(0,e.useState)(()=>typeof window<`u`?window.innerWidth<=t:!1);return(0,e.useEffect)(()=>{if(typeof window>`u`)return;let e=window.matchMedia(`(max-width: ${t}px)`),n=()=>r(e.matches);return n(),typeof e.addEventListener==`function`?(e.addEventListener(`change`,n),()=>e.removeEventListener(`change`,n)):(e.addListener(n),()=>e.removeListener(n))},[t]),n}function f(e){return e===void 0||e===!1?{}:e===!0?{hidden:!0}:{"data-m-hidden":e}}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return l}});
2
+ //# sourceMappingURL=theme-B9iSuxqh.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-B9iSuxqh.cjs","names":[],"sources":["../src/theme/MThemeProvider.tsx","../src/theme/responsive.ts"],"sourcesContent":["import {createContext, useCallback, useContext, useEffect, useMemo, useRef, useState, type ReactNode} from 'react'\nimport type {MTheme, MMode, MModePreference} from './MTheme.types'\n\nconst STORAGE_KEY = 'mineralui-theme'\n\n// Resolve the final mode once 'system' is allowed.\nfunction resolveMode(pref: MModePreference): MMode {\n if (pref !== 'system') return pref\n if (typeof window === 'undefined') return 'dark'\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'\n}\n\n// Read a persisted mode safely when storage is available.\nfunction readStored(): MModePreference | null {\n try {\n const v = localStorage.getItem(STORAGE_KEY)\n if (v === 'dark' || v === 'light' || v === 'system') return v\n } catch {\n /* SSR / blocked storage */\n }\n return null\n}\n\nexport interface MThemeContextValue {\n theme: MTheme\n mode: MModePreference\n resolvedMode: MMode\n setMode: (next: MModePreference) => void\n toggleMode: () => void\n}\n\nconst ThemeContext = createContext<MThemeContextValue>({\n theme: {},\n mode: 'dark',\n resolvedMode: 'dark',\n setMode: () => {},\n toggleMode: () => {},\n})\n\n// Map JS theme keys to CSS custom properties.\nconst varMap: Record<keyof MTheme, string> = {\n primaryRgb: '--mineral-primary-rgb',\n primary: '--mineral-primary',\n primaryDark: '--mineral-primary-dark',\n primaryLight: '--mineral-primary-light',\n neutralRgb: '--mineral-neutral-rgb',\n neutral: '--mineral-neutral',\n dark: '--mineral-dark',\n darkLight: '--mineral-dark-light',\n surface: '--mineral-surface',\n surfaceContrast: '--mineral-surface-contrast',\n pageBg: '--mineral-page-bg',\n pageText: '--mineral-page-text',\n text: '--mineral-text',\n textSecondary: '--mineral-text-secondary',\n textHeading: '--mineral-text-heading',\n border: '--mineral-border',\n borderHover: '--mineral-border-hover',\n borderFocus: '--mineral-border-focus',\n successRgb: '--mineral-success-rgb',\n success: '--mineral-success',\n errorRgb: '--mineral-error-rgb',\n error: '--mineral-error',\n warningRgb: '--mineral-warning-rgb',\n warning: '--mineral-warning',\n infoRgb: '--mineral-info-rgb',\n info: '--mineral-info',\n fontFamily: '--mineral-font-family-sans',\n fontFamilySans: '--mineral-font-family-sans',\n fontFamilyMono: '--mineral-font-family-mono',\n fontFamilyHeading: '--mineral-font-family-heading',\n fontColorDefault: '--mineral-fcolor-default',\n fontColorMuted: '--mineral-fcolor-muted',\n fontColorHeading: '--mineral-fcolor-heading',\n fontColorInverted: '--mineral-fcolor-inverted',\n fontColorPrimary: '--mineral-fcolor-primary',\n fontColorNeutral: '--mineral-fcolor-neutral',\n fontColorSuccess: '--mineral-fcolor-success',\n fontColorError: '--mineral-fcolor-error',\n fontColorWarning: '--mineral-fcolor-warning',\n fontColorInfo: '--mineral-fcolor-info',\n radiusSm: '--mineral-radius-sm',\n radiusMd: '--mineral-radius-md',\n radiusLg: '--mineral-radius-lg',\n}\n\nexport type MThemeScope = 'body' | 'wrapper'\n\nexport interface MThemeProviderProps {\n theme?: MTheme\n mode?: MModePreference\n persist?: boolean\n scope?: MThemeScope\n children: ReactNode\n}\n\n// Sync theme tokens and mode classes with either the body or a local wrapper.\nexport function MThemeProvider({\n theme,\n mode: modeProp = 'dark',\n persist = true,\n scope = 'body',\n children,\n}: MThemeProviderProps) {\n const ref = useRef<HTMLDivElement>(null)\n const safeTheme = useMemo(() => theme ?? {}, [theme])\n\n const [mode, setModeState] = useState<MModePreference>(() => {\n if (persist) {\n const stored = readStored()\n if (stored) return stored\n }\n return modeProp\n })\n\n const resolved = resolveMode(mode)\n\n const setMode = useCallback(\n (next: MModePreference) => {\n setModeState(next)\n if (persist) {\n try {\n localStorage.setItem(STORAGE_KEY, next)\n } catch {\n /* noop */\n }\n }\n },\n [persist]\n )\n\n const toggleMode = useCallback(() => {\n setMode(resolved === 'dark' ? 'light' : 'dark')\n }, [resolved, setMode])\n\n // Listen for system theme changes when mode is 'system'.\n useEffect(() => {\n if (mode !== 'system') return\n const mq = window.matchMedia('(prefers-color-scheme: dark)')\n const handler = () => setModeState('system')\n mq.addEventListener('change', handler)\n return () => mq.removeEventListener('change', handler)\n }, [mode])\n\n // Apply token overrides and light/dark class.\n useEffect(() => {\n const target = scope === 'body' ? document.body : ref.current\n if (!target) return\n\n for (const [key, value] of Object.entries(safeTheme)) {\n const cssVar = varMap[key as keyof MTheme]\n if (cssVar && value) {\n target.style.setProperty(cssVar, value)\n if (cssVar === '--mineral-font-family-sans') {\n target.style.setProperty('--mineral-font-family', value)\n }\n }\n }\n\n target.classList.toggle('theme-light', resolved === 'light')\n\n return () => {\n for (const key of Object.keys(safeTheme)) {\n const cssVar = varMap[key as keyof MTheme]\n if (cssVar) {\n target.style.removeProperty(cssVar)\n if (cssVar === '--mineral-font-family-sans') {\n target.style.removeProperty('--mineral-font-family')\n }\n }\n }\n target.classList.remove('theme-light')\n }\n }, [resolved, safeTheme, scope])\n\n const ctx = useMemo<MThemeContextValue>(\n () => ({\n theme: safeTheme,\n mode,\n resolvedMode: resolved,\n setMode,\n toggleMode,\n }),\n [safeTheme, mode, resolved, setMode, toggleMode]\n )\n\n return (\n <ThemeContext.Provider value={ctx}>\n {scope === 'wrapper' ? (\n <div ref={ref} className={resolved === 'light' ? 'theme-light' : undefined}>\n {children}\n </div>\n ) : (\n children\n )}\n </ThemeContext.Provider>\n )\n}\n\nexport function useMTheme(): MThemeContextValue {\n return useContext(ThemeContext)\n}\n","import {useEffect, useState} from 'react'\nimport type {MHiddenProps} from './MTheme.types'\n\nexport const MBreakpoints = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n '2xl': 1536,\n} as const\n\nexport const MShellBreakpoints = {\n mobile: 768,\n compact: 960,\n} as const\n\nexport function useMaxWidth(breakpoint: number): boolean {\n const [matches, setMatches] = useState(() =>\n typeof window !== 'undefined' ? window.innerWidth <= breakpoint : false\n )\n\n useEffect(() => {\n if (typeof window === 'undefined') {\n return\n }\n\n const media = window.matchMedia(`(max-width: ${breakpoint}px)`)\n const sync = () => setMatches(media.matches)\n\n sync()\n\n if (typeof media.addEventListener === 'function') {\n media.addEventListener('change', sync)\n return () => media.removeEventListener('change', sync)\n }\n\n media.addListener(sync)\n return () => media.removeListener(sync)\n }, [breakpoint])\n\n return matches\n}\n\nexport function getHiddenProps(hidden?: MHiddenProps['hidden']) {\n if (hidden === undefined || hidden === false) {\n return {}\n }\n\n if (hidden === true) {\n return {hidden: true}\n }\n\n return {'data-m-hidden': hidden}\n}\n"],"mappings":"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"}
@@ -127,6 +127,29 @@ function m() {
127
127
  return n(d);
128
128
  }
129
129
  //#endregion
130
- export { m as n, p as t };
130
+ //#region src/theme/responsive.ts
131
+ var h = {
132
+ sm: 640,
133
+ md: 768,
134
+ lg: 1024,
135
+ xl: 1280,
136
+ "2xl": 1536
137
+ }, g = {
138
+ mobile: 768,
139
+ compact: 960
140
+ };
141
+ function _(e) {
142
+ let [t, n] = o(() => typeof window < "u" ? window.innerWidth <= e : !1);
143
+ return r(() => {
144
+ if (typeof window > "u") return;
145
+ let t = window.matchMedia(`(max-width: ${e}px)`), r = () => n(t.matches);
146
+ return r(), typeof t.addEventListener == "function" ? (t.addEventListener("change", r), () => t.removeEventListener("change", r)) : (t.addListener(r), () => t.removeListener(r));
147
+ }, [e]), t;
148
+ }
149
+ function v(e) {
150
+ return e === void 0 || e === !1 ? {} : e === !0 ? { hidden: !0 } : { "data-m-hidden": e };
151
+ }
152
+ //#endregion
153
+ export { p as a, _ as i, g as n, m as o, v as r, h as t };
131
154
 
132
- //# sourceMappingURL=theme-BV4qkzZU.js.map
155
+ //# sourceMappingURL=theme-XRUdoLqw.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-XRUdoLqw.js","names":[],"sources":["../src/theme/MThemeProvider.tsx","../src/theme/responsive.ts"],"sourcesContent":["import {createContext, useCallback, useContext, useEffect, useMemo, useRef, useState, type ReactNode} from 'react'\nimport type {MTheme, MMode, MModePreference} from './MTheme.types'\n\nconst STORAGE_KEY = 'mineralui-theme'\n\n// Resolve the final mode once 'system' is allowed.\nfunction resolveMode(pref: MModePreference): MMode {\n if (pref !== 'system') return pref\n if (typeof window === 'undefined') return 'dark'\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'\n}\n\n// Read a persisted mode safely when storage is available.\nfunction readStored(): MModePreference | null {\n try {\n const v = localStorage.getItem(STORAGE_KEY)\n if (v === 'dark' || v === 'light' || v === 'system') return v\n } catch {\n /* SSR / blocked storage */\n }\n return null\n}\n\nexport interface MThemeContextValue {\n theme: MTheme\n mode: MModePreference\n resolvedMode: MMode\n setMode: (next: MModePreference) => void\n toggleMode: () => void\n}\n\nconst ThemeContext = createContext<MThemeContextValue>({\n theme: {},\n mode: 'dark',\n resolvedMode: 'dark',\n setMode: () => {},\n toggleMode: () => {},\n})\n\n// Map JS theme keys to CSS custom properties.\nconst varMap: Record<keyof MTheme, string> = {\n primaryRgb: '--mineral-primary-rgb',\n primary: '--mineral-primary',\n primaryDark: '--mineral-primary-dark',\n primaryLight: '--mineral-primary-light',\n neutralRgb: '--mineral-neutral-rgb',\n neutral: '--mineral-neutral',\n dark: '--mineral-dark',\n darkLight: '--mineral-dark-light',\n surface: '--mineral-surface',\n surfaceContrast: '--mineral-surface-contrast',\n pageBg: '--mineral-page-bg',\n pageText: '--mineral-page-text',\n text: '--mineral-text',\n textSecondary: '--mineral-text-secondary',\n textHeading: '--mineral-text-heading',\n border: '--mineral-border',\n borderHover: '--mineral-border-hover',\n borderFocus: '--mineral-border-focus',\n successRgb: '--mineral-success-rgb',\n success: '--mineral-success',\n errorRgb: '--mineral-error-rgb',\n error: '--mineral-error',\n warningRgb: '--mineral-warning-rgb',\n warning: '--mineral-warning',\n infoRgb: '--mineral-info-rgb',\n info: '--mineral-info',\n fontFamily: '--mineral-font-family-sans',\n fontFamilySans: '--mineral-font-family-sans',\n fontFamilyMono: '--mineral-font-family-mono',\n fontFamilyHeading: '--mineral-font-family-heading',\n fontColorDefault: '--mineral-fcolor-default',\n fontColorMuted: '--mineral-fcolor-muted',\n fontColorHeading: '--mineral-fcolor-heading',\n fontColorInverted: '--mineral-fcolor-inverted',\n fontColorPrimary: '--mineral-fcolor-primary',\n fontColorNeutral: '--mineral-fcolor-neutral',\n fontColorSuccess: '--mineral-fcolor-success',\n fontColorError: '--mineral-fcolor-error',\n fontColorWarning: '--mineral-fcolor-warning',\n fontColorInfo: '--mineral-fcolor-info',\n radiusSm: '--mineral-radius-sm',\n radiusMd: '--mineral-radius-md',\n radiusLg: '--mineral-radius-lg',\n}\n\nexport type MThemeScope = 'body' | 'wrapper'\n\nexport interface MThemeProviderProps {\n theme?: MTheme\n mode?: MModePreference\n persist?: boolean\n scope?: MThemeScope\n children: ReactNode\n}\n\n// Sync theme tokens and mode classes with either the body or a local wrapper.\nexport function MThemeProvider({\n theme,\n mode: modeProp = 'dark',\n persist = true,\n scope = 'body',\n children,\n}: MThemeProviderProps) {\n const ref = useRef<HTMLDivElement>(null)\n const safeTheme = useMemo(() => theme ?? {}, [theme])\n\n const [mode, setModeState] = useState<MModePreference>(() => {\n if (persist) {\n const stored = readStored()\n if (stored) return stored\n }\n return modeProp\n })\n\n const resolved = resolveMode(mode)\n\n const setMode = useCallback(\n (next: MModePreference) => {\n setModeState(next)\n if (persist) {\n try {\n localStorage.setItem(STORAGE_KEY, next)\n } catch {\n /* noop */\n }\n }\n },\n [persist]\n )\n\n const toggleMode = useCallback(() => {\n setMode(resolved === 'dark' ? 'light' : 'dark')\n }, [resolved, setMode])\n\n // Listen for system theme changes when mode is 'system'.\n useEffect(() => {\n if (mode !== 'system') return\n const mq = window.matchMedia('(prefers-color-scheme: dark)')\n const handler = () => setModeState('system')\n mq.addEventListener('change', handler)\n return () => mq.removeEventListener('change', handler)\n }, [mode])\n\n // Apply token overrides and light/dark class.\n useEffect(() => {\n const target = scope === 'body' ? document.body : ref.current\n if (!target) return\n\n for (const [key, value] of Object.entries(safeTheme)) {\n const cssVar = varMap[key as keyof MTheme]\n if (cssVar && value) {\n target.style.setProperty(cssVar, value)\n if (cssVar === '--mineral-font-family-sans') {\n target.style.setProperty('--mineral-font-family', value)\n }\n }\n }\n\n target.classList.toggle('theme-light', resolved === 'light')\n\n return () => {\n for (const key of Object.keys(safeTheme)) {\n const cssVar = varMap[key as keyof MTheme]\n if (cssVar) {\n target.style.removeProperty(cssVar)\n if (cssVar === '--mineral-font-family-sans') {\n target.style.removeProperty('--mineral-font-family')\n }\n }\n }\n target.classList.remove('theme-light')\n }\n }, [resolved, safeTheme, scope])\n\n const ctx = useMemo<MThemeContextValue>(\n () => ({\n theme: safeTheme,\n mode,\n resolvedMode: resolved,\n setMode,\n toggleMode,\n }),\n [safeTheme, mode, resolved, setMode, toggleMode]\n )\n\n return (\n <ThemeContext.Provider value={ctx}>\n {scope === 'wrapper' ? (\n <div ref={ref} className={resolved === 'light' ? 'theme-light' : undefined}>\n {children}\n </div>\n ) : (\n children\n )}\n </ThemeContext.Provider>\n )\n}\n\nexport function useMTheme(): MThemeContextValue {\n return useContext(ThemeContext)\n}\n","import {useEffect, useState} from 'react'\nimport type {MHiddenProps} from './MTheme.types'\n\nexport const MBreakpoints = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n '2xl': 1536,\n} as const\n\nexport const MShellBreakpoints = {\n mobile: 768,\n compact: 960,\n} as const\n\nexport function useMaxWidth(breakpoint: number): boolean {\n const [matches, setMatches] = useState(() =>\n typeof window !== 'undefined' ? window.innerWidth <= breakpoint : false\n )\n\n useEffect(() => {\n if (typeof window === 'undefined') {\n return\n }\n\n const media = window.matchMedia(`(max-width: ${breakpoint}px)`)\n const sync = () => setMatches(media.matches)\n\n sync()\n\n if (typeof media.addEventListener === 'function') {\n media.addEventListener('change', sync)\n return () => media.removeEventListener('change', sync)\n }\n\n media.addListener(sync)\n return () => media.removeListener(sync)\n }, [breakpoint])\n\n return matches\n}\n\nexport function getHiddenProps(hidden?: MHiddenProps['hidden']) {\n if (hidden === undefined || hidden === false) {\n return {}\n }\n\n if (hidden === true) {\n return {hidden: true}\n }\n\n return {'data-m-hidden': hidden}\n}\n"],"mappings":"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"}
package/dist/theme.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(`./theme-DLorpkJc.cjs`);exports.MThemeProvider=e.t,exports.useMTheme=e.n;
3
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./theme-B9iSuxqh.cjs`);exports.MBreakpoints=e.t,exports.MShellBreakpoints=e.n,exports.MThemeProvider=e.a,exports.getHiddenProps=e.r,exports.useMTheme=e.o,exports.useMaxWidth=e.i;
package/dist/theme.js CHANGED
@@ -1,4 +1,4 @@
1
1
  import {ensureStyles} from './style-runtime.js'
2
2
  ensureStyles()
3
- import { n as e, t } from "./theme-BV4qkzZU.js";
4
- export { t as MThemeProvider, e as useMTheme };
3
+ import { a as e, i as t, n, o as r, r as i, t as a } from "./theme-XRUdoLqw.js";
4
+ export { a as MBreakpoints, n as MShellBreakpoints, e as MThemeProvider, i as getHiddenProps, r as useMTheme, t as useMaxWidth };
@@ -1,2 +1,2 @@
1
- const e=require(`./cn-CU5TNITO.cjs`),t=require(`./MText-CxSZ2md0.cjs`);let n=require(`react/jsx-runtime`);function r({color:r,className:i,children:a,...o}){return(0,n.jsx)(`code`,{className:e.t(`code`,...t.n({color:r}),i),...o,children:a})}function i({ordered:r=!1,color:i,className:a,children:o,...s}){return(0,n.jsx)(r?`ol`:`ul`,{className:e.t(`list`,r&&`ordered`,...t.n({color:i}),a),...s,children:o})}function a({className:t,children:r,...i}){return(0,n.jsx)(`li`,{className:e.t(`item`,t),...i,children:r})}function o({size:t=`md`,className:r,children:i,...a}){return(0,n.jsx)(`kbd`,{className:e.t(`kbd`,t,r),...a,children:i})}Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return o}});
2
- //# sourceMappingURL=typography-qbFGv1gA.cjs.map
1
+ const e=require(`./cn-CU5TNITO.cjs`),t=require(`./MText-CWHwmjs8.cjs`);let n=require(`react/jsx-runtime`);function r({color:r,className:i,children:a,...o}){return(0,n.jsx)(`code`,{className:e.t(`code`,...t.n({color:r}),i),...o,children:a})}function i({ordered:r=!1,color:i,className:a,children:o,...s}){return(0,n.jsx)(r?`ol`:`ul`,{className:e.t(`list`,r&&`ordered`,...t.n({color:i}),a),...s,children:o})}function a({className:t,children:r,...i}){return(0,n.jsx)(`li`,{className:e.t(`item`,t),...i,children:r})}function o({size:t=`md`,className:r,children:i,...a}){return(0,n.jsx)(`kbd`,{className:e.t(`kbd`,t,r),...a,children:i})}Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return o}});
2
+ //# sourceMappingURL=typography-D0dyVQlP.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"typography-qbFGv1gA.cjs","names":[],"sources":["../src/components/typography/MCode/MCode.tsx","../src/components/typography/MList/MList.tsx","../src/components/typography/MKbd/MKbd.tsx"],"sourcesContent":["import type {MCodeProps} from './MCode.types'\nimport {cn} from '../../../utils/cn'\nimport {getAppearanceClassNames} from '../../../utils/appearanceProps'\nimport './MCode.css'\n\n// Render inline code tokens with semantic color support.\nexport function MCode({color, className, children, ...rest}: MCodeProps) {\n return (\n <code className={cn('code', ...getAppearanceClassNames({color}), className)} {...rest}>\n {children}\n </code>\n )\n}\n","import type {HTMLAttributes} from 'react'\nimport type {MListProps} from './MList.types'\nimport {cn} from '../../../utils/cn'\nimport {getAppearanceClassNames} from '../../../utils/appearanceProps'\nimport './MList.css'\n\n// Render ordered or unordered lists with shared typography tokens.\nexport function MList({ordered = false, color, className, children, ...rest}: MListProps) {\n const Component = ordered ? 'ol' : 'ul'\n\n return (\n <Component\n className={cn('list', ordered && 'ordered', ...getAppearanceClassNames({color}), className)}\n {...rest}\n >\n {children}\n </Component>\n )\n}\n\n// Render a list item that inherits the parent list styling.\nexport function MListItem({className, children, ...rest}: HTMLAttributes<HTMLLIElement>) {\n return (\n <li className={cn('item', className)} {...rest}>\n {children}\n </li>\n )\n}\n","import type {MKbdProps} from './MKbd.types'\nimport {cn} from '../../../utils/cn'\nimport './MKbd.css'\n\nexport function MKbd({size = 'md', className, children, ...rest}: MKbdProps) {\n return (\n <kbd className={cn('kbd', size, className)} {...rest}>\n {children}\n </kbd>\n )\n}\n"],"mappings":"0GAMA,SAAgB,EAAM,CAAC,QAAO,YAAW,WAAU,GAAG,GAAmB,CACrE,OACI,EAAA,EAAA,KAAC,OAAD,CAAM,UAAW,EAAA,EAAG,OAAQ,GAAG,EAAA,EAAwB,CAAC,QAAM,CAAC,CAAE,EAAU,CAAE,GAAI,EAC5E,WACE,CAAA,CCHf,SAAgB,EAAM,CAAC,UAAU,GAAO,QAAO,YAAW,WAAU,GAAG,GAAmB,CAGtF,OACI,EAAA,EAAA,KAHc,EAAU,KAAO,KAG/B,CACI,UAAW,EAAA,EAAG,OAAQ,GAAW,UAAW,GAAG,EAAA,EAAwB,CAAC,QAAM,CAAC,CAAE,EAAU,CAC3F,GAAI,EAEH,WACO,CAAA,CAKpB,SAAgB,EAAU,CAAC,YAAW,WAAU,GAAG,GAAsC,CACrF,OACI,EAAA,EAAA,KAAC,KAAD,CAAI,UAAW,EAAA,EAAG,OAAQ,EAAU,CAAE,GAAI,EACrC,WACA,CAAA,CCrBb,SAAgB,EAAK,CAAC,OAAO,KAAM,YAAW,WAAU,GAAG,GAAkB,CACzE,OACI,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,EAAA,EAAG,MAAO,EAAM,EAAU,CAAE,GAAI,EAC3C,WACC,CAAA"}
1
+ {"version":3,"file":"typography-D0dyVQlP.cjs","names":[],"sources":["../src/components/typography/MCode/MCode.tsx","../src/components/typography/MList/MList.tsx","../src/components/typography/MKbd/MKbd.tsx"],"sourcesContent":["import type {MCodeProps} from './MCode.types'\nimport {cn} from '../../../utils/cn'\nimport {getAppearanceClassNames} from '../../../utils/appearanceProps'\nimport './MCode.css'\n\n// Render inline code tokens with semantic color support.\nexport function MCode({color, className, children, ...rest}: MCodeProps) {\n return (\n <code className={cn('code', ...getAppearanceClassNames({color}), className)} {...rest}>\n {children}\n </code>\n )\n}\n","import type {HTMLAttributes} from 'react'\nimport type {MListProps} from './MList.types'\nimport {cn} from '../../../utils/cn'\nimport {getAppearanceClassNames} from '../../../utils/appearanceProps'\nimport './MList.css'\n\n// Render ordered or unordered lists with shared typography tokens.\nexport function MList({ordered = false, color, className, children, ...rest}: MListProps) {\n const Component = ordered ? 'ol' : 'ul'\n\n return (\n <Component\n className={cn('list', ordered && 'ordered', ...getAppearanceClassNames({color}), className)}\n {...rest}\n >\n {children}\n </Component>\n )\n}\n\n// Render a list item that inherits the parent list styling.\nexport function MListItem({className, children, ...rest}: HTMLAttributes<HTMLLIElement>) {\n return (\n <li className={cn('item', className)} {...rest}>\n {children}\n </li>\n )\n}\n","import type {MKbdProps} from './MKbd.types'\nimport {cn} from '../../../utils/cn'\nimport './MKbd.css'\n\nexport function MKbd({size = 'md', className, children, ...rest}: MKbdProps) {\n return (\n <kbd className={cn('kbd', size, className)} {...rest}>\n {children}\n </kbd>\n )\n}\n"],"mappings":"0GAMA,SAAgB,EAAM,CAAC,QAAO,YAAW,WAAU,GAAG,GAAmB,CACrE,OACI,EAAA,EAAA,KAAC,OAAD,CAAM,UAAW,EAAA,EAAG,OAAQ,GAAG,EAAA,EAAwB,CAAC,QAAM,CAAC,CAAE,EAAU,CAAE,GAAI,EAC5E,WACE,CAAA,CCHf,SAAgB,EAAM,CAAC,UAAU,GAAO,QAAO,YAAW,WAAU,GAAG,GAAmB,CAGtF,OACI,EAAA,EAAA,KAHc,EAAU,KAAO,KAG/B,CACI,UAAW,EAAA,EAAG,OAAQ,GAAW,UAAW,GAAG,EAAA,EAAwB,CAAC,QAAM,CAAC,CAAE,EAAU,CAC3F,GAAI,EAEH,WACO,CAAA,CAKpB,SAAgB,EAAU,CAAC,YAAW,WAAU,GAAG,GAAsC,CACrF,OACI,EAAA,EAAA,KAAC,KAAD,CAAI,UAAW,EAAA,EAAG,OAAQ,EAAU,CAAE,GAAI,EACrC,WACA,CAAA,CCrBb,SAAgB,EAAK,CAAC,OAAO,KAAM,YAAW,WAAU,GAAG,GAAkB,CACzE,OACI,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,EAAA,EAAG,MAAO,EAAM,EAAU,CAAE,GAAI,EAC3C,WACC,CAAA"}
@@ -1,5 +1,5 @@
1
1
  import { t as e } from "./cn-YER3QsV1.js";
2
- import { n as t } from "./MText-DX9O7gh7.js";
2
+ import { n as t } from "./MText-hHMgVJ4-.js";
3
3
  import { jsx as n } from "react/jsx-runtime";
4
4
  //#region src/components/typography/MCode/MCode.tsx
5
5
  function r({ color: r, className: i, children: a, ...o }) {
@@ -37,4 +37,4 @@ function o({ size: t = "md", className: r, children: i, ...a }) {
37
37
  //#endregion
38
38
  export { r as i, i as n, a as r, o as t };
39
39
 
40
- //# sourceMappingURL=typography-DKdr1Tds.js.map
40
+ //# sourceMappingURL=typography-Db_SHI0H.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"typography-DKdr1Tds.js","names":[],"sources":["../src/components/typography/MCode/MCode.tsx","../src/components/typography/MList/MList.tsx","../src/components/typography/MKbd/MKbd.tsx"],"sourcesContent":["import type {MCodeProps} from './MCode.types'\nimport {cn} from '../../../utils/cn'\nimport {getAppearanceClassNames} from '../../../utils/appearanceProps'\nimport './MCode.css'\n\n// Render inline code tokens with semantic color support.\nexport function MCode({color, className, children, ...rest}: MCodeProps) {\n return (\n <code className={cn('code', ...getAppearanceClassNames({color}), className)} {...rest}>\n {children}\n </code>\n )\n}\n","import type {HTMLAttributes} from 'react'\nimport type {MListProps} from './MList.types'\nimport {cn} from '../../../utils/cn'\nimport {getAppearanceClassNames} from '../../../utils/appearanceProps'\nimport './MList.css'\n\n// Render ordered or unordered lists with shared typography tokens.\nexport function MList({ordered = false, color, className, children, ...rest}: MListProps) {\n const Component = ordered ? 'ol' : 'ul'\n\n return (\n <Component\n className={cn('list', ordered && 'ordered', ...getAppearanceClassNames({color}), className)}\n {...rest}\n >\n {children}\n </Component>\n )\n}\n\n// Render a list item that inherits the parent list styling.\nexport function MListItem({className, children, ...rest}: HTMLAttributes<HTMLLIElement>) {\n return (\n <li className={cn('item', className)} {...rest}>\n {children}\n </li>\n )\n}\n","import type {MKbdProps} from './MKbd.types'\nimport {cn} from '../../../utils/cn'\nimport './MKbd.css'\n\nexport function MKbd({size = 'md', className, children, ...rest}: MKbdProps) {\n return (\n <kbd className={cn('kbd', size, className)} {...rest}>\n {children}\n </kbd>\n )\n}\n"],"mappings":";;;;AAMA,SAAgB,EAAM,EAAC,UAAO,cAAW,aAAU,GAAG,KAAmB;AACrE,QACI,kBAAC,QAAD;EAAM,WAAW,EAAG,QAAQ,GAAG,EAAwB,EAAC,UAAM,CAAC,EAAE,EAAU;EAAE,GAAI;EAC5E;EACE,CAAA;;;;ACHf,SAAgB,EAAM,EAAC,aAAU,IAAO,UAAO,cAAW,aAAU,GAAG,KAAmB;AAGtF,QACI,kBAHc,IAAU,OAAO,MAG/B;EACI,WAAW,EAAG,QAAQ,KAAW,WAAW,GAAG,EAAwB,EAAC,UAAM,CAAC,EAAE,EAAU;EAC3F,GAAI;EAEH;EACO,CAAA;;AAKpB,SAAgB,EAAU,EAAC,cAAW,aAAU,GAAG,KAAsC;AACrF,QACI,kBAAC,MAAD;EAAI,WAAW,EAAG,QAAQ,EAAU;EAAE,GAAI;EACrC;EACA,CAAA;;;;ACrBb,SAAgB,EAAK,EAAC,UAAO,MAAM,cAAW,aAAU,GAAG,KAAkB;AACzE,QACI,kBAAC,OAAD;EAAK,WAAW,EAAG,OAAO,GAAM,EAAU;EAAE,GAAI;EAC3C;EACC,CAAA"}
1
+ {"version":3,"file":"typography-Db_SHI0H.js","names":[],"sources":["../src/components/typography/MCode/MCode.tsx","../src/components/typography/MList/MList.tsx","../src/components/typography/MKbd/MKbd.tsx"],"sourcesContent":["import type {MCodeProps} from './MCode.types'\nimport {cn} from '../../../utils/cn'\nimport {getAppearanceClassNames} from '../../../utils/appearanceProps'\nimport './MCode.css'\n\n// Render inline code tokens with semantic color support.\nexport function MCode({color, className, children, ...rest}: MCodeProps) {\n return (\n <code className={cn('code', ...getAppearanceClassNames({color}), className)} {...rest}>\n {children}\n </code>\n )\n}\n","import type {HTMLAttributes} from 'react'\nimport type {MListProps} from './MList.types'\nimport {cn} from '../../../utils/cn'\nimport {getAppearanceClassNames} from '../../../utils/appearanceProps'\nimport './MList.css'\n\n// Render ordered or unordered lists with shared typography tokens.\nexport function MList({ordered = false, color, className, children, ...rest}: MListProps) {\n const Component = ordered ? 'ol' : 'ul'\n\n return (\n <Component\n className={cn('list', ordered && 'ordered', ...getAppearanceClassNames({color}), className)}\n {...rest}\n >\n {children}\n </Component>\n )\n}\n\n// Render a list item that inherits the parent list styling.\nexport function MListItem({className, children, ...rest}: HTMLAttributes<HTMLLIElement>) {\n return (\n <li className={cn('item', className)} {...rest}>\n {children}\n </li>\n )\n}\n","import type {MKbdProps} from './MKbd.types'\nimport {cn} from '../../../utils/cn'\nimport './MKbd.css'\n\nexport function MKbd({size = 'md', className, children, ...rest}: MKbdProps) {\n return (\n <kbd className={cn('kbd', size, className)} {...rest}>\n {children}\n </kbd>\n )\n}\n"],"mappings":";;;;AAMA,SAAgB,EAAM,EAAC,UAAO,cAAW,aAAU,GAAG,KAAmB;AACrE,QACI,kBAAC,QAAD;EAAM,WAAW,EAAG,QAAQ,GAAG,EAAwB,EAAC,UAAM,CAAC,EAAE,EAAU;EAAE,GAAI;EAC5E;EACE,CAAA;;;;ACHf,SAAgB,EAAM,EAAC,aAAU,IAAO,UAAO,cAAW,aAAU,GAAG,KAAmB;AAGtF,QACI,kBAHc,IAAU,OAAO,MAG/B;EACI,WAAW,EAAG,QAAQ,KAAW,WAAW,GAAG,EAAwB,EAAC,UAAM,CAAC,EAAE,EAAU;EAC3F,GAAI;EAEH;EACO,CAAA;;AAKpB,SAAgB,EAAU,EAAC,cAAW,aAAU,GAAG,KAAsC;AACrF,QACI,kBAAC,MAAD;EAAI,WAAW,EAAG,QAAQ,EAAU;EAAE,GAAI;EACrC;EACA,CAAA;;;;ACrBb,SAAgB,EAAK,EAAC,UAAO,MAAM,cAAW,aAAU,GAAG,KAAkB;AACzE,QACI,kBAAC,OAAD;EAAK,WAAW,EAAG,OAAO,GAAM,EAAU;EAAE,GAAI;EAC3C;EACC,CAAA"}
@@ -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(`./MText-CxSZ2md0.cjs`),t=require(`./MHeading-DqvWKia1.cjs`),n=require(`./MLink-DHryXq_D.cjs`),r=require(`./typography-qbFGv1gA.cjs`),i=require(`./MSubText-78oYdJQy.cjs`);exports.MCode=r.i,exports.MHeading=t.t,exports.MKbd=r.t,exports.MLink=n.t,exports.MList=r.n,exports.MListItem=r.r,exports.MSubText=i.t,exports.MText=e.t;
3
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./MText-CWHwmjs8.cjs`),t=require(`./MHeading-XCMJNMYB.cjs`),n=require(`./MLink-7hndQLKM.cjs`),r=require(`./typography-D0dyVQlP.cjs`),i=require(`./MSubText-Dg3PKnwI.cjs`);exports.MCode=r.i,exports.MHeading=t.t,exports.MKbd=r.t,exports.MLink=n.t,exports.MList=r.n,exports.MListItem=r.r,exports.MSubText=i.t,exports.MText=e.t;
@@ -1,8 +1,8 @@
1
1
  import {ensureStyles} from './style-runtime.js'
2
2
  ensureStyles()
3
- import { t as e } from "./MText-DX9O7gh7.js";
4
- import { t } from "./MHeading-C3IgV22T.js";
5
- import { t as n } from "./MLink-ODytrwne.js";
6
- import { i as r, n as i, r as a, t as o } from "./typography-DKdr1Tds.js";
7
- import { t as s } from "./MSubText-C2oxXwKT.js";
3
+ import { t as e } from "./MText-hHMgVJ4-.js";
4
+ import { t } from "./MHeading-DBS5Kytw.js";
5
+ import { t as n } from "./MLink-tcICJfPn.js";
6
+ import { i as r, n as i, r as a, t as o } from "./typography-Db_SHI0H.js";
7
+ import { t as s } from "./MSubText-CHvUFOlt.js";
8
8
  export { r as MCode, t as MHeading, o as MKbd, n as MLink, i as MList, a as MListItem, s as MSubText, e as MText };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@banzamel/mineralui",
3
- "version": "1.2.0",
3
+ "version": "1.4.0",
4
4
  "description": "Modern React UI component framework with mineral dark aesthetic",
5
5
  "type": "module",
6
6
  "main": "dist/index.cjs",
@@ -1,55 +0,0 @@
1
- import { t as e } from "./cn-YER3QsV1.js";
2
- import { t } from "./useInteractionEffect-DtpbVd77.js";
3
- import { n } from "./MButton-BmTDe5Oa.js";
4
- import { jsx as r, jsxs as i } from "react/jsx-runtime";
5
- //#region src/components/media/MAvatar/MAvatar.tsx
6
- function a(e, t) {
7
- if (t) return t.slice(0, 2).toUpperCase();
8
- if (!e) return "?";
9
- let n = e.trim().split(/\s+/).filter(Boolean);
10
- return n.length === 0 ? "?" : n.length === 1 ? n[0].slice(0, 2).toUpperCase() : `${n[0][0]}${n[1][0]}`.toUpperCase();
11
- }
12
- function o({ src: o, alt: s, name: c, initials: l, size: u = "md", shape: d = "circle", color: f, badge: p, badgeColor: m, badgePulsing: h = !1, backgroundColor: g, clickEffect: _, rippleColor: v, skeleton: y = !1, className: b, style: x, onPointerDown: S, ...C }) {
13
- let w = a(c, l), T = typeof C.onClick == "function" || C.role === "button" || C.tabIndex !== void 0, { effectClassName: E, effectLayer: D, handlePointerDown: O } = t({
14
- effect: _ ?? (T ? "ripple" : "none"),
15
- disabled: !T || y,
16
- color: v
17
- }), k = typeof u == "number" ? {
18
- width: `${u}px`,
19
- height: `${u}px`,
20
- ...x,
21
- ...g && !y ? { backgroundColor: g } : {}
22
- } : {
23
- ...x,
24
- ...g && !y ? { backgroundColor: g } : {}
25
- };
26
- return /* @__PURE__ */ i("span", {
27
- className: e("avatar", typeof u == "string" && u, d, y && "skeleton animate", T && !y && "interactive", E, !y && f && `color-${f}`, b),
28
- style: k,
29
- "aria-label": y ? "Loading" : s ?? c ?? "MAvatar",
30
- onPointerDown: (e) => {
31
- O(e), S?.(e);
32
- },
33
- ...C,
34
- children: [
35
- D,
36
- n({
37
- badge: p,
38
- badgeColor: m,
39
- badgePulsing: h
40
- }),
41
- y ? null : o ? /* @__PURE__ */ r("img", {
42
- src: o,
43
- alt: s ?? c ?? "",
44
- className: "image"
45
- }) : /* @__PURE__ */ r("span", {
46
- className: "fallback",
47
- children: w
48
- })
49
- ]
50
- });
51
- }
52
- //#endregion
53
- export { o as t };
54
-
55
- //# sourceMappingURL=MAvatar-BoO51a6m.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MAvatar-BoO51a6m.js","names":[],"sources":["../src/components/media/MAvatar/MAvatar.tsx"],"sourcesContent":["import type {CSSProperties} from 'react'\nimport type {MAvatarProps} from './MAvatar.types'\nimport {cn} from '../../../utils/cn'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport {renderOverlayBadge} from '../../../utils/overlayBadge'\nimport './MAvatar.css'\n\nfunction getFallbackInitials(name?: string, initials?: string) {\n if (initials) return initials.slice(0, 2).toUpperCase()\n if (!name) return '?'\n const parts = name.trim().split(/\\s+/).filter(Boolean)\n if (parts.length === 0) return '?'\n if (parts.length === 1) return parts[0].slice(0, 2).toUpperCase()\n return `${parts[0][0]}${parts[1][0]}`.toUpperCase()\n}\n\n// Render user or entity identity as an image with initials fallback.\nexport function MAvatar({\n src,\n alt,\n name,\n initials,\n size = 'md',\n shape = 'circle',\n color,\n badge,\n badgeColor,\n badgePulsing = false,\n backgroundColor,\n clickEffect,\n rippleColor,\n skeleton = false,\n className,\n style,\n onPointerDown,\n ...rest\n}: MAvatarProps) {\n const fallbackInitials = getFallbackInitials(name, initials)\n const isInteractive = typeof rest.onClick === 'function' || rest.role === 'button' || rest.tabIndex !== undefined\n const {effectClassName, effectLayer, handlePointerDown} = useInteractionEffect<HTMLSpanElement>({\n effect: clickEffect ?? (isInteractive ? 'ripple' : 'none'),\n disabled: !isInteractive || skeleton,\n color: rippleColor,\n })\n const inlineStyle: CSSProperties =\n typeof size === 'number'\n ? {\n width: `${size}px`,\n height: `${size}px`,\n ...style,\n ...(backgroundColor && !skeleton ? {backgroundColor} : {}),\n }\n : {\n ...style,\n ...(backgroundColor && !skeleton ? {backgroundColor} : {}),\n }\n\n return (\n <span\n className={cn(\n 'avatar',\n typeof size === 'string' && size,\n shape,\n skeleton && 'skeleton animate',\n isInteractive && !skeleton && 'interactive',\n effectClassName,\n !skeleton && color && `color-${color}`,\n className\n )}\n style={inlineStyle}\n aria-label={skeleton ? 'Loading' : (alt ?? name ?? 'MAvatar')}\n onPointerDown={(event) => {\n handlePointerDown(event)\n onPointerDown?.(event)\n }}\n {...rest}\n >\n {effectLayer}\n {renderOverlayBadge({badge, badgeColor, badgePulsing})}\n {skeleton ? null : src ? (\n <img src={src} alt={alt ?? name ?? ''} className={'image'} />\n ) : (\n <span className={'fallback'}>{fallbackInitials}</span>\n )}\n </span>\n )\n}\n"],"mappings":";;;;;AAOA,SAAS,EAAoB,GAAe,GAAmB;AAC3D,KAAI,EAAU,QAAO,EAAS,MAAM,GAAG,EAAE,CAAC,aAAa;AACvD,KAAI,CAAC,EAAM,QAAO;CAClB,IAAM,IAAQ,EAAK,MAAM,CAAC,MAAM,MAAM,CAAC,OAAO,QAAQ;AAGtD,QAFI,EAAM,WAAW,IAAU,MAC3B,EAAM,WAAW,IAAU,EAAM,GAAG,MAAM,GAAG,EAAE,CAAC,aAAa,GAC1D,GAAG,EAAM,GAAG,KAAK,EAAM,GAAG,KAAK,aAAa;;AAIvD,SAAgB,EAAQ,EACpB,QACA,QACA,SACA,aACA,UAAO,MACP,WAAQ,UACR,UACA,UACA,eACA,kBAAe,IACf,oBACA,gBACA,gBACA,cAAW,IACX,cACA,UACA,kBACA,GAAG,KACU;CACb,IAAM,IAAmB,EAAoB,GAAM,EAAS,EACtD,IAAgB,OAAO,EAAK,WAAY,cAAc,EAAK,SAAS,YAAY,EAAK,aAAa,KAAA,GAClG,EAAC,oBAAiB,gBAAa,yBAAqB,EAAsC;EAC5F,QAAQ,MAAgB,IAAgB,WAAW;EACnD,UAAU,CAAC,KAAiB;EAC5B,OAAO;EACV,CAAC,EACI,IACF,OAAO,KAAS,WACV;EACI,OAAO,GAAG,EAAK;EACf,QAAQ,GAAG,EAAK;EAChB,GAAG;EACH,GAAI,KAAmB,CAAC,IAAW,EAAC,oBAAgB,GAAG,EAAE;EAC5D,GACD;EACI,GAAG;EACH,GAAI,KAAmB,CAAC,IAAW,EAAC,oBAAgB,GAAG,EAAE;EAC5D;AAEX,QACI,kBAAC,QAAD;EACI,WAAW,EACP,UACA,OAAO,KAAS,YAAY,GAC5B,GACA,KAAY,oBACZ,KAAiB,CAAC,KAAY,eAC9B,GACA,CAAC,KAAY,KAAS,SAAS,KAC/B,EACH;EACD,OAAO;EACP,cAAY,IAAW,YAAa,KAAO,KAAQ;EACnD,gBAAgB,MAAU;AAEtB,GADA,EAAkB,EAAM,EACxB,IAAgB,EAAM;;EAE1B,GAAI;YAjBR;GAmBK;GACA,EAAmB;IAAC;IAAO;IAAY;IAAa,CAAC;GACrD,IAAW,OAAO,IACf,kBAAC,OAAD;IAAU;IAAK,KAAK,KAAO,KAAQ;IAAI,WAAW;IAAW,CAAA,GAE7D,kBAAC,QAAD;IAAM,WAAW;cAAa;IAAwB,CAAA;GAEvD"}
@@ -1,2 +0,0 @@
1
- const e=require(`./cn-CU5TNITO.cjs`),t=require(`./useInteractionEffect-DnEfbCrX.cjs`),n=require(`./MButton-B8rXmFX9.cjs`);let r=require(`react/jsx-runtime`);function i(e,t){if(t)return t.slice(0,2).toUpperCase();if(!e)return`?`;let n=e.trim().split(/\s+/).filter(Boolean);return n.length===0?`?`:n.length===1?n[0].slice(0,2).toUpperCase():`${n[0][0]}${n[1][0]}`.toUpperCase()}function a({src:a,alt:o,name:s,initials:c,size:l=`md`,shape:u=`circle`,color:d,badge:f,badgeColor:p,badgePulsing:m=!1,backgroundColor:h,clickEffect:g,rippleColor:_,skeleton:v=!1,className:y,style:b,onPointerDown:x,...S}){let C=i(s,c),w=typeof S.onClick==`function`||S.role===`button`||S.tabIndex!==void 0,{effectClassName:T,effectLayer:E,handlePointerDown:D}=t.t({effect:g??(w?`ripple`:`none`),disabled:!w||v,color:_}),O=typeof l==`number`?{width:`${l}px`,height:`${l}px`,...b,...h&&!v?{backgroundColor:h}:{}}:{...b,...h&&!v?{backgroundColor:h}:{}};return(0,r.jsxs)(`span`,{className:e.t(`avatar`,typeof l==`string`&&l,u,v&&`skeleton animate`,w&&!v&&`interactive`,T,!v&&d&&`color-${d}`,y),style:O,"aria-label":v?`Loading`:o??s??`MAvatar`,onPointerDown:e=>{D(e),x?.(e)},...S,children:[E,n.n({badge:f,badgeColor:p,badgePulsing:m}),v?null:a?(0,r.jsx)(`img`,{src:a,alt:o??s??``,className:`image`}):(0,r.jsx)(`span`,{className:`fallback`,children:C})]})}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return a}});
2
- //# sourceMappingURL=MAvatar-DJKtca9j.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MAvatar-DJKtca9j.cjs","names":[],"sources":["../src/components/media/MAvatar/MAvatar.tsx"],"sourcesContent":["import type {CSSProperties} from 'react'\nimport type {MAvatarProps} from './MAvatar.types'\nimport {cn} from '../../../utils/cn'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport {renderOverlayBadge} from '../../../utils/overlayBadge'\nimport './MAvatar.css'\n\nfunction getFallbackInitials(name?: string, initials?: string) {\n if (initials) return initials.slice(0, 2).toUpperCase()\n if (!name) return '?'\n const parts = name.trim().split(/\\s+/).filter(Boolean)\n if (parts.length === 0) return '?'\n if (parts.length === 1) return parts[0].slice(0, 2).toUpperCase()\n return `${parts[0][0]}${parts[1][0]}`.toUpperCase()\n}\n\n// Render user or entity identity as an image with initials fallback.\nexport function MAvatar({\n src,\n alt,\n name,\n initials,\n size = 'md',\n shape = 'circle',\n color,\n badge,\n badgeColor,\n badgePulsing = false,\n backgroundColor,\n clickEffect,\n rippleColor,\n skeleton = false,\n className,\n style,\n onPointerDown,\n ...rest\n}: MAvatarProps) {\n const fallbackInitials = getFallbackInitials(name, initials)\n const isInteractive = typeof rest.onClick === 'function' || rest.role === 'button' || rest.tabIndex !== undefined\n const {effectClassName, effectLayer, handlePointerDown} = useInteractionEffect<HTMLSpanElement>({\n effect: clickEffect ?? (isInteractive ? 'ripple' : 'none'),\n disabled: !isInteractive || skeleton,\n color: rippleColor,\n })\n const inlineStyle: CSSProperties =\n typeof size === 'number'\n ? {\n width: `${size}px`,\n height: `${size}px`,\n ...style,\n ...(backgroundColor && !skeleton ? {backgroundColor} : {}),\n }\n : {\n ...style,\n ...(backgroundColor && !skeleton ? {backgroundColor} : {}),\n }\n\n return (\n <span\n className={cn(\n 'avatar',\n typeof size === 'string' && size,\n shape,\n skeleton && 'skeleton animate',\n isInteractive && !skeleton && 'interactive',\n effectClassName,\n !skeleton && color && `color-${color}`,\n className\n )}\n style={inlineStyle}\n aria-label={skeleton ? 'Loading' : (alt ?? name ?? 'MAvatar')}\n onPointerDown={(event) => {\n handlePointerDown(event)\n onPointerDown?.(event)\n }}\n {...rest}\n >\n {effectLayer}\n {renderOverlayBadge({badge, badgeColor, badgePulsing})}\n {skeleton ? null : src ? (\n <img src={src} alt={alt ?? name ?? ''} className={'image'} />\n ) : (\n <span className={'fallback'}>{fallbackInitials}</span>\n )}\n </span>\n )\n}\n"],"mappings":"6JAOA,SAAS,EAAoB,EAAe,EAAmB,CAC3D,GAAI,EAAU,OAAO,EAAS,MAAM,EAAG,EAAE,CAAC,aAAa,CACvD,GAAI,CAAC,EAAM,MAAO,IAClB,IAAM,EAAQ,EAAK,MAAM,CAAC,MAAM,MAAM,CAAC,OAAO,QAAQ,CAGtD,OAFI,EAAM,SAAW,EAAU,IAC3B,EAAM,SAAW,EAAU,EAAM,GAAG,MAAM,EAAG,EAAE,CAAC,aAAa,CAC1D,GAAG,EAAM,GAAG,KAAK,EAAM,GAAG,KAAK,aAAa,CAIvD,SAAgB,EAAQ,CACpB,MACA,MACA,OACA,WACA,OAAO,KACP,QAAQ,SACR,QACA,QACA,aACA,eAAe,GACf,kBACA,cACA,cACA,WAAW,GACX,YACA,QACA,gBACA,GAAG,GACU,CACb,IAAM,EAAmB,EAAoB,EAAM,EAAS,CACtD,EAAgB,OAAO,EAAK,SAAY,YAAc,EAAK,OAAS,UAAY,EAAK,WAAa,IAAA,GAClG,CAAC,kBAAiB,cAAa,qBAAqB,EAAA,EAAsC,CAC5F,OAAQ,IAAgB,EAAgB,SAAW,QACnD,SAAU,CAAC,GAAiB,EAC5B,MAAO,EACV,CAAC,CACI,EACF,OAAO,GAAS,SACV,CACI,MAAO,GAAG,EAAK,IACf,OAAQ,GAAG,EAAK,IAChB,GAAG,EACH,GAAI,GAAmB,CAAC,EAAW,CAAC,kBAAgB,CAAG,EAAE,CAC5D,CACD,CACI,GAAG,EACH,GAAI,GAAmB,CAAC,EAAW,CAAC,kBAAgB,CAAG,EAAE,CAC5D,CAEX,OACI,EAAA,EAAA,MAAC,OAAD,CACI,UAAW,EAAA,EACP,SACA,OAAO,GAAS,UAAY,EAC5B,EACA,GAAY,mBACZ,GAAiB,CAAC,GAAY,cAC9B,EACA,CAAC,GAAY,GAAS,SAAS,IAC/B,EACH,CACD,MAAO,EACP,aAAY,EAAW,UAAa,GAAO,GAAQ,UACnD,cAAgB,GAAU,CACtB,EAAkB,EAAM,CACxB,IAAgB,EAAM,EAE1B,GAAI,WAjBR,CAmBK,EACA,EAAA,EAAmB,CAAC,QAAO,aAAY,eAAa,CAAC,CACrD,EAAW,KAAO,GACf,EAAA,EAAA,KAAC,MAAD,CAAU,MAAK,IAAK,GAAO,GAAQ,GAAI,UAAW,QAAW,CAAA,EAE7D,EAAA,EAAA,KAAC,OAAD,CAAM,UAAW,oBAAa,EAAwB,CAAA,CAEvD"}
@@ -1,2 +0,0 @@
1
- const e=require(`./cn-CU5TNITO.cjs`);let t=require(`react/jsx-runtime`);function n({color:n=`primary`,size:r=`md`,pulsing:i=!1,rounded:a=!1,fullWidth:o=!1,icon:s,className:c,children:l,...u}){return(0,t.jsxs)(`span`,{className:e.t(`badge`,`color-${n}`,r,i&&`pulsing`,a&&`rounded`,o&&`full-width`,c),...u,children:[s&&(0,t.jsx)(`span`,{className:`badge-icon`,children:s}),l]})}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return n}});
2
- //# sourceMappingURL=MBadge-CexVV675.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MBadge-CexVV675.cjs","names":[],"sources":["../src/components/feedback/MBadge/MBadge.tsx"],"sourcesContent":["import type {MBadgeProps} from './MBadge.types'\nimport {cn} from '../../../utils/cn'\nimport './MBadge.css'\n\n// Render a compact semantic label for status and metadata.\nexport function MBadge({\n color = 'primary',\n size = 'md',\n pulsing = false,\n rounded = false,\n fullWidth = false,\n icon,\n className,\n children,\n ...rest\n}: MBadgeProps) {\n return (\n <span\n className={cn(\n 'badge',\n `color-${color}`,\n size,\n pulsing && 'pulsing',\n rounded && 'rounded',\n fullWidth && 'full-width',\n className\n )}\n {...rest}\n >\n {icon && <span className=\"badge-icon\">{icon}</span>}\n {children}\n </span>\n )\n}\n"],"mappings":"wEAKA,SAAgB,EAAO,CACnB,QAAQ,UACR,OAAO,KACP,UAAU,GACV,UAAU,GACV,YAAY,GACZ,OACA,YACA,WACA,GAAG,GACS,CACZ,OACI,EAAA,EAAA,MAAC,OAAD,CACI,UAAW,EAAA,EACP,QACA,SAAS,IACT,EACA,GAAW,UACX,GAAW,UACX,GAAa,aACb,EACH,CACD,GAAI,WAVR,CAYK,IAAQ,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,sBAAc,EAAY,CAAA,CAClD,EACE"}
@@ -1,17 +0,0 @@
1
- import { t as e } from "./cn-YER3QsV1.js";
2
- import { jsx as t, jsxs as n } from "react/jsx-runtime";
3
- //#region src/components/feedback/MBadge/MBadge.tsx
4
- function r({ color: r = "primary", size: i = "md", pulsing: a = !1, rounded: o = !1, fullWidth: s = !1, icon: c, className: l, children: u, ...d }) {
5
- return /* @__PURE__ */ n("span", {
6
- className: e("badge", `color-${r}`, i, a && "pulsing", o && "rounded", s && "full-width", l),
7
- ...d,
8
- children: [c && /* @__PURE__ */ t("span", {
9
- className: "badge-icon",
10
- children: c
11
- }), u]
12
- });
13
- }
14
- //#endregion
15
- export { r as t };
16
-
17
- //# sourceMappingURL=MBadge-Y1JnZiIC.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MBadge-Y1JnZiIC.js","names":[],"sources":["../src/components/feedback/MBadge/MBadge.tsx"],"sourcesContent":["import type {MBadgeProps} from './MBadge.types'\nimport {cn} from '../../../utils/cn'\nimport './MBadge.css'\n\n// Render a compact semantic label for status and metadata.\nexport function MBadge({\n color = 'primary',\n size = 'md',\n pulsing = false,\n rounded = false,\n fullWidth = false,\n icon,\n className,\n children,\n ...rest\n}: MBadgeProps) {\n return (\n <span\n className={cn(\n 'badge',\n `color-${color}`,\n size,\n pulsing && 'pulsing',\n rounded && 'rounded',\n fullWidth && 'full-width',\n className\n )}\n {...rest}\n >\n {icon && <span className=\"badge-icon\">{icon}</span>}\n {children}\n </span>\n )\n}\n"],"mappings":";;;AAKA,SAAgB,EAAO,EACnB,WAAQ,WACR,UAAO,MACP,aAAU,IACV,aAAU,IACV,eAAY,IACZ,SACA,cACA,aACA,GAAG,KACS;AACZ,QACI,kBAAC,QAAD;EACI,WAAW,EACP,SACA,SAAS,KACT,GACA,KAAW,WACX,KAAW,WACX,KAAa,cACb,EACH;EACD,GAAI;YAVR,CAYK,KAAQ,kBAAC,QAAD;GAAM,WAAU;aAAc;GAAY,CAAA,EAClD,EACE"}
@@ -1,2 +0,0 @@
1
- const e=require(`./cn-CU5TNITO.cjs`),t=require(`./useInteractionEffect-DnEfbCrX.cjs`);let n=require(`react`),r=require(`react/jsx-runtime`);var i=(0,n.createContext)(null);function a(){return(0,n.useContext)(i)}function o({color:t=`primary`,size:n=`md`,label:i=`Loading`,className:a,style:o,...s}){let c=typeof n==`number`?{width:`${n}px`,height:`${n}px`,...o}:o||{};return(0,r.jsx)(`span`,{className:e.t(`spinner`,typeof n==`string`&&n,t&&`color-${t}`,a),style:c,role:`status`,"aria-label":i,...s})}function s(e){return e!=null&&e!==!1}function c({badge:e,badgeColor:t,badgePulsing:n}){return s(e)}function l({badge:t,badgeColor:n=`primary`,badgePulsing:i=!1,className:a}){if(!c({badge:t,badgeColor:n,badgePulsing:i}))return null;let o=t===!0;return(0,r.jsx)(`span`,{className:e.t(`overlay-badge`,`color-${n}`,o&&`dot`,i&&`pulsing`,a),"aria-hidden":`true`,children:o?null:t})}var u=(0,n.forwardRef)(function({component:n,to:i,href:s,variant:c,size:u,color:d,fullWidth:f=!1,rounded:p=!1,shape:m,iconOnly:h=!1,loading:g=!1,active:_=!1,pulsing:v=!1,badge:y,badgeColor:b,badgePulsing:x=!1,startIcon:S,endIcon:C,clickEffect:w=`ripple`,rippleColor:T,className:E,style:D,children:O,disabled:k=!1,type:A=`button`,onClick:j,onPointerDown:M,onKeyDown:N,...P},F){let I=n??`button`,L=!n||I===`button`,R=a(),z=c??R?.variant??`filled`,B=u??R?.size??`md`,V=d??R?.color??`primary`,H=k||g,{effectClassName:U,effectLayer:W,handlePointerDown:G,triggerEffect:K}=t.t({effect:w,disabled:H,centered:h,color:T});function q(e){if(H&&!L){e.preventDefault();return}j?.(e)}return(0,r.jsxs)(I,{ref:F,type:L?A:void 0,to:n?H?void 0:i:void 0,href:n?H?void 0:s:void 0,className:e.t(`button`,z,B,`color-${V}`,f&&`full-width`,p&&`rounded`,m===`circle`&&`circle`,h&&`icon-only`,g&&`loading`,_&&`active`,v&&`pulsing`,H&&`disabled`,U,E),style:D,disabled:L?H:void 0,"aria-busy":g||void 0,"aria-disabled":!L&&H?!0:void 0,onClick:q,onPointerDown:e=>{G(e),M?.(e)},onKeyDown:e=>{(e.key===` `||e.key===`Enter`)&&K(e.currentTarget),N?.(e)},...P,children:[W,l({badge:y,badgeColor:b,badgePulsing:x}),g&&(0,r.jsx)(o,{size:`sm`,color:`inherit`,"aria-hidden":`true`}),S&&(0,r.jsx)(`span`,{className:`icon start`,children:S}),O&&(0,r.jsx)(`span`,{className:`content`,children:O}),C&&(0,r.jsx)(`span`,{className:`icon end`,children:C})]})});Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return u}});
2
- //# sourceMappingURL=MButton-B8rXmFX9.cjs.map
@@ -1,111 +0,0 @@
1
- import { t as e } from "./cn-YER3QsV1.js";
2
- import { t } from "./useInteractionEffect-DtpbVd77.js";
3
- import { createContext as n, forwardRef as r, useContext as i } from "react";
4
- import { jsx as a, jsxs as o } from "react/jsx-runtime";
5
- //#region src/components/controls/MButtonGroup/MButtonGroupContext.ts
6
- var s = n(null);
7
- function c() {
8
- return i(s);
9
- }
10
- //#endregion
11
- //#region src/components/feedback/MSpinner/MSpinner.tsx
12
- function l({ color: t = "primary", size: n = "md", label: r = "Loading", className: i, style: o, ...s }) {
13
- let c = typeof n == "number" ? {
14
- width: `${n}px`,
15
- height: `${n}px`,
16
- ...o
17
- } : o || {};
18
- return /* @__PURE__ */ a("span", {
19
- className: e("spinner", typeof n == "string" && n, t && `color-${t}`, i),
20
- style: c,
21
- role: "status",
22
- "aria-label": r,
23
- ...s
24
- });
25
- }
26
- //#endregion
27
- //#region src/utils/overlayBadge.tsx
28
- function u(e) {
29
- return e != null && e !== !1;
30
- }
31
- function d({ badge: e, badgeColor: t, badgePulsing: n }) {
32
- return u(e);
33
- }
34
- function f({ badge: t, badgeColor: n = "primary", badgePulsing: r = !1, className: i }) {
35
- if (!d({
36
- badge: t,
37
- badgeColor: n,
38
- badgePulsing: r
39
- })) return null;
40
- let o = t === !0;
41
- return /* @__PURE__ */ a("span", {
42
- className: e("overlay-badge", `color-${n}`, o && "dot", r && "pulsing", i),
43
- "aria-hidden": "true",
44
- children: o ? null : t
45
- });
46
- }
47
- //#endregion
48
- //#region src/components/controls/MButton/MButton.tsx
49
- var p = r(function({ component: n, to: r, href: i, variant: s, size: u, color: d, fullWidth: p = !1, rounded: m = !1, shape: h, iconOnly: g = !1, loading: _ = !1, active: v = !1, pulsing: y = !1, badge: b, badgeColor: x, badgePulsing: S = !1, startIcon: C, endIcon: w, clickEffect: T = "ripple", rippleColor: E, className: D, style: O, children: k, disabled: A = !1, type: j = "button", onClick: M, onPointerDown: N, onKeyDown: P, ...F }, I) {
50
- let L = n ?? "button", R = !n || L === "button", z = c(), B = s ?? z?.variant ?? "filled", V = u ?? z?.size ?? "md", H = d ?? z?.color ?? "primary", U = A || _, { effectClassName: W, effectLayer: G, handlePointerDown: K, triggerEffect: q } = t({
51
- effect: T,
52
- disabled: U,
53
- centered: g,
54
- color: E
55
- });
56
- function J(e) {
57
- if (U && !R) {
58
- e.preventDefault();
59
- return;
60
- }
61
- M?.(e);
62
- }
63
- return /* @__PURE__ */ o(L, {
64
- ref: I,
65
- type: R ? j : void 0,
66
- to: n ? U ? void 0 : r : void 0,
67
- href: n ? U ? void 0 : i : void 0,
68
- className: e("button", B, V, `color-${H}`, p && "full-width", m && "rounded", h === "circle" && "circle", g && "icon-only", _ && "loading", v && "active", y && "pulsing", U && "disabled", W, D),
69
- style: O,
70
- disabled: R ? U : void 0,
71
- "aria-busy": _ || void 0,
72
- "aria-disabled": !R && U ? !0 : void 0,
73
- onClick: J,
74
- onPointerDown: (e) => {
75
- K(e), N?.(e);
76
- },
77
- onKeyDown: (e) => {
78
- (e.key === " " || e.key === "Enter") && q(e.currentTarget), P?.(e);
79
- },
80
- ...F,
81
- children: [
82
- G,
83
- f({
84
- badge: b,
85
- badgeColor: x,
86
- badgePulsing: S
87
- }),
88
- _ && /* @__PURE__ */ a(l, {
89
- size: "sm",
90
- color: "inherit",
91
- "aria-hidden": "true"
92
- }),
93
- C && /* @__PURE__ */ a("span", {
94
- className: "icon start",
95
- children: C
96
- }),
97
- k && /* @__PURE__ */ a("span", {
98
- className: "content",
99
- children: k
100
- }),
101
- w && /* @__PURE__ */ a("span", {
102
- className: "icon end",
103
- children: w
104
- })
105
- ]
106
- });
107
- });
108
- //#endregion
109
- export { s as i, f as n, l as r, p as t };
110
-
111
- //# sourceMappingURL=MButton-BmTDe5Oa.js.map
@@ -1,19 +0,0 @@
1
- import { t as e } from "./cn-YER3QsV1.js";
2
- import { n as t } from "./MText-DX9O7gh7.js";
3
- import { createElement as n } from "react";
4
- //#region src/components/typography/MHeading/MHeading.tsx
5
- function r({ level: r = 2, tone: i = "default", color: a, truncate: o, className: s, style: c, children: l, ...u }) {
6
- let d = typeof o == "number" ? o : void 0;
7
- return n(`h${r}`, {
8
- className: e("heading", `h${r}`, !a && i, o === !0 && "truncate", d != null && "line-clamp", ...t({ color: a }), s),
9
- style: d ? {
10
- "--line-clamp": d,
11
- ...c
12
- } : c,
13
- ...u
14
- }, l);
15
- }
16
- //#endregion
17
- export { r as t };
18
-
19
- //# sourceMappingURL=MHeading-C3IgV22T.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MHeading-C3IgV22T.js","names":[],"sources":["../src/components/typography/MHeading/MHeading.tsx"],"sourcesContent":["import {createElement} from 'react'\nimport type {CSSProperties} from 'react'\nimport type {MHeadingProps} from './MHeading.types'\nimport {cn} from '../../../utils/cn'\nimport {getAppearanceClassNames} from '../../../utils/appearanceProps'\nimport './MHeading.css'\n\n// Render semantic heading levels with shared MineralUI typography tokens.\nexport function MHeading({\n level = 2,\n tone = 'default',\n color,\n truncate,\n className,\n style,\n children,\n ...rest\n}: MHeadingProps) {\n const lines = typeof truncate === 'number' ? truncate : undefined\n\n return createElement(\n `h${level}`,\n {\n className: cn(\n 'heading',\n `h${level}`,\n !color && tone,\n truncate === true && 'truncate',\n lines != null && 'line-clamp',\n ...getAppearanceClassNames({color}),\n className\n ),\n style: lines ? ({'--line-clamp': lines, ...style} as CSSProperties) : style,\n ...rest,\n },\n children\n )\n}\n"],"mappings":";;;;AAQA,SAAgB,EAAS,EACrB,WAAQ,GACR,UAAO,WACP,UACA,aACA,cACA,UACA,aACA,GAAG,KACW;CACd,IAAM,IAAQ,OAAO,KAAa,WAAW,IAAW,KAAA;AAExD,QAAO,EACH,IAAI,KACJ;EACI,WAAW,EACP,WACA,IAAI,KACJ,CAAC,KAAS,GACV,MAAa,MAAQ,YACrB,KAAS,QAAQ,cACjB,GAAG,EAAwB,EAAC,UAAM,CAAC,EACnC,EACH;EACD,OAAO,IAAS;GAAC,gBAAgB;GAAO,GAAG;GAAM,GAAqB;EACtE,GAAG;EACN,EACD,EACH"}
@@ -1,2 +0,0 @@
1
- const e=require(`./cn-CU5TNITO.cjs`),t=require(`./MText-CxSZ2md0.cjs`);let n=require(`react`);function r({level:r=2,tone:i=`default`,color:a,truncate:o,className:s,style:c,children:l,...u}){let d=typeof o==`number`?o:void 0;return(0,n.createElement)(`h${r}`,{className:e.t(`heading`,`h${r}`,!a&&i,o===!0&&`truncate`,d!=null&&`line-clamp`,...t.n({color:a}),s),style:d?{"--line-clamp":d,...c}:c,...u},l)}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return r}});
2
- //# sourceMappingURL=MHeading-DqvWKia1.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MHeading-DqvWKia1.cjs","names":[],"sources":["../src/components/typography/MHeading/MHeading.tsx"],"sourcesContent":["import {createElement} from 'react'\nimport type {CSSProperties} from 'react'\nimport type {MHeadingProps} from './MHeading.types'\nimport {cn} from '../../../utils/cn'\nimport {getAppearanceClassNames} from '../../../utils/appearanceProps'\nimport './MHeading.css'\n\n// Render semantic heading levels with shared MineralUI typography tokens.\nexport function MHeading({\n level = 2,\n tone = 'default',\n color,\n truncate,\n className,\n style,\n children,\n ...rest\n}: MHeadingProps) {\n const lines = typeof truncate === 'number' ? truncate : undefined\n\n return createElement(\n `h${level}`,\n {\n className: cn(\n 'heading',\n `h${level}`,\n !color && tone,\n truncate === true && 'truncate',\n lines != null && 'line-clamp',\n ...getAppearanceClassNames({color}),\n className\n ),\n style: lines ? ({'--line-clamp': lines, ...style} as CSSProperties) : style,\n ...rest,\n },\n children\n )\n}\n"],"mappings":"8FAQA,SAAgB,EAAS,CACrB,QAAQ,EACR,OAAO,UACP,QACA,WACA,YACA,QACA,WACA,GAAG,GACW,CACd,IAAM,EAAQ,OAAO,GAAa,SAAW,EAAW,IAAA,GAExD,OAAA,EAAA,EAAA,eACI,IAAI,IACJ,CACI,UAAW,EAAA,EACP,UACA,IAAI,IACJ,CAAC,GAAS,EACV,IAAa,IAAQ,WACrB,GAAS,MAAQ,aACjB,GAAG,EAAA,EAAwB,CAAC,QAAM,CAAC,CACnC,EACH,CACD,MAAO,EAAS,CAAC,eAAgB,EAAO,GAAG,EAAM,CAAqB,EACtE,GAAG,EACN,CACD,EACH"}
@@ -1,49 +0,0 @@
1
- import { t as e } from "./cn-YER3QsV1.js";
2
- import { t } from "./useInteractionEffect-DtpbVd77.js";
3
- import { t as n } from "./MSkeleton-CauCfkzj.js";
4
- import { useState as r } from "react";
5
- import { jsx as i, jsxs as a } from "react/jsx-runtime";
6
- //#region src/components/media/MImage/MImage.tsx
7
- var o = {
8
- "1:1": "1 / 1",
9
- "4:3": "4 / 3",
10
- "16:9": "16 / 9",
11
- "21:9": "21 / 9"
12
- };
13
- function s({ fit: s = "cover", ratio: c = "auto", rounded: l = !1, bordered: u = !1, shadow: d = !1, clickEffect: f = "none", fallback: p, skeleton: m = !1, className: h, style: g, alt: _, onError: v, ...y }) {
14
- let [b, x] = r(!1), { effectClassName: S, effectLayer: C, handlePointerDown: w } = t({ effect: m ? "none" : f }), T = (e) => {
15
- p && !b && (x(!0), e.currentTarget.src = p), v?.(e);
16
- }, E = c !== "auto" && !!o[c], D = E ? {
17
- aspectRatio: o[c],
18
- ...g
19
- } : g;
20
- if (m) return /* @__PURE__ */ i(n, {
21
- variant: "rectangle",
22
- animate: "pulse",
23
- className: e("image-skeleton", l && "rounded", u && "bordered", h),
24
- style: D,
25
- "aria-label": "Loading"
26
- });
27
- let O = e("image", s, !C && l && "rounded", !C && u && "bordered", !C && d && "shadow");
28
- return C ? /* @__PURE__ */ a("span", {
29
- className: e("image-wrap", E && "has-ratio", l && "rounded", u && "bordered", d && "shadow", S, h),
30
- style: D,
31
- onPointerDown: w,
32
- children: [C, /* @__PURE__ */ i("img", {
33
- className: O,
34
- onError: T,
35
- ...y,
36
- alt: _ ?? ""
37
- })]
38
- }) : /* @__PURE__ */ i("img", {
39
- className: e(O, h),
40
- style: D,
41
- onError: T,
42
- ...y,
43
- alt: _ ?? ""
44
- });
45
- }
46
- //#endregion
47
- export { s as t };
48
-
49
- //# sourceMappingURL=MImage-BDcrV6IC.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MImage-BDcrV6IC.js","names":[],"sources":["../src/components/media/MImage/MImage.tsx"],"sourcesContent":["import {useState} from 'react'\nimport type * as React from 'react'\nimport type {MImageProps} from './MImage.types'\nimport {cn} from '../../../utils/cn'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport {MSkeleton} from '../../feedback'\nimport './MImage.css'\n\nconst RATIO_MAP: Record<string, string> = {\n '1:1': '1 / 1',\n '4:3': '4 / 3',\n '16:9': '16 / 9',\n '21:9': '21 / 9',\n}\n\n// Render a styled image with aspect ratio, fit, and optional fallback.\nexport function MImage({\n fit = 'cover',\n ratio = 'auto',\n rounded = false,\n bordered = false,\n shadow = false,\n clickEffect = 'none',\n fallback,\n skeleton = false,\n className,\n style,\n alt,\n onError,\n ...rest\n}: MImageProps) {\n const [errored, setErrored] = useState(false)\n const {effectClassName, effectLayer, handlePointerDown} = useInteractionEffect<HTMLSpanElement>({\n effect: skeleton ? 'none' : clickEffect,\n })\n\n const handleError = (e: React.SyntheticEvent<HTMLImageElement>) => {\n if (fallback && !errored) {\n setErrored(true)\n e.currentTarget.src = fallback\n }\n onError?.(e)\n }\n\n const hasFixedRatio = ratio !== 'auto' && !!RATIO_MAP[ratio]\n const ratioStyle = hasFixedRatio ? {aspectRatio: RATIO_MAP[ratio], ...style} : style\n\n // Skeleton placeholder\n if (skeleton) {\n return (\n <MSkeleton\n variant=\"rectangle\"\n animate=\"pulse\"\n className={cn('image-skeleton', rounded && 'rounded', bordered && 'bordered', className)}\n style={ratioStyle}\n aria-label=\"Loading\"\n />\n )\n }\n\n const imgClassName = cn(\n 'image',\n fit,\n !effectLayer && rounded && 'rounded',\n !effectLayer && bordered && 'bordered',\n !effectLayer && shadow && 'shadow'\n )\n\n if (effectLayer) {\n return (\n <span\n className={cn(\n 'image-wrap',\n hasFixedRatio && 'has-ratio',\n rounded && 'rounded',\n bordered && 'bordered',\n shadow && 'shadow',\n effectClassName,\n className\n )}\n style={ratioStyle}\n onPointerDown={handlePointerDown}\n >\n {effectLayer}\n <img className={imgClassName} onError={handleError} {...rest} alt={alt ?? ''} />\n </span>\n )\n }\n\n return (\n <img\n className={cn(imgClassName, className)}\n style={ratioStyle}\n onError={handleError}\n {...rest}\n alt={alt ?? ''}\n />\n )\n}\n"],"mappings":";;;;;;AAQA,IAAM,IAAoC;CACtC,OAAO;CACP,OAAO;CACP,QAAQ;CACR,QAAQ;CACX;AAGD,SAAgB,EAAO,EACnB,SAAM,SACN,WAAQ,QACR,aAAU,IACV,cAAW,IACX,YAAS,IACT,iBAAc,QACd,aACA,cAAW,IACX,cACA,UACA,QACA,YACA,GAAG,KACS;CACZ,IAAM,CAAC,GAAS,KAAc,EAAS,GAAM,EACvC,EAAC,oBAAiB,gBAAa,yBAAqB,EAAsC,EAC5F,QAAQ,IAAW,SAAS,GAC/B,CAAC,EAEI,KAAe,MAA8C;AAK/D,EAJI,KAAY,CAAC,MACb,EAAW,GAAK,EAChB,EAAE,cAAc,MAAM,IAE1B,IAAU,EAAE;IAGV,IAAgB,MAAU,UAAU,CAAC,CAAC,EAAU,IAChD,IAAa,IAAgB;EAAC,aAAa,EAAU;EAAQ,GAAG;EAAM,GAAG;AAG/E,KAAI,EACA,QACI,kBAAC,GAAD;EACI,SAAQ;EACR,SAAQ;EACR,WAAW,EAAG,kBAAkB,KAAW,WAAW,KAAY,YAAY,EAAU;EACxF,OAAO;EACP,cAAW;EACb,CAAA;CAIV,IAAM,IAAe,EACjB,SACA,GACA,CAAC,KAAe,KAAW,WAC3B,CAAC,KAAe,KAAY,YAC5B,CAAC,KAAe,KAAU,SAC7B;AAuBD,QArBI,IAEI,kBAAC,QAAD;EACI,WAAW,EACP,cACA,KAAiB,aACjB,KAAW,WACX,KAAY,YACZ,KAAU,UACV,GACA,EACH;EACD,OAAO;EACP,eAAe;YAXnB,CAaK,GACD,kBAAC,OAAD;GAAK,WAAW;GAAc,SAAS;GAAa,GAAI;GAAM,KAAK,KAAO;GAAM,CAAA,CAC7E;MAKX,kBAAC,OAAD;EACI,WAAW,EAAG,GAAc,EAAU;EACtC,OAAO;EACP,SAAS;EACT,GAAI;EACJ,KAAK,KAAO;EACd,CAAA"}