@banzamel/mineralui 1.2.0 → 1.3.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 (269) hide show
  1. package/README.md +1 -1
  2. package/dist/MAvatar-B4Y9P5ua.js +57 -0
  3. package/dist/MAvatar-B4Y9P5ua.js.map +1 -0
  4. package/dist/MAvatar-D4ZC9wml.cjs +2 -0
  5. package/dist/MAvatar-D4ZC9wml.cjs.map +1 -0
  6. package/dist/MBadge-BaeeIRhu.js +19 -0
  7. package/dist/MBadge-BaeeIRhu.js.map +1 -0
  8. package/dist/MBadge-DJuqtMP7.cjs +2 -0
  9. package/dist/MBadge-DJuqtMP7.cjs.map +1 -0
  10. package/dist/MButton-Rg85cgO1.cjs +2 -0
  11. package/dist/{MButton-B8rXmFX9.cjs.map → MButton-Rg85cgO1.cjs.map} +1 -1
  12. package/dist/MButton-pSNx-6UK.js +113 -0
  13. package/dist/{MButton-BmTDe5Oa.js.map → MButton-pSNx-6UK.js.map} +1 -1
  14. package/dist/{MDataTable-Cqwkiq7A.js → MDataTable-D5SnGm3D.js} +3 -3
  15. package/dist/{MDataTable-Cqwkiq7A.js.map → MDataTable-D5SnGm3D.js.map} +1 -1
  16. package/dist/{MDataTable-BI7wFZYN.cjs → MDataTable-_afEvx2S.cjs} +2 -2
  17. package/dist/{MDataTable-BI7wFZYN.cjs.map → MDataTable-_afEvx2S.cjs.map} +1 -1
  18. package/dist/{MDrawer-CSvjLrhB.cjs → MDrawer-2NDNRU77.cjs} +2 -2
  19. package/dist/{MDrawer-CSvjLrhB.cjs.map → MDrawer-2NDNRU77.cjs.map} +1 -1
  20. package/dist/{MDrawer-DXHtAckQ.js → MDrawer-CHvOVWPw.js} +2 -2
  21. package/dist/{MDrawer-DXHtAckQ.js.map → MDrawer-CHvOVWPw.js.map} +1 -1
  22. package/dist/MHeading-C5s-kb2D.js +21 -0
  23. package/dist/MHeading-C5s-kb2D.js.map +1 -0
  24. package/dist/MHeading-CvAYmqMN.cjs +2 -0
  25. package/dist/MHeading-CvAYmqMN.cjs.map +1 -0
  26. package/dist/MImage-DqAx0_B0.cjs +2 -0
  27. package/dist/MImage-DqAx0_B0.cjs.map +1 -0
  28. package/dist/MImage-F34N1nhB.js +53 -0
  29. package/dist/MImage-F34N1nhB.js.map +1 -0
  30. package/dist/MInline-BKY7arDg.js +41 -0
  31. package/dist/MInline-BKY7arDg.js.map +1 -0
  32. package/dist/MInline-FgdIt6kv.cjs +2 -0
  33. package/dist/MInline-FgdIt6kv.cjs.map +1 -0
  34. package/dist/{MInput-W7DJQ_ng.cjs → MInput-C_Prnehc.cjs} +2 -2
  35. package/dist/{MInput-W7DJQ_ng.cjs.map → MInput-C_Prnehc.cjs.map} +1 -1
  36. package/dist/{MInput-BSaKw0Uc.js → MInput-DI066RK9.js} +2 -2
  37. package/dist/{MInput-BSaKw0Uc.js.map → MInput-DI066RK9.js.map} +1 -1
  38. package/dist/{MInputCVC-DH_bjV5R.cjs → MInputCVC-B75iBIRt.cjs} +2 -2
  39. package/dist/{MInputCVC-DH_bjV5R.cjs.map → MInputCVC-B75iBIRt.cjs.map} +1 -1
  40. package/dist/{MInputCVC-Dqbl1zG9.js → MInputCVC-BlBZjRft.js} +2 -2
  41. package/dist/{MInputCVC-Dqbl1zG9.js.map → MInputCVC-BlBZjRft.js.map} +1 -1
  42. package/dist/{MInputSearch-C7betxTa.cjs → MInputSearch-BKQnKS-9.cjs} +2 -2
  43. package/dist/{MInputSearch-C7betxTa.cjs.map → MInputSearch-BKQnKS-9.cjs.map} +1 -1
  44. package/dist/{MInputSearch-CH5ZcjLq.js → MInputSearch-CBsBsuqu.js} +2 -2
  45. package/dist/{MInputSearch-CH5ZcjLq.js.map → MInputSearch-CBsBsuqu.js.map} +1 -1
  46. package/dist/MLink-BgYBHhce.js +31 -0
  47. package/dist/{MLink-ODytrwne.js.map → MLink-BgYBHhce.js.map} +1 -1
  48. package/dist/MLink-DmB3rcWB.cjs +2 -0
  49. package/dist/{MLink-DHryXq_D.cjs.map → MLink-DmB3rcWB.cjs.map} +1 -1
  50. package/dist/{MModal-pMcPs3pw.cjs → MModal-BaA098nr.cjs} +2 -2
  51. package/dist/{MModal-pMcPs3pw.cjs.map → MModal-BaA098nr.cjs.map} +1 -1
  52. package/dist/{MModal-DShADuLw.js → MModal-DXZ2SrJt.js} +2 -2
  53. package/dist/{MModal-DShADuLw.js.map → MModal-DXZ2SrJt.js.map} +1 -1
  54. package/dist/{MPagination-B7aho7rQ.js → MPagination-BFI_z3y6.js} +2 -2
  55. package/dist/{MPagination-B7aho7rQ.js.map → MPagination-BFI_z3y6.js.map} +1 -1
  56. package/dist/{MPagination-BWHAVgWN.cjs → MPagination-C6hnhbTp.cjs} +2 -2
  57. package/dist/{MPagination-BWHAVgWN.cjs.map → MPagination-C6hnhbTp.cjs.map} +1 -1
  58. package/dist/{MQrCode-6Cz9B7Qy.js → MQrCode-DfZwkhZV.js} +2 -2
  59. package/dist/{MQrCode-6Cz9B7Qy.js.map → MQrCode-DfZwkhZV.js.map} +1 -1
  60. package/dist/{MQrCode-Bp2CWpmX.cjs → MQrCode-L0trT6n3.cjs} +2 -2
  61. package/dist/{MQrCode-Bp2CWpmX.cjs.map → MQrCode-L0trT6n3.cjs.map} +1 -1
  62. package/dist/{MSkeleton-BfRBJ6ku.cjs → MSkeleton-BEdflu0F.cjs} +2 -2
  63. package/dist/{MSkeleton-BfRBJ6ku.cjs.map → MSkeleton-BEdflu0F.cjs.map} +1 -1
  64. package/dist/{MSkeleton-CauCfkzj.js → MSkeleton-DX9gJ311.js} +2 -2
  65. package/dist/{MSkeleton-CauCfkzj.js.map → MSkeleton-DX9gJ311.js.map} +1 -1
  66. package/dist/MStack-BgwBqm-V.cjs +2 -0
  67. package/dist/MStack-BgwBqm-V.cjs.map +1 -0
  68. package/dist/MStack-Dk0GNVBT.js +41 -0
  69. package/dist/MStack-Dk0GNVBT.js.map +1 -0
  70. package/dist/MSubText-D8VxE877.cjs +2 -0
  71. package/dist/MSubText-D8VxE877.cjs.map +1 -0
  72. package/dist/MSubText-DwNeDGYg.js +17 -0
  73. package/dist/MSubText-DwNeDGYg.js.map +1 -0
  74. package/dist/MSurface-CFbX5C63.cjs +2 -0
  75. package/dist/MSurface-CFbX5C63.cjs.map +1 -0
  76. package/dist/MSurface-COlEjDyo.js +41 -0
  77. package/dist/MSurface-COlEjDyo.js.map +1 -0
  78. package/dist/MTag-DZjcHYn0.cjs +2 -0
  79. package/dist/MTag-DZjcHYn0.cjs.map +1 -0
  80. package/dist/MTag-wsCYRndK.js +39 -0
  81. package/dist/MTag-wsCYRndK.js.map +1 -0
  82. package/dist/MText-CexZuJgV.js +45 -0
  83. package/dist/MText-CexZuJgV.js.map +1 -0
  84. package/dist/MText-YIBipYLh.cjs +2 -0
  85. package/dist/MText-YIBipYLh.cjs.map +1 -0
  86. package/dist/{cards-BE77zKTI.js → cards-BguCbFp7.js} +10 -10
  87. package/dist/{cards-BE77zKTI.js.map → cards-BguCbFp7.js.map} +1 -1
  88. package/dist/{cards-BINs-dmS.cjs → cards-DgOG2sWk.cjs} +2 -2
  89. package/dist/{cards-BINs-dmS.cjs.map → cards-DgOG2sWk.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 +2 -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/MStack/MStack.d.ts +1 -1
  119. package/dist/components/layout/MStack/MStack.types.d.ts +2 -1
  120. package/dist/components/layout/MSurface/MSurface.d.ts +1 -1
  121. package/dist/components/layout/MSurface/MSurface.types.d.ts +2 -1
  122. package/dist/components/layout/MTopbar/MTopbar.d.ts +1 -1
  123. package/dist/components/layout/MTopbar/MTopbar.types.d.ts +2 -2
  124. package/dist/components/media/MAvatar/MAvatar.d.ts +1 -1
  125. package/dist/components/media/MAvatar/MAvatar.types.d.ts +2 -2
  126. package/dist/components/media/MAvatarStack/MAvatarStack.d.ts +1 -1
  127. package/dist/components/media/MAvatarStack/MAvatarStack.types.d.ts +2 -2
  128. package/dist/components/media/MImage/MImage.d.ts +1 -1
  129. package/dist/components/media/MImage/MImage.types.d.ts +2 -1
  130. package/dist/components/typography/MHeading/MHeading.d.ts +563 -2
  131. package/dist/components/typography/MHeading/MHeading.types.d.ts +2 -2
  132. package/dist/components/typography/MLink/MLink.types.d.ts +2 -1
  133. package/dist/components/typography/MSubText/MSubText.d.ts +1 -1
  134. package/dist/components/typography/MSubText/MSubText.types.d.ts +2 -2
  135. package/dist/components/typography/MText/MText.d.ts +1 -1
  136. package/dist/components/typography/MText/MText.types.d.ts +2 -2
  137. package/dist/controls-CN5d1q6e.cjs +2 -0
  138. package/dist/{controls-DwL1-nVC.cjs.map → controls-CN5d1q6e.cjs.map} +1 -1
  139. package/dist/{controls-BMwQ3C1R.js → controls-CVdInuMI.js} +145 -143
  140. package/dist/{controls-BMwQ3C1R.js.map → controls-CVdInuMI.js.map} +1 -1
  141. package/dist/controls.cjs +1 -1
  142. package/dist/controls.js +2 -2
  143. package/dist/data-BZ3Uio4Z.cjs +2 -0
  144. package/dist/data-BZ3Uio4Z.cjs.map +1 -0
  145. package/dist/{data-s8Hkht1B.js → data-BpGAUxCL.js} +751 -750
  146. package/dist/data-BpGAUxCL.js.map +1 -0
  147. package/dist/data.cjs +1 -1
  148. package/dist/data.js +2 -2
  149. package/dist/{display-B0lpgApV.cjs → display-CCG1eb0m.cjs} +2 -2
  150. package/dist/{display-B0lpgApV.cjs.map → display-CCG1eb0m.cjs.map} +1 -1
  151. package/dist/{display-DuBRiEKr.js → display-gwrOWH2c.js} +3 -3
  152. package/dist/{display-DuBRiEKr.js.map → display-gwrOWH2c.js.map} +1 -1
  153. package/dist/display.cjs +1 -1
  154. package/dist/display.js +2 -2
  155. package/dist/{dropdowns-BcVrUMPE.js → dropdowns-CNKEy6vf.js} +4 -4
  156. package/dist/{dropdowns-BcVrUMPE.js.map → dropdowns-CNKEy6vf.js.map} +1 -1
  157. package/dist/{dropdowns-CK-oxd62.cjs → dropdowns-HY56LZkp.cjs} +2 -2
  158. package/dist/{dropdowns-CK-oxd62.cjs.map → dropdowns-HY56LZkp.cjs.map} +1 -1
  159. package/dist/dropdowns.cjs +1 -1
  160. package/dist/dropdowns.js +1 -1
  161. package/dist/{feedback-D3LLKNlY.js → feedback-BfSdnvUS.js} +304 -301
  162. package/dist/feedback-BfSdnvUS.js.map +1 -0
  163. package/dist/feedback-DkQNQVdK.cjs +2 -0
  164. package/dist/feedback-DkQNQVdK.cjs.map +1 -0
  165. package/dist/feedback.cjs +1 -1
  166. package/dist/feedback.js +5 -5
  167. package/dist/index.cjs +1 -1
  168. package/dist/index.js +59 -59
  169. package/dist/{inputs-bCxSLz-U.js → inputs-BO7bjvyf.js} +3 -3
  170. package/dist/{inputs-bCxSLz-U.js.map → inputs-BO7bjvyf.js.map} +1 -1
  171. package/dist/{inputs-Dcj6C_Fn.cjs → inputs-vov7Kj6q.cjs} +2 -2
  172. package/dist/{inputs-Dcj6C_Fn.cjs.map → inputs-vov7Kj6q.cjs.map} +1 -1
  173. package/dist/inputs.cjs +1 -1
  174. package/dist/inputs.js +4 -4
  175. package/dist/layout-BvKpFxol.js +905 -0
  176. package/dist/layout-BvKpFxol.js.map +1 -0
  177. package/dist/layout-TFV-1uoQ.cjs +2 -0
  178. package/dist/layout-TFV-1uoQ.cjs.map +1 -0
  179. package/dist/layout.cjs +1 -1
  180. package/dist/layout.js +5 -5
  181. package/dist/media-BhRjHzpA.cjs +2 -0
  182. package/dist/{media-D5YGOTm7.cjs.map → media-BhRjHzpA.cjs.map} +1 -1
  183. package/dist/{media-8aMOtckF.js → media-BuIEAgV-.js} +145 -143
  184. package/dist/{media-8aMOtckF.js.map → media-BuIEAgV-.js.map} +1 -1
  185. package/dist/media.cjs +1 -1
  186. package/dist/media.js +3 -3
  187. package/dist/{overlays-DCj-oV2H.cjs → overlays-CjEh_HWn.cjs} +2 -2
  188. package/dist/{overlays-DCj-oV2H.cjs.map → overlays-CjEh_HWn.cjs.map} +1 -1
  189. package/dist/{overlays-gjg00CAf.js → overlays-D1SAF1F_.js} +3 -3
  190. package/dist/{overlays-gjg00CAf.js.map → overlays-D1SAF1F_.js.map} +1 -1
  191. package/dist/overlays.cjs +1 -1
  192. package/dist/overlays.js +3 -3
  193. package/dist/style-runtime.cjs +1 -1
  194. package/dist/style-runtime.js +1 -1
  195. package/dist/styles.css +1 -1
  196. package/dist/theme/MTheme.types.d.ts +5 -0
  197. package/dist/theme/index.d.ts +2 -1
  198. package/dist/theme/responsive.d.ts +18 -0
  199. package/dist/{theme-DLorpkJc.cjs → theme-CyIOdO9W.cjs} +2 -2
  200. package/dist/theme-CyIOdO9W.cjs.map +1 -0
  201. package/dist/{theme-BV4qkzZU.js → theme-Dl4EpdnW.js} +14 -2
  202. package/dist/theme-Dl4EpdnW.js.map +1 -0
  203. package/dist/theme.cjs +1 -1
  204. package/dist/theme.js +2 -2
  205. package/dist/{typography-DKdr1Tds.js → typography-BrIbvz08.js} +2 -2
  206. package/dist/{typography-DKdr1Tds.js.map → typography-BrIbvz08.js.map} +1 -1
  207. package/dist/{typography-qbFGv1gA.cjs → typography-DHjL4YTH.cjs} +2 -2
  208. package/dist/{typography-qbFGv1gA.cjs.map → typography-DHjL4YTH.cjs.map} +1 -1
  209. package/dist/typography.cjs +1 -1
  210. package/dist/typography.js +5 -5
  211. package/package.json +1 -1
  212. package/dist/MAvatar-BoO51a6m.js +0 -55
  213. package/dist/MAvatar-BoO51a6m.js.map +0 -1
  214. package/dist/MAvatar-DJKtca9j.cjs +0 -2
  215. package/dist/MAvatar-DJKtca9j.cjs.map +0 -1
  216. package/dist/MBadge-CexVV675.cjs +0 -2
  217. package/dist/MBadge-CexVV675.cjs.map +0 -1
  218. package/dist/MBadge-Y1JnZiIC.js +0 -17
  219. package/dist/MBadge-Y1JnZiIC.js.map +0 -1
  220. package/dist/MButton-B8rXmFX9.cjs +0 -2
  221. package/dist/MButton-BmTDe5Oa.js +0 -111
  222. package/dist/MHeading-C3IgV22T.js +0 -19
  223. package/dist/MHeading-C3IgV22T.js.map +0 -1
  224. package/dist/MHeading-DqvWKia1.cjs +0 -2
  225. package/dist/MHeading-DqvWKia1.cjs.map +0 -1
  226. package/dist/MImage-BDcrV6IC.js +0 -49
  227. package/dist/MImage-BDcrV6IC.js.map +0 -1
  228. package/dist/MImage-BsQJ_eYf.cjs +0 -2
  229. package/dist/MImage-BsQJ_eYf.cjs.map +0 -1
  230. package/dist/MInline-BAhu2zT-.cjs +0 -2
  231. package/dist/MInline-BAhu2zT-.cjs.map +0 -1
  232. package/dist/MInline-Dfy3Lrjs.js +0 -39
  233. package/dist/MInline-Dfy3Lrjs.js.map +0 -1
  234. package/dist/MLink-DHryXq_D.cjs +0 -2
  235. package/dist/MLink-ODytrwne.js +0 -29
  236. package/dist/MStack-Cifiqeb2.js +0 -39
  237. package/dist/MStack-Cifiqeb2.js.map +0 -1
  238. package/dist/MStack-lrvy7l3w.cjs +0 -2
  239. package/dist/MStack-lrvy7l3w.cjs.map +0 -1
  240. package/dist/MSubText-78oYdJQy.cjs +0 -2
  241. package/dist/MSubText-78oYdJQy.cjs.map +0 -1
  242. package/dist/MSubText-C2oxXwKT.js +0 -15
  243. package/dist/MSubText-C2oxXwKT.js.map +0 -1
  244. package/dist/MSurface-B1LXFczo.js +0 -39
  245. package/dist/MSurface-B1LXFczo.js.map +0 -1
  246. package/dist/MSurface-BgZ86iYn.cjs +0 -2
  247. package/dist/MSurface-BgZ86iYn.cjs.map +0 -1
  248. package/dist/MTag-C4_rBj4b.cjs +0 -2
  249. package/dist/MTag-C4_rBj4b.cjs.map +0 -1
  250. package/dist/MTag-DOcKm3c2.js +0 -37
  251. package/dist/MTag-DOcKm3c2.js.map +0 -1
  252. package/dist/MText-CxSZ2md0.cjs +0 -2
  253. package/dist/MText-CxSZ2md0.cjs.map +0 -1
  254. package/dist/MText-DX9O7gh7.js +0 -43
  255. package/dist/MText-DX9O7gh7.js.map +0 -1
  256. package/dist/controls-DwL1-nVC.cjs +0 -2
  257. package/dist/data-BESfox0z.cjs +0 -2
  258. package/dist/data-BESfox0z.cjs.map +0 -1
  259. package/dist/data-s8Hkht1B.js.map +0 -1
  260. package/dist/feedback-D3LLKNlY.js.map +0 -1
  261. package/dist/feedback-DYjg0Dbp.cjs +0 -2
  262. package/dist/feedback-DYjg0Dbp.cjs.map +0 -1
  263. package/dist/layout-Cb94o3oU.js +0 -891
  264. package/dist/layout-Cb94o3oU.js.map +0 -1
  265. package/dist/layout-DgfsQ-Tn.cjs +0 -2
  266. package/dist/layout-DgfsQ-Tn.cjs.map +0 -1
  267. package/dist/media-D5YGOTm7.cjs +0 -2
  268. package/dist/theme-BV4qkzZU.js.map +0 -1
  269. package/dist/theme-DLorpkJc.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"media-D5YGOTm7.cjs","names":[],"sources":["../src/components/media/MGallery/MGallery.tsx","../src/components/media/MCarousel/MCarousel.tsx","../src/components/media/mediaInteraction.ts","../src/components/media/MShowcaseCarouselItem/MShowcaseCarouselItem.tsx","../src/components/media/MShowcaseCarousel/MShowcaseCarousel.tsx","../src/components/media/MMasonry/MMasonry.tsx","../src/components/media/MMasonryItem/MMasonryItem.tsx","../src/components/media/MAvatarStack/MAvatarStack.tsx"],"sourcesContent":["import type {MGalleryProps} from './MGallery.types'\nimport {cn} from '../../../utils/cn'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport './MGallery.css'\n\n// Render a responsive image grid gallery.\nexport function MGallery({\n items,\n columns = 3,\n rounded = true,\n clickEffect = 'ripple',\n className,\n ...rest\n}: MGalleryProps) {\n return (\n <div className={cn('gallery', `columns-${columns}`, className)} {...rest}>\n {items.map((item, i) => (\n <GalleryFigure key={i} item={item} rounded={rounded} clickEffect={clickEffect} />\n ))}\n </div>\n )\n}\n\nfunction GalleryFigure({\n item,\n rounded,\n clickEffect,\n}: {\n item: {src: string; alt?: string; caption?: string}\n rounded: boolean\n clickEffect: 'none' | 'ripple'\n}) {\n const {effectClassName, effectLayer, handlePointerDown} = useInteractionEffect<HTMLElement>({\n effect: clickEffect,\n })\n\n return (\n <figure className={cn('gallery-item', rounded && 'rounded', effectClassName)} onPointerDown={handlePointerDown}>\n <img className=\"gallery-image\" src={item.src} alt={item.alt || ''} loading=\"lazy\" />\n {item.caption && <figcaption className=\"gallery-caption\">{item.caption}</figcaption>}\n {effectLayer}\n </figure>\n )\n}\n","import {useState, useEffect, useCallback, useRef, Children} from 'react'\nimport type * as React from 'react'\nimport type {MCarouselProps} from './MCarousel.types'\nimport {cn} from '../../../utils/cn'\nimport {MButton} from '../../controls'\nimport {MChevronLeftIcon, MChevronRightIcon} from '../../../icons'\nimport './MCarousel.css'\n\n// Render a swipeable content slider with arrows, dots and transition modes.\nexport function MCarousel({\n autoPlay = false,\n interval = 5000,\n showDots = true,\n showArrows = true,\n loop = true,\n draggable = true,\n transition = 'slide',\n className,\n children,\n ...rest\n}: MCarouselProps) {\n const slides = Children.toArray(children)\n const count = slides.length\n const [active, setActive] = useState(0)\n const [dragOffset, setDragOffset] = useState(0)\n const [isDragging, setIsDragging] = useState(false)\n const dragStartX = useRef(0)\n const trackRef = useRef<HTMLDivElement>(null)\n\n const goTo = useCallback(\n (index: number) => {\n if (loop) {\n setActive((index + count) % count)\n } else {\n setActive(Math.max(0, Math.min(index, count - 1)))\n }\n },\n [count, loop]\n )\n\n const prev = useCallback(() => goTo(active - 1), [active, goTo])\n const next = useCallback(() => goTo(active + 1), [active, goTo])\n\n useEffect(() => {\n if (!autoPlay || count <= 1 || isDragging) return\n const timer = setInterval(next, interval)\n return () => clearInterval(timer)\n }, [autoPlay, interval, next, count, isDragging])\n\n const handleDragStart = (clientX: number) => {\n if (!draggable) return\n setIsDragging(true)\n dragStartX.current = clientX\n setDragOffset(0)\n }\n\n const handleDragMove = (clientX: number) => {\n if (!isDragging) return\n const diff = clientX - dragStartX.current\n setDragOffset(diff)\n }\n\n const handleDragEnd = () => {\n if (!isDragging) return\n setIsDragging(false)\n const threshold = 50\n if (dragOffset < -threshold) {\n next()\n } else if (dragOffset > threshold) {\n prev()\n }\n setDragOffset(0)\n }\n\n const onPointerDown = (e: React.PointerEvent) => {\n if (!draggable) return\n e.currentTarget.setPointerCapture(e.pointerId)\n handleDragStart(e.clientX)\n }\n\n const onPointerMove = (e: React.PointerEvent) => {\n handleDragMove(e.clientX)\n }\n\n const onPointerUp = () => {\n handleDragEnd()\n }\n\n if (count === 0) return null\n\n const isFade = transition === 'fade'\n const trackStyle = !isFade\n ? {transform: `translateX(calc(-${active * 100}% + ${isDragging ? dragOffset : 0}px))`}\n : undefined\n\n return (\n <div className={cn('carousel', isFade && 'fade', className)} {...rest}>\n <div\n className=\"carousel-viewport\"\n onPointerDown={onPointerDown}\n onPointerMove={onPointerMove}\n onPointerUp={onPointerUp}\n onPointerCancel={onPointerUp}\n style={{\n touchAction: draggable ? 'pan-y' : undefined,\n cursor: draggable ? (isDragging ? 'grabbing' : 'grab') : undefined,\n }}\n >\n <div ref={trackRef} className={cn('carousel-track', isDragging && 'dragging')} style={trackStyle}>\n {slides.map((slide, i) => (\n <div\n key={i}\n className={cn(\n 'carousel-slide',\n isFade && i === active && 'active',\n isFade && i !== active && 'hidden'\n )}\n >\n {slide}\n </div>\n ))}\n </div>\n </div>\n\n {showArrows && count > 1 && (\n <>\n <MButton\n variant=\"ghost\"\n color=\"primary\"\n iconOnly\n shape=\"circle\"\n onClick={prev}\n aria-label=\"Previous slide\"\n className=\"carousel-arrow carousel-arrow-prev\"\n >\n <MChevronLeftIcon />\n </MButton>\n <MButton\n variant=\"ghost\"\n color=\"primary\"\n iconOnly\n shape=\"circle\"\n onClick={next}\n aria-label=\"Next slide\"\n className=\"carousel-arrow carousel-arrow-next\"\n >\n <MChevronRightIcon />\n </MButton>\n </>\n )}\n\n {showDots && count > 1 && (\n <div className=\"carousel-dots\">\n {slides.map((_, i) => (\n <button\n key={i}\n className={cn('carousel-dot', i === active && 'active')}\n onClick={() => goTo(i)}\n aria-label={`Slide ${i + 1}`}\n type=\"button\"\n />\n ))}\n </div>\n )}\n </div>\n )\n}\n","import type {MClickEffect} from '../../utils/useInteractionEffect'\n\nexport type MMediaInteractionEffect = MClickEffect | 'zoom' | 'dim' | 'zoom-ripple'\n\nexport function usesRipple(effect: MMediaInteractionEffect): boolean {\n return effect === 'ripple' || effect === 'zoom-ripple'\n}\n\nexport function usesZoom(effect: MMediaInteractionEffect): boolean {\n return effect === 'zoom' || effect === 'zoom-ripple'\n}\n\nexport function usesDim(effect: MMediaInteractionEffect): boolean {\n return effect === 'dim'\n}\n","import type {CSSProperties} from 'react'\nimport {MCard, MCardBody, MCardFooter} from '../../cards'\nimport {MImage} from '../MImage'\nimport {cn} from '../../../utils/cn'\nimport {usesDim, usesRipple, usesZoom} from '../mediaInteraction'\nimport type {MShowcaseCarouselItemProps} from './MShowcaseCarouselItem.types'\nimport './MShowcaseCarouselItem.css'\n\nexport function MShowcaseCarouselItem({\n src,\n alt = '',\n media,\n mediaHeight,\n overlay,\n body,\n footer,\n interactive = false,\n imageClickEffect = 'ripple',\n ratio = '16:9',\n fit = 'cover',\n imgProps,\n children,\n}: MShowcaseCarouselItemProps) {\n const content = body ?? children\n const shouldRipple = usesRipple(imageClickEffect)\n const cardStyle = mediaHeight\n ? ({\n '--media-height': typeof mediaHeight === 'number' ? `${mediaHeight}px` : mediaHeight,\n } as CSSProperties)\n : undefined\n const hasMedia = Boolean(media || src)\n\n return (\n <MCard\n interactive={interactive}\n clickEffect={imageClickEffect !== 'none' ? 'none' : undefined}\n className={cn('showcase card', interactive && 'interactive')}\n style={cardStyle}\n >\n {hasMedia ? (\n <div\n className={cn(\n 'showcase media',\n usesZoom(imageClickEffect) && 'effect-zoom',\n usesDim(imageClickEffect) && 'effect-dim'\n )}\n >\n {media ? (\n <div className=\"showcase media-content\">{media}</div>\n ) : (\n <MImage\n {...imgProps}\n src={src}\n alt={alt}\n ratio={ratio}\n fit={fit}\n rounded\n shadow\n clickEffect={shouldRipple ? 'ripple' : 'none'}\n />\n )}\n {overlay ? <div className=\"showcase overlay\">{overlay}</div> : null}\n </div>\n ) : null}\n {content ? <MCardBody className=\"showcase body\">{content}</MCardBody> : null}\n {footer ? <MCardFooter className=\"showcase footer\">{footer}</MCardFooter> : null}\n </MCard>\n )\n}\n","import {Children, useCallback, useEffect, useMemo, useRef, useState} from 'react'\nimport type {CSSProperties, PointerEvent as ReactPointerEvent, ReactNode} from 'react'\nimport {MButton} from '../../controls'\nimport {MShowcaseCarouselItem} from '../MShowcaseCarouselItem'\nimport {MChevronLeftIcon, MChevronRightIcon} from '../../../icons'\nimport {cn} from '../../../utils/cn'\nimport type {MShowcaseCarouselProps, MShowcaseCarouselSlide} from './MShowcaseCarousel.types'\nimport './MShowcaseCarousel.css'\n\nfunction clamp(value: number, min: number, max: number) {\n return Math.min(Math.max(value, min), max)\n}\n\nfunction isInteractiveTarget(target: EventTarget | null) {\n if (!(target instanceof Element)) {\n return false\n }\n\n return !!target.closest(\n 'button, a, input, select, textarea, label, summary, [role=\"button\"], [role=\"link\"], [data-carousel-ignore-drag=\"true\"]'\n )\n}\n\nfunction getSlides<T>(items?: T[], renderItem?: (item: T, index: number) => ReactNode, children?: ReactNode) {\n if (items && renderItem) {\n return items.map((item, index) => renderItem(item, index))\n }\n\n if (items) {\n return items\n .map((item, index) => {\n if (!isShowcaseItem(item)) {\n return null\n }\n\n return <ShowcaseMediaSlide key={index} item={item} />\n })\n .filter(Boolean)\n }\n\n return Children.toArray(children)\n}\n\nfunction isShowcaseItem(value: unknown): value is MShowcaseCarouselSlide {\n const slide = value as {src?: unknown}\n return !!value && typeof value === 'object' && 'src' in value && typeof slide.src === 'string'\n}\n\nfunction ShowcaseMediaSlide({item}: {item: MShowcaseCarouselSlide}) {\n return <MShowcaseCarouselItem src={item.src} alt={item.alt || ''} overlay={item.overlay} />\n}\n\n// Show a centered, mouse-driven carousel with partial side previews.\nexport function MShowcaseCarousel<T = unknown>({\n items,\n renderItem,\n initialIndex,\n showButtons = true,\n loop = true,\n draggable = true,\n wheel = true,\n itemMinWidth = 220,\n itemMaxWidth = 520,\n itemWidthRatio = 0.56,\n className,\n children,\n style,\n ...rest\n}: MShowcaseCarouselProps<T>) {\n const slides = useMemo(() => getSlides(items, renderItem, children), [children, items, renderItem])\n const count = slides.length\n const [active, setActive] = useState(0)\n const [drag, setDrag] = useState(0)\n const [dragging, setDragging] = useState(false)\n const [stageWidth, setStageWidth] = useState(0)\n const stageRef = useRef<HTMLDivElement>(null)\n const startX = useRef(0)\n const wheelLock = useRef(false)\n\n const widthRatio =\n stageWidth < 640\n ? Math.max(itemWidthRatio, 0.78)\n : stageWidth < 960\n ? Math.max(itemWidthRatio, 0.66)\n : itemWidthRatio\n const itemWidth = clamp(stageWidth * widthRatio || itemMinWidth, itemMinWidth, itemMaxWidth)\n const itemGap = clamp(stageWidth * 0.022 || 16, 10, 24)\n\n useEffect(() => {\n const node = stageRef.current\n if (!node) return\n\n const update = () => setStageWidth(node.clientWidth)\n update()\n\n const observer = new ResizeObserver(update)\n observer.observe(node)\n\n return () => observer.disconnect()\n }, [])\n\n useEffect(() => {\n if (!count) return\n\n const defaultIndex = initialIndex ?? Math.floor((count - 1) / 2)\n setActive(clamp(defaultIndex, 0, count - 1))\n }, [count, initialIndex])\n\n const goTo = useCallback(\n (nextIndex: number) => {\n if (count < 1) return\n\n if (loop) {\n setActive((nextIndex + count) % count)\n return\n }\n\n setActive(clamp(nextIndex, 0, count - 1))\n },\n [count, loop]\n )\n\n const prev = useCallback(() => goTo(active - 1), [active, goTo])\n const next = useCallback(() => goTo(active + 1), [active, goTo])\n\n const onPointerDown = (event: ReactPointerEvent<HTMLDivElement>) => {\n if (!draggable || count <= 1) return\n if (isInteractiveTarget(event.target)) return\n event.currentTarget.setPointerCapture(event.pointerId)\n setDragging(true)\n startX.current = event.clientX\n setDrag(0)\n }\n\n const onPointerMove = (event: ReactPointerEvent<HTMLDivElement>) => {\n if (!dragging) return\n setDrag(event.clientX - startX.current)\n }\n\n const stopDrag = () => {\n if (!dragging) return\n\n const limit = Math.max(56, itemWidth * 0.12)\n\n if (drag <= -limit) {\n next()\n } else if (drag >= limit) {\n prev()\n }\n\n setDragging(false)\n setDrag(0)\n }\n\n useEffect(() => {\n const node = stageRef.current\n if (!node) return\n\n const handleWheel = (event: WheelEvent) => {\n if (!wheel || count <= 1 || wheelLock.current) return\n\n const axis = Math.abs(event.deltaX) > Math.abs(event.deltaY) ? event.deltaX : event.deltaY\n if (Math.abs(axis) < 28) return\n\n event.preventDefault()\n event.stopPropagation()\n\n wheelLock.current = true\n window.setTimeout(() => {\n wheelLock.current = false\n }, 260)\n\n if (axis > 0) {\n next()\n } else {\n prev()\n }\n }\n\n node.addEventListener('wheel', handleWheel, {passive: false})\n return () => node.removeEventListener('wheel', handleWheel)\n }, [count, next, prev, wheel])\n\n if (!count) return null\n\n const offset = stageWidth / 2 - active * (itemWidth + itemGap) - itemWidth / 2 + drag\n\n return (\n <div\n className={cn('showcase', className)}\n style={{...style, '--item-width': `${itemWidth}px`} as CSSProperties}\n {...rest}\n >\n <div\n ref={stageRef}\n className=\"showcase-stage\"\n onPointerDown={onPointerDown}\n onPointerMove={onPointerMove}\n onPointerUp={stopDrag}\n onPointerCancel={stopDrag}\n onPointerLeave={stopDrag}\n style={{\n cursor: draggable && count > 1 ? (dragging ? 'grabbing' : 'grab') : undefined,\n }}\n >\n <div\n className={cn('showcase-track', dragging && 'dragging')}\n style={{\n transform: `translateX(${offset}px)`,\n gap: `${itemGap}px`,\n }}\n >\n {slides.map((slide, index) => {\n const dist = Math.abs(index - active)\n\n return (\n <div\n key={index}\n className={cn(\n 'showcase-item',\n index === active && 'active',\n dist === 1 && 'near',\n dist >= 2 && 'far'\n )}\n style={{zIndex: Math.max(1, count - dist)}}\n >\n {slide}\n </div>\n )\n })}\n </div>\n </div>\n\n {showButtons && count > 1 && (\n <div className=\"showcase-actions\">\n <MButton\n type=\"button\"\n variant=\"secondary\"\n className=\"showcase-btn\"\n startIcon={<MChevronLeftIcon />}\n onClick={prev}\n >\n Previous\n </MButton>\n <MButton type=\"button\" className=\"showcase-btn\" endIcon={<MChevronRightIcon />} onClick={next}>\n Next\n </MButton>\n </div>\n )}\n </div>\n )\n}\n","import {Children} from 'react'\nimport type {ReactNode} from 'react'\nimport {cn} from '../../../utils/cn'\nimport type {MMasonryProps} from './MMasonry.types'\nimport './MMasonry.css'\n\nfunction getItems<T>(items?: T[], renderItem?: (item: T, index: number) => ReactNode, children?: ReactNode) {\n if (items && renderItem) {\n return items.map((item, index) => renderItem(item, index))\n }\n\n return Children.toArray(children)\n}\n\n// Render a responsive masonry wall for images, cards and uneven content.\nexport function MMasonry<T = unknown>({\n items,\n renderItem,\n columns = 3,\n className,\n children,\n style,\n ...rest\n}: MMasonryProps<T>) {\n const content = getItems(items, renderItem, children)\n\n if (!content.length) return null\n\n return (\n <div className={cn('masonry', className)} style={{...style, columnCount: columns}} {...rest}>\n {content.map((item, index) => (\n <div key={index} className=\"masonry item\">\n {item}\n </div>\n ))}\n </div>\n )\n}\n","import {MCard, MCardBody, MCardFooter} from '../../cards'\nimport {cn} from '../../../utils/cn'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport {usesDim, usesRipple, usesZoom} from '../mediaInteraction'\nimport './MMasonryItem.css'\nimport type {MMasonryItemProps} from './MMasonryItem.types'\n\nexport function MMasonryItem({\n src,\n alt = '',\n height,\n overlay,\n body,\n footer,\n interactive = false,\n imageClickEffect = 'none',\n imgProps,\n children,\n}: MMasonryItemProps) {\n const imgStyle = height ? {...imgProps?.style, height} : imgProps?.style\n const content = body ?? children\n const shouldRipple = usesRipple(imageClickEffect)\n const {effectClassName, effectLayer, handlePointerDown} = useInteractionEffect<HTMLDivElement>({\n effect: shouldRipple ? 'ripple' : 'none',\n })\n\n return (\n <MCard\n interactive={interactive}\n clickEffect={imageClickEffect !== 'none' ? 'none' : undefined}\n className={cn('masonry card', interactive && 'interactive')}\n >\n <div\n className={cn(\n 'masonry media',\n effectClassName,\n usesZoom(imageClickEffect) && 'effect-zoom',\n usesDim(imageClickEffect) && 'effect-dim'\n )}\n onPointerDown={(event) => {\n const target = event.target as HTMLElement\n\n if (target.closest('.masonry.overlay')) {\n return\n }\n\n handlePointerDown(event)\n }}\n >\n <img {...imgProps} src={src} alt={alt} className=\"masonry img\" style={imgStyle} />\n {overlay ? <div className=\"masonry overlay\">{overlay}</div> : null}\n {effectLayer}\n </div>\n {content ? <MCardBody className=\"masonry body\">{content}</MCardBody> : null}\n {footer ? <MCardFooter className=\"masonry footer\">{footer}</MCardFooter> : null}\n </MCard>\n )\n}\n","import type {MAvatarStackProps} from './MAvatarStack.types'\nimport {cn} from '../../../utils/cn'\nimport {MAvatar} from '../MAvatar'\nimport './MAvatarStack.css'\n\nexport function MAvatarStack({\n items,\n max = 5,\n size = 'sm',\n color = 'primary',\n overlap = 10,\n className,\n style,\n ...rest\n}: MAvatarStackProps) {\n if (!items || items.length === 0) return null\n\n const visible = items.slice(0, max)\n const overflowCount = items.length - max\n const avatarPx = typeof size === 'number' ? size : ({xs: 20, sm: 28, md: 40, lg: 56, xl: 72}[size] ?? 28)\n\n return (\n <div\n className={cn('avatar-stack', className)}\n style={{'--avatar-stack-overlap': `-${overlap}px`, ...style} as React.CSSProperties}\n {...rest}\n >\n {visible.map((item, i) => (\n <MAvatar\n key={i}\n src={item.avatar}\n name={item.name}\n size={size}\n color={color}\n className=\"avatar-stack-item\"\n style={{zIndex: i + 1}}\n />\n ))}\n {overflowCount > 0 && (\n <span\n className=\"avatar-stack-overflow\"\n style={{\n width: avatarPx,\n height: avatarPx,\n fontSize: avatarPx * 0.38,\n zIndex: visible.length + 1,\n }}\n >\n +{overflowCount}\n </span>\n )}\n </div>\n )\n}\n"],"mappings":"+TAMA,SAAgB,EAAS,CACrB,QACA,UAAU,EACV,UAAU,GACV,cAAc,SACd,YACA,GAAG,GACW,CACd,OACI,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,EAAA,EAAG,UAAW,WAAW,IAAW,EAAU,CAAE,GAAI,WAC/D,EAAM,KAAK,EAAM,KACd,EAAA,EAAA,KAAC,EAAD,CAA6B,OAAe,UAAsB,cAAe,CAA7D,EAA6D,CACnF,CACA,CAAA,CAId,SAAS,EAAc,CACnB,OACA,UACA,eAKD,CACC,GAAM,CAAC,kBAAiB,cAAa,qBAAqB,EAAA,EAAkC,CACxF,OAAQ,EACX,CAAC,CAEF,OACI,EAAA,EAAA,MAAC,SAAD,CAAQ,UAAW,EAAA,EAAG,eAAgB,GAAW,UAAW,EAAgB,CAAE,cAAe,WAA7F,EACI,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,gBAAgB,IAAK,EAAK,IAAK,IAAK,EAAK,KAAO,GAAI,QAAQ,OAAS,CAAA,CACnF,EAAK,UAAW,EAAA,EAAA,KAAC,aAAD,CAAY,UAAU,2BAAmB,EAAK,QAAqB,CAAA,CACnF,EACI,GChCjB,SAAgB,EAAU,CACtB,WAAW,GACX,WAAW,IACX,WAAW,GACX,aAAa,GACb,OAAO,GACP,YAAY,GACZ,aAAa,QACb,YACA,WACA,GAAG,GACY,CACf,IAAM,EAAS,EAAA,SAAS,QAAQ,EAAS,CACnC,EAAQ,EAAO,OACf,CAAC,EAAQ,IAAA,EAAA,EAAA,UAAsB,EAAE,CACjC,CAAC,EAAY,IAAA,EAAA,EAAA,UAA0B,EAAE,CACzC,CAAC,EAAY,IAAA,EAAA,EAAA,UAA0B,GAAM,CAC7C,GAAA,EAAA,EAAA,QAAoB,EAAE,CACtB,GAAA,EAAA,EAAA,QAAkC,KAAK,CAEvC,GAAA,EAAA,EAAA,aACD,GAAkB,CAEX,EADA,GACW,EAAQ,GAAS,EAElB,KAAK,IAAI,EAAG,KAAK,IAAI,EAAO,EAAQ,EAAE,CAAC,CAAC,EAG1D,CAAC,EAAO,EAAK,CAChB,CAEK,GAAA,EAAA,EAAA,iBAAyB,EAAK,EAAS,EAAE,CAAE,CAAC,EAAQ,EAAK,CAAC,CAC1D,GAAA,EAAA,EAAA,iBAAyB,EAAK,EAAS,EAAE,CAAE,CAAC,EAAQ,EAAK,CAAC,EAEhE,EAAA,EAAA,eAAgB,CACZ,GAAI,CAAC,GAAY,GAAS,GAAK,EAAY,OAC3C,IAAM,EAAQ,YAAY,EAAM,EAAS,CACzC,UAAa,cAAc,EAAM,EAClC,CAAC,EAAU,EAAU,EAAM,EAAO,EAAW,CAAC,CAEjD,IAAM,EAAmB,GAAoB,CACpC,IACL,EAAc,GAAK,CACnB,EAAW,QAAU,EACrB,EAAc,EAAE,GAGd,EAAkB,GAAoB,CACnC,GAEL,EADa,EAAU,EAAW,QACf,EAGjB,MAAsB,CACnB,IACL,EAAc,GAAM,CAEhB,EAAa,IACb,GAAM,CACC,EAAa,IACpB,GAAM,CAEV,EAAc,EAAE,GAGd,EAAiB,GAA0B,CACxC,IACL,EAAE,cAAc,kBAAkB,EAAE,UAAU,CAC9C,EAAgB,EAAE,QAAQ,GAGxB,EAAiB,GAA0B,CAC7C,EAAe,EAAE,QAAQ,EAGvB,MAAoB,CACtB,GAAe,EAGnB,GAAI,IAAU,EAAG,OAAO,KAExB,IAAM,EAAS,IAAe,OACxB,EAAc,EAEd,IAAA,GADA,CAAC,UAAW,oBAAoB,EAAS,IAAI,MAAM,EAAa,EAAa,EAAE,MAAM,CAG3F,OACI,EAAA,EAAA,MAAC,MAAD,CAAK,UAAW,EAAA,EAAG,WAAY,GAAU,OAAQ,EAAU,CAAE,GAAI,WAAjE,EACI,EAAA,EAAA,KAAC,MAAD,CACI,UAAU,oBACK,gBACA,gBACF,cACb,gBAAiB,EACjB,MAAO,CACH,YAAa,EAAY,QAAU,IAAA,GACnC,OAAQ,EAAa,EAAa,WAAa,OAAU,IAAA,GAC5D,WAED,EAAA,EAAA,KAAC,MAAD,CAAK,IAAK,EAAU,UAAW,EAAA,EAAG,iBAAkB,GAAc,WAAW,CAAE,MAAO,WACjF,EAAO,KAAK,EAAO,KAChB,EAAA,EAAA,KAAC,MAAD,CAEI,UAAW,EAAA,EACP,iBACA,GAAU,IAAM,GAAU,SAC1B,GAAU,IAAM,GAAU,SAC7B,UAEA,EACC,CARG,EAQH,CACR,CACA,CAAA,CACJ,CAAA,CAEL,GAAc,EAAQ,IACnB,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACI,EAAA,EAAA,KAAC,EAAA,EAAD,CACI,QAAQ,QACR,MAAM,UACN,SAAA,GACA,MAAM,SACN,QAAS,EACT,aAAW,iBACX,UAAU,+CAEV,EAAA,EAAA,KAAC,EAAA,GAAD,EAAoB,CAAA,CACd,CAAA,EACV,EAAA,EAAA,KAAC,EAAA,EAAD,CACI,QAAQ,QACR,MAAM,UACN,SAAA,GACA,MAAM,SACN,QAAS,EACT,aAAW,aACX,UAAU,+CAEV,EAAA,EAAA,KAAC,EAAA,GAAD,EAAqB,CAAA,CACf,CAAA,CACX,CAAA,CAAA,CAGN,GAAY,EAAQ,IACjB,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,yBACV,EAAO,KAAK,EAAG,KACZ,EAAA,EAAA,KAAC,SAAD,CAEI,UAAW,EAAA,EAAG,eAAgB,IAAM,GAAU,SAAS,CACvD,YAAe,EAAK,EAAE,CACtB,aAAY,SAAS,EAAI,IACzB,KAAK,SACP,CALO,EAKP,CACJ,CACA,CAAA,CAER,GChKd,SAAgB,EAAW,EAA0C,CACjE,OAAO,IAAW,UAAY,IAAW,cAG7C,SAAgB,EAAS,EAA0C,CAC/D,OAAO,IAAW,QAAU,IAAW,cAG3C,SAAgB,EAAQ,EAA0C,CAC9D,OAAO,IAAW,MCLtB,SAAgB,EAAsB,CAClC,MACA,MAAM,GACN,QACA,cACA,UACA,OACA,SACA,cAAc,GACd,mBAAmB,SACnB,QAAQ,OACR,MAAM,QACN,WACA,YAC2B,CAC3B,IAAM,EAAU,GAAQ,EAClB,EAAe,EAAW,EAAiB,CAC3C,EAAY,EACX,CACG,iBAAkB,OAAO,GAAgB,SAAW,GAAG,EAAY,IAAM,EAC5E,CACD,IAAA,GACA,EAAW,GAAQ,GAAS,GAElC,OACI,EAAA,EAAA,MAAC,EAAA,EAAD,CACiB,cACb,YAAa,IAAqB,OAAkB,IAAA,GAAT,OAC3C,UAAW,EAAA,EAAG,gBAAiB,GAAe,cAAc,CAC5D,MAAO,WAJX,CAMK,GACG,EAAA,EAAA,MAAC,MAAD,CACI,UAAW,EAAA,EACP,iBACA,EAAS,EAAiB,EAAI,cAC9B,EAAQ,EAAiB,EAAI,aAChC,UALL,CAOK,GACG,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,kCAA0B,EAAY,CAAA,EAErD,EAAA,EAAA,KAAC,EAAA,EAAD,CACI,GAAI,EACC,MACA,MACE,QACF,MACL,QAAA,GACA,OAAA,GACA,YAAa,EAAe,SAAW,OACzC,CAAA,CAEL,GAAU,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,4BAAoB,EAAc,CAAA,CAAG,KAC7D,GACN,KACH,GAAU,EAAA,EAAA,KAAC,EAAA,EAAD,CAAW,UAAU,yBAAiB,EAAoB,CAAA,CAAG,KACvE,GAAS,EAAA,EAAA,KAAC,EAAA,EAAD,CAAa,UAAU,2BAAmB,EAAqB,CAAA,CAAG,KACxE,GCzDhB,SAAS,EAAM,EAAe,EAAa,EAAa,CACpD,OAAO,KAAK,IAAI,KAAK,IAAI,EAAO,EAAI,CAAE,EAAI,CAG9C,SAAS,EAAoB,EAA4B,CAKrD,OAJM,aAAkB,QAIjB,CAAC,CAAC,EAAO,QACZ,yHACH,CALU,GAQf,SAAS,EAAa,EAAa,EAAoD,EAAsB,CAiBzG,OAhBI,GAAS,EACF,EAAM,KAAK,EAAM,IAAU,EAAW,EAAM,EAAM,CAAC,CAG1D,EACO,EACF,KAAK,EAAM,IACH,EAAe,EAAK,EAIlB,EAAA,EAAA,KAAC,EAAD,CAAsC,OAAQ,CAArB,EAAqB,CAH1C,KAIb,CACD,OAAO,QAAQ,CAGjB,EAAA,SAAS,QAAQ,EAAS,CAGrC,SAAS,EAAe,EAAiD,CACrE,IAAM,EAAQ,EACd,MAAO,CAAC,CAAC,GAAS,OAAO,GAAU,UAAY,QAAS,GAAS,OAAO,EAAM,KAAQ,SAG1F,SAAS,EAAmB,CAAC,QAAuC,CAChE,OAAO,EAAA,EAAA,KAAC,EAAD,CAAuB,IAAK,EAAK,IAAK,IAAK,EAAK,KAAO,GAAI,QAAS,EAAK,QAAW,CAAA,CAI/F,SAAgB,EAA+B,CAC3C,QACA,aACA,eACA,cAAc,GACd,OAAO,GACP,YAAY,GACZ,QAAQ,GACR,eAAe,IACf,eAAe,IACf,iBAAiB,IACjB,YACA,WACA,QACA,GAAG,GACuB,CAC1B,IAAM,GAAA,EAAA,EAAA,aAAuB,EAAU,EAAO,EAAY,EAAS,CAAE,CAAC,EAAU,EAAO,EAAW,CAAC,CAC7F,EAAQ,EAAO,OACf,CAAC,EAAQ,IAAA,EAAA,EAAA,UAAsB,EAAE,CACjC,CAAC,EAAM,IAAA,EAAA,EAAA,UAAoB,EAAE,CAC7B,CAAC,EAAU,IAAA,EAAA,EAAA,UAAwB,GAAM,CACzC,CAAC,EAAY,IAAA,EAAA,EAAA,UAA0B,EAAE,CACzC,GAAA,EAAA,EAAA,QAAkC,KAAK,CACvC,GAAA,EAAA,EAAA,QAAgB,EAAE,CAClB,GAAA,EAAA,EAAA,QAAmB,GAAM,CAQzB,EAAY,EAAM,GALpB,EAAa,IACP,KAAK,IAAI,EAAgB,IAAK,CAC9B,EAAa,IACX,KAAK,IAAI,EAAgB,IAAK,CAC9B,IACuC,EAAc,EAAc,EAAa,CACtF,EAAU,EAAM,EAAa,MAAS,GAAI,GAAI,GAAG,EAEvD,EAAA,EAAA,eAAgB,CACZ,IAAM,EAAO,EAAS,QACtB,GAAI,CAAC,EAAM,OAEX,IAAM,MAAe,EAAc,EAAK,YAAY,CACpD,GAAQ,CAER,IAAM,EAAW,IAAI,eAAe,EAAO,CAG3C,OAFA,EAAS,QAAQ,EAAK,KAET,EAAS,YAAY,EACnC,EAAE,CAAC,EAEN,EAAA,EAAA,eAAgB,CACP,GAGL,EAAU,EADW,GAAgB,KAAK,OAAO,EAAQ,GAAK,EAAE,CAClC,EAAG,EAAQ,EAAE,CAAC,EAC7C,CAAC,EAAO,EAAa,CAAC,CAEzB,IAAM,GAAA,EAAA,EAAA,aACD,GAAsB,CACf,OAAQ,GAEZ,IAAI,EAAM,CACN,GAAW,EAAY,GAAS,EAAM,CACtC,OAGJ,EAAU,EAAM,EAAW,EAAG,EAAQ,EAAE,CAAC,GAE7C,CAAC,EAAO,EAAK,CAChB,CAEK,GAAA,EAAA,EAAA,iBAAyB,EAAK,EAAS,EAAE,CAAE,CAAC,EAAQ,EAAK,CAAC,CAC1D,GAAA,EAAA,EAAA,iBAAyB,EAAK,EAAS,EAAE,CAAE,CAAC,EAAQ,EAAK,CAAC,CAE1D,EAAiB,GAA6C,CAC5D,CAAC,GAAa,GAAS,GACvB,EAAoB,EAAM,OAAO,GACrC,EAAM,cAAc,kBAAkB,EAAM,UAAU,CACtD,EAAY,GAAK,CACjB,EAAO,QAAU,EAAM,QACvB,EAAQ,EAAE,GAGR,EAAiB,GAA6C,CAC3D,GACL,EAAQ,EAAM,QAAU,EAAO,QAAQ,EAGrC,MAAiB,CACnB,GAAI,CAAC,EAAU,OAEf,IAAM,EAAQ,KAAK,IAAI,GAAI,EAAY,IAAK,CAExC,GAAQ,CAAC,EACT,GAAM,CACC,GAAQ,GACf,GAAM,CAGV,EAAY,GAAM,CAClB,EAAQ,EAAE,EAgCd,IA7BA,EAAA,EAAA,eAAgB,CACZ,IAAM,EAAO,EAAS,QACtB,GAAI,CAAC,EAAM,OAEX,IAAM,EAAe,GAAsB,CACvC,GAAI,CAAC,GAAS,GAAS,GAAK,EAAU,QAAS,OAE/C,IAAM,EAAO,KAAK,IAAI,EAAM,OAAO,CAAG,KAAK,IAAI,EAAM,OAAO,CAAG,EAAM,OAAS,EAAM,OAChF,KAAK,IAAI,EAAK,CAAG,KAErB,EAAM,gBAAgB,CACtB,EAAM,iBAAiB,CAEvB,EAAU,QAAU,GACpB,OAAO,eAAiB,CACpB,EAAU,QAAU,IACrB,IAAI,CAEH,EAAO,EACP,GAAM,CAEN,GAAM,GAKd,OADA,EAAK,iBAAiB,QAAS,EAAa,CAAC,QAAS,GAAM,CAAC,KAChD,EAAK,oBAAoB,QAAS,EAAY,EAC5D,CAAC,EAAO,EAAM,EAAM,EAAM,CAAC,CAE1B,CAAC,EAAO,OAAO,KAEnB,IAAM,EAAS,EAAa,EAAI,GAAU,EAAY,GAAW,EAAY,EAAI,EAEjF,OACI,EAAA,EAAA,MAAC,MAAD,CACI,UAAW,EAAA,EAAG,WAAY,EAAU,CACpC,MAAO,CAAC,GAAG,EAAO,eAAgB,GAAG,EAAU,IAAI,CACnD,GAAI,WAHR,EAKI,EAAA,EAAA,KAAC,MAAD,CACI,IAAK,EACL,UAAU,iBACK,gBACA,gBACf,YAAa,EACb,gBAAiB,EACjB,eAAgB,EAChB,MAAO,CACH,OAAQ,GAAa,EAAQ,EAAK,EAAW,WAAa,OAAU,IAAA,GACvE,WAED,EAAA,EAAA,KAAC,MAAD,CACI,UAAW,EAAA,EAAG,iBAAkB,GAAY,WAAW,CACvD,MAAO,CACH,UAAW,cAAc,EAAO,KAChC,IAAK,GAAG,EAAQ,IACnB,UAEA,EAAO,KAAK,EAAO,IAAU,CAC1B,IAAM,EAAO,KAAK,IAAI,EAAQ,EAAO,CAErC,OACI,EAAA,EAAA,KAAC,MAAD,CAEI,UAAW,EAAA,EACP,gBACA,IAAU,GAAU,SACpB,IAAS,GAAK,OACd,GAAQ,GAAK,MAChB,CACD,MAAO,CAAC,OAAQ,KAAK,IAAI,EAAG,EAAQ,EAAK,CAAC,UAEzC,EACC,CAVG,EAUH,EAEZ,CACA,CAAA,CACJ,CAAA,CAEL,GAAe,EAAQ,IACpB,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,4BAAf,EACI,EAAA,EAAA,KAAC,EAAA,EAAD,CACI,KAAK,SACL,QAAQ,YACR,UAAU,eACV,WAAW,EAAA,EAAA,KAAC,EAAA,GAAD,EAAoB,CAAA,CAC/B,QAAS,WACZ,WAES,CAAA,EACV,EAAA,EAAA,KAAC,EAAA,EAAD,CAAS,KAAK,SAAS,UAAU,eAAe,SAAS,EAAA,EAAA,KAAC,EAAA,GAAD,EAAqB,CAAA,CAAE,QAAS,WAAM,OAErF,CAAA,CACR,GAER,GCnPd,SAAS,EAAY,EAAa,EAAoD,EAAsB,CAKxG,OAJI,GAAS,EACF,EAAM,KAAK,EAAM,IAAU,EAAW,EAAM,EAAM,CAAC,CAGvD,EAAA,SAAS,QAAQ,EAAS,CAIrC,SAAgB,EAAsB,CAClC,QACA,aACA,UAAU,EACV,YACA,WACA,QACA,GAAG,GACc,CACjB,IAAM,EAAU,EAAS,EAAO,EAAY,EAAS,CAIrD,OAFK,EAAQ,QAGT,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,EAAA,EAAG,UAAW,EAAU,CAAE,MAAO,CAAC,GAAG,EAAO,YAAa,EAAQ,CAAE,GAAI,WAClF,EAAQ,KAAK,EAAM,KAChB,EAAA,EAAA,KAAC,MAAD,CAAiB,UAAU,wBACtB,EACC,CAFI,EAEJ,CACR,CACA,CAAA,CATkB,KCnBhC,SAAgB,EAAa,CACzB,MACA,MAAM,GACN,SACA,UACA,OACA,SACA,cAAc,GACd,mBAAmB,OACnB,WACA,YACkB,CAClB,IAAM,EAAW,EAAS,CAAC,GAAG,GAAU,MAAO,SAAO,CAAG,GAAU,MAC7D,EAAU,GAAQ,EAElB,CAAC,kBAAiB,cAAa,qBAAqB,EAAA,EAAqC,CAC3F,OAFiB,EAAW,EAAiB,CAEtB,SAAW,OACrC,CAAC,CAEF,OACI,EAAA,EAAA,MAAC,EAAA,EAAD,CACiB,cACb,YAAa,IAAqB,OAAkB,IAAA,GAAT,OAC3C,UAAW,EAAA,EAAG,eAAgB,GAAe,cAAc,UAH/D,EAKI,EAAA,EAAA,MAAC,MAAD,CACI,UAAW,EAAA,EACP,gBACA,EACA,EAAS,EAAiB,EAAI,cAC9B,EAAQ,EAAiB,EAAI,aAChC,CACD,cAAgB,GAAU,CACP,EAAM,OAEV,QAAQ,mBAAmB,EAItC,EAAkB,EAAM,WAdhC,EAiBI,EAAA,EAAA,KAAC,MAAD,CAAK,GAAI,EAAe,MAAU,MAAK,UAAU,cAAc,MAAO,EAAY,CAAA,CACjF,GAAU,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,2BAAmB,EAAc,CAAA,CAAG,KAC7D,EACC,GACL,GAAU,EAAA,EAAA,KAAC,EAAA,EAAD,CAAW,UAAU,wBAAgB,EAAoB,CAAA,CAAG,KACtE,GAAS,EAAA,EAAA,KAAC,EAAA,EAAD,CAAa,UAAU,0BAAkB,EAAqB,CAAA,CAAG,KACvE,GClDhB,SAAgB,EAAa,CACzB,QACA,MAAM,EACN,OAAO,KACP,QAAQ,UACR,UAAU,GACV,YACA,QACA,GAAG,GACe,CAClB,GAAI,CAAC,GAAS,EAAM,SAAW,EAAG,OAAO,KAEzC,IAAM,EAAU,EAAM,MAAM,EAAG,EAAI,CAC7B,EAAgB,EAAM,OAAS,EAC/B,EAAW,OAAO,GAAS,SAAW,EAAQ,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAG,CAAC,IAAS,GAEtG,OACI,EAAA,EAAA,MAAC,MAAD,CACI,UAAW,EAAA,EAAG,eAAgB,EAAU,CACxC,MAAO,CAAC,yBAA0B,IAAI,EAAQ,IAAK,GAAG,EAAM,CAC5D,GAAI,WAHR,CAKK,EAAQ,KAAK,EAAM,KAChB,EAAA,EAAA,KAAC,EAAA,EAAD,CAEI,IAAK,EAAK,OACV,KAAM,EAAK,KACL,OACC,QACP,UAAU,oBACV,MAAO,CAAC,OAAQ,EAAI,EAAE,CACxB,CAPO,EAOP,CACJ,CACD,EAAgB,IACb,EAAA,EAAA,MAAC,OAAD,CACI,UAAU,wBACV,MAAO,CACH,MAAO,EACP,OAAQ,EACR,SAAU,EAAW,IACrB,OAAQ,EAAQ,OAAS,EAC5B,UAPL,CAQC,IACK,EACC,GAET"}
1
+ {"version":3,"file":"media-BhRjHzpA.cjs","names":[],"sources":["../src/components/media/MGallery/MGallery.tsx","../src/components/media/MCarousel/MCarousel.tsx","../src/components/media/mediaInteraction.ts","../src/components/media/MShowcaseCarouselItem/MShowcaseCarouselItem.tsx","../src/components/media/MShowcaseCarousel/MShowcaseCarousel.tsx","../src/components/media/MMasonry/MMasonry.tsx","../src/components/media/MMasonryItem/MMasonryItem.tsx","../src/components/media/MAvatarStack/MAvatarStack.tsx"],"sourcesContent":["import type {MGalleryProps} from './MGallery.types'\nimport {cn} from '../../../utils/cn'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport './MGallery.css'\n\n// Render a responsive image grid gallery.\nexport function MGallery({\n items,\n columns = 3,\n rounded = true,\n clickEffect = 'ripple',\n className,\n ...rest\n}: MGalleryProps) {\n return (\n <div className={cn('gallery', `columns-${columns}`, className)} {...rest}>\n {items.map((item, i) => (\n <GalleryFigure key={i} item={item} rounded={rounded} clickEffect={clickEffect} />\n ))}\n </div>\n )\n}\n\nfunction GalleryFigure({\n item,\n rounded,\n clickEffect,\n}: {\n item: {src: string; alt?: string; caption?: string}\n rounded: boolean\n clickEffect: 'none' | 'ripple'\n}) {\n const {effectClassName, effectLayer, handlePointerDown} = useInteractionEffect<HTMLElement>({\n effect: clickEffect,\n })\n\n return (\n <figure className={cn('gallery-item', rounded && 'rounded', effectClassName)} onPointerDown={handlePointerDown}>\n <img className=\"gallery-image\" src={item.src} alt={item.alt || ''} loading=\"lazy\" />\n {item.caption && <figcaption className=\"gallery-caption\">{item.caption}</figcaption>}\n {effectLayer}\n </figure>\n )\n}\n","import {useState, useEffect, useCallback, useRef, Children} from 'react'\nimport type * as React from 'react'\nimport type {MCarouselProps} from './MCarousel.types'\nimport {cn} from '../../../utils/cn'\nimport {MButton} from '../../controls'\nimport {MChevronLeftIcon, MChevronRightIcon} from '../../../icons'\nimport './MCarousel.css'\n\n// Render a swipeable content slider with arrows, dots and transition modes.\nexport function MCarousel({\n autoPlay = false,\n interval = 5000,\n showDots = true,\n showArrows = true,\n loop = true,\n draggable = true,\n transition = 'slide',\n className,\n children,\n ...rest\n}: MCarouselProps) {\n const slides = Children.toArray(children)\n const count = slides.length\n const [active, setActive] = useState(0)\n const [dragOffset, setDragOffset] = useState(0)\n const [isDragging, setIsDragging] = useState(false)\n const dragStartX = useRef(0)\n const trackRef = useRef<HTMLDivElement>(null)\n\n const goTo = useCallback(\n (index: number) => {\n if (loop) {\n setActive((index + count) % count)\n } else {\n setActive(Math.max(0, Math.min(index, count - 1)))\n }\n },\n [count, loop]\n )\n\n const prev = useCallback(() => goTo(active - 1), [active, goTo])\n const next = useCallback(() => goTo(active + 1), [active, goTo])\n\n useEffect(() => {\n if (!autoPlay || count <= 1 || isDragging) return\n const timer = setInterval(next, interval)\n return () => clearInterval(timer)\n }, [autoPlay, interval, next, count, isDragging])\n\n const handleDragStart = (clientX: number) => {\n if (!draggable) return\n setIsDragging(true)\n dragStartX.current = clientX\n setDragOffset(0)\n }\n\n const handleDragMove = (clientX: number) => {\n if (!isDragging) return\n const diff = clientX - dragStartX.current\n setDragOffset(diff)\n }\n\n const handleDragEnd = () => {\n if (!isDragging) return\n setIsDragging(false)\n const threshold = 50\n if (dragOffset < -threshold) {\n next()\n } else if (dragOffset > threshold) {\n prev()\n }\n setDragOffset(0)\n }\n\n const onPointerDown = (e: React.PointerEvent) => {\n if (!draggable) return\n e.currentTarget.setPointerCapture(e.pointerId)\n handleDragStart(e.clientX)\n }\n\n const onPointerMove = (e: React.PointerEvent) => {\n handleDragMove(e.clientX)\n }\n\n const onPointerUp = () => {\n handleDragEnd()\n }\n\n if (count === 0) return null\n\n const isFade = transition === 'fade'\n const trackStyle = !isFade\n ? {transform: `translateX(calc(-${active * 100}% + ${isDragging ? dragOffset : 0}px))`}\n : undefined\n\n return (\n <div className={cn('carousel', isFade && 'fade', className)} {...rest}>\n <div\n className=\"carousel-viewport\"\n onPointerDown={onPointerDown}\n onPointerMove={onPointerMove}\n onPointerUp={onPointerUp}\n onPointerCancel={onPointerUp}\n style={{\n touchAction: draggable ? 'pan-y' : undefined,\n cursor: draggable ? (isDragging ? 'grabbing' : 'grab') : undefined,\n }}\n >\n <div ref={trackRef} className={cn('carousel-track', isDragging && 'dragging')} style={trackStyle}>\n {slides.map((slide, i) => (\n <div\n key={i}\n className={cn(\n 'carousel-slide',\n isFade && i === active && 'active',\n isFade && i !== active && 'hidden'\n )}\n >\n {slide}\n </div>\n ))}\n </div>\n </div>\n\n {showArrows && count > 1 && (\n <>\n <MButton\n variant=\"ghost\"\n color=\"primary\"\n iconOnly\n shape=\"circle\"\n onClick={prev}\n aria-label=\"Previous slide\"\n className=\"carousel-arrow carousel-arrow-prev\"\n >\n <MChevronLeftIcon />\n </MButton>\n <MButton\n variant=\"ghost\"\n color=\"primary\"\n iconOnly\n shape=\"circle\"\n onClick={next}\n aria-label=\"Next slide\"\n className=\"carousel-arrow carousel-arrow-next\"\n >\n <MChevronRightIcon />\n </MButton>\n </>\n )}\n\n {showDots && count > 1 && (\n <div className=\"carousel-dots\">\n {slides.map((_, i) => (\n <button\n key={i}\n className={cn('carousel-dot', i === active && 'active')}\n onClick={() => goTo(i)}\n aria-label={`Slide ${i + 1}`}\n type=\"button\"\n />\n ))}\n </div>\n )}\n </div>\n )\n}\n","import type {MClickEffect} from '../../utils/useInteractionEffect'\n\nexport type MMediaInteractionEffect = MClickEffect | 'zoom' | 'dim' | 'zoom-ripple'\n\nexport function usesRipple(effect: MMediaInteractionEffect): boolean {\n return effect === 'ripple' || effect === 'zoom-ripple'\n}\n\nexport function usesZoom(effect: MMediaInteractionEffect): boolean {\n return effect === 'zoom' || effect === 'zoom-ripple'\n}\n\nexport function usesDim(effect: MMediaInteractionEffect): boolean {\n return effect === 'dim'\n}\n","import type {CSSProperties} from 'react'\nimport {MCard, MCardBody, MCardFooter} from '../../cards'\nimport {MImage} from '../MImage'\nimport {cn} from '../../../utils/cn'\nimport {usesDim, usesRipple, usesZoom} from '../mediaInteraction'\nimport type {MShowcaseCarouselItemProps} from './MShowcaseCarouselItem.types'\nimport './MShowcaseCarouselItem.css'\n\nexport function MShowcaseCarouselItem({\n src,\n alt = '',\n media,\n mediaHeight,\n overlay,\n body,\n footer,\n interactive = false,\n imageClickEffect = 'ripple',\n ratio = '16:9',\n fit = 'cover',\n imgProps,\n children,\n}: MShowcaseCarouselItemProps) {\n const content = body ?? children\n const shouldRipple = usesRipple(imageClickEffect)\n const cardStyle = mediaHeight\n ? ({\n '--media-height': typeof mediaHeight === 'number' ? `${mediaHeight}px` : mediaHeight,\n } as CSSProperties)\n : undefined\n const hasMedia = Boolean(media || src)\n\n return (\n <MCard\n interactive={interactive}\n clickEffect={imageClickEffect !== 'none' ? 'none' : undefined}\n className={cn('showcase card', interactive && 'interactive')}\n style={cardStyle}\n >\n {hasMedia ? (\n <div\n className={cn(\n 'showcase media',\n usesZoom(imageClickEffect) && 'effect-zoom',\n usesDim(imageClickEffect) && 'effect-dim'\n )}\n >\n {media ? (\n <div className=\"showcase media-content\">{media}</div>\n ) : (\n <MImage\n {...imgProps}\n src={src}\n alt={alt}\n ratio={ratio}\n fit={fit}\n rounded\n shadow\n clickEffect={shouldRipple ? 'ripple' : 'none'}\n />\n )}\n {overlay ? <div className=\"showcase overlay\">{overlay}</div> : null}\n </div>\n ) : null}\n {content ? <MCardBody className=\"showcase body\">{content}</MCardBody> : null}\n {footer ? <MCardFooter className=\"showcase footer\">{footer}</MCardFooter> : null}\n </MCard>\n )\n}\n","import {Children, useCallback, useEffect, useMemo, useRef, useState} from 'react'\nimport type {CSSProperties, PointerEvent as ReactPointerEvent, ReactNode} from 'react'\nimport {MButton} from '../../controls'\nimport {MShowcaseCarouselItem} from '../MShowcaseCarouselItem'\nimport {MChevronLeftIcon, MChevronRightIcon} from '../../../icons'\nimport {cn} from '../../../utils/cn'\nimport type {MShowcaseCarouselProps, MShowcaseCarouselSlide} from './MShowcaseCarousel.types'\nimport './MShowcaseCarousel.css'\n\nfunction clamp(value: number, min: number, max: number) {\n return Math.min(Math.max(value, min), max)\n}\n\nfunction isInteractiveTarget(target: EventTarget | null) {\n if (!(target instanceof Element)) {\n return false\n }\n\n return !!target.closest(\n 'button, a, input, select, textarea, label, summary, [role=\"button\"], [role=\"link\"], [data-carousel-ignore-drag=\"true\"]'\n )\n}\n\nfunction getSlides<T>(items?: T[], renderItem?: (item: T, index: number) => ReactNode, children?: ReactNode) {\n if (items && renderItem) {\n return items.map((item, index) => renderItem(item, index))\n }\n\n if (items) {\n return items\n .map((item, index) => {\n if (!isShowcaseItem(item)) {\n return null\n }\n\n return <ShowcaseMediaSlide key={index} item={item} />\n })\n .filter(Boolean)\n }\n\n return Children.toArray(children)\n}\n\nfunction isShowcaseItem(value: unknown): value is MShowcaseCarouselSlide {\n const slide = value as {src?: unknown}\n return !!value && typeof value === 'object' && 'src' in value && typeof slide.src === 'string'\n}\n\nfunction ShowcaseMediaSlide({item}: {item: MShowcaseCarouselSlide}) {\n return <MShowcaseCarouselItem src={item.src} alt={item.alt || ''} overlay={item.overlay} />\n}\n\n// Show a centered, mouse-driven carousel with partial side previews.\nexport function MShowcaseCarousel<T = unknown>({\n items,\n renderItem,\n initialIndex,\n showButtons = true,\n loop = true,\n draggable = true,\n wheel = true,\n itemMinWidth = 220,\n itemMaxWidth = 520,\n itemWidthRatio = 0.56,\n className,\n children,\n style,\n ...rest\n}: MShowcaseCarouselProps<T>) {\n const slides = useMemo(() => getSlides(items, renderItem, children), [children, items, renderItem])\n const count = slides.length\n const [active, setActive] = useState(0)\n const [drag, setDrag] = useState(0)\n const [dragging, setDragging] = useState(false)\n const [stageWidth, setStageWidth] = useState(0)\n const stageRef = useRef<HTMLDivElement>(null)\n const startX = useRef(0)\n const wheelLock = useRef(false)\n\n const widthRatio =\n stageWidth < 640\n ? Math.max(itemWidthRatio, 0.78)\n : stageWidth < 960\n ? Math.max(itemWidthRatio, 0.66)\n : itemWidthRatio\n const itemWidth = clamp(stageWidth * widthRatio || itemMinWidth, itemMinWidth, itemMaxWidth)\n const itemGap = clamp(stageWidth * 0.022 || 16, 10, 24)\n\n useEffect(() => {\n const node = stageRef.current\n if (!node) return\n\n const update = () => setStageWidth(node.clientWidth)\n update()\n\n const observer = new ResizeObserver(update)\n observer.observe(node)\n\n return () => observer.disconnect()\n }, [])\n\n useEffect(() => {\n if (!count) return\n\n const defaultIndex = initialIndex ?? Math.floor((count - 1) / 2)\n setActive(clamp(defaultIndex, 0, count - 1))\n }, [count, initialIndex])\n\n const goTo = useCallback(\n (nextIndex: number) => {\n if (count < 1) return\n\n if (loop) {\n setActive((nextIndex + count) % count)\n return\n }\n\n setActive(clamp(nextIndex, 0, count - 1))\n },\n [count, loop]\n )\n\n const prev = useCallback(() => goTo(active - 1), [active, goTo])\n const next = useCallback(() => goTo(active + 1), [active, goTo])\n\n const onPointerDown = (event: ReactPointerEvent<HTMLDivElement>) => {\n if (!draggable || count <= 1) return\n if (isInteractiveTarget(event.target)) return\n event.currentTarget.setPointerCapture(event.pointerId)\n setDragging(true)\n startX.current = event.clientX\n setDrag(0)\n }\n\n const onPointerMove = (event: ReactPointerEvent<HTMLDivElement>) => {\n if (!dragging) return\n setDrag(event.clientX - startX.current)\n }\n\n const stopDrag = () => {\n if (!dragging) return\n\n const limit = Math.max(56, itemWidth * 0.12)\n\n if (drag <= -limit) {\n next()\n } else if (drag >= limit) {\n prev()\n }\n\n setDragging(false)\n setDrag(0)\n }\n\n useEffect(() => {\n const node = stageRef.current\n if (!node) return\n\n const handleWheel = (event: WheelEvent) => {\n if (!wheel || count <= 1 || wheelLock.current) return\n\n const axis = Math.abs(event.deltaX) > Math.abs(event.deltaY) ? event.deltaX : event.deltaY\n if (Math.abs(axis) < 28) return\n\n event.preventDefault()\n event.stopPropagation()\n\n wheelLock.current = true\n window.setTimeout(() => {\n wheelLock.current = false\n }, 260)\n\n if (axis > 0) {\n next()\n } else {\n prev()\n }\n }\n\n node.addEventListener('wheel', handleWheel, {passive: false})\n return () => node.removeEventListener('wheel', handleWheel)\n }, [count, next, prev, wheel])\n\n if (!count) return null\n\n const offset = stageWidth / 2 - active * (itemWidth + itemGap) - itemWidth / 2 + drag\n\n return (\n <div\n className={cn('showcase', className)}\n style={{...style, '--item-width': `${itemWidth}px`} as CSSProperties}\n {...rest}\n >\n <div\n ref={stageRef}\n className=\"showcase-stage\"\n onPointerDown={onPointerDown}\n onPointerMove={onPointerMove}\n onPointerUp={stopDrag}\n onPointerCancel={stopDrag}\n onPointerLeave={stopDrag}\n style={{\n cursor: draggable && count > 1 ? (dragging ? 'grabbing' : 'grab') : undefined,\n }}\n >\n <div\n className={cn('showcase-track', dragging && 'dragging')}\n style={{\n transform: `translateX(${offset}px)`,\n gap: `${itemGap}px`,\n }}\n >\n {slides.map((slide, index) => {\n const dist = Math.abs(index - active)\n\n return (\n <div\n key={index}\n className={cn(\n 'showcase-item',\n index === active && 'active',\n dist === 1 && 'near',\n dist >= 2 && 'far'\n )}\n style={{zIndex: Math.max(1, count - dist)}}\n >\n {slide}\n </div>\n )\n })}\n </div>\n </div>\n\n {showButtons && count > 1 && (\n <div className=\"showcase-actions\">\n <MButton\n type=\"button\"\n variant=\"secondary\"\n className=\"showcase-btn\"\n startIcon={<MChevronLeftIcon />}\n onClick={prev}\n >\n Previous\n </MButton>\n <MButton type=\"button\" className=\"showcase-btn\" endIcon={<MChevronRightIcon />} onClick={next}>\n Next\n </MButton>\n </div>\n )}\n </div>\n )\n}\n","import {Children} from 'react'\nimport type {ReactNode} from 'react'\nimport {cn} from '../../../utils/cn'\nimport type {MMasonryProps} from './MMasonry.types'\nimport './MMasonry.css'\n\nfunction getItems<T>(items?: T[], renderItem?: (item: T, index: number) => ReactNode, children?: ReactNode) {\n if (items && renderItem) {\n return items.map((item, index) => renderItem(item, index))\n }\n\n return Children.toArray(children)\n}\n\n// Render a responsive masonry wall for images, cards and uneven content.\nexport function MMasonry<T = unknown>({\n items,\n renderItem,\n columns = 3,\n className,\n children,\n style,\n ...rest\n}: MMasonryProps<T>) {\n const content = getItems(items, renderItem, children)\n\n if (!content.length) return null\n\n return (\n <div className={cn('masonry', className)} style={{...style, columnCount: columns}} {...rest}>\n {content.map((item, index) => (\n <div key={index} className=\"masonry item\">\n {item}\n </div>\n ))}\n </div>\n )\n}\n","import {MCard, MCardBody, MCardFooter} from '../../cards'\nimport {cn} from '../../../utils/cn'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport {usesDim, usesRipple, usesZoom} from '../mediaInteraction'\nimport './MMasonryItem.css'\nimport type {MMasonryItemProps} from './MMasonryItem.types'\n\nexport function MMasonryItem({\n src,\n alt = '',\n height,\n overlay,\n body,\n footer,\n interactive = false,\n imageClickEffect = 'none',\n imgProps,\n children,\n}: MMasonryItemProps) {\n const imgStyle = height ? {...imgProps?.style, height} : imgProps?.style\n const content = body ?? children\n const shouldRipple = usesRipple(imageClickEffect)\n const {effectClassName, effectLayer, handlePointerDown} = useInteractionEffect<HTMLDivElement>({\n effect: shouldRipple ? 'ripple' : 'none',\n })\n\n return (\n <MCard\n interactive={interactive}\n clickEffect={imageClickEffect !== 'none' ? 'none' : undefined}\n className={cn('masonry card', interactive && 'interactive')}\n >\n <div\n className={cn(\n 'masonry media',\n effectClassName,\n usesZoom(imageClickEffect) && 'effect-zoom',\n usesDim(imageClickEffect) && 'effect-dim'\n )}\n onPointerDown={(event) => {\n const target = event.target as HTMLElement\n\n if (target.closest('.masonry.overlay')) {\n return\n }\n\n handlePointerDown(event)\n }}\n >\n <img {...imgProps} src={src} alt={alt} className=\"masonry img\" style={imgStyle} />\n {overlay ? <div className=\"masonry overlay\">{overlay}</div> : null}\n {effectLayer}\n </div>\n {content ? <MCardBody className=\"masonry body\">{content}</MCardBody> : null}\n {footer ? <MCardFooter className=\"masonry footer\">{footer}</MCardFooter> : null}\n </MCard>\n )\n}\n","import type {MAvatarStackProps} from './MAvatarStack.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {MAvatar} from '../MAvatar'\nimport './MAvatarStack.css'\n\nexport function MAvatarStack({\n items,\n max = 5,\n size = 'sm',\n color = 'primary',\n hidden,\n overlap = 10,\n className,\n style,\n ...rest\n}: MAvatarStackProps) {\n if (!items || items.length === 0) return null\n\n const visible = items.slice(0, max)\n const overflowCount = items.length - max\n const avatarPx = typeof size === 'number' ? size : ({xs: 20, sm: 28, md: 40, lg: 56, xl: 72}[size] ?? 28)\n\n return (\n <div\n className={cn('avatar-stack', className)}\n style={{'--avatar-stack-overlap': `-${overlap}px`, ...style} as React.CSSProperties}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n {visible.map((item, i) => (\n <MAvatar\n key={i}\n src={item.avatar}\n name={item.name}\n size={size}\n color={color}\n className=\"avatar-stack-item\"\n style={{zIndex: i + 1}}\n />\n ))}\n {overflowCount > 0 && (\n <span\n className=\"avatar-stack-overflow\"\n style={{\n width: avatarPx,\n height: avatarPx,\n fontSize: avatarPx * 0.38,\n zIndex: visible.length + 1,\n }}\n >\n +{overflowCount}\n </span>\n )}\n </div>\n )\n}\n"],"mappings":"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"}