@banzamel/mineralui 1.9.1 → 1.10.2

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 (578) hide show
  1. package/README.md +22 -55
  2. package/dist/MAvatar-BElYyQXH.cjs +2 -0
  3. package/dist/MAvatar-BElYyQXH.cjs.map +1 -0
  4. package/dist/MAvatar-CIvYzQV4.js +63 -0
  5. package/dist/MAvatar-CIvYzQV4.js.map +1 -0
  6. package/dist/{MButton-C1pnL4_j.js → MButton-C94fZ3l9.js} +1 -1
  7. package/dist/{MButton-C1pnL4_j.js.map → MButton-C94fZ3l9.js.map} +1 -1
  8. package/dist/{MButton-DFRHWHzh.cjs → MButton-ouB6903s.cjs} +2 -2
  9. package/dist/{MButton-DFRHWHzh.cjs.map → MButton-ouB6903s.cjs.map} +1 -1
  10. package/dist/MButtonGroup-BhGt-Yy1.js +30 -0
  11. package/dist/MButtonGroup-BhGt-Yy1.js.map +1 -0
  12. package/dist/MButtonGroup-yumQneDa.cjs +2 -0
  13. package/dist/MButtonGroup-yumQneDa.cjs.map +1 -0
  14. package/dist/MCard-9ucghJJs.js +89 -0
  15. package/dist/MCard-9ucghJJs.js.map +1 -0
  16. package/dist/MCard-Bg_R86Gr.cjs +2 -0
  17. package/dist/MCard-Bg_R86Gr.cjs.map +1 -0
  18. package/dist/{MCheckbox-B7SpcD4H.js → MCheckbox-B-nT2OBE.js} +1 -1
  19. package/dist/{MCheckbox-B7SpcD4H.js.map → MCheckbox-B-nT2OBE.js.map} +1 -1
  20. package/dist/{MCheckbox-Dn3p_9-1.cjs → MCheckbox-Cbk5hwzJ.cjs} +2 -2
  21. package/dist/{MCheckbox-Dn3p_9-1.cjs.map → MCheckbox-Cbk5hwzJ.cjs.map} +1 -1
  22. package/dist/MDetailList-CpwrF22b.cjs +2 -0
  23. package/dist/MDetailList-CpwrF22b.cjs.map +1 -0
  24. package/dist/MDetailList-Gh5Y0UOx.js +89 -0
  25. package/dist/MDetailList-Gh5Y0UOx.js.map +1 -0
  26. package/dist/{MDropdownMenu-c9U3sEcl.cjs → MDropdownMenu-BT3u-ZJj.cjs} +2 -2
  27. package/dist/{MDropdownMenu-c9U3sEcl.cjs.map → MDropdownMenu-BT3u-ZJj.cjs.map} +1 -1
  28. package/dist/{MDropdownMenu-CeiC1tz3.js → MDropdownMenu-CAwSTZ1h.js} +2 -2
  29. package/dist/{MDropdownMenu-CeiC1tz3.js.map → MDropdownMenu-CAwSTZ1h.js.map} +1 -1
  30. package/dist/{MGalleryIllustration-Dglx_Ckc.cjs → MGalleryIllustration-D1givjFR.cjs} +2 -2
  31. package/dist/{MGalleryIllustration-Dglx_Ckc.cjs.map → MGalleryIllustration-D1givjFR.cjs.map} +1 -1
  32. package/dist/MGrid-Di7laCq4.cjs +2 -0
  33. package/dist/MGrid-Di7laCq4.cjs.map +1 -0
  34. package/dist/MGrid-yLmEteNw.js +265 -0
  35. package/dist/MGrid-yLmEteNw.js.map +1 -0
  36. package/dist/{MHeading-f3hwkW3r.cjs → MHeading-TJ5yvklz.cjs} +2 -2
  37. package/dist/{MHeading-f3hwkW3r.cjs.map → MHeading-TJ5yvklz.cjs.map} +1 -1
  38. package/dist/{MI18nProvider-DOh5xexz.cjs → MI18nProvider-bf1G7lTP.cjs} +2 -2
  39. package/dist/{MI18nProvider-DOh5xexz.cjs.map → MI18nProvider-bf1G7lTP.cjs.map} +1 -1
  40. package/dist/{MInput-IsUELgN2.js → MInput-CkbgK8eU.js} +3 -3
  41. package/dist/{MInput-IsUELgN2.js.map → MInput-CkbgK8eU.js.map} +1 -1
  42. package/dist/{MInput-BLGduKL_.cjs → MInput-ClHpIrDG.cjs} +2 -2
  43. package/dist/{MInput-BLGduKL_.cjs.map → MInput-ClHpIrDG.cjs.map} +1 -1
  44. package/dist/MInputCVC-B353PyVi.cjs +2 -0
  45. package/dist/MInputCVC-B353PyVi.cjs.map +1 -0
  46. package/dist/{MInputExpDate-CeCmw6fj.js → MInputCVC-BSHrWcEh.js} +101 -101
  47. package/dist/MInputCVC-BSHrWcEh.js.map +1 -0
  48. package/dist/{MInputSearch-_7jfFGr1.cjs → MInputSearch-D2Fr_34s.cjs} +2 -2
  49. package/dist/{MInputSearch-_7jfFGr1.cjs.map → MInputSearch-D2Fr_34s.cjs.map} +1 -1
  50. package/dist/{MInputSearch-BBxUF5pw.js → MInputSearch-Dj55a3oO.js} +3 -3
  51. package/dist/{MInputSearch-BBxUF5pw.js.map → MInputSearch-Dj55a3oO.js.map} +1 -1
  52. package/dist/{MKbd-DWTS3iS5.cjs → MKbd-CGkzxJhi.cjs} +2 -2
  53. package/dist/{MKbd-DWTS3iS5.cjs.map → MKbd-CGkzxJhi.cjs.map} +1 -1
  54. package/dist/{MKbd-v6-tJ9sP.js → MKbd-I4xDtsqc.js} +1 -1
  55. package/dist/{MKbd-v6-tJ9sP.js.map → MKbd-I4xDtsqc.js.map} +1 -1
  56. package/dist/{MLink-CRK8YvR4.cjs → MLink-CZ2FfQ0N.cjs} +2 -2
  57. package/dist/{MLink-CRK8YvR4.cjs.map → MLink-CZ2FfQ0N.cjs.map} +1 -1
  58. package/dist/{MPagination-D1hYqLDb.cjs → MPagination-CAzIIP2o.cjs} +2 -2
  59. package/dist/{MPagination-D1hYqLDb.cjs.map → MPagination-CAzIIP2o.cjs.map} +1 -1
  60. package/dist/{MPagination-DvToi2cs.js → MPagination-CnFI794t.js} +7 -7
  61. package/dist/{MPagination-DvToi2cs.js.map → MPagination-CnFI794t.js.map} +1 -1
  62. package/dist/{MPopover-Cqz5TsHg.js → MPopover-BRuwva-c.js} +2 -2
  63. package/dist/MPopover-BRuwva-c.js.map +1 -0
  64. package/dist/MPopover-BbgAAM5Z.cjs +2 -0
  65. package/dist/MPopover-BbgAAM5Z.cjs.map +1 -0
  66. package/dist/{MPortal-BIxPtFYd.cjs → MPortal-DokH9TfY.cjs} +2 -2
  67. package/dist/{MPortal-BIxPtFYd.cjs.map → MPortal-DokH9TfY.cjs.map} +1 -1
  68. package/dist/{MSimpleGrid-CyLf-9R2.cjs → MSimpleGrid-B6Uh1XJY.cjs} +2 -2
  69. package/dist/{MSimpleGrid-CyLf-9R2.cjs.map → MSimpleGrid-B6Uh1XJY.cjs.map} +1 -1
  70. package/dist/{MSimpleGrid-Bojj4xKH.js → MSimpleGrid-Ds14eBrD.js} +1 -1
  71. package/dist/{MSimpleGrid-Bojj4xKH.js.map → MSimpleGrid-Ds14eBrD.js.map} +1 -1
  72. package/dist/MSkeleton-BpylRABV.js +53 -0
  73. package/dist/MSkeleton-BpylRABV.js.map +1 -0
  74. package/dist/MSkeleton-JMkJFzu9.cjs +2 -0
  75. package/dist/MSkeleton-JMkJFzu9.cjs.map +1 -0
  76. package/dist/{MSlider-CqrusKJQ.js → MSlider-5141rKeH.js} +1 -1
  77. package/dist/{MSlider-CqrusKJQ.js.map → MSlider-5141rKeH.js.map} +1 -1
  78. package/dist/{MSlider-qCGmD4UA.cjs → MSlider-PyXLKckL.cjs} +2 -2
  79. package/dist/{MSlider-qCGmD4UA.cjs.map → MSlider-PyXLKckL.cjs.map} +1 -1
  80. package/dist/MStack-B8JtyM10.js +39 -0
  81. package/dist/MStack-B8JtyM10.js.map +1 -0
  82. package/dist/MStack-DDn2bYBQ.cjs +2 -0
  83. package/dist/MStack-DDn2bYBQ.cjs.map +1 -0
  84. package/dist/{MSurface-odrvQXkb.js → MSurface-B-sjyczH.js} +34 -3
  85. package/dist/MSurface-B-sjyczH.js.map +1 -0
  86. package/dist/MSurface-WsYGNGX5.cjs +2 -0
  87. package/dist/MSurface-WsYGNGX5.cjs.map +1 -0
  88. package/dist/{MTag-DgB6ukFJ.js → MTag-CKM8lXD6.js} +3 -3
  89. package/dist/{MTag-DgB6ukFJ.js.map → MTag-CKM8lXD6.js.map} +1 -1
  90. package/dist/{MTag-DZqV4S13.cjs → MTag-Dez1GOX0.cjs} +2 -2
  91. package/dist/{MTag-DZqV4S13.cjs.map → MTag-Dez1GOX0.cjs.map} +1 -1
  92. package/dist/{MText-BHbI7KJO.cjs → MText-CAbqC2qZ.cjs} +2 -2
  93. package/dist/{MText-BHbI7KJO.cjs.map → MText-CAbqC2qZ.cjs.map} +1 -1
  94. package/dist/{MTooltip-Dq2vYf3G.cjs → MTooltip-C-x_SqMx.cjs} +2 -2
  95. package/dist/{MTooltip-Dq2vYf3G.cjs.map → MTooltip-C-x_SqMx.cjs.map} +1 -1
  96. package/dist/{MTooltip-jSf4VBtB.js → MTooltip-Cbj80F3o.js} +1 -1
  97. package/dist/{MTooltip-jSf4VBtB.js.map → MTooltip-Cbj80F3o.js.map} +1 -1
  98. package/dist/MTreeView-B7IWHmGc.cjs +2 -0
  99. package/dist/MTreeView-B7IWHmGc.cjs.map +1 -0
  100. package/dist/MTreeView-DMTzRk6c.js +315 -0
  101. package/dist/MTreeView-DMTzRk6c.js.map +1 -0
  102. package/dist/{arduino-Bm509TuR.cjs → arduino-CFZS94LP.cjs} +1 -1
  103. package/dist/arduino-CFZS94LP.cjs.map +1 -0
  104. package/dist/{arduino-C5s1z3P1.js → arduino-DWEBiENP.js} +2 -2
  105. package/dist/arduino-DWEBiENP.js.map +1 -0
  106. package/dist/{bash-RIFbRcCe.js → bash-DQsQM8so.js} +2 -2
  107. package/dist/bash-DQsQM8so.js.map +1 -0
  108. package/dist/{bash-CyBbinAU.cjs → bash-Dl1TvWHd.cjs} +1 -1
  109. package/dist/bash-Dl1TvWHd.cjs.map +1 -0
  110. package/dist/{c-DAywn1DE.js → c-BgkSGJWN.js} +2 -2
  111. package/dist/c-BgkSGJWN.js.map +1 -0
  112. package/dist/{c-DGOxo0dj.cjs → c-PUMyVGnz.cjs} +1 -1
  113. package/dist/c-PUMyVGnz.cjs.map +1 -0
  114. package/dist/cards-23tpYjxc.js +1207 -0
  115. package/dist/cards-23tpYjxc.js.map +1 -0
  116. package/dist/cards-CK6RnNZi.cjs +2 -0
  117. package/dist/cards-CK6RnNZi.cjs.map +1 -0
  118. package/dist/cards.cjs +1 -1
  119. package/dist/cards.js +3 -3
  120. package/dist/components/cards/MCardGrid/index.d.ts +1 -1
  121. package/dist/components/cards/index.d.ts +1 -9
  122. package/dist/components/data/index.d.ts +4 -24
  123. package/dist/components/data/useMCardGrid.d.ts +36 -0
  124. package/dist/components/data/useMTable.d.ts +69 -0
  125. package/dist/components/display/index.d.ts +0 -8
  126. package/dist/components/feedback/MProgressRing/MProgressRing.d.ts +8 -0
  127. package/dist/components/feedback/MProgressRing/MProgressRing.types.d.ts +21 -0
  128. package/dist/components/feedback/MProgressRing/index.d.ts +2 -0
  129. package/dist/components/feedback/index.d.ts +2 -1
  130. package/dist/components/layout/MCanvasGrid/MCanvasGrid.d.ts +5 -0
  131. package/dist/components/layout/MCanvasGrid/MCanvasGrid.types.d.ts +43 -0
  132. package/dist/components/layout/MCanvasGrid/ScaleToFit.d.ts +19 -0
  133. package/dist/components/layout/MCanvasGrid/index.d.ts +2 -0
  134. package/dist/components/layout/index.d.ts +2 -4
  135. package/dist/components/media/MAvatar/MAvatar.d.ts +1 -1
  136. package/dist/components/media/MAvatar/MAvatar.types.d.ts +9 -0
  137. package/dist/components/media/MAvatar/index.d.ts +1 -1
  138. package/dist/components/media/index.d.ts +1 -17
  139. package/dist/components/typography/MHeading/MHeading.d.ts +1 -1
  140. package/dist/{controls-CcbEqqWo.js → controls-B3P4zKoA.js} +85 -63
  141. package/dist/controls-B3P4zKoA.js.map +1 -0
  142. package/dist/controls-DwWfqfDX.cjs +2 -0
  143. package/dist/controls-DwWfqfDX.cjs.map +1 -0
  144. package/dist/controls.cjs +1 -1
  145. package/dist/controls.js +6 -6
  146. package/dist/{core-DAox0BHy.cjs → core-B2klLGki.cjs} +1 -1
  147. package/dist/core-B2klLGki.cjs.map +1 -0
  148. package/dist/{core-BUYr52VU.js → core-BdOw9NlN.js} +1 -1
  149. package/dist/core-BdOw9NlN.js.map +1 -0
  150. package/dist/{cpp-D-FtdQo9.cjs → cpp-C_DS-imi.cjs} +1 -1
  151. package/dist/cpp-C_DS-imi.cjs.map +1 -0
  152. package/dist/{cpp-Y9cHXDal.js → cpp-ChrqJwqu.js} +2 -2
  153. package/dist/cpp-ChrqJwqu.js.map +1 -0
  154. package/dist/{css-DCYZ-Rs6.cjs → css-Brdthutg.cjs} +1 -1
  155. package/dist/css-Brdthutg.cjs.map +1 -0
  156. package/dist/{css-C__ffGj6.js → css-DL_ID0lZ.js} +2 -2
  157. package/dist/css-DL_ID0lZ.js.map +1 -0
  158. package/dist/data-B5KYb0SW.js +463 -0
  159. package/dist/data-B5KYb0SW.js.map +1 -0
  160. package/dist/data-CDZvakQ8.cjs +2 -0
  161. package/dist/data-CDZvakQ8.cjs.map +1 -0
  162. package/dist/data.cjs +1 -1
  163. package/dist/data.js +3 -4
  164. package/dist/display-2Vak-RyH.cjs +3 -0
  165. package/dist/display-2Vak-RyH.cjs.map +1 -0
  166. package/dist/{display-C7YRf4Ze.js → display-ChhvaSPc.js} +288 -241
  167. package/dist/display-ChhvaSPc.js.map +1 -0
  168. package/dist/display.cjs +1 -1
  169. package/dist/display.js +3 -4
  170. package/dist/dropdowns-BP2HBR-x.cjs +2 -0
  171. package/dist/dropdowns-BP2HBR-x.cjs.map +1 -0
  172. package/dist/dropdowns-C9jREjLg.js +1752 -0
  173. package/dist/dropdowns-C9jREjLg.js.map +1 -0
  174. package/dist/dropdowns.cjs +1 -1
  175. package/dist/dropdowns.js +1 -1
  176. package/dist/feedback-DnuJtYUI.cjs +2 -0
  177. package/dist/feedback-DnuJtYUI.cjs.map +1 -0
  178. package/dist/feedback-urwS5wps.js +290 -0
  179. package/dist/feedback-urwS5wps.js.map +1 -0
  180. package/dist/feedback.cjs +1 -1
  181. package/dist/feedback.js +5 -6
  182. package/dist/{form-BiPQ8SRK.js → form-CWoOQ_qo.js} +1 -1
  183. package/dist/{form-BiPQ8SRK.js.map → form-CWoOQ_qo.js.map} +1 -1
  184. package/dist/{form-DlXWN2ul.cjs → form-D5F1kTIA.cjs} +2 -2
  185. package/dist/{form-DlXWN2ul.cjs.map → form-D5F1kTIA.cjs.map} +1 -1
  186. package/dist/form.cjs +1 -1
  187. package/dist/form.js +1 -1
  188. package/dist/i18n.cjs +1 -1
  189. package/dist/icons/MIcon.types.d.ts +6 -0
  190. package/dist/icons/glyphs/MAirplaneFillIcon.d.ts +2 -0
  191. package/dist/icons/glyphs/{MBrandIconsV2.d.ts → MAirplaneIcon.d.ts} +1 -1
  192. package/dist/icons/glyphs/MApartmentIcon.d.ts +2 -0
  193. package/dist/icons/glyphs/{MChartIconV2.d.ts → MArchiveIcon.d.ts} +1 -1
  194. package/dist/icons/glyphs/MBookIcon.d.ts +2 -0
  195. package/dist/icons/glyphs/MBookOpenFillIcon.d.ts +2 -0
  196. package/dist/icons/glyphs/{MSearchIconV2.d.ts → MBookOpenIcon.d.ts} +1 -1
  197. package/dist/icons/glyphs/MBookmarkFillIcon.d.ts +2 -0
  198. package/dist/icons/glyphs/MBookmarkIcon.d.ts +2 -0
  199. package/dist/icons/glyphs/MBooksIcon.d.ts +2 -0
  200. package/dist/icons/glyphs/MCarFillIcon.d.ts +2 -0
  201. package/dist/icons/glyphs/MCarIcon.d.ts +2 -0
  202. package/dist/icons/glyphs/MClassroomIcon.d.ts +2 -0
  203. package/dist/icons/glyphs/MColumnsIcon.d.ts +2 -0
  204. package/dist/icons/glyphs/{MUserIconV2.d.ts → MFlagAtIcon.d.ts} +1 -1
  205. package/dist/icons/glyphs/{MHomeIconV2.d.ts → MFlagAuIcon.d.ts} +1 -1
  206. package/dist/icons/glyphs/MFlagChIcon.d.ts +2 -0
  207. package/dist/icons/glyphs/MFlagIeIcon.d.ts +2 -0
  208. package/dist/icons/glyphs/MFlagKrIcon.d.ts +2 -0
  209. package/dist/icons/glyphs/MFlagNlIcon.d.ts +2 -0
  210. package/dist/icons/glyphs/MFlagNoIcon.d.ts +2 -0
  211. package/dist/icons/glyphs/MFlagPtIcon.d.ts +2 -0
  212. package/dist/icons/glyphs/MFlagSeIcon.d.ts +2 -0
  213. package/dist/icons/glyphs/MFlagTrIcon.d.ts +2 -0
  214. package/dist/icons/glyphs/MFlatIcon.d.ts +2 -0
  215. package/dist/icons/glyphs/MHistoryIcon.d.ts +2 -0
  216. package/dist/icons/glyphs/MHouseIcon.d.ts +2 -0
  217. package/dist/icons/glyphs/MKeyIcon.d.ts +2 -0
  218. package/dist/icons/glyphs/MLessonIcon.d.ts +2 -0
  219. package/dist/icons/glyphs/MListIcon.d.ts +2 -0
  220. package/dist/icons/glyphs/MMakeupIcon.d.ts +2 -0
  221. package/dist/icons/glyphs/MMoveIcon.d.ts +2 -0
  222. package/dist/icons/glyphs/MPlayIcon.d.ts +2 -0
  223. package/dist/icons/glyphs/MPrinterIcon.d.ts +2 -0
  224. package/dist/icons/glyphs/MRedoIcon.d.ts +2 -0
  225. package/dist/icons/glyphs/MResizeIcon.d.ts +2 -0
  226. package/dist/icons/glyphs/MRoomIcon.d.ts +2 -0
  227. package/dist/icons/glyphs/MShareIcon.d.ts +2 -0
  228. package/dist/icons/glyphs/MShipIcon.d.ts +2 -0
  229. package/dist/icons/glyphs/MShopIcon.d.ts +2 -0
  230. package/dist/icons/glyphs/MStopIcon.d.ts +2 -0
  231. package/dist/icons/glyphs/MTaskIcon.d.ts +2 -0
  232. package/dist/icons/glyphs/MUndoIcon.d.ts +2 -0
  233. package/dist/icons/glyphs/MUrgentIcon.d.ts +2 -0
  234. package/dist/icons/glyphs/MUserCheckIcon.d.ts +2 -0
  235. package/dist/icons/glyphs/MUserMinusIcon.d.ts +2 -0
  236. package/dist/icons/glyphs/MUserPlusIcon.d.ts +2 -0
  237. package/dist/icons/index.d.ts +48 -13
  238. package/dist/icons-BHFwX7ri.cjs +2 -0
  239. package/dist/icons-BHFwX7ri.cjs.map +1 -0
  240. package/dist/{icons-CfpYxnfg.js → icons-DLP-Rs6z.js} +1325 -1925
  241. package/dist/icons-DLP-Rs6z.js.map +1 -0
  242. package/dist/icons.cjs +1 -1
  243. package/dist/icons.js +2 -2
  244. package/dist/illustrations.cjs +1 -1
  245. package/dist/index.cjs +1 -2
  246. package/dist/index.d.ts +0 -2
  247. package/dist/index.js +53 -93
  248. package/dist/{inputs-BJMmyEdL.cjs → inputs-D38ib0gM.cjs} +2 -2
  249. package/dist/{inputs-BJMmyEdL.cjs.map → inputs-D38ib0gM.cjs.map} +1 -1
  250. package/dist/{inputs-CNPeF6gb.js → inputs-bbwdb6m3.js} +181 -181
  251. package/dist/{inputs-CNPeF6gb.js.map → inputs-bbwdb6m3.js.map} +1 -1
  252. package/dist/inputs.cjs +1 -1
  253. package/dist/inputs.js +5 -5
  254. package/dist/{javascript-ClV78Svx.js → javascript-B5hepBcv.js} +2 -2
  255. package/dist/javascript-B5hepBcv.js.map +1 -0
  256. package/dist/{javascript-_Sr9cnsG.cjs → javascript-DFYAIwfO.cjs} +1 -1
  257. package/dist/javascript-DFYAIwfO.cjs.map +1 -0
  258. package/dist/{json-BFetU4Pi.cjs → json-BTHMevf2.cjs} +1 -1
  259. package/dist/json-BTHMevf2.cjs.map +1 -0
  260. package/dist/{json-Dz6EkGZR.js → json-DTBnkegk.js} +2 -2
  261. package/dist/json-DTBnkegk.js.map +1 -0
  262. package/dist/layout-BgfQpVOU.js +823 -0
  263. package/dist/layout-BgfQpVOU.js.map +1 -0
  264. package/dist/layout-D9LAqtZp.cjs +2 -0
  265. package/dist/layout-D9LAqtZp.cjs.map +1 -0
  266. package/dist/layout.cjs +1 -1
  267. package/dist/layout.js +7 -8
  268. package/dist/licensing-f5KYVz7D.js +28 -0
  269. package/dist/licensing-f5KYVz7D.js.map +1 -0
  270. package/dist/licensing-sRHTvX0B.cjs +2 -0
  271. package/dist/licensing-sRHTvX0B.cjs.map +1 -0
  272. package/dist/{locale-Bz2JXxDZ.cjs → locale-CJWWjFm-.cjs} +2 -2
  273. package/dist/{locale-Bz2JXxDZ.cjs.map → locale-CJWWjFm-.cjs.map} +1 -1
  274. package/dist/{locale-CS1-IY_I.js → locale-JX_gX03k.js} +1 -1
  275. package/dist/{locale-CS1-IY_I.js.map → locale-JX_gX03k.js.map} +1 -1
  276. package/dist/media-CM-uEUrV.js +402 -0
  277. package/dist/media-CM-uEUrV.js.map +1 -0
  278. package/dist/media-CnjA4Ruo.cjs +2 -0
  279. package/dist/media-CnjA4Ruo.cjs.map +1 -0
  280. package/dist/media.cjs +1 -1
  281. package/dist/media.js +3 -4
  282. package/dist/overlays-BpDz9ddf.cjs +2 -0
  283. package/dist/overlays-BpDz9ddf.cjs.map +1 -0
  284. package/dist/overlays-NwVsvmlb.js +568 -0
  285. package/dist/overlays-NwVsvmlb.js.map +1 -0
  286. package/dist/overlays.cjs +1 -1
  287. package/dist/overlays.js +4 -6
  288. package/dist/{php-jOdR0XS8.cjs → php-ClxZCTCr.cjs} +1 -1
  289. package/dist/php-ClxZCTCr.cjs.map +1 -0
  290. package/dist/{php-5Erp5xxI.js → php-DwgDg57J.js} +2 -2
  291. package/dist/php-DwgDg57J.js.map +1 -0
  292. package/dist/primitives.cjs +1 -1
  293. package/dist/primitives.js +1 -1
  294. package/dist/style-runtime.cjs +1 -1
  295. package/dist/style-runtime.js +1 -1
  296. package/dist/styles.css +1 -1
  297. package/dist/{theme-DsTDooyX.cjs → theme-yQQAPTkp.cjs} +2 -2
  298. package/dist/{theme-DsTDooyX.cjs.map → theme-yQQAPTkp.cjs.map} +1 -1
  299. package/dist/theme.cjs +1 -1
  300. package/dist/{typescript-C65sNL5w.cjs → typescript-C8NJZXwD.cjs} +1 -1
  301. package/dist/typescript-C8NJZXwD.cjs.map +1 -0
  302. package/dist/{typescript-wdQKWfxO.js → typescript-MSi2XC0t.js} +2 -2
  303. package/dist/typescript-MSi2XC0t.js.map +1 -0
  304. package/dist/typography-BHhyTO1V.js +42 -0
  305. package/dist/typography-BHhyTO1V.js.map +1 -0
  306. package/dist/typography-Qb1U4eiY.cjs +2 -0
  307. package/dist/typography-Qb1U4eiY.cjs.map +1 -0
  308. package/dist/typography.cjs +1 -1
  309. package/dist/typography.js +3 -4
  310. package/dist/{useGhostText-Dg4P606B.cjs → useGhostText-BFaUUKid.cjs} +2 -2
  311. package/dist/{useGhostText-Dg4P606B.cjs.map → useGhostText-BFaUUKid.cjs.map} +1 -1
  312. package/dist/{useInteractionEffect-Bo8285cg.cjs → useInteractionEffect-BH2dgQla.cjs} +2 -2
  313. package/dist/{useInteractionEffect-Bo8285cg.cjs.map → useInteractionEffect-BH2dgQla.cjs.map} +1 -1
  314. package/dist/{useKeyboardNav-CyeQtqF8.cjs → useKeyboardNav-CtGPfQX7.cjs} +2 -2
  315. package/dist/{useKeyboardNav-CyeQtqF8.cjs.map → useKeyboardNav-CtGPfQX7.cjs.map} +1 -1
  316. package/dist/utils/licensing.d.ts +1 -82
  317. package/dist/utils.cjs +1 -1
  318. package/dist/utils.js +1 -1
  319. package/dist/{xml-a3b-XevT.js → xml-CnKYdLjT.js} +2 -2
  320. package/dist/xml-CnKYdLjT.js.map +1 -0
  321. package/dist/{xml-B2okahIr.cjs → xml-jypnnWFn.cjs} +1 -1
  322. package/dist/xml-jypnnWFn.cjs.map +1 -0
  323. package/package.json +6 -29
  324. package/dist/MAvatar-D_dVAPaR.js +0 -57
  325. package/dist/MAvatar-D_dVAPaR.js.map +0 -1
  326. package/dist/MAvatar-DzZPRbot.cjs +0 -2
  327. package/dist/MAvatar-DzZPRbot.cjs.map +0 -1
  328. package/dist/MAvatarStack-CrhkO_SO.js +0 -330
  329. package/dist/MAvatarStack-CrhkO_SO.js.map +0 -1
  330. package/dist/MAvatarStack-DN79aJo1.cjs +0 -2
  331. package/dist/MAvatarStack-DN79aJo1.cjs.map +0 -1
  332. package/dist/MCookieBootstrap-BUqtJO3m.cjs +0 -2
  333. package/dist/MCookieBootstrap-BUqtJO3m.cjs.map +0 -1
  334. package/dist/MCookieBootstrap-Btt49Iuq.js +0 -436
  335. package/dist/MCookieBootstrap-Btt49Iuq.js.map +0 -1
  336. package/dist/MDataTable-7nJuwzJR.cjs +0 -2
  337. package/dist/MDataTable-7nJuwzJR.cjs.map +0 -1
  338. package/dist/MDataTable-CQt_pINO.js +0 -297
  339. package/dist/MDataTable-CQt_pINO.js.map +0 -1
  340. package/dist/MDrawer-B83--EVv.js +0 -122
  341. package/dist/MDrawer-B83--EVv.js.map +0 -1
  342. package/dist/MDrawer-D6cy9K7J.cjs +0 -2
  343. package/dist/MDrawer-D6cy9K7J.cjs.map +0 -1
  344. package/dist/MGrid-B-fP4GME.cjs +0 -2
  345. package/dist/MGrid-B-fP4GME.cjs.map +0 -1
  346. package/dist/MGrid-DVluuula.js +0 -182
  347. package/dist/MGrid-DVluuula.js.map +0 -1
  348. package/dist/MInputExpDate-CeCmw6fj.js.map +0 -1
  349. package/dist/MInputExpDate-DZ8JtSjs.cjs +0 -2
  350. package/dist/MInputExpDate-DZ8JtSjs.cjs.map +0 -1
  351. package/dist/MModal-DiTjBO8B.js +0 -69
  352. package/dist/MModal-DiTjBO8B.js.map +0 -1
  353. package/dist/MModal-eJDG6riB.cjs +0 -2
  354. package/dist/MModal-eJDG6riB.cjs.map +0 -1
  355. package/dist/MPopover-Cqz5TsHg.js.map +0 -1
  356. package/dist/MPopover-CxxaY9kr.cjs +0 -2
  357. package/dist/MPopover-CxxaY9kr.cjs.map +0 -1
  358. package/dist/MQrCode-HO2YIC7e.cjs +0 -2
  359. package/dist/MQrCode-HO2YIC7e.cjs.map +0 -1
  360. package/dist/MQrCode-Kb997gaE.js +0 -465
  361. package/dist/MQrCode-Kb997gaE.js.map +0 -1
  362. package/dist/MSkeleton-CVofhuDp.js +0 -136
  363. package/dist/MSkeleton-CVofhuDp.js.map +0 -1
  364. package/dist/MSkeleton-CuYA8eN3.cjs +0 -2
  365. package/dist/MSkeleton-CuYA8eN3.cjs.map +0 -1
  366. package/dist/MStack-C4Eocfb5.js +0 -70
  367. package/dist/MStack-C4Eocfb5.js.map +0 -1
  368. package/dist/MStack-w8XcuIJK.cjs +0 -2
  369. package/dist/MStack-w8XcuIJK.cjs.map +0 -1
  370. package/dist/MSubText-C-N15d4Z.js +0 -17
  371. package/dist/MSubText-C-N15d4Z.js.map +0 -1
  372. package/dist/MSubText-CIMKPb8o.cjs +0 -2
  373. package/dist/MSubText-CIMKPb8o.cjs.map +0 -1
  374. package/dist/MSurface-KvAS2hkl.cjs +0 -2
  375. package/dist/MSurface-KvAS2hkl.cjs.map +0 -1
  376. package/dist/MSurface-odrvQXkb.js.map +0 -1
  377. package/dist/MTabs-BQZ--mMq.js +0 -89
  378. package/dist/MTabs-BQZ--mMq.js.map +0 -1
  379. package/dist/MTabs-DeUn6bIp.cjs +0 -2
  380. package/dist/MTabs-DeUn6bIp.cjs.map +0 -1
  381. package/dist/MTimeAgo-DI3DF7bD.cjs +0 -2
  382. package/dist/MTimeAgo-DI3DF7bD.cjs.map +0 -1
  383. package/dist/MTimeAgo-Db8gOade.js +0 -51
  384. package/dist/MTimeAgo-Db8gOade.js.map +0 -1
  385. package/dist/MToggle-B6emKoKq.js +0 -48
  386. package/dist/MToggle-B6emKoKq.js.map +0 -1
  387. package/dist/MToggle-BVJm5Bdk.cjs +0 -2
  388. package/dist/MToggle-BVJm5Bdk.cjs.map +0 -1
  389. package/dist/MTreeView-AqH8XMPz.js +0 -516
  390. package/dist/MTreeView-AqH8XMPz.js.map +0 -1
  391. package/dist/MTreeView-Dp9qbqQh.cjs +0 -2
  392. package/dist/MTreeView-Dp9qbqQh.cjs.map +0 -1
  393. package/dist/arduino-Bm509TuR.cjs.map +0 -1
  394. package/dist/arduino-C5s1z3P1.js.map +0 -1
  395. package/dist/bash-CyBbinAU.cjs.map +0 -1
  396. package/dist/bash-RIFbRcCe.js.map +0 -1
  397. package/dist/c-DAywn1DE.js.map +0 -1
  398. package/dist/c-DGOxo0dj.cjs.map +0 -1
  399. package/dist/cards-C50fpYud.js +0 -1539
  400. package/dist/cards-C50fpYud.js.map +0 -1
  401. package/dist/cards-Ci1FoV9C.cjs +0 -2
  402. package/dist/cards-Ci1FoV9C.cjs.map +0 -1
  403. package/dist/components/cards/MCardBusiness/MCardBusiness.d.ts +0 -2
  404. package/dist/components/cards/MCardBusiness/MCardBusiness.types.d.ts +0 -37
  405. package/dist/components/cards/MCardBusiness/index.d.ts +0 -4
  406. package/dist/components/cards/MCardFinance/MCardFinance.d.ts +0 -2
  407. package/dist/components/cards/MCardFinance/MCardFinance.types.d.ts +0 -17
  408. package/dist/components/cards/MCardFinance/index.d.ts +0 -4
  409. package/dist/components/data/MCalendarBoard/MCalendarBoard.d.ts +0 -8
  410. package/dist/components/data/MCalendarBoard/MCalendarBoard.types.d.ts +0 -186
  411. package/dist/components/data/MCalendarBoard/index.d.ts +0 -4
  412. package/dist/components/data/MChart/MAreaChart.d.ts +0 -2
  413. package/dist/components/data/MChart/MBarChart.d.ts +0 -2
  414. package/dist/components/data/MChart/MChart.d.ts +0 -2
  415. package/dist/components/data/MChart/MChart.types.d.ts +0 -95
  416. package/dist/components/data/MChart/MLineChart.d.ts +0 -2
  417. package/dist/components/data/MChart/MPieChart.d.ts +0 -2
  418. package/dist/components/data/MChart/charts/MAreaChart.d.ts +0 -27
  419. package/dist/components/data/MChart/charts/MBarChart.d.ts +0 -26
  420. package/dist/components/data/MChart/charts/MLineChart.d.ts +0 -26
  421. package/dist/components/data/MChart/charts/MPieChart.d.ts +0 -19
  422. package/dist/components/data/MChart/index.d.ts +0 -5
  423. package/dist/components/data/MChart/parts/ChartAxis.d.ts +0 -13
  424. package/dist/components/data/MChart/parts/ChartDefs.d.ts +0 -1
  425. package/dist/components/data/MChart/parts/ChartGrid.d.ts +0 -10
  426. package/dist/components/data/MChart/parts/ChartLegend.d.ts +0 -9
  427. package/dist/components/data/MChart/parts/ChartTooltip.d.ts +0 -7
  428. package/dist/components/data/MChart/utils/formats.d.ts +0 -3
  429. package/dist/components/data/MChart/utils/paths.d.ts +0 -10
  430. package/dist/components/data/MChart/utils/scales.d.ts +0 -7
  431. package/dist/components/data/MChat/MChat.d.ts +0 -2
  432. package/dist/components/data/MChat/MChat.types.d.ts +0 -77
  433. package/dist/components/data/MChat/MChatBody.d.ts +0 -2
  434. package/dist/components/data/MChat/MChatContext.d.ts +0 -6
  435. package/dist/components/data/MChat/MChatConversationItem.d.ts +0 -2
  436. package/dist/components/data/MChat/MChatConversationList.d.ts +0 -2
  437. package/dist/components/data/MChat/MChatHeader.d.ts +0 -2
  438. package/dist/components/data/MChat/MChatInput.d.ts +0 -2
  439. package/dist/components/data/MChat/MChatMessage.d.ts +0 -2
  440. package/dist/components/data/MChat/MChatTypingIndicator.d.ts +0 -2
  441. package/dist/components/data/MChat/emojis.d.ts +0 -2
  442. package/dist/components/data/MChat/index.d.ts +0 -9
  443. package/dist/components/data/MFileManager/MFileManager.d.ts +0 -2
  444. package/dist/components/data/MFileManager/MFileManager.types.d.ts +0 -70
  445. package/dist/components/data/MFileManager/index.d.ts +0 -4
  446. package/dist/components/data/MSparkline/MSparkline.d.ts +0 -2
  447. package/dist/components/data/MSparkline/MSparkline.types.d.ts +0 -15
  448. package/dist/components/data/MSparkline/index.d.ts +0 -2
  449. package/dist/components/data/MTimelineCalendar/DayStrip.d.ts +0 -11
  450. package/dist/components/data/MTimelineCalendar/EventPopover.d.ts +0 -18
  451. package/dist/components/data/MTimelineCalendar/MTimelineCalendar.d.ts +0 -2
  452. package/dist/components/data/MTimelineCalendar/MTimelineCalendar.helpers.d.ts +0 -55
  453. package/dist/components/data/MTimelineCalendar/MTimelineCalendar.types.d.ts +0 -89
  454. package/dist/components/data/MTimelineCalendar/index.d.ts +0 -2
  455. package/dist/components/display/MQrCode/MQrCode.d.ts +0 -2
  456. package/dist/components/display/MQrCode/MQrCode.types.d.ts +0 -11
  457. package/dist/components/display/MQrCode/index.d.ts +0 -4
  458. package/dist/components/feedback/MCookie/MCookieBanner/MCookieBanner.d.ts +0 -3
  459. package/dist/components/feedback/MCookie/MCookieBanner/MCookieBanner.types.d.ts +0 -27
  460. package/dist/components/feedback/MCookie/MCookieBanner/index.d.ts +0 -2
  461. package/dist/components/feedback/MCookie/MCookieBootstrap/MCookieBootstrap.d.ts +0 -6
  462. package/dist/components/feedback/MCookie/MCookieBootstrap/MCookieBootstrap.script.d.ts +0 -4
  463. package/dist/components/feedback/MCookie/MCookieBootstrap/MCookieBootstrap.types.d.ts +0 -90
  464. package/dist/components/feedback/MCookie/MCookieBootstrap/index.d.ts +0 -3
  465. package/dist/components/feedback/MCookie/MCookieConsent/MCookieConsent.d.ts +0 -2
  466. package/dist/components/feedback/MCookie/MCookieConsent/MCookieConsent.types.d.ts +0 -11
  467. package/dist/components/feedback/MCookie/MCookieConsent/index.d.ts +0 -2
  468. package/dist/components/feedback/MCookie/MCookieConsentProvider/MCookieConsent.defaults.d.ts +0 -9
  469. package/dist/components/feedback/MCookie/MCookieConsentProvider/MCookieConsent.inventory.d.ts +0 -6
  470. package/dist/components/feedback/MCookie/MCookieConsentProvider/MCookieConsent.storage.d.ts +0 -11
  471. package/dist/components/feedback/MCookie/MCookieConsentProvider/MCookieConsent.types.d.ts +0 -95
  472. package/dist/components/feedback/MCookie/MCookieConsentProvider/MCookieConsentContext.d.ts +0 -4
  473. package/dist/components/feedback/MCookie/MCookieConsentProvider/MCookieConsentProvider.d.ts +0 -2
  474. package/dist/components/feedback/MCookie/MCookieConsentProvider/index.d.ts +0 -3
  475. package/dist/components/feedback/MCookie/MCookieDeclaration/MCookieDeclaration.d.ts +0 -2
  476. package/dist/components/feedback/MCookie/MCookieDeclaration/MCookieDeclaration.types.d.ts +0 -18
  477. package/dist/components/feedback/MCookie/MCookieDeclaration/index.d.ts +0 -2
  478. package/dist/components/feedback/MCookie/MCookiePreferences/MCookiePreferences.d.ts +0 -2
  479. package/dist/components/feedback/MCookie/MCookiePreferences/MCookiePreferences.types.d.ts +0 -25
  480. package/dist/components/feedback/MCookie/MCookiePreferences/index.d.ts +0 -2
  481. package/dist/components/feedback/MCookie/MCookieTrigger/MCookieTrigger.d.ts +0 -2
  482. package/dist/components/feedback/MCookie/MCookieTrigger/MCookieTrigger.types.d.ts +0 -7
  483. package/dist/components/feedback/MCookie/MCookieTrigger/index.d.ts +0 -2
  484. package/dist/components/feedback/MCookie/index.d.ts +0 -16
  485. package/dist/components/layout/MTopbar/MTopbar.d.ts +0 -2
  486. package/dist/components/layout/MTopbar/MTopbar.types.d.ts +0 -37
  487. package/dist/components/layout/MTopbar/index.d.ts +0 -2
  488. package/dist/components/media/MAvatarStack/MAvatarStack.d.ts +0 -2
  489. package/dist/components/media/MAvatarStack/MAvatarStack.types.d.ts +0 -27
  490. package/dist/components/media/MAvatarStack/index.d.ts +0 -2
  491. package/dist/components/media/MMasonry/MMasonry.d.ts +0 -2
  492. package/dist/components/media/MMasonry/MMasonry.types.d.ts +0 -7
  493. package/dist/components/media/MMasonry/index.d.ts +0 -2
  494. package/dist/components/media/MMasonryItem/MMasonryItem.d.ts +0 -2
  495. package/dist/components/media/MMasonryItem/MMasonryItem.types.d.ts +0 -14
  496. package/dist/components/media/MMasonryItem/index.d.ts +0 -2
  497. package/dist/components/media/MShowcaseCarousel/MShowcaseCarousel.d.ts +0 -2
  498. package/dist/components/media/MShowcaseCarousel/MShowcaseCarousel.types.d.ts +0 -19
  499. package/dist/components/media/MShowcaseCarousel/index.d.ts +0 -2
  500. package/dist/components/media/MShowcaseCarouselItem/MShowcaseCarouselItem.d.ts +0 -2
  501. package/dist/components/media/MShowcaseCarouselItem/MShowcaseCarouselItem.types.d.ts +0 -18
  502. package/dist/components/media/MShowcaseCarouselItem/index.d.ts +0 -2
  503. package/dist/controls-CYQxPd4U.cjs +0 -2
  504. package/dist/controls-CYQxPd4U.cjs.map +0 -1
  505. package/dist/controls-CcbEqqWo.js.map +0 -1
  506. package/dist/cookie-consent-bootstrap.cjs +0 -2
  507. package/dist/cookie-consent-bootstrap.cjs.map +0 -1
  508. package/dist/cookie-consent-bootstrap.d.ts +0 -1
  509. package/dist/cookie-consent-bootstrap.js +0 -106
  510. package/dist/cookie-consent-bootstrap.js.map +0 -1
  511. package/dist/core-BUYr52VU.js.map +0 -1
  512. package/dist/core-DAox0BHy.cjs.map +0 -1
  513. package/dist/cpp-D-FtdQo9.cjs.map +0 -1
  514. package/dist/cpp-Y9cHXDal.js.map +0 -1
  515. package/dist/css-C__ffGj6.js.map +0 -1
  516. package/dist/css-DCYZ-Rs6.cjs.map +0 -1
  517. package/dist/data-DtShJEic.cjs +0 -2
  518. package/dist/data-DtShJEic.cjs.map +0 -1
  519. package/dist/data-RXuvb9VI.js +0 -3454
  520. package/dist/data-RXuvb9VI.js.map +0 -1
  521. package/dist/display-96-TEGmZ.cjs +0 -3
  522. package/dist/display-96-TEGmZ.cjs.map +0 -1
  523. package/dist/display-C7YRf4Ze.js.map +0 -1
  524. package/dist/dropdowns-Ce3Pb2JM.cjs +0 -2
  525. package/dist/dropdowns-Ce3Pb2JM.cjs.map +0 -1
  526. package/dist/dropdowns-DfXhVlWQ.js +0 -1712
  527. package/dist/dropdowns-DfXhVlWQ.js.map +0 -1
  528. package/dist/feedback-DGT28-Zx.js +0 -1058
  529. package/dist/feedback-DGT28-Zx.js.map +0 -1
  530. package/dist/feedback-Dr7G3K_R.cjs +0 -2
  531. package/dist/feedback-Dr7G3K_R.cjs.map +0 -1
  532. package/dist/frameworkTexts-BLJcGUXz.cjs +0 -2
  533. package/dist/frameworkTexts-BLJcGUXz.cjs.map +0 -1
  534. package/dist/frameworkTexts-BTFyhWFD.js +0 -117
  535. package/dist/frameworkTexts-BTFyhWFD.js.map +0 -1
  536. package/dist/icons/MIconV2.d.ts +0 -7
  537. package/dist/icons/MIconV2Glyph.d.ts +0 -11
  538. package/dist/icons/MIconV2Scenes.d.ts +0 -41
  539. package/dist/icons/glyphs/MCalendarIconV2.d.ts +0 -2
  540. package/dist/icons/glyphs/MFlagIconsV2.d.ts +0 -19
  541. package/dist/icons/glyphs/MNavigationIconsV2.d.ts +0 -14
  542. package/dist/icons/glyphs/MSettingsIconV2.d.ts +0 -2
  543. package/dist/icons-CfpYxnfg.js.map +0 -1
  544. package/dist/icons-qCoE70hn.cjs +0 -2
  545. package/dist/icons-qCoE70hn.cjs.map +0 -1
  546. package/dist/index.cjs.map +0 -1
  547. package/dist/index.js.map +0 -1
  548. package/dist/javascript-ClV78Svx.js.map +0 -1
  549. package/dist/javascript-_Sr9cnsG.cjs.map +0 -1
  550. package/dist/json-BFetU4Pi.cjs.map +0 -1
  551. package/dist/json-Dz6EkGZR.js.map +0 -1
  552. package/dist/layout-dUrQeGc2.cjs +0 -2
  553. package/dist/layout-dUrQeGc2.cjs.map +0 -1
  554. package/dist/layout-tIq6BGQK.js +0 -711
  555. package/dist/layout-tIq6BGQK.js.map +0 -1
  556. package/dist/licensing-9sZ43Cif.cjs +0 -2
  557. package/dist/licensing-9sZ43Cif.cjs.map +0 -1
  558. package/dist/licensing-Bq78CLC_.js +0 -109
  559. package/dist/licensing-Bq78CLC_.js.map +0 -1
  560. package/dist/media-BySr5LGc.cjs +0 -2
  561. package/dist/media-BySr5LGc.cjs.map +0 -1
  562. package/dist/media-IQ4iYTs-.js +0 -391
  563. package/dist/media-IQ4iYTs-.js.map +0 -1
  564. package/dist/overlays-BabXGLEM.js +0 -392
  565. package/dist/overlays-BabXGLEM.js.map +0 -1
  566. package/dist/overlays-CTR3n21O.cjs +0 -2
  567. package/dist/overlays-CTR3n21O.cjs.map +0 -1
  568. package/dist/php-5Erp5xxI.js.map +0 -1
  569. package/dist/php-jOdR0XS8.cjs.map +0 -1
  570. package/dist/typescript-C65sNL5w.cjs.map +0 -1
  571. package/dist/typescript-wdQKWfxO.js.map +0 -1
  572. package/dist/typography-CAW17MDj.js +0 -31
  573. package/dist/typography-CAW17MDj.js.map +0 -1
  574. package/dist/typography-sbLuXqFn.cjs +0 -2
  575. package/dist/typography-sbLuXqFn.cjs.map +0 -1
  576. package/dist/utils/commandPaletteFromNavGroups.d.ts +0 -74
  577. package/dist/xml-B2okahIr.cjs.map +0 -1
  578. package/dist/xml-a3b-XevT.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout-BgfQpVOU.js","names":[],"sources":["../src/components/layout/MContainer/MContainer.tsx","../src/components/layout/MHeader/MHeader.tsx","../src/components/layout/MFooter/MFooter.tsx","../src/components/layout/MNavs/MNavs.tsx","../src/components/layout/MNavbar/MNavbar.tsx","../src/components/layout/MSection/MSection.tsx","../src/components/layout/MStatGrid/MStatGrid.tsx","../src/components/layout/MDivider/MDivider.tsx","../src/components/layout/MSidebar/MSidebar.tsx","../src/components/layout/MBreadcrumb/MBreadcrumb.tsx","../src/components/layout/MAppShell/MAppShell.tsx","../src/components/layout/MCanvasGrid/ScaleToFit.tsx","../src/components/layout/MCanvasGrid/MCanvasGrid.tsx"],"sourcesContent":["import type {MContainerProps} from './MContainer.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {getLayoutUtilityClassNames, getLayoutUtilityStyles} from '../../../utils/layoutProps'\nimport './MContainer.css'\n\n// Constrain page content widths and apply shared spacing utilities.\nexport function MContainer({\n size = 'content',\n padded = true,\n hidden,\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n className,\n style,\n children,\n ...rest\n}: MContainerProps) {\n const utilityStyle = getLayoutUtilityStyles({fsize})\n\n return (\n <div\n className={cn(\n 'container',\n size,\n padded && 'padded',\n ...getLayoutUtilityClassNames({\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n }),\n className\n )}\n style={{...utilityStyle, ...style}}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n {children}\n </div>\n )\n}\n","import type {MHeaderProps} from './MHeader.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {MContainer} from '../MContainer'\nimport './MHeader.css'\n\n// Render a reusable page header shell aligned to a shared container.\nexport function MHeader({\n container = 'wide',\n padded = true,\n bordered = true,\n sticky = false,\n tone = 'surface',\n layout = 'split',\n hidden,\n className,\n children,\n ...rest\n}: MHeaderProps) {\n return (\n <header\n className={cn('header', tone, bordered && 'bordered', sticky && 'sticky', className)}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n <MContainer size={container} padded={padded} className={cn('inner', `layout-${layout}`)}>\n {children}\n </MContainer>\n </header>\n )\n}\n","import type {MFooterProps} from './MFooter.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {getLayoutUtilityClassNames, getLayoutUtilityStyles} from '../../../utils/layoutProps'\nimport {MContainer} from '../MContainer'\nimport './MFooter.css'\n\n// Render a reusable page footer shell with shared spacing utilities.\nexport function MFooter({\n container = 'wide',\n padded = true,\n bordered = true,\n tone = 'surface',\n hidden,\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n className,\n style,\n children,\n ...rest\n}: MFooterProps) {\n const utilityStyle = getLayoutUtilityStyles({fsize})\n\n return (\n <footer\n className={cn(\n 'footer',\n tone,\n bordered && 'bordered',\n ...getLayoutUtilityClassNames({\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n }),\n className\n )}\n style={{...utilityStyle, ...style}}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n <MContainer size={container} padded={padded} className=\"inner\" fullWidth>\n {children}\n </MContainer>\n </footer>\n )\n}\n","import type {MNavsProps} from './MNavs.types'\nimport {cn} from '../../../utils/cn'\nimport {MLink} from '../../typography'\nimport './MNavs.css'\n\n// Render a lightweight navigation list from data or custom children.\nexport function MNavs({items, orientation = 'horizontal', wrap = false, className, children, ...rest}: MNavsProps) {\n return (\n <div className={cn('navs', orientation, wrap && 'wrap', className)} {...rest}>\n {items\n ? items.map((item) => {\n const Icon = item.icon\n const hideLabel = item.iconOnly === true && Icon != null\n const labelAsString = typeof item.label === 'string' ? item.label : undefined\n const ariaLabel = hideLabel ? labelAsString : undefined\n const linkTitle = item.title ?? (hideLabel ? labelAsString : undefined)\n\n return (\n <MLink\n key={item.key ?? item.href ?? item.title?.toString() ?? labelAsString ?? ''}\n component={item.component}\n href={item.href}\n to={item.to}\n target={item.target}\n rel={item.rel}\n title={linkTitle}\n current={item.current}\n disabled={item.disabled}\n className={cn('link', hideLabel && 'icon-only', item.className)}\n aria-label={ariaLabel}\n >\n {Icon ? (\n <span className=\"icon\" aria-hidden={!hideLabel || undefined}>\n <Icon size={item.iconSize} />\n </span>\n ) : null}\n {!hideLabel ? item.label : null}\n </MLink>\n )\n })\n : children}\n </div>\n )\n}\n","import {Children, cloneElement, isValidElement, useEffect, useId, useRef, useState} from 'react'\nimport type {MouseEvent as ReactMouseEvent, ReactElement, ReactNode} from 'react'\nimport type {MNavbarProps} from './MNavbar.types'\nimport {getHiddenProps, MShellBreakpoints, useMaxWidth} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {MContainer} from '../MContainer'\nimport {MInline} from '../MInline'\nimport type {MInlineProps} from '../MInline'\nimport {MNavs} from '../MNavs'\nimport {MButton} from '../../controls/MButton'\nimport {MMenuIcon} from '../../../icons'\nimport './MNavbar.css'\n\ntype NavLikeElement = ReactElement<{children?: ReactNode; orientation?: 'horizontal' | 'vertical'}>\n\n// Walks the children tree (any depth) looking for MNavs instances so the navbar\n// can pull them into the mobile menu even when wrapped in MInline / MStack.\nfunction findNavLikeChildren(children: ReactNode, found: NavLikeElement[] = []): NavLikeElement[] {\n Children.forEach(children, (child) => {\n if (!isValidElement(child)) {\n return\n }\n if (child.type === MNavs) {\n found.push(child as NavLikeElement)\n return\n }\n const nestedChildren = (child.props as {children?: ReactNode} | null)?.children\n if (nestedChildren !== undefined) {\n findNavLikeChildren(nestedChildren, found)\n }\n })\n return found\n}\n\n// Render a horizontal app or site navigation shell with container alignment.\n// Below the md breakpoint MNavs children are collapsed behind a hamburger toggle\n// that opens either a dropdown panel or a side drawer with the navigation items.\nexport function MNavbar({\n container = 'content',\n padded = true,\n bordered = true,\n sticky = false,\n tone = 'surface',\n justify = 'between',\n wrap = false,\n mobileMenu = 'dropdown',\n mobileMenuContent,\n mobileMenuFooter,\n collapseActions = false,\n mobileMenuLabel = 'Open navigation',\n mobileBreakpoint = MShellBreakpoints.compact,\n hidden,\n className,\n children,\n ...rest\n}: MNavbarProps) {\n const [open, setOpen] = useState(false)\n const rootRef = useRef<HTMLElement | null>(null)\n const menuId = useId()\n const mobile = useMaxWidth(mobileBreakpoint)\n\n const childArray = Children.toArray(children)\n\n const mobileNavs = findNavLikeChildren(children).map((element, index) =>\n cloneElement(element, {\n key: `mnavbar-mobile-navs-${index}`,\n orientation: 'vertical',\n })\n )\n\n const toggleButton = (\n <MButton\n key=\"mnavbar-toggle\"\n type=\"button\"\n variant=\"ghost\"\n size=\"md\"\n shape=\"circle\"\n iconOnly\n className=\"navbar-toggle\"\n aria-label={mobileMenuLabel}\n aria-expanded={open}\n aria-controls={menuId}\n onClick={handleToggleClick}\n >\n <MMenuIcon />\n </MButton>\n )\n\n let lastInlineIndex = -1\n for (let index = childArray.length - 1; index >= 0; index -= 1) {\n const child = childArray[index]\n if (isValidElement(child) && child.type === MInline) {\n lastInlineIndex = index\n break\n }\n }\n\n // When collapseActions is on and we're below the breakpoint, the last inline\n // (usually theme / lang / search) is pulled out of the bar and rendered in\n // the mobile menu footer. The burger toggle then attaches to the previous\n // inline (typically primary actions) — or sits on its own when none exists.\n const shouldCollapseLastInline = collapseActions && mobile && lastInlineIndex !== -1\n let collapsedActionsInline: ReactElement<MInlineProps> | null = null\n let workingChildren = childArray\n let toggleHostIndex = lastInlineIndex\n if (shouldCollapseLastInline) {\n collapsedActionsInline = childArray[lastInlineIndex] as ReactElement<MInlineProps>\n workingChildren = childArray.filter((_, index) => index !== lastInlineIndex)\n toggleHostIndex = -1\n for (let index = workingChildren.length - 1; index >= 0; index -= 1) {\n const child = workingChildren[index]\n if (isValidElement(child) && child.type === MInline) {\n toggleHostIndex = index\n break\n }\n }\n }\n\n const renderedChildren =\n toggleHostIndex === -1\n ? [...workingChildren, toggleButton]\n : workingChildren.map((child, index) => {\n if (index !== toggleHostIndex) return child\n const inlineChild = child as ReactElement<MInlineProps>\n const inlineChildren = Children.toArray(inlineChild.props.children)\n return cloneElement(inlineChild, {\n key: inlineChild.key ?? `mnavbar-inline-${index}`,\n children: [...inlineChildren, toggleButton],\n })\n })\n\n useEffect(() => {\n if (!open) return\n\n function handlePointerDown(event: PointerEvent) {\n const root = rootRef.current\n if (!root) return\n if (event.target instanceof Node && root.contains(event.target)) return\n setOpen(false)\n }\n\n function handleKeydown(event: KeyboardEvent) {\n if (event.key === 'Escape') setOpen(false)\n }\n\n document.addEventListener('pointerdown', handlePointerDown)\n document.addEventListener('keydown', handleKeydown)\n return () => {\n document.removeEventListener('pointerdown', handlePointerDown)\n document.removeEventListener('keydown', handleKeydown)\n }\n }, [open])\n\n useEffect(() => {\n if (!mobile) {\n setOpen(false)\n }\n }, [mobile])\n\n function handleToggleClick() {\n setOpen((previous) => !previous)\n }\n\n function handleMenuClick(event: ReactMouseEvent<HTMLDivElement>) {\n const target = event.target as HTMLElement | null\n if (!target) return\n if (target.closest('a, [role=\"menuitem\"]')) {\n setOpen(false)\n }\n }\n\n return (\n <nav\n ref={rootRef}\n className={cn(\n 'navbar',\n tone,\n bordered && 'bordered',\n sticky && 'sticky',\n mobile && 'mobile-view',\n open && 'mobile-open',\n `mobile-${mobileMenu}`,\n className\n )}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n <MContainer size={container} padded={padded} className=\"container\">\n <div className={cn('inner', justify, wrap && 'wrap')}>{renderedChildren}</div>\n </MContainer>\n\n {mobileMenu === 'drawer' && <div className={cn('mobile-backdrop', open && 'visible')} aria-hidden />}\n\n <div\n id={menuId}\n className={cn('mobile-menu', mobileMenu, open && 'open')}\n role=\"menu\"\n aria-hidden={!open || undefined}\n onClick={handleMenuClick}\n >\n {mobileNavs}\n {mobileMenuContent}\n {collapsedActionsInline ? (\n <div className=\"mobile-menu-footer\">\n {cloneElement(collapsedActionsInline, {\n key: 'mnavbar-collapsed-actions',\n })}\n </div>\n ) : null}\n {mobileMenuFooter ? <div className=\"mobile-menu-footer\">{mobileMenuFooter}</div> : null}\n </div>\n </nav>\n )\n}\n","import type React from 'react'\nimport type {MSectionProps} from './MSection.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport './MSection.css'\n\n// Render a semantic page section with predefined spacing and tone.\nexport function MSection({\n as = 'section',\n spacing = 'lg',\n tone = 'default',\n hidden,\n className,\n style,\n children,\n ...rest\n}: MSectionProps) {\n const Component = as\n\n return (\n <Component\n className={cn('section', spacing, tone, className)}\n style={style}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n {children}\n </Component>\n )\n}\n","import type {MStatGridProps} from './MStatGrid.types'\nimport {MSimpleGrid} from '../MSimpleGrid'\n\nexport function MStatGrid<T>({\n items,\n renderItem,\n children,\n columns = 4,\n minItemWidth = '15rem',\n ...rest\n}: MStatGridProps<T>) {\n return (\n <MSimpleGrid columns={columns} minItemWidth={minItemWidth} {...rest}>\n {items && renderItem ? items.map((item, index) => renderItem(item, index)) : children}\n </MSimpleGrid>\n )\n}\n","import type {MDividerProps} from './MDivider.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport './MDivider.css'\n\n// Render a semantic divider line between related content blocks.\nexport function MDivider({\n orientation = 'horizontal',\n variant = 'solid',\n hidden,\n className,\n style,\n ...rest\n}: MDividerProps) {\n return (\n <div\n role=\"separator\"\n aria-orientation={orientation}\n className={cn('divider', orientation, variant, className)}\n style={style}\n {...getHiddenProps(hidden)}\n {...rest}\n />\n )\n}\n","import {createContext, useContext, useState, useEffect, useCallback, useMemo} from 'react'\nimport {cn} from '../../../utils/cn'\nimport {MButton} from '../../controls'\nimport {MChevronRightIcon, MMenuIcon} from '../../../icons'\nimport {MDropdownMenu, MTooltip} from '../../overlays'\nimport {MShellBreakpoints, useMaxWidth} from '../../../theme'\nimport type {\n MSidebarProps,\n MSidebarHeaderProps,\n MSidebarBodyProps,\n MSidebarNavProps,\n MSidebarItemProps,\n MSidebarGroupProps,\n MSidebarFooterProps,\n MSidebarDividerProps,\n MSidebarMode,\n} from './MSidebar.types'\nimport './MSidebar.css'\n\nconst STORAGE_KEY = 'mineralui-sidebar'\n\ninterface SidebarContextValue {\n mode: MSidebarMode\n mobile: boolean\n mobileOpen: boolean\n canToggle: boolean\n toggleMode: () => void\n}\n\nconst SidebarCtx = createContext<SidebarContextValue>({\n mode: 'expanded',\n mobile: false,\n mobileOpen: false,\n canToggle: false,\n toggleMode: () => {},\n})\n\n// Read shared sidebar state inside slot components.\nfunction useSidebar() {\n return useContext(SidebarCtx)\n}\n\n// Render the sidebar shell and coordinate desktop and mobile behavior.\nexport function MSidebar({\n mode: modeProp = 'auto',\n defaultMode = 'expanded',\n onModeChange,\n persist = false,\n side = 'left',\n tone = 'subtle',\n bordered = true,\n mobileBreakpoint = MShellBreakpoints.mobile,\n compactBreakpoint = MShellBreakpoints.compact,\n className,\n style,\n children,\n}: MSidebarProps) {\n const resolvedCompactBreakpoint = Math.max(compactBreakpoint, mobileBreakpoint)\n const mobile = useMaxWidth(mobileBreakpoint)\n const compactViewport = useMaxWidth(resolvedCompactBreakpoint)\n const compact = !mobile && compactViewport\n const [mobileOpen, setMobileOpen] = useState(false)\n\n const [internalMode, setInternalMode] = useState<MSidebarMode>(() => {\n if (persist) {\n try {\n const v = localStorage.getItem(STORAGE_KEY)\n if (v === 'expanded' || v === 'collapsed') return v\n } catch {\n /* noop */\n }\n }\n\n return defaultMode\n })\n\n const resolvedMode: MSidebarMode = mobile\n ? 'expanded'\n : compact\n ? 'collapsed'\n : modeProp === 'auto'\n ? internalMode\n : modeProp === 'collapsed'\n ? 'collapsed'\n : 'expanded'\n\n // MToggle only the desktop width state. Mobile uses its own overlay flow.\n const toggleMode = useCallback(() => {\n const next: MSidebarMode = resolvedMode === 'expanded' ? 'collapsed' : 'expanded'\n\n setInternalMode(next)\n onModeChange?.(next)\n\n if (persist) {\n try {\n localStorage.setItem(STORAGE_KEY, next)\n } catch {\n /* noop */\n }\n }\n }, [resolvedMode, onModeChange, persist])\n\n const closeMobile = useCallback(() => setMobileOpen(false), [])\n\n // Let Escape close the temporary mobile drawer.\n useEffect(() => {\n if (!mobileOpen) return\n\n const handler = (e: KeyboardEvent) => {\n if (e.key === 'Escape') setMobileOpen(false)\n }\n\n document.addEventListener('keydown', handler)\n return () => document.removeEventListener('keydown', handler)\n }, [mobileOpen])\n\n useEffect(() => {\n if (!mobile) {\n setMobileOpen(false)\n }\n }, [mobile])\n\n const canToggle = !mobile && !compact && modeProp === 'auto'\n\n const ctx = useMemo<SidebarContextValue>(\n () => ({mode: resolvedMode, mobile, mobileOpen, canToggle, toggleMode}),\n [resolvedMode, mobile, mobileOpen, canToggle, toggleMode]\n )\n\n const isCollapsed = !mobile && resolvedMode === 'collapsed'\n\n const sidebarCls = cn(\n 'sidebar',\n tone,\n side,\n isCollapsed && 'collapsed',\n compact && 'compact',\n bordered && 'bordered',\n mobile && 'mobile',\n mobile && mobileOpen && 'mobile-open',\n className\n )\n\n return (\n <SidebarCtx.Provider value={ctx}>\n {mobile && mobileOpen && <div className=\"sidebar-backdrop\" onClick={closeMobile} />}\n\n <aside className={sidebarCls} style={style}>\n {children}\n </aside>\n\n {mobile && !mobileOpen && (\n <button\n className={cn('sidebar-hamburger', side)}\n onClick={() => setMobileOpen(true)}\n aria-label=\"Open menu\"\n >\n <span className=\"sidebar-hamburger-icon\" aria-hidden=\"true\">\n <MMenuIcon />\n </span>\n </button>\n )}\n </SidebarCtx.Provider>\n )\n}\n\n// Render the top area with branding and an optional collapse toggle.\nexport function MSidebarHeader({bordered = false, className, children}: MSidebarHeaderProps) {\n const {mode, mobile, canToggle, toggleMode} = useSidebar()\n const isCollapsed = !mobile && mode === 'collapsed'\n\n return (\n <div className={cn('sidebar-header', bordered && 'bordered', className)}>\n <div className=\"sidebar-header-content\">{children}</div>\n {canToggle && (\n <MButton\n variant=\"outlined\"\n color=\"neutral\"\n iconOnly\n size=\"sm\"\n onClick={toggleMode}\n aria-label={isCollapsed ? 'Expand sidebar' : 'Collapse sidebar'}\n className=\"sidebar-toggle\"\n >\n <span className={cn('sidebar-chevron', isCollapsed && 'flipped')}>\n <MChevronRightIcon />\n </span>\n </MButton>\n )}\n </div>\n )\n}\n\n// Wrap the scrollable middle area between header and footer.\nexport function MSidebarBody({className, children}: MSidebarBodyProps) {\n return <div className={cn('sidebar-body', className)}>{children}</div>\n}\n\n// Wrap sidebar links in a navigation landmark.\nexport function MSidebarNav({className, children}: MSidebarNavProps) {\n return <nav className={cn('sidebar-nav', className)}>{children}</nav>\n}\n\n// Render one clickable sidebar row as a link, button or custom component.\nexport function MSidebarItem({\n icon,\n label,\n description,\n href,\n to,\n onClick,\n active = false,\n disabled = false,\n badge,\n color,\n component,\n className,\n}: MSidebarItemProps) {\n const {mode, mobile} = useSidebar()\n const isCollapsed = !mobile && mode === 'collapsed'\n\n // ONE tooltip per row: prefer description, fall back to label. The HTML\n // title attribute used in collapsed mode mirrors the same priority but is\n // limited to strings (browsers can't render ReactNodes).\n const tooltipContent = description ?? label\n const titleAttr = typeof description === 'string'\n ? description\n : typeof label === 'string'\n ? label\n : undefined\n\n const Tag = component ?? (href || to ? 'a' : 'button')\n const linkProps = component ? (to ? {to} : href ? {href} : {}) : href ? {href} : to ? {href: to} : {}\n const cls = cn('sidebar-item', active && 'active', disabled && 'disabled', color, className)\n\n return (\n <Tag\n className={cls}\n onClick={disabled ? undefined : onClick}\n aria-disabled={disabled || undefined}\n title={isCollapsed ? titleAttr : undefined}\n {...linkProps}\n >\n {icon && <span className=\"sidebar-item-icon\">{icon}</span>}\n {!isCollapsed && (\n <MTooltip content={tooltipContent} placement=\"top\" className=\"sidebar-item-label-tooltip\">\n <span className=\"sidebar-item-label\">{label}</span>\n </MTooltip>\n )}\n {!isCollapsed && badge && <span className=\"sidebar-item-badge\">{badge}</span>}\n </Tag>\n )\n}\n\n// Group related sidebar items and swap to a dropdown when collapsed.\nexport function MSidebarGroup({\n label,\n icon,\n active = false,\n defaultOpen = true,\n collapsible = true,\n children,\n className,\n}: MSidebarGroupProps) {\n const sidebarCtx = useSidebar()\n const {mode, mobile} = sidebarCtx\n const isCollapsed = !mobile && mode === 'collapsed'\n const [open, setOpen] = useState(defaultOpen)\n\n const expandedCtx = useMemo<SidebarContextValue>(() => ({...sidebarCtx, mode: 'expanded'}), [sidebarCtx])\n\n // Keep expand/collapse local to this group.\n const toggle = () => {\n if (collapsible) setOpen((o) => !o)\n }\n\n if (isCollapsed) {\n const trigger = (\n <span className={cn('sidebar-group-icon collapsed', active && 'active')} title={label}>\n {icon}\n </span>\n )\n\n return (\n <div className={cn('sidebar-group', className)}>\n <MDropdownMenu trigger={trigger} placement=\"right-start\" closeOnSelect openOn=\"hover\">\n <SidebarCtx.Provider value={expandedCtx}>{children}</SidebarCtx.Provider>\n </MDropdownMenu>\n </div>\n )\n }\n\n return (\n <div className={cn('sidebar-group', className)}>\n <button className={cn('sidebar-group-header', active && 'active')} onClick={toggle} aria-expanded={open}>\n {icon && <span className=\"sidebar-group-icon\">{icon}</span>}\n <span className=\"sidebar-group-label\">{label}</span>\n {collapsible && (\n <span className={cn('sidebar-group-arrow', open && 'open')}>\n <MChevronRightIcon />\n </span>\n )}\n </button>\n {open && <div className=\"sidebar-group-items\">{children}</div>}\n </div>\n )\n}\n\n// Render the bottom slot for version info or quick actions.\nexport function MSidebarFooter({bordered = false, className, children}: MSidebarFooterProps) {\n return <div className={cn('sidebar-footer', bordered && 'bordered', className)}>{children}</div>\n}\n\n// Render a spacing-aware divider between sidebar regions.\nexport function MSidebarDivider({className, spacing = 'md'}: MSidebarDividerProps) {\n return <hr className={cn('sidebar-divider', spacing, className)} />\n}\n","import {useMemo} from 'react'\nimport {cn} from '../../../utils/cn'\nimport type {MBreadcrumbProps} from './MBreadcrumb.types'\nimport './MBreadcrumb.css'\n\n// Render a compact path and collapse the middle when needed.\nexport function MBreadcrumb({items, separator = '/', maxItems, className, ...rest}: MBreadcrumbProps) {\n // Keep the current page visible while shortening deep paths.\n const visible = useMemo(() => {\n if (!maxItems || maxItems >= items.length) return items\n if (maxItems < 2) return [items[items.length - 1]]\n const head = items.slice(0, 1)\n const tail = items.slice(-(maxItems - 1))\n return [...head, null, ...tail]\n }, [items, maxItems])\n\n return (\n <nav aria-label=\"breadcrumb\" className={cn('breadcrumb', className)} {...rest}>\n <ol className=\"trail\">\n {visible.map((item, i) => {\n if (item === null) {\n return (\n <li key=\"ellipsis\" className=\"crumb dots\">\n <span className=\"sep\">{separator}</span>\n <span>&#8230;</span>\n </li>\n )\n }\n\n const isLast = i === visible.length - 1\n\n return (\n <li key={i} className={cn('crumb', isLast && 'active')}>\n {i > 0 && <span className=\"sep\">{separator}</span>}\n {item.href && !isLast ? (\n <a href={item.href} className=\"link\" onClick={item.onClick}>\n {item.label}\n </a>\n ) : item.onClick && !isLast ? (\n <button type=\"button\" className=\"link btn\" onClick={item.onClick}>\n {item.label}\n </button>\n ) : (\n <span className=\"current\" aria-current={isLast ? 'page' : undefined}>\n {item.label}\n </span>\n )}\n </li>\n )\n })}\n </ol>\n </nav>\n )\n}\n","import {forwardRef, Children, isValidElement} from 'react'\nimport type * as React from 'react'\nimport type {MAppShellProps, MBodyProps} from './MAppShell.types'\nimport {cn} from '../../../utils/cn'\nimport {MSidebar} from '../MSidebar'\nimport './MAppShell.css'\n\nexport const MAppShell = forwardRef<HTMLDivElement, MAppShellProps>(function MAppShell(\n {className, children, ...rest},\n ref\n) {\n const sidebarElements: React.ReactNode[] = []\n const otherElements: React.ReactNode[] = []\n\n Children.forEach(children, (child) => {\n if (isValidElement(child) && child.type === MSidebar) {\n sidebarElements.push(child)\n } else {\n otherElements.push(child)\n }\n })\n\n return (\n <div ref={ref} className={cn('app-shell', className)} {...rest}>\n {sidebarElements}\n <div className=\"app-main\">{otherElements}</div>\n </div>\n )\n})\n\nexport const MBody = forwardRef<HTMLDivElement, MBodyProps>(function MBody({className, children, ...rest}, ref) {\n return (\n <div ref={ref} className={cn('app-body', className)} {...rest}>\n {children}\n </div>\n )\n})\n","import {useEffect, useRef, useState, type ReactNode} from 'react'\n\ninterface ScaleToFitProps {\n /**\n * Minimum render width (in CSS px). When the parent is narrower, content\n * is rendered at this width and scaled down. When the parent is wider,\n * content is rendered at the parent's width (no scale-up, no padding).\n */\n baseWidth?: number\n children: ReactNode\n}\n\n/**\n * Renders `children` at `max(baseWidth, parentWidth)`, then applies\n * `transform: scale(...)` so the rendered block fits the parent box without\n * scrollbars. Scale never exceeds 1 (no blurry up-scaling). When the parent\n * is wider than baseWidth, render width tracks the parent so content fills\n * the available space natively (no horizontal padding).\n */\nexport function ScaleToFit({baseWidth = 480, children}: ScaleToFitProps) {\n const wrapperRef = useRef<HTMLDivElement>(null)\n const contentRef = useRef<HTMLDivElement>(null)\n const [scale, setScale] = useState(1)\n const [renderWidth, setRenderWidth] = useState<number>(baseWidth)\n\n useEffect(() => {\n const wrap = wrapperRef.current\n const content = contentRef.current\n if (!wrap || !content) return\n\n let frame = 0\n const recompute = () => {\n cancelAnimationFrame(frame)\n frame = requestAnimationFrame(() => {\n const wW = wrap.clientWidth\n const wH = wrap.clientHeight\n if (wW === 0 || wH === 0) return\n const cW = Math.max(baseWidth, wW)\n const cH = content.offsetHeight\n if (cW === 0 || cH === 0) return\n const sW = wW / cW\n const sH = wH / cH\n const next = Math.min(sW, sH, 1)\n if (next > 0 && Number.isFinite(next)) {\n setRenderWidth(cW)\n setScale(next)\n }\n })\n }\n\n const ro = new ResizeObserver(recompute)\n ro.observe(wrap)\n ro.observe(content)\n recompute()\n return () => {\n cancelAnimationFrame(frame)\n ro.disconnect()\n }\n }, [baseWidth])\n\n return (\n <div ref={wrapperRef} className=\"canvas-grid-scale-wrapper\">\n <div\n ref={contentRef}\n className=\"canvas-grid-scale-content\"\n style={{width: `${renderWidth}px`, transform: `scale(${scale})`}}\n >\n {children}\n </div>\n </div>\n )\n}\n","import {forwardRef, useCallback, useEffect, useRef, useState} from 'react'\nimport type {CSSProperties, ForwardedRef, PointerEvent as ReactPointerEvent, ReactElement, Ref} from 'react'\nimport type {MCanvasGridItem, MCanvasGridPosition, MCanvasGridProps} from './MCanvasGrid.types'\nimport {cn} from '../../../utils/cn'\nimport {MShellBreakpoints, useMaxWidth} from '../../../theme'\nimport {MEditIcon, MMoveIcon, MTrashIcon, MZoomInIcon} from '../../../icons'\nimport {MButton} from '../../controls/MButton'\nimport {MButtonGroup} from '../../controls/MButtonGroup'\nimport {ScaleToFit} from './ScaleToFit'\nimport './MCanvasGrid.css'\n\ninterface DragState {\n itemId: string\n mode: 'drag' | 'resize'\n startClientX: number\n startClientY: number\n original: MCanvasGridPosition\n}\n\nfunction clamp(value: number, min: number, max: number) {\n return Math.max(min, Math.min(max, value))\n}\n\nfunction MCanvasGridInner<T extends MCanvasGridItem>(\n {\n columns = 24,\n rows = 24,\n snap = 4,\n items,\n renderItem,\n minItemSize,\n maxItemSize: _maxItemSize,\n editable = false,\n onItemMove,\n onItemResize,\n onItemRemove,\n onItemEdit,\n onItemExpand,\n guides = 'always',\n compactBreakpoint = MShellBreakpoints.compact,\n mobileBreakpoint = MShellBreakpoints.mobile,\n height,\n fitContent = 'scroll',\n fitContentBaseWidth = 480,\n className,\n style,\n }: MCanvasGridProps<T>,\n ref: ForwardedRef<HTMLDivElement>\n) {\n const innerRef = useRef<HTMLDivElement | null>(null)\n const [size, setSize] = useState({width: 0, height: 0})\n const [drag, setDrag] = useState<DragState | null>(null)\n const [preview, setPreview] = useState<MCanvasGridPosition | null>(null)\n const [touchOrder, setTouchOrder] = useState<Record<string, number>>({})\n const touchCounterRef = useRef(0)\n\n function bringToFront(itemId: string) {\n touchCounterRef.current += 1\n setTouchOrder((prev) => ({...prev, [itemId]: touchCounterRef.current}))\n }\n\n function suppressNextClick() {\n let armed = true\n const stopper = (ev: MouseEvent) => {\n if (!armed) return\n armed = false\n ev.stopPropagation()\n ev.preventDefault()\n window.removeEventListener('click', stopper, true)\n }\n window.addEventListener('click', stopper, true)\n window.setTimeout(() => {\n if (!armed) return\n armed = false\n window.removeEventListener('click', stopper, true)\n }, 60)\n }\n\n const isMobile = useMaxWidth(mobileBreakpoint)\n const isCompact = useMaxWidth(compactBreakpoint) && !isMobile\n\n const totalCols = columns * snap\n const totalRows = rows * snap\n const effectiveCols = isCompact ? Math.max(1, Math.round(totalCols / 2)) : totalCols\n const effectiveRows = isCompact ? Math.max(1, Math.round(totalRows / 2)) : totalRows\n const effectiveCells = isCompact ? Math.max(1, Math.round(columns / 2)) : columns\n const effectiveRowCells = isCompact ? Math.max(1, Math.round(rows / 2)) : rows\n\n const interactive = editable && !isMobile\n\n useEffect(() => {\n const node = innerRef.current\n if (!node || typeof ResizeObserver === 'undefined') return\n const update = () => setSize({width: node.clientWidth, height: node.clientHeight})\n update()\n const observer = new ResizeObserver(update)\n observer.observe(node)\n return () => observer.disconnect()\n }, [])\n\n const setRefs = useCallback(\n (node: HTMLDivElement | null) => {\n innerRef.current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) (ref as {current: HTMLDivElement | null}).current = node\n },\n [ref]\n )\n\n function getMin(item: T) {\n const m = minItemSize?.(item)\n if (!m) return {w: snap, h: snap}\n return {w: Math.max(snap, m.w * snap), h: Math.max(snap, m.h * snap)}\n }\n\n function startResize(e: ReactPointerEvent<HTMLDivElement>, item: T) {\n if (!interactive) return\n e.stopPropagation()\n e.preventDefault()\n ;(e.currentTarget as Element).setPointerCapture(e.pointerId)\n bringToFront(item.id)\n setDrag({\n itemId: item.id,\n mode: 'resize',\n startClientX: e.clientX,\n startClientY: e.clientY,\n original: {...item.position},\n })\n setPreview({...item.position})\n }\n\n function startDragFromHeader(e: ReactPointerEvent<HTMLDivElement>, item: T) {\n if (!interactive) return\n if ((e.target as Element).closest('button, [role=\"button\"]')) return\n e.stopPropagation()\n e.preventDefault()\n ;(e.currentTarget as Element).setPointerCapture(e.pointerId)\n bringToFront(item.id)\n setDrag({\n itemId: item.id,\n mode: 'drag',\n startClientX: e.clientX,\n startClientY: e.clientY,\n original: {...item.position},\n })\n setPreview({...item.position})\n }\n\n function handlePointerMove(e: ReactPointerEvent<HTMLDivElement>) {\n if (!drag || size.width === 0 || size.height === 0) return\n const cellPxX = size.width / effectiveCols\n const cellPxY = size.height / effectiveRows\n const dx = Math.round((e.clientX - drag.startClientX) / cellPxX)\n const dy = Math.round((e.clientY - drag.startClientY) / cellPxY)\n const original = drag.original\n\n const targetItem = items.find((it) => it.id === drag.itemId)\n const min = targetItem ? getMin(targetItem) : {w: snap, h: snap}\n\n if (drag.mode === 'drag') {\n const x = clamp(original.x + dx, 0, effectiveCols - original.w)\n const y = clamp(original.y + dy, 0, effectiveRows - original.h)\n setPreview({x, y, w: original.w, h: original.h})\n } else {\n const w = clamp(original.w + dx, min.w, effectiveCols - original.x)\n const h = clamp(original.h + dy, min.h, effectiveRows - original.y)\n setPreview({x: original.x, y: original.y, w, h})\n }\n }\n\n function handlePointerUp(e: ReactPointerEvent<HTMLDivElement>) {\n if (!drag) return\n try {\n ;(e.currentTarget as Element).releasePointerCapture(e.pointerId)\n } catch {\n // pointer may have already been released\n }\n if (preview) {\n if (drag.mode === 'drag') onItemMove?.(drag.itemId, preview)\n else onItemResize?.(drag.itemId, preview)\n }\n setDrag(null)\n setPreview(null)\n }\n\n function handleHeaderPointerUp(e: ReactPointerEvent<HTMLDivElement>) {\n if (drag) {\n suppressNextClick()\n handlePointerUp(e)\n }\n }\n\n const guidesOn =\n guides === 'always' ||\n (guides === 'on-edit' && interactive) ||\n (guides === 'on-drag' && drag !== null)\n\n const heightStyle: CSSProperties | undefined =\n height !== undefined ? {height: typeof height === 'number' ? `${height}px` : height} : undefined\n\n if (isMobile) {\n const ordered = [...items].sort((a, b) => a.position.y - b.position.y)\n return (\n <div\n ref={setRefs}\n className={cn('canvas-grid', 'mobile', className)}\n data-guides=\"off\"\n style={{...heightStyle, ...style}}\n >\n {ordered.map((item) => (\n <div key={item.id} className=\"canvas-grid-item\">\n {renderItem(item)}\n </div>\n ))}\n </div>\n )\n }\n\n const gridStyle: CSSProperties = {\n ...heightStyle,\n ...style,\n gridTemplateColumns: `repeat(${effectiveCols}, 1fr)`,\n gridTemplateRows: `repeat(${effectiveRows}, 1fr)`,\n ['--canvas-grid-cells' as string]: String(effectiveCells),\n ['--canvas-grid-row-cells' as string]: String(effectiveRowCells),\n }\n\n const overlayCells = effectiveCells * effectiveRowCells\n\n return (\n <div\n ref={setRefs}\n className={cn('canvas-grid', isCompact && 'compact', interactive && 'editable', className)}\n data-guides={guidesOn ? 'on' : 'off'}\n style={gridStyle}\n >\n <div className=\"canvas-grid-overlay\" aria-hidden>\n {Array.from({length: overlayCells}, (_, idx) => {\n const isLastCol = (idx + 1) % effectiveCells === 0\n const isLastRow = idx >= overlayCells - effectiveCells\n return (\n <div\n key={idx}\n className={cn('canvas-grid-cell', isLastCol && 'no-right', isLastRow && 'no-bottom')}\n />\n )\n })}\n </div>\n\n {items.map((item) => {\n const isDragging = drag?.itemId === item.id\n const live = isDragging && preview ? preview : item.position\n // half-precision math for compact viewport\n const x = isCompact ? Math.round(live.x / 2) : live.x\n const y = isCompact ? Math.round(live.y / 2) : live.y\n const w = Math.max(1, isCompact ? Math.round(live.w / 2) : live.w)\n const h = Math.max(1, isCompact ? Math.round(live.h / 2) : live.h)\n\n const baseZ = 1 + (touchOrder[item.id] ?? 0)\n const itemStyle: CSSProperties = {\n gridColumn: `${x + 1} / span ${w}`,\n gridRow: `${y + 1} / span ${h}`,\n zIndex: isDragging ? baseZ + 100 : baseZ,\n }\n\n return (\n <div\n key={item.id}\n className={cn('canvas-grid-item', isDragging && 'dragging')}\n style={itemStyle}\n >\n <div\n className=\"canvas-grid-item-header\"\n onPointerDown={(e) => startDragFromHeader(e, item)}\n onPointerMove={handlePointerMove}\n onPointerUp={handleHeaderPointerUp}\n onPointerCancel={handlePointerUp}\n >\n <MButtonGroup variant=\"ghost\" size=\"xs\">\n {interactive && onItemEdit && (\n <MButton\n color=\"primary\"\n iconOnly\n aria-label=\"Edit tile\"\n startIcon={<MEditIcon />}\n onPointerDown={(e) => e.stopPropagation()}\n onClick={(e) => {\n e.stopPropagation()\n onItemEdit(item.id)\n }}\n />\n )}\n {onItemExpand && (\n <MButton\n color=\"primary\"\n iconOnly\n aria-label=\"Expand tile\"\n startIcon={<MZoomInIcon />}\n onPointerDown={(e) => e.stopPropagation()}\n onClick={(e) => {\n e.stopPropagation()\n onItemExpand(item.id)\n }}\n />\n )}\n {interactive && onItemRemove && (\n <MButton\n color=\"error\"\n iconOnly\n aria-label=\"Remove tile\"\n startIcon={<MTrashIcon />}\n onPointerDown={(e) => e.stopPropagation()}\n onClick={(e) => {\n e.stopPropagation()\n onItemRemove(item.id)\n }}\n />\n )}\n </MButtonGroup>\n </div>\n <div className=\"canvas-grid-item-body\">\n {fitContent === 'scale' ? (\n <ScaleToFit baseWidth={fitContentBaseWidth}>{renderItem(item)}</ScaleToFit>\n ) : (\n renderItem(item)\n )}\n </div>\n {!interactive && onItemExpand && (\n <MButton\n className=\"canvas-grid-view-expand-handle\"\n variant=\"filled\"\n shape=\"circle\"\n size=\"sm\"\n color=\"primary\"\n iconOnly\n aria-label=\"Expand tile\"\n startIcon={<MZoomInIcon />}\n onClick={(e) => {\n e.stopPropagation()\n onItemExpand(item.id)\n }}\n />\n )}\n {interactive && isDragging && (\n <div className=\"canvas-grid-item-glass\" aria-hidden>\n <MMoveIcon size={28} />\n </div>\n )}\n {interactive && (\n <div\n className=\"canvas-grid-resize-handle\"\n aria-hidden\n onPointerDown={(e) => startResize(e, item)}\n onPointerMove={handlePointerMove}\n onPointerUp={(e) => {\n if (drag) suppressNextClick()\n handlePointerUp(e)\n }}\n onPointerCancel={handlePointerUp}\n />\n )}\n </div>\n )\n })}\n </div>\n )\n}\n\nexport const MCanvasGrid = forwardRef(MCanvasGridInner) as <T extends MCanvasGridItem>(\n props: MCanvasGridProps<T> & {ref?: Ref<HTMLDivElement>}\n) => ReactElement | null\n"],"mappings":";;;;;;;;;;;;;;AAOA,SAAgB,EAAW,EACvB,UAAO,WACP,YAAS,IACT,WACA,YACA,YACA,UACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,cACA,cACA,UACA,aACA,GAAG,KACa;CAChB,IAAM,IAAe,EAAuB,EAAC,UAAM,CAAC;AAEpD,QACI,kBAAC,OAAD;EACI,WAAW,EACP,aACA,GACA,KAAU,UACV,GAAG,EAA2B;GAC1B;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACH,CAAC,EACF,EACH;EACD,OAAO;GAAC,GAAG;GAAc,GAAG;GAAM;EAClC,GAAI,EAAe,EAAO;EAC1B,GAAI;EAEH;EACC,CAAA;;;;AC1Dd,SAAgB,EAAQ,EACpB,eAAY,QACZ,YAAS,IACT,cAAW,IACX,YAAS,IACT,UAAO,WACP,YAAS,SACT,WACA,cACA,aACA,GAAG,KACU;AACb,QACI,kBAAC,UAAD;EACI,WAAW,EAAG,UAAU,GAAM,KAAY,YAAY,KAAU,UAAU,EAAU;EACpF,GAAI,EAAe,EAAO;EAC1B,GAAI;YAEJ,kBAAC,GAAD;GAAY,MAAM;GAAmB;GAAQ,WAAW,EAAG,SAAS,UAAU,IAAS;GAClF;GACQ,CAAA;EACR,CAAA;;;;ACpBjB,SAAgB,EAAQ,EACpB,eAAY,QACZ,YAAS,IACT,cAAW,IACX,UAAO,WACP,WACA,YACA,YACA,UACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,cACA,cACA,UACA,aACA,GAAG,KACU;CACb,IAAM,IAAe,EAAuB,EAAC,UAAM,CAAC;AAEpD,QACI,kBAAC,UAAD;EACI,WAAW,EACP,UACA,GACA,KAAY,YACZ,GAAG,EAA2B;GAC1B;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACH,CAAC,EACF,EACH;EACD,OAAO;GAAC,GAAG;GAAc,GAAG;GAAM;EAClC,GAAI,EAAe,EAAO;EAC1B,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"}
@@ -0,0 +1,2 @@
1
+ const e=require(`./theme-yQQAPTkp.cjs`),t=require(`./icons-BHFwX7ri.cjs`),n=require(`./cn-CU5TNITO.cjs`),r=require(`./layoutProps-B8y2XwHy.cjs`),i=require(`./MSurface-WsYGNGX5.cjs`),a=require(`./MLink-CZ2FfQ0N.cjs`),o=require(`./MButton-ouB6903s.cjs`),s=require(`./MButtonGroup-yumQneDa.cjs`),c=require(`./MSimpleGrid-B6Uh1XJY.cjs`),l=require(`./MTooltip-C-x_SqMx.cjs`),u=require(`./MDropdownMenu-BT3u-ZJj.cjs`);require(`./core-B2klLGki.cjs`);let d=require(`react`),f=require(`react/jsx-runtime`);function p({size:t=`content`,padded:i=!0,hidden:a,spacing:o,padding:s,fsize:c,mt:l,mb:u,ml:d,mr:p,mx:m,my:h,pt:g,pb:_,pl:v,pr:y,px:b,py:x,fullWidth:S,className:C,style:w,children:T,...E}){let D=r.n({fsize:c});return(0,f.jsx)(`div`,{className:n.t(`container`,t,i&&`padded`,...r.t({spacing:o,padding:s,fsize:c,mt:l,mb:u,ml:d,mr:p,mx:m,my:h,pt:g,pb:_,pl:v,pr:y,px:b,py:x,fullWidth:S}),C),style:{...D,...w},...e.r(a),...E,children:T})}function m({container:t=`wide`,padded:r=!0,bordered:i=!0,sticky:a=!1,tone:o=`surface`,layout:s=`split`,hidden:c,className:l,children:u,...d}){return(0,f.jsx)(`header`,{className:n.t(`header`,o,i&&`bordered`,a&&`sticky`,l),...e.r(c),...d,children:(0,f.jsx)(p,{size:t,padded:r,className:n.t(`inner`,`layout-${s}`),children:u})})}function h({container:t=`wide`,padded:i=!0,bordered:a=!0,tone:o=`surface`,hidden:s,spacing:c,padding:l,fsize:u,mt:d,mb:m,ml:h,mr:g,mx:_,my:v,pt:y,pb:b,pl:x,pr:S,px:C,py:w,fullWidth:T,className:E,style:D,children:O,...k}){let A=r.n({fsize:u});return(0,f.jsx)(`footer`,{className:n.t(`footer`,o,a&&`bordered`,...r.t({spacing:c,padding:l,fsize:u,mt:d,mb:m,ml:h,mr:g,mx:_,my:v,pt:y,pb:b,pl:x,pr:S,px:C,py:w,fullWidth:T}),E),style:{...A,...D},...e.r(s),...k,children:(0,f.jsx)(p,{size:t,padded:i,className:`inner`,fullWidth:!0,children:O})})}function g({items:e,orientation:t=`horizontal`,wrap:r=!1,className:i,children:o,...s}){return(0,f.jsx)(`div`,{className:n.t(`navs`,t,r&&`wrap`,i),...s,children:e?e.map(e=>{let t=e.icon,r=e.iconOnly===!0&&t!=null,i=typeof e.label==`string`?e.label:void 0,o=r?i:void 0,s=e.title??(r?i:void 0);return(0,f.jsxs)(a.t,{component:e.component,href:e.href,to:e.to,target:e.target,rel:e.rel,title:s,current:e.current,disabled:e.disabled,className:n.t(`link`,r&&`icon-only`,e.className),"aria-label":o,children:[t?(0,f.jsx)(`span`,{className:`icon`,"aria-hidden":!r||void 0,children:(0,f.jsx)(t,{size:e.iconSize})}):null,r?null:e.label]},e.key??e.href??e.title?.toString()??i??``)}):o})}function _(e,t=[]){return d.Children.forEach(e,e=>{if(!(0,d.isValidElement)(e))return;if(e.type===g){t.push(e);return}let n=e.props?.children;n!==void 0&&_(n,t)}),t}function v({container:r=`content`,padded:a=!0,bordered:s=!0,sticky:c=!1,tone:l=`surface`,justify:u=`between`,wrap:m=!1,mobileMenu:h=`dropdown`,mobileMenuContent:g,mobileMenuFooter:v,collapseActions:y=!1,mobileMenuLabel:b=`Open navigation`,mobileBreakpoint:x=e.n.compact,hidden:S,className:C,children:w,...T}){let[E,D]=(0,d.useState)(!1),O=(0,d.useRef)(null),k=(0,d.useId)(),A=e.i(x),j=d.Children.toArray(w),M=_(w).map((e,t)=>(0,d.cloneElement)(e,{key:`mnavbar-mobile-navs-${t}`,orientation:`vertical`})),N=(0,f.jsx)(o.t,{type:`button`,variant:`ghost`,size:`md`,shape:`circle`,iconOnly:!0,className:`navbar-toggle`,"aria-label":b,"aria-expanded":E,"aria-controls":k,onClick:B,children:(0,f.jsx)(t.Zn,{})},`mnavbar-toggle`),P=-1;for(let e=j.length-1;e>=0;--e){let t=j[e];if((0,d.isValidElement)(t)&&t.type===i.n){P=e;break}}let F=y&&A&&P!==-1,I=null,L=j,R=P;if(F){I=j[P],L=j.filter((e,t)=>t!==P),R=-1;for(let e=L.length-1;e>=0;--e){let t=L[e];if((0,d.isValidElement)(t)&&t.type===i.n){R=e;break}}}let z=R===-1?[...L,N]:L.map((e,t)=>{if(t!==R)return e;let n=e,r=d.Children.toArray(n.props.children);return(0,d.cloneElement)(n,{key:n.key??`mnavbar-inline-${t}`,children:[...r,N]})});(0,d.useEffect)(()=>{if(!E)return;function e(e){let t=O.current;t&&(e.target instanceof Node&&t.contains(e.target)||D(!1))}function t(e){e.key===`Escape`&&D(!1)}return document.addEventListener(`pointerdown`,e),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`pointerdown`,e),document.removeEventListener(`keydown`,t)}},[E]),(0,d.useEffect)(()=>{A||D(!1)},[A]);function B(){D(e=>!e)}function V(e){let t=e.target;t&&t.closest(`a, [role="menuitem"]`)&&D(!1)}return(0,f.jsxs)(`nav`,{ref:O,className:n.t(`navbar`,l,s&&`bordered`,c&&`sticky`,A&&`mobile-view`,E&&`mobile-open`,`mobile-${h}`,C),...e.r(S),...T,children:[(0,f.jsx)(p,{size:r,padded:a,className:`container`,children:(0,f.jsx)(`div`,{className:n.t(`inner`,u,m&&`wrap`),children:z})}),h===`drawer`&&(0,f.jsx)(`div`,{className:n.t(`mobile-backdrop`,E&&`visible`),"aria-hidden":!0}),(0,f.jsxs)(`div`,{id:k,className:n.t(`mobile-menu`,h,E&&`open`),role:`menu`,"aria-hidden":!E||void 0,onClick:V,children:[M,g,I?(0,f.jsx)(`div`,{className:`mobile-menu-footer`,children:(0,d.cloneElement)(I,{key:`mnavbar-collapsed-actions`})}):null,v?(0,f.jsx)(`div`,{className:`mobile-menu-footer`,children:v}):null]})]})}function y({as:t=`section`,spacing:r=`lg`,tone:i=`default`,hidden:a,className:o,style:s,children:c,...l}){return(0,f.jsx)(t,{className:n.t(`section`,r,i,o),style:s,...e.r(a),...l,children:c})}function b({items:e,renderItem:t,children:n,columns:r=4,minItemWidth:i=`15rem`,...a}){return(0,f.jsx)(c.t,{columns:r,minItemWidth:i,...a,children:e&&t?e.map((e,n)=>t(e,n)):n})}function x({orientation:t=`horizontal`,variant:r=`solid`,hidden:i,className:a,style:o,...s}){return(0,f.jsx)(`div`,{role:`separator`,"aria-orientation":t,className:n.t(`divider`,t,r,a),style:o,...e.r(i),...s})}var S=`mineralui-sidebar`,C=(0,d.createContext)({mode:`expanded`,mobile:!1,mobileOpen:!1,canToggle:!1,toggleMode:()=>{}});function w(){return(0,d.useContext)(C)}function T({mode:r=`auto`,defaultMode:i=`expanded`,onModeChange:a,persist:o=!1,side:s=`left`,tone:c=`subtle`,bordered:l=!0,mobileBreakpoint:u=e.n.mobile,compactBreakpoint:p=e.n.compact,className:m,style:h,children:g}){let _=Math.max(p,u),v=e.i(u),y=e.i(_),b=!v&&y,[x,w]=(0,d.useState)(!1),[T,E]=(0,d.useState)(()=>{if(o)try{let e=localStorage.getItem(S);if(e===`expanded`||e===`collapsed`)return e}catch{}return i}),D=v?`expanded`:b?`collapsed`:r===`auto`?T:r===`collapsed`?`collapsed`:`expanded`,O=(0,d.useCallback)(()=>{let e=D===`expanded`?`collapsed`:`expanded`;if(E(e),a?.(e),o)try{localStorage.setItem(S,e)}catch{}},[D,a,o]),k=(0,d.useCallback)(()=>w(!1),[]);(0,d.useEffect)(()=>{if(!x)return;let e=e=>{e.key===`Escape`&&w(!1)};return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[x]),(0,d.useEffect)(()=>{v||w(!1)},[v]);let A=!v&&!b&&r===`auto`,j=(0,d.useMemo)(()=>({mode:D,mobile:v,mobileOpen:x,canToggle:A,toggleMode:O}),[D,v,x,A,O]),M=n.t(`sidebar`,c,s,!v&&D===`collapsed`&&`collapsed`,b&&`compact`,l&&`bordered`,v&&`mobile`,v&&x&&`mobile-open`,m);return(0,f.jsxs)(C.Provider,{value:j,children:[v&&x&&(0,f.jsx)(`div`,{className:`sidebar-backdrop`,onClick:k}),(0,f.jsx)(`aside`,{className:M,style:h,children:g}),v&&!x&&(0,f.jsx)(`button`,{className:n.t(`sidebar-hamburger`,s),onClick:()=>w(!0),"aria-label":`Open menu`,children:(0,f.jsx)(`span`,{className:`sidebar-hamburger-icon`,"aria-hidden":`true`,children:(0,f.jsx)(t.Zn,{})})})]})}function E({bordered:e=!1,className:r,children:i}){let{mode:a,mobile:s,canToggle:c,toggleMode:l}=w(),u=!s&&a===`collapsed`;return(0,f.jsxs)(`div`,{className:n.t(`sidebar-header`,e&&`bordered`,r),children:[(0,f.jsx)(`div`,{className:`sidebar-header-content`,children:i}),c&&(0,f.jsx)(o.t,{variant:`outlined`,color:`neutral`,iconOnly:!0,size:`sm`,onClick:l,"aria-label":u?`Expand sidebar`:`Collapse sidebar`,className:`sidebar-toggle`,children:(0,f.jsx)(`span`,{className:n.t(`sidebar-chevron`,u&&`flipped`),children:(0,f.jsx)(t.Ui,{})})})]})}function D({className:e,children:t}){return(0,f.jsx)(`div`,{className:n.t(`sidebar-body`,e),children:t})}function O({className:e,children:t}){return(0,f.jsx)(`nav`,{className:n.t(`sidebar-nav`,e),children:t})}function k({icon:e,label:t,description:r,href:i,to:a,onClick:o,active:s=!1,disabled:c=!1,badge:u,color:d,component:p,className:m}){let{mode:h,mobile:g}=w(),_=!g&&h===`collapsed`,v=r??t,y=typeof r==`string`?r:typeof t==`string`?t:void 0,b=p??(i||a?`a`:`button`),x=p?a?{to:a}:i?{href:i}:{}:i?{href:i}:a?{href:a}:{};return(0,f.jsxs)(b,{className:n.t(`sidebar-item`,s&&`active`,c&&`disabled`,d,m),onClick:c?void 0:o,"aria-disabled":c||void 0,title:_?y:void 0,...x,children:[e&&(0,f.jsx)(`span`,{className:`sidebar-item-icon`,children:e}),!_&&(0,f.jsx)(l.t,{content:v,placement:`top`,className:`sidebar-item-label-tooltip`,children:(0,f.jsx)(`span`,{className:`sidebar-item-label`,children:t})}),!_&&u&&(0,f.jsx)(`span`,{className:`sidebar-item-badge`,children:u})]})}function A({label:e,icon:r,active:i=!1,defaultOpen:a=!0,collapsible:o=!0,children:s,className:c}){let l=w(),{mode:p,mobile:m}=l,h=!m&&p===`collapsed`,[g,_]=(0,d.useState)(a),v=(0,d.useMemo)(()=>({...l,mode:`expanded`}),[l]),y=()=>{o&&_(e=>!e)};if(h){let t=(0,f.jsx)(`span`,{className:n.t(`sidebar-group-icon collapsed`,i&&`active`),title:e,children:r});return(0,f.jsx)(`div`,{className:n.t(`sidebar-group`,c),children:(0,f.jsx)(u.i,{trigger:t,placement:`right-start`,closeOnSelect:!0,openOn:`hover`,children:(0,f.jsx)(C.Provider,{value:v,children:s})})})}return(0,f.jsxs)(`div`,{className:n.t(`sidebar-group`,c),children:[(0,f.jsxs)(`button`,{className:n.t(`sidebar-group-header`,i&&`active`),onClick:y,"aria-expanded":g,children:[r&&(0,f.jsx)(`span`,{className:`sidebar-group-icon`,children:r}),(0,f.jsx)(`span`,{className:`sidebar-group-label`,children:e}),o&&(0,f.jsx)(`span`,{className:n.t(`sidebar-group-arrow`,g&&`open`),children:(0,f.jsx)(t.Ui,{})})]}),g&&(0,f.jsx)(`div`,{className:`sidebar-group-items`,children:s})]})}function j({bordered:e=!1,className:t,children:r}){return(0,f.jsx)(`div`,{className:n.t(`sidebar-footer`,e&&`bordered`,t),children:r})}function M({className:e,spacing:t=`md`}){return(0,f.jsx)(`hr`,{className:n.t(`sidebar-divider`,t,e)})}function N({items:e,separator:t=`/`,maxItems:r,className:i,...a}){let o=(0,d.useMemo)(()=>{if(!r||r>=e.length)return e;if(r<2)return[e[e.length-1]];let t=e.slice(0,1),n=e.slice(-(r-1));return[...t,null,...n]},[e,r]);return(0,f.jsx)(`nav`,{"aria-label":`breadcrumb`,className:n.t(`breadcrumb`,i),...a,children:(0,f.jsx)(`ol`,{className:`trail`,children:o.map((e,r)=>{if(e===null)return(0,f.jsxs)(`li`,{className:`crumb dots`,children:[(0,f.jsx)(`span`,{className:`sep`,children:t}),(0,f.jsx)(`span`,{children:`…`})]},`ellipsis`);let i=r===o.length-1;return(0,f.jsxs)(`li`,{className:n.t(`crumb`,i&&`active`),children:[r>0&&(0,f.jsx)(`span`,{className:`sep`,children:t}),e.href&&!i?(0,f.jsx)(`a`,{href:e.href,className:`link`,onClick:e.onClick,children:e.label}):e.onClick&&!i?(0,f.jsx)(`button`,{type:`button`,className:`link btn`,onClick:e.onClick,children:e.label}):(0,f.jsx)(`span`,{className:`current`,"aria-current":i?`page`:void 0,children:e.label})]},r)})})})}var P=(0,d.forwardRef)(function({className:e,children:t,...r},i){let a=[],o=[];return d.Children.forEach(t,e=>{(0,d.isValidElement)(e)&&e.type===T?a.push(e):o.push(e)}),(0,f.jsxs)(`div`,{ref:i,className:n.t(`app-shell`,e),...r,children:[a,(0,f.jsx)(`div`,{className:`app-main`,children:o})]})}),F=(0,d.forwardRef)(function({className:e,children:t,...r},i){return(0,f.jsx)(`div`,{ref:i,className:n.t(`app-body`,e),...r,children:t})});function I({baseWidth:e=480,children:t}){let n=(0,d.useRef)(null),r=(0,d.useRef)(null),[i,a]=(0,d.useState)(1),[o,s]=(0,d.useState)(e);return(0,d.useEffect)(()=>{let t=n.current,i=r.current;if(!t||!i)return;let o=0,c=()=>{cancelAnimationFrame(o),o=requestAnimationFrame(()=>{let n=t.clientWidth,r=t.clientHeight;if(n===0||r===0)return;let o=Math.max(e,n),c=i.offsetHeight;if(o===0||c===0)return;let l=n/o,u=r/c,d=Math.min(l,u,1);d>0&&Number.isFinite(d)&&(s(o),a(d))})},l=new ResizeObserver(c);return l.observe(t),l.observe(i),c(),()=>{cancelAnimationFrame(o),l.disconnect()}},[e]),(0,f.jsx)(`div`,{ref:n,className:`canvas-grid-scale-wrapper`,children:(0,f.jsx)(`div`,{ref:r,className:`canvas-grid-scale-content`,style:{width:`${o}px`,transform:`scale(${i})`},children:t})})}function L(e,t,n){return Math.max(t,Math.min(n,e))}function R({columns:r=24,rows:i=24,snap:a=4,items:c,renderItem:l,minItemSize:u,maxItemSize:p,editable:m=!1,onItemMove:h,onItemResize:g,onItemRemove:_,onItemEdit:v,onItemExpand:y,guides:b=`always`,compactBreakpoint:x=e.n.compact,mobileBreakpoint:S=e.n.mobile,height:C,fitContent:w=`scroll`,fitContentBaseWidth:T=480,className:E,style:D},O){let k=(0,d.useRef)(null),[A,j]=(0,d.useState)({width:0,height:0}),[M,N]=(0,d.useState)(null),[P,F]=(0,d.useState)(null),[R,z]=(0,d.useState)({}),B=(0,d.useRef)(0);function V(e){B.current+=1,z(t=>({...t,[e]:B.current}))}function H(){let e=!0,t=n=>{e&&(e=!1,n.stopPropagation(),n.preventDefault(),window.removeEventListener(`click`,t,!0))};window.addEventListener(`click`,t,!0),window.setTimeout(()=>{e&&(e=!1,window.removeEventListener(`click`,t,!0))},60)}let U=e.i(S),W=e.i(x)&&!U,ee=r*a,G=i*a,K=W?Math.max(1,Math.round(ee/2)):ee,q=W?Math.max(1,Math.round(G/2)):G,J=W?Math.max(1,Math.round(r/2)):r,Y=W?Math.max(1,Math.round(i/2)):i,X=m&&!U;(0,d.useEffect)(()=>{let e=k.current;if(!e||typeof ResizeObserver>`u`)return;let t=()=>j({width:e.clientWidth,height:e.clientHeight});t();let n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},[]);let Z=(0,d.useCallback)(e=>{k.current=e,typeof O==`function`?O(e):O&&(O.current=e)},[O]);function te(e){let t=u?.(e);return t?{w:Math.max(a,t.w*a),h:Math.max(a,t.h*a)}:{w:a,h:a}}function ne(e,t){X&&(e.stopPropagation(),e.preventDefault(),e.currentTarget.setPointerCapture(e.pointerId),V(t.id),N({itemId:t.id,mode:`resize`,startClientX:e.clientX,startClientY:e.clientY,original:{...t.position}}),F({...t.position}))}function re(e,t){X&&(e.target.closest(`button, [role="button"]`)||(e.stopPropagation(),e.preventDefault(),e.currentTarget.setPointerCapture(e.pointerId),V(t.id),N({itemId:t.id,mode:`drag`,startClientX:e.clientX,startClientY:e.clientY,original:{...t.position}}),F({...t.position})))}function Q(e){if(!M||A.width===0||A.height===0)return;let t=A.width/K,n=A.height/q,r=Math.round((e.clientX-M.startClientX)/t),i=Math.round((e.clientY-M.startClientY)/n),o=M.original,s=c.find(e=>e.id===M.itemId),l=s?te(s):{w:a,h:a};if(M.mode===`drag`)F({x:L(o.x+r,0,K-o.w),y:L(o.y+i,0,q-o.h),w:o.w,h:o.h});else{let e=L(o.w+r,l.w,K-o.x),t=L(o.h+i,l.h,q-o.y);F({x:o.x,y:o.y,w:e,h:t})}}function $(e){if(M){try{e.currentTarget.releasePointerCapture(e.pointerId)}catch{}P&&(M.mode===`drag`?h?.(M.itemId,P):g?.(M.itemId,P)),N(null),F(null)}}function ie(e){M&&(H(),$(e))}let ae=b===`always`||b===`on-edit`&&X||b===`on-drag`&&M!==null,oe=C===void 0?void 0:{height:typeof C==`number`?`${C}px`:C};if(U){let e=[...c].sort((e,t)=>e.position.y-t.position.y);return(0,f.jsx)(`div`,{ref:Z,className:n.t(`canvas-grid`,`mobile`,E),"data-guides":`off`,style:{...oe,...D},children:e.map(e=>(0,f.jsx)(`div`,{className:`canvas-grid-item`,children:l(e)},e.id))})}let se={...oe,...D,gridTemplateColumns:`repeat(${K}, 1fr)`,gridTemplateRows:`repeat(${q}, 1fr)`,"--canvas-grid-cells":String(J),"--canvas-grid-row-cells":String(Y)},ce=J*Y;return(0,f.jsxs)(`div`,{ref:Z,className:n.t(`canvas-grid`,W&&`compact`,X&&`editable`,E),"data-guides":ae?`on`:`off`,style:se,children:[(0,f.jsx)(`div`,{className:`canvas-grid-overlay`,"aria-hidden":!0,children:Array.from({length:ce},(e,t)=>{let r=(t+1)%J===0,i=t>=ce-J;return(0,f.jsx)(`div`,{className:n.t(`canvas-grid-cell`,r&&`no-right`,i&&`no-bottom`)},t)})}),c.map(e=>{let r=M?.itemId===e.id,i=r&&P?P:e.position,a=W?Math.round(i.x/2):i.x,c=W?Math.round(i.y/2):i.y,u=Math.max(1,W?Math.round(i.w/2):i.w),d=Math.max(1,W?Math.round(i.h/2):i.h),p=1+(R[e.id]??0),m={gridColumn:`${a+1} / span ${u}`,gridRow:`${c+1} / span ${d}`,zIndex:r?p+100:p};return(0,f.jsxs)(`div`,{className:n.t(`canvas-grid-item`,r&&`dragging`),style:m,children:[(0,f.jsx)(`div`,{className:`canvas-grid-item-header`,onPointerDown:t=>re(t,e),onPointerMove:Q,onPointerUp:ie,onPointerCancel:$,children:(0,f.jsxs)(s.t,{variant:`ghost`,size:`xs`,children:[X&&v&&(0,f.jsx)(o.t,{color:`primary`,iconOnly:!0,"aria-label":`Edit tile`,startIcon:(0,f.jsx)(t.Gn,{}),onPointerDown:e=>e.stopPropagation(),onClick:t=>{t.stopPropagation(),v(e.id)}}),y&&(0,f.jsx)(o.t,{color:`primary`,iconOnly:!0,"aria-label":`Expand tile`,startIcon:(0,f.jsx)(t.$n,{}),onPointerDown:e=>e.stopPropagation(),onClick:t=>{t.stopPropagation(),y(e.id)}}),X&&_&&(0,f.jsx)(o.t,{color:`error`,iconOnly:!0,"aria-label":`Remove tile`,startIcon:(0,f.jsx)(t.er,{}),onPointerDown:e=>e.stopPropagation(),onClick:t=>{t.stopPropagation(),_(e.id)}})]})}),(0,f.jsx)(`div`,{className:`canvas-grid-item-body`,children:w===`scale`?(0,f.jsx)(I,{baseWidth:T,children:l(e)}):l(e)}),!X&&y&&(0,f.jsx)(o.t,{className:`canvas-grid-view-expand-handle`,variant:`filled`,shape:`circle`,size:`sm`,color:`primary`,iconOnly:!0,"aria-label":`Expand tile`,startIcon:(0,f.jsx)(t.$n,{}),onClick:t=>{t.stopPropagation(),y(e.id)}}),X&&r&&(0,f.jsx)(`div`,{className:`canvas-grid-item-glass`,"aria-hidden":!0,children:(0,f.jsx)(t.vr,{size:28})}),X&&(0,f.jsx)(`div`,{className:`canvas-grid-resize-handle`,"aria-hidden":!0,onPointerDown:t=>ne(t,e),onPointerMove:Q,onPointerUp:e=>{M&&H(),$(e)},onPointerCancel:$})]},e.id)})]})}var z=(0,d.forwardRef)(R);Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,`b`,{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return N}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return P}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return D}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return M}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return z}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return m}});
2
+ //# sourceMappingURL=layout-D9LAqtZp.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout-D9LAqtZp.cjs","names":[],"sources":["../src/components/layout/MContainer/MContainer.tsx","../src/components/layout/MHeader/MHeader.tsx","../src/components/layout/MFooter/MFooter.tsx","../src/components/layout/MNavs/MNavs.tsx","../src/components/layout/MNavbar/MNavbar.tsx","../src/components/layout/MSection/MSection.tsx","../src/components/layout/MStatGrid/MStatGrid.tsx","../src/components/layout/MDivider/MDivider.tsx","../src/components/layout/MSidebar/MSidebar.tsx","../src/components/layout/MBreadcrumb/MBreadcrumb.tsx","../src/components/layout/MAppShell/MAppShell.tsx","../src/components/layout/MCanvasGrid/ScaleToFit.tsx","../src/components/layout/MCanvasGrid/MCanvasGrid.tsx"],"sourcesContent":["import type {MContainerProps} from './MContainer.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {getLayoutUtilityClassNames, getLayoutUtilityStyles} from '../../../utils/layoutProps'\nimport './MContainer.css'\n\n// Constrain page content widths and apply shared spacing utilities.\nexport function MContainer({\n size = 'content',\n padded = true,\n hidden,\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n className,\n style,\n children,\n ...rest\n}: MContainerProps) {\n const utilityStyle = getLayoutUtilityStyles({fsize})\n\n return (\n <div\n className={cn(\n 'container',\n size,\n padded && 'padded',\n ...getLayoutUtilityClassNames({\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n }),\n className\n )}\n style={{...utilityStyle, ...style}}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n {children}\n </div>\n )\n}\n","import type {MHeaderProps} from './MHeader.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {MContainer} from '../MContainer'\nimport './MHeader.css'\n\n// Render a reusable page header shell aligned to a shared container.\nexport function MHeader({\n container = 'wide',\n padded = true,\n bordered = true,\n sticky = false,\n tone = 'surface',\n layout = 'split',\n hidden,\n className,\n children,\n ...rest\n}: MHeaderProps) {\n return (\n <header\n className={cn('header', tone, bordered && 'bordered', sticky && 'sticky', className)}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n <MContainer size={container} padded={padded} className={cn('inner', `layout-${layout}`)}>\n {children}\n </MContainer>\n </header>\n )\n}\n","import type {MFooterProps} from './MFooter.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {getLayoutUtilityClassNames, getLayoutUtilityStyles} from '../../../utils/layoutProps'\nimport {MContainer} from '../MContainer'\nimport './MFooter.css'\n\n// Render a reusable page footer shell with shared spacing utilities.\nexport function MFooter({\n container = 'wide',\n padded = true,\n bordered = true,\n tone = 'surface',\n hidden,\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n className,\n style,\n children,\n ...rest\n}: MFooterProps) {\n const utilityStyle = getLayoutUtilityStyles({fsize})\n\n return (\n <footer\n className={cn(\n 'footer',\n tone,\n bordered && 'bordered',\n ...getLayoutUtilityClassNames({\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n }),\n className\n )}\n style={{...utilityStyle, ...style}}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n <MContainer size={container} padded={padded} className=\"inner\" fullWidth>\n {children}\n </MContainer>\n </footer>\n )\n}\n","import type {MNavsProps} from './MNavs.types'\nimport {cn} from '../../../utils/cn'\nimport {MLink} from '../../typography'\nimport './MNavs.css'\n\n// Render a lightweight navigation list from data or custom children.\nexport function MNavs({items, orientation = 'horizontal', wrap = false, className, children, ...rest}: MNavsProps) {\n return (\n <div className={cn('navs', orientation, wrap && 'wrap', className)} {...rest}>\n {items\n ? items.map((item) => {\n const Icon = item.icon\n const hideLabel = item.iconOnly === true && Icon != null\n const labelAsString = typeof item.label === 'string' ? item.label : undefined\n const ariaLabel = hideLabel ? labelAsString : undefined\n const linkTitle = item.title ?? (hideLabel ? labelAsString : undefined)\n\n return (\n <MLink\n key={item.key ?? item.href ?? item.title?.toString() ?? labelAsString ?? ''}\n component={item.component}\n href={item.href}\n to={item.to}\n target={item.target}\n rel={item.rel}\n title={linkTitle}\n current={item.current}\n disabled={item.disabled}\n className={cn('link', hideLabel && 'icon-only', item.className)}\n aria-label={ariaLabel}\n >\n {Icon ? (\n <span className=\"icon\" aria-hidden={!hideLabel || undefined}>\n <Icon size={item.iconSize} />\n </span>\n ) : null}\n {!hideLabel ? item.label : null}\n </MLink>\n )\n })\n : children}\n </div>\n )\n}\n","import {Children, cloneElement, isValidElement, useEffect, useId, useRef, useState} from 'react'\nimport type {MouseEvent as ReactMouseEvent, ReactElement, ReactNode} from 'react'\nimport type {MNavbarProps} from './MNavbar.types'\nimport {getHiddenProps, MShellBreakpoints, useMaxWidth} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {MContainer} from '../MContainer'\nimport {MInline} from '../MInline'\nimport type {MInlineProps} from '../MInline'\nimport {MNavs} from '../MNavs'\nimport {MButton} from '../../controls/MButton'\nimport {MMenuIcon} from '../../../icons'\nimport './MNavbar.css'\n\ntype NavLikeElement = ReactElement<{children?: ReactNode; orientation?: 'horizontal' | 'vertical'}>\n\n// Walks the children tree (any depth) looking for MNavs instances so the navbar\n// can pull them into the mobile menu even when wrapped in MInline / MStack.\nfunction findNavLikeChildren(children: ReactNode, found: NavLikeElement[] = []): NavLikeElement[] {\n Children.forEach(children, (child) => {\n if (!isValidElement(child)) {\n return\n }\n if (child.type === MNavs) {\n found.push(child as NavLikeElement)\n return\n }\n const nestedChildren = (child.props as {children?: ReactNode} | null)?.children\n if (nestedChildren !== undefined) {\n findNavLikeChildren(nestedChildren, found)\n }\n })\n return found\n}\n\n// Render a horizontal app or site navigation shell with container alignment.\n// Below the md breakpoint MNavs children are collapsed behind a hamburger toggle\n// that opens either a dropdown panel or a side drawer with the navigation items.\nexport function MNavbar({\n container = 'content',\n padded = true,\n bordered = true,\n sticky = false,\n tone = 'surface',\n justify = 'between',\n wrap = false,\n mobileMenu = 'dropdown',\n mobileMenuContent,\n mobileMenuFooter,\n collapseActions = false,\n mobileMenuLabel = 'Open navigation',\n mobileBreakpoint = MShellBreakpoints.compact,\n hidden,\n className,\n children,\n ...rest\n}: MNavbarProps) {\n const [open, setOpen] = useState(false)\n const rootRef = useRef<HTMLElement | null>(null)\n const menuId = useId()\n const mobile = useMaxWidth(mobileBreakpoint)\n\n const childArray = Children.toArray(children)\n\n const mobileNavs = findNavLikeChildren(children).map((element, index) =>\n cloneElement(element, {\n key: `mnavbar-mobile-navs-${index}`,\n orientation: 'vertical',\n })\n )\n\n const toggleButton = (\n <MButton\n key=\"mnavbar-toggle\"\n type=\"button\"\n variant=\"ghost\"\n size=\"md\"\n shape=\"circle\"\n iconOnly\n className=\"navbar-toggle\"\n aria-label={mobileMenuLabel}\n aria-expanded={open}\n aria-controls={menuId}\n onClick={handleToggleClick}\n >\n <MMenuIcon />\n </MButton>\n )\n\n let lastInlineIndex = -1\n for (let index = childArray.length - 1; index >= 0; index -= 1) {\n const child = childArray[index]\n if (isValidElement(child) && child.type === MInline) {\n lastInlineIndex = index\n break\n }\n }\n\n // When collapseActions is on and we're below the breakpoint, the last inline\n // (usually theme / lang / search) is pulled out of the bar and rendered in\n // the mobile menu footer. The burger toggle then attaches to the previous\n // inline (typically primary actions) — or sits on its own when none exists.\n const shouldCollapseLastInline = collapseActions && mobile && lastInlineIndex !== -1\n let collapsedActionsInline: ReactElement<MInlineProps> | null = null\n let workingChildren = childArray\n let toggleHostIndex = lastInlineIndex\n if (shouldCollapseLastInline) {\n collapsedActionsInline = childArray[lastInlineIndex] as ReactElement<MInlineProps>\n workingChildren = childArray.filter((_, index) => index !== lastInlineIndex)\n toggleHostIndex = -1\n for (let index = workingChildren.length - 1; index >= 0; index -= 1) {\n const child = workingChildren[index]\n if (isValidElement(child) && child.type === MInline) {\n toggleHostIndex = index\n break\n }\n }\n }\n\n const renderedChildren =\n toggleHostIndex === -1\n ? [...workingChildren, toggleButton]\n : workingChildren.map((child, index) => {\n if (index !== toggleHostIndex) return child\n const inlineChild = child as ReactElement<MInlineProps>\n const inlineChildren = Children.toArray(inlineChild.props.children)\n return cloneElement(inlineChild, {\n key: inlineChild.key ?? `mnavbar-inline-${index}`,\n children: [...inlineChildren, toggleButton],\n })\n })\n\n useEffect(() => {\n if (!open) return\n\n function handlePointerDown(event: PointerEvent) {\n const root = rootRef.current\n if (!root) return\n if (event.target instanceof Node && root.contains(event.target)) return\n setOpen(false)\n }\n\n function handleKeydown(event: KeyboardEvent) {\n if (event.key === 'Escape') setOpen(false)\n }\n\n document.addEventListener('pointerdown', handlePointerDown)\n document.addEventListener('keydown', handleKeydown)\n return () => {\n document.removeEventListener('pointerdown', handlePointerDown)\n document.removeEventListener('keydown', handleKeydown)\n }\n }, [open])\n\n useEffect(() => {\n if (!mobile) {\n setOpen(false)\n }\n }, [mobile])\n\n function handleToggleClick() {\n setOpen((previous) => !previous)\n }\n\n function handleMenuClick(event: ReactMouseEvent<HTMLDivElement>) {\n const target = event.target as HTMLElement | null\n if (!target) return\n if (target.closest('a, [role=\"menuitem\"]')) {\n setOpen(false)\n }\n }\n\n return (\n <nav\n ref={rootRef}\n className={cn(\n 'navbar',\n tone,\n bordered && 'bordered',\n sticky && 'sticky',\n mobile && 'mobile-view',\n open && 'mobile-open',\n `mobile-${mobileMenu}`,\n className\n )}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n <MContainer size={container} padded={padded} className=\"container\">\n <div className={cn('inner', justify, wrap && 'wrap')}>{renderedChildren}</div>\n </MContainer>\n\n {mobileMenu === 'drawer' && <div className={cn('mobile-backdrop', open && 'visible')} aria-hidden />}\n\n <div\n id={menuId}\n className={cn('mobile-menu', mobileMenu, open && 'open')}\n role=\"menu\"\n aria-hidden={!open || undefined}\n onClick={handleMenuClick}\n >\n {mobileNavs}\n {mobileMenuContent}\n {collapsedActionsInline ? (\n <div className=\"mobile-menu-footer\">\n {cloneElement(collapsedActionsInline, {\n key: 'mnavbar-collapsed-actions',\n })}\n </div>\n ) : null}\n {mobileMenuFooter ? <div className=\"mobile-menu-footer\">{mobileMenuFooter}</div> : null}\n </div>\n </nav>\n )\n}\n","import type React from 'react'\nimport type {MSectionProps} from './MSection.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport './MSection.css'\n\n// Render a semantic page section with predefined spacing and tone.\nexport function MSection({\n as = 'section',\n spacing = 'lg',\n tone = 'default',\n hidden,\n className,\n style,\n children,\n ...rest\n}: MSectionProps) {\n const Component = as\n\n return (\n <Component\n className={cn('section', spacing, tone, className)}\n style={style}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n {children}\n </Component>\n )\n}\n","import type {MStatGridProps} from './MStatGrid.types'\nimport {MSimpleGrid} from '../MSimpleGrid'\n\nexport function MStatGrid<T>({\n items,\n renderItem,\n children,\n columns = 4,\n minItemWidth = '15rem',\n ...rest\n}: MStatGridProps<T>) {\n return (\n <MSimpleGrid columns={columns} minItemWidth={minItemWidth} {...rest}>\n {items && renderItem ? items.map((item, index) => renderItem(item, index)) : children}\n </MSimpleGrid>\n )\n}\n","import type {MDividerProps} from './MDivider.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport './MDivider.css'\n\n// Render a semantic divider line between related content blocks.\nexport function MDivider({\n orientation = 'horizontal',\n variant = 'solid',\n hidden,\n className,\n style,\n ...rest\n}: MDividerProps) {\n return (\n <div\n role=\"separator\"\n aria-orientation={orientation}\n className={cn('divider', orientation, variant, className)}\n style={style}\n {...getHiddenProps(hidden)}\n {...rest}\n />\n )\n}\n","import {createContext, useContext, useState, useEffect, useCallback, useMemo} from 'react'\nimport {cn} from '../../../utils/cn'\nimport {MButton} from '../../controls'\nimport {MChevronRightIcon, MMenuIcon} from '../../../icons'\nimport {MDropdownMenu, MTooltip} from '../../overlays'\nimport {MShellBreakpoints, useMaxWidth} from '../../../theme'\nimport type {\n MSidebarProps,\n MSidebarHeaderProps,\n MSidebarBodyProps,\n MSidebarNavProps,\n MSidebarItemProps,\n MSidebarGroupProps,\n MSidebarFooterProps,\n MSidebarDividerProps,\n MSidebarMode,\n} from './MSidebar.types'\nimport './MSidebar.css'\n\nconst STORAGE_KEY = 'mineralui-sidebar'\n\ninterface SidebarContextValue {\n mode: MSidebarMode\n mobile: boolean\n mobileOpen: boolean\n canToggle: boolean\n toggleMode: () => void\n}\n\nconst SidebarCtx = createContext<SidebarContextValue>({\n mode: 'expanded',\n mobile: false,\n mobileOpen: false,\n canToggle: false,\n toggleMode: () => {},\n})\n\n// Read shared sidebar state inside slot components.\nfunction useSidebar() {\n return useContext(SidebarCtx)\n}\n\n// Render the sidebar shell and coordinate desktop and mobile behavior.\nexport function MSidebar({\n mode: modeProp = 'auto',\n defaultMode = 'expanded',\n onModeChange,\n persist = false,\n side = 'left',\n tone = 'subtle',\n bordered = true,\n mobileBreakpoint = MShellBreakpoints.mobile,\n compactBreakpoint = MShellBreakpoints.compact,\n className,\n style,\n children,\n}: MSidebarProps) {\n const resolvedCompactBreakpoint = Math.max(compactBreakpoint, mobileBreakpoint)\n const mobile = useMaxWidth(mobileBreakpoint)\n const compactViewport = useMaxWidth(resolvedCompactBreakpoint)\n const compact = !mobile && compactViewport\n const [mobileOpen, setMobileOpen] = useState(false)\n\n const [internalMode, setInternalMode] = useState<MSidebarMode>(() => {\n if (persist) {\n try {\n const v = localStorage.getItem(STORAGE_KEY)\n if (v === 'expanded' || v === 'collapsed') return v\n } catch {\n /* noop */\n }\n }\n\n return defaultMode\n })\n\n const resolvedMode: MSidebarMode = mobile\n ? 'expanded'\n : compact\n ? 'collapsed'\n : modeProp === 'auto'\n ? internalMode\n : modeProp === 'collapsed'\n ? 'collapsed'\n : 'expanded'\n\n // MToggle only the desktop width state. Mobile uses its own overlay flow.\n const toggleMode = useCallback(() => {\n const next: MSidebarMode = resolvedMode === 'expanded' ? 'collapsed' : 'expanded'\n\n setInternalMode(next)\n onModeChange?.(next)\n\n if (persist) {\n try {\n localStorage.setItem(STORAGE_KEY, next)\n } catch {\n /* noop */\n }\n }\n }, [resolvedMode, onModeChange, persist])\n\n const closeMobile = useCallback(() => setMobileOpen(false), [])\n\n // Let Escape close the temporary mobile drawer.\n useEffect(() => {\n if (!mobileOpen) return\n\n const handler = (e: KeyboardEvent) => {\n if (e.key === 'Escape') setMobileOpen(false)\n }\n\n document.addEventListener('keydown', handler)\n return () => document.removeEventListener('keydown', handler)\n }, [mobileOpen])\n\n useEffect(() => {\n if (!mobile) {\n setMobileOpen(false)\n }\n }, [mobile])\n\n const canToggle = !mobile && !compact && modeProp === 'auto'\n\n const ctx = useMemo<SidebarContextValue>(\n () => ({mode: resolvedMode, mobile, mobileOpen, canToggle, toggleMode}),\n [resolvedMode, mobile, mobileOpen, canToggle, toggleMode]\n )\n\n const isCollapsed = !mobile && resolvedMode === 'collapsed'\n\n const sidebarCls = cn(\n 'sidebar',\n tone,\n side,\n isCollapsed && 'collapsed',\n compact && 'compact',\n bordered && 'bordered',\n mobile && 'mobile',\n mobile && mobileOpen && 'mobile-open',\n className\n )\n\n return (\n <SidebarCtx.Provider value={ctx}>\n {mobile && mobileOpen && <div className=\"sidebar-backdrop\" onClick={closeMobile} />}\n\n <aside className={sidebarCls} style={style}>\n {children}\n </aside>\n\n {mobile && !mobileOpen && (\n <button\n className={cn('sidebar-hamburger', side)}\n onClick={() => setMobileOpen(true)}\n aria-label=\"Open menu\"\n >\n <span className=\"sidebar-hamburger-icon\" aria-hidden=\"true\">\n <MMenuIcon />\n </span>\n </button>\n )}\n </SidebarCtx.Provider>\n )\n}\n\n// Render the top area with branding and an optional collapse toggle.\nexport function MSidebarHeader({bordered = false, className, children}: MSidebarHeaderProps) {\n const {mode, mobile, canToggle, toggleMode} = useSidebar()\n const isCollapsed = !mobile && mode === 'collapsed'\n\n return (\n <div className={cn('sidebar-header', bordered && 'bordered', className)}>\n <div className=\"sidebar-header-content\">{children}</div>\n {canToggle && (\n <MButton\n variant=\"outlined\"\n color=\"neutral\"\n iconOnly\n size=\"sm\"\n onClick={toggleMode}\n aria-label={isCollapsed ? 'Expand sidebar' : 'Collapse sidebar'}\n className=\"sidebar-toggle\"\n >\n <span className={cn('sidebar-chevron', isCollapsed && 'flipped')}>\n <MChevronRightIcon />\n </span>\n </MButton>\n )}\n </div>\n )\n}\n\n// Wrap the scrollable middle area between header and footer.\nexport function MSidebarBody({className, children}: MSidebarBodyProps) {\n return <div className={cn('sidebar-body', className)}>{children}</div>\n}\n\n// Wrap sidebar links in a navigation landmark.\nexport function MSidebarNav({className, children}: MSidebarNavProps) {\n return <nav className={cn('sidebar-nav', className)}>{children}</nav>\n}\n\n// Render one clickable sidebar row as a link, button or custom component.\nexport function MSidebarItem({\n icon,\n label,\n description,\n href,\n to,\n onClick,\n active = false,\n disabled = false,\n badge,\n color,\n component,\n className,\n}: MSidebarItemProps) {\n const {mode, mobile} = useSidebar()\n const isCollapsed = !mobile && mode === 'collapsed'\n\n // ONE tooltip per row: prefer description, fall back to label. The HTML\n // title attribute used in collapsed mode mirrors the same priority but is\n // limited to strings (browsers can't render ReactNodes).\n const tooltipContent = description ?? label\n const titleAttr = typeof description === 'string'\n ? description\n : typeof label === 'string'\n ? label\n : undefined\n\n const Tag = component ?? (href || to ? 'a' : 'button')\n const linkProps = component ? (to ? {to} : href ? {href} : {}) : href ? {href} : to ? {href: to} : {}\n const cls = cn('sidebar-item', active && 'active', disabled && 'disabled', color, className)\n\n return (\n <Tag\n className={cls}\n onClick={disabled ? undefined : onClick}\n aria-disabled={disabled || undefined}\n title={isCollapsed ? titleAttr : undefined}\n {...linkProps}\n >\n {icon && <span className=\"sidebar-item-icon\">{icon}</span>}\n {!isCollapsed && (\n <MTooltip content={tooltipContent} placement=\"top\" className=\"sidebar-item-label-tooltip\">\n <span className=\"sidebar-item-label\">{label}</span>\n </MTooltip>\n )}\n {!isCollapsed && badge && <span className=\"sidebar-item-badge\">{badge}</span>}\n </Tag>\n )\n}\n\n// Group related sidebar items and swap to a dropdown when collapsed.\nexport function MSidebarGroup({\n label,\n icon,\n active = false,\n defaultOpen = true,\n collapsible = true,\n children,\n className,\n}: MSidebarGroupProps) {\n const sidebarCtx = useSidebar()\n const {mode, mobile} = sidebarCtx\n const isCollapsed = !mobile && mode === 'collapsed'\n const [open, setOpen] = useState(defaultOpen)\n\n const expandedCtx = useMemo<SidebarContextValue>(() => ({...sidebarCtx, mode: 'expanded'}), [sidebarCtx])\n\n // Keep expand/collapse local to this group.\n const toggle = () => {\n if (collapsible) setOpen((o) => !o)\n }\n\n if (isCollapsed) {\n const trigger = (\n <span className={cn('sidebar-group-icon collapsed', active && 'active')} title={label}>\n {icon}\n </span>\n )\n\n return (\n <div className={cn('sidebar-group', className)}>\n <MDropdownMenu trigger={trigger} placement=\"right-start\" closeOnSelect openOn=\"hover\">\n <SidebarCtx.Provider value={expandedCtx}>{children}</SidebarCtx.Provider>\n </MDropdownMenu>\n </div>\n )\n }\n\n return (\n <div className={cn('sidebar-group', className)}>\n <button className={cn('sidebar-group-header', active && 'active')} onClick={toggle} aria-expanded={open}>\n {icon && <span className=\"sidebar-group-icon\">{icon}</span>}\n <span className=\"sidebar-group-label\">{label}</span>\n {collapsible && (\n <span className={cn('sidebar-group-arrow', open && 'open')}>\n <MChevronRightIcon />\n </span>\n )}\n </button>\n {open && <div className=\"sidebar-group-items\">{children}</div>}\n </div>\n )\n}\n\n// Render the bottom slot for version info or quick actions.\nexport function MSidebarFooter({bordered = false, className, children}: MSidebarFooterProps) {\n return <div className={cn('sidebar-footer', bordered && 'bordered', className)}>{children}</div>\n}\n\n// Render a spacing-aware divider between sidebar regions.\nexport function MSidebarDivider({className, spacing = 'md'}: MSidebarDividerProps) {\n return <hr className={cn('sidebar-divider', spacing, className)} />\n}\n","import {useMemo} from 'react'\nimport {cn} from '../../../utils/cn'\nimport type {MBreadcrumbProps} from './MBreadcrumb.types'\nimport './MBreadcrumb.css'\n\n// Render a compact path and collapse the middle when needed.\nexport function MBreadcrumb({items, separator = '/', maxItems, className, ...rest}: MBreadcrumbProps) {\n // Keep the current page visible while shortening deep paths.\n const visible = useMemo(() => {\n if (!maxItems || maxItems >= items.length) return items\n if (maxItems < 2) return [items[items.length - 1]]\n const head = items.slice(0, 1)\n const tail = items.slice(-(maxItems - 1))\n return [...head, null, ...tail]\n }, [items, maxItems])\n\n return (\n <nav aria-label=\"breadcrumb\" className={cn('breadcrumb', className)} {...rest}>\n <ol className=\"trail\">\n {visible.map((item, i) => {\n if (item === null) {\n return (\n <li key=\"ellipsis\" className=\"crumb dots\">\n <span className=\"sep\">{separator}</span>\n <span>&#8230;</span>\n </li>\n )\n }\n\n const isLast = i === visible.length - 1\n\n return (\n <li key={i} className={cn('crumb', isLast && 'active')}>\n {i > 0 && <span className=\"sep\">{separator}</span>}\n {item.href && !isLast ? (\n <a href={item.href} className=\"link\" onClick={item.onClick}>\n {item.label}\n </a>\n ) : item.onClick && !isLast ? (\n <button type=\"button\" className=\"link btn\" onClick={item.onClick}>\n {item.label}\n </button>\n ) : (\n <span className=\"current\" aria-current={isLast ? 'page' : undefined}>\n {item.label}\n </span>\n )}\n </li>\n )\n })}\n </ol>\n </nav>\n )\n}\n","import {forwardRef, Children, isValidElement} from 'react'\nimport type * as React from 'react'\nimport type {MAppShellProps, MBodyProps} from './MAppShell.types'\nimport {cn} from '../../../utils/cn'\nimport {MSidebar} from '../MSidebar'\nimport './MAppShell.css'\n\nexport const MAppShell = forwardRef<HTMLDivElement, MAppShellProps>(function MAppShell(\n {className, children, ...rest},\n ref\n) {\n const sidebarElements: React.ReactNode[] = []\n const otherElements: React.ReactNode[] = []\n\n Children.forEach(children, (child) => {\n if (isValidElement(child) && child.type === MSidebar) {\n sidebarElements.push(child)\n } else {\n otherElements.push(child)\n }\n })\n\n return (\n <div ref={ref} className={cn('app-shell', className)} {...rest}>\n {sidebarElements}\n <div className=\"app-main\">{otherElements}</div>\n </div>\n )\n})\n\nexport const MBody = forwardRef<HTMLDivElement, MBodyProps>(function MBody({className, children, ...rest}, ref) {\n return (\n <div ref={ref} className={cn('app-body', className)} {...rest}>\n {children}\n </div>\n )\n})\n","import {useEffect, useRef, useState, type ReactNode} from 'react'\n\ninterface ScaleToFitProps {\n /**\n * Minimum render width (in CSS px). When the parent is narrower, content\n * is rendered at this width and scaled down. When the parent is wider,\n * content is rendered at the parent's width (no scale-up, no padding).\n */\n baseWidth?: number\n children: ReactNode\n}\n\n/**\n * Renders `children` at `max(baseWidth, parentWidth)`, then applies\n * `transform: scale(...)` so the rendered block fits the parent box without\n * scrollbars. Scale never exceeds 1 (no blurry up-scaling). When the parent\n * is wider than baseWidth, render width tracks the parent so content fills\n * the available space natively (no horizontal padding).\n */\nexport function ScaleToFit({baseWidth = 480, children}: ScaleToFitProps) {\n const wrapperRef = useRef<HTMLDivElement>(null)\n const contentRef = useRef<HTMLDivElement>(null)\n const [scale, setScale] = useState(1)\n const [renderWidth, setRenderWidth] = useState<number>(baseWidth)\n\n useEffect(() => {\n const wrap = wrapperRef.current\n const content = contentRef.current\n if (!wrap || !content) return\n\n let frame = 0\n const recompute = () => {\n cancelAnimationFrame(frame)\n frame = requestAnimationFrame(() => {\n const wW = wrap.clientWidth\n const wH = wrap.clientHeight\n if (wW === 0 || wH === 0) return\n const cW = Math.max(baseWidth, wW)\n const cH = content.offsetHeight\n if (cW === 0 || cH === 0) return\n const sW = wW / cW\n const sH = wH / cH\n const next = Math.min(sW, sH, 1)\n if (next > 0 && Number.isFinite(next)) {\n setRenderWidth(cW)\n setScale(next)\n }\n })\n }\n\n const ro = new ResizeObserver(recompute)\n ro.observe(wrap)\n ro.observe(content)\n recompute()\n return () => {\n cancelAnimationFrame(frame)\n ro.disconnect()\n }\n }, [baseWidth])\n\n return (\n <div ref={wrapperRef} className=\"canvas-grid-scale-wrapper\">\n <div\n ref={contentRef}\n className=\"canvas-grid-scale-content\"\n style={{width: `${renderWidth}px`, transform: `scale(${scale})`}}\n >\n {children}\n </div>\n </div>\n )\n}\n","import {forwardRef, useCallback, useEffect, useRef, useState} from 'react'\nimport type {CSSProperties, ForwardedRef, PointerEvent as ReactPointerEvent, ReactElement, Ref} from 'react'\nimport type {MCanvasGridItem, MCanvasGridPosition, MCanvasGridProps} from './MCanvasGrid.types'\nimport {cn} from '../../../utils/cn'\nimport {MShellBreakpoints, useMaxWidth} from '../../../theme'\nimport {MEditIcon, MMoveIcon, MTrashIcon, MZoomInIcon} from '../../../icons'\nimport {MButton} from '../../controls/MButton'\nimport {MButtonGroup} from '../../controls/MButtonGroup'\nimport {ScaleToFit} from './ScaleToFit'\nimport './MCanvasGrid.css'\n\ninterface DragState {\n itemId: string\n mode: 'drag' | 'resize'\n startClientX: number\n startClientY: number\n original: MCanvasGridPosition\n}\n\nfunction clamp(value: number, min: number, max: number) {\n return Math.max(min, Math.min(max, value))\n}\n\nfunction MCanvasGridInner<T extends MCanvasGridItem>(\n {\n columns = 24,\n rows = 24,\n snap = 4,\n items,\n renderItem,\n minItemSize,\n maxItemSize: _maxItemSize,\n editable = false,\n onItemMove,\n onItemResize,\n onItemRemove,\n onItemEdit,\n onItemExpand,\n guides = 'always',\n compactBreakpoint = MShellBreakpoints.compact,\n mobileBreakpoint = MShellBreakpoints.mobile,\n height,\n fitContent = 'scroll',\n fitContentBaseWidth = 480,\n className,\n style,\n }: MCanvasGridProps<T>,\n ref: ForwardedRef<HTMLDivElement>\n) {\n const innerRef = useRef<HTMLDivElement | null>(null)\n const [size, setSize] = useState({width: 0, height: 0})\n const [drag, setDrag] = useState<DragState | null>(null)\n const [preview, setPreview] = useState<MCanvasGridPosition | null>(null)\n const [touchOrder, setTouchOrder] = useState<Record<string, number>>({})\n const touchCounterRef = useRef(0)\n\n function bringToFront(itemId: string) {\n touchCounterRef.current += 1\n setTouchOrder((prev) => ({...prev, [itemId]: touchCounterRef.current}))\n }\n\n function suppressNextClick() {\n let armed = true\n const stopper = (ev: MouseEvent) => {\n if (!armed) return\n armed = false\n ev.stopPropagation()\n ev.preventDefault()\n window.removeEventListener('click', stopper, true)\n }\n window.addEventListener('click', stopper, true)\n window.setTimeout(() => {\n if (!armed) return\n armed = false\n window.removeEventListener('click', stopper, true)\n }, 60)\n }\n\n const isMobile = useMaxWidth(mobileBreakpoint)\n const isCompact = useMaxWidth(compactBreakpoint) && !isMobile\n\n const totalCols = columns * snap\n const totalRows = rows * snap\n const effectiveCols = isCompact ? Math.max(1, Math.round(totalCols / 2)) : totalCols\n const effectiveRows = isCompact ? Math.max(1, Math.round(totalRows / 2)) : totalRows\n const effectiveCells = isCompact ? Math.max(1, Math.round(columns / 2)) : columns\n const effectiveRowCells = isCompact ? Math.max(1, Math.round(rows / 2)) : rows\n\n const interactive = editable && !isMobile\n\n useEffect(() => {\n const node = innerRef.current\n if (!node || typeof ResizeObserver === 'undefined') return\n const update = () => setSize({width: node.clientWidth, height: node.clientHeight})\n update()\n const observer = new ResizeObserver(update)\n observer.observe(node)\n return () => observer.disconnect()\n }, [])\n\n const setRefs = useCallback(\n (node: HTMLDivElement | null) => {\n innerRef.current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) (ref as {current: HTMLDivElement | null}).current = node\n },\n [ref]\n )\n\n function getMin(item: T) {\n const m = minItemSize?.(item)\n if (!m) return {w: snap, h: snap}\n return {w: Math.max(snap, m.w * snap), h: Math.max(snap, m.h * snap)}\n }\n\n function startResize(e: ReactPointerEvent<HTMLDivElement>, item: T) {\n if (!interactive) return\n e.stopPropagation()\n e.preventDefault()\n ;(e.currentTarget as Element).setPointerCapture(e.pointerId)\n bringToFront(item.id)\n setDrag({\n itemId: item.id,\n mode: 'resize',\n startClientX: e.clientX,\n startClientY: e.clientY,\n original: {...item.position},\n })\n setPreview({...item.position})\n }\n\n function startDragFromHeader(e: ReactPointerEvent<HTMLDivElement>, item: T) {\n if (!interactive) return\n if ((e.target as Element).closest('button, [role=\"button\"]')) return\n e.stopPropagation()\n e.preventDefault()\n ;(e.currentTarget as Element).setPointerCapture(e.pointerId)\n bringToFront(item.id)\n setDrag({\n itemId: item.id,\n mode: 'drag',\n startClientX: e.clientX,\n startClientY: e.clientY,\n original: {...item.position},\n })\n setPreview({...item.position})\n }\n\n function handlePointerMove(e: ReactPointerEvent<HTMLDivElement>) {\n if (!drag || size.width === 0 || size.height === 0) return\n const cellPxX = size.width / effectiveCols\n const cellPxY = size.height / effectiveRows\n const dx = Math.round((e.clientX - drag.startClientX) / cellPxX)\n const dy = Math.round((e.clientY - drag.startClientY) / cellPxY)\n const original = drag.original\n\n const targetItem = items.find((it) => it.id === drag.itemId)\n const min = targetItem ? getMin(targetItem) : {w: snap, h: snap}\n\n if (drag.mode === 'drag') {\n const x = clamp(original.x + dx, 0, effectiveCols - original.w)\n const y = clamp(original.y + dy, 0, effectiveRows - original.h)\n setPreview({x, y, w: original.w, h: original.h})\n } else {\n const w = clamp(original.w + dx, min.w, effectiveCols - original.x)\n const h = clamp(original.h + dy, min.h, effectiveRows - original.y)\n setPreview({x: original.x, y: original.y, w, h})\n }\n }\n\n function handlePointerUp(e: ReactPointerEvent<HTMLDivElement>) {\n if (!drag) return\n try {\n ;(e.currentTarget as Element).releasePointerCapture(e.pointerId)\n } catch {\n // pointer may have already been released\n }\n if (preview) {\n if (drag.mode === 'drag') onItemMove?.(drag.itemId, preview)\n else onItemResize?.(drag.itemId, preview)\n }\n setDrag(null)\n setPreview(null)\n }\n\n function handleHeaderPointerUp(e: ReactPointerEvent<HTMLDivElement>) {\n if (drag) {\n suppressNextClick()\n handlePointerUp(e)\n }\n }\n\n const guidesOn =\n guides === 'always' ||\n (guides === 'on-edit' && interactive) ||\n (guides === 'on-drag' && drag !== null)\n\n const heightStyle: CSSProperties | undefined =\n height !== undefined ? {height: typeof height === 'number' ? `${height}px` : height} : undefined\n\n if (isMobile) {\n const ordered = [...items].sort((a, b) => a.position.y - b.position.y)\n return (\n <div\n ref={setRefs}\n className={cn('canvas-grid', 'mobile', className)}\n data-guides=\"off\"\n style={{...heightStyle, ...style}}\n >\n {ordered.map((item) => (\n <div key={item.id} className=\"canvas-grid-item\">\n {renderItem(item)}\n </div>\n ))}\n </div>\n )\n }\n\n const gridStyle: CSSProperties = {\n ...heightStyle,\n ...style,\n gridTemplateColumns: `repeat(${effectiveCols}, 1fr)`,\n gridTemplateRows: `repeat(${effectiveRows}, 1fr)`,\n ['--canvas-grid-cells' as string]: String(effectiveCells),\n ['--canvas-grid-row-cells' as string]: String(effectiveRowCells),\n }\n\n const overlayCells = effectiveCells * effectiveRowCells\n\n return (\n <div\n ref={setRefs}\n className={cn('canvas-grid', isCompact && 'compact', interactive && 'editable', className)}\n data-guides={guidesOn ? 'on' : 'off'}\n style={gridStyle}\n >\n <div className=\"canvas-grid-overlay\" aria-hidden>\n {Array.from({length: overlayCells}, (_, idx) => {\n const isLastCol = (idx + 1) % effectiveCells === 0\n const isLastRow = idx >= overlayCells - effectiveCells\n return (\n <div\n key={idx}\n className={cn('canvas-grid-cell', isLastCol && 'no-right', isLastRow && 'no-bottom')}\n />\n )\n })}\n </div>\n\n {items.map((item) => {\n const isDragging = drag?.itemId === item.id\n const live = isDragging && preview ? preview : item.position\n // half-precision math for compact viewport\n const x = isCompact ? Math.round(live.x / 2) : live.x\n const y = isCompact ? Math.round(live.y / 2) : live.y\n const w = Math.max(1, isCompact ? Math.round(live.w / 2) : live.w)\n const h = Math.max(1, isCompact ? Math.round(live.h / 2) : live.h)\n\n const baseZ = 1 + (touchOrder[item.id] ?? 0)\n const itemStyle: CSSProperties = {\n gridColumn: `${x + 1} / span ${w}`,\n gridRow: `${y + 1} / span ${h}`,\n zIndex: isDragging ? baseZ + 100 : baseZ,\n }\n\n return (\n <div\n key={item.id}\n className={cn('canvas-grid-item', isDragging && 'dragging')}\n style={itemStyle}\n >\n <div\n className=\"canvas-grid-item-header\"\n onPointerDown={(e) => startDragFromHeader(e, item)}\n onPointerMove={handlePointerMove}\n onPointerUp={handleHeaderPointerUp}\n onPointerCancel={handlePointerUp}\n >\n <MButtonGroup variant=\"ghost\" size=\"xs\">\n {interactive && onItemEdit && (\n <MButton\n color=\"primary\"\n iconOnly\n aria-label=\"Edit tile\"\n startIcon={<MEditIcon />}\n onPointerDown={(e) => e.stopPropagation()}\n onClick={(e) => {\n e.stopPropagation()\n onItemEdit(item.id)\n }}\n />\n )}\n {onItemExpand && (\n <MButton\n color=\"primary\"\n iconOnly\n aria-label=\"Expand tile\"\n startIcon={<MZoomInIcon />}\n onPointerDown={(e) => e.stopPropagation()}\n onClick={(e) => {\n e.stopPropagation()\n onItemExpand(item.id)\n }}\n />\n )}\n {interactive && onItemRemove && (\n <MButton\n color=\"error\"\n iconOnly\n aria-label=\"Remove tile\"\n startIcon={<MTrashIcon />}\n onPointerDown={(e) => e.stopPropagation()}\n onClick={(e) => {\n e.stopPropagation()\n onItemRemove(item.id)\n }}\n />\n )}\n </MButtonGroup>\n </div>\n <div className=\"canvas-grid-item-body\">\n {fitContent === 'scale' ? (\n <ScaleToFit baseWidth={fitContentBaseWidth}>{renderItem(item)}</ScaleToFit>\n ) : (\n renderItem(item)\n )}\n </div>\n {!interactive && onItemExpand && (\n <MButton\n className=\"canvas-grid-view-expand-handle\"\n variant=\"filled\"\n shape=\"circle\"\n size=\"sm\"\n color=\"primary\"\n iconOnly\n aria-label=\"Expand tile\"\n startIcon={<MZoomInIcon />}\n onClick={(e) => {\n e.stopPropagation()\n onItemExpand(item.id)\n }}\n />\n )}\n {interactive && isDragging && (\n <div className=\"canvas-grid-item-glass\" aria-hidden>\n <MMoveIcon size={28} />\n </div>\n )}\n {interactive && (\n <div\n className=\"canvas-grid-resize-handle\"\n aria-hidden\n onPointerDown={(e) => startResize(e, item)}\n onPointerMove={handlePointerMove}\n onPointerUp={(e) => {\n if (drag) suppressNextClick()\n handlePointerUp(e)\n }}\n onPointerCancel={handlePointerUp}\n />\n )}\n </div>\n )\n })}\n </div>\n )\n}\n\nexport const MCanvasGrid = forwardRef(MCanvasGridInner) as <T extends MCanvasGridItem>(\n props: MCanvasGridProps<T> & {ref?: Ref<HTMLDivElement>}\n) => ReactElement | null\n"],"mappings":"ifAOA,SAAgB,EAAW,CACvB,OAAO,UACP,SAAS,GACT,SACA,UACA,UACA,QACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,YACA,YACA,QACA,WACA,GAAG,GACa,CAChB,IAAM,EAAe,EAAA,EAAuB,CAAC,QAAM,CAAC,CAEpD,OACI,EAAA,EAAA,KAAC,MAAD,CACI,UAAW,EAAA,EACP,YACA,EACA,GAAU,SACV,GAAG,EAAA,EAA2B,CAC1B,UACA,UACA,QACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,YACH,CAAC,CACF,EACH,CACD,MAAO,CAAC,GAAG,EAAc,GAAG,EAAM,CAClC,GAAI,EAAA,EAAe,EAAO,CAC1B,GAAI,EAEH,WACC,CAAA,CC1Dd,SAAgB,EAAQ,CACpB,YAAY,OACZ,SAAS,GACT,WAAW,GACX,SAAS,GACT,OAAO,UACP,SAAS,QACT,SACA,YACA,WACA,GAAG,GACU,CACb,OACI,EAAA,EAAA,KAAC,SAAD,CACI,UAAW,EAAA,EAAG,SAAU,EAAM,GAAY,WAAY,GAAU,SAAU,EAAU,CACpF,GAAI,EAAA,EAAe,EAAO,CAC1B,GAAI,YAEJ,EAAA,EAAA,KAAC,EAAD,CAAY,KAAM,EAAmB,SAAQ,UAAW,EAAA,EAAG,QAAS,UAAU,IAAS,CAClF,WACQ,CAAA,CACR,CAAA,CCpBjB,SAAgB,EAAQ,CACpB,YAAY,OACZ,SAAS,GACT,WAAW,GACX,OAAO,UACP,SACA,UACA,UACA,QACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,YACA,YACA,QACA,WACA,GAAG,GACU,CACb,IAAM,EAAe,EAAA,EAAuB,CAAC,QAAM,CAAC,CAEpD,OACI,EAAA,EAAA,KAAC,SAAD,CACI,UAAW,EAAA,EACP,SACA,EACA,GAAY,WACZ,GAAG,EAAA,EAA2B,CAC1B,UACA,UACA,QACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,YACH,CAAC,CACF,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"}
package/dist/layout.cjs CHANGED
@@ -1,3 +1,3 @@
1
1
  const {ensureStyles}=require('./style-runtime.cjs')
2
2
  ensureStyles()
3
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./layout-dUrQeGc2.cjs`),t=require(`./MStack-w8XcuIJK.cjs`),n=require(`./MTabs-DeUn6bIp.cjs`),r=require(`./MSimpleGrid-CyLf-9R2.cjs`),i=require(`./MGrid-B-fP4GME.cjs`),a=require(`./MSurface-KvAS2hkl.cjs`),o=require(`./MPagination-D1hYqLDb.cjs`);exports.MAppShell=e.t,exports.MBody=e.n,exports.MBreadcrumb=e.r,exports.MContainer=e.b,exports.MDivider=e.f,exports.MFooter=e.v,exports.MGrid=i.t,exports.MGridItem=i.n,exports.MHeader=e.y,exports.MInline=t.n,exports.MNavbar=e.g,exports.MNavs=e._,exports.MPagination=o.t,exports.MSection=e.m,exports.MSidebar=e.i,exports.MSidebarBody=e.a,exports.MSidebarDivider=e.o,exports.MSidebarFooter=e.s,exports.MSidebarGroup=e.c,exports.MSidebarHeader=e.l,exports.MSidebarItem=e.u,exports.MSidebarNav=e.d,exports.MSimpleGrid=r.t,exports.MStack=t.t,exports.MStatGrid=e.p,exports.MSurface=a.t,exports.MTabs=n.t,exports.MTopbar=e.h;
3
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./layout-D9LAqtZp.cjs`),t=require(`./MSurface-WsYGNGX5.cjs`),n=require(`./MGrid-Di7laCq4.cjs`),r=require(`./MStack-DDn2bYBQ.cjs`),i=require(`./MSimpleGrid-B6Uh1XJY.cjs`),a=require(`./MPagination-CAzIIP2o.cjs`);exports.MAppShell=e.n,exports.MBody=e.r,exports.MBreadcrumb=e.i,exports.MCanvasGrid=e.t,exports.MContainer=e.b,exports.MDivider=e.p,exports.MFooter=e.v,exports.MGrid=n.t,exports.MGridItem=n.n,exports.MHeader=e.y,exports.MInline=t.n,exports.MNavbar=e.g,exports.MNavs=e._,exports.MPagination=a.t,exports.MSection=e.h,exports.MSidebar=e.a,exports.MSidebarBody=e.o,exports.MSidebarDivider=e.s,exports.MSidebarFooter=e.c,exports.MSidebarGroup=e.l,exports.MSidebarHeader=e.u,exports.MSidebarItem=e.d,exports.MSidebarNav=e.f,exports.MSimpleGrid=i.t,exports.MStack=r.t,exports.MStatGrid=e.m,exports.MSurface=t.t,exports.MTabs=n.r;
package/dist/layout.js CHANGED
@@ -1,10 +1,9 @@
1
1
  import {ensureStyles} from './style-runtime.js'
2
2
  ensureStyles()
3
- import { _ as e, a as t, b as n, c as r, d as i, f as a, g as o, h as s, i as c, l, m as u, n as d, o as f, p, r as m, s as h, t as g, u as _, v, y } from "./layout-tIq6BGQK.js";
4
- import { n as b, t as x } from "./MStack-C4Eocfb5.js";
5
- import { t as S } from "./MTabs-BQZ--mMq.js";
6
- import { t as C } from "./MSimpleGrid-Bojj4xKH.js";
7
- import { n as w, t as T } from "./MGrid-DVluuula.js";
8
- import { t as E } from "./MSurface-odrvQXkb.js";
9
- import { t as D } from "./MPagination-DvToi2cs.js";
10
- export { g as MAppShell, d as MBody, m as MBreadcrumb, n as MContainer, a as MDivider, v as MFooter, T as MGrid, w as MGridItem, y as MHeader, b as MInline, o as MNavbar, e as MNavs, D as MPagination, u as MSection, c as MSidebar, t as MSidebarBody, f as MSidebarDivider, h as MSidebarFooter, r as MSidebarGroup, l as MSidebarHeader, _ as MSidebarItem, i as MSidebarNav, C as MSimpleGrid, x as MStack, p as MStatGrid, E as MSurface, S as MTabs, s as MTopbar };
3
+ import { _ as e, a as t, b as n, c as r, d as i, f as a, g as o, h as s, i as c, l, m as u, n as d, o as f, p, r as m, s as h, t as g, u as _, v, y } from "./layout-BgfQpVOU.js";
4
+ import { n as b, t as x } from "./MSurface-B-sjyczH.js";
5
+ import { n as S, r as C, t as w } from "./MGrid-yLmEteNw.js";
6
+ import { t as T } from "./MStack-B8JtyM10.js";
7
+ import { t as E } from "./MSimpleGrid-Ds14eBrD.js";
8
+ import { t as D } from "./MPagination-CnFI794t.js";
9
+ export { d as MAppShell, m as MBody, c as MBreadcrumb, g as MCanvasGrid, n as MContainer, p as MDivider, v as MFooter, w as MGrid, S as MGridItem, y as MHeader, b as MInline, o as MNavbar, e as MNavs, D as MPagination, s as MSection, t as MSidebar, f as MSidebarBody, h as MSidebarDivider, r as MSidebarFooter, l as MSidebarGroup, _ as MSidebarHeader, i as MSidebarItem, a as MSidebarNav, E as MSimpleGrid, T as MStack, u as MStatGrid, x as MSurface, C as MTabs };
@@ -0,0 +1,28 @@
1
+ import { useEffect as e } from "react";
2
+ //#region src/utils/useClickOutside.ts
3
+ function t(t, n) {
4
+ e(() => {
5
+ let e = (e) => {
6
+ !t.current || t.current.contains(e.target) || n();
7
+ };
8
+ return document.addEventListener("mousedown", e), document.addEventListener("touchstart", e), () => {
9
+ document.removeEventListener("mousedown", e), document.removeEventListener("touchstart", e);
10
+ };
11
+ }, [t, n]);
12
+ }
13
+ //#endregion
14
+ //#region src/utils/licensing.ts
15
+ var n = {}, r = Object.keys(n);
16
+ function i(e) {
17
+ return Object.prototype.hasOwnProperty.call(n, e);
18
+ }
19
+ function a(e) {
20
+ if (i(e)) return n[e];
21
+ }
22
+ function o(e) {
23
+ return a(e)?.plan ?? "free";
24
+ }
25
+ //#endregion
26
+ export { r as a, n as i, o as n, t as o, i as r, a as t };
27
+
28
+ //# sourceMappingURL=licensing-f5KYVz7D.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"licensing-f5KYVz7D.js","names":[],"sources":["../src/utils/useClickOutside.ts","../src/utils/licensing.ts"],"sourcesContent":["import {useEffect, type RefObject} from 'react'\n\n// Trigger a callback when pointer interaction happens outside the referenced element.\nexport function useClickOutside(ref: RefObject<HTMLElement | null>, handler: () => void): void {\n useEffect(() => {\n const listener = (e: MouseEvent | TouchEvent) => {\n if (!ref.current || ref.current.contains(e.target as Node)) return\n handler()\n }\n\n document.addEventListener('mousedown', listener)\n document.addEventListener('touchstart', listener)\n return () => {\n document.removeEventListener('mousedown', listener)\n document.removeEventListener('touchstart', listener)\n }\n }, [ref, handler])\n}\n","export type MineralPlan = 'free' | 'pro'\n\nexport interface MineralComponentLicense {\n group: 'cards' | 'charts' | 'data' | 'display' | 'media' | 'icons' | 'layout' | 'feedback'\n plan: MineralPlan\n}\n\nexport const mineralComponentLicenses = {} as const satisfies Record<string, MineralComponentLicense>\n\nexport type MineralProComponentName = keyof typeof mineralComponentLicenses\n\nexport const mineralProComponents = Object.keys(mineralComponentLicenses) as MineralProComponentName[]\n\nexport function isMineralProComponent(componentName: string): componentName is MineralProComponentName {\n return Object.prototype.hasOwnProperty.call(mineralComponentLicenses, componentName)\n}\n\nexport function getMineralComponentLicense(componentName: string): MineralComponentLicense | undefined {\n if (!isMineralProComponent(componentName)) {\n return undefined\n }\n\n return mineralComponentLicenses[componentName]\n}\n\nexport function getMineralComponentPlan(componentName: string): MineralPlan {\n return getMineralComponentLicense(componentName)?.plan ?? 'free'\n}\n"],"mappings":";;AAGA,SAAgB,EAAgB,GAAoC,GAA2B;AAC3F,SAAgB;EACZ,IAAM,KAAY,MAA+B;AACzC,IAAC,EAAI,WAAW,EAAI,QAAQ,SAAS,EAAE,OAAe,IAC1D,GAAS;;AAKb,SAFA,SAAS,iBAAiB,aAAa,EAAS,EAChD,SAAS,iBAAiB,cAAc,EAAS,QACpC;AAET,GADA,SAAS,oBAAoB,aAAa,EAAS,EACnD,SAAS,oBAAoB,cAAc,EAAS;;IAEzD,CAAC,GAAK,EAAQ,CAAC;;;;ACTtB,IAAa,IAA2B,EAAE,EAI7B,IAAuB,OAAO,KAAK,EAAyB;AAEzE,SAAgB,EAAsB,GAAiE;AACnG,QAAO,OAAO,UAAU,eAAe,KAAK,GAA0B,EAAc;;AAGxF,SAAgB,EAA2B,GAA4D;AAC9F,OAAsB,EAAc,CAIzC,QAAO,EAAyB;;AAGpC,SAAgB,EAAwB,GAAoC;AACxE,QAAO,EAA2B,EAAc,EAAE,QAAQ"}
@@ -0,0 +1,2 @@
1
+ require(`./core-B2klLGki.cjs`);let e=require(`react`);function t(t,n){(0,e.useEffect)(()=>{let e=e=>{!t.current||t.current.contains(e.target)||n()};return document.addEventListener(`mousedown`,e),document.addEventListener(`touchstart`,e),()=>{document.removeEventListener(`mousedown`,e),document.removeEventListener(`touchstart`,e)}},[t,n])}var n={},r=Object.keys(n);function i(e){return Object.prototype.hasOwnProperty.call(n,e)}function a(e){if(i(e))return n[e]}function o(e){return a(e)?.plan??`free`}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return n}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return t}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return a}});
2
+ //# sourceMappingURL=licensing-sRHTvX0B.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"licensing-sRHTvX0B.cjs","names":[],"sources":["../src/utils/useClickOutside.ts","../src/utils/licensing.ts"],"sourcesContent":["import {useEffect, type RefObject} from 'react'\n\n// Trigger a callback when pointer interaction happens outside the referenced element.\nexport function useClickOutside(ref: RefObject<HTMLElement | null>, handler: () => void): void {\n useEffect(() => {\n const listener = (e: MouseEvent | TouchEvent) => {\n if (!ref.current || ref.current.contains(e.target as Node)) return\n handler()\n }\n\n document.addEventListener('mousedown', listener)\n document.addEventListener('touchstart', listener)\n return () => {\n document.removeEventListener('mousedown', listener)\n document.removeEventListener('touchstart', listener)\n }\n }, [ref, handler])\n}\n","export type MineralPlan = 'free' | 'pro'\n\nexport interface MineralComponentLicense {\n group: 'cards' | 'charts' | 'data' | 'display' | 'media' | 'icons' | 'layout' | 'feedback'\n plan: MineralPlan\n}\n\nexport const mineralComponentLicenses = {} as const satisfies Record<string, MineralComponentLicense>\n\nexport type MineralProComponentName = keyof typeof mineralComponentLicenses\n\nexport const mineralProComponents = Object.keys(mineralComponentLicenses) as MineralProComponentName[]\n\nexport function isMineralProComponent(componentName: string): componentName is MineralProComponentName {\n return Object.prototype.hasOwnProperty.call(mineralComponentLicenses, componentName)\n}\n\nexport function getMineralComponentLicense(componentName: string): MineralComponentLicense | undefined {\n if (!isMineralProComponent(componentName)) {\n return undefined\n }\n\n return mineralComponentLicenses[componentName]\n}\n\nexport function getMineralComponentPlan(componentName: string): MineralPlan {\n return getMineralComponentLicense(componentName)?.plan ?? 'free'\n}\n"],"mappings":"sDAGA,SAAgB,EAAgB,EAAoC,EAA2B,EAC3F,EAAA,EAAA,eAAgB,CACZ,IAAM,EAAY,GAA+B,CACzC,CAAC,EAAI,SAAW,EAAI,QAAQ,SAAS,EAAE,OAAe,EAC1D,GAAS,EAKb,OAFA,SAAS,iBAAiB,YAAa,EAAS,CAChD,SAAS,iBAAiB,aAAc,EAAS,KACpC,CACT,SAAS,oBAAoB,YAAa,EAAS,CACnD,SAAS,oBAAoB,aAAc,EAAS,GAEzD,CAAC,EAAK,EAAQ,CAAC,CCTtB,IAAa,EAA2B,EAAE,CAI7B,EAAuB,OAAO,KAAK,EAAyB,CAEzE,SAAgB,EAAsB,EAAiE,CACnG,OAAO,OAAO,UAAU,eAAe,KAAK,EAA0B,EAAc,CAGxF,SAAgB,EAA2B,EAA4D,CAC9F,KAAsB,EAAc,CAIzC,OAAO,EAAyB,GAGpC,SAAgB,EAAwB,EAAoC,CACxE,OAAO,EAA2B,EAAc,EAAE,MAAQ"}
@@ -1,2 +1,2 @@
1
- require(`./core-DAox0BHy.cjs`);let e=require(`react`);function t(){if(typeof document<`u`){let e=document.documentElement.lang?.trim();if(e)return e}return typeof navigator<`u`&&(navigator.language||navigator.languages?.[0])||`en`}function n(n){let[r,i]=(0,e.useState)(()=>n||t());return(0,e.useEffect)(()=>{if(n){i(n);return}if(typeof document>`u`)return;let e=()=>i(t());e();let r=new MutationObserver(e);return r.observe(document.documentElement,{attributes:!0,attributeFilter:[`lang`]}),window.addEventListener(`languagechange`,e),()=>{r.disconnect(),window.removeEventListener(`languagechange`,e)}},[n]),r}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return n}});
2
- //# sourceMappingURL=locale-Bz2JXxDZ.cjs.map
1
+ require(`./core-B2klLGki.cjs`);let e=require(`react`);function t(){if(typeof document<`u`){let e=document.documentElement.lang?.trim();if(e)return e}return typeof navigator<`u`&&(navigator.language||navigator.languages?.[0])||`en`}function n(n){let[r,i]=(0,e.useState)(()=>n||t());return(0,e.useEffect)(()=>{if(n){i(n);return}if(typeof document>`u`)return;let e=()=>i(t());e();let r=new MutationObserver(e);return r.observe(document.documentElement,{attributes:!0,attributeFilter:[`lang`]}),window.addEventListener(`languagechange`,e),()=>{r.disconnect(),window.removeEventListener(`languagechange`,e)}},[n]),r}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return n}});
2
+ //# sourceMappingURL=locale-CJWWjFm-.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"locale-Bz2JXxDZ.cjs","names":[],"sources":["../src/utils/locale.ts"],"sourcesContent":["import {useEffect, useState} from 'react'\n\nexport function resolveRuntimeLocale(): string {\n if (typeof document !== 'undefined') {\n const lang = document.documentElement.lang?.trim()\n if (lang) return lang\n }\n\n if (typeof navigator !== 'undefined') {\n return navigator.language || navigator.languages?.[0] || 'en'\n }\n\n return 'en'\n}\n\n// React to MI18nProvider lang updates without requiring direct provider access.\nexport function useDocumentLocale(explicitLocale?: string): string {\n const [locale, setLocale] = useState(() => explicitLocale || resolveRuntimeLocale())\n\n useEffect(() => {\n if (explicitLocale) {\n setLocale(explicitLocale)\n return\n }\n\n if (typeof document === 'undefined') return\n\n const update = () => setLocale(resolveRuntimeLocale())\n update()\n\n const observer = new MutationObserver(update)\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['lang'],\n })\n\n window.addEventListener('languagechange', update)\n\n return () => {\n observer.disconnect()\n window.removeEventListener('languagechange', update)\n }\n }, [explicitLocale])\n\n return locale\n}\n"],"mappings":"sDAEA,SAAgB,GAA+B,CAC3C,GAAI,OAAO,SAAa,IAAa,CACjC,IAAM,EAAO,SAAS,gBAAgB,MAAM,MAAM,CAClD,GAAI,EAAM,OAAO,EAOrB,OAJI,OAAO,UAAc,MACd,UAAU,UAAY,UAAU,YAAY,KAGhD,KAIX,SAAgB,EAAkB,EAAiC,CAC/D,GAAM,CAAC,EAAQ,IAAA,EAAA,EAAA,cAA4B,GAAkB,GAAsB,CAAC,CA2BpF,OAzBA,EAAA,EAAA,eAAgB,CACZ,GAAI,EAAgB,CAChB,EAAU,EAAe,CACzB,OAGJ,GAAI,OAAO,SAAa,IAAa,OAErC,IAAM,MAAe,EAAU,GAAsB,CAAC,CACtD,GAAQ,CAER,IAAM,EAAW,IAAI,iBAAiB,EAAO,CAQ7C,OAPA,EAAS,QAAQ,SAAS,gBAAiB,CACvC,WAAY,GACZ,gBAAiB,CAAC,OAAO,CAC5B,CAAC,CAEF,OAAO,iBAAiB,iBAAkB,EAAO,KAEpC,CACT,EAAS,YAAY,CACrB,OAAO,oBAAoB,iBAAkB,EAAO,GAEzD,CAAC,EAAe,CAAC,CAEb"}
1
+ {"version":3,"file":"locale-CJWWjFm-.cjs","names":[],"sources":["../src/utils/locale.ts"],"sourcesContent":["import {useEffect, useState} from 'react'\n\nexport function resolveRuntimeLocale(): string {\n if (typeof document !== 'undefined') {\n const lang = document.documentElement.lang?.trim()\n if (lang) return lang\n }\n\n if (typeof navigator !== 'undefined') {\n return navigator.language || navigator.languages?.[0] || 'en'\n }\n\n return 'en'\n}\n\n// React to MI18nProvider lang updates without requiring direct provider access.\nexport function useDocumentLocale(explicitLocale?: string): string {\n const [locale, setLocale] = useState(() => explicitLocale || resolveRuntimeLocale())\n\n useEffect(() => {\n if (explicitLocale) {\n setLocale(explicitLocale)\n return\n }\n\n if (typeof document === 'undefined') return\n\n const update = () => setLocale(resolveRuntimeLocale())\n update()\n\n const observer = new MutationObserver(update)\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['lang'],\n })\n\n window.addEventListener('languagechange', update)\n\n return () => {\n observer.disconnect()\n window.removeEventListener('languagechange', update)\n }\n }, [explicitLocale])\n\n return locale\n}\n"],"mappings":"sDAEA,SAAgB,GAA+B,CAC3C,GAAI,OAAO,SAAa,IAAa,CACjC,IAAM,EAAO,SAAS,gBAAgB,MAAM,MAAM,CAClD,GAAI,EAAM,OAAO,EAOrB,OAJI,OAAO,UAAc,MACd,UAAU,UAAY,UAAU,YAAY,KAGhD,KAIX,SAAgB,EAAkB,EAAiC,CAC/D,GAAM,CAAC,EAAQ,IAAA,EAAA,EAAA,cAA4B,GAAkB,GAAsB,CAAC,CA2BpF,OAzBA,EAAA,EAAA,eAAgB,CACZ,GAAI,EAAgB,CAChB,EAAU,EAAe,CACzB,OAGJ,GAAI,OAAO,SAAa,IAAa,OAErC,IAAM,MAAe,EAAU,GAAsB,CAAC,CACtD,GAAQ,CAER,IAAM,EAAW,IAAI,iBAAiB,EAAO,CAQ7C,OAPA,EAAS,QAAQ,SAAS,gBAAiB,CACvC,WAAY,GACZ,gBAAiB,CAAC,OAAO,CAC5B,CAAC,CAEF,OAAO,iBAAiB,iBAAkB,EAAO,KAEpC,CACT,EAAS,YAAY,CACrB,OAAO,oBAAoB,iBAAkB,EAAO,GAEzD,CAAC,EAAe,CAAC,CAEb"}
@@ -29,4 +29,4 @@ function r(r) {
29
29
  //#endregion
30
30
  export { r as t };
31
31
 
32
- //# sourceMappingURL=locale-CS1-IY_I.js.map
32
+ //# sourceMappingURL=locale-JX_gX03k.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"locale-CS1-IY_I.js","names":[],"sources":["../src/utils/locale.ts"],"sourcesContent":["import {useEffect, useState} from 'react'\n\nexport function resolveRuntimeLocale(): string {\n if (typeof document !== 'undefined') {\n const lang = document.documentElement.lang?.trim()\n if (lang) return lang\n }\n\n if (typeof navigator !== 'undefined') {\n return navigator.language || navigator.languages?.[0] || 'en'\n }\n\n return 'en'\n}\n\n// React to MI18nProvider lang updates without requiring direct provider access.\nexport function useDocumentLocale(explicitLocale?: string): string {\n const [locale, setLocale] = useState(() => explicitLocale || resolveRuntimeLocale())\n\n useEffect(() => {\n if (explicitLocale) {\n setLocale(explicitLocale)\n return\n }\n\n if (typeof document === 'undefined') return\n\n const update = () => setLocale(resolveRuntimeLocale())\n update()\n\n const observer = new MutationObserver(update)\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['lang'],\n })\n\n window.addEventListener('languagechange', update)\n\n return () => {\n observer.disconnect()\n window.removeEventListener('languagechange', update)\n }\n }, [explicitLocale])\n\n return locale\n}\n"],"mappings":";;AAEA,SAAgB,IAA+B;AAC3C,KAAI,OAAO,WAAa,KAAa;EACjC,IAAM,IAAO,SAAS,gBAAgB,MAAM,MAAM;AAClD,MAAI,EAAM,QAAO;;AAOrB,QAJI,OAAO,YAAc,QACd,UAAU,YAAY,UAAU,YAAY,OAGhD;;AAIX,SAAgB,EAAkB,GAAiC;CAC/D,IAAM,CAAC,GAAQ,KAAa,QAAe,KAAkB,GAAsB,CAAC;AA2BpF,QAzBA,QAAgB;AACZ,MAAI,GAAgB;AAChB,KAAU,EAAe;AACzB;;AAGJ,MAAI,OAAO,WAAa,IAAa;EAErC,IAAM,UAAe,EAAU,GAAsB,CAAC;AACtD,KAAQ;EAER,IAAM,IAAW,IAAI,iBAAiB,EAAO;AAQ7C,SAPA,EAAS,QAAQ,SAAS,iBAAiB;GACvC,YAAY;GACZ,iBAAiB,CAAC,OAAO;GAC5B,CAAC,EAEF,OAAO,iBAAiB,kBAAkB,EAAO,QAEpC;AAET,GADA,EAAS,YAAY,EACrB,OAAO,oBAAoB,kBAAkB,EAAO;;IAEzD,CAAC,EAAe,CAAC,EAEb"}
1
+ {"version":3,"file":"locale-JX_gX03k.js","names":[],"sources":["../src/utils/locale.ts"],"sourcesContent":["import {useEffect, useState} from 'react'\n\nexport function resolveRuntimeLocale(): string {\n if (typeof document !== 'undefined') {\n const lang = document.documentElement.lang?.trim()\n if (lang) return lang\n }\n\n if (typeof navigator !== 'undefined') {\n return navigator.language || navigator.languages?.[0] || 'en'\n }\n\n return 'en'\n}\n\n// React to MI18nProvider lang updates without requiring direct provider access.\nexport function useDocumentLocale(explicitLocale?: string): string {\n const [locale, setLocale] = useState(() => explicitLocale || resolveRuntimeLocale())\n\n useEffect(() => {\n if (explicitLocale) {\n setLocale(explicitLocale)\n return\n }\n\n if (typeof document === 'undefined') return\n\n const update = () => setLocale(resolveRuntimeLocale())\n update()\n\n const observer = new MutationObserver(update)\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['lang'],\n })\n\n window.addEventListener('languagechange', update)\n\n return () => {\n observer.disconnect()\n window.removeEventListener('languagechange', update)\n }\n }, [explicitLocale])\n\n return locale\n}\n"],"mappings":";;AAEA,SAAgB,IAA+B;AAC3C,KAAI,OAAO,WAAa,KAAa;EACjC,IAAM,IAAO,SAAS,gBAAgB,MAAM,MAAM;AAClD,MAAI,EAAM,QAAO;;AAOrB,QAJI,OAAO,YAAc,QACd,UAAU,YAAY,UAAU,YAAY,OAGhD;;AAIX,SAAgB,EAAkB,GAAiC;CAC/D,IAAM,CAAC,GAAQ,KAAa,QAAe,KAAkB,GAAsB,CAAC;AA2BpF,QAzBA,QAAgB;AACZ,MAAI,GAAgB;AAChB,KAAU,EAAe;AACzB;;AAGJ,MAAI,OAAO,WAAa,IAAa;EAErC,IAAM,UAAe,EAAU,GAAsB,CAAC;AACtD,KAAQ;EAER,IAAM,IAAW,IAAI,iBAAiB,EAAO;AAQ7C,SAPA,EAAS,QAAQ,SAAS,iBAAiB;GACvC,YAAY;GACZ,iBAAiB,CAAC,OAAO;GAC5B,CAAC,EAEF,OAAO,iBAAiB,kBAAkB,EAAO,QAEpC;AAET,GADA,EAAS,YAAY,EACrB,OAAO,oBAAoB,kBAAkB,EAAO;;IAEzD,CAAC,EAAe,CAAC,EAEb"}