@banzamel/mineralui 2.1.1 → 2.1.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 (244) hide show
  1. package/README.md +1 -1
  2. package/dist/{MAvatar-BcO8hMnU.js → MAvatar-DtJCj3dD.js} +1 -1
  3. package/dist/{MAvatar-BcO8hMnU.js.map → MAvatar-DtJCj3dD.js.map} +1 -1
  4. package/dist/{MAvatar-C4N2ztLf.cjs → MAvatar-bUWENcq-.cjs} +2 -2
  5. package/dist/{MAvatar-C4N2ztLf.cjs.map → MAvatar-bUWENcq-.cjs.map} +1 -1
  6. package/dist/{MButton-B8kFTOPJ.cjs → MButton-R08y1HCT.cjs} +2 -2
  7. package/dist/{MButton-B8kFTOPJ.cjs.map → MButton-R08y1HCT.cjs.map} +1 -1
  8. package/dist/{MButtonGroup-C3Ar0gfk.cjs → MButtonGroup-C-LiXWRC.cjs} +2 -2
  9. package/dist/{MButtonGroup-C3Ar0gfk.cjs.map → MButtonGroup-C-LiXWRC.cjs.map} +1 -1
  10. package/dist/{MCard-szs5kIek.cjs → MCard-1OVOl4Ql.cjs} +2 -2
  11. package/dist/{MCard-szs5kIek.cjs.map → MCard-1OVOl4Ql.cjs.map} +1 -1
  12. package/dist/{MCard-dLMQQ97e.js → MCard-azpp4YVD.js} +1 -1
  13. package/dist/{MCard-dLMQQ97e.js.map → MCard-azpp4YVD.js.map} +1 -1
  14. package/dist/{MCheckbox-CATWU11D.cjs → MCheckbox-CM5HJQWW.cjs} +2 -2
  15. package/dist/{MCheckbox-CATWU11D.cjs.map → MCheckbox-CM5HJQWW.cjs.map} +1 -1
  16. package/dist/{MConflictIllustration-Mnz1q7Ey.cjs → MConflictIllustration-B2AtfpYO.cjs} +2 -2
  17. package/dist/{MConflictIllustration-Mnz1q7Ey.cjs.map → MConflictIllustration-B2AtfpYO.cjs.map} +1 -1
  18. package/dist/{MDetailList-BBgUaSDJ.cjs → MDetailList-BhKBJwpd.cjs} +2 -2
  19. package/dist/{MDetailList-BBgUaSDJ.cjs.map → MDetailList-BhKBJwpd.cjs.map} +1 -1
  20. package/dist/{MDetailList-zlwdeA-r.js → MDetailList-BjvZUyNj.js} +2 -2
  21. package/dist/{MDetailList-zlwdeA-r.js.map → MDetailList-BjvZUyNj.js.map} +1 -1
  22. package/dist/{MDropdownMenu-omTEUh4V.js → MDropdownMenu-CZmU3uku.js} +1 -1
  23. package/dist/{MDropdownMenu-omTEUh4V.js.map → MDropdownMenu-CZmU3uku.js.map} +1 -1
  24. package/dist/{MDropdownMenu-1RqWjxHp.cjs → MDropdownMenu-hXaIMkAj.cjs} +2 -2
  25. package/dist/{MDropdownMenu-1RqWjxHp.cjs.map → MDropdownMenu-hXaIMkAj.cjs.map} +1 -1
  26. package/dist/{MGrid-B2qzYD6S.cjs → MGrid-B_0kFUws.cjs} +2 -2
  27. package/dist/{MGrid-B2qzYD6S.cjs.map → MGrid-B_0kFUws.cjs.map} +1 -1
  28. package/dist/{MGrid-Cy44dWyC.js → MGrid-CYL3cbUI.js} +1 -1
  29. package/dist/{MGrid-Cy44dWyC.js.map → MGrid-CYL3cbUI.js.map} +1 -1
  30. package/dist/{MHeading-CyuxSnhl.cjs → MHeading-BLnb3dNv.cjs} +2 -2
  31. package/dist/{MHeading-CyuxSnhl.cjs.map → MHeading-BLnb3dNv.cjs.map} +1 -1
  32. package/dist/{MI18nProvider-C90EVyFz.cjs → MI18nProvider-Cg-vxV6j.cjs} +2 -2
  33. package/dist/{MI18nProvider-C90EVyFz.cjs.map → MI18nProvider-Cg-vxV6j.cjs.map} +1 -1
  34. package/dist/{MInput-Cw9ZVcNO.cjs → MInput-BhTAfpYS.cjs} +2 -2
  35. package/dist/{MInput-Cw9ZVcNO.cjs.map → MInput-BhTAfpYS.cjs.map} +1 -1
  36. package/dist/{MInput-Baokf17V.js → MInput-CgtX0fUN.js} +1 -1
  37. package/dist/{MInput-Baokf17V.js.map → MInput-CgtX0fUN.js.map} +1 -1
  38. package/dist/{MInputCVC-DNzDAbfU.js → MInputCVC-BGYhUGDE.js} +3 -3
  39. package/dist/{MInputCVC-DNzDAbfU.js.map → MInputCVC-BGYhUGDE.js.map} +1 -1
  40. package/dist/{MInputCVC-Bqcp5Uu3.cjs → MInputCVC-E2Z2hYfy.cjs} +2 -2
  41. package/dist/{MInputCVC-Bqcp5Uu3.cjs.map → MInputCVC-E2Z2hYfy.cjs.map} +1 -1
  42. package/dist/{MInputSearch-D9bp1QAz.cjs → MInputSearch-DE9Jqp0i.cjs} +2 -2
  43. package/dist/{MInputSearch-D9bp1QAz.cjs.map → MInputSearch-DE9Jqp0i.cjs.map} +1 -1
  44. package/dist/{MInputSearch-Bswi-Kj0.js → MInputSearch-DEr5HBgw.js} +2 -2
  45. package/dist/{MInputSearch-Bswi-Kj0.js.map → MInputSearch-DEr5HBgw.js.map} +1 -1
  46. package/dist/{MKbd-CiwDwFwA.cjs → MKbd-n4fhKIxb.cjs} +2 -2
  47. package/dist/{MKbd-CiwDwFwA.cjs.map → MKbd-n4fhKIxb.cjs.map} +1 -1
  48. package/dist/{MLink-B7gXA8qY.cjs → MLink-Biipj7xz.cjs} +2 -2
  49. package/dist/{MLink-B7gXA8qY.cjs.map → MLink-Biipj7xz.cjs.map} +1 -1
  50. package/dist/MLoader-CnvWqFtA.js +41 -0
  51. package/dist/MLoader-CnvWqFtA.js.map +1 -0
  52. package/dist/MLoader-XcpKlLrd.cjs +2 -0
  53. package/dist/MLoader-XcpKlLrd.cjs.map +1 -0
  54. package/dist/{MPagination-DpUtB6t6.js → MPagination-7yTbB8dZ.js} +1 -1
  55. package/dist/{MPagination-DpUtB6t6.js.map → MPagination-7yTbB8dZ.js.map} +1 -1
  56. package/dist/{MPagination-C2GmGkVA.cjs → MPagination-DTqT33Mx.cjs} +2 -2
  57. package/dist/{MPagination-C2GmGkVA.cjs.map → MPagination-DTqT33Mx.cjs.map} +1 -1
  58. package/dist/{MPopover-BVBN5SJi.cjs → MPopover-hDqrn317.cjs} +2 -2
  59. package/dist/{MPopover-BVBN5SJi.cjs.map → MPopover-hDqrn317.cjs.map} +1 -1
  60. package/dist/{MPortal-Djrw2WhD.cjs → MPortal-BciZHNDC.cjs} +2 -2
  61. package/dist/{MPortal-Djrw2WhD.cjs.map → MPortal-BciZHNDC.cjs.map} +1 -1
  62. package/dist/{MSimpleGrid-BVeCK9Ci.js → MSimpleGrid-BWKurW6H.js} +1 -1
  63. package/dist/{MSimpleGrid-BVeCK9Ci.js.map → MSimpleGrid-BWKurW6H.js.map} +1 -1
  64. package/dist/{MSimpleGrid-BR352NiK.cjs → MSimpleGrid-BwNfaxQP.cjs} +2 -2
  65. package/dist/{MSimpleGrid-BR352NiK.cjs.map → MSimpleGrid-BwNfaxQP.cjs.map} +1 -1
  66. package/dist/{MSkeleton-DyQBeuVT.cjs → MSkeleton-CLSU5pL6.cjs} +2 -2
  67. package/dist/{MSkeleton-DyQBeuVT.cjs.map → MSkeleton-CLSU5pL6.cjs.map} +1 -1
  68. package/dist/{MSlider-Ds2Fls86.cjs → MSlider-DZnMB49q.cjs} +2 -2
  69. package/dist/{MSlider-Ds2Fls86.cjs.map → MSlider-DZnMB49q.cjs.map} +1 -1
  70. package/dist/{MStack-BdVvJN5S.cjs → MStack-BP_BUeCc.cjs} +2 -2
  71. package/dist/{MStack-BdVvJN5S.cjs.map → MStack-BP_BUeCc.cjs.map} +1 -1
  72. package/dist/{MStack-h11pHEmc.js → MStack-CSCw6to2.js} +1 -1
  73. package/dist/{MStack-h11pHEmc.js.map → MStack-CSCw6to2.js.map} +1 -1
  74. package/dist/{MSubText-DWNMJupD.cjs → MSubText-VHsgFsv2.cjs} +2 -2
  75. package/dist/{MSubText-DWNMJupD.cjs.map → MSubText-VHsgFsv2.cjs.map} +1 -1
  76. package/dist/{MSurface-BS9l7GDH.cjs → MSurface-CYeVFOw_.cjs} +2 -2
  77. package/dist/{MSurface-BS9l7GDH.cjs.map → MSurface-CYeVFOw_.cjs.map} +1 -1
  78. package/dist/{MTag-BwQbycZO.cjs → MTag-BtlOVMRl.cjs} +2 -2
  79. package/dist/{MTag-BwQbycZO.cjs.map → MTag-BtlOVMRl.cjs.map} +1 -1
  80. package/dist/{MText-Cjt1oTPr.cjs → MText-j6Zbbj5Y.cjs} +2 -2
  81. package/dist/{MText-Cjt1oTPr.cjs.map → MText-j6Zbbj5Y.cjs.map} +1 -1
  82. package/dist/{MTooltip-gpvKWQzD.cjs → MTooltip-BEfO9jTe.cjs} +2 -2
  83. package/dist/{MTooltip-gpvKWQzD.cjs.map → MTooltip-BEfO9jTe.cjs.map} +1 -1
  84. package/dist/{MTooltip-Ctyjwxv-.js → MTooltip-BTJkzOah.js} +1 -1
  85. package/dist/{MTooltip-Ctyjwxv-.js.map → MTooltip-BTJkzOah.js.map} +1 -1
  86. package/dist/{MTreeView-BS60bIj7.cjs → MTreeView-1IqmVPMv.cjs} +2 -2
  87. package/dist/{MTreeView-BS60bIj7.cjs.map → MTreeView-1IqmVPMv.cjs.map} +1 -1
  88. package/dist/{MTreeView-DTsi4bye.js → MTreeView-DQaRF0ty.js} +1 -1
  89. package/dist/{MTreeView-DTsi4bye.js.map → MTreeView-DQaRF0ty.js.map} +1 -1
  90. package/dist/{arduino-CA8n1Qq3.cjs → arduino-DdDHMIWB.cjs} +1 -1
  91. package/dist/{arduino-CA8n1Qq3.cjs.map → arduino-DdDHMIWB.cjs.map} +1 -1
  92. package/dist/{arduino-WKgN2ikT.js → arduino-UeOrXakL.js} +1 -1
  93. package/dist/{arduino-WKgN2ikT.js.map → arduino-UeOrXakL.js.map} +1 -1
  94. package/dist/{bash-DObE5DDq.cjs → bash-B17_F5Sw.cjs} +1 -1
  95. package/dist/{bash-DObE5DDq.cjs.map → bash-B17_F5Sw.cjs.map} +1 -1
  96. package/dist/{bash-vBtVVub9.js → bash-CrHemXky.js} +1 -1
  97. package/dist/{bash-vBtVVub9.js.map → bash-CrHemXky.js.map} +1 -1
  98. package/dist/{c-7RiNX--m.js → c-D9302r2r.js} +1 -1
  99. package/dist/{c-7RiNX--m.js.map → c-D9302r2r.js.map} +1 -1
  100. package/dist/{c-Bb-MtVny.cjs → c-ODLxeMV_.cjs} +1 -1
  101. package/dist/{c-Bb-MtVny.cjs.map → c-ODLxeMV_.cjs.map} +1 -1
  102. package/dist/cards-BBYh24NQ.cjs +2 -0
  103. package/dist/cards-BBYh24NQ.cjs.map +1 -0
  104. package/dist/{cards-BkRqUJ2V.js → cards-Du2kX3Br.js} +377 -359
  105. package/dist/{cards-BkRqUJ2V.js.map → cards-Du2kX3Br.js.map} +1 -1
  106. package/dist/cards.cjs +1 -1
  107. package/dist/cards.js +2 -2
  108. package/dist/components/cards/MCardGrid/MCardGrid.d.ts +1 -1
  109. package/dist/components/cards/MCardGrid/MCardGrid.types.d.ts +16 -0
  110. package/dist/components/data/MDataTable/MDataTable.d.ts +1 -1
  111. package/dist/components/data/MDataTable/MDataTable.types.d.ts +16 -0
  112. package/dist/components/data/useMCardGrid.d.ts +2 -0
  113. package/dist/components/data/useMTable.d.ts +2 -0
  114. package/dist/{controls-CSTIosnc.js → controls-Cbv4FmNq.js} +2 -2
  115. package/dist/{controls-CSTIosnc.js.map → controls-Cbv4FmNq.js.map} +1 -1
  116. package/dist/{controls-BopaNWb_.cjs → controls-DrdHBBtm.cjs} +2 -2
  117. package/dist/{controls-BopaNWb_.cjs.map → controls-DrdHBBtm.cjs.map} +1 -1
  118. package/dist/controls.cjs +1 -1
  119. package/dist/controls.js +1 -1
  120. package/dist/{core-o3cw16Db.cjs → core-DBpQf3uY.cjs} +1 -1
  121. package/dist/{core-o3cw16Db.cjs.map → core-DBpQf3uY.cjs.map} +1 -1
  122. package/dist/{core-DC6zSfZo.js → core-yRqh2XLu.js} +1 -1
  123. package/dist/{core-DC6zSfZo.js.map → core-yRqh2XLu.js.map} +1 -1
  124. package/dist/{cpp-CaNnFjgy.js → cpp-CLYSpJBB.js} +1 -1
  125. package/dist/{cpp-CaNnFjgy.js.map → cpp-CLYSpJBB.js.map} +1 -1
  126. package/dist/{cpp-BVKrJvso.cjs → cpp-DuTgLZC1.cjs} +1 -1
  127. package/dist/{cpp-BVKrJvso.cjs.map → cpp-DuTgLZC1.cjs.map} +1 -1
  128. package/dist/{css-NqBDP7ZC.js → css-BgGh0eG1.js} +1 -1
  129. package/dist/{css-NqBDP7ZC.js.map → css-BgGh0eG1.js.map} +1 -1
  130. package/dist/{css-C2sjPfLl.cjs → css-D0f-qByc.cjs} +1 -1
  131. package/dist/{css-C2sjPfLl.cjs.map → css-D0f-qByc.cjs.map} +1 -1
  132. package/dist/data-BgTkBMkP.js +674 -0
  133. package/dist/data-BgTkBMkP.js.map +1 -0
  134. package/dist/data-Csb03WFo.cjs +2 -0
  135. package/dist/data-Csb03WFo.cjs.map +1 -0
  136. package/dist/data.cjs +1 -1
  137. package/dist/data.js +2 -2
  138. package/dist/{display-B7Wh5nnM.js → display-D9H8MP8D.js} +15 -15
  139. package/dist/{display-B7Wh5nnM.js.map → display-D9H8MP8D.js.map} +1 -1
  140. package/dist/{display-BgZbdTDd.cjs → display-IMWtdmxS.cjs} +2 -2
  141. package/dist/{display-BgZbdTDd.cjs.map → display-IMWtdmxS.cjs.map} +1 -1
  142. package/dist/display.cjs +1 -1
  143. package/dist/display.js +2 -2
  144. package/dist/{dropdowns-Befc3lmC.cjs → dropdowns-D_nUdflh.cjs} +2 -2
  145. package/dist/{dropdowns-Befc3lmC.cjs.map → dropdowns-D_nUdflh.cjs.map} +1 -1
  146. package/dist/{dropdowns-DGvRs-VE.js → dropdowns-oj4--GbK.js} +3 -3
  147. package/dist/{dropdowns-DGvRs-VE.js.map → dropdowns-oj4--GbK.js.map} +1 -1
  148. package/dist/dropdowns.cjs +1 -1
  149. package/dist/dropdowns.js +1 -1
  150. package/dist/{feedback-C445FEHb.js → feedback-D7BTlioj.js} +79 -114
  151. package/dist/feedback-D7BTlioj.js.map +1 -0
  152. package/dist/feedback-u1ssUT7e.cjs +2 -0
  153. package/dist/{feedback-C8RfsfYJ.cjs.map → feedback-u1ssUT7e.cjs.map} +1 -1
  154. package/dist/feedback.cjs +1 -1
  155. package/dist/feedback.js +5 -4
  156. package/dist/{form-DSlAmTT1.cjs → form-BWGLrCPi.cjs} +2 -2
  157. package/dist/{form-DSlAmTT1.cjs.map → form-BWGLrCPi.cjs.map} +1 -1
  158. package/dist/{form-BWWLNji0.js → form-CgH1hioG.js} +1 -1
  159. package/dist/{form-BWWLNji0.js.map → form-CgH1hioG.js.map} +1 -1
  160. package/dist/form.cjs +1 -1
  161. package/dist/form.js +1 -1
  162. package/dist/i18n.cjs +1 -1
  163. package/dist/{icons-DX_cScBq.cjs → icons-BfdQ45F2.cjs} +2 -2
  164. package/dist/{icons-DX_cScBq.cjs.map → icons-BfdQ45F2.cjs.map} +1 -1
  165. package/dist/icons.cjs +1 -1
  166. package/dist/illustrations.cjs +1 -1
  167. package/dist/index.cjs +1 -1
  168. package/dist/index.js +31 -30
  169. package/dist/{inputs-BZxorlLv.js → inputs-DQrjGfwd.js} +2 -2
  170. package/dist/{inputs-BZxorlLv.js.map → inputs-DQrjGfwd.js.map} +1 -1
  171. package/dist/{inputs-BiZXyZSE.cjs → inputs-DsFdc0Io.cjs} +2 -2
  172. package/dist/{inputs-BiZXyZSE.cjs.map → inputs-DsFdc0Io.cjs.map} +1 -1
  173. package/dist/inputs.cjs +1 -1
  174. package/dist/inputs.js +4 -4
  175. package/dist/{javascript-BgwyrBZi.cjs → javascript-CGjvHPZ1.cjs} +1 -1
  176. package/dist/{javascript-BgwyrBZi.cjs.map → javascript-CGjvHPZ1.cjs.map} +1 -1
  177. package/dist/{javascript-BltQGQAn.js → javascript-CX3JhsYu.js} +1 -1
  178. package/dist/{javascript-BltQGQAn.js.map → javascript-CX3JhsYu.js.map} +1 -1
  179. package/dist/{json-DWmLrT_r.cjs → json-B8svQsK0.cjs} +1 -1
  180. package/dist/{json-DWmLrT_r.cjs.map → json-B8svQsK0.cjs.map} +1 -1
  181. package/dist/{json-DbCISZXi.js → json-BPIcVdlp.js} +1 -1
  182. package/dist/{json-DbCISZXi.js.map → json-BPIcVdlp.js.map} +1 -1
  183. package/dist/{layout-Ct6ViwDQ.cjs → layout-B_2yBP1M.cjs} +2 -2
  184. package/dist/{layout-Ct6ViwDQ.cjs.map → layout-B_2yBP1M.cjs.map} +1 -1
  185. package/dist/{layout-CnEOTJnJ.js → layout-BuvV-N9H.js} +4 -4
  186. package/dist/{layout-CnEOTJnJ.js.map → layout-BuvV-N9H.js.map} +1 -1
  187. package/dist/layout.cjs +1 -1
  188. package/dist/layout.js +5 -5
  189. package/dist/{licensing-hMT26Vnv.cjs → licensing-DysMClel.cjs} +2 -2
  190. package/dist/{licensing-hMT26Vnv.cjs.map → licensing-DysMClel.cjs.map} +1 -1
  191. package/dist/{locale-BNyzqXAU.js → locale-CS1-IY_I.js} +1 -1
  192. package/dist/{locale-BNyzqXAU.js.map → locale-CS1-IY_I.js.map} +1 -1
  193. package/dist/{locale-C5ik0c3d.cjs → locale-CbnstsMH.cjs} +2 -2
  194. package/dist/{locale-C5ik0c3d.cjs.map → locale-CbnstsMH.cjs.map} +1 -1
  195. package/dist/{media-DxnELIZO.js → media-5IsYrhIQ.js} +1 -1
  196. package/dist/{media-DxnELIZO.js.map → media-5IsYrhIQ.js.map} +1 -1
  197. package/dist/{media-DZaGKh5V.cjs → media-Xt6MkVhb.cjs} +2 -2
  198. package/dist/{media-DZaGKh5V.cjs.map → media-Xt6MkVhb.cjs.map} +1 -1
  199. package/dist/media.cjs +1 -1
  200. package/dist/media.js +2 -2
  201. package/dist/{overlays-WsQqxqk1.cjs → overlays-BAJDNT1m.cjs} +2 -2
  202. package/dist/{overlays-WsQqxqk1.cjs.map → overlays-BAJDNT1m.cjs.map} +1 -1
  203. package/dist/{overlays-BfIrSHDo.js → overlays-WA3jnWTG.js} +6 -6
  204. package/dist/{overlays-BfIrSHDo.js.map → overlays-WA3jnWTG.js.map} +1 -1
  205. package/dist/overlays.cjs +1 -1
  206. package/dist/overlays.js +3 -3
  207. package/dist/{php-dSXzrC_Z.js → php-CBRzjinf.js} +1 -1
  208. package/dist/{php-dSXzrC_Z.js.map → php-CBRzjinf.js.map} +1 -1
  209. package/dist/{php-CssmZWrI.cjs → php-CKyelegh.cjs} +1 -1
  210. package/dist/{php-CssmZWrI.cjs.map → php-CKyelegh.cjs.map} +1 -1
  211. package/dist/primitives.cjs +1 -1
  212. package/dist/style-runtime.cjs +1 -1
  213. package/dist/style-runtime.js +1 -1
  214. package/dist/styles.css +1 -1
  215. package/dist/{theme-DltOEniv.cjs → theme-BfNZicWk.cjs} +2 -2
  216. package/dist/{theme-DltOEniv.cjs.map → theme-BfNZicWk.cjs.map} +1 -1
  217. package/dist/theme.cjs +1 -1
  218. package/dist/{typescript-DeaMWtYF.cjs → typescript-D6PDzwkM.cjs} +1 -1
  219. package/dist/{typescript-DeaMWtYF.cjs.map → typescript-D6PDzwkM.cjs.map} +1 -1
  220. package/dist/{typescript-CxKdKTKz.js → typescript-Xt3Sotw5.js} +1 -1
  221. package/dist/{typescript-CxKdKTKz.js.map → typescript-Xt3Sotw5.js.map} +1 -1
  222. package/dist/{typography-vZwd5E5h.cjs → typography-Dk9kIORI.cjs} +2 -2
  223. package/dist/{typography-vZwd5E5h.cjs.map → typography-Dk9kIORI.cjs.map} +1 -1
  224. package/dist/typography.cjs +1 -1
  225. package/dist/{useGhostText-Nw9XCpWS.cjs → useGhostText-Dmkw3Am8.cjs} +2 -2
  226. package/dist/{useGhostText-Nw9XCpWS.cjs.map → useGhostText-Dmkw3Am8.cjs.map} +1 -1
  227. package/dist/{useInteractionEffect-Gs9HBi2T.cjs → useInteractionEffect-DFTdcWHl.cjs} +2 -2
  228. package/dist/{useInteractionEffect-Gs9HBi2T.cjs.map → useInteractionEffect-DFTdcWHl.cjs.map} +1 -1
  229. package/dist/{useKeyboardNav-DDN-oeqd.cjs → useKeyboardNav-HVG9JFD2.cjs} +2 -2
  230. package/dist/{useKeyboardNav-DDN-oeqd.cjs.map → useKeyboardNav-HVG9JFD2.cjs.map} +1 -1
  231. package/dist/utils.cjs +1 -1
  232. package/dist/{xml-BUuYcpx2.cjs → xml-4YlaGgjP.cjs} +1 -1
  233. package/dist/{xml-BUuYcpx2.cjs.map → xml-4YlaGgjP.cjs.map} +1 -1
  234. package/dist/{xml-BPoVPJlJ.js → xml-CrpWqcDk.js} +1 -1
  235. package/dist/{xml-BPoVPJlJ.js.map → xml-CrpWqcDk.js.map} +1 -1
  236. package/package.json +1 -1
  237. package/dist/cards-DK7j03NN.cjs +0 -2
  238. package/dist/cards-DK7j03NN.cjs.map +0 -1
  239. package/dist/data-CjVcevdT.js +0 -654
  240. package/dist/data-CjVcevdT.js.map +0 -1
  241. package/dist/data-D8qUIvWv.cjs +0 -2
  242. package/dist/data-D8qUIvWv.cjs.map +0 -1
  243. package/dist/feedback-C445FEHb.js.map +0 -1
  244. package/dist/feedback-C8RfsfYJ.cjs +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"layout-CnEOTJnJ.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 spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n className,\n style,\n children,\n ...rest\n}: MContainerProps) {\n const utilityStyle = getLayoutUtilityStyles({fsize})\n\n return (\n <div\n className={cn(\n 'container',\n size,\n padded && 'padded',\n ...getLayoutUtilityClassNames({\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n }),\n className\n )}\n style={{...utilityStyle, ...style}}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n {children}\n </div>\n )\n}\n","import type {MHeaderProps} from './MHeader.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {MContainer} from '../MContainer'\nimport './MHeader.css'\n\n// Render a reusable page header shell aligned to a shared container.\nexport function MHeader({\n container = 'wide',\n padded = true,\n bordered = true,\n sticky = false,\n tone = 'surface',\n layout = 'split',\n hidden,\n className,\n children,\n ...rest\n}: MHeaderProps) {\n return (\n <header\n className={cn('header', tone, bordered && 'bordered', sticky && 'sticky', className)}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n <MContainer size={container} padded={padded} className={cn('inner', `layout-${layout}`)}>\n {children}\n </MContainer>\n </header>\n )\n}\n","import type {MFooterProps} from './MFooter.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {getLayoutUtilityClassNames, getLayoutUtilityStyles} from '../../../utils/layoutProps'\nimport {MContainer} from '../MContainer'\nimport './MFooter.css'\n\n// Render a reusable page footer shell with shared spacing utilities.\nexport function MFooter({\n container = 'wide',\n padded = true,\n bordered = true,\n tone = 'surface',\n hidden,\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n className,\n style,\n children,\n ...rest\n}: MFooterProps) {\n const utilityStyle = getLayoutUtilityStyles({fsize})\n\n return (\n <footer\n className={cn(\n 'footer',\n tone,\n bordered && 'bordered',\n ...getLayoutUtilityClassNames({\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n }),\n className\n )}\n style={{...utilityStyle, ...style}}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n <MContainer size={container} padded={padded} className=\"inner\" fullWidth>\n {children}\n </MContainer>\n </footer>\n )\n}\n","import type {MNavsProps} from './MNavs.types'\nimport {cn} from '../../../utils/cn'\nimport {MLink} from '../../typography'\nimport './MNavs.css'\n\n// Render a lightweight navigation list from data or custom children.\nexport function MNavs({items, orientation = 'horizontal', wrap = false, className, children, ...rest}: MNavsProps) {\n return (\n <div className={cn('navs', orientation, wrap && 'wrap', className)} {...rest}>\n {items\n ? items.map((item) => {\n const Icon = item.icon\n const hideLabel = item.iconOnly === true && Icon != null\n const labelAsString = typeof item.label === 'string' ? item.label : undefined\n const ariaLabel = hideLabel ? labelAsString : undefined\n const linkTitle = item.title ?? (hideLabel ? labelAsString : undefined)\n\n return (\n <MLink\n key={item.key ?? item.href ?? item.title?.toString() ?? labelAsString ?? ''}\n component={item.component}\n href={item.href}\n to={item.to}\n target={item.target}\n rel={item.rel}\n title={linkTitle}\n current={item.current}\n disabled={item.disabled}\n className={cn('link', hideLabel && 'icon-only', item.className)}\n aria-label={ariaLabel}\n >\n {Icon ? (\n <span className=\"icon\" aria-hidden={!hideLabel || undefined}>\n <Icon size={item.iconSize} />\n </span>\n ) : null}\n {!hideLabel ? item.label : null}\n </MLink>\n )\n })\n : children}\n </div>\n )\n}\n","import {Children, cloneElement, isValidElement, useEffect, useId, useRef, useState} from 'react'\nimport type {MouseEvent as ReactMouseEvent, ReactElement, ReactNode} from 'react'\nimport type {MNavbarProps} from './MNavbar.types'\nimport {getHiddenProps, MShellBreakpoints, useMaxWidth} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {MContainer} from '../MContainer'\nimport {MInline} from '../MInline'\nimport type {MInlineProps} from '../MInline'\nimport {MNavs} from '../MNavs'\nimport {MButton} from '../../controls/MButton'\nimport {MMenuIcon} from '../../../icons'\nimport './MNavbar.css'\n\ntype NavLikeElement = ReactElement<{children?: ReactNode; orientation?: 'horizontal' | 'vertical'}>\n\n// Walks the children tree (any depth) looking for MNavs instances so the navbar\n// can pull them into the mobile menu even when wrapped in MInline / MStack.\nfunction findNavLikeChildren(children: ReactNode, found: NavLikeElement[] = []): NavLikeElement[] {\n Children.forEach(children, (child) => {\n if (!isValidElement(child)) {\n return\n }\n if (child.type === MNavs) {\n found.push(child as NavLikeElement)\n return\n }\n const nestedChildren = (child.props as {children?: ReactNode} | null)?.children\n if (nestedChildren !== undefined) {\n findNavLikeChildren(nestedChildren, found)\n }\n })\n return found\n}\n\n// Render a horizontal app or site navigation shell with container alignment.\n// Below the md breakpoint MNavs children are collapsed behind a hamburger toggle\n// that opens either a dropdown panel or a side drawer with the navigation items.\nexport function MNavbar({\n container = 'content',\n padded = true,\n bordered = true,\n sticky = false,\n tone = 'surface',\n justify = 'between',\n wrap = false,\n mobileMenu = 'dropdown',\n mobileMenuContent,\n mobileMenuFooter,\n collapseActions = false,\n mobileMenuLabel = 'Open navigation',\n mobileBreakpoint = MShellBreakpoints.compact,\n hidden,\n className,\n children,\n ...rest\n}: MNavbarProps) {\n const [open, setOpen] = useState(false)\n const rootRef = useRef<HTMLElement | null>(null)\n const menuId = useId()\n const mobile = useMaxWidth(mobileBreakpoint)\n\n const childArray = Children.toArray(children)\n\n const mobileNavs = findNavLikeChildren(children).map((element, index) =>\n cloneElement(element, {\n key: `mnavbar-mobile-navs-${index}`,\n orientation: 'vertical',\n })\n )\n\n const toggleButton = (\n <MButton\n key=\"mnavbar-toggle\"\n type=\"button\"\n variant=\"ghost\"\n size=\"md\"\n shape=\"circle\"\n iconOnly\n className=\"navbar-toggle\"\n aria-label={mobileMenuLabel}\n aria-expanded={open}\n aria-controls={menuId}\n onClick={handleToggleClick}\n >\n <MMenuIcon />\n </MButton>\n )\n\n let lastInlineIndex = -1\n for (let index = childArray.length - 1; index >= 0; index -= 1) {\n const child = childArray[index]\n if (isValidElement(child) && child.type === MInline) {\n lastInlineIndex = index\n break\n }\n }\n\n // When collapseActions is on and we're below the breakpoint, the last inline\n // (usually theme / lang / search) is pulled out of the bar and rendered in\n // the mobile menu footer. The burger toggle then attaches to the previous\n // inline (typically primary actions) — or sits on its own when none exists.\n const shouldCollapseLastInline = collapseActions && mobile && lastInlineIndex !== -1\n let collapsedActionsInline: ReactElement<MInlineProps> | null = null\n let workingChildren = childArray\n let toggleHostIndex = lastInlineIndex\n if (shouldCollapseLastInline) {\n collapsedActionsInline = childArray[lastInlineIndex] as ReactElement<MInlineProps>\n workingChildren = childArray.filter((_, index) => index !== lastInlineIndex)\n toggleHostIndex = -1\n for (let index = workingChildren.length - 1; index >= 0; index -= 1) {\n const child = workingChildren[index]\n if (isValidElement(child) && child.type === MInline) {\n toggleHostIndex = index\n break\n }\n }\n }\n\n const renderedChildren =\n toggleHostIndex === -1\n ? [...workingChildren, toggleButton]\n : workingChildren.map((child, index) => {\n if (index !== toggleHostIndex) return child\n const inlineChild = child as ReactElement<MInlineProps>\n const inlineChildren = Children.toArray(inlineChild.props.children)\n return cloneElement(inlineChild, {\n key: inlineChild.key ?? `mnavbar-inline-${index}`,\n children: [...inlineChildren, toggleButton],\n })\n })\n\n useEffect(() => {\n if (!open) return\n\n function handlePointerDown(event: PointerEvent) {\n const root = rootRef.current\n if (!root) return\n if (event.target instanceof Node && root.contains(event.target)) return\n setOpen(false)\n }\n\n function handleKeydown(event: KeyboardEvent) {\n if (event.key === 'Escape') setOpen(false)\n }\n\n document.addEventListener('pointerdown', handlePointerDown)\n document.addEventListener('keydown', handleKeydown)\n return () => {\n document.removeEventListener('pointerdown', handlePointerDown)\n document.removeEventListener('keydown', handleKeydown)\n }\n }, [open])\n\n useEffect(() => {\n if (!mobile) {\n setOpen(false)\n }\n }, [mobile])\n\n function handleToggleClick() {\n setOpen((previous) => !previous)\n }\n\n function handleMenuClick(event: ReactMouseEvent<HTMLDivElement>) {\n const target = event.target as HTMLElement | null\n if (!target) return\n if (target.closest('a, [role=\"menuitem\"]')) {\n setOpen(false)\n }\n }\n\n return (\n <nav\n ref={rootRef}\n className={cn(\n 'navbar',\n tone,\n bordered && 'bordered',\n sticky && 'sticky',\n mobile && 'mobile-view',\n open && 'mobile-open',\n `mobile-${mobileMenu}`,\n className\n )}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n <MContainer size={container} padded={padded} className=\"container\">\n <div className={cn('inner', justify, wrap && 'wrap')}>{renderedChildren}</div>\n </MContainer>\n\n {mobileMenu === 'drawer' && <div className={cn('mobile-backdrop', open && 'visible')} aria-hidden />}\n\n <div\n id={menuId}\n className={cn('mobile-menu', mobileMenu, open && 'open')}\n role=\"menu\"\n aria-hidden={!open || undefined}\n onClick={handleMenuClick}\n >\n {mobileNavs}\n {mobileMenuContent}\n {collapsedActionsInline ? (\n <div className=\"mobile-menu-footer\">\n {cloneElement(collapsedActionsInline, {\n key: 'mnavbar-collapsed-actions',\n })}\n </div>\n ) : null}\n {mobileMenuFooter ? <div className=\"mobile-menu-footer\">{mobileMenuFooter}</div> : null}\n </div>\n </nav>\n )\n}\n","import type React from 'react'\nimport type {MSectionProps} from './MSection.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport './MSection.css'\n\n// Render a semantic page section with predefined spacing and tone.\nexport function MSection({\n as = 'section',\n spacing = 'lg',\n tone = 'default',\n hidden,\n className,\n style,\n children,\n ...rest\n}: MSectionProps) {\n const Component = as\n\n return (\n <Component\n className={cn('section', spacing, tone, className)}\n style={style}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n {children}\n </Component>\n )\n}\n","import type {MStatGridProps} from './MStatGrid.types'\nimport {MSimpleGrid} from '../MSimpleGrid'\n\nexport function MStatGrid<T>({\n items,\n renderItem,\n children,\n columns = 4,\n minItemWidth = '15rem',\n ...rest\n}: MStatGridProps<T>) {\n return (\n <MSimpleGrid columns={columns} minItemWidth={minItemWidth} {...rest}>\n {items && renderItem ? items.map((item, index) => renderItem(item, index)) : children}\n </MSimpleGrid>\n )\n}\n","import type {MDividerProps} from './MDivider.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {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 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)}\n {...rest}\n />\n )\n}\n","import {createContext, useContext, useState, useEffect, useCallback, useMemo} from 'react'\nimport {cn} from '../../../utils/cn'\nimport {MButton} from '../../controls'\nimport {MChevronRightIcon, MMenuIcon} from '../../../icons'\nimport {MDropdownMenu, MTooltip} from '../../overlays'\nimport {MShellBreakpoints, useMaxWidth} from '../../../theme'\nimport type {\n MSidebarProps,\n MSidebarHeaderProps,\n MSidebarBodyProps,\n MSidebarNavProps,\n MSidebarItemProps,\n MSidebarGroupProps,\n MSidebarFooterProps,\n MSidebarDividerProps,\n MSidebarMode,\n} from './MSidebar.types'\nimport './MSidebar.css'\n\nconst STORAGE_KEY = 'mineralui-sidebar'\n\ninterface SidebarContextValue {\n mode: MSidebarMode\n mobile: boolean\n mobileOpen: boolean\n canToggle: boolean\n toggleMode: () => void\n}\n\nconst SidebarCtx = createContext<SidebarContextValue>({\n mode: 'expanded',\n mobile: false,\n mobileOpen: false,\n canToggle: false,\n toggleMode: () => {},\n})\n\n// Read shared sidebar state inside slot components.\nfunction useSidebar() {\n return useContext(SidebarCtx)\n}\n\n// Render the sidebar shell and coordinate desktop and mobile behavior.\nexport function MSidebar({\n mode: modeProp = 'auto',\n defaultMode = 'expanded',\n onModeChange,\n persist = false,\n side = 'left',\n tone = 'subtle',\n bordered = true,\n mobileBreakpoint = MShellBreakpoints.mobile,\n compactBreakpoint = MShellBreakpoints.compact,\n className,\n style,\n children,\n}: MSidebarProps) {\n const resolvedCompactBreakpoint = Math.max(compactBreakpoint, mobileBreakpoint)\n const mobile = useMaxWidth(mobileBreakpoint)\n const compactViewport = useMaxWidth(resolvedCompactBreakpoint)\n const compact = !mobile && compactViewport\n const [mobileOpen, setMobileOpen] = useState(false)\n\n const [internalMode, setInternalMode] = useState<MSidebarMode>(() => {\n if (persist) {\n try {\n const v = localStorage.getItem(STORAGE_KEY)\n if (v === 'expanded' || v === 'collapsed') return v\n } catch {\n /* noop */\n }\n }\n\n return defaultMode\n })\n\n const resolvedMode: MSidebarMode = mobile\n ? 'expanded'\n : compact\n ? 'collapsed'\n : modeProp === 'auto'\n ? internalMode\n : modeProp === 'collapsed'\n ? 'collapsed'\n : 'expanded'\n\n // MToggle only the desktop width state. Mobile uses its own overlay flow.\n const toggleMode = useCallback(() => {\n const next: MSidebarMode = resolvedMode === 'expanded' ? 'collapsed' : 'expanded'\n\n setInternalMode(next)\n onModeChange?.(next)\n\n if (persist) {\n try {\n localStorage.setItem(STORAGE_KEY, next)\n } catch {\n /* noop */\n }\n }\n }, [resolvedMode, onModeChange, persist])\n\n const closeMobile = useCallback(() => setMobileOpen(false), [])\n\n // Let Escape close the temporary mobile drawer.\n useEffect(() => {\n if (!mobileOpen) return\n\n const handler = (e: KeyboardEvent) => {\n if (e.key === 'Escape') setMobileOpen(false)\n }\n\n document.addEventListener('keydown', handler)\n return () => document.removeEventListener('keydown', handler)\n }, [mobileOpen])\n\n useEffect(() => {\n if (!mobile) {\n setMobileOpen(false)\n }\n }, [mobile])\n\n const canToggle = !mobile && !compact && modeProp === 'auto'\n\n const ctx = useMemo<SidebarContextValue>(\n () => ({mode: resolvedMode, mobile, mobileOpen, canToggle, toggleMode}),\n [resolvedMode, mobile, mobileOpen, canToggle, toggleMode]\n )\n\n const isCollapsed = !mobile && resolvedMode === 'collapsed'\n\n const sidebarCls = cn(\n 'sidebar',\n tone,\n side,\n isCollapsed && 'collapsed',\n compact && 'compact',\n bordered && 'bordered',\n mobile && 'mobile',\n mobile && mobileOpen && 'mobile-open',\n className\n )\n\n return (\n <SidebarCtx.Provider value={ctx}>\n {mobile && mobileOpen && <div className=\"sidebar-backdrop\" onClick={closeMobile} />}\n\n <aside className={sidebarCls} style={style}>\n {children}\n </aside>\n\n {mobile && !mobileOpen && (\n <button\n className={cn('sidebar-hamburger', side)}\n onClick={() => setMobileOpen(true)}\n aria-label=\"Open menu\"\n >\n <span className=\"sidebar-hamburger-icon\" aria-hidden=\"true\">\n <MMenuIcon />\n </span>\n </button>\n )}\n </SidebarCtx.Provider>\n )\n}\n\n// Render the top area with branding and an optional collapse toggle.\nexport function MSidebarHeader({bordered = false, className, children}: MSidebarHeaderProps) {\n const {mode, mobile, canToggle, toggleMode} = useSidebar()\n const isCollapsed = !mobile && mode === 'collapsed'\n\n return (\n <div className={cn('sidebar-header', bordered && 'bordered', className)}>\n <div className=\"sidebar-header-content\">{children}</div>\n {canToggle && (\n <MButton\n variant=\"outlined\"\n color=\"neutral\"\n iconOnly\n size=\"sm\"\n onClick={toggleMode}\n aria-label={isCollapsed ? 'Expand sidebar' : 'Collapse sidebar'}\n className=\"sidebar-toggle\"\n >\n <span className={cn('sidebar-chevron', isCollapsed && 'flipped')}>\n <MChevronRightIcon />\n </span>\n </MButton>\n )}\n </div>\n )\n}\n\n// Wrap the scrollable middle area between header and footer.\nexport function MSidebarBody({className, children}: MSidebarBodyProps) {\n return <div className={cn('sidebar-body', className)}>{children}</div>\n}\n\n// Wrap sidebar links in a navigation landmark.\nexport function MSidebarNav({className, children}: MSidebarNavProps) {\n return <nav className={cn('sidebar-nav', className)}>{children}</nav>\n}\n\n// Render one clickable sidebar row as a link, button or custom component.\nexport function MSidebarItem({\n icon,\n label,\n description,\n href,\n to,\n onClick,\n active = false,\n disabled = false,\n badge,\n color,\n component,\n className,\n}: MSidebarItemProps) {\n const {mode, mobile} = useSidebar()\n const isCollapsed = !mobile && mode === 'collapsed'\n\n // ONE tooltip per row: prefer description, fall back to label. The HTML\n // title attribute used in collapsed mode mirrors the same priority but is\n // limited to strings (browsers can't render ReactNodes).\n const tooltipContent = description ?? label\n const titleAttr = typeof description === 'string'\n ? description\n : typeof label === 'string'\n ? label\n : undefined\n\n const Tag = component ?? (href || to ? 'a' : 'button')\n const linkProps = component ? (to ? {to} : href ? {href} : {}) : href ? {href} : to ? {href: to} : {}\n const cls = cn('sidebar-item', active && 'active', disabled && 'disabled', color, className)\n\n return (\n <Tag\n className={cls}\n onClick={disabled ? undefined : onClick}\n aria-disabled={disabled || undefined}\n title={isCollapsed ? titleAttr : undefined}\n {...linkProps}\n >\n {icon && <span className=\"sidebar-item-icon\">{icon}</span>}\n {!isCollapsed && (\n <MTooltip content={tooltipContent} placement=\"top\" className=\"sidebar-item-label-tooltip\">\n <span className=\"sidebar-item-label\">{label}</span>\n </MTooltip>\n )}\n {!isCollapsed && badge && <span className=\"sidebar-item-badge\">{badge}</span>}\n </Tag>\n )\n}\n\n// Group related sidebar items and swap to a dropdown when collapsed.\nexport function MSidebarGroup({\n label,\n icon,\n active = false,\n defaultOpen = true,\n collapsible = true,\n children,\n className,\n}: MSidebarGroupProps) {\n const sidebarCtx = useSidebar()\n const {mode, mobile} = sidebarCtx\n const isCollapsed = !mobile && mode === 'collapsed'\n const [open, setOpen] = useState(defaultOpen)\n\n const expandedCtx = useMemo<SidebarContextValue>(() => ({...sidebarCtx, mode: 'expanded'}), [sidebarCtx])\n\n // Keep expand/collapse local to this group.\n const toggle = () => {\n if (collapsible) setOpen((o) => !o)\n }\n\n if (isCollapsed) {\n const trigger = (\n <span className={cn('sidebar-group-icon collapsed', active && 'active')} title={label}>\n {icon}\n </span>\n )\n\n return (\n <div className={cn('sidebar-group', className)}>\n <MDropdownMenu trigger={trigger} placement=\"right-start\" closeOnSelect openOn=\"hover\">\n <SidebarCtx.Provider value={expandedCtx}>{children}</SidebarCtx.Provider>\n </MDropdownMenu>\n </div>\n )\n }\n\n return (\n <div className={cn('sidebar-group', className)}>\n <button className={cn('sidebar-group-header', active && 'active')} onClick={toggle} aria-expanded={open}>\n {icon && <span className=\"sidebar-group-icon\">{icon}</span>}\n <span className=\"sidebar-group-label\">{label}</span>\n {collapsible && (\n <span className={cn('sidebar-group-arrow', open && 'open')}>\n <MChevronRightIcon />\n </span>\n )}\n </button>\n {open && <div className=\"sidebar-group-items\">{children}</div>}\n </div>\n )\n}\n\n// Render the bottom slot for version info or quick actions.\nexport function MSidebarFooter({bordered = false, className, children}: MSidebarFooterProps) {\n return <div className={cn('sidebar-footer', bordered && 'bordered', className)}>{children}</div>\n}\n\n// Render a spacing-aware divider between sidebar regions.\nexport function MSidebarDivider({className, spacing = 'md'}: MSidebarDividerProps) {\n return <hr className={cn('sidebar-divider', spacing, className)} />\n}\n","import {useMemo} from 'react'\nimport {cn} from '../../../utils/cn'\nimport type {MBreadcrumbProps} from './MBreadcrumb.types'\nimport './MBreadcrumb.css'\n\n// Render a compact path and collapse the middle when needed.\nexport function MBreadcrumb({items, separator = '/', maxItems, className, ...rest}: MBreadcrumbProps) {\n // Keep the current page visible while shortening deep paths.\n const visible = useMemo(() => {\n if (!maxItems || maxItems >= items.length) return items\n if (maxItems < 2) return [items[items.length - 1]]\n const head = items.slice(0, 1)\n const tail = items.slice(-(maxItems - 1))\n return [...head, null, ...tail]\n }, [items, maxItems])\n\n return (\n <nav aria-label=\"breadcrumb\" className={cn('breadcrumb', className)} {...rest}>\n <ol className=\"trail\">\n {visible.map((item, i) => {\n if (item === null) {\n return (\n <li key=\"ellipsis\" className=\"crumb dots\">\n <span className=\"sep\">{separator}</span>\n <span>&#8230;</span>\n </li>\n )\n }\n\n const isLast = i === visible.length - 1\n\n return (\n <li key={i} className={cn('crumb', isLast && 'active')}>\n {i > 0 && <span className=\"sep\">{separator}</span>}\n {item.href && !isLast ? (\n <a href={item.href} className=\"link\" onClick={item.onClick}>\n {item.label}\n </a>\n ) : item.onClick && !isLast ? (\n <button type=\"button\" className=\"link btn\" onClick={item.onClick}>\n {item.label}\n </button>\n ) : (\n <span className=\"current\" aria-current={isLast ? 'page' : undefined}>\n {item.label}\n </span>\n )}\n </li>\n )\n })}\n </ol>\n </nav>\n )\n}\n","import {forwardRef, Children, isValidElement} from 'react'\nimport type * as React from 'react'\nimport type {MAppShellProps, MBodyProps} from './MAppShell.types'\nimport {cn} from '../../../utils/cn'\nimport {MSidebar} from '../MSidebar'\nimport './MAppShell.css'\n\nexport const MAppShell = forwardRef<HTMLDivElement, MAppShellProps>(function MAppShell(\n {className, children, ...rest},\n ref\n) {\n const sidebarElements: React.ReactNode[] = []\n const otherElements: React.ReactNode[] = []\n\n Children.forEach(children, (child) => {\n if (isValidElement(child) && child.type === MSidebar) {\n sidebarElements.push(child)\n } else {\n otherElements.push(child)\n }\n })\n\n return (\n <div ref={ref} className={cn('app-shell', className)} {...rest}>\n {sidebarElements}\n <div className=\"app-main\">{otherElements}</div>\n </div>\n )\n})\n\nexport const MBody = forwardRef<HTMLDivElement, MBodyProps>(function MBody({className, children, ...rest}, ref) {\n return (\n <div ref={ref} className={cn('app-body', className)} {...rest}>\n {children}\n </div>\n )\n})\n","import {useEffect, useRef, useState, type ReactNode} from 'react'\n\ninterface ScaleToFitProps {\n /**\n * Minimum render width (in CSS px). When the parent is narrower, content\n * is rendered at this width and scaled down. When the parent is wider,\n * content is rendered at the parent's width (no scale-up, no padding).\n */\n baseWidth?: number\n children: ReactNode\n}\n\n/**\n * Renders `children` at `max(baseWidth, parentWidth)`, then applies\n * `transform: scale(...)` so the rendered block fits the parent box without\n * scrollbars. Scale never exceeds 1 (no blurry up-scaling). When the parent\n * is wider than baseWidth, render width tracks the parent so content fills\n * the available space natively (no horizontal padding).\n */\nexport function ScaleToFit({baseWidth = 480, children}: ScaleToFitProps) {\n const wrapperRef = useRef<HTMLDivElement>(null)\n const contentRef = useRef<HTMLDivElement>(null)\n const [scale, setScale] = useState(1)\n const [renderWidth, setRenderWidth] = useState<number>(baseWidth)\n\n useEffect(() => {\n const wrap = wrapperRef.current\n const content = contentRef.current\n if (!wrap || !content) return\n\n let frame = 0\n const recompute = () => {\n cancelAnimationFrame(frame)\n frame = requestAnimationFrame(() => {\n const wW = wrap.clientWidth\n const wH = wrap.clientHeight\n if (wW === 0 || wH === 0) return\n const cW = Math.max(baseWidth, wW)\n const cH = content.offsetHeight\n if (cW === 0 || cH === 0) return\n const sW = wW / cW\n const sH = wH / cH\n const next = Math.min(sW, sH, 1)\n if (next > 0 && Number.isFinite(next)) {\n setRenderWidth(cW)\n setScale(next)\n }\n })\n }\n\n const ro = new ResizeObserver(recompute)\n ro.observe(wrap)\n ro.observe(content)\n recompute()\n return () => {\n cancelAnimationFrame(frame)\n ro.disconnect()\n }\n }, [baseWidth])\n\n return (\n <div ref={wrapperRef} className=\"canvas-grid-scale-wrapper\">\n <div\n ref={contentRef}\n className=\"canvas-grid-scale-content\"\n style={{width: `${renderWidth}px`, transform: `scale(${scale})`}}\n >\n {children}\n </div>\n </div>\n )\n}\n","import {forwardRef, useCallback, useEffect, useRef, useState} from 'react'\nimport type {CSSProperties, ForwardedRef, PointerEvent as ReactPointerEvent, ReactElement, Ref} from 'react'\nimport type {MCanvasGridItem, MCanvasGridPosition, MCanvasGridProps} from './MCanvasGrid.types'\nimport {cn} from '../../../utils/cn'\nimport {MShellBreakpoints, useMaxWidth} from '../../../theme'\nimport {MEditIcon, MMoveIcon, MTrashIcon, MZoomInIcon} from '../../../icons'\nimport {MButton} from '../../controls/MButton'\nimport {MButtonGroup} from '../../controls/MButtonGroup'\nimport {ScaleToFit} from './ScaleToFit'\nimport './MCanvasGrid.css'\n\ninterface DragState {\n itemId: string\n mode: 'drag' | 'resize'\n startClientX: number\n startClientY: number\n original: MCanvasGridPosition\n}\n\nfunction clamp(value: number, min: number, max: number) {\n return Math.max(min, Math.min(max, value))\n}\n\nfunction MCanvasGridInner<T extends MCanvasGridItem>(\n {\n columns = 24,\n rows = 24,\n snap = 4,\n items,\n renderItem,\n minItemSize,\n maxItemSize: _maxItemSize,\n editable = false,\n onItemMove,\n onItemResize,\n onItemRemove,\n onItemEdit,\n onItemExpand,\n guides = 'always',\n compactBreakpoint = MShellBreakpoints.compact,\n mobileBreakpoint = MShellBreakpoints.mobile,\n height,\n fitContent = 'scroll',\n fitContentBaseWidth = 480,\n className,\n style,\n }: MCanvasGridProps<T>,\n ref: ForwardedRef<HTMLDivElement>\n) {\n const innerRef = useRef<HTMLDivElement | null>(null)\n const [size, setSize] = useState({width: 0, height: 0})\n const [drag, setDrag] = useState<DragState | null>(null)\n const [preview, setPreview] = useState<MCanvasGridPosition | null>(null)\n const [touchOrder, setTouchOrder] = useState<Record<string, number>>({})\n const touchCounterRef = useRef(0)\n\n function bringToFront(itemId: string) {\n touchCounterRef.current += 1\n setTouchOrder((prev) => ({...prev, [itemId]: touchCounterRef.current}))\n }\n\n function suppressNextClick() {\n let armed = true\n const stopper = (ev: MouseEvent) => {\n if (!armed) return\n armed = false\n ev.stopPropagation()\n ev.preventDefault()\n window.removeEventListener('click', stopper, true)\n }\n window.addEventListener('click', stopper, true)\n window.setTimeout(() => {\n if (!armed) return\n armed = false\n window.removeEventListener('click', stopper, true)\n }, 60)\n }\n\n const isMobile = useMaxWidth(mobileBreakpoint)\n const isCompact = useMaxWidth(compactBreakpoint) && !isMobile\n\n const totalCols = columns * snap\n const totalRows = rows * snap\n const effectiveCols = isCompact ? Math.max(1, Math.round(totalCols / 2)) : totalCols\n const effectiveRows = isCompact ? Math.max(1, Math.round(totalRows / 2)) : totalRows\n const effectiveCells = isCompact ? Math.max(1, Math.round(columns / 2)) : columns\n const effectiveRowCells = isCompact ? Math.max(1, Math.round(rows / 2)) : rows\n\n const interactive = editable && !isMobile\n\n useEffect(() => {\n const node = innerRef.current\n if (!node || typeof ResizeObserver === 'undefined') return\n const update = () => setSize({width: node.clientWidth, height: node.clientHeight})\n update()\n const observer = new ResizeObserver(update)\n observer.observe(node)\n return () => observer.disconnect()\n }, [])\n\n const setRefs = useCallback(\n (node: HTMLDivElement | null) => {\n innerRef.current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) (ref as {current: HTMLDivElement | null}).current = node\n },\n [ref]\n )\n\n function getMin(item: T) {\n const m = minItemSize?.(item)\n if (!m) return {w: snap, h: snap}\n return {w: Math.max(snap, m.w * snap), h: Math.max(snap, m.h * snap)}\n }\n\n function startResize(e: ReactPointerEvent<HTMLDivElement>, item: T) {\n if (!interactive) return\n e.stopPropagation()\n e.preventDefault()\n ;(e.currentTarget as Element).setPointerCapture(e.pointerId)\n bringToFront(item.id)\n setDrag({\n itemId: item.id,\n mode: 'resize',\n startClientX: e.clientX,\n startClientY: e.clientY,\n original: {...item.position},\n })\n setPreview({...item.position})\n }\n\n function startDragFromHeader(e: ReactPointerEvent<HTMLDivElement>, item: T) {\n if (!interactive) return\n if ((e.target as Element).closest('button, [role=\"button\"]')) return\n e.stopPropagation()\n e.preventDefault()\n ;(e.currentTarget as Element).setPointerCapture(e.pointerId)\n bringToFront(item.id)\n setDrag({\n itemId: item.id,\n mode: 'drag',\n startClientX: e.clientX,\n startClientY: e.clientY,\n original: {...item.position},\n })\n setPreview({...item.position})\n }\n\n function handlePointerMove(e: ReactPointerEvent<HTMLDivElement>) {\n if (!drag || size.width === 0 || size.height === 0) return\n const cellPxX = size.width / effectiveCols\n const cellPxY = size.height / effectiveRows\n const dx = Math.round((e.clientX - drag.startClientX) / cellPxX)\n const dy = Math.round((e.clientY - drag.startClientY) / cellPxY)\n const original = drag.original\n\n const targetItem = items.find((it) => it.id === drag.itemId)\n const min = targetItem ? getMin(targetItem) : {w: snap, h: snap}\n\n if (drag.mode === 'drag') {\n const x = clamp(original.x + dx, 0, effectiveCols - original.w)\n const y = clamp(original.y + dy, 0, effectiveRows - original.h)\n setPreview({x, y, w: original.w, h: original.h})\n } else {\n const w = clamp(original.w + dx, min.w, effectiveCols - original.x)\n const h = clamp(original.h + dy, min.h, effectiveRows - original.y)\n setPreview({x: original.x, y: original.y, w, h})\n }\n }\n\n function handlePointerUp(e: ReactPointerEvent<HTMLDivElement>) {\n if (!drag) return\n try {\n ;(e.currentTarget as Element).releasePointerCapture(e.pointerId)\n } catch {\n // pointer may have already been released\n }\n if (preview) {\n if (drag.mode === 'drag') onItemMove?.(drag.itemId, preview)\n else onItemResize?.(drag.itemId, preview)\n }\n setDrag(null)\n setPreview(null)\n }\n\n function handleHeaderPointerUp(e: ReactPointerEvent<HTMLDivElement>) {\n if (drag) {\n suppressNextClick()\n handlePointerUp(e)\n }\n }\n\n const guidesOn =\n guides === 'always' ||\n (guides === 'on-edit' && interactive) ||\n (guides === 'on-drag' && drag !== null)\n\n const heightStyle: CSSProperties | undefined =\n height !== undefined ? {height: typeof height === 'number' ? `${height}px` : height} : undefined\n\n if (isMobile) {\n const ordered = [...items].sort((a, b) => a.position.y - b.position.y)\n return (\n <div\n ref={setRefs}\n className={cn('canvas-grid', 'mobile', className)}\n data-guides=\"off\"\n style={{...heightStyle, ...style}}\n >\n {ordered.map((item) => (\n <div key={item.id} className=\"canvas-grid-item\">\n {renderItem(item)}\n </div>\n ))}\n </div>\n )\n }\n\n const gridStyle: CSSProperties = {\n ...heightStyle,\n ...style,\n gridTemplateColumns: `repeat(${effectiveCols}, 1fr)`,\n gridTemplateRows: `repeat(${effectiveRows}, 1fr)`,\n ['--canvas-grid-cells' as string]: String(effectiveCells),\n ['--canvas-grid-row-cells' as string]: String(effectiveRowCells),\n }\n\n const overlayCells = effectiveCells * effectiveRowCells\n\n return (\n <div\n ref={setRefs}\n className={cn('canvas-grid', isCompact && 'compact', interactive && 'editable', className)}\n data-guides={guidesOn ? 'on' : 'off'}\n style={gridStyle}\n >\n <div className=\"canvas-grid-overlay\" aria-hidden>\n {Array.from({length: overlayCells}, (_, idx) => {\n const isLastCol = (idx + 1) % effectiveCells === 0\n const isLastRow = idx >= overlayCells - effectiveCells\n return (\n <div\n key={idx}\n className={cn('canvas-grid-cell', isLastCol && 'no-right', isLastRow && 'no-bottom')}\n />\n )\n })}\n </div>\n\n {items.map((item) => {\n const isDragging = drag?.itemId === item.id\n const live = isDragging && preview ? preview : item.position\n // half-precision math for compact viewport\n const x = isCompact ? Math.round(live.x / 2) : live.x\n const y = isCompact ? Math.round(live.y / 2) : live.y\n const w = Math.max(1, isCompact ? Math.round(live.w / 2) : live.w)\n const h = Math.max(1, isCompact ? Math.round(live.h / 2) : live.h)\n\n const baseZ = 1 + (touchOrder[item.id] ?? 0)\n const itemStyle: CSSProperties = {\n gridColumn: `${x + 1} / span ${w}`,\n gridRow: `${y + 1} / span ${h}`,\n zIndex: isDragging ? baseZ + 100 : baseZ,\n }\n\n return (\n <div\n key={item.id}\n className={cn('canvas-grid-item', isDragging && 'dragging')}\n style={itemStyle}\n >\n <div\n className=\"canvas-grid-item-header\"\n onPointerDown={(e) => startDragFromHeader(e, item)}\n onPointerMove={handlePointerMove}\n onPointerUp={handleHeaderPointerUp}\n onPointerCancel={handlePointerUp}\n >\n <MButtonGroup variant=\"ghost\" size=\"xs\">\n {interactive && onItemEdit && (\n <MButton\n color=\"primary\"\n iconOnly\n aria-label=\"Edit tile\"\n startIcon={<MEditIcon />}\n onPointerDown={(e) => e.stopPropagation()}\n onClick={(e) => {\n e.stopPropagation()\n onItemEdit(item.id)\n }}\n />\n )}\n {onItemExpand && (\n <MButton\n color=\"primary\"\n iconOnly\n aria-label=\"Expand tile\"\n startIcon={<MZoomInIcon />}\n onPointerDown={(e) => e.stopPropagation()}\n onClick={(e) => {\n e.stopPropagation()\n onItemExpand(item.id)\n }}\n />\n )}\n {interactive && onItemRemove && (\n <MButton\n color=\"error\"\n iconOnly\n aria-label=\"Remove tile\"\n startIcon={<MTrashIcon />}\n onPointerDown={(e) => e.stopPropagation()}\n onClick={(e) => {\n e.stopPropagation()\n onItemRemove(item.id)\n }}\n />\n )}\n </MButtonGroup>\n </div>\n <div className=\"canvas-grid-item-body\">\n {fitContent === 'scale' ? (\n <ScaleToFit baseWidth={fitContentBaseWidth}>{renderItem(item)}</ScaleToFit>\n ) : (\n renderItem(item)\n )}\n </div>\n {!interactive && onItemExpand && (\n <MButton\n className=\"canvas-grid-view-expand-handle\"\n variant=\"filled\"\n shape=\"circle\"\n size=\"sm\"\n color=\"primary\"\n iconOnly\n aria-label=\"Expand tile\"\n startIcon={<MZoomInIcon />}\n onClick={(e) => {\n e.stopPropagation()\n onItemExpand(item.id)\n }}\n />\n )}\n {interactive && isDragging && (\n <div className=\"canvas-grid-item-glass\" aria-hidden>\n <MMoveIcon size={28} />\n </div>\n )}\n {interactive && (\n <div\n className=\"canvas-grid-resize-handle\"\n aria-hidden\n onPointerDown={(e) => startResize(e, item)}\n onPointerMove={handlePointerMove}\n onPointerUp={(e) => {\n if (drag) suppressNextClick()\n handlePointerUp(e)\n }}\n onPointerCancel={handlePointerUp}\n />\n )}\n </div>\n )\n })}\n </div>\n )\n}\n\nexport const MCanvasGrid = forwardRef(MCanvasGridInner) as <T extends MCanvasGridItem>(\n props: MCanvasGridProps<T> & {ref?: Ref<HTMLDivElement>}\n) => ReactElement | null\n","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 {\n children,\n top = 16,\n bottomGap = 16,\n hideScrollbar = true,\n draggable = true,\n className,\n style,\n ...rest\n },\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 onMouseDown={handleMouseDown}\n {...rest}\n >\n {children}\n </div>\n )\n})\n"],"mappings":";;;;;;;;;;;;;;AAOA,SAAgB,EAAW,EACvB,UAAO,WACP,YAAS,IACT,WACA,YACA,YACA,UACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,cACA,cACA,UACA,aACA,GAAG,KACa;CAChB,IAAM,IAAe,EAAuB,EAAC,UAAM,CAAC;AAEpD,QACI,kBAAC,OAAD;EACI,WAAW,EACP,aACA,GACA,KAAU,UACV,GAAG,EAA2B;GAC1B;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACH,CAAC,EACF,EACH;EACD,OAAO;GAAC,GAAG;GAAc,GAAG;GAAM;EAClC,GAAI,EAAe,EAAO;EAC1B,GAAI;EAEH;EACC,CAAA;;;;AC1Dd,SAAgB,EAAQ,EACpB,eAAY,QACZ,YAAS,IACT,cAAW,IACX,YAAS,IACT,UAAO,WACP,YAAS,SACT,WACA,cACA,aACA,GAAG,KACU;AACb,QACI,kBAAC,UAAD;EACI,WAAW,EAAG,UAAU,GAAM,KAAY,YAAY,KAAU,UAAU,EAAU;EACpF,GAAI,EAAe,EAAO;EAC1B,GAAI;YAEJ,kBAAC,GAAD;GAAY,MAAM;GAAmB;GAAQ,WAAW,EAAG,SAAS,UAAU,IAAS;GAClF;GACQ,CAAA;EACR,CAAA;;;;ACpBjB,SAAgB,EAAQ,EACpB,eAAY,QACZ,YAAS,IACT,cAAW,IACX,UAAO,WACP,WACA,YACA,YACA,UACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,cACA,cACA,UACA,aACA,GAAG,KACU;CACb,IAAM,IAAe,EAAuB,EAAC,UAAM,CAAC;AAEpD,QACI,kBAAC,UAAD;EACI,WAAW,EACP,UACA,GACA,KAAY,YACZ,GAAG,EAA2B;GAC1B;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACH,CAAC,EACF,EACH;EACD,OAAO;GAAC,GAAG;GAAc,GAAG;GAAM;EAClC,GAAI,EAAe,EAAO;EAC1B,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"}
1
+ {"version":3,"file":"layout-BuvV-N9H.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 spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n className,\n style,\n children,\n ...rest\n}: MContainerProps) {\n const utilityStyle = getLayoutUtilityStyles({fsize})\n\n return (\n <div\n className={cn(\n 'container',\n size,\n padded && 'padded',\n ...getLayoutUtilityClassNames({\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n }),\n className\n )}\n style={{...utilityStyle, ...style}}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n {children}\n </div>\n )\n}\n","import type {MHeaderProps} from './MHeader.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {MContainer} from '../MContainer'\nimport './MHeader.css'\n\n// Render a reusable page header shell aligned to a shared container.\nexport function MHeader({\n container = 'wide',\n padded = true,\n bordered = true,\n sticky = false,\n tone = 'surface',\n layout = 'split',\n hidden,\n className,\n children,\n ...rest\n}: MHeaderProps) {\n return (\n <header\n className={cn('header', tone, bordered && 'bordered', sticky && 'sticky', className)}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n <MContainer size={container} padded={padded} className={cn('inner', `layout-${layout}`)}>\n {children}\n </MContainer>\n </header>\n )\n}\n","import type {MFooterProps} from './MFooter.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {getLayoutUtilityClassNames, getLayoutUtilityStyles} from '../../../utils/layoutProps'\nimport {MContainer} from '../MContainer'\nimport './MFooter.css'\n\n// Render a reusable page footer shell with shared spacing utilities.\nexport function MFooter({\n container = 'wide',\n padded = true,\n bordered = true,\n tone = 'surface',\n hidden,\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n className,\n style,\n children,\n ...rest\n}: MFooterProps) {\n const utilityStyle = getLayoutUtilityStyles({fsize})\n\n return (\n <footer\n className={cn(\n 'footer',\n tone,\n bordered && 'bordered',\n ...getLayoutUtilityClassNames({\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n }),\n className\n )}\n style={{...utilityStyle, ...style}}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n <MContainer size={container} padded={padded} className=\"inner\" fullWidth>\n {children}\n </MContainer>\n </footer>\n )\n}\n","import type {MNavsProps} from './MNavs.types'\nimport {cn} from '../../../utils/cn'\nimport {MLink} from '../../typography'\nimport './MNavs.css'\n\n// Render a lightweight navigation list from data or custom children.\nexport function MNavs({items, orientation = 'horizontal', wrap = false, className, children, ...rest}: MNavsProps) {\n return (\n <div className={cn('navs', orientation, wrap && 'wrap', className)} {...rest}>\n {items\n ? items.map((item) => {\n const Icon = item.icon\n const hideLabel = item.iconOnly === true && Icon != null\n const labelAsString = typeof item.label === 'string' ? item.label : undefined\n const ariaLabel = hideLabel ? labelAsString : undefined\n const linkTitle = item.title ?? (hideLabel ? labelAsString : undefined)\n\n return (\n <MLink\n key={item.key ?? item.href ?? item.title?.toString() ?? labelAsString ?? ''}\n component={item.component}\n href={item.href}\n to={item.to}\n target={item.target}\n rel={item.rel}\n title={linkTitle}\n current={item.current}\n disabled={item.disabled}\n className={cn('link', hideLabel && 'icon-only', item.className)}\n aria-label={ariaLabel}\n >\n {Icon ? (\n <span className=\"icon\" aria-hidden={!hideLabel || undefined}>\n <Icon size={item.iconSize} />\n </span>\n ) : null}\n {!hideLabel ? item.label : null}\n </MLink>\n )\n })\n : children}\n </div>\n )\n}\n","import {Children, cloneElement, isValidElement, useEffect, useId, useRef, useState} from 'react'\nimport type {MouseEvent as ReactMouseEvent, ReactElement, ReactNode} from 'react'\nimport type {MNavbarProps} from './MNavbar.types'\nimport {getHiddenProps, MShellBreakpoints, useMaxWidth} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {MContainer} from '../MContainer'\nimport {MInline} from '../MInline'\nimport type {MInlineProps} from '../MInline'\nimport {MNavs} from '../MNavs'\nimport {MButton} from '../../controls/MButton'\nimport {MMenuIcon} from '../../../icons'\nimport './MNavbar.css'\n\ntype NavLikeElement = ReactElement<{children?: ReactNode; orientation?: 'horizontal' | 'vertical'}>\n\n// Walks the children tree (any depth) looking for MNavs instances so the navbar\n// can pull them into the mobile menu even when wrapped in MInline / MStack.\nfunction findNavLikeChildren(children: ReactNode, found: NavLikeElement[] = []): NavLikeElement[] {\n Children.forEach(children, (child) => {\n if (!isValidElement(child)) {\n return\n }\n if (child.type === MNavs) {\n found.push(child as NavLikeElement)\n return\n }\n const nestedChildren = (child.props as {children?: ReactNode} | null)?.children\n if (nestedChildren !== undefined) {\n findNavLikeChildren(nestedChildren, found)\n }\n })\n return found\n}\n\n// Render a horizontal app or site navigation shell with container alignment.\n// Below the md breakpoint MNavs children are collapsed behind a hamburger toggle\n// that opens either a dropdown panel or a side drawer with the navigation items.\nexport function MNavbar({\n container = 'content',\n padded = true,\n bordered = true,\n sticky = false,\n tone = 'surface',\n justify = 'between',\n wrap = false,\n mobileMenu = 'dropdown',\n mobileMenuContent,\n mobileMenuFooter,\n collapseActions = false,\n mobileMenuLabel = 'Open navigation',\n mobileBreakpoint = MShellBreakpoints.compact,\n hidden,\n className,\n children,\n ...rest\n}: MNavbarProps) {\n const [open, setOpen] = useState(false)\n const rootRef = useRef<HTMLElement | null>(null)\n const menuId = useId()\n const mobile = useMaxWidth(mobileBreakpoint)\n\n const childArray = Children.toArray(children)\n\n const mobileNavs = findNavLikeChildren(children).map((element, index) =>\n cloneElement(element, {\n key: `mnavbar-mobile-navs-${index}`,\n orientation: 'vertical',\n })\n )\n\n const toggleButton = (\n <MButton\n key=\"mnavbar-toggle\"\n type=\"button\"\n variant=\"ghost\"\n size=\"md\"\n shape=\"circle\"\n iconOnly\n className=\"navbar-toggle\"\n aria-label={mobileMenuLabel}\n aria-expanded={open}\n aria-controls={menuId}\n onClick={handleToggleClick}\n >\n <MMenuIcon />\n </MButton>\n )\n\n let lastInlineIndex = -1\n for (let index = childArray.length - 1; index >= 0; index -= 1) {\n const child = childArray[index]\n if (isValidElement(child) && child.type === MInline) {\n lastInlineIndex = index\n break\n }\n }\n\n // When collapseActions is on and we're below the breakpoint, the last inline\n // (usually theme / lang / search) is pulled out of the bar and rendered in\n // the mobile menu footer. The burger toggle then attaches to the previous\n // inline (typically primary actions) — or sits on its own when none exists.\n const shouldCollapseLastInline = collapseActions && mobile && lastInlineIndex !== -1\n let collapsedActionsInline: ReactElement<MInlineProps> | null = null\n let workingChildren = childArray\n let toggleHostIndex = lastInlineIndex\n if (shouldCollapseLastInline) {\n collapsedActionsInline = childArray[lastInlineIndex] as ReactElement<MInlineProps>\n workingChildren = childArray.filter((_, index) => index !== lastInlineIndex)\n toggleHostIndex = -1\n for (let index = workingChildren.length - 1; index >= 0; index -= 1) {\n const child = workingChildren[index]\n if (isValidElement(child) && child.type === MInline) {\n toggleHostIndex = index\n break\n }\n }\n }\n\n const renderedChildren =\n toggleHostIndex === -1\n ? [...workingChildren, toggleButton]\n : workingChildren.map((child, index) => {\n if (index !== toggleHostIndex) return child\n const inlineChild = child as ReactElement<MInlineProps>\n const inlineChildren = Children.toArray(inlineChild.props.children)\n return cloneElement(inlineChild, {\n key: inlineChild.key ?? `mnavbar-inline-${index}`,\n children: [...inlineChildren, toggleButton],\n })\n })\n\n useEffect(() => {\n if (!open) return\n\n function handlePointerDown(event: PointerEvent) {\n const root = rootRef.current\n if (!root) return\n if (event.target instanceof Node && root.contains(event.target)) return\n setOpen(false)\n }\n\n function handleKeydown(event: KeyboardEvent) {\n if (event.key === 'Escape') setOpen(false)\n }\n\n document.addEventListener('pointerdown', handlePointerDown)\n document.addEventListener('keydown', handleKeydown)\n return () => {\n document.removeEventListener('pointerdown', handlePointerDown)\n document.removeEventListener('keydown', handleKeydown)\n }\n }, [open])\n\n useEffect(() => {\n if (!mobile) {\n setOpen(false)\n }\n }, [mobile])\n\n function handleToggleClick() {\n setOpen((previous) => !previous)\n }\n\n function handleMenuClick(event: ReactMouseEvent<HTMLDivElement>) {\n const target = event.target as HTMLElement | null\n if (!target) return\n if (target.closest('a, [role=\"menuitem\"]')) {\n setOpen(false)\n }\n }\n\n return (\n <nav\n ref={rootRef}\n className={cn(\n 'navbar',\n tone,\n bordered && 'bordered',\n sticky && 'sticky',\n mobile && 'mobile-view',\n open && 'mobile-open',\n `mobile-${mobileMenu}`,\n className\n )}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n <MContainer size={container} padded={padded} className=\"container\">\n <div className={cn('inner', justify, wrap && 'wrap')}>{renderedChildren}</div>\n </MContainer>\n\n {mobileMenu === 'drawer' && <div className={cn('mobile-backdrop', open && 'visible')} aria-hidden />}\n\n <div\n id={menuId}\n className={cn('mobile-menu', mobileMenu, open && 'open')}\n role=\"menu\"\n aria-hidden={!open || undefined}\n onClick={handleMenuClick}\n >\n {mobileNavs}\n {mobileMenuContent}\n {collapsedActionsInline ? (\n <div className=\"mobile-menu-footer\">\n {cloneElement(collapsedActionsInline, {\n key: 'mnavbar-collapsed-actions',\n })}\n </div>\n ) : null}\n {mobileMenuFooter ? <div className=\"mobile-menu-footer\">{mobileMenuFooter}</div> : null}\n </div>\n </nav>\n )\n}\n","import type React from 'react'\nimport type {MSectionProps} from './MSection.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport './MSection.css'\n\n// Render a semantic page section with predefined spacing and tone.\nexport function MSection({\n as = 'section',\n spacing = 'lg',\n tone = 'default',\n hidden,\n className,\n style,\n children,\n ...rest\n}: MSectionProps) {\n const Component = as\n\n return (\n <Component\n className={cn('section', spacing, tone, className)}\n style={style}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n {children}\n </Component>\n )\n}\n","import type {MStatGridProps} from './MStatGrid.types'\nimport {MSimpleGrid} from '../MSimpleGrid'\n\nexport function MStatGrid<T>({\n items,\n renderItem,\n children,\n columns = 4,\n minItemWidth = '15rem',\n ...rest\n}: MStatGridProps<T>) {\n return (\n <MSimpleGrid columns={columns} minItemWidth={minItemWidth} {...rest}>\n {items && renderItem ? items.map((item, index) => renderItem(item, index)) : children}\n </MSimpleGrid>\n )\n}\n","import type {MDividerProps} from './MDivider.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {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 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)}\n {...rest}\n />\n )\n}\n","import {createContext, useContext, useState, useEffect, useCallback, useMemo} from 'react'\nimport {cn} from '../../../utils/cn'\nimport {MButton} from '../../controls'\nimport {MChevronRightIcon, MMenuIcon} from '../../../icons'\nimport {MDropdownMenu, MTooltip} from '../../overlays'\nimport {MShellBreakpoints, useMaxWidth} from '../../../theme'\nimport type {\n MSidebarProps,\n MSidebarHeaderProps,\n MSidebarBodyProps,\n MSidebarNavProps,\n MSidebarItemProps,\n MSidebarGroupProps,\n MSidebarFooterProps,\n MSidebarDividerProps,\n MSidebarMode,\n} from './MSidebar.types'\nimport './MSidebar.css'\n\nconst STORAGE_KEY = 'mineralui-sidebar'\n\ninterface SidebarContextValue {\n mode: MSidebarMode\n mobile: boolean\n mobileOpen: boolean\n canToggle: boolean\n toggleMode: () => void\n}\n\nconst SidebarCtx = createContext<SidebarContextValue>({\n mode: 'expanded',\n mobile: false,\n mobileOpen: false,\n canToggle: false,\n toggleMode: () => {},\n})\n\n// Read shared sidebar state inside slot components.\nfunction useSidebar() {\n return useContext(SidebarCtx)\n}\n\n// Render the sidebar shell and coordinate desktop and mobile behavior.\nexport function MSidebar({\n mode: modeProp = 'auto',\n defaultMode = 'expanded',\n onModeChange,\n persist = false,\n side = 'left',\n tone = 'subtle',\n bordered = true,\n mobileBreakpoint = MShellBreakpoints.mobile,\n compactBreakpoint = MShellBreakpoints.compact,\n className,\n style,\n children,\n}: MSidebarProps) {\n const resolvedCompactBreakpoint = Math.max(compactBreakpoint, mobileBreakpoint)\n const mobile = useMaxWidth(mobileBreakpoint)\n const compactViewport = useMaxWidth(resolvedCompactBreakpoint)\n const compact = !mobile && compactViewport\n const [mobileOpen, setMobileOpen] = useState(false)\n\n const [internalMode, setInternalMode] = useState<MSidebarMode>(() => {\n if (persist) {\n try {\n const v = localStorage.getItem(STORAGE_KEY)\n if (v === 'expanded' || v === 'collapsed') return v\n } catch {\n /* noop */\n }\n }\n\n return defaultMode\n })\n\n const resolvedMode: MSidebarMode = mobile\n ? 'expanded'\n : compact\n ? 'collapsed'\n : modeProp === 'auto'\n ? internalMode\n : modeProp === 'collapsed'\n ? 'collapsed'\n : 'expanded'\n\n // MToggle only the desktop width state. Mobile uses its own overlay flow.\n const toggleMode = useCallback(() => {\n const next: MSidebarMode = resolvedMode === 'expanded' ? 'collapsed' : 'expanded'\n\n setInternalMode(next)\n onModeChange?.(next)\n\n if (persist) {\n try {\n localStorage.setItem(STORAGE_KEY, next)\n } catch {\n /* noop */\n }\n }\n }, [resolvedMode, onModeChange, persist])\n\n const closeMobile = useCallback(() => setMobileOpen(false), [])\n\n // Let Escape close the temporary mobile drawer.\n useEffect(() => {\n if (!mobileOpen) return\n\n const handler = (e: KeyboardEvent) => {\n if (e.key === 'Escape') setMobileOpen(false)\n }\n\n document.addEventListener('keydown', handler)\n return () => document.removeEventListener('keydown', handler)\n }, [mobileOpen])\n\n useEffect(() => {\n if (!mobile) {\n setMobileOpen(false)\n }\n }, [mobile])\n\n const canToggle = !mobile && !compact && modeProp === 'auto'\n\n const ctx = useMemo<SidebarContextValue>(\n () => ({mode: resolvedMode, mobile, mobileOpen, canToggle, toggleMode}),\n [resolvedMode, mobile, mobileOpen, canToggle, toggleMode]\n )\n\n const isCollapsed = !mobile && resolvedMode === 'collapsed'\n\n const sidebarCls = cn(\n 'sidebar',\n tone,\n side,\n isCollapsed && 'collapsed',\n compact && 'compact',\n bordered && 'bordered',\n mobile && 'mobile',\n mobile && mobileOpen && 'mobile-open',\n className\n )\n\n return (\n <SidebarCtx.Provider value={ctx}>\n {mobile && mobileOpen && <div className=\"sidebar-backdrop\" onClick={closeMobile} />}\n\n <aside className={sidebarCls} style={style}>\n {children}\n </aside>\n\n {mobile && !mobileOpen && (\n <button\n className={cn('sidebar-hamburger', side)}\n onClick={() => setMobileOpen(true)}\n aria-label=\"Open menu\"\n >\n <span className=\"sidebar-hamburger-icon\" aria-hidden=\"true\">\n <MMenuIcon />\n </span>\n </button>\n )}\n </SidebarCtx.Provider>\n )\n}\n\n// Render the top area with branding and an optional collapse toggle.\nexport function MSidebarHeader({bordered = false, className, children}: MSidebarHeaderProps) {\n const {mode, mobile, canToggle, toggleMode} = useSidebar()\n const isCollapsed = !mobile && mode === 'collapsed'\n\n return (\n <div className={cn('sidebar-header', bordered && 'bordered', className)}>\n <div className=\"sidebar-header-content\">{children}</div>\n {canToggle && (\n <MButton\n variant=\"outlined\"\n color=\"neutral\"\n iconOnly\n size=\"sm\"\n onClick={toggleMode}\n aria-label={isCollapsed ? 'Expand sidebar' : 'Collapse sidebar'}\n className=\"sidebar-toggle\"\n >\n <span className={cn('sidebar-chevron', isCollapsed && 'flipped')}>\n <MChevronRightIcon />\n </span>\n </MButton>\n )}\n </div>\n )\n}\n\n// Wrap the scrollable middle area between header and footer.\nexport function MSidebarBody({className, children}: MSidebarBodyProps) {\n return <div className={cn('sidebar-body', className)}>{children}</div>\n}\n\n// Wrap sidebar links in a navigation landmark.\nexport function MSidebarNav({className, children}: MSidebarNavProps) {\n return <nav className={cn('sidebar-nav', className)}>{children}</nav>\n}\n\n// Render one clickable sidebar row as a link, button or custom component.\nexport function MSidebarItem({\n icon,\n label,\n description,\n href,\n to,\n onClick,\n active = false,\n disabled = false,\n badge,\n color,\n component,\n className,\n}: MSidebarItemProps) {\n const {mode, mobile} = useSidebar()\n const isCollapsed = !mobile && mode === 'collapsed'\n\n // ONE tooltip per row: prefer description, fall back to label. The HTML\n // title attribute used in collapsed mode mirrors the same priority but is\n // limited to strings (browsers can't render ReactNodes).\n const tooltipContent = description ?? label\n const titleAttr = typeof description === 'string'\n ? description\n : typeof label === 'string'\n ? label\n : undefined\n\n const Tag = component ?? (href || to ? 'a' : 'button')\n const linkProps = component ? (to ? {to} : href ? {href} : {}) : href ? {href} : to ? {href: to} : {}\n const cls = cn('sidebar-item', active && 'active', disabled && 'disabled', color, className)\n\n return (\n <Tag\n className={cls}\n onClick={disabled ? undefined : onClick}\n aria-disabled={disabled || undefined}\n title={isCollapsed ? titleAttr : undefined}\n {...linkProps}\n >\n {icon && <span className=\"sidebar-item-icon\">{icon}</span>}\n {!isCollapsed && (\n <MTooltip content={tooltipContent} placement=\"top\" className=\"sidebar-item-label-tooltip\">\n <span className=\"sidebar-item-label\">{label}</span>\n </MTooltip>\n )}\n {!isCollapsed && badge && <span className=\"sidebar-item-badge\">{badge}</span>}\n </Tag>\n )\n}\n\n// Group related sidebar items and swap to a dropdown when collapsed.\nexport function MSidebarGroup({\n label,\n icon,\n active = false,\n defaultOpen = true,\n collapsible = true,\n children,\n className,\n}: MSidebarGroupProps) {\n const sidebarCtx = useSidebar()\n const {mode, mobile} = sidebarCtx\n const isCollapsed = !mobile && mode === 'collapsed'\n const [open, setOpen] = useState(defaultOpen)\n\n const expandedCtx = useMemo<SidebarContextValue>(() => ({...sidebarCtx, mode: 'expanded'}), [sidebarCtx])\n\n // Keep expand/collapse local to this group.\n const toggle = () => {\n if (collapsible) setOpen((o) => !o)\n }\n\n if (isCollapsed) {\n const trigger = (\n <span className={cn('sidebar-group-icon collapsed', active && 'active')} title={label}>\n {icon}\n </span>\n )\n\n return (\n <div className={cn('sidebar-group', className)}>\n <MDropdownMenu trigger={trigger} placement=\"right-start\" closeOnSelect openOn=\"hover\">\n <SidebarCtx.Provider value={expandedCtx}>{children}</SidebarCtx.Provider>\n </MDropdownMenu>\n </div>\n )\n }\n\n return (\n <div className={cn('sidebar-group', className)}>\n <button className={cn('sidebar-group-header', active && 'active')} onClick={toggle} aria-expanded={open}>\n {icon && <span className=\"sidebar-group-icon\">{icon}</span>}\n <span className=\"sidebar-group-label\">{label}</span>\n {collapsible && (\n <span className={cn('sidebar-group-arrow', open && 'open')}>\n <MChevronRightIcon />\n </span>\n )}\n </button>\n {open && <div className=\"sidebar-group-items\">{children}</div>}\n </div>\n )\n}\n\n// Render the bottom slot for version info or quick actions.\nexport function MSidebarFooter({bordered = false, className, children}: MSidebarFooterProps) {\n return <div className={cn('sidebar-footer', bordered && 'bordered', className)}>{children}</div>\n}\n\n// Render a spacing-aware divider between sidebar regions.\nexport function MSidebarDivider({className, spacing = 'md'}: MSidebarDividerProps) {\n return <hr className={cn('sidebar-divider', spacing, className)} />\n}\n","import {useMemo} from 'react'\nimport {cn} from '../../../utils/cn'\nimport type {MBreadcrumbProps} from './MBreadcrumb.types'\nimport './MBreadcrumb.css'\n\n// Render a compact path and collapse the middle when needed.\nexport function MBreadcrumb({items, separator = '/', maxItems, className, ...rest}: MBreadcrumbProps) {\n // Keep the current page visible while shortening deep paths.\n const visible = useMemo(() => {\n if (!maxItems || maxItems >= items.length) return items\n if (maxItems < 2) return [items[items.length - 1]]\n const head = items.slice(0, 1)\n const tail = items.slice(-(maxItems - 1))\n return [...head, null, ...tail]\n }, [items, maxItems])\n\n return (\n <nav aria-label=\"breadcrumb\" className={cn('breadcrumb', className)} {...rest}>\n <ol className=\"trail\">\n {visible.map((item, i) => {\n if (item === null) {\n return (\n <li key=\"ellipsis\" className=\"crumb dots\">\n <span className=\"sep\">{separator}</span>\n <span>&#8230;</span>\n </li>\n )\n }\n\n const isLast = i === visible.length - 1\n\n return (\n <li key={i} className={cn('crumb', isLast && 'active')}>\n {i > 0 && <span className=\"sep\">{separator}</span>}\n {item.href && !isLast ? (\n <a href={item.href} className=\"link\" onClick={item.onClick}>\n {item.label}\n </a>\n ) : item.onClick && !isLast ? (\n <button type=\"button\" className=\"link btn\" onClick={item.onClick}>\n {item.label}\n </button>\n ) : (\n <span className=\"current\" aria-current={isLast ? 'page' : undefined}>\n {item.label}\n </span>\n )}\n </li>\n )\n })}\n </ol>\n </nav>\n )\n}\n","import {forwardRef, Children, isValidElement} from 'react'\nimport type * as React from 'react'\nimport type {MAppShellProps, MBodyProps} from './MAppShell.types'\nimport {cn} from '../../../utils/cn'\nimport {MSidebar} from '../MSidebar'\nimport './MAppShell.css'\n\nexport const MAppShell = forwardRef<HTMLDivElement, MAppShellProps>(function MAppShell(\n {className, children, ...rest},\n ref\n) {\n const sidebarElements: React.ReactNode[] = []\n const otherElements: React.ReactNode[] = []\n\n Children.forEach(children, (child) => {\n if (isValidElement(child) && child.type === MSidebar) {\n sidebarElements.push(child)\n } else {\n otherElements.push(child)\n }\n })\n\n return (\n <div ref={ref} className={cn('app-shell', className)} {...rest}>\n {sidebarElements}\n <div className=\"app-main\">{otherElements}</div>\n </div>\n )\n})\n\nexport const MBody = forwardRef<HTMLDivElement, MBodyProps>(function MBody({className, children, ...rest}, ref) {\n return (\n <div ref={ref} className={cn('app-body', className)} {...rest}>\n {children}\n </div>\n )\n})\n","import {useEffect, useRef, useState, type ReactNode} from 'react'\n\ninterface ScaleToFitProps {\n /**\n * Minimum render width (in CSS px). When the parent is narrower, content\n * is rendered at this width and scaled down. When the parent is wider,\n * content is rendered at the parent's width (no scale-up, no padding).\n */\n baseWidth?: number\n children: ReactNode\n}\n\n/**\n * Renders `children` at `max(baseWidth, parentWidth)`, then applies\n * `transform: scale(...)` so the rendered block fits the parent box without\n * scrollbars. Scale never exceeds 1 (no blurry up-scaling). When the parent\n * is wider than baseWidth, render width tracks the parent so content fills\n * the available space natively (no horizontal padding).\n */\nexport function ScaleToFit({baseWidth = 480, children}: ScaleToFitProps) {\n const wrapperRef = useRef<HTMLDivElement>(null)\n const contentRef = useRef<HTMLDivElement>(null)\n const [scale, setScale] = useState(1)\n const [renderWidth, setRenderWidth] = useState<number>(baseWidth)\n\n useEffect(() => {\n const wrap = wrapperRef.current\n const content = contentRef.current\n if (!wrap || !content) return\n\n let frame = 0\n const recompute = () => {\n cancelAnimationFrame(frame)\n frame = requestAnimationFrame(() => {\n const wW = wrap.clientWidth\n const wH = wrap.clientHeight\n if (wW === 0 || wH === 0) return\n const cW = Math.max(baseWidth, wW)\n const cH = content.offsetHeight\n if (cW === 0 || cH === 0) return\n const sW = wW / cW\n const sH = wH / cH\n const next = Math.min(sW, sH, 1)\n if (next > 0 && Number.isFinite(next)) {\n setRenderWidth(cW)\n setScale(next)\n }\n })\n }\n\n const ro = new ResizeObserver(recompute)\n ro.observe(wrap)\n ro.observe(content)\n recompute()\n return () => {\n cancelAnimationFrame(frame)\n ro.disconnect()\n }\n }, [baseWidth])\n\n return (\n <div ref={wrapperRef} className=\"canvas-grid-scale-wrapper\">\n <div\n ref={contentRef}\n className=\"canvas-grid-scale-content\"\n style={{width: `${renderWidth}px`, transform: `scale(${scale})`}}\n >\n {children}\n </div>\n </div>\n )\n}\n","import {forwardRef, useCallback, useEffect, useRef, useState} from 'react'\nimport type {CSSProperties, ForwardedRef, PointerEvent as ReactPointerEvent, ReactElement, Ref} from 'react'\nimport type {MCanvasGridItem, MCanvasGridPosition, MCanvasGridProps} from './MCanvasGrid.types'\nimport {cn} from '../../../utils/cn'\nimport {MShellBreakpoints, useMaxWidth} from '../../../theme'\nimport {MEditIcon, MMoveIcon, MTrashIcon, MZoomInIcon} from '../../../icons'\nimport {MButton} from '../../controls/MButton'\nimport {MButtonGroup} from '../../controls/MButtonGroup'\nimport {ScaleToFit} from './ScaleToFit'\nimport './MCanvasGrid.css'\n\ninterface DragState {\n itemId: string\n mode: 'drag' | 'resize'\n startClientX: number\n startClientY: number\n original: MCanvasGridPosition\n}\n\nfunction clamp(value: number, min: number, max: number) {\n return Math.max(min, Math.min(max, value))\n}\n\nfunction MCanvasGridInner<T extends MCanvasGridItem>(\n {\n columns = 24,\n rows = 24,\n snap = 4,\n items,\n renderItem,\n minItemSize,\n maxItemSize: _maxItemSize,\n editable = false,\n onItemMove,\n onItemResize,\n onItemRemove,\n onItemEdit,\n onItemExpand,\n guides = 'always',\n compactBreakpoint = MShellBreakpoints.compact,\n mobileBreakpoint = MShellBreakpoints.mobile,\n height,\n fitContent = 'scroll',\n fitContentBaseWidth = 480,\n className,\n style,\n }: MCanvasGridProps<T>,\n ref: ForwardedRef<HTMLDivElement>\n) {\n const innerRef = useRef<HTMLDivElement | null>(null)\n const [size, setSize] = useState({width: 0, height: 0})\n const [drag, setDrag] = useState<DragState | null>(null)\n const [preview, setPreview] = useState<MCanvasGridPosition | null>(null)\n const [touchOrder, setTouchOrder] = useState<Record<string, number>>({})\n const touchCounterRef = useRef(0)\n\n function bringToFront(itemId: string) {\n touchCounterRef.current += 1\n setTouchOrder((prev) => ({...prev, [itemId]: touchCounterRef.current}))\n }\n\n function suppressNextClick() {\n let armed = true\n const stopper = (ev: MouseEvent) => {\n if (!armed) return\n armed = false\n ev.stopPropagation()\n ev.preventDefault()\n window.removeEventListener('click', stopper, true)\n }\n window.addEventListener('click', stopper, true)\n window.setTimeout(() => {\n if (!armed) return\n armed = false\n window.removeEventListener('click', stopper, true)\n }, 60)\n }\n\n const isMobile = useMaxWidth(mobileBreakpoint)\n const isCompact = useMaxWidth(compactBreakpoint) && !isMobile\n\n const totalCols = columns * snap\n const totalRows = rows * snap\n const effectiveCols = isCompact ? Math.max(1, Math.round(totalCols / 2)) : totalCols\n const effectiveRows = isCompact ? Math.max(1, Math.round(totalRows / 2)) : totalRows\n const effectiveCells = isCompact ? Math.max(1, Math.round(columns / 2)) : columns\n const effectiveRowCells = isCompact ? Math.max(1, Math.round(rows / 2)) : rows\n\n const interactive = editable && !isMobile\n\n useEffect(() => {\n const node = innerRef.current\n if (!node || typeof ResizeObserver === 'undefined') return\n const update = () => setSize({width: node.clientWidth, height: node.clientHeight})\n update()\n const observer = new ResizeObserver(update)\n observer.observe(node)\n return () => observer.disconnect()\n }, [])\n\n const setRefs = useCallback(\n (node: HTMLDivElement | null) => {\n innerRef.current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) (ref as {current: HTMLDivElement | null}).current = node\n },\n [ref]\n )\n\n function getMin(item: T) {\n const m = minItemSize?.(item)\n if (!m) return {w: snap, h: snap}\n return {w: Math.max(snap, m.w * snap), h: Math.max(snap, m.h * snap)}\n }\n\n function startResize(e: ReactPointerEvent<HTMLDivElement>, item: T) {\n if (!interactive) return\n e.stopPropagation()\n e.preventDefault()\n ;(e.currentTarget as Element).setPointerCapture(e.pointerId)\n bringToFront(item.id)\n setDrag({\n itemId: item.id,\n mode: 'resize',\n startClientX: e.clientX,\n startClientY: e.clientY,\n original: {...item.position},\n })\n setPreview({...item.position})\n }\n\n function startDragFromHeader(e: ReactPointerEvent<HTMLDivElement>, item: T) {\n if (!interactive) return\n if ((e.target as Element).closest('button, [role=\"button\"]')) return\n e.stopPropagation()\n e.preventDefault()\n ;(e.currentTarget as Element).setPointerCapture(e.pointerId)\n bringToFront(item.id)\n setDrag({\n itemId: item.id,\n mode: 'drag',\n startClientX: e.clientX,\n startClientY: e.clientY,\n original: {...item.position},\n })\n setPreview({...item.position})\n }\n\n function handlePointerMove(e: ReactPointerEvent<HTMLDivElement>) {\n if (!drag || size.width === 0 || size.height === 0) return\n const cellPxX = size.width / effectiveCols\n const cellPxY = size.height / effectiveRows\n const dx = Math.round((e.clientX - drag.startClientX) / cellPxX)\n const dy = Math.round((e.clientY - drag.startClientY) / cellPxY)\n const original = drag.original\n\n const targetItem = items.find((it) => it.id === drag.itemId)\n const min = targetItem ? getMin(targetItem) : {w: snap, h: snap}\n\n if (drag.mode === 'drag') {\n const x = clamp(original.x + dx, 0, effectiveCols - original.w)\n const y = clamp(original.y + dy, 0, effectiveRows - original.h)\n setPreview({x, y, w: original.w, h: original.h})\n } else {\n const w = clamp(original.w + dx, min.w, effectiveCols - original.x)\n const h = clamp(original.h + dy, min.h, effectiveRows - original.y)\n setPreview({x: original.x, y: original.y, w, h})\n }\n }\n\n function handlePointerUp(e: ReactPointerEvent<HTMLDivElement>) {\n if (!drag) return\n try {\n ;(e.currentTarget as Element).releasePointerCapture(e.pointerId)\n } catch {\n // pointer may have already been released\n }\n if (preview) {\n if (drag.mode === 'drag') onItemMove?.(drag.itemId, preview)\n else onItemResize?.(drag.itemId, preview)\n }\n setDrag(null)\n setPreview(null)\n }\n\n function handleHeaderPointerUp(e: ReactPointerEvent<HTMLDivElement>) {\n if (drag) {\n suppressNextClick()\n handlePointerUp(e)\n }\n }\n\n const guidesOn =\n guides === 'always' ||\n (guides === 'on-edit' && interactive) ||\n (guides === 'on-drag' && drag !== null)\n\n const heightStyle: CSSProperties | undefined =\n height !== undefined ? {height: typeof height === 'number' ? `${height}px` : height} : undefined\n\n if (isMobile) {\n const ordered = [...items].sort((a, b) => a.position.y - b.position.y)\n return (\n <div\n ref={setRefs}\n className={cn('canvas-grid', 'mobile', className)}\n data-guides=\"off\"\n style={{...heightStyle, ...style}}\n >\n {ordered.map((item) => (\n <div key={item.id} className=\"canvas-grid-item\">\n {renderItem(item)}\n </div>\n ))}\n </div>\n )\n }\n\n const gridStyle: CSSProperties = {\n ...heightStyle,\n ...style,\n gridTemplateColumns: `repeat(${effectiveCols}, 1fr)`,\n gridTemplateRows: `repeat(${effectiveRows}, 1fr)`,\n ['--canvas-grid-cells' as string]: String(effectiveCells),\n ['--canvas-grid-row-cells' as string]: String(effectiveRowCells),\n }\n\n const overlayCells = effectiveCells * effectiveRowCells\n\n return (\n <div\n ref={setRefs}\n className={cn('canvas-grid', isCompact && 'compact', interactive && 'editable', className)}\n data-guides={guidesOn ? 'on' : 'off'}\n style={gridStyle}\n >\n <div className=\"canvas-grid-overlay\" aria-hidden>\n {Array.from({length: overlayCells}, (_, idx) => {\n const isLastCol = (idx + 1) % effectiveCells === 0\n const isLastRow = idx >= overlayCells - effectiveCells\n return (\n <div\n key={idx}\n className={cn('canvas-grid-cell', isLastCol && 'no-right', isLastRow && 'no-bottom')}\n />\n )\n })}\n </div>\n\n {items.map((item) => {\n const isDragging = drag?.itemId === item.id\n const live = isDragging && preview ? preview : item.position\n // half-precision math for compact viewport\n const x = isCompact ? Math.round(live.x / 2) : live.x\n const y = isCompact ? Math.round(live.y / 2) : live.y\n const w = Math.max(1, isCompact ? Math.round(live.w / 2) : live.w)\n const h = Math.max(1, isCompact ? Math.round(live.h / 2) : live.h)\n\n const baseZ = 1 + (touchOrder[item.id] ?? 0)\n const itemStyle: CSSProperties = {\n gridColumn: `${x + 1} / span ${w}`,\n gridRow: `${y + 1} / span ${h}`,\n zIndex: isDragging ? baseZ + 100 : baseZ,\n }\n\n return (\n <div\n key={item.id}\n className={cn('canvas-grid-item', isDragging && 'dragging')}\n style={itemStyle}\n >\n <div\n className=\"canvas-grid-item-header\"\n onPointerDown={(e) => startDragFromHeader(e, item)}\n onPointerMove={handlePointerMove}\n onPointerUp={handleHeaderPointerUp}\n onPointerCancel={handlePointerUp}\n >\n <MButtonGroup variant=\"ghost\" size=\"xs\">\n {interactive && onItemEdit && (\n <MButton\n color=\"primary\"\n iconOnly\n aria-label=\"Edit tile\"\n startIcon={<MEditIcon />}\n onPointerDown={(e) => e.stopPropagation()}\n onClick={(e) => {\n e.stopPropagation()\n onItemEdit(item.id)\n }}\n />\n )}\n {onItemExpand && (\n <MButton\n color=\"primary\"\n iconOnly\n aria-label=\"Expand tile\"\n startIcon={<MZoomInIcon />}\n onPointerDown={(e) => e.stopPropagation()}\n onClick={(e) => {\n e.stopPropagation()\n onItemExpand(item.id)\n }}\n />\n )}\n {interactive && onItemRemove && (\n <MButton\n color=\"error\"\n iconOnly\n aria-label=\"Remove tile\"\n startIcon={<MTrashIcon />}\n onPointerDown={(e) => e.stopPropagation()}\n onClick={(e) => {\n e.stopPropagation()\n onItemRemove(item.id)\n }}\n />\n )}\n </MButtonGroup>\n </div>\n <div className=\"canvas-grid-item-body\">\n {fitContent === 'scale' ? (\n <ScaleToFit baseWidth={fitContentBaseWidth}>{renderItem(item)}</ScaleToFit>\n ) : (\n renderItem(item)\n )}\n </div>\n {!interactive && onItemExpand && (\n <MButton\n className=\"canvas-grid-view-expand-handle\"\n variant=\"filled\"\n shape=\"circle\"\n size=\"sm\"\n color=\"primary\"\n iconOnly\n aria-label=\"Expand tile\"\n startIcon={<MZoomInIcon />}\n onClick={(e) => {\n e.stopPropagation()\n onItemExpand(item.id)\n }}\n />\n )}\n {interactive && isDragging && (\n <div className=\"canvas-grid-item-glass\" aria-hidden>\n <MMoveIcon size={28} />\n </div>\n )}\n {interactive && (\n <div\n className=\"canvas-grid-resize-handle\"\n aria-hidden\n onPointerDown={(e) => startResize(e, item)}\n onPointerMove={handlePointerMove}\n onPointerUp={(e) => {\n if (drag) suppressNextClick()\n handlePointerUp(e)\n }}\n onPointerCancel={handlePointerUp}\n />\n )}\n </div>\n )\n })}\n </div>\n )\n}\n\nexport const MCanvasGrid = forwardRef(MCanvasGridInner) as <T extends MCanvasGridItem>(\n props: MCanvasGridProps<T> & {ref?: Ref<HTMLDivElement>}\n) => ReactElement | null\n","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 {\n children,\n top = 16,\n bottomGap = 16,\n hideScrollbar = true,\n draggable = true,\n className,\n style,\n ...rest\n },\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 onMouseDown={handleMouseDown}\n {...rest}\n >\n {children}\n </div>\n )\n})\n"],"mappings":";;;;;;;;;;;;;;AAOA,SAAgB,EAAW,EACvB,UAAO,WACP,YAAS,IACT,WACA,YACA,YACA,UACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,cACA,cACA,UACA,aACA,GAAG,KACa;CAChB,IAAM,IAAe,EAAuB,EAAC,UAAM,CAAC;AAEpD,QACI,kBAAC,OAAD;EACI,WAAW,EACP,aACA,GACA,KAAU,UACV,GAAG,EAA2B;GAC1B;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACH,CAAC,EACF,EACH;EACD,OAAO;GAAC,GAAG;GAAc,GAAG;GAAM;EAClC,GAAI,EAAe,EAAO;EAC1B,GAAI;EAEH;EACC,CAAA;;;;AC1Dd,SAAgB,EAAQ,EACpB,eAAY,QACZ,YAAS,IACT,cAAW,IACX,YAAS,IACT,UAAO,WACP,YAAS,SACT,WACA,cACA,aACA,GAAG,KACU;AACb,QACI,kBAAC,UAAD;EACI,WAAW,EAAG,UAAU,GAAM,KAAY,YAAY,KAAU,UAAU,EAAU;EACpF,GAAI,EAAe,EAAO;EAC1B,GAAI;YAEJ,kBAAC,GAAD;GAAY,MAAM;GAAmB;GAAQ,WAAW,EAAG,SAAS,UAAU,IAAS;GAClF;GACQ,CAAA;EACR,CAAA;;;;ACpBjB,SAAgB,EAAQ,EACpB,eAAY,QACZ,YAAS,IACT,cAAW,IACX,UAAO,WACP,WACA,YACA,YACA,UACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,cACA,cACA,UACA,aACA,GAAG,KACU;CACb,IAAM,IAAe,EAAuB,EAAC,UAAM,CAAC;AAEpD,QACI,kBAAC,UAAD;EACI,WAAW,EACP,UACA,GACA,KAAY,YACZ,GAAG,EAA2B;GAC1B;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACH,CAAC,EACF,EACH;EACD,OAAO;GAAC,GAAG;GAAc,GAAG;GAAM;EAClC,GAAI,EAAe,EAAO;EAC1B,GAAI;YAEJ,kBAAC,GAAD;GAAY,MAAM;GAAmB;GAAQ,WAAU;GAAQ,WAAA;GAC1D;GACQ,CAAA;EACR,CAAA;;;;AChEjB,SAAgB,EAAM,EAAC,UAAO,iBAAc,cAAc,UAAO,IAAO,cAAW,aAAU,GAAG,KAAmB;AAC/G,QACI,kBAAC,OAAD;EAAK,WAAW,EAAG,QAAQ,GAAa,KAAQ,QAAQ,EAAU;EAAE,GAAI;YACnE,IACK,EAAM,KAAK,MAAS;GAChB,IAAM,IAAO,EAAK,MACZ,IAAY,EAAK,aAAa,MAAQ,KAAQ,MAC9C,IAAgB,OAAO,EAAK,SAAU,WAAW,EAAK,QAAQ,KAAA,GAC9D,IAAY,IAAY,IAAgB,KAAA,GACxC,IAAY,EAAK,UAAU,IAAY,IAAgB,KAAA;AAE7D,UACI,kBAAC,GAAD;IAEI,WAAW,EAAK;IAChB,MAAM,EAAK;IACX,IAAI,EAAK;IACT,QAAQ,EAAK;IACb,KAAK,EAAK;IACV,OAAO;IACP,SAAS,EAAK;IACd,UAAU,EAAK;IACf,WAAW,EAAG,QAAQ,KAAa,aAAa,EAAK,UAAU;IAC/D,cAAY;cAXhB,CAaK,IACG,kBAAC,QAAD;KAAM,WAAU;KAAO,eAAa,CAAC,KAAa,KAAA;eAC9C,kBAAC,GAAD,EAAM,MAAM,EAAK,UAAY,CAAA;KAC1B,CAAA,GACP,MACF,IAAyB,OAAb,EAAK,MACf;MAlBC,EAAK,OAAO,EAAK,QAAQ,EAAK,OAAO,UAAU,IAAI,KAAiB,GAkBrE;IAEd,GACF;EACJ,CAAA;;;;ACxBd,SAAS,EAAoB,GAAqB,IAA0B,EAAE,EAAoB;AAc9F,QAbA,EAAS,QAAQ,IAAW,MAAU;AAClC,MAAI,CAAC,EAAe,EAAM,CACtB;AAEJ,MAAI,EAAM,SAAS,GAAO;AACtB,KAAM,KAAK,EAAwB;AACnC;;EAEJ,IAAM,IAAkB,EAAM,OAAyC;AACvE,EAAI,MAAmB,KAAA,KACnB,EAAoB,GAAgB,EAAM;GAEhD,EACK;;AAMX,SAAgB,EAAQ,EACpB,eAAY,WACZ,YAAS,IACT,cAAW,IACX,YAAS,IACT,UAAO,WACP,aAAU,WACV,UAAO,IACP,gBAAa,YACb,sBACA,qBACA,qBAAkB,IAClB,qBAAkB,mBAClB,sBAAmB,EAAkB,SACrC,WACA,cACA,aACA,GAAG,KACU;CACb,IAAM,CAAC,GAAM,KAAW,EAAS,GAAM,EACjC,IAAU,EAA2B,KAAK,EAC1C,IAAS,GAAO,EAChB,IAAS,EAAY,EAAiB,EAEtC,IAAa,EAAS,QAAQ,EAAS,EAEvC,IAAa,EAAoB,EAAS,CAAC,KAAK,GAAS,MAC3D,EAAa,GAAS;EAClB,KAAK,uBAAuB;EAC5B,aAAa;EAChB,CAAC,CACL,EAEK,IACF,kBAAC,GAAD;EAEI,MAAK;EACL,SAAQ;EACR,MAAK;EACL,OAAM;EACN,UAAA;EACA,WAAU;EACV,cAAY;EACZ,iBAAe;EACf,iBAAe;EACf,SAAS;YAET,kBAAC,GAAD,EAAa,CAAA;EACP,EAbF,iBAaE,EAGV,IAAkB;AACtB,MAAK,IAAI,IAAQ,EAAW,SAAS,GAAG,KAAS,GAAG,KAAY;EAC5D,IAAM,IAAQ,EAAW;AACzB,MAAI,EAAe,EAAM,IAAI,EAAM,SAAS,GAAS;AACjD,OAAkB;AAClB;;;CAQR,IAAM,IAA2B,KAAmB,KAAU,MAAoB,IAC9E,IAA4D,MAC5D,IAAkB,GAClB,IAAkB;AACtB,KAAI,GAA0B;AAG1B,EAFA,IAAyB,EAAW,IACpC,IAAkB,EAAW,QAAQ,GAAG,MAAU,MAAU,EAAgB,EAC5E,IAAkB;AAClB,OAAK,IAAI,IAAQ,EAAgB,SAAS,GAAG,KAAS,GAAG,KAAY;GACjE,IAAM,IAAQ,EAAgB;AAC9B,OAAI,EAAe,EAAM,IAAI,EAAM,SAAS,GAAS;AACjD,QAAkB;AAClB;;;;CAKZ,IAAM,KACF,MAAoB,KACd,CAAC,GAAG,GAAiB,EAAa,GAClC,EAAgB,KAAK,GAAO,MAAU;AAClC,MAAI,MAAU,EAAiB,QAAO;EACtC,IAAM,IAAc,GACd,IAAiB,EAAS,QAAQ,EAAY,MAAM,SAAS;AACnE,SAAO,EAAa,GAAa;GAC7B,KAAK,EAAY,OAAO,kBAAkB;GAC1C,UAAU,CAAC,GAAG,GAAgB,EAAa;GAC9C,CAAC;GACJ;AAwBZ,CAtBA,QAAgB;AACZ,MAAI,CAAC,EAAM;EAEX,SAAS,EAAkB,GAAqB;GAC5C,IAAM,IAAO,EAAQ;AAChB,SACD,EAAM,kBAAkB,QAAQ,EAAK,SAAS,EAAM,OAAO,IAC/D,EAAQ,GAAM;;EAGlB,SAAS,EAAc,GAAsB;AACzC,GAAI,EAAM,QAAQ,YAAU,EAAQ,GAAM;;AAK9C,SAFA,SAAS,iBAAiB,eAAe,EAAkB,EAC3D,SAAS,iBAAiB,WAAW,EAAc,QACtC;AAET,GADA,SAAS,oBAAoB,eAAe,EAAkB,EAC9D,SAAS,oBAAoB,WAAW,EAAc;;IAE3D,CAAC,EAAK,CAAC,EAEV,QAAgB;AACZ,EAAK,KACD,EAAQ,GAAM;IAEnB,CAAC,EAAO,CAAC;CAEZ,SAAS,IAAoB;AACzB,KAAS,MAAa,CAAC,EAAS;;CAGpC,SAAS,EAAgB,GAAwC;EAC7D,IAAM,IAAS,EAAM;AAChB,OACD,EAAO,QAAQ,yBAAuB,IACtC,EAAQ,GAAM;;AAItB,QACI,kBAAC,OAAD;EACI,KAAK;EACL,WAAW,EACP,UACA,GACA,KAAY,YACZ,KAAU,UACV,KAAU,eACV,KAAQ,eACR,UAAU,KACV,EACH;EACD,GAAI,EAAe,EAAO;EAC1B,GAAI;YAbR;GAeI,kBAAC,GAAD;IAAY,MAAM;IAAmB;IAAQ,WAAU;cACnD,kBAAC,OAAD;KAAK,WAAW,EAAG,SAAS,GAAS,KAAQ,OAAO;eAAG;KAAuB,CAAA;IACrE,CAAA;GAEZ,MAAe,YAAY,kBAAC,OAAD;IAAK,WAAW,EAAG,mBAAmB,KAAQ,UAAU;IAAE,eAAA;IAAc,CAAA;GAEpG,kBAAC,OAAD;IACI,IAAI;IACJ,WAAW,EAAG,eAAe,GAAY,KAAQ,OAAO;IACxD,MAAK;IACL,eAAa,CAAC,KAAQ,KAAA;IACtB,SAAS;cALb;KAOK;KACA;KACA,IACG,kBAAC,OAAD;MAAK,WAAU;gBACV,EAAa,GAAwB,EAClC,KAAK,6BACR,CAAC;MACA,CAAA,GACN;KACH,IAAmB,kBAAC,OAAD;MAAK,WAAU;gBAAsB;MAAuB,CAAA,GAAG;KACjF;;GACJ;;;;;AC5Md,SAAgB,EAAS,EACrB,QAAK,WACL,aAAU,MACV,UAAO,WACP,WACA,cACA,UACA,aACA,GAAG,KACW;AAGd,QACI,kBAHc,GAGd;EACI,WAAW,EAAG,WAAW,GAAS,GAAM,EAAU;EAC3C;EACP,GAAI,EAAe,EAAO;EAC1B,GAAI;EAEH;EACO,CAAA;;;;ACxBpB,SAAgB,EAAa,EACzB,UACA,eACA,aACA,aAAU,GACV,kBAAe,SACf,GAAG,KACe;AAClB,QACI,kBAAC,GAAD;EAAsB;EAAuB;EAAc,GAAI;YAC1D,KAAS,IAAa,EAAM,KAAK,GAAM,MAAU,EAAW,GAAM,EAAM,CAAC,GAAG;EACnE,CAAA;;;;ACPtB,SAAgB,EAAS,EACrB,iBAAc,cACd,aAAU,SACV,WACA,YACA,YACA,UACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,cACA,cACA,UACA,GAAG,KACW;CACd,IAAM,IAAe,EAAuB,EAAC,UAAM,CAAC;AAEpD,QACI,kBAAC,OAAD;EACI,MAAK;EACL,oBAAkB;EAClB,WAAW,EACP,WACA,GACA,GACA,GAAG,EAA2B;GAC1B;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACH,CAAC,EACF,EACH;EACD,OAAO;GAAC,GAAG;GAAc,GAAG;GAAM;EAClC,GAAI,EAAe,EAAO;EAC1B,GAAI;EACN,CAAA;;;;AC7CV,IAAM,IAAc,qBAUd,IAAa,EAAmC;CAClD,MAAM;CACN,QAAQ;CACR,YAAY;CACZ,WAAW;CACX,kBAAkB;CACrB,CAAC;AAGF,SAAS,IAAa;AAClB,QAAO,EAAW,EAAW;;AAIjC,SAAgB,EAAS,EACrB,MAAM,IAAW,QACjB,iBAAc,YACd,iBACA,aAAU,IACV,UAAO,QACP,UAAO,UACP,cAAW,IACX,sBAAmB,EAAkB,QACrC,uBAAoB,EAAkB,SACtC,cACA,UACA,eACc;CACd,IAAM,IAA4B,KAAK,IAAI,GAAmB,EAAiB,EACzE,IAAS,EAAY,EAAiB,EACtC,IAAkB,EAAY,EAA0B,EACxD,IAAU,CAAC,KAAU,GACrB,CAAC,GAAY,KAAiB,EAAS,GAAM,EAE7C,CAAC,GAAc,KAAmB,QAA6B;AACjE,MAAI,EACA,KAAI;GACA,IAAM,IAAI,aAAa,QAAQ,EAAY;AAC3C,OAAI,MAAM,cAAc,MAAM,YAAa,QAAO;UAC9C;AAKZ,SAAO;GACT,EAEI,IAA6B,IAC7B,aACA,IACE,cACA,MAAa,SACX,IACA,MAAa,cACX,cACA,YAGN,IAAa,QAAkB;EACjC,IAAM,IAAqB,MAAiB,aAAa,cAAc;AAKvE,MAHA,EAAgB,EAAK,EACrB,IAAe,EAAK,EAEhB,EACA,KAAI;AACA,gBAAa,QAAQ,GAAa,EAAK;UACnC;IAIb;EAAC;EAAc;EAAc;EAAQ,CAAC,EAEnC,IAAc,QAAkB,EAAc,GAAM,EAAE,EAAE,CAAC;AAc/D,CAXA,QAAgB;AACZ,MAAI,CAAC,EAAY;EAEjB,IAAM,KAAW,MAAqB;AAClC,GAAI,EAAE,QAAQ,YAAU,EAAc,GAAM;;AAIhD,SADA,SAAS,iBAAiB,WAAW,EAAQ,QAChC,SAAS,oBAAoB,WAAW,EAAQ;IAC9D,CAAC,EAAW,CAAC,EAEhB,QAAgB;AACZ,EAAK,KACD,EAAc,GAAM;IAEzB,CAAC,EAAO,CAAC;CAEZ,IAAM,IAAY,CAAC,KAAU,CAAC,KAAW,MAAa,QAEhD,IAAM,SACD;EAAC,MAAM;EAAc;EAAQ;EAAY;EAAW;EAAW,GACtE;EAAC;EAAc;EAAQ;EAAY;EAAW;EAAW,CAC5D,EAIK,IAAa,EACf,WACA,GACA,GALgB,CAAC,KAAU,MAAiB,eAM7B,aACf,KAAW,WACX,KAAY,YACZ,KAAU,UACV,KAAU,KAAc,eACxB,EACH;AAED,QACI,kBAAC,EAAW,UAAZ;EAAqB,OAAO;YAA5B;GACK,KAAU,KAAc,kBAAC,OAAD;IAAK,WAAU;IAAmB,SAAS;IAAe,CAAA;GAEnF,kBAAC,SAAD;IAAO,WAAW;IAAmB;IAChC;IACG,CAAA;GAEP,KAAU,CAAC,KACR,kBAAC,UAAD;IACI,WAAW,EAAG,qBAAqB,EAAK;IACxC,eAAe,EAAc,GAAK;IAClC,cAAW;cAEX,kBAAC,QAAD;KAAM,WAAU;KAAyB,eAAY;eACjD,kBAAC,GAAD,EAAa,CAAA;KACV,CAAA;IACF,CAAA;GAEK;;;AAK9B,SAAgB,EAAe,EAAC,cAAW,IAAO,cAAW,eAAgC;CACzF,IAAM,EAAC,SAAM,WAAQ,cAAW,kBAAc,GAAY,EACpD,IAAc,CAAC,KAAU,MAAS;AAExC,QACI,kBAAC,OAAD;EAAK,WAAW,EAAG,kBAAkB,KAAY,YAAY,EAAU;YAAvE,CACI,kBAAC,OAAD;GAAK,WAAU;GAA0B;GAAe,CAAA,EACvD,KACG,kBAAC,GAAD;GACI,SAAQ;GACR,OAAM;GACN,UAAA;GACA,MAAK;GACL,SAAS;GACT,cAAY,IAAc,mBAAmB;GAC7C,WAAU;aAEV,kBAAC,QAAD;IAAM,WAAW,EAAG,mBAAmB,KAAe,UAAU;cAC5D,kBAAC,GAAD,EAAqB,CAAA;IAClB,CAAA;GACD,CAAA,CAEZ;;;AAKd,SAAgB,GAAa,EAAC,cAAW,eAA8B;AACnE,QAAO,kBAAC,OAAD;EAAK,WAAW,EAAG,gBAAgB,EAAU;EAAG;EAAe,CAAA;;AAI1E,SAAgB,EAAY,EAAC,cAAW,eAA6B;AACjE,QAAO,kBAAC,OAAD;EAAK,WAAW,EAAG,eAAe,EAAU;EAAG;EAAe,CAAA;;AAIzE,SAAgB,EAAa,EACzB,SACA,UACA,gBACA,SACA,OACA,YACA,YAAS,IACT,cAAW,IACX,UACA,UACA,cACA,gBACkB;CAClB,IAAM,EAAC,SAAM,cAAU,GAAY,EAC7B,IAAc,CAAC,KAAU,MAAS,aAKlC,IAAiB,KAAe,GAChC,IAAY,OAAO,KAAgB,WACnC,IACA,OAAO,KAAU,WACb,IACA,KAAA,GAEJ,IAAM,MAAc,KAAQ,IAAK,MAAM,WACvC,IAAY,IAAa,IAAK,EAAC,OAAG,GAAG,IAAO,EAAC,SAAK,GAAG,EAAE,GAAI,IAAO,EAAC,SAAK,GAAG,IAAK,EAAC,MAAM,GAAG,GAAG,EAAE;AAGrG,QACI,kBAAC,GAAD;EACI,WAJI,EAAG,gBAAgB,KAAU,UAAU,KAAY,YAAY,GAAO,EAAU;EAKpF,SAAS,IAAW,KAAA,IAAY;EAChC,iBAAe,KAAY,KAAA;EAC3B,OAAO,IAAc,IAAY,KAAA;EACjC,GAAI;YALR;GAOK,KAAQ,kBAAC,QAAD;IAAM,WAAU;cAAqB;IAAY,CAAA;GACzD,CAAC,KACE,kBAAC,GAAD;IAAU,SAAS;IAAgB,WAAU;IAAM,WAAU;cACzD,kBAAC,QAAD;KAAM,WAAU;eAAsB;KAAa,CAAA;IAC5C,CAAA;GAEd,CAAC,KAAe,KAAS,kBAAC,QAAD;IAAM,WAAU;cAAsB;IAAa,CAAA;GAC3E;;;AAKd,SAAgB,GAAc,EAC1B,UACA,SACA,YAAS,IACT,iBAAc,IACd,iBAAc,IACd,aACA,gBACmB;CACnB,IAAM,IAAa,GAAY,EACzB,EAAC,SAAM,cAAU,GACjB,IAAc,CAAC,KAAU,MAAS,aAClC,CAAC,GAAM,KAAW,EAAS,EAAY,EAEvC,IAAc,SAAoC;EAAC,GAAG;EAAY,MAAM;EAAW,GAAG,CAAC,EAAW,CAAC,EAGnG,UAAe;AACjB,EAAI,KAAa,GAAS,MAAM,CAAC,EAAE;;AAGvC,KAAI,GAAa;EACb,IAAM,IACF,kBAAC,QAAD;GAAM,WAAW,EAAG,gCAAgC,KAAU,SAAS;GAAE,OAAO;aAC3E;GACE,CAAA;AAGX,SACI,kBAAC,OAAD;GAAK,WAAW,EAAG,iBAAiB,EAAU;aAC1C,kBAAC,GAAD;IAAwB;IAAS,WAAU;IAAc,eAAA;IAAc,QAAO;cAC1E,kBAAC,EAAW,UAAZ;KAAqB,OAAO;KAAc;KAA+B,CAAA;IAC7D,CAAA;GACd,CAAA;;AAId,QACI,kBAAC,OAAD;EAAK,WAAW,EAAG,iBAAiB,EAAU;YAA9C,CACI,kBAAC,UAAD;GAAQ,WAAW,EAAG,wBAAwB,KAAU,SAAS;GAAE,SAAS;GAAQ,iBAAe;aAAnG;IACK,KAAQ,kBAAC,QAAD;KAAM,WAAU;eAAsB;KAAY,CAAA;IAC3D,kBAAC,QAAD;KAAM,WAAU;eAAuB;KAAa,CAAA;IACnD,KACG,kBAAC,QAAD;KAAM,WAAW,EAAG,uBAAuB,KAAQ,OAAO;eACtD,kBAAC,GAAD,EAAqB,CAAA;KAClB,CAAA;IAEN;MACR,KAAQ,kBAAC,OAAD;GAAK,WAAU;GAAuB;GAAe,CAAA,CAC5D;;;AAKd,SAAgB,GAAe,EAAC,cAAW,IAAO,cAAW,eAAgC;AACzF,QAAO,kBAAC,OAAD;EAAK,WAAW,EAAG,kBAAkB,KAAY,YAAY,EAAU;EAAG;EAAe,CAAA;;AAIpG,SAAgB,EAAgB,EAAC,cAAW,aAAU,QAA6B;AAC/E,QAAO,kBAAC,MAAD,EAAI,WAAW,EAAG,mBAAmB,GAAS,EAAU,EAAI,CAAA;;;;ACrTvE,SAAgB,EAAY,EAAC,UAAO,eAAY,KAAK,aAAU,cAAW,GAAG,KAAyB;CAElG,IAAM,IAAU,QAAc;AAC1B,MAAI,CAAC,KAAY,KAAY,EAAM,OAAQ,QAAO;AAClD,MAAI,IAAW,EAAG,QAAO,CAAC,EAAM,EAAM,SAAS,GAAG;EAClD,IAAM,IAAO,EAAM,MAAM,GAAG,EAAE,EACxB,IAAO,EAAM,MAAM,EAAE,IAAW,GAAG;AACzC,SAAO;GAAC,GAAG;GAAM;GAAM,GAAG;GAAK;IAChC,CAAC,GAAO,EAAS,CAAC;AAErB,QACI,kBAAC,OAAD;EAAK,cAAW;EAAa,WAAW,EAAG,cAAc,EAAU;EAAE,GAAI;YACrE,kBAAC,MAAD;GAAI,WAAU;aACT,EAAQ,KAAK,GAAM,MAAM;AACtB,QAAI,MAAS,KACT,QACI,kBAAC,MAAD;KAAmB,WAAU;eAA7B,CACI,kBAAC,QAAD;MAAM,WAAU;gBAAO;MAAiB,CAAA,EACxC,kBAAC,QAAD,EAAA,UAAM,KAAc,CAAA,CACnB;OAHG,WAGH;IAIb,IAAM,IAAS,MAAM,EAAQ,SAAS;AAEtC,WACI,kBAAC,MAAD;KAAY,WAAW,EAAG,SAAS,KAAU,SAAS;eAAtD,CACK,IAAI,KAAK,kBAAC,QAAD;MAAM,WAAU;gBAAO;MAAiB,CAAA,EACjD,EAAK,QAAQ,CAAC,IACX,kBAAC,KAAD;MAAG,MAAM,EAAK;MAAM,WAAU;MAAO,SAAS,EAAK;gBAC9C,EAAK;MACN,CAAA,GACJ,EAAK,WAAW,CAAC,IACjB,kBAAC,UAAD;MAAQ,MAAK;MAAS,WAAU;MAAW,SAAS,EAAK;gBACpD,EAAK;MACD,CAAA,GAET,kBAAC,QAAD;MAAM,WAAU;MAAU,gBAAc,IAAS,SAAS,KAAA;gBACrD,EAAK;MACH,CAAA,CAEV;OAfI,EAeJ;KAEX;GACD,CAAA;EACH,CAAA;;;;AC5Cd,IAAa,IAAY,EAA2C,SAChE,EAAC,cAAW,aAAU,GAAG,KACzB,GACF;CACE,IAAM,IAAqC,EAAE,EACvC,IAAmC,EAAE;AAU3C,QARA,EAAS,QAAQ,IAAW,MAAU;AAClC,EAAI,EAAe,EAAM,IAAI,EAAM,SAAS,IACxC,EAAgB,KAAK,EAAM,GAE3B,EAAc,KAAK,EAAM;GAE/B,EAGE,kBAAC,OAAD;EAAU;EAAK,WAAW,EAAG,aAAa,EAAU;EAAE,GAAI;YAA1D,CACK,GACD,kBAAC,OAAD;GAAK,WAAU;aAAY;GAAoB,CAAA,CAC7C;;EAEZ,EAEW,KAAQ,EAAuC,SAAe,EAAC,cAAW,aAAU,GAAG,KAAO,GAAK;AAC5G,QACI,kBAAC,OAAD;EAAU;EAAK,WAAW,EAAG,YAAY,EAAU;EAAE,GAAI;EACpD;EACC,CAAA;EAEZ;;;ACjBF,SAAgB,GAAW,EAAC,eAAY,KAAK,eAA4B;CACrE,IAAM,IAAa,EAAuB,KAAK,EACzC,IAAa,EAAuB,KAAK,EACzC,CAAC,GAAO,KAAY,EAAS,EAAE,EAC/B,CAAC,GAAa,KAAkB,EAAiB,EAAU;AAqCjE,QAnCA,QAAgB;EACZ,IAAM,IAAO,EAAW,SAClB,IAAU,EAAW;AAC3B,MAAI,CAAC,KAAQ,CAAC,EAAS;EAEvB,IAAI,IAAQ,GACN,UAAkB;AAEpB,GADA,qBAAqB,EAAM,EAC3B,IAAQ,4BAA4B;IAChC,IAAM,IAAK,EAAK,aACV,IAAK,EAAK;AAChB,QAAI,MAAO,KAAK,MAAO,EAAG;IAC1B,IAAM,IAAK,KAAK,IAAI,GAAW,EAAG,EAC5B,IAAK,EAAQ;AACnB,QAAI,MAAO,KAAK,MAAO,EAAG;IAC1B,IAAM,IAAK,IAAK,GACV,IAAK,IAAK,GACV,IAAO,KAAK,IAAI,GAAI,GAAI,EAAE;AAChC,IAAI,IAAO,KAAK,OAAO,SAAS,EAAK,KACjC,EAAe,EAAG,EAClB,EAAS,EAAK;KAEpB;KAGA,IAAK,IAAI,eAAe,EAAU;AAIxC,SAHA,EAAG,QAAQ,EAAK,EAChB,EAAG,QAAQ,EAAQ,EACnB,GAAW,QACE;AAET,GADA,qBAAqB,EAAM,EAC3B,EAAG,YAAY;;IAEpB,CAAC,EAAU,CAAC,EAGX,kBAAC,OAAD;EAAK,KAAK;EAAY,WAAU;YAC5B,kBAAC,OAAD;GACI,KAAK;GACL,WAAU;GACV,OAAO;IAAC,OAAO,GAAG,EAAY;IAAK,WAAW,SAAS,EAAM;IAAG;GAE/D;GACC,CAAA;EACJ,CAAA;;;;AClDd,SAAS,GAAM,GAAe,GAAa,GAAa;AACpD,QAAO,KAAK,IAAI,GAAK,KAAK,IAAI,GAAK,EAAM,CAAC;;AAG9C,SAAS,EACL,EACI,aAAU,IACV,UAAO,IACP,UAAO,GACP,UACA,eACA,gBACA,aAAa,GACb,cAAW,IACX,eACA,iBACA,iBACA,eACA,iBACA,YAAS,UACT,uBAAoB,EAAkB,SACtC,sBAAmB,EAAkB,QACrC,WACA,gBAAa,UACb,yBAAsB,KACtB,cACA,YAEJ,GACF;CACE,IAAM,IAAW,EAA8B,KAAK,EAC9C,CAAC,GAAM,KAAW,EAAS;EAAC,OAAO;EAAG,QAAQ;EAAE,CAAC,EACjD,CAAC,GAAM,KAAW,EAA2B,KAAK,EAClD,CAAC,GAAS,KAAc,EAAqC,KAAK,EAClE,CAAC,GAAY,KAAiB,EAAiC,EAAE,CAAC,EAClE,IAAkB,EAAO,EAAE;CAEjC,SAAS,EAAa,GAAgB;AAElC,EADA,EAAgB,WAAW,GAC3B,GAAe,OAAU;GAAC,GAAG;IAAO,IAAS,EAAgB;GAAQ,EAAE;;CAG3E,SAAS,KAAoB;EACzB,IAAI,IAAQ,IACN,KAAW,MAAmB;AAC3B,SACL,IAAQ,IACR,EAAG,iBAAiB,EACpB,EAAG,gBAAgB,EACnB,OAAO,oBAAoB,SAAS,GAAS,GAAK;;AAGtD,EADA,OAAO,iBAAiB,SAAS,GAAS,GAAK,EAC/C,OAAO,iBAAiB;AACf,SACL,IAAQ,IACR,OAAO,oBAAoB,SAAS,GAAS,GAAK;KACnD,GAAG;;CAGV,IAAM,IAAW,EAAY,EAAiB,EACxC,IAAY,EAAY,EAAkB,IAAI,CAAC,GAE/C,KAAY,IAAU,GACtB,KAAY,IAAO,GACnB,IAAgB,IAAY,KAAK,IAAI,GAAG,KAAK,MAAM,KAAY,EAAE,CAAC,GAAG,IACrE,IAAgB,IAAY,KAAK,IAAI,GAAG,KAAK,MAAM,KAAY,EAAE,CAAC,GAAG,IACrE,IAAiB,IAAY,KAAK,IAAI,GAAG,KAAK,MAAM,IAAU,EAAE,CAAC,GAAG,GACpE,KAAoB,IAAY,KAAK,IAAI,GAAG,KAAK,MAAM,IAAO,EAAE,CAAC,GAAG,GAEpE,IAAc,KAAY,CAAC;AAEjC,SAAgB;EACZ,IAAM,IAAO,EAAS;AACtB,MAAI,CAAC,KAAQ,OAAO,iBAAmB,IAAa;EACpD,IAAM,UAAe,EAAQ;GAAC,OAAO,EAAK;GAAa,QAAQ,EAAK;GAAa,CAAC;AAClF,KAAQ;EACR,IAAM,IAAW,IAAI,eAAe,EAAO;AAE3C,SADA,EAAS,QAAQ,EAAK,QACT,EAAS,YAAY;IACnC,EAAE,CAAC;CAEN,IAAM,KAAU,GACX,MAAgC;AAE7B,EADA,EAAS,UAAU,GACf,OAAO,KAAQ,aAAY,EAAI,EAAK,GAC/B,MAAM,EAAyC,UAAU;IAEtE,CAAC,EAAI,CACR;CAED,SAAS,GAAO,GAAS;EACrB,IAAM,IAAI,IAAc,EAAK;AAE7B,SADK,IACE;GAAC,GAAG,KAAK,IAAI,GAAM,EAAE,IAAI,EAAK;GAAE,GAAG,KAAK,IAAI,GAAM,EAAE,IAAI,EAAK;GAAC,GADtD;GAAC,GAAG;GAAM,GAAG;GAAK;;CAIrC,SAAS,GAAY,GAAsC,GAAS;AAC3D,QACL,EAAE,iBAAiB,EACnB,EAAE,gBAAgB,EAChB,EAAE,cAA0B,kBAAkB,EAAE,UAAU,EAC5D,EAAa,EAAK,GAAG,EACrB,EAAQ;GACJ,QAAQ,EAAK;GACb,MAAM;GACN,cAAc,EAAE;GAChB,cAAc,EAAE;GAChB,UAAU,EAAC,GAAG,EAAK,UAAS;GAC/B,CAAC,EACF,EAAW,EAAC,GAAG,EAAK,UAAS,CAAC;;CAGlC,SAAS,GAAoB,GAAsC,GAAS;AACnE,QACA,EAAE,OAAmB,QAAQ,4BAA0B,KAC5D,EAAE,iBAAiB,EACnB,EAAE,gBAAgB,EAChB,EAAE,cAA0B,kBAAkB,EAAE,UAAU,EAC5D,EAAa,EAAK,GAAG,EACrB,EAAQ;GACJ,QAAQ,EAAK;GACb,MAAM;GACN,cAAc,EAAE;GAChB,cAAc,EAAE;GAChB,UAAU,EAAC,GAAG,EAAK,UAAS;GAC/B,CAAC,EACF,EAAW,EAAC,GAAG,EAAK,UAAS,CAAC;;CAGlC,SAAS,GAAkB,GAAsC;AAC7D,MAAI,CAAC,KAAQ,EAAK,UAAU,KAAK,EAAK,WAAW,EAAG;EACpD,IAAM,IAAU,EAAK,QAAQ,GACvB,IAAU,EAAK,SAAS,GACxB,IAAK,KAAK,OAAO,EAAE,UAAU,EAAK,gBAAgB,EAAQ,EAC1D,IAAK,KAAK,OAAO,EAAE,UAAU,EAAK,gBAAgB,EAAQ,EAC1D,IAAW,EAAK,UAEhB,IAAa,EAAM,MAAM,MAAO,EAAG,OAAO,EAAK,OAAO,EACtD,IAAM,IAAa,GAAO,EAAW,GAAG;GAAC,GAAG;GAAM,GAAG;GAAK;AAEhE,MAAI,EAAK,SAAS,OAGd,GAAW;GAAC,GAFF,GAAM,EAAS,IAAI,GAAI,GAAG,IAAgB,EAAS,EAAE;GAEhD,GADL,GAAM,EAAS,IAAI,GAAI,GAAG,IAAgB,EAAS,EAAE;GAC7C,GAAG,EAAS;GAAG,GAAG,EAAS;GAAE,CAAC;OAC7C;GACH,IAAM,IAAI,GAAM,EAAS,IAAI,GAAI,EAAI,GAAG,IAAgB,EAAS,EAAE,EAC7D,IAAI,GAAM,EAAS,IAAI,GAAI,EAAI,GAAG,IAAgB,EAAS,EAAE;AACnE,KAAW;IAAC,GAAG,EAAS;IAAG,GAAG,EAAS;IAAG;IAAG;IAAE,CAAC;;;CAIxD,SAAS,GAAgB,GAAsC;AACtD,SACL;OAAI;AACE,MAAE,cAA0B,sBAAsB,EAAE,UAAU;WAC5D;AAQR,GALI,MACI,EAAK,SAAS,SAAQ,IAAa,EAAK,QAAQ,EAAQ,GACvD,IAAe,EAAK,QAAQ,EAAQ,GAE7C,EAAQ,KAAK,EACb,EAAW,KAAK;;;CAGpB,SAAS,GAAsB,GAAsC;AACjE,EAAI,MACA,IAAmB,EACnB,GAAgB,EAAE;;CAI1B,IAAM,KACF,MAAW,YACV,MAAW,aAAa,KACxB,MAAW,aAAa,MAAS,MAEhC,KACF,MAAW,KAAA,IAA4E,KAAA,IAAhE,EAAC,QAAQ,OAAO,KAAW,WAAW,GAAG,EAAO,MAAM,GAAO;AAExF,KAAI,GAAU;EACV,IAAM,IAAU,CAAC,GAAG,EAAM,CAAC,MAAM,GAAG,MAAM,EAAE,SAAS,IAAI,EAAE,SAAS,EAAE;AACtE,SACI,kBAAC,OAAD;GACI,KAAK;GACL,WAAW,EAAG,eAAe,UAAU,EAAU;GACjD,eAAY;GACZ,OAAO;IAAC,GAAG;IAAa,GAAG;IAAM;aAEhC,EAAQ,KAAK,MACV,kBAAC,OAAD;IAAmB,WAAU;cACxB,EAAW,EAAK;IACf,EAFI,EAAK,GAET,CACR;GACA,CAAA;;CAId,IAAM,KAA2B;EAC7B,GAAG;EACH,GAAG;EACH,qBAAqB,UAAU,EAAc;EAC7C,kBAAkB,UAAU,EAAc;EACzC,uBAAkC,OAAO,EAAe;EACxD,2BAAsC,OAAO,GAAkB;EACnE,EAEK,KAAe,IAAiB;AAEtC,QACI,kBAAC,OAAD;EACI,KAAK;EACL,WAAW,EAAG,eAAe,KAAa,WAAW,KAAe,YAAY,EAAU;EAC1F,eAAa,KAAW,OAAO;EAC/B,OAAO;YAJX,CAMI,kBAAC,OAAD;GAAK,WAAU;GAAsB,eAAA;aAChC,MAAM,KAAK,EAAC,QAAQ,IAAa,GAAG,GAAG,MAAQ;IAC5C,IAAM,KAAa,IAAM,KAAK,MAAmB,GAC3C,IAAY,KAAO,KAAe;AACxC,WACI,kBAAC,OAAD,EAEI,WAAW,EAAG,oBAAoB,KAAa,YAAY,KAAa,YAAY,EACtF,EAFO,EAEP;KAER;GACA,CAAA,EAEL,EAAM,KAAK,MAAS;GACjB,IAAM,IAAa,GAAM,WAAW,EAAK,IACnC,IAAO,KAAc,IAAU,IAAU,EAAK,UAE9C,IAAI,IAAY,KAAK,MAAM,EAAK,IAAI,EAAE,GAAG,EAAK,GAC9C,IAAI,IAAY,KAAK,MAAM,EAAK,IAAI,EAAE,GAAG,EAAK,GAC9C,IAAI,KAAK,IAAI,GAAG,IAAY,KAAK,MAAM,EAAK,IAAI,EAAE,GAAG,EAAK,EAAE,EAC5D,IAAI,KAAK,IAAI,GAAG,IAAY,KAAK,MAAM,EAAK,IAAI,EAAE,GAAG,EAAK,EAAE,EAE5D,IAAQ,KAAK,EAAW,EAAK,OAAO,IACpC,IAA2B;IAC7B,YAAY,GAAG,IAAI,EAAE,UAAU;IAC/B,SAAS,GAAG,IAAI,EAAE,UAAU;IAC5B,QAAQ,IAAa,IAAQ,MAAM;IACtC;AAED,UACI,kBAAC,OAAD;IAEI,WAAW,EAAG,oBAAoB,KAAc,WAAW;IAC3D,OAAO;cAHX;KAKI,kBAAC,OAAD;MACI,WAAU;MACV,gBAAgB,MAAM,GAAoB,GAAG,EAAK;MAClD,eAAe;MACf,aAAa;MACb,iBAAiB;gBAEjB,kBAAC,GAAD;OAAc,SAAQ;OAAQ,MAAK;iBAAnC;QACK,KAAe,KACZ,kBAAC,GAAD;SACI,OAAM;SACN,UAAA;SACA,cAAW;SACX,WAAW,kBAAC,GAAD,EAAa,CAAA;SACxB,gBAAgB,MAAM,EAAE,iBAAiB;SACzC,UAAU,MAAM;AAEZ,UADA,EAAE,iBAAiB,EACnB,EAAW,EAAK,GAAG;;SAEzB,CAAA;QAEL,KACG,kBAAC,GAAD;SACI,OAAM;SACN,UAAA;SACA,cAAW;SACX,WAAW,kBAAC,GAAD,EAAe,CAAA;SAC1B,gBAAgB,MAAM,EAAE,iBAAiB;SACzC,UAAU,MAAM;AAEZ,UADA,EAAE,iBAAiB,EACnB,EAAa,EAAK,GAAG;;SAE3B,CAAA;QAEL,KAAe,KACZ,kBAAC,GAAD;SACI,OAAM;SACN,UAAA;SACA,cAAW;SACX,WAAW,kBAAC,GAAD,EAAc,CAAA;SACzB,gBAAgB,MAAM,EAAE,iBAAiB;SACzC,UAAU,MAAM;AAEZ,UADA,EAAE,iBAAiB,EACnB,EAAa,EAAK,GAAG;;SAE3B,CAAA;QAEK;;MACb,CAAA;KACN,kBAAC,OAAD;MAAK,WAAU;gBACV,MAAe,UACZ,kBAAC,IAAD;OAAY,WAAW;iBAAsB,EAAW,EAAK;OAAc,CAAA,GAE3E,EAAW,EAAK;MAElB,CAAA;KACL,CAAC,KAAe,KACb,kBAAC,GAAD;MACI,WAAU;MACV,SAAQ;MACR,OAAM;MACN,MAAK;MACL,OAAM;MACN,UAAA;MACA,cAAW;MACX,WAAW,kBAAC,GAAD,EAAe,CAAA;MAC1B,UAAU,MAAM;AAEZ,OADA,EAAE,iBAAiB,EACnB,EAAa,EAAK,GAAG;;MAE3B,CAAA;KAEL,KAAe,KACZ,kBAAC,OAAD;MAAK,WAAU;MAAyB,eAAA;gBACpC,kBAAC,GAAD,EAAW,MAAM,IAAM,CAAA;MACrB,CAAA;KAET,KACG,kBAAC,OAAD;MACI,WAAU;MACV,eAAA;MACA,gBAAgB,MAAM,GAAY,GAAG,EAAK;MAC1C,eAAe;MACf,cAAc,MAAM;AAEhB,OADI,KAAM,IAAmB,EAC7B,GAAgB,EAAE;;MAEtB,iBAAiB;MACnB,CAAA;KAEJ;MA9FG,EAAK,GA8FR;IAEZ,CACA;;;AAId,IAAa,KAAc,EAAW,EAAiB,EC1WjD,KAAuB,gCAIhB,KAAe,EAA8C,SACtE,EACI,aACA,SAAM,IACN,eAAY,IACZ,mBAAgB,IAChB,eAAY,IACZ,cACA,UACA,GAAG,KAEP,GACF;CACE,IAAM,IAAW,EAAuB,KAAK;AAC7C,GAAoB,SAAoB,EAAS,QAA0B;CAC3E,IAAM,IAAY,EAAwD,KAAK,EACzE,CAAC,GAAU,KAAe,EAAS,GAAM;AAE/C,SAAgB;AACZ,MAAI,CAAC,EAAW;EAEhB,IAAM,KAAmB,MAAsB;GAC3C,IAAM,IAAO,EAAU,SACjB,IAAQ,EAAS;AACnB,IAAC,KAAQ,CAAC,MACd,EAAM,YAAY,EAAK,kBAAkB,EAAM,UAAU,EAAK;KAG5D,UAAsB;AACnB,KAAU,YACf,EAAU,UAAU,MACpB,EAAY,GAAM;;AAKtB,SAFA,OAAO,iBAAiB,aAAa,EAAgB,EACrD,OAAO,iBAAiB,WAAW,EAAc,QACpC;AAET,GADA,OAAO,oBAAoB,aAAa,EAAgB,EACxD,OAAO,oBAAoB,WAAW,EAAc;;IAEzD,CAAC,EAAU,CAAC;CAEf,IAAM,KAAmB,MAA4C;AACjE,MAAI,CAAC,EAAW;EAIhB,IAAM,IAAS,EAAM;AACrB,MAAI,KAAU,EAAO,QAAQ,GAAqB,CAAE;EAEpD,IAAM,IAAQ,EAAS;AAClB,QAEL,EAAU,UAAU;GAAC,QAAQ,EAAM;GAAS,gBAAgB,EAAM;GAAU,EAC5E,EAAY,GAAK,EACjB,EAAM,gBAAgB;IAGpB,IAAmC;EACrC;EACA,QAAQ,gBAAgB,IAAM,EAAU;EACxC,GAAG;EACN;AAED,QACI,kBAAC,OAAD;EACI,KAAK;EACL,WAAW,EACP,kBACA,KAAa,aACb,KAAY,eACZ,KAAiB,kBACjB,EACH;EACD,OAAO;EACP,aAAa;EACb,GAAI;EAEH;EACC,CAAA;EAEZ"}
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-Ct6ViwDQ.cjs`),t=require(`./MSurface-BS9l7GDH.cjs`),n=require(`./MGrid-B2qzYD6S.cjs`),r=require(`./MStack-BdVvJN5S.cjs`),i=require(`./MSimpleGrid-BR352NiK.cjs`),a=require(`./MPagination-C2GmGkVA.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-B_2yBP1M.cjs`),t=require(`./MSurface-CYeVFOw_.cjs`),n=require(`./MGrid-B_0kFUws.cjs`),r=require(`./MStack-BP_BUeCc.cjs`),i=require(`./MSimpleGrid-BwNfaxQP.cjs`),a=require(`./MPagination-DTqT33Mx.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-CnEOTJnJ.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-BuvV-N9H.js";
4
4
  import { n as x, t as S } from "./MSurface-B-sjyczH.js";
5
- import { n as C, r as w, t as T } from "./MGrid-Cy44dWyC.js";
6
- import { t as E } from "./MStack-h11pHEmc.js";
7
- import { t as D } from "./MSimpleGrid-BVeCK9Ci.js";
8
- import { t as O } from "./MPagination-DpUtB6t6.js";
5
+ import { n as C, r as w, t as T } from "./MGrid-CYL3cbUI.js";
6
+ import { t as E } from "./MStack-CSCw6to2.js";
7
+ import { t as D } from "./MSimpleGrid-BWKurW6H.js";
8
+ import { t as O } from "./MPagination-7yTbB8dZ.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
- require(`./core-o3cw16Db.cjs`);let e=require(`react`);function t(t,n){(0,e.useEffect)(()=>{let e=e=>{!t.current||t.current.contains(e.target)||n()};return document.addEventListener(`mousedown`,e),document.addEventListener(`touchstart`,e),()=>{document.removeEventListener(`mousedown`,e),document.removeEventListener(`touchstart`,e)}},[t,n])}var n={},r=Object.keys(n);function i(e){return Object.prototype.hasOwnProperty.call(n,e)}function a(e){if(i(e))return n[e]}function o(e){return a(e)?.plan??`free`}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return n}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return t}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return a}});
2
- //# sourceMappingURL=licensing-hMT26Vnv.cjs.map
1
+ require(`./core-DBpQf3uY.cjs`);let e=require(`react`);function t(t,n){(0,e.useEffect)(()=>{let e=e=>{!t.current||t.current.contains(e.target)||n()};return document.addEventListener(`mousedown`,e),document.addEventListener(`touchstart`,e),()=>{document.removeEventListener(`mousedown`,e),document.removeEventListener(`touchstart`,e)}},[t,n])}var n={},r=Object.keys(n);function i(e){return Object.prototype.hasOwnProperty.call(n,e)}function a(e){if(i(e))return n[e]}function o(e){return a(e)?.plan??`free`}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return n}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return t}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return a}});
2
+ //# sourceMappingURL=licensing-DysMClel.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"licensing-hMT26Vnv.cjs","names":[],"sources":["../src/utils/useClickOutside.ts","../src/utils/licensing.ts"],"sourcesContent":["import {useEffect, type RefObject} from 'react'\n\n// Trigger a callback when pointer interaction happens outside the referenced element.\nexport function useClickOutside(ref: RefObject<HTMLElement | null>, handler: () => void): void {\n useEffect(() => {\n const listener = (e: MouseEvent | TouchEvent) => {\n if (!ref.current || ref.current.contains(e.target as Node)) return\n handler()\n }\n\n document.addEventListener('mousedown', listener)\n document.addEventListener('touchstart', listener)\n return () => {\n document.removeEventListener('mousedown', listener)\n document.removeEventListener('touchstart', listener)\n }\n }, [ref, handler])\n}\n","export type MineralPlan = 'free' | 'pro'\n\nexport interface MineralComponentLicense {\n group: 'cards' | 'charts' | 'data' | 'display' | 'media' | 'icons' | 'layout' | 'feedback'\n plan: MineralPlan\n}\n\nexport const mineralComponentLicenses = {} as const satisfies Record<string, MineralComponentLicense>\n\nexport type MineralProComponentName = keyof typeof mineralComponentLicenses\n\nexport const mineralProComponents = Object.keys(mineralComponentLicenses) as MineralProComponentName[]\n\nexport function isMineralProComponent(componentName: string): componentName is MineralProComponentName {\n return Object.prototype.hasOwnProperty.call(mineralComponentLicenses, componentName)\n}\n\nexport function getMineralComponentLicense(componentName: string): MineralComponentLicense | undefined {\n if (!isMineralProComponent(componentName)) {\n return undefined\n }\n\n return mineralComponentLicenses[componentName]\n}\n\nexport function getMineralComponentPlan(componentName: string): MineralPlan {\n return getMineralComponentLicense(componentName)?.plan ?? 'free'\n}\n"],"mappings":"sDAGA,SAAgB,EAAgB,EAAoC,EAA2B,EAC3F,EAAA,EAAA,eAAgB,CACZ,IAAM,EAAY,GAA+B,CACzC,CAAC,EAAI,SAAW,EAAI,QAAQ,SAAS,EAAE,OAAe,EAC1D,GAAS,EAKb,OAFA,SAAS,iBAAiB,YAAa,EAAS,CAChD,SAAS,iBAAiB,aAAc,EAAS,KACpC,CACT,SAAS,oBAAoB,YAAa,EAAS,CACnD,SAAS,oBAAoB,aAAc,EAAS,GAEzD,CAAC,EAAK,EAAQ,CAAC,CCTtB,IAAa,EAA2B,EAAE,CAI7B,EAAuB,OAAO,KAAK,EAAyB,CAEzE,SAAgB,EAAsB,EAAiE,CACnG,OAAO,OAAO,UAAU,eAAe,KAAK,EAA0B,EAAc,CAGxF,SAAgB,EAA2B,EAA4D,CAC9F,KAAsB,EAAc,CAIzC,OAAO,EAAyB,GAGpC,SAAgB,EAAwB,EAAoC,CACxE,OAAO,EAA2B,EAAc,EAAE,MAAQ"}
1
+ {"version":3,"file":"licensing-DysMClel.cjs","names":[],"sources":["../src/utils/useClickOutside.ts","../src/utils/licensing.ts"],"sourcesContent":["import {useEffect, type RefObject} from 'react'\n\n// Trigger a callback when pointer interaction happens outside the referenced element.\nexport function useClickOutside(ref: RefObject<HTMLElement | null>, handler: () => void): void {\n useEffect(() => {\n const listener = (e: MouseEvent | TouchEvent) => {\n if (!ref.current || ref.current.contains(e.target as Node)) return\n handler()\n }\n\n document.addEventListener('mousedown', listener)\n document.addEventListener('touchstart', listener)\n return () => {\n document.removeEventListener('mousedown', listener)\n document.removeEventListener('touchstart', listener)\n }\n }, [ref, handler])\n}\n","export type MineralPlan = 'free' | 'pro'\n\nexport interface MineralComponentLicense {\n group: 'cards' | 'charts' | 'data' | 'display' | 'media' | 'icons' | 'layout' | 'feedback'\n plan: MineralPlan\n}\n\nexport const mineralComponentLicenses = {} as const satisfies Record<string, MineralComponentLicense>\n\nexport type MineralProComponentName = keyof typeof mineralComponentLicenses\n\nexport const mineralProComponents = Object.keys(mineralComponentLicenses) as MineralProComponentName[]\n\nexport function isMineralProComponent(componentName: string): componentName is MineralProComponentName {\n return Object.prototype.hasOwnProperty.call(mineralComponentLicenses, componentName)\n}\n\nexport function getMineralComponentLicense(componentName: string): MineralComponentLicense | undefined {\n if (!isMineralProComponent(componentName)) {\n return undefined\n }\n\n return mineralComponentLicenses[componentName]\n}\n\nexport function getMineralComponentPlan(componentName: string): MineralPlan {\n return getMineralComponentLicense(componentName)?.plan ?? 'free'\n}\n"],"mappings":"sDAGA,SAAgB,EAAgB,EAAoC,EAA2B,EAC3F,EAAA,EAAA,eAAgB,CACZ,IAAM,EAAY,GAA+B,CACzC,CAAC,EAAI,SAAW,EAAI,QAAQ,SAAS,EAAE,OAAe,EAC1D,GAAS,EAKb,OAFA,SAAS,iBAAiB,YAAa,EAAS,CAChD,SAAS,iBAAiB,aAAc,EAAS,KACpC,CACT,SAAS,oBAAoB,YAAa,EAAS,CACnD,SAAS,oBAAoB,aAAc,EAAS,GAEzD,CAAC,EAAK,EAAQ,CAAC,CCTtB,IAAa,EAA2B,EAAE,CAI7B,EAAuB,OAAO,KAAK,EAAyB,CAEzE,SAAgB,EAAsB,EAAiE,CACnG,OAAO,OAAO,UAAU,eAAe,KAAK,EAA0B,EAAc,CAGxF,SAAgB,EAA2B,EAA4D,CAC9F,KAAsB,EAAc,CAIzC,OAAO,EAAyB,GAGpC,SAAgB,EAAwB,EAAoC,CACxE,OAAO,EAA2B,EAAc,EAAE,MAAQ"}
@@ -29,4 +29,4 @@ function r(r) {
29
29
  //#endregion
30
30
  export { r as t };
31
31
 
32
- //# sourceMappingURL=locale-BNyzqXAU.js.map
32
+ //# sourceMappingURL=locale-CS1-IY_I.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"locale-BNyzqXAU.js","names":[],"sources":["../src/utils/locale.ts"],"sourcesContent":["import {useEffect, useState} from 'react'\n\nexport function resolveRuntimeLocale(): string {\n if (typeof document !== 'undefined') {\n const lang = document.documentElement.lang?.trim()\n if (lang) return lang\n }\n\n if (typeof navigator !== 'undefined') {\n return navigator.language || navigator.languages?.[0] || 'en'\n }\n\n return 'en'\n}\n\n// React to MI18nProvider lang updates without requiring direct provider access.\nexport function useDocumentLocale(explicitLocale?: string): string {\n const [locale, setLocale] = useState(() => explicitLocale || resolveRuntimeLocale())\n\n useEffect(() => {\n if (explicitLocale) {\n setLocale(explicitLocale)\n return\n }\n\n if (typeof document === 'undefined') return\n\n const update = () => setLocale(resolveRuntimeLocale())\n update()\n\n const observer = new MutationObserver(update)\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['lang'],\n })\n\n window.addEventListener('languagechange', update)\n\n return () => {\n observer.disconnect()\n window.removeEventListener('languagechange', update)\n }\n }, [explicitLocale])\n\n return locale\n}\n"],"mappings":";;AAEA,SAAgB,IAA+B;AAC3C,KAAI,OAAO,WAAa,KAAa;EACjC,IAAM,IAAO,SAAS,gBAAgB,MAAM,MAAM;AAClD,MAAI,EAAM,QAAO;;AAOrB,QAJI,OAAO,YAAc,QACd,UAAU,YAAY,UAAU,YAAY,OAGhD;;AAIX,SAAgB,EAAkB,GAAiC;CAC/D,IAAM,CAAC,GAAQ,KAAa,QAAe,KAAkB,GAAsB,CAAC;AA2BpF,QAzBA,QAAgB;AACZ,MAAI,GAAgB;AAChB,KAAU,EAAe;AACzB;;AAGJ,MAAI,OAAO,WAAa,IAAa;EAErC,IAAM,UAAe,EAAU,GAAsB,CAAC;AACtD,KAAQ;EAER,IAAM,IAAW,IAAI,iBAAiB,EAAO;AAQ7C,SAPA,EAAS,QAAQ,SAAS,iBAAiB;GACvC,YAAY;GACZ,iBAAiB,CAAC,OAAO;GAC5B,CAAC,EAEF,OAAO,iBAAiB,kBAAkB,EAAO,QAEpC;AAET,GADA,EAAS,YAAY,EACrB,OAAO,oBAAoB,kBAAkB,EAAO;;IAEzD,CAAC,EAAe,CAAC,EAEb"}
1
+ {"version":3,"file":"locale-CS1-IY_I.js","names":[],"sources":["../src/utils/locale.ts"],"sourcesContent":["import {useEffect, useState} from 'react'\n\nexport function resolveRuntimeLocale(): string {\n if (typeof document !== 'undefined') {\n const lang = document.documentElement.lang?.trim()\n if (lang) return lang\n }\n\n if (typeof navigator !== 'undefined') {\n return navigator.language || navigator.languages?.[0] || 'en'\n }\n\n return 'en'\n}\n\n// React to MI18nProvider lang updates without requiring direct provider access.\nexport function useDocumentLocale(explicitLocale?: string): string {\n const [locale, setLocale] = useState(() => explicitLocale || resolveRuntimeLocale())\n\n useEffect(() => {\n if (explicitLocale) {\n setLocale(explicitLocale)\n return\n }\n\n if (typeof document === 'undefined') return\n\n const update = () => setLocale(resolveRuntimeLocale())\n update()\n\n const observer = new MutationObserver(update)\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['lang'],\n })\n\n window.addEventListener('languagechange', update)\n\n return () => {\n observer.disconnect()\n window.removeEventListener('languagechange', update)\n }\n }, [explicitLocale])\n\n return locale\n}\n"],"mappings":";;AAEA,SAAgB,IAA+B;AAC3C,KAAI,OAAO,WAAa,KAAa;EACjC,IAAM,IAAO,SAAS,gBAAgB,MAAM,MAAM;AAClD,MAAI,EAAM,QAAO;;AAOrB,QAJI,OAAO,YAAc,QACd,UAAU,YAAY,UAAU,YAAY,OAGhD;;AAIX,SAAgB,EAAkB,GAAiC;CAC/D,IAAM,CAAC,GAAQ,KAAa,QAAe,KAAkB,GAAsB,CAAC;AA2BpF,QAzBA,QAAgB;AACZ,MAAI,GAAgB;AAChB,KAAU,EAAe;AACzB;;AAGJ,MAAI,OAAO,WAAa,IAAa;EAErC,IAAM,UAAe,EAAU,GAAsB,CAAC;AACtD,KAAQ;EAER,IAAM,IAAW,IAAI,iBAAiB,EAAO;AAQ7C,SAPA,EAAS,QAAQ,SAAS,iBAAiB;GACvC,YAAY;GACZ,iBAAiB,CAAC,OAAO;GAC5B,CAAC,EAEF,OAAO,iBAAiB,kBAAkB,EAAO,QAEpC;AAET,GADA,EAAS,YAAY,EACrB,OAAO,oBAAoB,kBAAkB,EAAO;;IAEzD,CAAC,EAAe,CAAC,EAEb"}
@@ -1,2 +1,2 @@
1
- require(`./core-o3cw16Db.cjs`);let e=require(`react`);function t(){if(typeof document<`u`){let e=document.documentElement.lang?.trim();if(e)return e}return typeof navigator<`u`&&(navigator.language||navigator.languages?.[0])||`en`}function n(n){let[r,i]=(0,e.useState)(()=>n||t());return(0,e.useEffect)(()=>{if(n){i(n);return}if(typeof document>`u`)return;let e=()=>i(t());e();let r=new MutationObserver(e);return r.observe(document.documentElement,{attributes:!0,attributeFilter:[`lang`]}),window.addEventListener(`languagechange`,e),()=>{r.disconnect(),window.removeEventListener(`languagechange`,e)}},[n]),r}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return n}});
2
- //# sourceMappingURL=locale-C5ik0c3d.cjs.map
1
+ require(`./core-DBpQf3uY.cjs`);let e=require(`react`);function t(){if(typeof document<`u`){let e=document.documentElement.lang?.trim();if(e)return e}return typeof navigator<`u`&&(navigator.language||navigator.languages?.[0])||`en`}function n(n){let[r,i]=(0,e.useState)(()=>n||t());return(0,e.useEffect)(()=>{if(n){i(n);return}if(typeof document>`u`)return;let e=()=>i(t());e();let r=new MutationObserver(e);return r.observe(document.documentElement,{attributes:!0,attributeFilter:[`lang`]}),window.addEventListener(`languagechange`,e),()=>{r.disconnect(),window.removeEventListener(`languagechange`,e)}},[n]),r}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return n}});
2
+ //# sourceMappingURL=locale-CbnstsMH.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"locale-C5ik0c3d.cjs","names":[],"sources":["../src/utils/locale.ts"],"sourcesContent":["import {useEffect, useState} from 'react'\n\nexport function resolveRuntimeLocale(): string {\n if (typeof document !== 'undefined') {\n const lang = document.documentElement.lang?.trim()\n if (lang) return lang\n }\n\n if (typeof navigator !== 'undefined') {\n return navigator.language || navigator.languages?.[0] || 'en'\n }\n\n return 'en'\n}\n\n// React to MI18nProvider lang updates without requiring direct provider access.\nexport function useDocumentLocale(explicitLocale?: string): string {\n const [locale, setLocale] = useState(() => explicitLocale || resolveRuntimeLocale())\n\n useEffect(() => {\n if (explicitLocale) {\n setLocale(explicitLocale)\n return\n }\n\n if (typeof document === 'undefined') return\n\n const update = () => setLocale(resolveRuntimeLocale())\n update()\n\n const observer = new MutationObserver(update)\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['lang'],\n })\n\n window.addEventListener('languagechange', update)\n\n return () => {\n observer.disconnect()\n window.removeEventListener('languagechange', update)\n }\n }, [explicitLocale])\n\n return locale\n}\n"],"mappings":"sDAEA,SAAgB,GAA+B,CAC3C,GAAI,OAAO,SAAa,IAAa,CACjC,IAAM,EAAO,SAAS,gBAAgB,MAAM,MAAM,CAClD,GAAI,EAAM,OAAO,EAOrB,OAJI,OAAO,UAAc,MACd,UAAU,UAAY,UAAU,YAAY,KAGhD,KAIX,SAAgB,EAAkB,EAAiC,CAC/D,GAAM,CAAC,EAAQ,IAAA,EAAA,EAAA,cAA4B,GAAkB,GAAsB,CAAC,CA2BpF,OAzBA,EAAA,EAAA,eAAgB,CACZ,GAAI,EAAgB,CAChB,EAAU,EAAe,CACzB,OAGJ,GAAI,OAAO,SAAa,IAAa,OAErC,IAAM,MAAe,EAAU,GAAsB,CAAC,CACtD,GAAQ,CAER,IAAM,EAAW,IAAI,iBAAiB,EAAO,CAQ7C,OAPA,EAAS,QAAQ,SAAS,gBAAiB,CACvC,WAAY,GACZ,gBAAiB,CAAC,OAAO,CAC5B,CAAC,CAEF,OAAO,iBAAiB,iBAAkB,EAAO,KAEpC,CACT,EAAS,YAAY,CACrB,OAAO,oBAAoB,iBAAkB,EAAO,GAEzD,CAAC,EAAe,CAAC,CAEb"}
1
+ {"version":3,"file":"locale-CbnstsMH.cjs","names":[],"sources":["../src/utils/locale.ts"],"sourcesContent":["import {useEffect, useState} from 'react'\n\nexport function resolveRuntimeLocale(): string {\n if (typeof document !== 'undefined') {\n const lang = document.documentElement.lang?.trim()\n if (lang) return lang\n }\n\n if (typeof navigator !== 'undefined') {\n return navigator.language || navigator.languages?.[0] || 'en'\n }\n\n return 'en'\n}\n\n// React to MI18nProvider lang updates without requiring direct provider access.\nexport function useDocumentLocale(explicitLocale?: string): string {\n const [locale, setLocale] = useState(() => explicitLocale || resolveRuntimeLocale())\n\n useEffect(() => {\n if (explicitLocale) {\n setLocale(explicitLocale)\n return\n }\n\n if (typeof document === 'undefined') return\n\n const update = () => setLocale(resolveRuntimeLocale())\n update()\n\n const observer = new MutationObserver(update)\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['lang'],\n })\n\n window.addEventListener('languagechange', update)\n\n return () => {\n observer.disconnect()\n window.removeEventListener('languagechange', update)\n }\n }, [explicitLocale])\n\n return locale\n}\n"],"mappings":"sDAEA,SAAgB,GAA+B,CAC3C,GAAI,OAAO,SAAa,IAAa,CACjC,IAAM,EAAO,SAAS,gBAAgB,MAAM,MAAM,CAClD,GAAI,EAAM,OAAO,EAOrB,OAJI,OAAO,UAAc,MACd,UAAU,UAAY,UAAU,YAAY,KAGhD,KAIX,SAAgB,EAAkB,EAAiC,CAC/D,GAAM,CAAC,EAAQ,IAAA,EAAA,EAAA,cAA4B,GAAkB,GAAsB,CAAC,CA2BpF,OAzBA,EAAA,EAAA,eAAgB,CACZ,GAAI,EAAgB,CAChB,EAAU,EAAe,CACzB,OAGJ,GAAI,OAAO,SAAa,IAAa,OAErC,IAAM,MAAe,EAAU,GAAsB,CAAC,CACtD,GAAQ,CAER,IAAM,EAAW,IAAI,iBAAiB,EAAO,CAQ7C,OAPA,EAAS,QAAQ,SAAS,gBAAiB,CACvC,WAAY,GACZ,gBAAiB,CAAC,OAAO,CAC5B,CAAC,CAEF,OAAO,iBAAiB,iBAAkB,EAAO,KAEpC,CACT,EAAS,YAAY,CACrB,OAAO,oBAAoB,iBAAkB,EAAO,GAEzD,CAAC,EAAe,CAAC,CAEb"}
@@ -399,4 +399,4 @@ function j({ autoPlay: e = !1, interval: t = 5e3, showDots: a = !0, showArrows:
399
399
  //#endregion
400
400
  export { k as n, O as r, j as t };
401
401
 
402
- //# sourceMappingURL=media-DxnELIZO.js.map
402
+ //# sourceMappingURL=media-5IsYrhIQ.js.map