@banzamel/mineralui 2.4.3 → 2.5.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 (545) hide show
  1. package/README.md +1 -1
  2. package/dist/MAvatar-CvQuiGvT.cjs +2 -0
  3. package/dist/MAvatar-CvQuiGvT.cjs.map +1 -0
  4. package/dist/MAvatar-EkOBrEtS.js +73 -0
  5. package/dist/MAvatar-EkOBrEtS.js.map +1 -0
  6. package/dist/MButton-BxEky3xQ.cjs +2 -0
  7. package/dist/MButton-BxEky3xQ.cjs.map +1 -0
  8. package/dist/MButton-KELyyBw1.js +123 -0
  9. package/dist/MButton-KELyyBw1.js.map +1 -0
  10. package/dist/{MButtonGroup-BEJxXZ8u.js → MButtonGroup-DDnn8Wfy.js} +3 -3
  11. package/dist/{MButtonGroup-BEJxXZ8u.js.map → MButtonGroup-DDnn8Wfy.js.map} +1 -1
  12. package/dist/{MButtonGroup-DO1Tq3Za.cjs → MButtonGroup-Dz8Fm-oA.cjs} +2 -2
  13. package/dist/{MButtonGroup-DO1Tq3Za.cjs.map → MButtonGroup-Dz8Fm-oA.cjs.map} +1 -1
  14. package/dist/{MCard-P8OoswWM.cjs → MCard-Bqm4BjK_.cjs} +2 -2
  15. package/dist/MCard-Bqm4BjK_.cjs.map +1 -0
  16. package/dist/{MCard-BqSkGAgf.js → MCard-CqZYGaS2.js} +4 -4
  17. package/dist/MCard-CqZYGaS2.js.map +1 -0
  18. package/dist/MCheckbox-CaWgyUn5.js +72 -0
  19. package/dist/MCheckbox-CaWgyUn5.js.map +1 -0
  20. package/dist/MCheckbox-DpKJpnFF.cjs +2 -0
  21. package/dist/MCheckbox-DpKJpnFF.cjs.map +1 -0
  22. package/dist/{MConflictIllustration-znC7ijmP.js → MConflictIllustration-dwZS44ye.js} +1517 -1515
  23. package/dist/MConflictIllustration-dwZS44ye.js.map +1 -0
  24. package/dist/MConflictIllustration-vfHs-jad.cjs +2 -0
  25. package/dist/MConflictIllustration-vfHs-jad.cjs.map +1 -0
  26. package/dist/MDetailList-C3othNs3.js +127 -0
  27. package/dist/MDetailList-C3othNs3.js.map +1 -0
  28. package/dist/MDetailList-DkDHLdJ8.cjs +2 -0
  29. package/dist/MDetailList-DkDHLdJ8.cjs.map +1 -0
  30. package/dist/MDropdownMenu-C4-r7UZM.cjs +2 -0
  31. package/dist/MDropdownMenu-C4-r7UZM.cjs.map +1 -0
  32. package/dist/MDropdownMenu-Dvg9UsHB.js +219 -0
  33. package/dist/MDropdownMenu-Dvg9UsHB.js.map +1 -0
  34. package/dist/MGrid-CQqT8nHi.js +271 -0
  35. package/dist/MGrid-CQqT8nHi.js.map +1 -0
  36. package/dist/MGrid-tBsqShLG.cjs +2 -0
  37. package/dist/MGrid-tBsqShLG.cjs.map +1 -0
  38. package/dist/MHeading-DQSQ8c7L.js +21 -0
  39. package/dist/MHeading-DQSQ8c7L.js.map +1 -0
  40. package/dist/MHeading-DiGYs1FJ.cjs +2 -0
  41. package/dist/MHeading-DiGYs1FJ.cjs.map +1 -0
  42. package/dist/MInput-BeEGufZG.cjs +2 -0
  43. package/dist/MInput-BeEGufZG.cjs.map +1 -0
  44. package/dist/MInput-QnQV9L8U.js +190 -0
  45. package/dist/MInput-QnQV9L8U.js.map +1 -0
  46. package/dist/MInputCVC-CCNRAqHw.cjs +2 -0
  47. package/dist/MInputCVC-CCNRAqHw.cjs.map +1 -0
  48. package/dist/MInputCVC-IXIYZwex.js +410 -0
  49. package/dist/MInputCVC-IXIYZwex.js.map +1 -0
  50. package/dist/MInputSearch-BSIc6m2P.cjs +2 -0
  51. package/dist/MInputSearch-BSIc6m2P.cjs.map +1 -0
  52. package/dist/MInputSearch-CNuTAbYs.js +44 -0
  53. package/dist/MInputSearch-CNuTAbYs.js.map +1 -0
  54. package/dist/{MKbd-BR1GX5oK.cjs → MKbd-CnW3NUIu.cjs} +2 -2
  55. package/dist/{MKbd-BR1GX5oK.cjs.map → MKbd-CnW3NUIu.cjs.map} +1 -1
  56. package/dist/{MKbd-COb7oh_k.js → MKbd-DjfGyajR.js} +2 -2
  57. package/dist/{MKbd-COb7oh_k.js.map → MKbd-DjfGyajR.js.map} +1 -1
  58. package/dist/MLink-C6uwA6db.cjs +2 -0
  59. package/dist/MLink-C6uwA6db.cjs.map +1 -0
  60. package/dist/MLink-ixg0xFFI.js +31 -0
  61. package/dist/MLink-ixg0xFFI.js.map +1 -0
  62. package/dist/MLoader-CViA3zBo.js +44 -0
  63. package/dist/MLoader-CViA3zBo.js.map +1 -0
  64. package/dist/MLoader-DUOoOoNE.cjs +2 -0
  65. package/dist/MLoader-DUOoOoNE.cjs.map +1 -0
  66. package/dist/MPagination-BTGenxWW.js +122 -0
  67. package/dist/MPagination-BTGenxWW.js.map +1 -0
  68. package/dist/MPagination-DitmdtCc.cjs +2 -0
  69. package/dist/MPagination-DitmdtCc.cjs.map +1 -0
  70. package/dist/MPopover-CBDbUOW6.js +183 -0
  71. package/dist/MPopover-CBDbUOW6.js.map +1 -0
  72. package/dist/MPopover-ZeoU9hb5.cjs +2 -0
  73. package/dist/MPopover-ZeoU9hb5.cjs.map +1 -0
  74. package/dist/{MSimpleGrid-Ui8cI0ho.js → MSimpleGrid-C_QvLmck.js} +3 -3
  75. package/dist/MSimpleGrid-C_QvLmck.js.map +1 -0
  76. package/dist/MSimpleGrid-wgvjnxwM.cjs +2 -0
  77. package/dist/MSimpleGrid-wgvjnxwM.cjs.map +1 -0
  78. package/dist/{MSkeleton-Dhu-loDO.js → MSkeleton-BpcpBBJq.js} +12 -10
  79. package/dist/MSkeleton-BpcpBBJq.js.map +1 -0
  80. package/dist/MSkeleton-DuAN8Vcv.cjs +2 -0
  81. package/dist/MSkeleton-DuAN8Vcv.cjs.map +1 -0
  82. package/dist/MSlider-CLASUc2H.js +134 -0
  83. package/dist/MSlider-CLASUc2H.js.map +1 -0
  84. package/dist/MSlider-hONQBulE.cjs +2 -0
  85. package/dist/MSlider-hONQBulE.cjs.map +1 -0
  86. package/dist/MStack-BwAFeGGg.js +39 -0
  87. package/dist/MStack-BwAFeGGg.js.map +1 -0
  88. package/dist/MStack-CGII4A-q.cjs +2 -0
  89. package/dist/MStack-CGII4A-q.cjs.map +1 -0
  90. package/dist/MSubText-BeZk-fhz.js +17 -0
  91. package/dist/MSubText-BeZk-fhz.js.map +1 -0
  92. package/dist/MSubText-Dl1PfToZ.cjs +2 -0
  93. package/dist/MSubText-Dl1PfToZ.cjs.map +1 -0
  94. package/dist/MSurface-B_QnRLr5.js +74 -0
  95. package/dist/MSurface-B_QnRLr5.js.map +1 -0
  96. package/dist/MSurface-BrFo-JMJ.cjs +2 -0
  97. package/dist/MSurface-BrFo-JMJ.cjs.map +1 -0
  98. package/dist/MTag-BZrKN_DS.js +41 -0
  99. package/dist/MTag-BZrKN_DS.js.map +1 -0
  100. package/dist/MTag-DCE1vRJM.cjs +2 -0
  101. package/dist/MTag-DCE1vRJM.cjs.map +1 -0
  102. package/dist/MText-BUWQPoBM.js +45 -0
  103. package/dist/MText-BUWQPoBM.js.map +1 -0
  104. package/dist/MText-nsvLFsSv.cjs +2 -0
  105. package/dist/MText-nsvLFsSv.cjs.map +1 -0
  106. package/dist/MTooltip-BRSPJ3RY.js +100 -0
  107. package/dist/MTooltip-BRSPJ3RY.js.map +1 -0
  108. package/dist/MTooltip-Cj2Fxmzc.cjs +2 -0
  109. package/dist/MTooltip-Cj2Fxmzc.cjs.map +1 -0
  110. package/dist/MTreeView-BWCTlsU-.cjs +2 -0
  111. package/dist/MTreeView-BWCTlsU-.cjs.map +1 -0
  112. package/dist/MTreeView-CWcMwE-Z.js +554 -0
  113. package/dist/MTreeView-CWcMwE-Z.js.map +1 -0
  114. package/dist/calendar-2yhnCkGW.cjs +2 -0
  115. package/dist/calendar-2yhnCkGW.cjs.map +1 -0
  116. package/dist/calendar-DcNYDTVb.js +195 -0
  117. package/dist/calendar-DcNYDTVb.js.map +1 -0
  118. package/dist/calendar.cjs +1 -1
  119. package/dist/calendar.js +1 -1
  120. package/dist/{calendarDates-M_Dawj0j.js → calendarDates-Bpw_G_QR.js} +30 -19
  121. package/dist/calendarDates-Bpw_G_QR.js.map +1 -0
  122. package/dist/calendarDates-Cg0nm69Y.cjs +2 -0
  123. package/dist/calendarDates-Cg0nm69Y.cjs.map +1 -0
  124. package/dist/cards-Bp886TRb.cjs +2 -0
  125. package/dist/cards-Bp886TRb.cjs.map +1 -0
  126. package/dist/cards-BvER6Gx0.js +1277 -0
  127. package/dist/cards-BvER6Gx0.js.map +1 -0
  128. package/dist/cards.cjs +1 -1
  129. package/dist/cards.js +2 -2
  130. package/dist/{cn-YER3QsV1.js → cn-CUSXNnjF.js} +1 -1
  131. package/dist/{cn-YER3QsV1.js.map → cn-CUSXNnjF.js.map} +1 -1
  132. package/dist/{cn-CU5TNITO.cjs → cn-DYFxgzi2.cjs} +1 -1
  133. package/dist/{cn-CU5TNITO.cjs.map → cn-DYFxgzi2.cjs.map} +1 -1
  134. package/dist/components/cards/MCardDaySchedule/MCardDaySchedule.d.ts +1 -1
  135. package/dist/components/cards/MCardDocumentTree/MCardDocumentTree.d.ts +1 -1
  136. package/dist/components/cards/MCardGrid/MCardGrid.d.ts +1 -1
  137. package/dist/components/cards/MCardPayment/MCardPayment.d.ts +1 -1
  138. package/dist/components/cards/MCardPayment/MCardPayment.types.d.ts +4 -0
  139. package/dist/components/cards/MCardPaymentMethod/MCardPaymentMethod.d.ts +1 -1
  140. package/dist/components/cards/MStatCard/MStatCard.d.ts +1 -1
  141. package/dist/components/controls/MCheckbox/MCheckbox.types.d.ts +6 -0
  142. package/dist/components/controls/MLoadMore/MLoadMore.d.ts +1 -1
  143. package/dist/components/controls/MSlider/MSlider.d.ts +1 -1
  144. package/dist/components/controls/MSlider/MSlider.types.d.ts +5 -0
  145. package/dist/components/data/MTreeView/MTreeView.d.ts +1 -1
  146. package/dist/components/data/MTreeView/MTreeView.types.d.ts +6 -0
  147. package/dist/components/data/MWeekGrid/MWeekGrid.d.ts +1 -1
  148. package/dist/components/data/MWeekGrid/MWeekGrid.types.d.ts +9 -3
  149. package/dist/components/display/MCodeBlock/MCodeBlock.d.ts +1 -1
  150. package/dist/components/dropdowns/MAutocomplete/MAutocomplete.d.ts +1 -1
  151. package/dist/components/dropdowns/MAutocomplete/MAutocomplete.types.d.ts +8 -2
  152. package/dist/components/dropdowns/MSelect/MSelect.d.ts +1 -1
  153. package/dist/components/dropdowns/shared/TimeColumnListbox.d.ts +20 -0
  154. package/dist/components/feedback/MAlert/MAlert.d.ts +1 -1
  155. package/dist/components/feedback/MBadge/MBadge.d.ts +1 -1
  156. package/dist/components/feedback/MBanner/MBanner.d.ts +1 -1
  157. package/dist/components/feedback/MLoader/MLoader.d.ts +1 -1
  158. package/dist/components/feedback/MSpinner/MSpinner.d.ts +1 -1
  159. package/dist/components/feedback/MTag/MTag.d.ts +1 -1
  160. package/dist/components/inputs/MInput/MInput.types.d.ts +6 -1
  161. package/dist/components/inputs/MInput/useFormatCaret.d.ts +8 -0
  162. package/dist/components/layout/MCanvasGrid/MCanvasGrid.types.d.ts +5 -0
  163. package/dist/components/layout/MContainer/MContainer.d.ts +1 -1
  164. package/dist/components/layout/MDivider/MDivider.d.ts +1 -1
  165. package/dist/components/layout/MFooter/MFooter.d.ts +1 -1
  166. package/dist/components/layout/MHeader/MHeader.d.ts +1 -1
  167. package/dist/components/layout/MInline/MInline.d.ts +1 -1
  168. package/dist/components/layout/MNavbar/MNavbar.d.ts +1 -1
  169. package/dist/components/layout/MNavbar/MNavbar.types.d.ts +2 -0
  170. package/dist/components/layout/MSection/MSection.d.ts +1 -1
  171. package/dist/components/layout/MStack/MStack.d.ts +1 -1
  172. package/dist/components/layout/MStickyPanel/MStickyPanel.types.d.ts +4 -0
  173. package/dist/components/layout/MSurface/MSurface.d.ts +1 -1
  174. package/dist/components/media/MAvatar/MAvatar.d.ts +1 -1
  175. package/dist/components/media/MAvatar/MAvatar.types.d.ts +10 -0
  176. package/dist/components/media/MCarousel/MCarousel.d.ts +1 -1
  177. package/dist/components/media/MImage/MImage.d.ts +1 -1
  178. package/dist/components/media/carouselA11y.d.ts +9 -0
  179. package/dist/components/overlays/MCommandPalette/MCommandPalette.d.ts +1 -1
  180. package/dist/components/overlays/MDropdownMenu/MDropdownMenu.d.ts +4 -2
  181. package/dist/components/overlays/MDropdownMenu/MDropdownMenu.types.d.ts +3 -1
  182. package/dist/components/overlays/MPopconfirm/MPopconfirm.d.ts +1 -1
  183. package/dist/components/overlays/scrollLock.d.ts +14 -0
  184. package/dist/components/primitives/MPopover/MPopover.d.ts +1 -1
  185. package/dist/components/primitives/MPopover/MPopover.types.d.ts +32 -1
  186. package/dist/components/primitives/MPopover/popoverStack.d.ts +6 -0
  187. package/dist/components/typography/MHeading/MHeading.d.ts +2 -3
  188. package/dist/components/typography/MSubText/MSubText.d.ts +1 -1
  189. package/dist/components/typography/MText/MText.d.ts +1 -1
  190. package/dist/controls-B4Dxaab4.js +491 -0
  191. package/dist/controls-B4Dxaab4.js.map +1 -0
  192. package/dist/controls-CyXEIOXD.cjs +2 -0
  193. package/dist/controls-CyXEIOXD.cjs.map +1 -0
  194. package/dist/controls.cjs +1 -1
  195. package/dist/controls.js +5 -5
  196. package/dist/creditCards-Bo2mrc53.cjs +2 -0
  197. package/dist/creditCards-Bo2mrc53.cjs.map +1 -0
  198. package/dist/{creditCards-D_iWmtG6.js → creditCards-DmDOyvcw.js} +20 -31
  199. package/dist/creditCards-DmDOyvcw.js.map +1 -0
  200. package/dist/data-BM3KG8oN.cjs +2 -0
  201. package/dist/data-BM3KG8oN.cjs.map +1 -0
  202. package/dist/data-qnR8OBmj.js +808 -0
  203. package/dist/data-qnR8OBmj.js.map +1 -0
  204. package/dist/data.cjs +1 -1
  205. package/dist/data.js +2 -2
  206. package/dist/{dateUtils-CUY6CRCf.js → dateUtils-B-ToNZq_.js} +5 -6
  207. package/dist/dateUtils-B-ToNZq_.js.map +1 -0
  208. package/dist/dateUtils-z2L7ZaxA.cjs +2 -0
  209. package/dist/dateUtils-z2L7ZaxA.cjs.map +1 -0
  210. package/dist/display-BLMOBofj.cjs +3 -0
  211. package/dist/display-BLMOBofj.cjs.map +1 -0
  212. package/dist/display-Dlb79lkA.js +968 -0
  213. package/dist/display-Dlb79lkA.js.map +1 -0
  214. package/dist/display.cjs +1 -1
  215. package/dist/display.js +2 -2
  216. package/dist/dropdowns-2_7VMEDo.js +2009 -0
  217. package/dist/dropdowns-2_7VMEDo.js.map +1 -0
  218. package/dist/dropdowns-DN7j8J-V.cjs +2 -0
  219. package/dist/dropdowns-DN7j8J-V.cjs.map +1 -0
  220. package/dist/dropdowns.cjs +1 -1
  221. package/dist/dropdowns.js +1 -1
  222. package/dist/feedback-CECayytY.js +335 -0
  223. package/dist/feedback-CECayytY.js.map +1 -0
  224. package/dist/feedback-paV8Ls-h.cjs +2 -0
  225. package/dist/feedback-paV8Ls-h.cjs.map +1 -0
  226. package/dist/feedback.cjs +1 -1
  227. package/dist/feedback.js +5 -5
  228. package/dist/form-Br56h5EF.cjs +2 -0
  229. package/dist/form-Br56h5EF.cjs.map +1 -0
  230. package/dist/form-CJmMZgsH.js +165 -0
  231. package/dist/form-CJmMZgsH.js.map +1 -0
  232. package/dist/form.cjs +1 -1
  233. package/dist/form.js +1 -1
  234. package/dist/{formatters-CNjg_h7-.cjs → formatters-CauWlsnM.cjs} +1 -1
  235. package/dist/{formatters-CNjg_h7-.cjs.map → formatters-CauWlsnM.cjs.map} +1 -1
  236. package/dist/{formatters-T0vvjMtB.js → formatters-Doqdu_w1.js} +1 -1
  237. package/dist/{formatters-T0vvjMtB.js.map → formatters-Doqdu_w1.js.map} +1 -1
  238. package/dist/frameworkTexts-CaqdiKHW.cjs +2 -0
  239. package/dist/frameworkTexts-CaqdiKHW.cjs.map +1 -0
  240. package/dist/frameworkTexts-o43FqY1A.js +505 -0
  241. package/dist/frameworkTexts-o43FqY1A.js.map +1 -0
  242. package/dist/i18n/MI18nProvider.d.ts +6 -1
  243. package/dist/i18n/frameworkTexts.d.ts +511 -0
  244. package/dist/i18n/index.d.ts +1 -0
  245. package/dist/i18n.cjs +1 -1
  246. package/dist/i18n.js +2 -2
  247. package/dist/icons-Bp8bB9TP.cjs +2 -0
  248. package/dist/icons-Bp8bB9TP.cjs.map +1 -0
  249. package/dist/{icons-CBMl-kOM.js → icons-IqEBmGh3.js} +1223 -1220
  250. package/dist/icons-IqEBmGh3.js.map +1 -0
  251. package/dist/icons.cjs +1 -1
  252. package/dist/icons.js +1 -1
  253. package/dist/illustrations.cjs +1 -1
  254. package/dist/illustrations.js +1 -1
  255. package/dist/index.cjs +1 -1
  256. package/dist/index.d.ts +4 -2
  257. package/dist/index.js +56 -56
  258. package/dist/inputs-C0BJzlA-.js +1923 -0
  259. package/dist/inputs-C0BJzlA-.js.map +1 -0
  260. package/dist/inputs-CvNBBLFA.cjs +2 -0
  261. package/dist/inputs-CvNBBLFA.cjs.map +1 -0
  262. package/dist/inputs.cjs +1 -1
  263. package/dist/inputs.js +4 -4
  264. package/dist/layout-BSFqGXLZ.js +1101 -0
  265. package/dist/layout-BSFqGXLZ.js.map +1 -0
  266. package/dist/layout-MKqvUkPv.cjs +2 -0
  267. package/dist/layout-MKqvUkPv.cjs.map +1 -0
  268. package/dist/layout.cjs +1 -1
  269. package/dist/layout.js +6 -6
  270. package/dist/{layoutProps-Ck4VtGm9.cjs → layoutProps-B8y2XwHy.cjs} +1 -1
  271. package/dist/{layoutProps-Ck4VtGm9.cjs.map → layoutProps-B8y2XwHy.cjs.map} +1 -1
  272. package/dist/{layoutProps-Cl6d1KmH.js → layoutProps-CE5-ghKw.js} +1 -1
  273. package/dist/{layoutProps-Cl6d1KmH.js.map → layoutProps-CE5-ghKw.js.map} +1 -1
  274. package/dist/{licensing-f5KYVz7D.js → licensing-BKmoAdfr.js} +5 -4
  275. package/dist/licensing-BKmoAdfr.js.map +1 -0
  276. package/dist/licensing-DVgjkw-s.cjs +2 -0
  277. package/dist/licensing-DVgjkw-s.cjs.map +1 -0
  278. package/dist/media-fiasAbBv.js +485 -0
  279. package/dist/media-fiasAbBv.js.map +1 -0
  280. package/dist/media-tr1s386v.cjs +2 -0
  281. package/dist/media-tr1s386v.cjs.map +1 -0
  282. package/dist/media.cjs +1 -1
  283. package/dist/media.js +2 -2
  284. package/dist/overlays-Df-NpmkW.cjs +2 -0
  285. package/dist/overlays-Df-NpmkW.cjs.map +1 -0
  286. package/dist/overlays-W0WW3fn7.js +607 -0
  287. package/dist/overlays-W0WW3fn7.js.map +1 -0
  288. package/dist/overlays.cjs +1 -1
  289. package/dist/overlays.js +3 -3
  290. package/dist/primitives.cjs +1 -1
  291. package/dist/primitives.js +2 -2
  292. package/dist/radioGroupKeys-Bm-Qeh8G.js +28 -0
  293. package/dist/radioGroupKeys-Bm-Qeh8G.js.map +1 -0
  294. package/dist/radioGroupKeys-COL8uXbH.cjs +2 -0
  295. package/dist/radioGroupKeys-COL8uXbH.cjs.map +1 -0
  296. package/dist/{relativeTime-Cr-NVzij.js → relativeTime-BqCuaBqb.js} +1 -1
  297. package/dist/{relativeTime-Cr-NVzij.js.map → relativeTime-BqCuaBqb.js.map} +1 -1
  298. package/dist/{relativeTime-DgYBUaVm.cjs → relativeTime-DUbW4O44.cjs} +1 -1
  299. package/dist/{relativeTime-DgYBUaVm.cjs.map → relativeTime-DUbW4O44.cjs.map} +1 -1
  300. package/dist/scrollLock-C9P9o6wH.cjs +2 -0
  301. package/dist/scrollLock-C9P9o6wH.cjs.map +1 -0
  302. package/dist/scrollLock-D27VmgPV.js +14 -0
  303. package/dist/scrollLock-D27VmgPV.js.map +1 -0
  304. package/dist/style-runtime.cjs +1 -1
  305. package/dist/style-runtime.js +1 -1
  306. package/dist/styles.css +1 -1
  307. package/dist/theme/MThemeProvider.d.ts +18 -1
  308. package/dist/theme/index.d.ts +2 -2
  309. package/dist/{theme-DAOU1aPs.js → theme-B_juOenJ.js} +71 -61
  310. package/dist/theme-B_juOenJ.js.map +1 -0
  311. package/dist/theme-ByPZH0dh.cjs +2 -0
  312. package/dist/theme-ByPZH0dh.cjs.map +1 -0
  313. package/dist/theme.cjs +1 -1
  314. package/dist/theme.js +2 -2
  315. package/dist/{typography-C806GYT4.js → typography-DNcB8dOy.js} +3 -3
  316. package/dist/{typography-C806GYT4.js.map → typography-DNcB8dOy.js.map} +1 -1
  317. package/dist/{typography-4v01oNWx.cjs → typography-I7aeG8pH.cjs} +2 -2
  318. package/dist/{typography-4v01oNWx.cjs.map → typography-I7aeG8pH.cjs.map} +1 -1
  319. package/dist/typography.cjs +1 -1
  320. package/dist/typography.js +6 -6
  321. package/dist/useGhostText-CKsb8Ufa.js +240 -0
  322. package/dist/useGhostText-CKsb8Ufa.js.map +1 -0
  323. package/dist/useGhostText-DO-tfxS0.cjs +2 -0
  324. package/dist/useGhostText-DO-tfxS0.cjs.map +1 -0
  325. package/dist/useModalLayer-CpOPSDbf.js +128 -0
  326. package/dist/useModalLayer-CpOPSDbf.js.map +1 -0
  327. package/dist/useModalLayer-Cyt93Prs.cjs +2 -0
  328. package/dist/useModalLayer-Cyt93Prs.cjs.map +1 -0
  329. package/dist/utils/calendarDates.d.ts +5 -0
  330. package/dist/utils/radioGroupKeys.d.ts +9 -0
  331. package/dist/utils/useDateGridNav.d.ts +39 -0
  332. package/dist/utils/useGhostText.d.ts +2 -1
  333. package/dist/utils/useKeyboardNav.d.ts +51 -5
  334. package/dist/utils/useModalLayer.d.ts +4 -0
  335. package/dist/utils/useRovingToolbar.d.ts +26 -0
  336. package/dist/utils/validationMessages.d.ts +15 -0
  337. package/dist/utils.cjs +1 -1
  338. package/dist/utils.entry.d.ts +3 -1
  339. package/dist/utils.js +11 -11
  340. package/dist/validationMessages-BFimXxlT.js +23 -0
  341. package/dist/validationMessages-BFimXxlT.js.map +1 -0
  342. package/dist/validationMessages-iHu7apWr.cjs +2 -0
  343. package/dist/validationMessages-iHu7apWr.cjs.map +1 -0
  344. package/dist/validators-SZmLxnir.cjs +2 -0
  345. package/dist/validators-SZmLxnir.cjs.map +1 -0
  346. package/dist/{validators-DVYOtFnw.js → validators-ULebNme2.js} +107 -106
  347. package/dist/validators-ULebNme2.js.map +1 -0
  348. package/package.json +1 -1
  349. package/dist/MAvatar-DHNB3829.cjs +0 -2
  350. package/dist/MAvatar-DHNB3829.cjs.map +0 -1
  351. package/dist/MAvatar-GeRL-CNO.js +0 -63
  352. package/dist/MAvatar-GeRL-CNO.js.map +0 -1
  353. package/dist/MButton-CEwo8lUB.js +0 -115
  354. package/dist/MButton-CEwo8lUB.js.map +0 -1
  355. package/dist/MButton-CnAr77Za.cjs +0 -2
  356. package/dist/MButton-CnAr77Za.cjs.map +0 -1
  357. package/dist/MCard-BqSkGAgf.js.map +0 -1
  358. package/dist/MCard-P8OoswWM.cjs.map +0 -1
  359. package/dist/MCheckbox-BxFBADcE.js +0 -59
  360. package/dist/MCheckbox-BxFBADcE.js.map +0 -1
  361. package/dist/MCheckbox-DozwF2ai.cjs +0 -2
  362. package/dist/MCheckbox-DozwF2ai.cjs.map +0 -1
  363. package/dist/MConflictIllustration-2QL-BHYv.cjs +0 -2
  364. package/dist/MConflictIllustration-2QL-BHYv.cjs.map +0 -1
  365. package/dist/MConflictIllustration-znC7ijmP.js.map +0 -1
  366. package/dist/MDetailList-CThQvoyf.cjs +0 -2
  367. package/dist/MDetailList-CThQvoyf.cjs.map +0 -1
  368. package/dist/MDetailList-Cx9H81xT.js +0 -98
  369. package/dist/MDetailList-Cx9H81xT.js.map +0 -1
  370. package/dist/MDropdownMenu-DnKcCyW6.cjs +0 -2
  371. package/dist/MDropdownMenu-DnKcCyW6.cjs.map +0 -1
  372. package/dist/MDropdownMenu-DxbKN7Ui.js +0 -172
  373. package/dist/MDropdownMenu-DxbKN7Ui.js.map +0 -1
  374. package/dist/MGrid-BkRSGN2t.cjs +0 -2
  375. package/dist/MGrid-BkRSGN2t.cjs.map +0 -1
  376. package/dist/MGrid-CIz-2i6X.js +0 -265
  377. package/dist/MGrid-CIz-2i6X.js.map +0 -1
  378. package/dist/MHeading-AYQ8_GFP.cjs +0 -2
  379. package/dist/MHeading-AYQ8_GFP.cjs.map +0 -1
  380. package/dist/MHeading-DcGxUMwC.js +0 -21
  381. package/dist/MHeading-DcGxUMwC.js.map +0 -1
  382. package/dist/MI18nProvider-CqAwaswx.cjs +0 -2
  383. package/dist/MI18nProvider-CqAwaswx.cjs.map +0 -1
  384. package/dist/MI18nProvider-VH14CI8u.js +0 -72
  385. package/dist/MI18nProvider-VH14CI8u.js.map +0 -1
  386. package/dist/MInput-BYj2BdUe.cjs +0 -2
  387. package/dist/MInput-BYj2BdUe.cjs.map +0 -1
  388. package/dist/MInput-nodE-CZF.js +0 -188
  389. package/dist/MInput-nodE-CZF.js.map +0 -1
  390. package/dist/MInputCVC-9XWryaTz.cjs +0 -2
  391. package/dist/MInputCVC-9XWryaTz.cjs.map +0 -1
  392. package/dist/MInputCVC-CrDTaUXm.js +0 -321
  393. package/dist/MInputCVC-CrDTaUXm.js.map +0 -1
  394. package/dist/MInputSearch-BMgCHjFk.js +0 -43
  395. package/dist/MInputSearch-BMgCHjFk.js.map +0 -1
  396. package/dist/MInputSearch-BiVI1jNc.cjs +0 -2
  397. package/dist/MInputSearch-BiVI1jNc.cjs.map +0 -1
  398. package/dist/MLink-CAl6N6_z.js +0 -31
  399. package/dist/MLink-CAl6N6_z.js.map +0 -1
  400. package/dist/MLink-Dk_ReE6i.cjs +0 -2
  401. package/dist/MLink-Dk_ReE6i.cjs.map +0 -1
  402. package/dist/MLoader-CYp0OJU_.js +0 -41
  403. package/dist/MLoader-CYp0OJU_.js.map +0 -1
  404. package/dist/MLoader-DvmFle31.cjs +0 -2
  405. package/dist/MLoader-DvmFle31.cjs.map +0 -1
  406. package/dist/MPagination-E7IixIeo.js +0 -113
  407. package/dist/MPagination-E7IixIeo.js.map +0 -1
  408. package/dist/MPagination-reDU9xTW.cjs +0 -2
  409. package/dist/MPagination-reDU9xTW.cjs.map +0 -1
  410. package/dist/MPopover-8gYD3Ogq.js +0 -118
  411. package/dist/MPopover-8gYD3Ogq.js.map +0 -1
  412. package/dist/MPopover-B3npyAkL.cjs +0 -2
  413. package/dist/MPopover-B3npyAkL.cjs.map +0 -1
  414. package/dist/MPortal-Ba2Sxset.js +0 -10
  415. package/dist/MPortal-Ba2Sxset.js.map +0 -1
  416. package/dist/MPortal-CuBXhhl_.cjs +0 -2
  417. package/dist/MPortal-CuBXhhl_.cjs.map +0 -1
  418. package/dist/MSimpleGrid-BchGYPMi.cjs +0 -2
  419. package/dist/MSimpleGrid-BchGYPMi.cjs.map +0 -1
  420. package/dist/MSimpleGrid-Ui8cI0ho.js.map +0 -1
  421. package/dist/MSkeleton-DPa_G_2X.cjs +0 -2
  422. package/dist/MSkeleton-DPa_G_2X.cjs.map +0 -1
  423. package/dist/MSkeleton-Dhu-loDO.js.map +0 -1
  424. package/dist/MSlider-BRjhyBSc.js +0 -75
  425. package/dist/MSlider-BRjhyBSc.js.map +0 -1
  426. package/dist/MSlider-w5214a-W.cjs +0 -2
  427. package/dist/MSlider-w5214a-W.cjs.map +0 -1
  428. package/dist/MStack-Dt-rWvg3.js +0 -39
  429. package/dist/MStack-Dt-rWvg3.js.map +0 -1
  430. package/dist/MStack-nc6Y_9K3.cjs +0 -2
  431. package/dist/MStack-nc6Y_9K3.cjs.map +0 -1
  432. package/dist/MSubText-B0tXiuAp.js +0 -17
  433. package/dist/MSubText-B0tXiuAp.js.map +0 -1
  434. package/dist/MSubText-C6v6Exa2.cjs +0 -2
  435. package/dist/MSubText-C6v6Exa2.cjs.map +0 -1
  436. package/dist/MSurface-BjE-mL1L.cjs +0 -2
  437. package/dist/MSurface-BjE-mL1L.cjs.map +0 -1
  438. package/dist/MSurface-CpDJCdb5.js +0 -74
  439. package/dist/MSurface-CpDJCdb5.js.map +0 -1
  440. package/dist/MTag-BgOxiahL.cjs +0 -2
  441. package/dist/MTag-BgOxiahL.cjs.map +0 -1
  442. package/dist/MTag-cw3cIGHX.js +0 -41
  443. package/dist/MTag-cw3cIGHX.js.map +0 -1
  444. package/dist/MText-BDI4mdw8.cjs +0 -2
  445. package/dist/MText-BDI4mdw8.cjs.map +0 -1
  446. package/dist/MText-DhbAjtUE.js +0 -45
  447. package/dist/MText-DhbAjtUE.js.map +0 -1
  448. package/dist/MTooltip-BAgHlv5I.cjs +0 -2
  449. package/dist/MTooltip-BAgHlv5I.cjs.map +0 -1
  450. package/dist/MTooltip-CJxvlkOX.js +0 -92
  451. package/dist/MTooltip-CJxvlkOX.js.map +0 -1
  452. package/dist/MTreeView-DsBnYQMT.js +0 -315
  453. package/dist/MTreeView-DsBnYQMT.js.map +0 -1
  454. package/dist/MTreeView-LiJ5o-zy.cjs +0 -2
  455. package/dist/MTreeView-LiJ5o-zy.cjs.map +0 -1
  456. package/dist/calendar-Bq6NMNnS.js +0 -193
  457. package/dist/calendar-Bq6NMNnS.js.map +0 -1
  458. package/dist/calendar-C57BH8Nd.cjs +0 -2
  459. package/dist/calendar-C57BH8Nd.cjs.map +0 -1
  460. package/dist/calendarDates-M_Dawj0j.js.map +0 -1
  461. package/dist/calendarDates-qm047RW2.cjs +0 -2
  462. package/dist/calendarDates-qm047RW2.cjs.map +0 -1
  463. package/dist/cards-D4xJVd4q.js +0 -1227
  464. package/dist/cards-D4xJVd4q.js.map +0 -1
  465. package/dist/cards-Du6dbZSQ.cjs +0 -2
  466. package/dist/cards-Du6dbZSQ.cjs.map +0 -1
  467. package/dist/controls-BKoc_yel.js +0 -475
  468. package/dist/controls-BKoc_yel.js.map +0 -1
  469. package/dist/controls-Ck-PMt__.cjs +0 -2
  470. package/dist/controls-Ck-PMt__.cjs.map +0 -1
  471. package/dist/creditCards-D_HwRUBz.cjs +0 -2
  472. package/dist/creditCards-D_HwRUBz.cjs.map +0 -1
  473. package/dist/creditCards-D_iWmtG6.js.map +0 -1
  474. package/dist/data-CdQximqm.js +0 -689
  475. package/dist/data-CdQximqm.js.map +0 -1
  476. package/dist/data-PS4ygCyj.cjs +0 -2
  477. package/dist/data-PS4ygCyj.cjs.map +0 -1
  478. package/dist/dateUtils-CUY6CRCf.js.map +0 -1
  479. package/dist/dateUtils-Dq1vaA-D.cjs +0 -2
  480. package/dist/dateUtils-Dq1vaA-D.cjs.map +0 -1
  481. package/dist/display-YC1fVpXA.js +0 -782
  482. package/dist/display-YC1fVpXA.js.map +0 -1
  483. package/dist/display-slIo1bQI.cjs +0 -3
  484. package/dist/display-slIo1bQI.cjs.map +0 -1
  485. package/dist/dropdowns-DFbUoZ8Q.cjs +0 -2
  486. package/dist/dropdowns-DFbUoZ8Q.cjs.map +0 -1
  487. package/dist/dropdowns-nW3MY5XG.js +0 -1715
  488. package/dist/dropdowns-nW3MY5XG.js.map +0 -1
  489. package/dist/feedback-6MNb2Xyk.cjs +0 -2
  490. package/dist/feedback-6MNb2Xyk.cjs.map +0 -1
  491. package/dist/feedback-CPwJaQHY.js +0 -259
  492. package/dist/feedback-CPwJaQHY.js.map +0 -1
  493. package/dist/form-CMsZo6Dm.cjs +0 -2
  494. package/dist/form-CMsZo6Dm.cjs.map +0 -1
  495. package/dist/form-WU6DcQGD.js +0 -164
  496. package/dist/form-WU6DcQGD.js.map +0 -1
  497. package/dist/frameworkTexts-BSXUtXOp.cjs +0 -2
  498. package/dist/frameworkTexts-BSXUtXOp.cjs.map +0 -1
  499. package/dist/frameworkTexts-DP5RUl19.js +0 -131
  500. package/dist/frameworkTexts-DP5RUl19.js.map +0 -1
  501. package/dist/icons-CBMl-kOM.js.map +0 -1
  502. package/dist/icons-D3n9-919.cjs +0 -2
  503. package/dist/icons-D3n9-919.cjs.map +0 -1
  504. package/dist/inputs-B7rGMLMr.js +0 -1753
  505. package/dist/inputs-B7rGMLMr.js.map +0 -1
  506. package/dist/inputs-BiN62hgH.cjs +0 -2
  507. package/dist/inputs-BiN62hgH.cjs.map +0 -1
  508. package/dist/layout-BMggJ_qO.cjs +0 -2
  509. package/dist/layout-BMggJ_qO.cjs.map +0 -1
  510. package/dist/layout-DBYHyCTr.js +0 -883
  511. package/dist/layout-DBYHyCTr.js.map +0 -1
  512. package/dist/licensing-Be3g-PJt.cjs +0 -2
  513. package/dist/licensing-Be3g-PJt.cjs.map +0 -1
  514. package/dist/licensing-f5KYVz7D.js.map +0 -1
  515. package/dist/media-BPzMgzqE.js +0 -405
  516. package/dist/media-BPzMgzqE.js.map +0 -1
  517. package/dist/media-D63hxCAJ.cjs +0 -2
  518. package/dist/media-D63hxCAJ.cjs.map +0 -1
  519. package/dist/overlays-CCeYD6hT.js +0 -555
  520. package/dist/overlays-CCeYD6hT.js.map +0 -1
  521. package/dist/overlays-CsRN5OG8.cjs +0 -2
  522. package/dist/overlays-CsRN5OG8.cjs.map +0 -1
  523. package/dist/popoverStack--0r2oJCD.js +0 -44
  524. package/dist/popoverStack--0r2oJCD.js.map +0 -1
  525. package/dist/popoverStack-BmMk-VZJ.cjs +0 -2
  526. package/dist/popoverStack-BmMk-VZJ.cjs.map +0 -1
  527. package/dist/theme-CJuqObWL.cjs +0 -2
  528. package/dist/theme-CJuqObWL.cjs.map +0 -1
  529. package/dist/theme-DAOU1aPs.js.map +0 -1
  530. package/dist/useGhostText-DG0bzcao.js +0 -68
  531. package/dist/useGhostText-DG0bzcao.js.map +0 -1
  532. package/dist/useGhostText-mibV4s1-.cjs +0 -2
  533. package/dist/useGhostText-mibV4s1-.cjs.map +0 -1
  534. package/dist/useKeyboardNav-CCUoRMgm.cjs +0 -2
  535. package/dist/useKeyboardNav-CCUoRMgm.cjs.map +0 -1
  536. package/dist/useKeyboardNav-iEXOdEMB.js +0 -43
  537. package/dist/useKeyboardNav-iEXOdEMB.js.map +0 -1
  538. package/dist/useModalLayer-Bf4TcEz-.js +0 -58
  539. package/dist/useModalLayer-Bf4TcEz-.js.map +0 -1
  540. package/dist/useModalLayer-DxYhhgRO.cjs +0 -2
  541. package/dist/useModalLayer-DxYhhgRO.cjs.map +0 -1
  542. package/dist/utils/proActivationWarning.d.ts +0 -7
  543. package/dist/validators-B6yWdsu2.cjs +0 -2
  544. package/dist/validators-B6yWdsu2.cjs.map +0 -1
  545. package/dist/validators-DVYOtFnw.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout-BSFqGXLZ.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","../src/components/layout/MStickyPanel/MStickyPanel.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 hiddenAbove,\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, hiddenAbove)}\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 hiddenAbove,\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, hiddenAbove)}\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 hiddenAbove,\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, hiddenAbove)}\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'\nimport {useMLayoutTexts} from '../../../i18n/frameworkTexts'\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,\n mobileBreakpoint = MShellBreakpoints.compact,\n hidden,\n hiddenAbove,\n className,\n children,\n ...rest\n}: MNavbarProps) {\n const texts = useMLayoutTexts()\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 ?? texts.navbarMenu}\n aria-expanded={open}\n // The menu is display: none above the breakpoint, so only point at it below.\n aria-controls={mobile ? menuId : undefined}\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') return\n setOpen(false)\n // Hand focus back to the burger when it was inside the navbar (e.g. on a\n // menu link), so keyboard users are not dropped onto <body>.\n const root = rootRef.current\n const active = document.activeElement\n if (root && active instanceof Node && root.contains(active)) {\n root.querySelector<HTMLElement>('.navbar-toggle')?.focus()\n }\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, hiddenAbove)}\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' && (\n <div\n className={cn('mobile-backdrop', open && 'visible')}\n aria-hidden\n // The backdrop lives inside the navbar root, so the outside-pointer\n // listener ignores it; close explicitly on click.\n onClick={() => setOpen(false)}\n />\n )}\n\n <div\n id={menuId}\n className={cn('mobile-menu', mobileMenu, open && 'open')}\n // APG disclosure: the burger owns aria-expanded / aria-controls and the panel is a\n // plain container of links, so no role=\"menu\" (which promises menu keyboarding).\n aria-hidden={!open || undefined}\n // Keep links in a closed menu out of the tab order, not just hidden from AT.\n inert={!open}\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 hiddenAbove,\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, hiddenAbove)}\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 {getLayoutUtilityClassNames, getLayoutUtilityStyles} from '../../../utils/layoutProps'\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 hiddenAbove,\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 ...rest\n}: MDividerProps) {\n const utilityStyle = getLayoutUtilityStyles({fsize})\n\n return (\n <div\n role=\"separator\"\n aria-orientation={orientation}\n className={cn(\n 'divider',\n orientation,\n variant,\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, hiddenAbove)}\n {...rest}\n />\n )\n}\n","import {createContext, useContext, useState, useEffect, useCallback, useMemo, useRef, useId} from 'react'\nimport {cn} from '../../../utils/cn'\nimport {MButton} from '../../controls'\nimport {MChevronRightIcon, MMenuIcon} from '../../../icons'\nimport {MTooltip} from '../../overlays'\nimport {MPopover} from '../../primitives/MPopover'\nimport {useModalLayer} from '../../../utils/useModalLayer'\nimport {isRtlElement} from '../../../utils/radioGroupKeys'\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'\nimport {useMCommonTexts, useMLayoutTexts} from '../../../i18n/frameworkTexts'\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 texts = useMCommonTexts()\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 const asideRef = useRef<HTMLElement | null>(null)\n const layoutTexts = useMLayoutTexts()\n const drawerOpen = mobile && mobileOpen\n\n // The open mobile drawer is a modal dialog: focus moves in, Tab cycles inside, Escape\n // closes it (only when it is the top layer) and focus returns to the hamburger.\n useModalLayer({active: drawerOpen, containerRef: asideRef, onEscape: closeMobile})\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 {drawerOpen && <div className=\"sidebar-backdrop\" aria-hidden=\"true\" onClick={closeMobile} />}\n\n <aside\n ref={asideRef}\n className={sidebarCls}\n style={style}\n {...(drawerOpen\n ? {role: 'dialog', 'aria-modal': true, 'aria-label': layoutTexts.sidebarDialogLabel}\n : {})}\n // The closed off-canvas drawer must not leave its links in the Tab order.\n inert={mobile && !mobileOpen ? true : undefined}\n >\n {children}\n </aside>\n\n {mobile && (\n // Stays mounted (hidden) while the drawer is open so focus can return to it on close.\n <button\n type=\"button\"\n className={cn('sidebar-hamburger', side)}\n onClick={() => setMobileOpen(true)}\n aria-label={texts.openMenu}\n aria-haspopup=\"dialog\"\n hidden={mobileOpen}\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 const layoutTexts = useMLayoutTexts()\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 ? layoutTexts.sidebarExpand : layoutTexts.sidebarCollapse}\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' ? description : typeof label === 'string' ? label : 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 // Collapsed rows show only the icon; keep the label as the accessible\n // name (a bare `title` is not reliably announced nor shown on focus).\n <span className=\"sidebar-item-label-hidden\">{label}</span>\n ) : (\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// Collapsed rail: the group icon is a disclosure button with a flyout of the group's links.\n// Hover still opens it (as before); click / tap / Enter / Space / ArrowRight toggle it from\n// pointer, touch and keyboard. Escape or Tab-out closes it and focus returns to the button.\nfunction MSidebarGroupFlyout({\n label,\n icon,\n active,\n className,\n ctx,\n children,\n}: {\n label: string\n icon: MSidebarGroupProps['icon']\n active: boolean\n className?: string\n ctx: SidebarContextValue\n children: MSidebarGroupProps['children']\n}) {\n const [open, setOpen] = useState(false)\n const [focusFirst, setFocusFirst] = useState(false)\n const buttonRef = useRef<HTMLButtonElement | null>(null)\n const hoverTimeout = useRef<ReturnType<typeof setTimeout> | null>(null)\n const flyoutId = useId()\n const titleId = `${flyoutId}-title`\n\n useEffect(\n () => () => {\n if (hoverTimeout.current) clearTimeout(hoverTimeout.current)\n },\n []\n )\n\n const openFlyout = (withFocus: boolean) => {\n if (hoverTimeout.current) clearTimeout(hoverTimeout.current)\n setFocusFirst(withFocus)\n setOpen(true)\n }\n\n const hoverHandlers = {\n onMouseEnter: () => {\n if (!open) openFlyout(false)\n else if (hoverTimeout.current) clearTimeout(hoverTimeout.current)\n },\n onMouseLeave: () => {\n // Leaving the rail for the flyout (or back) must not flicker the panel.\n hoverTimeout.current = setTimeout(() => {\n const flyout = document.getElementById(flyoutId)\n // Keep a keyboard-opened flyout while focus is inside it.\n if (flyout && flyout.contains(document.activeElement)) return\n setOpen(false)\n }, 150)\n },\n }\n\n return (\n <div className={cn('sidebar-group', className)} {...hoverHandlers}>\n <button\n ref={buttonRef}\n type=\"button\"\n className={cn('sidebar-group-icon collapsed', active && 'active', open && 'open')}\n title={label}\n aria-label={label}\n aria-expanded={open}\n aria-controls={open ? flyoutId : undefined}\n onClick={(event) => {\n if (open) {\n setOpen(false)\n return\n }\n // A click synthesised from the keyboard (detail 0) moves focus into the flyout.\n openFlyout(event.detail === 0)\n }}\n onKeyDown={(event) => {\n if (event.key === 'ArrowRight' || event.key === 'ArrowLeft') {\n const rtl = isRtlElement(event.currentTarget)\n const opening = rtl ? 'ArrowLeft' : 'ArrowRight'\n if (event.key !== opening) return\n event.preventDefault()\n openFlyout(true)\n }\n }}\n >\n {icon}\n </button>\n <MPopover\n open={open}\n anchorRef={buttonRef}\n onClose={() => setOpen(false)}\n placement=\"right-start\"\n className=\"dropdown menu popover sidebar-flyout\"\n role=\"group\"\n id={flyoutId}\n aria-labelledby={titleId}\n initialFocus={focusFirst ? 'first' : undefined}\n closeOnTabOut\n >\n <div\n className=\"dropdown menu list sidebar-flyout-list\"\n {...hoverHandlers}\n onClick={(event) => {\n // Following a link closes the flyout (the old closeOnSelect behaviour).\n if ((event.target as HTMLElement).closest('a, button')) setOpen(false)\n }}\n >\n <div id={titleId} className=\"sidebar-flyout-title\">\n {label}\n </div>\n <SidebarCtx.Provider value={ctx}>{children}</SidebarCtx.Provider>\n </div>\n </MPopover>\n </div>\n )\n}\n\n// Group related sidebar items and swap to a flyout 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 return (\n <MSidebarGroupFlyout label={label} icon={icon} active={active} className={className} ctx={expandedCtx}>\n {children}\n </MSidebarGroupFlyout>\n )\n }\n\n return (\n <div className={cn('sidebar-group', className)}>\n <button\n type=\"button\"\n className={cn('sidebar-group-header', active && 'active')}\n onClick={toggle}\n aria-expanded={collapsible ? open : undefined}\n >\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')} aria-hidden=\"true\">\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 {useEffect, useMemo, useRef, useState} from 'react'\nimport {cn} from '../../../utils/cn'\nimport type {MBreadcrumbProps} from './MBreadcrumb.types'\nimport {formatMText, useMLayoutTexts} from '../../../i18n/frameworkTexts'\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 const texts = useMLayoutTexts()\n // The ellipsis is a disclosure button: once pressed, the whole path is shown.\n const [expanded, setExpanded] = useState(false)\n const focusRevealedRef = useRef(false)\n const revealedRef = useRef<HTMLLIElement | null>(null)\n\n // A new path (or a new limit) starts collapsed again.\n useEffect(() => {\n setExpanded(false)\n }, [items.length, maxItems])\n\n // Keep the current page visible while shortening deep paths.\n const visible = useMemo(() => {\n if (expanded || !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, expanded])\n\n const hiddenCount = visible.includes(null) ? items.length - (visible.length - 1) : 0\n // Index (in the full list) of the first crumb the ellipsis was hiding.\n const firstRevealedIndex = maxItems && maxItems >= 2 ? 1 : -1\n\n // Move focus onto the first revealed crumb so keyboard users do not lose their place.\n useEffect(() => {\n if (!expanded || !focusRevealedRef.current) return\n focusRevealedRef.current = false\n const li = revealedRef.current\n if (!li) return\n const target = li.querySelector<HTMLElement>('a[href], button:not([disabled])')\n if (target) {\n target.focus()\n } else {\n li.tabIndex = -1\n li.focus()\n }\n }, [expanded])\n\n return (\n <nav aria-label={texts.breadcrumbLabel} className={cn('breadcrumb', className)} {...rest}>\n <ol className={cn('trail', expanded && 'expanded')}>\n {visible.map((item, i) => {\n if (item === null) {\n return (\n <li key=\"ellipsis\" className=\"crumb dots\">\n <span className=\"sep\" aria-hidden=\"true\">\n {separator}\n </span>\n <button\n type=\"button\"\n className=\"link btn dots-toggle\"\n aria-expanded={false}\n aria-label={formatMText(texts.breadcrumbShowHidden, {count: hiddenCount})}\n onClick={() => {\n focusRevealedRef.current = true\n setExpanded(true)\n }}\n >\n <span aria-hidden=\"true\">&#8230;</span>\n </button>\n </li>\n )\n }\n\n const isLast = i === visible.length - 1\n\n return (\n <li\n key={i}\n ref={expanded && i === firstRevealedIndex ? revealedRef : undefined}\n className={cn('crumb', isLast && 'active')}\n >\n {i > 0 && (\n <span className=\"sep\" aria-hidden=\"true\">\n {separator}\n </span>\n )}\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, useId, useRef, useState} from 'react'\nimport type {\n CSSProperties,\n ForwardedRef,\n KeyboardEvent as ReactKeyboardEvent,\n PointerEvent as ReactPointerEvent,\n ReactElement,\n Ref,\n} 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'\nimport {formatMText, useMLayoutTexts} from '../../../i18n/frameworkTexts'\n\ninterface DragState {\n itemId: string\n mode: 'drag' | 'resize'\n startClientX: number\n startClientY: number\n original: MCanvasGridPosition\n}\n\n/** Keyboard move / resize in progress (the handle button is pressed). */\ninterface KeyboardMoveState {\n itemId: string\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 getItemLabel,\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 texts = useMLayoutTexts()\n const instructionsId = `${useId()}-canvas-grid-instructions`\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 const [keyMove, setKeyMove] = useState<KeyboardMoveState | null>(null)\n const [announcement, setAnnouncement] = useState('')\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 // Tiles always live on the full-resolution track grid: halving positions in the\n // compact viewport lost precision (tiles overlapped) and made a drag move the tile\n // by half the cursor distance. Compact mode only coarsens the guide overlay.\n const effectiveCols = totalCols\n const effectiveRows = 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 setKeyMove(null)\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 setKeyMove(null)\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 // A cancelled gesture (pointercancel, Escape) restores the original position\n // instead of committing the preview.\n function cancelDrag(e?: ReactPointerEvent<HTMLDivElement>) {\n if (!drag) return\n if (e) {\n try {\n ;(e.currentTarget as Element).releasePointerCapture(e.pointerId)\n } catch {\n // pointer may have already been released\n }\n }\n setDrag(null)\n setPreview(null)\n }\n\n useEffect(() => {\n if (!drag) return\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key !== 'Escape') return\n event.preventDefault()\n setDrag(null)\n setPreview(null)\n }\n window.addEventListener('keydown', handleKeyDown)\n return () => window.removeEventListener('keydown', handleKeyDown)\n }, [drag])\n\n function handleHeaderPointerUp(e: ReactPointerEvent<HTMLDivElement>) {\n if (drag) {\n suppressNextClick()\n handlePointerUp(e)\n }\n }\n\n function labelOf(item: T) {\n const custom = getItemLabel?.(item)\n if (custom) return custom\n return formatMText(texts.canvasGridTile, {number: items.indexOf(item) + 1})\n }\n\n function describePosition(template: string, label: string, position: MCanvasGridPosition) {\n return formatMText(template, {\n label,\n column: position.x + 1,\n row: position.y + 1,\n width: position.w,\n height: position.h,\n })\n }\n\n // The handle is a toggle: pressing it picks the tile up, pressing it again drops it there.\n function toggleKeyboardMove(item: T) {\n if (!interactive) return\n const label = labelOf(item)\n if (keyMove?.itemId === item.id) {\n const final = preview ?? item.position\n const original = keyMove.original\n if (final.x !== original.x || final.y !== original.y) onItemMove?.(item.id, final)\n if (final.w !== original.w || final.h !== original.h) onItemResize?.(item.id, final)\n setKeyMove(null)\n setPreview(null)\n setAnnouncement(describePosition(texts.canvasGridDropped, label, final))\n return\n }\n // A pointer gesture and a keyboard move never run at the same time.\n setDrag(null)\n bringToFront(item.id)\n setKeyMove({itemId: item.id, original: {...item.position}})\n setPreview({...item.position})\n setAnnouncement(describePosition(texts.canvasGridGrabbed, label, item.position))\n }\n\n function cancelKeyboardMove(item: T, announce: boolean) {\n if (keyMove?.itemId !== item.id) return\n setKeyMove(null)\n setPreview(null)\n if (announce) setAnnouncement(formatMText(texts.canvasGridCancelled, {label: labelOf(item)}))\n }\n\n function handleHandleKeyDown(event: ReactKeyboardEvent<HTMLElement>, item: T) {\n if (keyMove?.itemId !== item.id) return\n if (event.key === 'Escape') {\n event.preventDefault()\n event.stopPropagation()\n cancelKeyboardMove(item, true)\n return\n }\n const deltas: Record<string, [number, number]> = {\n ArrowLeft: [-1, 0],\n ArrowRight: [1, 0],\n ArrowUp: [0, -1],\n ArrowDown: [0, 1],\n }\n const delta = deltas[event.key]\n if (!delta || event.altKey || event.ctrlKey || event.metaKey) return\n event.preventDefault()\n const current = preview ?? item.position\n let next: MCanvasGridPosition\n if (event.shiftKey) {\n if (!onItemResize) return\n const min = getMin(item)\n next = {\n ...current,\n w: clamp(current.w + delta[0], min.w, effectiveCols - current.x),\n h: clamp(current.h + delta[1], min.h, effectiveRows - current.y),\n }\n } else {\n if (!onItemMove) return\n next = {\n ...current,\n x: clamp(current.x + delta[0], 0, effectiveCols - current.w),\n y: clamp(current.y + delta[1], 0, effectiveRows - current.h),\n }\n }\n setPreview(next)\n setAnnouncement(describePosition(texts.canvasGridPosition, labelOf(item), next))\n }\n\n const guidesOn =\n guides === 'always' ||\n (guides === 'on-edit' && interactive) ||\n (guides === 'on-drag' && (drag !== null || keyMove !== 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 {interactive && (\n <>\n <span id={instructionsId} className=\"canvas-grid-sr-only\">\n {texts.canvasGridInstructions}\n </span>\n <div role=\"status\" aria-live=\"polite\" aria-atomic=\"true\" className=\"canvas-grid-sr-only\">\n {announcement}\n </div>\n </>\n )}\n\n {items.map((item) => {\n const isDragging = drag?.itemId === item.id\n const isKeyMoving = interactive && keyMove?.itemId === item.id\n const label = labelOf(item)\n const live = (isDragging || isKeyMoving) && preview ? preview : item.position\n const x = live.x\n const y = live.y\n const w = Math.max(1, live.w)\n const h = Math.max(1, 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 || isKeyMoving ? baseZ + 100 : baseZ,\n }\n const canKeyboardMove = interactive && (onItemMove !== undefined || onItemResize !== undefined)\n\n return (\n <div\n key={item.id}\n className={cn('canvas-grid-item', isDragging && 'dragging', isKeyMoving && 'keyboard-moving')}\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={cancelDrag}\n >\n <MButtonGroup variant=\"ghost\" size=\"xs\">\n {canKeyboardMove && (\n <MButton\n className=\"canvas-grid-move-handle\"\n color=\"primary\"\n iconOnly\n aria-label={formatMText(texts.canvasGridHandle, {label})}\n aria-describedby={instructionsId}\n aria-pressed={isKeyMoving}\n startIcon={<MMoveIcon />}\n onPointerDown={(e) => e.stopPropagation()}\n onClick={(e) => {\n e.stopPropagation()\n toggleKeyboardMove(item)\n }}\n onKeyDown={(e) => handleHandleKeyDown(e, item)}\n onBlur={() => cancelKeyboardMove(item, true)}\n />\n )}\n {interactive && onItemEdit && (\n <MButton\n color=\"primary\"\n iconOnly\n aria-label={formatMText(texts.canvasGridEdit, {label})}\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={formatMText(texts.canvasGridExpand, {label})}\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={formatMText(texts.canvasGridRemove, {label})}\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={formatMText(texts.canvasGridExpand, {label})}\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={cancelDrag}\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","import {forwardRef, useEffect, useImperativeHandle, useRef, useState} from 'react'\nimport type * as React from 'react'\nimport type {MStickyPanelProps} from './MStickyPanel.types'\nimport {cn} from '../../../utils/cn'\nimport './MStickyPanel.css'\n\nconst INTERACTIVE_SELECTOR = 'button, a, [role=\"button\"]'\n\n// Sticky side-rail panel: sticks to the viewport at `top`, fills viewport-relative height,\n// scrolls internally with an optional hidden scrollbar and click-and-drag scrolling.\nexport const MStickyPanel = forwardRef<HTMLDivElement, MStickyPanelProps>(function MStickyPanel(\n {children, top = 16, bottomGap = 16, hideScrollbar = true, draggable = true, label, className, style, ...rest},\n forwardedRef\n) {\n const panelRef = useRef<HTMLDivElement>(null)\n useImperativeHandle(forwardedRef, () => panelRef.current as HTMLDivElement)\n const dragState = useRef<{startY: number; startScrollTop: number} | null>(null)\n const [dragging, setDragging] = useState(false)\n\n useEffect(() => {\n if (!draggable) return\n\n const handleMouseMove = (event: MouseEvent) => {\n const drag = dragState.current\n const panel = panelRef.current\n if (!drag || !panel) return\n panel.scrollTop = drag.startScrollTop - (event.clientY - drag.startY)\n }\n\n const handleMouseUp = () => {\n if (!dragState.current) return\n dragState.current = null\n setDragging(false)\n }\n\n window.addEventListener('mousemove', handleMouseMove)\n window.addEventListener('mouseup', handleMouseUp)\n return () => {\n window.removeEventListener('mousemove', handleMouseMove)\n window.removeEventListener('mouseup', handleMouseUp)\n }\n }, [draggable])\n\n const handleMouseDown = (event: React.MouseEvent<HTMLDivElement>) => {\n if (!draggable) return\n // Skip drag start when the click originated on an interactive descendant\n // (button, link, role=button) so triggers like MDropdownMenu, MButton or\n // <Link> stay clickable inside the panel.\n const target = event.target as HTMLElement | null\n if (target && target.closest(INTERACTIVE_SELECTOR)) return\n\n const panel = panelRef.current\n if (!panel) return\n\n dragState.current = {startY: event.clientY, startScrollTop: panel.scrollTop}\n setDragging(true)\n event.preventDefault()\n }\n\n const mergedStyle: React.CSSProperties = {\n top,\n height: `calc(100vh - ${top + bottomGap}px)`,\n ...style,\n }\n\n return (\n <div\n ref={panelRef}\n className={cn(\n 'm-sticky-panel',\n draggable && 'draggable',\n dragging && 'is-dragging',\n hideScrollbar && 'hide-scrollbar',\n className\n )}\n style={mergedStyle}\n // A scrollable region must be keyboard-focusable even when it holds no\n // focusable content (axe `scrollable-region-focusable`).\n tabIndex={0}\n role={label ? 'region' : undefined}\n aria-label={label}\n onMouseDown={handleMouseDown}\n {...rest}\n >\n {children}\n </div>\n )\n})\n"],"mappings":";;;;;;;;;;;;;;;;;AAOA,SAAgB,EAAW,EACvB,UAAO,WACP,YAAS,IACT,WACA,gBACA,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,GAAQ,EAAY;EACvC,GAAI;EAEH;EACC,CAAA;;;;AC3Dd,SAAgB,EAAQ,EACpB,eAAY,QACZ,YAAS,IACT,cAAW,IACX,YAAS,IACT,UAAO,WACP,YAAS,SACT,WACA,gBACA,cACA,aACA,GAAG,KACU;AACb,QACI,kBAAC,UAAD;EACI,WAAW,EAAG,UAAU,GAAM,KAAY,YAAY,KAAU,UAAU,EAAU;EACpF,GAAI,EAAe,GAAQ,EAAY;EACvC,GAAI;YAEJ,kBAAC,GAAD;GAAY,MAAM;GAAmB;GAAQ,WAAW,EAAG,SAAS,UAAU,IAAS;GAClF;GACQ,CAAA;EACR,CAAA;;;;ACrBjB,SAAgB,EAAQ,EACpB,eAAY,QACZ,YAAS,IACT,cAAW,IACX,UAAO,WACP,WACA,gBACA,YACA,YACA,UACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,cACA,cACA,UACA,aACA,GAAG,MACU;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;G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"}
@@ -0,0 +1,2 @@
1
+ const e=require(`./theme-ByPZH0dh.cjs`),t=require(`./frameworkTexts-CaqdiKHW.cjs`),n=require(`./icons-Bp8bB9TP.cjs`),r=require(`./cn-DYFxgzi2.cjs`),i=require(`./useModalLayer-Cyt93Prs.cjs`),a=require(`./MPopover-ZeoU9hb5.cjs`),o=require(`./layoutProps-B8y2XwHy.cjs`),s=require(`./MSurface-BrFo-JMJ.cjs`),c=require(`./MLink-C6uwA6db.cjs`),l=require(`./MButton-BxEky3xQ.cjs`),u=require(`./MButtonGroup-Dz8Fm-oA.cjs`),d=require(`./radioGroupKeys-COL8uXbH.cjs`),f=require(`./MSimpleGrid-wgvjnxwM.cjs`),p=require(`./MTooltip-Cj2Fxmzc.cjs`);require(`./core-w629c4ND.cjs`);let m=require(`react`),h=require(`react/jsx-runtime`);function g({size:t=`content`,padded:n=!0,hidden:i,hiddenAbove:a,spacing:s,padding:c,fsize:l,mt:u,mb:d,ml:f,mr:p,mx:m,my:g,pt:_,pb:v,pl:y,pr:b,px:x,py:S,fullWidth:C,className:w,style:T,children:E,...D}){let O=o.n({fsize:l});return(0,h.jsx)(`div`,{className:r.t(`container`,t,n&&`padded`,...o.t({spacing:s,padding:c,fsize:l,mt:u,mb:d,ml:f,mr:p,mx:m,my:g,pt:_,pb:v,pl:y,pr:b,px:x,py:S,fullWidth:C}),w),style:{...O,...T},...e.r(i,a),...D,children:E})}function _({container:t=`wide`,padded:n=!0,bordered:i=!0,sticky:a=!1,tone:o=`surface`,layout:s=`split`,hidden:c,hiddenAbove:l,className:u,children:d,...f}){return(0,h.jsx)(`header`,{className:r.t(`header`,o,i&&`bordered`,a&&`sticky`,u),...e.r(c,l),...f,children:(0,h.jsx)(g,{size:t,padded:n,className:r.t(`inner`,`layout-${s}`),children:d})})}function v({container:t=`wide`,padded:n=!0,bordered:i=!0,tone:a=`surface`,hidden:s,hiddenAbove:c,spacing:l,padding:u,fsize:d,mt:f,mb:p,ml:m,mr:_,mx:v,my:y,pt:b,pb:x,pl:S,pr:C,px:w,py:T,fullWidth:E,className:D,style:O,children:k,...A}){let j=o.n({fsize:d});return(0,h.jsx)(`footer`,{className:r.t(`footer`,a,i&&`bordered`,...o.t({spacing:l,padding:u,fsize:d,mt:f,mb:p,ml:m,mr:_,mx:v,my:y,pt:b,pb:x,pl:S,pr:C,px:w,py:T,fullWidth:E}),D),style:{...j,...O},...e.r(s,c),...A,children:(0,h.jsx)(g,{size:t,padded:n,className:`inner`,fullWidth:!0,children:k})})}function y({items:e,orientation:t=`horizontal`,wrap:n=!1,className:i,children:a,...o}){return(0,h.jsx)(`div`,{className:r.t(`navs`,t,n&&`wrap`,i),...o,children:e?e.map(e=>{let t=e.icon,n=e.iconOnly===!0&&t!=null,i=typeof e.label==`string`?e.label:void 0,a=n?i:void 0,o=e.title??(n?i:void 0);return(0,h.jsxs)(c.t,{component:e.component,href:e.href,to:e.to,target:e.target,rel:e.rel,title:o,current:e.current,disabled:e.disabled,className:r.t(`link`,n&&`icon-only`,e.className),"aria-label":a,children:[t?(0,h.jsx)(`span`,{className:`icon`,"aria-hidden":!n||void 0,children:(0,h.jsx)(t,{size:e.iconSize})}):null,n?null:e.label]},e.key??e.href??e.title?.toString()??i??``)}):a})}function b(e,t=[]){return m.Children.forEach(e,e=>{if(!(0,m.isValidElement)(e))return;if(e.type===y){t.push(e);return}let n=e.props?.children;n!==void 0&&b(n,t)}),t}function x({container:i=`content`,padded:a=!0,bordered:o=!0,sticky:c=!1,tone:u=`surface`,justify:d=`between`,wrap:f=!1,mobileMenu:p=`dropdown`,mobileMenuContent:_,mobileMenuFooter:v,collapseActions:y=!1,mobileMenuLabel:x,mobileBreakpoint:S=e.n.compact,hidden:C,hiddenAbove:w,className:T,children:E,...D}){let O=t.m(),[k,A]=(0,m.useState)(!1),j=(0,m.useRef)(null),M=(0,m.useId)(),N=e.i(S),P=m.Children.toArray(E),F=b(E).map((e,t)=>(0,m.cloneElement)(e,{key:`mnavbar-mobile-navs-${t}`,orientation:`vertical`})),I=(0,h.jsx)(l.t,{type:`button`,variant:`ghost`,size:`md`,shape:`circle`,iconOnly:!0,className:`navbar-toggle`,"aria-label":x??O.navbarMenu,"aria-expanded":k,"aria-controls":N?M:void 0,onClick:H,children:(0,h.jsx)(n.Zn,{})},`mnavbar-toggle`),L=-1;for(let e=P.length-1;e>=0;--e){let t=P[e];if((0,m.isValidElement)(t)&&t.type===s.n){L=e;break}}let R=y&&N&&L!==-1,z=null,B=P,V=L;if(R){z=P[L],B=P.filter((e,t)=>t!==L),V=-1;for(let e=B.length-1;e>=0;--e){let t=B[e];if((0,m.isValidElement)(t)&&t.type===s.n){V=e;break}}}let ee=V===-1?[...B,I]:B.map((e,t)=>{if(t!==V)return e;let n=e,r=m.Children.toArray(n.props.children);return(0,m.cloneElement)(n,{key:n.key??`mnavbar-inline-${t}`,children:[...r,I]})});(0,m.useEffect)(()=>{if(!k)return;function e(e){let t=j.current;t&&(e.target instanceof Node&&t.contains(e.target)||A(!1))}function t(e){if(e.key!==`Escape`)return;A(!1);let t=j.current,n=document.activeElement;t&&n instanceof Node&&t.contains(n)&&t.querySelector(`.navbar-toggle`)?.focus()}return document.addEventListener(`pointerdown`,e),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`pointerdown`,e),document.removeEventListener(`keydown`,t)}},[k]),(0,m.useEffect)(()=>{N||A(!1)},[N]);function H(){A(e=>!e)}function U(e){let t=e.target;t&&t.closest(`a, [role="menuitem"]`)&&A(!1)}return(0,h.jsxs)(`nav`,{ref:j,className:r.t(`navbar`,u,o&&`bordered`,c&&`sticky`,N&&`mobile-view`,k&&`mobile-open`,`mobile-${p}`,T),...e.r(C,w),...D,children:[(0,h.jsx)(g,{size:i,padded:a,className:`container`,children:(0,h.jsx)(`div`,{className:r.t(`inner`,d,f&&`wrap`),children:ee})}),p===`drawer`&&(0,h.jsx)(`div`,{className:r.t(`mobile-backdrop`,k&&`visible`),"aria-hidden":!0,onClick:()=>A(!1)}),(0,h.jsxs)(`div`,{id:M,className:r.t(`mobile-menu`,p,k&&`open`),"aria-hidden":!k||void 0,inert:!k,onClick:U,children:[F,_,z?(0,h.jsx)(`div`,{className:`mobile-menu-footer`,children:(0,m.cloneElement)(z,{key:`mnavbar-collapsed-actions`})}):null,v?(0,h.jsx)(`div`,{className:`mobile-menu-footer`,children:v}):null]})]})}function S({as:t=`section`,spacing:n=`lg`,tone:i=`default`,hidden:a,hiddenAbove:o,className:s,style:c,children:l,...u}){return(0,h.jsx)(t,{className:r.t(`section`,n,i,s),style:c,...e.r(a,o),...u,children:l})}function C({items:e,renderItem:t,children:n,columns:r=4,minItemWidth:i=`15rem`,...a}){return(0,h.jsx)(f.t,{columns:r,minItemWidth:i,...a,children:e&&t?e.map((e,n)=>t(e,n)):n})}function w({orientation:t=`horizontal`,variant:n=`solid`,hidden:i,hiddenAbove:a,spacing:s,padding:c,fsize:l,mt:u,mb:d,ml:f,mr:p,mx:m,my:g,pt:_,pb:v,pl:y,pr:b,px:x,py:S,fullWidth:C,className:w,style:T,...E}){let D=o.n({fsize:l});return(0,h.jsx)(`div`,{role:`separator`,"aria-orientation":t,className:r.t(`divider`,t,n,...o.t({spacing:s,padding:c,fsize:l,mt:u,mb:d,ml:f,mr:p,mx:m,my:g,pt:_,pb:v,pl:y,pr:b,px:x,py:S,fullWidth:C}),w),style:{...D,...T},...e.r(i,a),...E})}var T=`mineralui-sidebar`,E=(0,m.createContext)({mode:`expanded`,mobile:!1,mobileOpen:!1,canToggle:!1,toggleMode:()=>{}});function D(){return(0,m.useContext)(E)}function O({mode:a=`auto`,defaultMode:o=`expanded`,onModeChange:s,persist:c=!1,side:l=`left`,tone:u=`subtle`,bordered:d=!0,mobileBreakpoint:f=e.n.mobile,compactBreakpoint:p=e.n.compact,className:g,style:_,children:v}){let y=t.s(),b=Math.max(p,f),x=e.i(f),S=e.i(b),C=!x&&S,[w,D]=(0,m.useState)(!1),[O,k]=(0,m.useState)(()=>{if(c)try{let e=localStorage.getItem(T);if(e===`expanded`||e===`collapsed`)return e}catch{}return o}),A=x?`expanded`:C?`collapsed`:a===`auto`?O:a===`collapsed`?`collapsed`:`expanded`,j=(0,m.useCallback)(()=>{let e=A===`expanded`?`collapsed`:`expanded`;if(k(e),s?.(e),c)try{localStorage.setItem(T,e)}catch{}},[A,s,c]),M=(0,m.useCallback)(()=>D(!1),[]),N=(0,m.useRef)(null),P=t.m(),F=x&&w;i.r({active:F,containerRef:N,onEscape:M}),(0,m.useEffect)(()=>{x||D(!1)},[x]);let I=!x&&!C&&a===`auto`,L=(0,m.useMemo)(()=>({mode:A,mobile:x,mobileOpen:w,canToggle:I,toggleMode:j}),[A,x,w,I,j]),R=r.t(`sidebar`,u,l,!x&&A===`collapsed`&&`collapsed`,C&&`compact`,d&&`bordered`,x&&`mobile`,x&&w&&`mobile-open`,g);return(0,h.jsxs)(E.Provider,{value:L,children:[F&&(0,h.jsx)(`div`,{className:`sidebar-backdrop`,"aria-hidden":`true`,onClick:M}),(0,h.jsx)(`aside`,{ref:N,className:R,style:_,...F?{role:`dialog`,"aria-modal":!0,"aria-label":P.sidebarDialogLabel}:{},inert:x&&!w?!0:void 0,children:v}),x&&(0,h.jsx)(`button`,{type:`button`,className:r.t(`sidebar-hamburger`,l),onClick:()=>D(!0),"aria-label":y.openMenu,"aria-haspopup":`dialog`,hidden:w,children:(0,h.jsx)(`span`,{className:`sidebar-hamburger-icon`,"aria-hidden":`true`,children:(0,h.jsx)(n.Zn,{})})})]})}function k({bordered:e=!1,className:i,children:a}){let{mode:o,mobile:s,canToggle:c,toggleMode:u}=D(),d=!s&&o===`collapsed`,f=t.m();return(0,h.jsxs)(`div`,{className:r.t(`sidebar-header`,e&&`bordered`,i),children:[(0,h.jsx)(`div`,{className:`sidebar-header-content`,children:a}),c&&(0,h.jsx)(l.t,{variant:`outlined`,color:`neutral`,iconOnly:!0,size:`sm`,onClick:u,"aria-label":d?f.sidebarExpand:f.sidebarCollapse,className:`sidebar-toggle`,children:(0,h.jsx)(`span`,{className:r.t(`sidebar-chevron`,d&&`flipped`),children:(0,h.jsx)(n.qi,{})})})]})}function A({className:e,children:t}){return(0,h.jsx)(`div`,{className:r.t(`sidebar-body`,e),children:t})}function j({className:e,children:t}){return(0,h.jsx)(`nav`,{className:r.t(`sidebar-nav`,e),children:t})}function M({icon:e,label:t,description:n,href:i,to:a,onClick:o,active:s=!1,disabled:c=!1,badge:l,color:u,component:d,className:f}){let{mode:m,mobile:g}=D(),_=!g&&m===`collapsed`,v=n??t,y=typeof n==`string`?n:typeof t==`string`?t:void 0,b=d??(i||a?`a`:`button`),x=d?a?{to:a}:i?{href:i}:{}:i?{href:i}:a?{href:a}:{};return(0,h.jsxs)(b,{className:r.t(`sidebar-item`,s&&`active`,c&&`disabled`,u,f),onClick:c?void 0:o,"aria-disabled":c||void 0,title:_?y:void 0,...x,children:[e&&(0,h.jsx)(`span`,{className:`sidebar-item-icon`,children:e}),_?(0,h.jsx)(`span`,{className:`sidebar-item-label-hidden`,children:t}):(0,h.jsx)(p.t,{content:v,placement:`top`,className:`sidebar-item-label-tooltip`,children:(0,h.jsx)(`span`,{className:`sidebar-item-label`,children:t})}),!_&&l&&(0,h.jsx)(`span`,{className:`sidebar-item-badge`,children:l})]})}function N({label:e,icon:t,active:n,className:i,ctx:o,children:s}){let[c,l]=(0,m.useState)(!1),[u,f]=(0,m.useState)(!1),p=(0,m.useRef)(null),g=(0,m.useRef)(null),_=(0,m.useId)(),v=`${_}-title`;(0,m.useEffect)(()=>()=>{g.current&&clearTimeout(g.current)},[]);let y=e=>{g.current&&clearTimeout(g.current),f(e),l(!0)},b={onMouseEnter:()=>{c?g.current&&clearTimeout(g.current):y(!1)},onMouseLeave:()=>{g.current=setTimeout(()=>{let e=document.getElementById(_);e&&e.contains(document.activeElement)||l(!1)},150)}};return(0,h.jsxs)(`div`,{className:r.t(`sidebar-group`,i),...b,children:[(0,h.jsx)(`button`,{ref:p,type:`button`,className:r.t(`sidebar-group-icon collapsed`,n&&`active`,c&&`open`),title:e,"aria-label":e,"aria-expanded":c,"aria-controls":c?_:void 0,onClick:e=>{if(c){l(!1);return}y(e.detail===0)},onKeyDown:e=>{if(e.key===`ArrowRight`||e.key===`ArrowLeft`){let t=d.n(e.currentTarget)?`ArrowLeft`:`ArrowRight`;if(e.key!==t)return;e.preventDefault(),y(!0)}},children:t}),(0,h.jsx)(a.t,{open:c,anchorRef:p,onClose:()=>l(!1),placement:`right-start`,className:`dropdown menu popover sidebar-flyout`,role:`group`,id:_,"aria-labelledby":v,initialFocus:u?`first`:void 0,closeOnTabOut:!0,children:(0,h.jsxs)(`div`,{className:`dropdown menu list sidebar-flyout-list`,...b,onClick:e=>{e.target.closest(`a, button`)&&l(!1)},children:[(0,h.jsx)(`div`,{id:v,className:`sidebar-flyout-title`,children:e}),(0,h.jsx)(E.Provider,{value:o,children:s})]})})]})}function P({label:e,icon:t,active:i=!1,defaultOpen:a=!0,collapsible:o=!0,children:s,className:c}){let l=D(),{mode:u,mobile:d}=l,f=!d&&u===`collapsed`,[p,g]=(0,m.useState)(a),_=(0,m.useMemo)(()=>({...l,mode:`expanded`}),[l]);return f?(0,h.jsx)(N,{label:e,icon:t,active:i,className:c,ctx:_,children:s}):(0,h.jsxs)(`div`,{className:r.t(`sidebar-group`,c),children:[(0,h.jsxs)(`button`,{type:`button`,className:r.t(`sidebar-group-header`,i&&`active`),onClick:()=>{o&&g(e=>!e)},"aria-expanded":o?p:void 0,children:[t&&(0,h.jsx)(`span`,{className:`sidebar-group-icon`,children:t}),(0,h.jsx)(`span`,{className:`sidebar-group-label`,children:e}),o&&(0,h.jsx)(`span`,{className:r.t(`sidebar-group-arrow`,p&&`open`),"aria-hidden":`true`,children:(0,h.jsx)(n.qi,{})})]}),p&&(0,h.jsx)(`div`,{className:`sidebar-group-items`,children:s})]})}function F({bordered:e=!1,className:t,children:n}){return(0,h.jsx)(`div`,{className:r.t(`sidebar-footer`,e&&`bordered`,t),children:n})}function I({className:e,spacing:t=`md`}){return(0,h.jsx)(`hr`,{className:r.t(`sidebar-divider`,t,e)})}function L({items:e,separator:n=`/`,maxItems:i,className:a,...o}){let s=t.m(),[c,l]=(0,m.useState)(!1),u=(0,m.useRef)(!1),d=(0,m.useRef)(null);(0,m.useEffect)(()=>{l(!1)},[e.length,i]);let f=(0,m.useMemo)(()=>{if(c||!i||i>=e.length)return e;if(i<2)return[e[e.length-1]];let t=e.slice(0,1),n=e.slice(-(i-1));return[...t,null,...n]},[e,i,c]),p=f.includes(null)?e.length-(f.length-1):0,g=i&&i>=2?1:-1;return(0,m.useEffect)(()=>{if(!c||!u.current)return;u.current=!1;let e=d.current;if(!e)return;let t=e.querySelector(`a[href], button:not([disabled])`);t?t.focus():(e.tabIndex=-1,e.focus())},[c]),(0,h.jsx)(`nav`,{"aria-label":s.breadcrumbLabel,className:r.t(`breadcrumb`,a),...o,children:(0,h.jsx)(`ol`,{className:r.t(`trail`,c&&`expanded`),children:f.map((e,i)=>{if(e===null)return(0,h.jsxs)(`li`,{className:`crumb dots`,children:[(0,h.jsx)(`span`,{className:`sep`,"aria-hidden":`true`,children:n}),(0,h.jsx)(`button`,{type:`button`,className:`link btn dots-toggle`,"aria-expanded":!1,"aria-label":t.t(s.breadcrumbShowHidden,{count:p}),onClick:()=>{u.current=!0,l(!0)},children:(0,h.jsx)(`span`,{"aria-hidden":`true`,children:`…`})})]},`ellipsis`);let a=i===f.length-1;return(0,h.jsxs)(`li`,{ref:c&&i===g?d:void 0,className:r.t(`crumb`,a&&`active`),children:[i>0&&(0,h.jsx)(`span`,{className:`sep`,"aria-hidden":`true`,children:n}),e.href&&!a?(0,h.jsx)(`a`,{href:e.href,className:`link`,onClick:e.onClick,children:e.label}):e.onClick&&!a?(0,h.jsx)(`button`,{type:`button`,className:`link btn`,onClick:e.onClick,children:e.label}):(0,h.jsx)(`span`,{className:`current`,"aria-current":a?`page`:void 0,children:e.label})]},i)})})})}var R=(0,m.forwardRef)(function({className:e,children:t,...n},i){let a=[],o=[];return m.Children.forEach(t,e=>{(0,m.isValidElement)(e)&&e.type===O?a.push(e):o.push(e)}),(0,h.jsxs)(`div`,{ref:i,className:r.t(`app-shell`,e),...n,children:[a,(0,h.jsx)(`div`,{className:`app-main`,children:o})]})}),z=(0,m.forwardRef)(function({className:e,children:t,...n},i){return(0,h.jsx)(`div`,{ref:i,className:r.t(`app-body`,e),...n,children:t})});function B({baseWidth:e=480,children:t}){let n=(0,m.useRef)(null),r=(0,m.useRef)(null),[i,a]=(0,m.useState)(1),[o,s]=(0,m.useState)(e);return(0,m.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,h.jsx)(`div`,{ref:n,className:`canvas-grid-scale-wrapper`,children:(0,h.jsx)(`div`,{ref:r,className:`canvas-grid-scale-content`,style:{width:`${o}px`,transform:`scale(${i})`},children:t})})}function V(e,t,n){return Math.max(t,Math.min(n,e))}function ee({columns:i=24,rows:a=24,snap:o=4,items:s,renderItem:c,getItemLabel:d,minItemSize:f,maxItemSize:p,editable:g=!1,onItemMove:_,onItemResize:v,onItemRemove:y,onItemEdit:b,onItemExpand:x,guides:S=`always`,compactBreakpoint:C=e.n.compact,mobileBreakpoint:w=e.n.mobile,height:T,fitContent:E=`scroll`,fitContentBaseWidth:D=480,className:O,style:k},A){let j=t.m(),M=`${(0,m.useId)()}-canvas-grid-instructions`,N=(0,m.useRef)(null),[P,F]=(0,m.useState)({width:0,height:0}),[I,L]=(0,m.useState)(null),[R,z]=(0,m.useState)(null),[ee,H]=(0,m.useState)({}),U=(0,m.useRef)(0),[W,G]=(0,m.useState)(null),[te,K]=(0,m.useState)(``);function q(e){U.current+=1,H(t=>({...t,[e]:U.current}))}function ne(){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 re=e.i(w),J=e.i(C)&&!re,ie=i*o,ae=a*o,Y=ie,X=ae,Z=J?Math.max(1,Math.round(i/2)):i,oe=J?Math.max(1,Math.round(a/2)):a,Q=g&&!re;(0,m.useEffect)(()=>{let e=N.current;if(!e||typeof ResizeObserver>`u`)return;let t=()=>F({width:e.clientWidth,height:e.clientHeight});t();let n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},[]);let se=(0,m.useCallback)(e=>{N.current=e,typeof A==`function`?A(e):A&&(A.current=e)},[A]);function ce(e){let t=f?.(e);return t?{w:Math.max(o,t.w*o),h:Math.max(o,t.h*o)}:{w:o,h:o}}function le(e,t){Q&&(e.stopPropagation(),e.preventDefault(),e.currentTarget.setPointerCapture(e.pointerId),q(t.id),G(null),L({itemId:t.id,mode:`resize`,startClientX:e.clientX,startClientY:e.clientY,original:{...t.position}}),z({...t.position}))}function ue(e,t){Q&&(e.target.closest(`button, [role="button"]`)||(e.stopPropagation(),e.preventDefault(),e.currentTarget.setPointerCapture(e.pointerId),q(t.id),G(null),L({itemId:t.id,mode:`drag`,startClientX:e.clientX,startClientY:e.clientY,original:{...t.position}}),z({...t.position})))}function de(e){if(!I||P.width===0||P.height===0)return;let t=P.width/Y,n=P.height/X,r=Math.round((e.clientX-I.startClientX)/t),i=Math.round((e.clientY-I.startClientY)/n),a=I.original,c=s.find(e=>e.id===I.itemId),l=c?ce(c):{w:o,h:o};if(I.mode===`drag`)z({x:V(a.x+r,0,Y-a.w),y:V(a.y+i,0,X-a.h),w:a.w,h:a.h});else{let e=V(a.w+r,l.w,Y-a.x),t=V(a.h+i,l.h,X-a.y);z({x:a.x,y:a.y,w:e,h:t})}}function fe(e){if(I){try{e.currentTarget.releasePointerCapture(e.pointerId)}catch{}R&&(I.mode===`drag`?_?.(I.itemId,R):v?.(I.itemId,R)),L(null),z(null)}}function pe(e){if(I){if(e)try{e.currentTarget.releasePointerCapture(e.pointerId)}catch{}L(null),z(null)}}(0,m.useEffect)(()=>{if(!I)return;let e=e=>{e.key===`Escape`&&(e.preventDefault(),L(null),z(null))};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[I]);function me(e){I&&(ne(),fe(e))}function $(e){return d?.(e)||t.t(j.canvasGridTile,{number:s.indexOf(e)+1})}function he(e,n,r){return t.t(e,{label:n,column:r.x+1,row:r.y+1,width:r.w,height:r.h})}function ge(e){if(!Q)return;let t=$(e);if(W?.itemId===e.id){let n=R??e.position,r=W.original;(n.x!==r.x||n.y!==r.y)&&_?.(e.id,n),(n.w!==r.w||n.h!==r.h)&&v?.(e.id,n),G(null),z(null),K(he(j.canvasGridDropped,t,n));return}L(null),q(e.id),G({itemId:e.id,original:{...e.position}}),z({...e.position}),K(he(j.canvasGridGrabbed,t,e.position))}function _e(e,n){W?.itemId===e.id&&(G(null),z(null),n&&K(t.t(j.canvasGridCancelled,{label:$(e)})))}function ve(e,t){if(W?.itemId!==t.id)return;if(e.key===`Escape`){e.preventDefault(),e.stopPropagation(),_e(t,!0);return}let n={ArrowLeft:[-1,0],ArrowRight:[1,0],ArrowUp:[0,-1],ArrowDown:[0,1]}[e.key];if(!n||e.altKey||e.ctrlKey||e.metaKey)return;e.preventDefault();let r=R??t.position,i;if(e.shiftKey){if(!v)return;let e=ce(t);i={...r,w:V(r.w+n[0],e.w,Y-r.x),h:V(r.h+n[1],e.h,X-r.y)}}else{if(!_)return;i={...r,x:V(r.x+n[0],0,Y-r.w),y:V(r.y+n[1],0,X-r.h)}}z(i),K(he(j.canvasGridPosition,$(t),i))}let ye=S===`always`||S===`on-edit`&&Q||S===`on-drag`&&(I!==null||W!==null),be=T===void 0?void 0:{height:typeof T==`number`?`${T}px`:T};if(re){let e=[...s].sort((e,t)=>e.position.y-t.position.y);return(0,h.jsx)(`div`,{ref:se,className:r.t(`canvas-grid`,`mobile`,O),"data-guides":`off`,style:{...be,...k},children:e.map(e=>(0,h.jsx)(`div`,{className:`canvas-grid-item`,children:c(e)},e.id))})}let xe={...be,...k,gridTemplateColumns:`repeat(${Y}, 1fr)`,gridTemplateRows:`repeat(${X}, 1fr)`,"--canvas-grid-cells":String(Z),"--canvas-grid-row-cells":String(oe)},Se=Z*oe;return(0,h.jsxs)(`div`,{ref:se,className:r.t(`canvas-grid`,J&&`compact`,Q&&`editable`,O),"data-guides":ye?`on`:`off`,style:xe,children:[(0,h.jsx)(`div`,{className:`canvas-grid-overlay`,"aria-hidden":!0,children:Array.from({length:Se},(e,t)=>{let n=(t+1)%Z===0,i=t>=Se-Z;return(0,h.jsx)(`div`,{className:r.t(`canvas-grid-cell`,n&&`no-right`,i&&`no-bottom`)},t)})}),Q&&(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(`span`,{id:M,className:`canvas-grid-sr-only`,children:j.canvasGridInstructions}),(0,h.jsx)(`div`,{role:`status`,"aria-live":`polite`,"aria-atomic":`true`,className:`canvas-grid-sr-only`,children:te})]}),s.map(e=>{let i=I?.itemId===e.id,a=Q&&W?.itemId===e.id,o=$(e),s=(i||a)&&R?R:e.position,d=s.x,f=s.y,p=Math.max(1,s.w),m=Math.max(1,s.h),g=1+(ee[e.id]??0),S={gridColumn:`${d+1} / span ${p}`,gridRow:`${f+1} / span ${m}`,zIndex:i||a?g+100:g},C=Q&&(_!==void 0||v!==void 0);return(0,h.jsxs)(`div`,{className:r.t(`canvas-grid-item`,i&&`dragging`,a&&`keyboard-moving`),style:S,children:[(0,h.jsx)(`div`,{className:`canvas-grid-item-header`,onPointerDown:t=>ue(t,e),onPointerMove:de,onPointerUp:me,onPointerCancel:pe,children:(0,h.jsxs)(u.t,{variant:`ghost`,size:`xs`,children:[C&&(0,h.jsx)(l.t,{className:`canvas-grid-move-handle`,color:`primary`,iconOnly:!0,"aria-label":t.t(j.canvasGridHandle,{label:o}),"aria-describedby":M,"aria-pressed":a,startIcon:(0,h.jsx)(n.Sr,{}),onPointerDown:e=>e.stopPropagation(),onClick:t=>{t.stopPropagation(),ge(e)},onKeyDown:t=>ve(t,e),onBlur:()=>_e(e,!0)}),Q&&b&&(0,h.jsx)(l.t,{color:`primary`,iconOnly:!0,"aria-label":t.t(j.canvasGridEdit,{label:o}),startIcon:(0,h.jsx)(n.Gn,{}),onPointerDown:e=>e.stopPropagation(),onClick:t=>{t.stopPropagation(),b(e.id)}}),x&&(0,h.jsx)(l.t,{color:`primary`,iconOnly:!0,"aria-label":t.t(j.canvasGridExpand,{label:o}),startIcon:(0,h.jsx)(n.$n,{}),onPointerDown:e=>e.stopPropagation(),onClick:t=>{t.stopPropagation(),x(e.id)}}),Q&&y&&(0,h.jsx)(l.t,{color:`error`,iconOnly:!0,"aria-label":t.t(j.canvasGridRemove,{label:o}),startIcon:(0,h.jsx)(n.er,{}),onPointerDown:e=>e.stopPropagation(),onClick:t=>{t.stopPropagation(),y(e.id)}})]})}),(0,h.jsx)(`div`,{className:`canvas-grid-item-body`,children:E===`scale`?(0,h.jsx)(B,{baseWidth:D,children:c(e)}):c(e)}),!Q&&x&&(0,h.jsx)(l.t,{className:`canvas-grid-view-expand-handle`,variant:`filled`,shape:`circle`,size:`sm`,color:`primary`,iconOnly:!0,"aria-label":t.t(j.canvasGridExpand,{label:o}),startIcon:(0,h.jsx)(n.$n,{}),onClick:t=>{t.stopPropagation(),x(e.id)}}),Q&&i&&(0,h.jsx)(`div`,{className:`canvas-grid-item-glass`,"aria-hidden":!0,children:(0,h.jsx)(n.Sr,{size:28})}),Q&&(0,h.jsx)(`div`,{className:`canvas-grid-resize-handle`,"aria-hidden":!0,onPointerDown:t=>le(t,e),onPointerMove:de,onPointerUp:e=>{I&&ne(),fe(e)},onPointerCancel:pe})]},e.id)})]})}var H=(0,m.forwardRef)(ee),U=`button, a, [role="button"]`,W=(0,m.forwardRef)(function({children:e,top:t=16,bottomGap:n=16,hideScrollbar:i=!0,draggable:a=!0,label:o,className:s,style:c,...l},u){let d=(0,m.useRef)(null);(0,m.useImperativeHandle)(u,()=>d.current);let f=(0,m.useRef)(null),[p,g]=(0,m.useState)(!1);(0,m.useEffect)(()=>{if(!a)return;let e=e=>{let t=f.current,n=d.current;!t||!n||(n.scrollTop=t.startScrollTop-(e.clientY-t.startY))},t=()=>{f.current&&(f.current=null,g(!1))};return window.addEventListener(`mousemove`,e),window.addEventListener(`mouseup`,t),()=>{window.removeEventListener(`mousemove`,e),window.removeEventListener(`mouseup`,t)}},[a]);let _=e=>{if(!a)return;let t=e.target;if(t&&t.closest(U))return;let n=d.current;n&&(f.current={startY:e.clientY,startScrollTop:n.scrollTop},g(!0),e.preventDefault())},v={top:t,height:`calc(100vh - ${t+n}px)`,...c};return(0,h.jsx)(`div`,{ref:d,className:r.t(`m-sticky-panel`,a&&`draggable`,p&&`is-dragging`,i&&`hide-scrollbar`,s),style:v,tabIndex:0,role:o?`region`:void 0,"aria-label":o,onMouseDown:_,...l,children:e})});Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return L}}),Object.defineProperty(exports,`b`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return I}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return M}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return S}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return C}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return z}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return w}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return H}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return R}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return W}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return P}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,`x`,{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return v}});
2
+ //# sourceMappingURL=layout-MKqvUkPv.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout-MKqvUkPv.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","../src/components/layout/MStickyPanel/MStickyPanel.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 hiddenAbove,\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, hiddenAbove)}\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 hiddenAbove,\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, hiddenAbove)}\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 hiddenAbove,\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, hiddenAbove)}\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'\nimport {useMLayoutTexts} from '../../../i18n/frameworkTexts'\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,\n mobileBreakpoint = MShellBreakpoints.compact,\n hidden,\n hiddenAbove,\n className,\n children,\n ...rest\n}: MNavbarProps) {\n const texts = useMLayoutTexts()\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 ?? texts.navbarMenu}\n aria-expanded={open}\n // The menu is display: none above the breakpoint, so only point at it below.\n aria-controls={mobile ? menuId : undefined}\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') return\n setOpen(false)\n // Hand focus back to the burger when it was inside the navbar (e.g. on a\n // menu link), so keyboard users are not dropped onto <body>.\n const root = rootRef.current\n const active = document.activeElement\n if (root && active instanceof Node && root.contains(active)) {\n root.querySelector<HTMLElement>('.navbar-toggle')?.focus()\n }\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, hiddenAbove)}\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' && (\n <div\n className={cn('mobile-backdrop', open && 'visible')}\n aria-hidden\n // The backdrop lives inside the navbar root, so the outside-pointer\n // listener ignores it; close explicitly on click.\n onClick={() => setOpen(false)}\n />\n )}\n\n <div\n id={menuId}\n className={cn('mobile-menu', mobileMenu, open && 'open')}\n // APG disclosure: the burger owns aria-expanded / aria-controls and the panel is a\n // plain container of links, so no role=\"menu\" (which promises menu keyboarding).\n aria-hidden={!open || undefined}\n // Keep links in a closed menu out of the tab order, not just hidden from AT.\n inert={!open}\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 hiddenAbove,\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, hiddenAbove)}\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 {getLayoutUtilityClassNames, getLayoutUtilityStyles} from '../../../utils/layoutProps'\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 hiddenAbove,\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 ...rest\n}: MDividerProps) {\n const utilityStyle = getLayoutUtilityStyles({fsize})\n\n return (\n <div\n role=\"separator\"\n aria-orientation={orientation}\n className={cn(\n 'divider',\n orientation,\n variant,\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, hiddenAbove)}\n {...rest}\n />\n )\n}\n","import {createContext, useContext, useState, useEffect, useCallback, useMemo, useRef, useId} from 'react'\nimport {cn} from '../../../utils/cn'\nimport {MButton} from '../../controls'\nimport {MChevronRightIcon, MMenuIcon} from '../../../icons'\nimport {MTooltip} from '../../overlays'\nimport {MPopover} from '../../primitives/MPopover'\nimport {useModalLayer} from '../../../utils/useModalLayer'\nimport {isRtlElement} from '../../../utils/radioGroupKeys'\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'\nimport {useMCommonTexts, useMLayoutTexts} from '../../../i18n/frameworkTexts'\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 texts = useMCommonTexts()\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 const asideRef = useRef<HTMLElement | null>(null)\n const layoutTexts = useMLayoutTexts()\n const drawerOpen = mobile && mobileOpen\n\n // The open mobile drawer is a modal dialog: focus moves in, Tab cycles inside, Escape\n // closes it (only when it is the top layer) and focus returns to the hamburger.\n useModalLayer({active: drawerOpen, containerRef: asideRef, onEscape: closeMobile})\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 {drawerOpen && <div className=\"sidebar-backdrop\" aria-hidden=\"true\" onClick={closeMobile} />}\n\n <aside\n ref={asideRef}\n className={sidebarCls}\n style={style}\n {...(drawerOpen\n ? {role: 'dialog', 'aria-modal': true, 'aria-label': layoutTexts.sidebarDialogLabel}\n : {})}\n // The closed off-canvas drawer must not leave its links in the Tab order.\n inert={mobile && !mobileOpen ? true : undefined}\n >\n {children}\n </aside>\n\n {mobile && (\n // Stays mounted (hidden) while the drawer is open so focus can return to it on close.\n <button\n type=\"button\"\n className={cn('sidebar-hamburger', side)}\n onClick={() => setMobileOpen(true)}\n aria-label={texts.openMenu}\n aria-haspopup=\"dialog\"\n hidden={mobileOpen}\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 const layoutTexts = useMLayoutTexts()\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 ? layoutTexts.sidebarExpand : layoutTexts.sidebarCollapse}\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' ? description : typeof label === 'string' ? label : 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 // Collapsed rows show only the icon; keep the label as the accessible\n // name (a bare `title` is not reliably announced nor shown on focus).\n <span className=\"sidebar-item-label-hidden\">{label}</span>\n ) : (\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// Collapsed rail: the group icon is a disclosure button with a flyout of the group's links.\n// Hover still opens it (as before); click / tap / Enter / Space / ArrowRight toggle it from\n// pointer, touch and keyboard. Escape or Tab-out closes it and focus returns to the button.\nfunction MSidebarGroupFlyout({\n label,\n icon,\n active,\n className,\n ctx,\n children,\n}: {\n label: string\n icon: MSidebarGroupProps['icon']\n active: boolean\n className?: string\n ctx: SidebarContextValue\n children: MSidebarGroupProps['children']\n}) {\n const [open, setOpen] = useState(false)\n const [focusFirst, setFocusFirst] = useState(false)\n const buttonRef = useRef<HTMLButtonElement | null>(null)\n const hoverTimeout = useRef<ReturnType<typeof setTimeout> | null>(null)\n const flyoutId = useId()\n const titleId = `${flyoutId}-title`\n\n useEffect(\n () => () => {\n if (hoverTimeout.current) clearTimeout(hoverTimeout.current)\n },\n []\n )\n\n const openFlyout = (withFocus: boolean) => {\n if (hoverTimeout.current) clearTimeout(hoverTimeout.current)\n setFocusFirst(withFocus)\n setOpen(true)\n }\n\n const hoverHandlers = {\n onMouseEnter: () => {\n if (!open) openFlyout(false)\n else if (hoverTimeout.current) clearTimeout(hoverTimeout.current)\n },\n onMouseLeave: () => {\n // Leaving the rail for the flyout (or back) must not flicker the panel.\n hoverTimeout.current = setTimeout(() => {\n const flyout = document.getElementById(flyoutId)\n // Keep a keyboard-opened flyout while focus is inside it.\n if (flyout && flyout.contains(document.activeElement)) return\n setOpen(false)\n }, 150)\n },\n }\n\n return (\n <div className={cn('sidebar-group', className)} {...hoverHandlers}>\n <button\n ref={buttonRef}\n type=\"button\"\n className={cn('sidebar-group-icon collapsed', active && 'active', open && 'open')}\n title={label}\n aria-label={label}\n aria-expanded={open}\n aria-controls={open ? flyoutId : undefined}\n onClick={(event) => {\n if (open) {\n setOpen(false)\n return\n }\n // A click synthesised from the keyboard (detail 0) moves focus into the flyout.\n openFlyout(event.detail === 0)\n }}\n onKeyDown={(event) => {\n if (event.key === 'ArrowRight' || event.key === 'ArrowLeft') {\n const rtl = isRtlElement(event.currentTarget)\n const opening = rtl ? 'ArrowLeft' : 'ArrowRight'\n if (event.key !== opening) return\n event.preventDefault()\n openFlyout(true)\n }\n }}\n >\n {icon}\n </button>\n <MPopover\n open={open}\n anchorRef={buttonRef}\n onClose={() => setOpen(false)}\n placement=\"right-start\"\n className=\"dropdown menu popover sidebar-flyout\"\n role=\"group\"\n id={flyoutId}\n aria-labelledby={titleId}\n initialFocus={focusFirst ? 'first' : undefined}\n closeOnTabOut\n >\n <div\n className=\"dropdown menu list sidebar-flyout-list\"\n {...hoverHandlers}\n onClick={(event) => {\n // Following a link closes the flyout (the old closeOnSelect behaviour).\n if ((event.target as HTMLElement).closest('a, button')) setOpen(false)\n }}\n >\n <div id={titleId} className=\"sidebar-flyout-title\">\n {label}\n </div>\n <SidebarCtx.Provider value={ctx}>{children}</SidebarCtx.Provider>\n </div>\n </MPopover>\n </div>\n )\n}\n\n// Group related sidebar items and swap to a flyout 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 return (\n <MSidebarGroupFlyout label={label} icon={icon} active={active} className={className} ctx={expandedCtx}>\n {children}\n </MSidebarGroupFlyout>\n )\n }\n\n return (\n <div className={cn('sidebar-group', className)}>\n <button\n type=\"button\"\n className={cn('sidebar-group-header', active && 'active')}\n onClick={toggle}\n aria-expanded={collapsible ? open : undefined}\n >\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')} aria-hidden=\"true\">\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 {useEffect, useMemo, useRef, useState} from 'react'\nimport {cn} from '../../../utils/cn'\nimport type {MBreadcrumbProps} from './MBreadcrumb.types'\nimport {formatMText, useMLayoutTexts} from '../../../i18n/frameworkTexts'\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 const texts = useMLayoutTexts()\n // The ellipsis is a disclosure button: once pressed, the whole path is shown.\n const [expanded, setExpanded] = useState(false)\n const focusRevealedRef = useRef(false)\n const revealedRef = useRef<HTMLLIElement | null>(null)\n\n // A new path (or a new limit) starts collapsed again.\n useEffect(() => {\n setExpanded(false)\n }, [items.length, maxItems])\n\n // Keep the current page visible while shortening deep paths.\n const visible = useMemo(() => {\n if (expanded || !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, expanded])\n\n const hiddenCount = visible.includes(null) ? items.length - (visible.length - 1) : 0\n // Index (in the full list) of the first crumb the ellipsis was hiding.\n const firstRevealedIndex = maxItems && maxItems >= 2 ? 1 : -1\n\n // Move focus onto the first revealed crumb so keyboard users do not lose their place.\n useEffect(() => {\n if (!expanded || !focusRevealedRef.current) return\n focusRevealedRef.current = false\n const li = revealedRef.current\n if (!li) return\n const target = li.querySelector<HTMLElement>('a[href], button:not([disabled])')\n if (target) {\n target.focus()\n } else {\n li.tabIndex = -1\n li.focus()\n }\n }, [expanded])\n\n return (\n <nav aria-label={texts.breadcrumbLabel} className={cn('breadcrumb', className)} {...rest}>\n <ol className={cn('trail', expanded && 'expanded')}>\n {visible.map((item, i) => {\n if (item === null) {\n return (\n <li key=\"ellipsis\" className=\"crumb dots\">\n <span className=\"sep\" aria-hidden=\"true\">\n {separator}\n </span>\n <button\n type=\"button\"\n className=\"link btn dots-toggle\"\n aria-expanded={false}\n aria-label={formatMText(texts.breadcrumbShowHidden, {count: hiddenCount})}\n onClick={() => {\n focusRevealedRef.current = true\n setExpanded(true)\n }}\n >\n <span aria-hidden=\"true\">&#8230;</span>\n </button>\n </li>\n )\n }\n\n const isLast = i === visible.length - 1\n\n return (\n <li\n key={i}\n ref={expanded && i === firstRevealedIndex ? revealedRef : undefined}\n className={cn('crumb', isLast && 'active')}\n >\n {i > 0 && (\n <span className=\"sep\" aria-hidden=\"true\">\n {separator}\n </span>\n )}\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, useId, useRef, useState} from 'react'\nimport type {\n CSSProperties,\n ForwardedRef,\n KeyboardEvent as ReactKeyboardEvent,\n PointerEvent as ReactPointerEvent,\n ReactElement,\n Ref,\n} 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'\nimport {formatMText, useMLayoutTexts} from '../../../i18n/frameworkTexts'\n\ninterface DragState {\n itemId: string\n mode: 'drag' | 'resize'\n startClientX: number\n startClientY: number\n original: MCanvasGridPosition\n}\n\n/** Keyboard move / resize in progress (the handle button is pressed). */\ninterface KeyboardMoveState {\n itemId: string\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 getItemLabel,\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 texts = useMLayoutTexts()\n const instructionsId = `${useId()}-canvas-grid-instructions`\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 const [keyMove, setKeyMove] = useState<KeyboardMoveState | null>(null)\n const [announcement, setAnnouncement] = useState('')\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 // Tiles always live on the full-resolution track grid: halving positions in the\n // compact viewport lost precision (tiles overlapped) and made a drag move the tile\n // by half the cursor distance. Compact mode only coarsens the guide overlay.\n const effectiveCols = totalCols\n const effectiveRows = 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 setKeyMove(null)\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 setKeyMove(null)\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 // A cancelled gesture (pointercancel, Escape) restores the original position\n // instead of committing the preview.\n function cancelDrag(e?: ReactPointerEvent<HTMLDivElement>) {\n if (!drag) return\n if (e) {\n try {\n ;(e.currentTarget as Element).releasePointerCapture(e.pointerId)\n } catch {\n // pointer may have already been released\n }\n }\n setDrag(null)\n setPreview(null)\n }\n\n useEffect(() => {\n if (!drag) return\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key !== 'Escape') return\n event.preventDefault()\n setDrag(null)\n setPreview(null)\n }\n window.addEventListener('keydown', handleKeyDown)\n return () => window.removeEventListener('keydown', handleKeyDown)\n }, [drag])\n\n function handleHeaderPointerUp(e: ReactPointerEvent<HTMLDivElement>) {\n if (drag) {\n suppressNextClick()\n handlePointerUp(e)\n }\n }\n\n function labelOf(item: T) {\n const custom = getItemLabel?.(item)\n if (custom) return custom\n return formatMText(texts.canvasGridTile, {number: items.indexOf(item) + 1})\n }\n\n function describePosition(template: string, label: string, position: MCanvasGridPosition) {\n return formatMText(template, {\n label,\n column: position.x + 1,\n row: position.y + 1,\n width: position.w,\n height: position.h,\n })\n }\n\n // The handle is a toggle: pressing it picks the tile up, pressing it again drops it there.\n function toggleKeyboardMove(item: T) {\n if (!interactive) return\n const label = labelOf(item)\n if (keyMove?.itemId === item.id) {\n const final = preview ?? item.position\n const original = keyMove.original\n if (final.x !== original.x || final.y !== original.y) onItemMove?.(item.id, final)\n if (final.w !== original.w || final.h !== original.h) onItemResize?.(item.id, final)\n setKeyMove(null)\n setPreview(null)\n setAnnouncement(describePosition(texts.canvasGridDropped, label, final))\n return\n }\n // A pointer gesture and a keyboard move never run at the same time.\n setDrag(null)\n bringToFront(item.id)\n setKeyMove({itemId: item.id, original: {...item.position}})\n setPreview({...item.position})\n setAnnouncement(describePosition(texts.canvasGridGrabbed, label, item.position))\n }\n\n function cancelKeyboardMove(item: T, announce: boolean) {\n if (keyMove?.itemId !== item.id) return\n setKeyMove(null)\n setPreview(null)\n if (announce) setAnnouncement(formatMText(texts.canvasGridCancelled, {label: labelOf(item)}))\n }\n\n function handleHandleKeyDown(event: ReactKeyboardEvent<HTMLElement>, item: T) {\n if (keyMove?.itemId !== item.id) return\n if (event.key === 'Escape') {\n event.preventDefault()\n event.stopPropagation()\n cancelKeyboardMove(item, true)\n return\n }\n const deltas: Record<string, [number, number]> = {\n ArrowLeft: [-1, 0],\n ArrowRight: [1, 0],\n ArrowUp: [0, -1],\n ArrowDown: [0, 1],\n }\n const delta = deltas[event.key]\n if (!delta || event.altKey || event.ctrlKey || event.metaKey) return\n event.preventDefault()\n const current = preview ?? item.position\n let next: MCanvasGridPosition\n if (event.shiftKey) {\n if (!onItemResize) return\n const min = getMin(item)\n next = {\n ...current,\n w: clamp(current.w + delta[0], min.w, effectiveCols - current.x),\n h: clamp(current.h + delta[1], min.h, effectiveRows - current.y),\n }\n } else {\n if (!onItemMove) return\n next = {\n ...current,\n x: clamp(current.x + delta[0], 0, effectiveCols - current.w),\n y: clamp(current.y + delta[1], 0, effectiveRows - current.h),\n }\n }\n setPreview(next)\n setAnnouncement(describePosition(texts.canvasGridPosition, labelOf(item), next))\n }\n\n const guidesOn =\n guides === 'always' ||\n (guides === 'on-edit' && interactive) ||\n (guides === 'on-drag' && (drag !== null || keyMove !== 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 {interactive && (\n <>\n <span id={instructionsId} className=\"canvas-grid-sr-only\">\n {texts.canvasGridInstructions}\n </span>\n <div role=\"status\" aria-live=\"polite\" aria-atomic=\"true\" className=\"canvas-grid-sr-only\">\n {announcement}\n </div>\n </>\n )}\n\n {items.map((item) => {\n const isDragging = drag?.itemId === item.id\n const isKeyMoving = interactive && keyMove?.itemId === item.id\n const label = labelOf(item)\n const live = (isDragging || isKeyMoving) && preview ? preview : item.position\n const x = live.x\n const y = live.y\n const w = Math.max(1, live.w)\n const h = Math.max(1, 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 || isKeyMoving ? baseZ + 100 : baseZ,\n }\n const canKeyboardMove = interactive && (onItemMove !== undefined || onItemResize !== undefined)\n\n return (\n <div\n key={item.id}\n className={cn('canvas-grid-item', isDragging && 'dragging', isKeyMoving && 'keyboard-moving')}\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={cancelDrag}\n >\n <MButtonGroup variant=\"ghost\" size=\"xs\">\n {canKeyboardMove && (\n <MButton\n className=\"canvas-grid-move-handle\"\n color=\"primary\"\n iconOnly\n aria-label={formatMText(texts.canvasGridHandle, {label})}\n aria-describedby={instructionsId}\n aria-pressed={isKeyMoving}\n startIcon={<MMoveIcon />}\n onPointerDown={(e) => e.stopPropagation()}\n onClick={(e) => {\n e.stopPropagation()\n toggleKeyboardMove(item)\n }}\n onKeyDown={(e) => handleHandleKeyDown(e, item)}\n onBlur={() => cancelKeyboardMove(item, true)}\n />\n )}\n {interactive && onItemEdit && (\n <MButton\n color=\"primary\"\n iconOnly\n aria-label={formatMText(texts.canvasGridEdit, {label})}\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={formatMText(texts.canvasGridExpand, {label})}\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={formatMText(texts.canvasGridRemove, {label})}\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={formatMText(texts.canvasGridExpand, {label})}\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={cancelDrag}\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","import {forwardRef, useEffect, useImperativeHandle, useRef, useState} from 'react'\nimport type * as React from 'react'\nimport type {MStickyPanelProps} from './MStickyPanel.types'\nimport {cn} from '../../../utils/cn'\nimport './MStickyPanel.css'\n\nconst INTERACTIVE_SELECTOR = 'button, a, [role=\"button\"]'\n\n// Sticky side-rail panel: sticks to the viewport at `top`, fills viewport-relative height,\n// scrolls internally with an optional hidden scrollbar and click-and-drag scrolling.\nexport const MStickyPanel = forwardRef<HTMLDivElement, MStickyPanelProps>(function MStickyPanel(\n {children, top = 16, bottomGap = 16, hideScrollbar = true, draggable = true, label, className, style, ...rest},\n forwardedRef\n) {\n const panelRef = useRef<HTMLDivElement>(null)\n useImperativeHandle(forwardedRef, () => panelRef.current as HTMLDivElement)\n const dragState = useRef<{startY: number; startScrollTop: number} | null>(null)\n const [dragging, setDragging] = useState(false)\n\n useEffect(() => {\n if (!draggable) return\n\n const handleMouseMove = (event: MouseEvent) => {\n const drag = dragState.current\n const panel = panelRef.current\n if (!drag || !panel) return\n panel.scrollTop = drag.startScrollTop - (event.clientY - drag.startY)\n }\n\n const handleMouseUp = () => {\n if (!dragState.current) return\n dragState.current = null\n setDragging(false)\n }\n\n window.addEventListener('mousemove', handleMouseMove)\n window.addEventListener('mouseup', handleMouseUp)\n return () => {\n window.removeEventListener('mousemove', handleMouseMove)\n window.removeEventListener('mouseup', handleMouseUp)\n }\n }, [draggable])\n\n const handleMouseDown = (event: React.MouseEvent<HTMLDivElement>) => {\n if (!draggable) return\n // Skip drag start when the click originated on an interactive descendant\n // (button, link, role=button) so triggers like MDropdownMenu, MButton or\n // <Link> stay clickable inside the panel.\n const target = event.target as HTMLElement | null\n if (target && target.closest(INTERACTIVE_SELECTOR)) return\n\n const panel = panelRef.current\n if (!panel) return\n\n dragState.current = {startY: event.clientY, startScrollTop: panel.scrollTop}\n setDragging(true)\n event.preventDefault()\n }\n\n const mergedStyle: React.CSSProperties = {\n top,\n height: `calc(100vh - ${top + bottomGap}px)`,\n ...style,\n }\n\n return (\n <div\n ref={panelRef}\n className={cn(\n 'm-sticky-panel',\n draggable && 'draggable',\n dragging && 'is-dragging',\n hideScrollbar && 'hide-scrollbar',\n className\n )}\n style={mergedStyle}\n // A scrollable region must be keyboard-focusable even when it holds no\n // focusable content (axe `scrollable-region-focusable`).\n tabIndex={0}\n role={label ? 'region' : undefined}\n aria-label={label}\n onMouseDown={handleMouseDown}\n {...rest}\n >\n {children}\n </div>\n )\n})\n"],"mappings":"4mBAOA,SAAgB,EAAW,CACvB,OAAO,UACP,SAAS,GACT,SACA,cACA,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,EAAQ,EAAY,CACvC,GAAI,EAEH,WACC,CAAA,CC3Dd,SAAgB,EAAQ,CACpB,YAAY,OACZ,SAAS,GACT,WAAW,GACX,SAAS,GACT,OAAO,UACP,SAAS,QACT,SACA,cACA,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,EAAQ,EAAY,CACvC,GAAI,YAEJ,EAAA,EAAA,KAAC,EAAD,CAAY,KAAM,EAAmB,SAAQ,UAAW,EAAA,EAAG,QAAS,UAAU,IAAS,CAClF,WACQ,CAAA,CACR,CAAA,CCrBjB,SAAgB,EAAQ,CACpB,YAAY,OACZ,SAAS,GACT,WAAW,GACX,OAAO,UACP,SACA,cACA,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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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-BMggJ_qO.cjs`),t=require(`./MSurface-BjE-mL1L.cjs`),n=require(`./MGrid-BkRSGN2t.cjs`),r=require(`./MStack-nc6Y_9K3.cjs`),i=require(`./MSimpleGrid-BchGYPMi.cjs`),a=require(`./MPagination-reDU9xTW.cjs`);exports.MAppShell=e.r,exports.MBody=e.i,exports.MBreadcrumb=e.a,exports.MCanvasGrid=e.n,exports.MContainer=e.x,exports.MDivider=e.m,exports.MFooter=e.y,exports.MGrid=n.t,exports.MGridItem=n.n,exports.MHeader=e.b,exports.MInline=t.n,exports.MNavbar=e._,exports.MNavs=e.v,exports.MPagination=a.t,exports.MSection=e.g,exports.MSidebar=e.o,exports.MSidebarBody=e.s,exports.MSidebarDivider=e.c,exports.MSidebarFooter=e.l,exports.MSidebarGroup=e.u,exports.MSidebarHeader=e.d,exports.MSidebarItem=e.f,exports.MSidebarNav=e.p,exports.MSimpleGrid=i.t,exports.MStack=r.t,exports.MStatGrid=e.h,exports.MStickyPanel=e.t,exports.MSurface=t.t,exports.MTabs=n.r;
3
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./layout-MKqvUkPv.cjs`),t=require(`./MSurface-BrFo-JMJ.cjs`),n=require(`./MGrid-tBsqShLG.cjs`),r=require(`./MStack-CGII4A-q.cjs`),i=require(`./MSimpleGrid-wgvjnxwM.cjs`),a=require(`./MPagination-DitmdtCc.cjs`);exports.MAppShell=e.r,exports.MBody=e.i,exports.MBreadcrumb=e.a,exports.MCanvasGrid=e.n,exports.MContainer=e.x,exports.MDivider=e.m,exports.MFooter=e.y,exports.MGrid=n.t,exports.MGridItem=n.n,exports.MHeader=e.b,exports.MInline=t.n,exports.MNavbar=e._,exports.MNavs=e.v,exports.MPagination=a.t,exports.MSection=e.g,exports.MSidebar=e.o,exports.MSidebarBody=e.s,exports.MSidebarDivider=e.c,exports.MSidebarFooter=e.l,exports.MSidebarGroup=e.u,exports.MSidebarHeader=e.d,exports.MSidebarItem=e.f,exports.MSidebarNav=e.p,exports.MSimpleGrid=i.t,exports.MStack=r.t,exports.MStatGrid=e.h,exports.MStickyPanel=e.t,exports.MSurface=t.t,exports.MTabs=n.r;
package/dist/layout.js CHANGED
@@ -1,9 +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, x as y, y as b } from "./layout-DBYHyCTr.js";
4
- import { n as x, t as S } from "./MSurface-CpDJCdb5.js";
5
- import { n as C, r as w, t as T } from "./MGrid-CIz-2i6X.js";
6
- import { t as E } from "./MStack-Dt-rWvg3.js";
7
- import { t as D } from "./MSimpleGrid-Ui8cI0ho.js";
8
- import { t as O } from "./MPagination-E7IixIeo.js";
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, x as y, y as b } from "./layout-BSFqGXLZ.js";
4
+ import { n as x, t as S } from "./MSurface-B_QnRLr5.js";
5
+ import { n as C, r as w, t as T } from "./MGrid-CQqT8nHi.js";
6
+ import { t as E } from "./MStack-BwAFeGGg.js";
7
+ import { t as D } from "./MSimpleGrid-C_QvLmck.js";
8
+ import { t as O } from "./MPagination-BTGenxWW.js";
9
9
  export { m as MAppShell, c as MBody, t as MBreadcrumb, d as MCanvasGrid, y as MContainer, u as MDivider, b as MFooter, T as MGrid, C as MGridItem, n as MHeader, x as MInline, e as MNavbar, v as MNavs, O as MPagination, o as MSection, f as MSidebar, h as MSidebarBody, r as MSidebarDivider, l as MSidebarFooter, _ as MSidebarGroup, i as MSidebarHeader, a as MSidebarItem, p as MSidebarNav, D as MSimpleGrid, E as MStack, s as MStatGrid, g as MStickyPanel, S as MSurface, w as MTabs };
@@ -1,2 +1,2 @@
1
1
  function e({spacing:e,padding:t,fsize:n,mt:r,mb:i,ml:a,mr:o,mx:s,my:c,pt:l,pb:u,pl:d,pr:f,px:p,py:m,fullWidth:h}){return[e!==void 0&&`spacing-${e}`,t!==void 0&&`padding-${t}`,n!==void 0&&`has-fsize`,r!==void 0&&`mt-${r}`,i!==void 0&&`mb-${i}`,a!==void 0&&`ml-${a}`,o!==void 0&&`mr-${o}`,s!==void 0&&`mx-${s}`,c!==void 0&&`my-${c}`,l!==void 0&&`pt-${l}`,u!==void 0&&`pb-${u}`,d!==void 0&&`pl-${d}`,f!==void 0&&`pr-${f}`,p!==void 0&&`px-${p}`,m!==void 0&&`py-${m}`,h&&`full-width`]}function t({fsize:e}){if(!(e==null||e===``))return{"--mineral-layout-fsize":typeof e==`number`?`${e}px`:e}}Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return t}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return e}});
2
- //# sourceMappingURL=layoutProps-Ck4VtGm9.cjs.map
2
+ //# sourceMappingURL=layoutProps-B8y2XwHy.cjs.map