@banzamel/mineralui 2.3.0 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (236) hide show
  1. package/README.md +2 -2
  2. package/dist/{MAvatar-bUWENcq-.cjs → MAvatar-xI5aZ-bP.cjs} +2 -2
  3. package/dist/{MAvatar-bUWENcq-.cjs.map → MAvatar-xI5aZ-bP.cjs.map} +1 -1
  4. package/dist/{MButton-R08y1HCT.cjs → MButton-CMbmWmMI.cjs} +2 -2
  5. package/dist/{MButton-R08y1HCT.cjs.map → MButton-CMbmWmMI.cjs.map} +1 -1
  6. package/dist/{MButtonGroup-C-LiXWRC.cjs → MButtonGroup-agnKWUPy.cjs} +2 -2
  7. package/dist/{MButtonGroup-C-LiXWRC.cjs.map → MButtonGroup-agnKWUPy.cjs.map} +1 -1
  8. package/dist/{MCard-1OVOl4Ql.cjs → MCard-CADu7UUA.cjs} +2 -2
  9. package/dist/{MCard-1OVOl4Ql.cjs.map → MCard-CADu7UUA.cjs.map} +1 -1
  10. package/dist/{MCheckbox-CM5HJQWW.cjs → MCheckbox-stBujis6.cjs} +2 -2
  11. package/dist/{MCheckbox-CM5HJQWW.cjs.map → MCheckbox-stBujis6.cjs.map} +1 -1
  12. package/dist/{MConflictIllustration-B2AtfpYO.cjs → MConflictIllustration-CWWnskbi.cjs} +2 -2
  13. package/dist/{MConflictIllustration-B2AtfpYO.cjs.map → MConflictIllustration-CWWnskbi.cjs.map} +1 -1
  14. package/dist/{MDetailList-DTLU7HQZ.cjs → MDetailList-CQ2sJ7Jl.cjs} +2 -2
  15. package/dist/{MDetailList-DTLU7HQZ.cjs.map → MDetailList-CQ2sJ7Jl.cjs.map} +1 -1
  16. package/dist/MDropdownMenu-B7RR8d8x.js +172 -0
  17. package/dist/MDropdownMenu-B7RR8d8x.js.map +1 -0
  18. package/dist/MDropdownMenu-DAzieAOs.cjs +2 -0
  19. package/dist/MDropdownMenu-DAzieAOs.cjs.map +1 -0
  20. package/dist/{MGrid-B_0kFUws.cjs → MGrid-LHi7TY5J.cjs} +2 -2
  21. package/dist/{MGrid-B_0kFUws.cjs.map → MGrid-LHi7TY5J.cjs.map} +1 -1
  22. package/dist/{MHeading-BLnb3dNv.cjs → MHeading-7yt1C6oS.cjs} +2 -2
  23. package/dist/{MHeading-BLnb3dNv.cjs.map → MHeading-7yt1C6oS.cjs.map} +1 -1
  24. package/dist/{MI18nProvider-Cg-vxV6j.cjs → MI18nProvider-Cx4ZaFtv.cjs} +2 -2
  25. package/dist/{MI18nProvider-Cg-vxV6j.cjs.map → MI18nProvider-Cx4ZaFtv.cjs.map} +1 -1
  26. package/dist/{MInput-BpTlP8GE.cjs → MInput-BSeWCsPi.cjs} +2 -2
  27. package/dist/{MInput-BpTlP8GE.cjs.map → MInput-BSeWCsPi.cjs.map} +1 -1
  28. package/dist/{MInputCVC-B4V0QI5h.js → MInputCVC-CtHPCx_r.js} +2 -2
  29. package/dist/{MInputCVC-B4V0QI5h.js.map → MInputCVC-CtHPCx_r.js.map} +1 -1
  30. package/dist/{MInputCVC-BlY5OrVn.cjs → MInputCVC-rNs8w4gH.cjs} +2 -2
  31. package/dist/{MInputCVC-BlY5OrVn.cjs.map → MInputCVC-rNs8w4gH.cjs.map} +1 -1
  32. package/dist/{MInputSearch-9wcXlY8-.cjs → MInputSearch-BfPPgEGZ.cjs} +2 -2
  33. package/dist/{MInputSearch-9wcXlY8-.cjs.map → MInputSearch-BfPPgEGZ.cjs.map} +1 -1
  34. package/dist/{MKbd-n4fhKIxb.cjs → MKbd-C6XHWlmE.cjs} +2 -2
  35. package/dist/{MKbd-n4fhKIxb.cjs.map → MKbd-C6XHWlmE.cjs.map} +1 -1
  36. package/dist/{MLink-Biipj7xz.cjs → MLink-CbaDlP5I.cjs} +2 -2
  37. package/dist/{MLink-Biipj7xz.cjs.map → MLink-CbaDlP5I.cjs.map} +1 -1
  38. package/dist/{MLoader-XcpKlLrd.cjs → MLoader-DELAIhz5.cjs} +2 -2
  39. package/dist/{MLoader-XcpKlLrd.cjs.map → MLoader-DELAIhz5.cjs.map} +1 -1
  40. package/dist/{MPagination-C6QQdEj_.cjs → MPagination-C2lpvPqC.cjs} +2 -2
  41. package/dist/{MPagination-C6QQdEj_.cjs.map → MPagination-C2lpvPqC.cjs.map} +1 -1
  42. package/dist/MPopover-DI_7niwe.cjs +2 -0
  43. package/dist/MPopover-DI_7niwe.cjs.map +1 -0
  44. package/dist/{MPopover-C5aaGhma.js → MPopover-Dd-GIBU6.js} +10 -5
  45. package/dist/MPopover-Dd-GIBU6.js.map +1 -0
  46. package/dist/{MPortal-BciZHNDC.cjs → MPortal-C9Ucq8Um.cjs} +2 -2
  47. package/dist/{MPortal-BciZHNDC.cjs.map → MPortal-C9Ucq8Um.cjs.map} +1 -1
  48. package/dist/{MSimpleGrid-BwNfaxQP.cjs → MSimpleGrid-K-8Qg9em.cjs} +2 -2
  49. package/dist/{MSimpleGrid-BwNfaxQP.cjs.map → MSimpleGrid-K-8Qg9em.cjs.map} +1 -1
  50. package/dist/{MSkeleton-CLSU5pL6.cjs → MSkeleton-DgU8aktI.cjs} +2 -2
  51. package/dist/{MSkeleton-CLSU5pL6.cjs.map → MSkeleton-DgU8aktI.cjs.map} +1 -1
  52. package/dist/{MSlider-DZnMB49q.cjs → MSlider-0ApojrDC.cjs} +2 -2
  53. package/dist/{MSlider-DZnMB49q.cjs.map → MSlider-0ApojrDC.cjs.map} +1 -1
  54. package/dist/{MStack-BP_BUeCc.cjs → MStack-BOOciEts.cjs} +2 -2
  55. package/dist/{MStack-BP_BUeCc.cjs.map → MStack-BOOciEts.cjs.map} +1 -1
  56. package/dist/{MSubText-VHsgFsv2.cjs → MSubText-WixraICV.cjs} +2 -2
  57. package/dist/{MSubText-VHsgFsv2.cjs.map → MSubText-WixraICV.cjs.map} +1 -1
  58. package/dist/{MSurface-CYeVFOw_.cjs → MSurface-CF8BFFn4.cjs} +2 -2
  59. package/dist/{MSurface-CYeVFOw_.cjs.map → MSurface-CF8BFFn4.cjs.map} +1 -1
  60. package/dist/{MTag-BzTp1crT.cjs → MTag-CgXh2PQC.cjs} +2 -2
  61. package/dist/{MTag-BzTp1crT.cjs.map → MTag-CgXh2PQC.cjs.map} +1 -1
  62. package/dist/{MText-j6Zbbj5Y.cjs → MText-CDDEGjBx.cjs} +2 -2
  63. package/dist/{MText-j6Zbbj5Y.cjs.map → MText-CDDEGjBx.cjs.map} +1 -1
  64. package/dist/{MTooltip-BEfO9jTe.cjs → MTooltip-BWqyv6QU.cjs} +2 -2
  65. package/dist/{MTooltip-BEfO9jTe.cjs.map → MTooltip-BWqyv6QU.cjs.map} +1 -1
  66. package/dist/{MTreeView-DuQkm0ZV.cjs → MTreeView-BcVw0Bgz.cjs} +2 -2
  67. package/dist/{MTreeView-DuQkm0ZV.cjs.map → MTreeView-BcVw0Bgz.cjs.map} +1 -1
  68. package/dist/{arduino-UeOrXakL.js → arduino-BHobW-W2.js} +1 -1
  69. package/dist/{arduino-UeOrXakL.js.map → arduino-BHobW-W2.js.map} +1 -1
  70. package/dist/{arduino-DdDHMIWB.cjs → arduino-Bedph8hQ.cjs} +1 -1
  71. package/dist/{arduino-DdDHMIWB.cjs.map → arduino-Bedph8hQ.cjs.map} +1 -1
  72. package/dist/{bash-B17_F5Sw.cjs → bash-CK4DSkpy.cjs} +1 -1
  73. package/dist/{bash-B17_F5Sw.cjs.map → bash-CK4DSkpy.cjs.map} +1 -1
  74. package/dist/{bash-CrHemXky.js → bash-oKnFbgn1.js} +1 -1
  75. package/dist/{bash-CrHemXky.js.map → bash-oKnFbgn1.js.map} +1 -1
  76. package/dist/{c-ODLxeMV_.cjs → c-9Uw9QchT.cjs} +1 -1
  77. package/dist/{c-ODLxeMV_.cjs.map → c-9Uw9QchT.cjs.map} +1 -1
  78. package/dist/{c-D9302r2r.js → c-Bjn-r6WZ.js} +1 -1
  79. package/dist/{c-D9302r2r.js.map → c-Bjn-r6WZ.js.map} +1 -1
  80. package/dist/calendar-BFfeWRa0.cjs +2 -0
  81. package/dist/calendar-BFfeWRa0.cjs.map +1 -0
  82. package/dist/calendar-DhRP5_mS.js +192 -0
  83. package/dist/calendar-DhRP5_mS.js.map +1 -0
  84. package/dist/calendar.cjs +3 -0
  85. package/dist/calendar.d.ts +1 -0
  86. package/dist/calendar.js +4 -0
  87. package/dist/{cards-CQSYgH9U.cjs → cards-Bwos44EP.cjs} +2 -2
  88. package/dist/{cards-CQSYgH9U.cjs.map → cards-Bwos44EP.cjs.map} +1 -1
  89. package/dist/{cards-Cpr9B8Mu.js → cards-Dus8TmSD.js} +4 -4
  90. package/dist/{cards-Cpr9B8Mu.js.map → cards-Dus8TmSD.js.map} +1 -1
  91. package/dist/cards.cjs +1 -1
  92. package/dist/cards.js +1 -1
  93. package/dist/components/calendar/MMiniCalendar/MMiniCalendar.d.ts +6 -0
  94. package/dist/components/calendar/MMiniCalendar/MMiniCalendar.types.d.ts +35 -0
  95. package/dist/components/calendar/MMiniCalendar/index.d.ts +2 -0
  96. package/dist/components/calendar/index.d.ts +2 -0
  97. package/dist/components/dropdowns/MSelect/MSelect.d.ts +1 -1
  98. package/dist/components/dropdowns/MSelect/MSelect.types.d.ts +2 -0
  99. package/dist/components/overlays/MDropdownMenu/MDropdownMenu.d.ts +1 -1
  100. package/dist/components/overlays/MDropdownMenu/MDropdownMenu.types.d.ts +7 -0
  101. package/dist/components/overlays/MDropdownMenu/index.d.ts +1 -1
  102. package/dist/components/overlays/index.d.ts +1 -1
  103. package/dist/{controls-CT_0lIPr.cjs → controls-CeHdKaQv.cjs} +2 -2
  104. package/dist/{controls-CT_0lIPr.cjs.map → controls-CeHdKaQv.cjs.map} +1 -1
  105. package/dist/controls.cjs +1 -1
  106. package/dist/{core-DBpQf3uY.cjs → core-CLRD6sG4.cjs} +1 -1
  107. package/dist/{core-DBpQf3uY.cjs.map → core-CLRD6sG4.cjs.map} +1 -1
  108. package/dist/{core-yRqh2XLu.js → core-CMHNXulE.js} +1 -1
  109. package/dist/{core-yRqh2XLu.js.map → core-CMHNXulE.js.map} +1 -1
  110. package/dist/{cpp-DuTgLZC1.cjs → cpp-BWqMcMeX.cjs} +1 -1
  111. package/dist/{cpp-DuTgLZC1.cjs.map → cpp-BWqMcMeX.cjs.map} +1 -1
  112. package/dist/{cpp-CLYSpJBB.js → cpp-b3FmFTKl.js} +1 -1
  113. package/dist/{cpp-CLYSpJBB.js.map → cpp-b3FmFTKl.js.map} +1 -1
  114. package/dist/{css-BgGh0eG1.js → css-8EzLAJKV.js} +1 -1
  115. package/dist/{css-BgGh0eG1.js.map → css-8EzLAJKV.js.map} +1 -1
  116. package/dist/{css-D0f-qByc.cjs → css-B4MkxW0b.cjs} +1 -1
  117. package/dist/{css-D0f-qByc.cjs.map → css-B4MkxW0b.cjs.map} +1 -1
  118. package/dist/{data-C-6DP7iY.js → data-Dh3C_VTi.js} +2 -2
  119. package/dist/{data-C-6DP7iY.js.map → data-Dh3C_VTi.js.map} +1 -1
  120. package/dist/{data-BZ92hzXx.cjs → data-Dl6U8Uct.cjs} +2 -2
  121. package/dist/{data-BZ92hzXx.cjs.map → data-Dl6U8Uct.cjs.map} +1 -1
  122. package/dist/data.cjs +1 -1
  123. package/dist/data.js +1 -1
  124. package/dist/{display-BF4jASt9.js → display-CYC1AImx.js} +12 -12
  125. package/dist/{display-BF4jASt9.js.map → display-CYC1AImx.js.map} +1 -1
  126. package/dist/{display-DMix8BmD.cjs → display-DU9E_18w.cjs} +2 -2
  127. package/dist/{display-DMix8BmD.cjs.map → display-DU9E_18w.cjs.map} +1 -1
  128. package/dist/display.cjs +1 -1
  129. package/dist/display.js +1 -1
  130. package/dist/dropdowns-ByDu8Wbt.js +1697 -0
  131. package/dist/dropdowns-ByDu8Wbt.js.map +1 -0
  132. package/dist/dropdowns-vaj6vhl6.cjs +2 -0
  133. package/dist/dropdowns-vaj6vhl6.cjs.map +1 -0
  134. package/dist/dropdowns.cjs +1 -1
  135. package/dist/dropdowns.js +1 -1
  136. package/dist/{feedback-BeJpXoKd.cjs → feedback-CUGuh4QZ.cjs} +2 -2
  137. package/dist/{feedback-BeJpXoKd.cjs.map → feedback-CUGuh4QZ.cjs.map} +1 -1
  138. package/dist/feedback.cjs +1 -1
  139. package/dist/{form-BWGLrCPi.cjs → form-DICGXS6_.cjs} +2 -2
  140. package/dist/{form-BWGLrCPi.cjs.map → form-DICGXS6_.cjs.map} +1 -1
  141. package/dist/{form-CgH1hioG.js → form-Dri4AzY9.js} +1 -1
  142. package/dist/{form-CgH1hioG.js.map → form-Dri4AzY9.js.map} +1 -1
  143. package/dist/form.cjs +1 -1
  144. package/dist/form.js +1 -1
  145. package/dist/frameworkTexts-C1yvIVm4.js +109 -0
  146. package/dist/frameworkTexts-C1yvIVm4.js.map +1 -0
  147. package/dist/frameworkTexts-D3wbwWCu.cjs +2 -0
  148. package/dist/frameworkTexts-D3wbwWCu.cjs.map +1 -0
  149. package/dist/i18n/frameworkTexts.d.ts +83 -0
  150. package/dist/i18n.cjs +1 -1
  151. package/dist/{icons-D675Im0B.cjs → icons-BxurYyW-.cjs} +2 -2
  152. package/dist/{icons-D675Im0B.cjs.map → icons-BxurYyW-.cjs.map} +1 -1
  153. package/dist/icons.cjs +1 -1
  154. package/dist/illustrations.cjs +1 -1
  155. package/dist/index.cjs +1 -1
  156. package/dist/index.d.ts +1 -0
  157. package/dist/index.js +12 -11
  158. package/dist/{inputs-x6vjAGCq.cjs → inputs-GCUfD923.cjs} +2 -2
  159. package/dist/{inputs-x6vjAGCq.cjs.map → inputs-GCUfD923.cjs.map} +1 -1
  160. package/dist/inputs.cjs +1 -1
  161. package/dist/inputs.js +1 -1
  162. package/dist/{javascript-CGjvHPZ1.cjs → javascript-BGrveJJw.cjs} +1 -1
  163. package/dist/{javascript-CGjvHPZ1.cjs.map → javascript-BGrveJJw.cjs.map} +1 -1
  164. package/dist/{javascript-CX3JhsYu.js → javascript-CH9YvIk2.js} +1 -1
  165. package/dist/{javascript-CX3JhsYu.js.map → javascript-CH9YvIk2.js.map} +1 -1
  166. package/dist/{json-BPIcVdlp.js → json-CPWARxtL.js} +1 -1
  167. package/dist/{json-BPIcVdlp.js.map → json-CPWARxtL.js.map} +1 -1
  168. package/dist/{json-B8svQsK0.cjs → json-D6oa0Lra.cjs} +1 -1
  169. package/dist/{json-B8svQsK0.cjs.map → json-D6oa0Lra.cjs.map} +1 -1
  170. package/dist/{layout-CdSpVJuK.js → layout-CS_dHOLM.js} +2 -2
  171. package/dist/{layout-CdSpVJuK.js.map → layout-CS_dHOLM.js.map} +1 -1
  172. package/dist/{layout-Ddo7HUPu.cjs → layout-Gr99WWTA.cjs} +2 -2
  173. package/dist/{layout-Ddo7HUPu.cjs.map → layout-Gr99WWTA.cjs.map} +1 -1
  174. package/dist/layout.cjs +1 -1
  175. package/dist/layout.js +1 -1
  176. package/dist/{licensing-DysMClel.cjs → licensing-DXCHcZd1.cjs} +2 -2
  177. package/dist/licensing-DXCHcZd1.cjs.map +1 -0
  178. package/dist/licensing-f5KYVz7D.js.map +1 -1
  179. package/dist/{locale-CbnstsMH.cjs → locale-BGLDTJSi.cjs} +2 -2
  180. package/dist/{locale-CbnstsMH.cjs.map → locale-BGLDTJSi.cjs.map} +1 -1
  181. package/dist/{media-DRz3JZfr.cjs → media-CE59IEdY.cjs} +2 -2
  182. package/dist/{media-DRz3JZfr.cjs.map → media-CE59IEdY.cjs.map} +1 -1
  183. package/dist/media.cjs +1 -1
  184. package/dist/{overlays-BUZEaZaJ.cjs → overlays--Pe-H5TW.cjs} +2 -2
  185. package/dist/{overlays-BUZEaZaJ.cjs.map → overlays--Pe-H5TW.cjs.map} +1 -1
  186. package/dist/{overlays-C1vO_A2I.js → overlays-DCXP_KsX.js} +2 -2
  187. package/dist/{overlays-C1vO_A2I.js.map → overlays-DCXP_KsX.js.map} +1 -1
  188. package/dist/overlays.cjs +1 -1
  189. package/dist/overlays.js +2 -2
  190. package/dist/{php-CKyelegh.cjs → php-DJ1nTQpr.cjs} +1 -1
  191. package/dist/{php-CKyelegh.cjs.map → php-DJ1nTQpr.cjs.map} +1 -1
  192. package/dist/{php-CBRzjinf.js → php-DeBdikHj.js} +1 -1
  193. package/dist/{php-CBRzjinf.js.map → php-DeBdikHj.js.map} +1 -1
  194. package/dist/primitives.cjs +1 -1
  195. package/dist/primitives.js +1 -1
  196. package/dist/style-runtime.cjs +1 -1
  197. package/dist/style-runtime.js +1 -1
  198. package/dist/styles.css +1 -1
  199. package/dist/{theme-BfNZicWk.cjs → theme-Bjs11y3s.cjs} +2 -2
  200. package/dist/{theme-BfNZicWk.cjs.map → theme-Bjs11y3s.cjs.map} +1 -1
  201. package/dist/theme.cjs +1 -1
  202. package/dist/{typescript-Xt3Sotw5.js → typescript-B5GRzMtL.js} +1 -1
  203. package/dist/{typescript-Xt3Sotw5.js.map → typescript-B5GRzMtL.js.map} +1 -1
  204. package/dist/{typescript-D6PDzwkM.cjs → typescript-qNh_eaB0.cjs} +1 -1
  205. package/dist/{typescript-D6PDzwkM.cjs.map → typescript-qNh_eaB0.cjs.map} +1 -1
  206. package/dist/{typography-Dk9kIORI.cjs → typography-D4PUdtMV.cjs} +2 -2
  207. package/dist/{typography-Dk9kIORI.cjs.map → typography-D4PUdtMV.cjs.map} +1 -1
  208. package/dist/typography.cjs +1 -1
  209. package/dist/{useGhostText-Dmkw3Am8.cjs → useGhostText-BTPneo4u.cjs} +2 -2
  210. package/dist/{useGhostText-Dmkw3Am8.cjs.map → useGhostText-BTPneo4u.cjs.map} +1 -1
  211. package/dist/{useInteractionEffect-DFTdcWHl.cjs → useInteractionEffect-q_9csNj7.cjs} +2 -2
  212. package/dist/{useInteractionEffect-DFTdcWHl.cjs.map → useInteractionEffect-q_9csNj7.cjs.map} +1 -1
  213. package/dist/{useKeyboardNav-HVG9JFD2.cjs → useKeyboardNav-D_OwIEZp.cjs} +2 -2
  214. package/dist/{useKeyboardNav-HVG9JFD2.cjs.map → useKeyboardNav-D_OwIEZp.cjs.map} +1 -1
  215. package/dist/utils/calendarDates.d.ts +51 -0
  216. package/dist/utils/licensing.d.ts +1 -1
  217. package/dist/utils/useControllableState.d.ts +5 -0
  218. package/dist/utils/useElementWidth.d.ts +10 -0
  219. package/dist/utils.cjs +1 -1
  220. package/dist/{xml-CrpWqcDk.js → xml-BTZ6XeQ9.js} +1 -1
  221. package/dist/{xml-CrpWqcDk.js.map → xml-BTZ6XeQ9.js.map} +1 -1
  222. package/dist/{xml-4YlaGgjP.cjs → xml-_Z3NZw2H.cjs} +1 -1
  223. package/dist/{xml-4YlaGgjP.cjs.map → xml-_Z3NZw2H.cjs.map} +1 -1
  224. package/package.json +16 -3
  225. package/dist/MDropdownMenu-BvN5grK5.cjs +0 -2
  226. package/dist/MDropdownMenu-BvN5grK5.cjs.map +0 -1
  227. package/dist/MDropdownMenu-CFoKJ7V6.js +0 -157
  228. package/dist/MDropdownMenu-CFoKJ7V6.js.map +0 -1
  229. package/dist/MPopover-C5aaGhma.js.map +0 -1
  230. package/dist/MPopover-CV-9MArH.cjs +0 -2
  231. package/dist/MPopover-CV-9MArH.cjs.map +0 -1
  232. package/dist/dropdowns-BwAVoncd.js +0 -1752
  233. package/dist/dropdowns-BwAVoncd.js.map +0 -1
  234. package/dist/dropdowns-D5IF0TK7.cjs +0 -2
  235. package/dist/dropdowns-D5IF0TK7.cjs.map +0 -1
  236. package/dist/licensing-DysMClel.cjs.map +0 -1
@@ -63,13 +63,16 @@ function p({ open: s, anchorRef: c, onClose: d, placement: p = "bottom-start", m
63
63
  O(Number.isFinite(r) ? r + 1 : null);
64
64
  }, [c, g]), A = n(() => {
65
65
  if (!c.current || !b.current) return;
66
- let e = c.current.getBoundingClientRect(), t = b.current.getBoundingClientRect(), n = {
66
+ let e = c.current.getBoundingClientRect(), t = {
67
+ width: b.current.offsetWidth,
68
+ height: b.current.offsetHeight
69
+ }, n = {
67
70
  width: window.innerWidth,
68
71
  height: window.innerHeight
69
72
  }, r = p.startsWith("top"), i = p.startsWith("right"), a = p.startsWith("left"), o = i || a, s = p.endsWith("end"), l, u;
70
73
  if (o) {
71
74
  let r = n.width - e.right - h, a = e.left - h, o = i ? r < t.width && a > r : a < t.width && r > a;
72
- E(o), u = (i ? !o : o) ? e.right + h + window.scrollX : e.left - t.width - h + window.scrollX, l = s ? e.bottom - t.height + window.scrollY : e.top + window.scrollY;
75
+ E(o), u = (i ? !o : o) ? e.right + h + window.scrollX : e.left - t.width - h + window.scrollX, l = s ? e.bottom - t.height + window.scrollY : e.top + window.scrollY, l = Math.min(l, window.scrollY + n.height - t.height - 8);
73
76
  } else {
74
77
  let i = n.height - e.bottom - h, a = e.top - h, o = r ? a < t.height && i > a : i < t.height && a > i;
75
78
  E(o), l = (r ? !o : o) ? e.top - t.height - h + window.scrollY : e.bottom + h + window.scrollY, u = s ? e.right - t.width + window.scrollX : e.left + window.scrollX;
@@ -90,11 +93,13 @@ function p({ open: s, anchorRef: c, onClose: d, placement: p = "bottom-start", m
90
93
  w(null), O(null);
91
94
  return;
92
95
  }
93
- return k(), requestAnimationFrame(A), document.addEventListener("scroll", A, {
96
+ k(), requestAnimationFrame(A);
97
+ let e = typeof ResizeObserver > "u" ? null : new ResizeObserver(() => A());
98
+ return e && b.current && e.observe(b.current), document.addEventListener("scroll", A, {
94
99
  capture: !0,
95
100
  passive: !0
96
101
  }), window.addEventListener("resize", A, { passive: !0 }), () => {
97
- document.removeEventListener("scroll", A, { capture: !0 }), window.removeEventListener("resize", A);
102
+ e?.disconnect(), document.removeEventListener("scroll", A, { capture: !0 }), window.removeEventListener("resize", A);
98
103
  };
99
104
  }, [
100
105
  s,
@@ -147,4 +152,4 @@ function p({ open: s, anchorRef: c, onClose: d, placement: p = "bottom-start", m
147
152
  //#endregion
148
153
  export { p as t };
149
154
 
150
- //# sourceMappingURL=MPopover-C5aaGhma.js.map
155
+ //# sourceMappingURL=MPopover-Dd-GIBU6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MPopover-Dd-GIBU6.js","names":[],"sources":["../src/components/primitives/MPopover/popoverStack.ts","../src/components/primitives/MPopover/MPopover.tsx"],"sourcesContent":["/**\n * Registry of currently-open MPopover instances.\n *\n * Every popover portals its content to `document.body`, so a popover opened\n * from inside another popover is NOT a DOM descendant of its parent. That\n * breaks the naive outside-click test (`parent.contains(target)`): pressing a\n * nested dropdown item looks like an outside click to the parent, the parent\n * closes, React unmounts the nested menu mid-gesture, and the browser never\n * gets to fire `click` because mousedown and mouseup landed on different\n * elements. The action silently does nothing.\n *\n * This registry restores the nesting relation the DOM lost. Nesting is derived\n * from where each popover's ANCHOR lives, not from open order: a popover whose\n * anchor sits inside another popover's element is that popover's child. Open\n * order would misclassify two independent popovers that happen to be open at\n * the same time — clicking the newer one must still close the older one.\n */\n\nexport interface PopoverRegistration {\n id: number\n getPopoverEl: () => HTMLElement | null\n getAnchorEl: () => HTMLElement | null\n}\n\nconst registrations: PopoverRegistration[] = []\nlet nextId = 1\n\nexport function nextPopoverId(): number {\n return nextId++\n}\n\nexport function registerPopover(registration: PopoverRegistration): () => void {\n registrations.push(registration)\n return () => {\n const index = registrations.indexOf(registration)\n if (index !== -1) registrations.splice(index, 1)\n }\n}\n\n/** The registered popover whose element contains `entry`'s anchor, if any. */\nfunction parentIdOf(entry: PopoverRegistration): number | null {\n const anchor = entry.getAnchorEl()\n if (!anchor) return null\n\n for (const other of registrations) {\n if (other.id === entry.id) continue\n const element = other.getPopoverEl()\n if (element && element.contains(anchor)) return other.id\n }\n\n return null\n}\n\n/**\n * True when `target` lies inside a popover that is nested (at any depth) within\n * the popover identified by `id`. Callers use it to keep a parent open while\n * the interaction belongs to one of its descendants.\n */\nexport function isInsideDescendantPopover(id: number, target: Node | null): boolean {\n if (!target) return false\n\n for (const entry of registrations) {\n if (entry.id === id) continue\n\n const element = entry.getPopoverEl()\n if (!element || !element.contains(target)) continue\n\n // Walk the ancestor chain of the popover that was actually hit.\n // `seen` guards against a cycle if a malformed tree ever produces one.\n const seen = new Set<number>()\n let cursor = parentIdOf(entry)\n\n while (cursor !== null && !seen.has(cursor)) {\n if (cursor === id) return true\n seen.add(cursor)\n const parent = registrations.find((candidate) => candidate.id === cursor)\n cursor = parent ? parentIdOf(parent) : null\n }\n }\n\n return false\n}\n\n/** Test-only helper — the registry is module state that outlives a render. */\nexport function __resetPopoverStack(): void {\n registrations.length = 0\n nextId = 1\n}\n","import {useState, useEffect, useRef, useCallback} from 'react'\nimport {MPortal} from '../MPortal'\nimport {cn} from '../../../utils/cn'\nimport {isInsideDescendantPopover, nextPopoverId, registerPopover} from './popoverStack'\nimport type {MPopoverProps} from './MPopover.types'\nimport './MPopover.css'\n\n// Position floating content relative to an anchor with viewport-aware flipping.\nexport function MPopover({\n open,\n anchorRef,\n onClose,\n placement = 'bottom-start',\n matchWidth = false,\n offset = 4,\n zIndex,\n children,\n className,\n style,\n}: MPopoverProps) {\n const popoverRef = useRef<HTMLDivElement>(null)\n const popoverIdRef = useRef<number>(null)\n if (popoverIdRef.current === null) popoverIdRef.current = nextPopoverId()\n const popoverId = popoverIdRef.current\n const [position, setPosition] = useState<{top: number; left: number; width?: number} | null>(null)\n const [flipped, setFlipped] = useState(false)\n const [layerZ, setLayerZ] = useState<number | string | null>(null)\n\n // Lift popovers above drawers, modals and mobile sidebars when the anchor sits inside them.\n const updateLayer = useCallback(() => {\n if (zIndex !== undefined) {\n setLayerZ(zIndex)\n return\n }\n\n const anchor = anchorRef.current\n if (!anchor || typeof window === 'undefined') {\n setLayerZ(null)\n return\n }\n\n const layerHost = anchor.closest(\n '.drawer-backdrop, .modal-backdrop, .sheet-backdrop, .sidebar.mobile-open, .popover'\n )\n if (!layerHost) {\n setLayerZ(null)\n return\n }\n\n const computedZ = window.getComputedStyle(layerHost).zIndex\n const parsedZ = Number.parseInt(computedZ, 10)\n setLayerZ(Number.isFinite(parsedZ) ? parsedZ + 1 : null)\n }, [anchorRef, zIndex])\n\n // Recalculate popover position whenever layout or viewport constraints change.\n const updatePosition = useCallback(() => {\n if (!anchorRef.current || !popoverRef.current) return\n\n const anchor = anchorRef.current.getBoundingClientRect()\n // Layout size, not getBoundingClientRect: the open animation scales the popover, and\n // measuring mid-animation under-reports its height by ~5 % (enough to overflow the\n // viewport after a flip / shift).\n const popover = {width: popoverRef.current.offsetWidth, height: popoverRef.current.offsetHeight}\n const viewport = {\n width: window.innerWidth,\n height: window.innerHeight,\n }\n\n const isTop = placement.startsWith('top')\n const isRight = placement.startsWith('right')\n const isLeft = placement.startsWith('left')\n const isHorizontal = isRight || isLeft\n const isEnd = placement.endsWith('end')\n\n let top: number\n let left: number\n\n if (isHorizontal) {\n // Horizontal placement: position to the right or left of the anchor\n const spaceRight = viewport.width - anchor.right - offset\n const spaceLeft = anchor.left - offset\n const shouldFlip = isRight\n ? spaceRight < popover.width && spaceLeft > spaceRight\n : spaceLeft < popover.width && spaceRight > spaceLeft\n\n setFlipped(shouldFlip)\n\n const showOnRight = isRight ? !shouldFlip : shouldFlip\n\n if (showOnRight) {\n left = anchor.right + offset + window.scrollX\n } else {\n left = anchor.left - popover.width - offset + window.scrollX\n }\n\n if (isEnd) {\n top = anchor.bottom - popover.height + window.scrollY\n } else {\n top = anchor.top + window.scrollY\n }\n\n // Shift along the anchor edge so a side popover near the bottom of the viewport\n // slides up instead of running off-screen (the top clamp below wins when it is\n // taller than the viewport).\n top = Math.min(top, window.scrollY + viewport.height - popover.height - 8)\n } else {\n // Vertical placement: position above or below the anchor\n const spaceBelow = viewport.height - anchor.bottom - offset\n const spaceAbove = anchor.top - offset\n const shouldFlip = isTop\n ? spaceAbove < popover.height && spaceBelow > spaceAbove\n : spaceBelow < popover.height && spaceAbove > spaceBelow\n\n setFlipped(shouldFlip)\n\n const showOnTop = isTop ? !shouldFlip : shouldFlip\n\n if (showOnTop) {\n top = anchor.top - popover.height - offset + window.scrollY\n } else {\n top = anchor.bottom + offset + window.scrollY\n }\n\n if (isEnd) {\n left = anchor.right - popover.width + window.scrollX\n } else {\n left = anchor.left + window.scrollX\n }\n }\n\n // Clamp to viewport\n left = Math.max(8, Math.min(left, viewport.width - popover.width - 8))\n top = Math.max(8 + window.scrollY, top)\n\n setPosition({\n top,\n left,\n width: matchWidth ? anchor.width : undefined,\n })\n }, [anchorRef, placement, offset, matchWidth])\n\n useEffect(() => {\n if (!open) {\n setPosition(null)\n setLayerZ(null)\n return\n }\n\n updateLayer()\n // Wait one frame so the rendered popover can be measured accurately.\n requestAnimationFrame(updatePosition)\n\n // Content that grows after opening (images, expanded lists) must re-run the\n // flip / shift, or the popover drifts past the viewport edge.\n const resizeObserver = typeof ResizeObserver === 'undefined' ? null : new ResizeObserver(() => updatePosition())\n if (resizeObserver && popoverRef.current) {\n resizeObserver.observe(popoverRef.current)\n }\n\n // `scroll` does not bubble, so a window listener only ever sees the\n // document scrolling. Anchors living inside a scrollable ancestor — an\n // app shell with a scrolling main region, MStickyPanel, an overflowing\n // card — would leave the popover stranded at its opening coordinates\n // while the anchor moved away underneath it. Scroll events do capture,\n // so a capture-phase listener on the document catches scrolling from\n // ANY container, including the document itself.\n document.addEventListener('scroll', updatePosition, {capture: true, passive: true})\n window.addEventListener('resize', updatePosition, {passive: true})\n return () => {\n resizeObserver?.disconnect()\n document.removeEventListener('scroll', updatePosition, {capture: true})\n window.removeEventListener('resize', updatePosition)\n }\n }, [open, updateLayer, updatePosition])\n\n // Close the popover with the standard Escape key interaction.\n useEffect(() => {\n if (!open) return\n const handleKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose()\n }\n document.addEventListener('keydown', handleKey)\n return () => document.removeEventListener('keydown', handleKey)\n }, [open, onClose])\n\n // Publish this instance while it is open so nested popovers can be related\n // back to it — see popoverStack.ts for why the DOM alone cannot answer this.\n useEffect(() => {\n if (!open) return\n return registerPopover({\n id: popoverId,\n getPopoverEl: () => popoverRef.current,\n getAnchorEl: () => anchorRef.current,\n })\n }, [open, popoverId, anchorRef])\n\n // Close when the user interacts outside both the popover and its anchor.\n useEffect(() => {\n if (!open) return\n const handleClick = (e: MouseEvent) => {\n const target = e.target as Node\n\n if (popoverRef.current?.contains(target) || anchorRef.current?.contains(target)) {\n return\n }\n\n // A popover nested inside this one is portaled to `document.body`,\n // so it fails the `contains` checks above even though the click\n // belongs to this popover's own subtree. Closing here would unmount\n // that child between mousedown and mouseup and swallow its click.\n if (isInsideDescendantPopover(popoverId, target)) {\n return\n }\n\n onClose()\n }\n document.addEventListener('mousedown', handleClick)\n return () => document.removeEventListener('mousedown', handleClick)\n }, [open, onClose, anchorRef, popoverId])\n\n if (!open) return null\n\n return (\n <MPortal>\n <div\n ref={popoverRef}\n className={cn('popover', flipped ? 'flipped' : 'normal', className)}\n style={{\n position: 'absolute',\n top: position?.top ?? 0,\n left: position?.left ?? 0,\n width: position?.width,\n zIndex: layerZ ?? undefined,\n visibility: position ? 'visible' : 'hidden',\n ...style,\n }}\n role=\"listbox\"\n >\n {children}\n </div>\n </MPortal>\n )\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- require(`./core-DBpQf3uY.cjs`);let e=require(`react-dom`);function t({children:t,container:n}){let r=n??(typeof document<`u`?document.body:null);return r?(0,e.createPortal)(t,r):null}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return t}});
2
- //# sourceMappingURL=MPortal-BciZHNDC.cjs.map
1
+ require(`./core-CLRD6sG4.cjs`);let e=require(`react-dom`);function t({children:t,container:n}){let r=n??(typeof document<`u`?document.body:null);return r?(0,e.createPortal)(t,r):null}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return t}});
2
+ //# sourceMappingURL=MPortal-C9Ucq8Um.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"MPortal-BciZHNDC.cjs","names":[],"sources":["../src/components/primitives/MPortal/MPortal.tsx"],"sourcesContent":["import {createPortal} from 'react-dom'\nimport type {MPortalProps} from './MPortal.types'\n\n// Mount children into a detached DOM target while defaulting to document.body.\nexport function MPortal({children, container}: MPortalProps) {\n const target = container ?? (typeof document !== 'undefined' ? document.body : null)\n if (!target) return null\n return createPortal(children, target)\n}\n"],"mappings":"0DAIA,SAAgB,EAAQ,CAAC,WAAU,aAA0B,CACzD,IAAM,EAAS,IAAc,OAAO,SAAa,IAAc,SAAS,KAAO,MAE/E,OADK,GACL,EAAA,EAAA,cAAoB,EAAU,EAAO,CADjB"}
1
+ {"version":3,"file":"MPortal-C9Ucq8Um.cjs","names":[],"sources":["../src/components/primitives/MPortal/MPortal.tsx"],"sourcesContent":["import {createPortal} from 'react-dom'\nimport type {MPortalProps} from './MPortal.types'\n\n// Mount children into a detached DOM target while defaulting to document.body.\nexport function MPortal({children, container}: MPortalProps) {\n const target = container ?? (typeof document !== 'undefined' ? document.body : null)\n if (!target) return null\n return createPortal(children, target)\n}\n"],"mappings":"0DAIA,SAAgB,EAAQ,CAAC,WAAU,aAA0B,CACzD,IAAM,EAAS,IAAc,OAAO,SAAa,IAAc,SAAS,KAAO,MAE/E,OADK,GACL,EAAA,EAAA,cAAoB,EAAU,EAAO,CADjB"}
@@ -1,2 +1,2 @@
1
- const e=require(`./cn-CU5TNITO.cjs`);require(`./core-DBpQf3uY.cjs`);let t=require(`react/jsx-runtime`);function n({columns:n=2,minItemWidth:r,className:i,style:a,children:o,...s}){return(0,t.jsx)(`div`,{className:e.t(`grid`,`columns-${n}`,i),style:{...r?{"--grid-min-item-width":r}:{},...a},...s,children:o})}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return n}});
2
- //# sourceMappingURL=MSimpleGrid-BwNfaxQP.cjs.map
1
+ const e=require(`./cn-CU5TNITO.cjs`);require(`./core-CLRD6sG4.cjs`);let t=require(`react/jsx-runtime`);function n({columns:n=2,minItemWidth:r,className:i,style:a,children:o,...s}){return(0,t.jsx)(`div`,{className:e.t(`grid`,`columns-${n}`,i),style:{...r?{"--grid-min-item-width":r}:{},...a},...s,children:o})}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return n}});
2
+ //# sourceMappingURL=MSimpleGrid-K-8Qg9em.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"MSimpleGrid-BwNfaxQP.cjs","names":[],"sources":["../src/components/layout/MSimpleGrid/MSimpleGrid.tsx"],"sourcesContent":["import type {MSimpleGridProps} from './MSimpleGrid.types'\nimport {cn} from '../../../utils/cn'\nimport './MSimpleGrid.css'\n\n// Render a simple equal-column grid with a shared default spacing.\nexport function MSimpleGrid({columns = 2, minItemWidth, className, style, children, ...rest}: MSimpleGridProps) {\n return (\n <div\n className={cn('grid', `columns-${columns}`, className)}\n style={{\n ...(minItemWidth ? {'--grid-min-item-width': minItemWidth} : {}),\n ...style,\n }}\n {...rest}\n >\n {children}\n </div>\n )\n}\n"],"mappings":"uGAKA,SAAgB,EAAY,CAAC,UAAU,EAAG,eAAc,YAAW,QAAO,WAAU,GAAG,GAAyB,CAC5G,OACI,EAAA,EAAA,KAAC,MAAD,CACI,UAAW,EAAA,EAAG,OAAQ,WAAW,IAAW,EAAU,CACtD,MAAO,CACH,GAAI,EAAe,CAAC,wBAAyB,EAAa,CAAG,EAAE,CAC/D,GAAG,EACN,CACD,GAAI,EAEH,WACC,CAAA"}
1
+ {"version":3,"file":"MSimpleGrid-K-8Qg9em.cjs","names":[],"sources":["../src/components/layout/MSimpleGrid/MSimpleGrid.tsx"],"sourcesContent":["import type {MSimpleGridProps} from './MSimpleGrid.types'\nimport {cn} from '../../../utils/cn'\nimport './MSimpleGrid.css'\n\n// Render a simple equal-column grid with a shared default spacing.\nexport function MSimpleGrid({columns = 2, minItemWidth, className, style, children, ...rest}: MSimpleGridProps) {\n return (\n <div\n className={cn('grid', `columns-${columns}`, className)}\n style={{\n ...(minItemWidth ? {'--grid-min-item-width': minItemWidth} : {}),\n ...style,\n }}\n {...rest}\n >\n {children}\n </div>\n )\n}\n"],"mappings":"uGAKA,SAAgB,EAAY,CAAC,UAAU,EAAG,eAAc,YAAW,QAAO,WAAU,GAAG,GAAyB,CAC5G,OACI,EAAA,EAAA,KAAC,MAAD,CACI,UAAW,EAAA,EAAG,OAAQ,WAAW,IAAW,EAAU,CACtD,MAAO,CACH,GAAI,EAAe,CAAC,wBAAyB,EAAa,CAAG,EAAE,CAC/D,GAAG,EACN,CACD,GAAI,EAEH,WACC,CAAA"}
@@ -1,2 +1,2 @@
1
- const e=require(`./theme-BfNZicWk.cjs`),t=require(`./cn-CU5TNITO.cjs`);require(`./core-DBpQf3uY.cjs`);let n=require(`react/jsx-runtime`);function r({color:r=`primary`,size:i=`md`,hidden:a,pulsing:o=!1,rounded:s=!1,fullWidth:c=!1,icon:l,className:u,children:d,...f}){return(0,n.jsxs)(`span`,{className:t.t(`badge`,`color-${r}`,i,o&&`pulsing`,s&&`rounded`,c&&`full-width`,u),...e.r(a),...f,children:[l&&(0,n.jsx)(`span`,{className:`badge-icon`,children:l}),d]})}function i(e,t){return t<=1?`100%`:e===t-1?`68%`:e===t-2&&t>3?`88%`:`100%`}function a({variant:e=`text`,width:r,height:a,radius:o,lines:s=3,gap:c,animate:l=!0,className:u,style:d,...f}){let p=l===!1?`none`:l===!0?`shimmer`:l;return e===`text`?(0,n.jsx)(`div`,{className:t.t(`skeleton-group`,u),style:{width:r??void 0,gap:c??void 0,...d},...f,children:Array.from({length:s},(e,r)=>(0,n.jsx)(`div`,{className:t.t(`skeleton`,`text`,p),style:{width:i(r,s),height:a??void 0,borderRadius:o??void 0}},r))}):(0,n.jsx)(`div`,{className:t.t(`skeleton`,e,p,u),style:{width:r??void 0,height:a??void 0,borderRadius:o??void 0,...d},...f})}Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return a}});
2
- //# sourceMappingURL=MSkeleton-CLSU5pL6.cjs.map
1
+ const e=require(`./theme-Bjs11y3s.cjs`),t=require(`./cn-CU5TNITO.cjs`);require(`./core-CLRD6sG4.cjs`);let n=require(`react/jsx-runtime`);function r({color:r=`primary`,size:i=`md`,hidden:a,pulsing:o=!1,rounded:s=!1,fullWidth:c=!1,icon:l,className:u,children:d,...f}){return(0,n.jsxs)(`span`,{className:t.t(`badge`,`color-${r}`,i,o&&`pulsing`,s&&`rounded`,c&&`full-width`,u),...e.r(a),...f,children:[l&&(0,n.jsx)(`span`,{className:`badge-icon`,children:l}),d]})}function i(e,t){return t<=1?`100%`:e===t-1?`68%`:e===t-2&&t>3?`88%`:`100%`}function a({variant:e=`text`,width:r,height:a,radius:o,lines:s=3,gap:c,animate:l=!0,className:u,style:d,...f}){let p=l===!1?`none`:l===!0?`shimmer`:l;return e===`text`?(0,n.jsx)(`div`,{className:t.t(`skeleton-group`,u),style:{width:r??void 0,gap:c??void 0,...d},...f,children:Array.from({length:s},(e,r)=>(0,n.jsx)(`div`,{className:t.t(`skeleton`,`text`,p),style:{width:i(r,s),height:a??void 0,borderRadius:o??void 0}},r))}):(0,n.jsx)(`div`,{className:t.t(`skeleton`,e,p,u),style:{width:r??void 0,height:a??void 0,borderRadius:o??void 0,...d},...f})}Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return a}});
2
+ //# sourceMappingURL=MSkeleton-DgU8aktI.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"MSkeleton-CLSU5pL6.cjs","names":[],"sources":["../src/components/feedback/MBadge/MBadge.tsx","../src/components/feedback/MSkeleton/MSkeleton.tsx"],"sourcesContent":["import type {MBadgeProps} from './MBadge.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport './MBadge.css'\n\n// Render a compact semantic label for status and metadata.\nexport function MBadge({\n color = 'primary',\n size = 'md',\n hidden,\n pulsing = false,\n rounded = false,\n fullWidth = false,\n icon,\n className,\n children,\n ...rest\n}: MBadgeProps) {\n return (\n <span\n className={cn(\n 'badge',\n `color-${color}`,\n size,\n pulsing && 'pulsing',\n rounded && 'rounded',\n fullWidth && 'full-width',\n className\n )}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n {icon && <span className=\"badge-icon\">{icon}</span>}\n {children}\n </span>\n )\n}\n","import type {MSkeletonProps} from './MSkeleton.types'\nimport {cn} from '../../../utils/cn'\nimport './MSkeleton.css'\n\nfunction getTextLineWidth(index: number, lines: number) {\n if (lines <= 1) {\n return '100%'\n }\n\n if (index === lines - 1) {\n return '68%'\n }\n\n if (index === lines - 2 && lines > 3) {\n return '88%'\n }\n\n return '100%'\n}\n\n// Animated placeholder shown while content is loading.\nexport function MSkeleton({\n variant = 'text',\n width,\n height,\n radius,\n lines = 3,\n gap,\n animate = true,\n className,\n style,\n ...rest\n}: MSkeletonProps) {\n const animation = animate === false ? 'none' : animate === true ? 'shimmer' : animate\n\n if (variant === 'text') {\n return (\n <div\n className={cn('skeleton-group', className)}\n style={{width: width ?? undefined, gap: gap ?? undefined, ...style}}\n {...rest}\n >\n {Array.from({length: lines}, (_, i) => (\n <div\n key={i}\n className={cn('skeleton', 'text', animation)}\n style={{\n width: getTextLineWidth(i, lines),\n height: height ?? undefined,\n borderRadius: radius ?? undefined,\n }}\n />\n ))}\n </div>\n )\n }\n\n return (\n <div\n className={cn('skeleton', variant, animation, className)}\n style={{\n width: width ?? undefined,\n height: height ?? undefined,\n borderRadius: radius ?? undefined,\n ...style,\n }}\n {...rest}\n />\n )\n}\n"],"mappings":"yIAMA,SAAgB,EAAO,CACnB,QAAQ,UACR,OAAO,KACP,SACA,UAAU,GACV,UAAU,GACV,YAAY,GACZ,OACA,YACA,WACA,GAAG,GACS,CACZ,OACI,EAAA,EAAA,MAAC,OAAD,CACI,UAAW,EAAA,EACP,QACA,SAAS,IACT,EACA,GAAW,UACX,GAAW,UACX,GAAa,aACb,EACH,CACD,GAAI,EAAA,EAAe,EAAO,CAC1B,GAAI,WAXR,CAaK,IAAQ,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,sBAAc,EAAY,CAAA,CAClD,EACE,GC9Bf,SAAS,EAAiB,EAAe,EAAe,CAapD,OAZI,GAAS,EACF,OAGP,IAAU,EAAQ,EACX,MAGP,IAAU,EAAQ,GAAK,EAAQ,EACxB,MAGJ,OAIX,SAAgB,EAAU,CACtB,UAAU,OACV,QACA,SACA,SACA,QAAQ,EACR,MACA,UAAU,GACV,YACA,QACA,GAAG,GACY,CACf,IAAM,EAAY,IAAY,GAAQ,OAAS,IAAY,GAAO,UAAY,EAwB9E,OAtBI,IAAY,QAER,EAAA,EAAA,KAAC,MAAD,CACI,UAAW,EAAA,EAAG,iBAAkB,EAAU,CAC1C,MAAO,CAAC,MAAO,GAAS,IAAA,GAAW,IAAK,GAAO,IAAA,GAAW,GAAG,EAAM,CACnE,GAAI,WAEH,MAAM,KAAK,CAAC,OAAQ,EAAM,EAAG,EAAG,KAC7B,EAAA,EAAA,KAAC,MAAD,CAEI,UAAW,EAAA,EAAG,WAAY,OAAQ,EAAU,CAC5C,MAAO,CACH,MAAO,EAAiB,EAAG,EAAM,CACjC,OAAQ,GAAU,IAAA,GAClB,aAAc,GAAU,IAAA,GAC3B,CACH,CAPO,EAOP,CACJ,CACA,CAAA,EAKV,EAAA,EAAA,KAAC,MAAD,CACI,UAAW,EAAA,EAAG,WAAY,EAAS,EAAW,EAAU,CACxD,MAAO,CACH,MAAO,GAAS,IAAA,GAChB,OAAQ,GAAU,IAAA,GAClB,aAAc,GAAU,IAAA,GACxB,GAAG,EACN,CACD,GAAI,EACN,CAAA"}
1
+ {"version":3,"file":"MSkeleton-DgU8aktI.cjs","names":[],"sources":["../src/components/feedback/MBadge/MBadge.tsx","../src/components/feedback/MSkeleton/MSkeleton.tsx"],"sourcesContent":["import type {MBadgeProps} from './MBadge.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport './MBadge.css'\n\n// Render a compact semantic label for status and metadata.\nexport function MBadge({\n color = 'primary',\n size = 'md',\n hidden,\n pulsing = false,\n rounded = false,\n fullWidth = false,\n icon,\n className,\n children,\n ...rest\n}: MBadgeProps) {\n return (\n <span\n className={cn(\n 'badge',\n `color-${color}`,\n size,\n pulsing && 'pulsing',\n rounded && 'rounded',\n fullWidth && 'full-width',\n className\n )}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n {icon && <span className=\"badge-icon\">{icon}</span>}\n {children}\n </span>\n )\n}\n","import type {MSkeletonProps} from './MSkeleton.types'\nimport {cn} from '../../../utils/cn'\nimport './MSkeleton.css'\n\nfunction getTextLineWidth(index: number, lines: number) {\n if (lines <= 1) {\n return '100%'\n }\n\n if (index === lines - 1) {\n return '68%'\n }\n\n if (index === lines - 2 && lines > 3) {\n return '88%'\n }\n\n return '100%'\n}\n\n// Animated placeholder shown while content is loading.\nexport function MSkeleton({\n variant = 'text',\n width,\n height,\n radius,\n lines = 3,\n gap,\n animate = true,\n className,\n style,\n ...rest\n}: MSkeletonProps) {\n const animation = animate === false ? 'none' : animate === true ? 'shimmer' : animate\n\n if (variant === 'text') {\n return (\n <div\n className={cn('skeleton-group', className)}\n style={{width: width ?? undefined, gap: gap ?? undefined, ...style}}\n {...rest}\n >\n {Array.from({length: lines}, (_, i) => (\n <div\n key={i}\n className={cn('skeleton', 'text', animation)}\n style={{\n width: getTextLineWidth(i, lines),\n height: height ?? undefined,\n borderRadius: radius ?? undefined,\n }}\n />\n ))}\n </div>\n )\n }\n\n return (\n <div\n className={cn('skeleton', variant, animation, className)}\n style={{\n width: width ?? undefined,\n height: height ?? undefined,\n borderRadius: radius ?? undefined,\n ...style,\n }}\n {...rest}\n />\n )\n}\n"],"mappings":"yIAMA,SAAgB,EAAO,CACnB,QAAQ,UACR,OAAO,KACP,SACA,UAAU,GACV,UAAU,GACV,YAAY,GACZ,OACA,YACA,WACA,GAAG,GACS,CACZ,OACI,EAAA,EAAA,MAAC,OAAD,CACI,UAAW,EAAA,EACP,QACA,SAAS,IACT,EACA,GAAW,UACX,GAAW,UACX,GAAa,aACb,EACH,CACD,GAAI,EAAA,EAAe,EAAO,CAC1B,GAAI,WAXR,CAaK,IAAQ,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,sBAAc,EAAY,CAAA,CAClD,EACE,GC9Bf,SAAS,EAAiB,EAAe,EAAe,CAapD,OAZI,GAAS,EACF,OAGP,IAAU,EAAQ,EACX,MAGP,IAAU,EAAQ,GAAK,EAAQ,EACxB,MAGJ,OAIX,SAAgB,EAAU,CACtB,UAAU,OACV,QACA,SACA,SACA,QAAQ,EACR,MACA,UAAU,GACV,YACA,QACA,GAAG,GACY,CACf,IAAM,EAAY,IAAY,GAAQ,OAAS,IAAY,GAAO,UAAY,EAwB9E,OAtBI,IAAY,QAER,EAAA,EAAA,KAAC,MAAD,CACI,UAAW,EAAA,EAAG,iBAAkB,EAAU,CAC1C,MAAO,CAAC,MAAO,GAAS,IAAA,GAAW,IAAK,GAAO,IAAA,GAAW,GAAG,EAAM,CACnE,GAAI,WAEH,MAAM,KAAK,CAAC,OAAQ,EAAM,EAAG,EAAG,KAC7B,EAAA,EAAA,KAAC,MAAD,CAEI,UAAW,EAAA,EAAG,WAAY,OAAQ,EAAU,CAC5C,MAAO,CACH,MAAO,EAAiB,EAAG,EAAM,CACjC,OAAQ,GAAU,IAAA,GAClB,aAAc,GAAU,IAAA,GAC3B,CACH,CAPO,EAOP,CACJ,CACA,CAAA,EAKV,EAAA,EAAA,KAAC,MAAD,CACI,UAAW,EAAA,EAAG,WAAY,EAAS,EAAW,EAAU,CACxD,MAAO,CACH,MAAO,GAAS,IAAA,GAChB,OAAQ,GAAU,IAAA,GAClB,aAAc,GAAU,IAAA,GACxB,GAAG,EACN,CACD,GAAI,EACN,CAAA"}
@@ -1,2 +1,2 @@
1
- const e=require(`./cn-CU5TNITO.cjs`);require(`./core-DBpQf3uY.cjs`);let t=require(`react`),n=require(`react/jsx-runtime`);function r({min:r=0,max:i=100,step:a=1,value:o,onChange:s,marks:c,label:l,color:u=`primary`,disabled:d=!1,className:f,...p}){let m=(0,t.useRef)(null),h=(o-r)/(i-r)*100,g=(0,t.useCallback)(e=>{let t=Math.round(e/a)*a;return Math.min(i,Math.max(r,t))},[r,i,a]),_=(0,t.useCallback)(e=>{let t=m.current;if(!t)return o;let n=t.getBoundingClientRect();return g(r+(e-n.left)/n.width*(i-r))},[r,i,o,g]),v=(0,t.useCallback)(e=>{if(d)return;e.preventDefault();let t=e.currentTarget;t.setPointerCapture(e.pointerId),s(_(e.clientX));let n=e=>{s(_(e.clientX))},r=()=>{t.removeEventListener(`pointermove`,n),t.removeEventListener(`pointerup`,r)};t.addEventListener(`pointermove`,n),t.addEventListener(`pointerup`,r)},[d,s,_]);return(0,n.jsxs)(`div`,{className:e.t(`slider`,`color-${u}`,d&&`disabled`,f),...p,children:[l&&(0,n.jsx)(`div`,{className:`label`,children:l}),(0,n.jsxs)(`div`,{className:`track-wrapper`,ref:m,onPointerDown:v,children:[(0,n.jsxs)(`div`,{className:`track`,children:[(0,n.jsx)(`div`,{className:`fill`,style:{width:`${h}%`}}),(0,n.jsx)(`div`,{className:`thumb`,style:{left:`${h}%`}})]}),c&&c.length>0&&(0,n.jsx)(`div`,{className:`marks`,children:c.map(e=>(0,n.jsxs)(`div`,{className:`mark`,style:{left:`${(e.value-r)/(i-r)*100}%`},children:[(0,n.jsx)(`div`,{className:`tick`}),e.label&&(0,n.jsx)(`div`,{className:`label`,children:e.label})]},e.value))})]})]})}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return r}});
2
- //# sourceMappingURL=MSlider-DZnMB49q.cjs.map
1
+ const e=require(`./cn-CU5TNITO.cjs`);require(`./core-CLRD6sG4.cjs`);let t=require(`react`),n=require(`react/jsx-runtime`);function r({min:r=0,max:i=100,step:a=1,value:o,onChange:s,marks:c,label:l,color:u=`primary`,disabled:d=!1,className:f,...p}){let m=(0,t.useRef)(null),h=(o-r)/(i-r)*100,g=(0,t.useCallback)(e=>{let t=Math.round(e/a)*a;return Math.min(i,Math.max(r,t))},[r,i,a]),_=(0,t.useCallback)(e=>{let t=m.current;if(!t)return o;let n=t.getBoundingClientRect();return g(r+(e-n.left)/n.width*(i-r))},[r,i,o,g]),v=(0,t.useCallback)(e=>{if(d)return;e.preventDefault();let t=e.currentTarget;t.setPointerCapture(e.pointerId),s(_(e.clientX));let n=e=>{s(_(e.clientX))},r=()=>{t.removeEventListener(`pointermove`,n),t.removeEventListener(`pointerup`,r)};t.addEventListener(`pointermove`,n),t.addEventListener(`pointerup`,r)},[d,s,_]);return(0,n.jsxs)(`div`,{className:e.t(`slider`,`color-${u}`,d&&`disabled`,f),...p,children:[l&&(0,n.jsx)(`div`,{className:`label`,children:l}),(0,n.jsxs)(`div`,{className:`track-wrapper`,ref:m,onPointerDown:v,children:[(0,n.jsxs)(`div`,{className:`track`,children:[(0,n.jsx)(`div`,{className:`fill`,style:{width:`${h}%`}}),(0,n.jsx)(`div`,{className:`thumb`,style:{left:`${h}%`}})]}),c&&c.length>0&&(0,n.jsx)(`div`,{className:`marks`,children:c.map(e=>(0,n.jsxs)(`div`,{className:`mark`,style:{left:`${(e.value-r)/(i-r)*100}%`},children:[(0,n.jsx)(`div`,{className:`tick`}),e.label&&(0,n.jsx)(`div`,{className:`label`,children:e.label})]},e.value))})]})]})}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return r}});
2
+ //# sourceMappingURL=MSlider-0ApojrDC.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"MSlider-DZnMB49q.cjs","names":[],"sources":["../src/components/controls/MSlider/MSlider.tsx"],"sourcesContent":["import {useCallback, useRef} from 'react'\nimport type * as React from 'react'\nimport type {MSliderProps} from './MSlider.types'\nimport {cn} from '../../../utils/cn'\nimport './MSlider.css'\n\nexport function MSlider({\n min = 0,\n max = 100,\n step = 1,\n value,\n onChange,\n marks,\n label,\n color = 'primary',\n disabled = false,\n className,\n ...rest\n}: MSliderProps) {\n const trackRef = useRef<HTMLDivElement>(null)\n\n const percent = ((value - min) / (max - min)) * 100\n\n const clampAndSnap = useCallback(\n (raw: number) => {\n const snapped = Math.round(raw / step) * step\n return Math.min(max, Math.max(min, snapped))\n },\n [min, max, step]\n )\n\n const valueFromPointer = useCallback(\n (clientX: number) => {\n const track = trackRef.current\n if (!track) return value\n const rect = track.getBoundingClientRect()\n const ratio = (clientX - rect.left) / rect.width\n return clampAndSnap(min + ratio * (max - min))\n },\n [min, max, value, clampAndSnap]\n )\n\n const handlePointerDown = useCallback(\n (e: React.PointerEvent) => {\n if (disabled) return\n e.preventDefault()\n const target = e.currentTarget as HTMLElement\n target.setPointerCapture(e.pointerId)\n onChange(valueFromPointer(e.clientX))\n\n const onMove = (ev: PointerEvent) => {\n onChange(valueFromPointer(ev.clientX))\n }\n const onUp = () => {\n target.removeEventListener('pointermove', onMove)\n target.removeEventListener('pointerup', onUp)\n }\n target.addEventListener('pointermove', onMove)\n target.addEventListener('pointerup', onUp)\n },\n [disabled, onChange, valueFromPointer]\n )\n\n return (\n <div className={cn('slider', `color-${color}`, disabled && 'disabled', className)} {...rest}>\n {label && <div className=\"label\">{label}</div>}\n <div className=\"track-wrapper\" ref={trackRef} onPointerDown={handlePointerDown}>\n <div className=\"track\">\n <div className=\"fill\" style={{width: `${percent}%`}} />\n <div className=\"thumb\" style={{left: `${percent}%`}} />\n </div>\n {marks && marks.length > 0 && (\n <div className=\"marks\">\n {marks.map((mark) => {\n const markPercent = ((mark.value - min) / (max - min)) * 100\n return (\n <div key={mark.value} className=\"mark\" style={{left: `${markPercent}%`}}>\n <div className=\"tick\" />\n {mark.label && <div className=\"label\">{mark.label}</div>}\n </div>\n )\n })}\n </div>\n )}\n </div>\n </div>\n )\n}\n"],"mappings":"0HAMA,SAAgB,EAAQ,CACpB,MAAM,EACN,MAAM,IACN,OAAO,EACP,QACA,WACA,QACA,QACA,QAAQ,UACR,WAAW,GACX,YACA,GAAG,GACU,CACb,IAAM,GAAA,EAAA,EAAA,QAAkC,KAAK,CAEvC,GAAY,EAAQ,IAAQ,EAAM,GAAQ,IAE1C,GAAA,EAAA,EAAA,aACD,GAAgB,CACb,IAAM,EAAU,KAAK,MAAM,EAAM,EAAK,CAAG,EACzC,OAAO,KAAK,IAAI,EAAK,KAAK,IAAI,EAAK,EAAQ,CAAC,EAEhD,CAAC,EAAK,EAAK,EAAK,CACnB,CAEK,GAAA,EAAA,EAAA,aACD,GAAoB,CACjB,IAAM,EAAQ,EAAS,QACvB,GAAI,CAAC,EAAO,OAAO,EACnB,IAAM,EAAO,EAAM,uBAAuB,CAE1C,OAAO,EAAa,GADL,EAAU,EAAK,MAAQ,EAAK,OACR,EAAM,GAAK,EAElD,CAAC,EAAK,EAAK,EAAO,EAAa,CAClC,CAEK,GAAA,EAAA,EAAA,aACD,GAA0B,CACvB,GAAI,EAAU,OACd,EAAE,gBAAgB,CAClB,IAAM,EAAS,EAAE,cACjB,EAAO,kBAAkB,EAAE,UAAU,CACrC,EAAS,EAAiB,EAAE,QAAQ,CAAC,CAErC,IAAM,EAAU,GAAqB,CACjC,EAAS,EAAiB,EAAG,QAAQ,CAAC,EAEpC,MAAa,CACf,EAAO,oBAAoB,cAAe,EAAO,CACjD,EAAO,oBAAoB,YAAa,EAAK,EAEjD,EAAO,iBAAiB,cAAe,EAAO,CAC9C,EAAO,iBAAiB,YAAa,EAAK,EAE9C,CAAC,EAAU,EAAU,EAAiB,CACzC,CAED,OACI,EAAA,EAAA,MAAC,MAAD,CAAK,UAAW,EAAA,EAAG,SAAU,SAAS,IAAS,GAAY,WAAY,EAAU,CAAE,GAAI,WAAvF,CACK,IAAS,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,iBAAS,EAAY,CAAA,EAC9C,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,gBAAgB,IAAK,EAAU,cAAe,WAA7D,EACI,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,iBAAf,EACI,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,OAAO,MAAO,CAAC,MAAO,GAAG,EAAQ,GAAG,CAAI,CAAA,EACvD,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,QAAQ,MAAO,CAAC,KAAM,GAAG,EAAQ,GAAG,CAAI,CAAA,CACrD,GACL,GAAS,EAAM,OAAS,IACrB,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,iBACV,EAAM,IAAK,IAGJ,EAAA,EAAA,MAAC,MAAD,CAAsB,UAAU,OAAO,MAAO,CAAC,KAAM,IAFnC,EAAK,MAAQ,IAAQ,EAAM,GAAQ,IAEe,GAAG,UAAvE,EACI,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,OAAS,CAAA,CACvB,EAAK,QAAS,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,iBAAS,EAAK,MAAY,CAAA,CACtD,EAHI,EAAK,MAGT,CAEZ,CACA,CAAA,CAER,GACJ"}
1
+ {"version":3,"file":"MSlider-0ApojrDC.cjs","names":[],"sources":["../src/components/controls/MSlider/MSlider.tsx"],"sourcesContent":["import {useCallback, useRef} from 'react'\nimport type * as React from 'react'\nimport type {MSliderProps} from './MSlider.types'\nimport {cn} from '../../../utils/cn'\nimport './MSlider.css'\n\nexport function MSlider({\n min = 0,\n max = 100,\n step = 1,\n value,\n onChange,\n marks,\n label,\n color = 'primary',\n disabled = false,\n className,\n ...rest\n}: MSliderProps) {\n const trackRef = useRef<HTMLDivElement>(null)\n\n const percent = ((value - min) / (max - min)) * 100\n\n const clampAndSnap = useCallback(\n (raw: number) => {\n const snapped = Math.round(raw / step) * step\n return Math.min(max, Math.max(min, snapped))\n },\n [min, max, step]\n )\n\n const valueFromPointer = useCallback(\n (clientX: number) => {\n const track = trackRef.current\n if (!track) return value\n const rect = track.getBoundingClientRect()\n const ratio = (clientX - rect.left) / rect.width\n return clampAndSnap(min + ratio * (max - min))\n },\n [min, max, value, clampAndSnap]\n )\n\n const handlePointerDown = useCallback(\n (e: React.PointerEvent) => {\n if (disabled) return\n e.preventDefault()\n const target = e.currentTarget as HTMLElement\n target.setPointerCapture(e.pointerId)\n onChange(valueFromPointer(e.clientX))\n\n const onMove = (ev: PointerEvent) => {\n onChange(valueFromPointer(ev.clientX))\n }\n const onUp = () => {\n target.removeEventListener('pointermove', onMove)\n target.removeEventListener('pointerup', onUp)\n }\n target.addEventListener('pointermove', onMove)\n target.addEventListener('pointerup', onUp)\n },\n [disabled, onChange, valueFromPointer]\n )\n\n return (\n <div className={cn('slider', `color-${color}`, disabled && 'disabled', className)} {...rest}>\n {label && <div className=\"label\">{label}</div>}\n <div className=\"track-wrapper\" ref={trackRef} onPointerDown={handlePointerDown}>\n <div className=\"track\">\n <div className=\"fill\" style={{width: `${percent}%`}} />\n <div className=\"thumb\" style={{left: `${percent}%`}} />\n </div>\n {marks && marks.length > 0 && (\n <div className=\"marks\">\n {marks.map((mark) => {\n const markPercent = ((mark.value - min) / (max - min)) * 100\n return (\n <div key={mark.value} className=\"mark\" style={{left: `${markPercent}%`}}>\n <div className=\"tick\" />\n {mark.label && <div className=\"label\">{mark.label}</div>}\n </div>\n )\n })}\n </div>\n )}\n </div>\n </div>\n )\n}\n"],"mappings":"0HAMA,SAAgB,EAAQ,CACpB,MAAM,EACN,MAAM,IACN,OAAO,EACP,QACA,WACA,QACA,QACA,QAAQ,UACR,WAAW,GACX,YACA,GAAG,GACU,CACb,IAAM,GAAA,EAAA,EAAA,QAAkC,KAAK,CAEvC,GAAY,EAAQ,IAAQ,EAAM,GAAQ,IAE1C,GAAA,EAAA,EAAA,aACD,GAAgB,CACb,IAAM,EAAU,KAAK,MAAM,EAAM,EAAK,CAAG,EACzC,OAAO,KAAK,IAAI,EAAK,KAAK,IAAI,EAAK,EAAQ,CAAC,EAEhD,CAAC,EAAK,EAAK,EAAK,CACnB,CAEK,GAAA,EAAA,EAAA,aACD,GAAoB,CACjB,IAAM,EAAQ,EAAS,QACvB,GAAI,CAAC,EAAO,OAAO,EACnB,IAAM,EAAO,EAAM,uBAAuB,CAE1C,OAAO,EAAa,GADL,EAAU,EAAK,MAAQ,EAAK,OACR,EAAM,GAAK,EAElD,CAAC,EAAK,EAAK,EAAO,EAAa,CAClC,CAEK,GAAA,EAAA,EAAA,aACD,GAA0B,CACvB,GAAI,EAAU,OACd,EAAE,gBAAgB,CAClB,IAAM,EAAS,EAAE,cACjB,EAAO,kBAAkB,EAAE,UAAU,CACrC,EAAS,EAAiB,EAAE,QAAQ,CAAC,CAErC,IAAM,EAAU,GAAqB,CACjC,EAAS,EAAiB,EAAG,QAAQ,CAAC,EAEpC,MAAa,CACf,EAAO,oBAAoB,cAAe,EAAO,CACjD,EAAO,oBAAoB,YAAa,EAAK,EAEjD,EAAO,iBAAiB,cAAe,EAAO,CAC9C,EAAO,iBAAiB,YAAa,EAAK,EAE9C,CAAC,EAAU,EAAU,EAAiB,CACzC,CAED,OACI,EAAA,EAAA,MAAC,MAAD,CAAK,UAAW,EAAA,EAAG,SAAU,SAAS,IAAS,GAAY,WAAY,EAAU,CAAE,GAAI,WAAvF,CACK,IAAS,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,iBAAS,EAAY,CAAA,EAC9C,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,gBAAgB,IAAK,EAAU,cAAe,WAA7D,EACI,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,iBAAf,EACI,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,OAAO,MAAO,CAAC,MAAO,GAAG,EAAQ,GAAG,CAAI,CAAA,EACvD,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,QAAQ,MAAO,CAAC,KAAM,GAAG,EAAQ,GAAG,CAAI,CAAA,CACrD,GACL,GAAS,EAAM,OAAS,IACrB,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,iBACV,EAAM,IAAK,IAGJ,EAAA,EAAA,MAAC,MAAD,CAAsB,UAAU,OAAO,MAAO,CAAC,KAAM,IAFnC,EAAK,MAAQ,IAAQ,EAAM,GAAQ,IAEe,GAAG,UAAvE,EACI,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,OAAS,CAAA,CACvB,EAAK,QAAS,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,iBAAS,EAAK,MAAY,CAAA,CACtD,EAHI,EAAK,MAGT,CAEZ,CACA,CAAA,CAER,GACJ"}
@@ -1,2 +1,2 @@
1
- const e=require(`./theme-BfNZicWk.cjs`),t=require(`./cn-CU5TNITO.cjs`),n=require(`./layoutProps-B8y2XwHy.cjs`);require(`./core-DBpQf3uY.cjs`);let r=require(`react/jsx-runtime`);function i({align:i=`stretch`,hidden:a,spacing:o,padding:s,fsize:c,mt:l,mb:u,ml:d,mr:f,mx:p,my:m,pt:h,pb:g,pl:_,pr:v,px:y,py:b,fullWidth:x,className:S,style:C,children:w,...T}){let E=n.n({fsize:c});return(0,r.jsx)(`div`,{className:t.t(`stack`,i!==`stretch`&&i,...n.t({spacing:o,padding:s,fsize:c,mt:l,mb:u,ml:d,mr:f,mx:p,my:m,pt:h,pb:g,pl:_,pr:v,px:y,py:b,fullWidth:x}),S),style:{...E,...C},...e.r(a),...T,children:w})}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return i}});
2
- //# sourceMappingURL=MStack-BP_BUeCc.cjs.map
1
+ const e=require(`./theme-Bjs11y3s.cjs`),t=require(`./cn-CU5TNITO.cjs`),n=require(`./layoutProps-B8y2XwHy.cjs`);require(`./core-CLRD6sG4.cjs`);let r=require(`react/jsx-runtime`);function i({align:i=`stretch`,hidden:a,spacing:o,padding:s,fsize:c,mt:l,mb:u,ml:d,mr:f,mx:p,my:m,pt:h,pb:g,pl:_,pr:v,px:y,py:b,fullWidth:x,className:S,style:C,children:w,...T}){let E=n.n({fsize:c});return(0,r.jsx)(`div`,{className:t.t(`stack`,i!==`stretch`&&i,...n.t({spacing:o,padding:s,fsize:c,mt:l,mb:u,ml:d,mr:f,mx:p,my:m,pt:h,pb:g,pl:_,pr:v,px:y,py:b,fullWidth:x}),S),style:{...E,...C},...e.r(a),...T,children:w})}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return i}});
2
+ //# sourceMappingURL=MStack-BOOciEts.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"MStack-BP_BUeCc.cjs","names":[],"sources":["../src/components/layout/MStack/MStack.tsx"],"sourcesContent":["import type {MStackProps} from './MStack.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {getLayoutUtilityClassNames, getLayoutUtilityStyles} from '../../../utils/layoutProps'\nimport './MStack.css'\n\n// MStack children vertically with shared layout utility props.\nexport function MStack({\n align = 'stretch',\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}: MStackProps) {\n const utilityStyle = getLayoutUtilityStyles({fsize})\n\n return (\n <div\n className={cn(\n 'stack',\n align !== 'stretch' && align,\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"],"mappings":"iLAOA,SAAgB,EAAO,CACnB,QAAQ,UACR,SACA,UACA,UACA,QACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,YACA,YACA,QACA,WACA,GAAG,GACS,CACZ,IAAM,EAAe,EAAA,EAAuB,CAAC,QAAM,CAAC,CAEpD,OACI,EAAA,EAAA,KAAC,MAAD,CACI,UAAW,EAAA,EACP,QACA,IAAU,WAAa,EACvB,GAAG,EAAA,EAA2B,CAC1B,UACA,UACA,QACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,YACH,CAAC,CACF,EACH,CACD,MAAO,CAAC,GAAG,EAAc,GAAG,EAAM,CAClC,GAAI,EAAA,EAAe,EAAO,CAC1B,GAAI,EAEH,WACC,CAAA"}
1
+ {"version":3,"file":"MStack-BOOciEts.cjs","names":[],"sources":["../src/components/layout/MStack/MStack.tsx"],"sourcesContent":["import type {MStackProps} from './MStack.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {getLayoutUtilityClassNames, getLayoutUtilityStyles} from '../../../utils/layoutProps'\nimport './MStack.css'\n\n// MStack children vertically with shared layout utility props.\nexport function MStack({\n align = 'stretch',\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}: MStackProps) {\n const utilityStyle = getLayoutUtilityStyles({fsize})\n\n return (\n <div\n className={cn(\n 'stack',\n align !== 'stretch' && align,\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"],"mappings":"iLAOA,SAAgB,EAAO,CACnB,QAAQ,UACR,SACA,UACA,UACA,QACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,YACA,YACA,QACA,WACA,GAAG,GACS,CACZ,IAAM,EAAe,EAAA,EAAuB,CAAC,QAAM,CAAC,CAEpD,OACI,EAAA,EAAA,KAAC,MAAD,CACI,UAAW,EAAA,EACP,QACA,IAAU,WAAa,EACvB,GAAG,EAAA,EAA2B,CAC1B,UACA,UACA,QACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,YACH,CAAC,CACF,EACH,CACD,MAAO,CAAC,GAAG,EAAc,GAAG,EAAM,CAClC,GAAI,EAAA,EAAe,EAAO,CAC1B,GAAI,EAEH,WACC,CAAA"}
@@ -1,2 +1,2 @@
1
- const e=require(`./theme-BfNZicWk.cjs`),t=require(`./cn-CU5TNITO.cjs`),n=require(`./MText-j6Zbbj5Y.cjs`);require(`./core-DBpQf3uY.cjs`);let r=require(`react/jsx-runtime`);function i({as:i=`span`,size:a=`sm`,tone:o=`muted`,hidden:s,color:c,className:l,children:u,...d}){return(0,r.jsx)(i,{className:t.t(`subtext`,!c&&o,a,...n.n({color:c}),l),...e.r(s),...d,children:u})}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return i}});
2
- //# sourceMappingURL=MSubText-VHsgFsv2.cjs.map
1
+ const e=require(`./theme-Bjs11y3s.cjs`),t=require(`./cn-CU5TNITO.cjs`),n=require(`./MText-CDDEGjBx.cjs`);require(`./core-CLRD6sG4.cjs`);let r=require(`react/jsx-runtime`);function i({as:i=`span`,size:a=`sm`,tone:o=`muted`,hidden:s,color:c,className:l,children:u,...d}){return(0,r.jsx)(i,{className:t.t(`subtext`,!c&&o,a,...n.n({color:c}),l),...e.r(s),...d,children:u})}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return i}});
2
+ //# sourceMappingURL=MSubText-WixraICV.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"MSubText-VHsgFsv2.cjs","names":[],"sources":["../src/components/typography/MSubText/MSubText.tsx"],"sourcesContent":["import type {MSubTextProps} from './MSubText.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {getAppearanceClassNames} from '../../../utils/appearanceProps'\nimport './MSubText.css'\n\n// Render small, muted secondary text for captions, hints and metadata.\nexport function MSubText({\n as = 'span',\n size = 'sm',\n tone = 'muted',\n hidden,\n color,\n className,\n children,\n ...rest\n}: MSubTextProps) {\n const Component = as\n return (\n <Component\n className={cn('subtext', !color && tone, size, ...getAppearanceClassNames({color}), className)}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n {children}\n </Component>\n )\n}\n"],"mappings":"2KAOA,SAAgB,EAAS,CACrB,KAAK,OACL,OAAO,KACP,OAAO,QACP,SACA,QACA,YACA,WACA,GAAG,GACW,CAEd,OACI,EAAA,EAAA,KAFc,EAEd,CACI,UAAW,EAAA,EAAG,UAAW,CAAC,GAAS,EAAM,EAAM,GAAG,EAAA,EAAwB,CAAC,QAAM,CAAC,CAAE,EAAU,CAC9F,GAAI,EAAA,EAAe,EAAO,CAC1B,GAAI,EAEH,WACO,CAAA"}
1
+ {"version":3,"file":"MSubText-WixraICV.cjs","names":[],"sources":["../src/components/typography/MSubText/MSubText.tsx"],"sourcesContent":["import type {MSubTextProps} from './MSubText.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {getAppearanceClassNames} from '../../../utils/appearanceProps'\nimport './MSubText.css'\n\n// Render small, muted secondary text for captions, hints and metadata.\nexport function MSubText({\n as = 'span',\n size = 'sm',\n tone = 'muted',\n hidden,\n color,\n className,\n children,\n ...rest\n}: MSubTextProps) {\n const Component = as\n return (\n <Component\n className={cn('subtext', !color && tone, size, ...getAppearanceClassNames({color}), className)}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n {children}\n </Component>\n )\n}\n"],"mappings":"2KAOA,SAAgB,EAAS,CACrB,KAAK,OACL,OAAO,KACP,OAAO,QACP,SACA,QACA,YACA,WACA,GAAG,GACW,CAEd,OACI,EAAA,EAAA,KAFc,EAEd,CACI,UAAW,EAAA,EAAG,UAAW,CAAC,GAAS,EAAM,EAAM,GAAG,EAAA,EAAwB,CAAC,QAAM,CAAC,CAAE,EAAU,CAC9F,GAAI,EAAA,EAAe,EAAO,CAC1B,GAAI,EAEH,WACO,CAAA"}
@@ -1,2 +1,2 @@
1
- const e=require(`./theme-BfNZicWk.cjs`),t=require(`./cn-CU5TNITO.cjs`),n=require(`./layoutProps-B8y2XwHy.cjs`);require(`./core-DBpQf3uY.cjs`);let r=require(`react/jsx-runtime`);function i({align:i=`center`,justify:a=`start`,wrap:o=`wrap`,hidden:s,padding:c,fsize:l,mt:u,mb:d,ml:f,mr:p,mx:m,my:h,pt:g,pb:_,pl:v,pr:y,px:b,py:x,fullWidth:S,className:C,style:w,children:T,...E}){let D=n.n({fsize:l});return(0,r.jsx)(`div`,{className:t.t(`inline`,i,`justify-${a}`,o,...n.t({padding:c,fsize:l,mt:u,mb:d,ml:f,mr:p,mx:m,my:h,pt:g,pb:_,pl:v,pr:y,px:b,py:x,fullWidth:S}),C),style:{...D,...w},...e.r(s),...E,children:T})}function a({component:i,to:a,href:o,target:s,rel:c,tone:l=`default`,outlined:u=!0,padded:d=!0,hidden:f,spacing:p,padding:m,fsize:h,mt:g,mb:_,ml:v,mr:y,mx:b,my:x,pt:S,pb:C,pl:w,pr:T,px:E,py:D,fullWidth:O,className:k,style:A,children:j,...M}){let N=n.n({fsize:h}),P=i??`div`;return(0,r.jsx)(P,{href:P===`a`||i?o:void 0,to:i?a:void 0,target:P===`a`||i?s:void 0,rel:P===`a`||i?c:void 0,className:t.t(`surface`,l,u&&`outlined`,d&&`padded`,...n.t({spacing:p,padding:m,fsize:h,mt:g,mb:_,ml:v,mr:y,mx:b,my:x,pt:S,pb:C,pl:w,pr:T,px:E,py:D,fullWidth:O}),k),style:{...N,...A},...e.r(f),...M,children:j})}Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return a}});
2
- //# sourceMappingURL=MSurface-CYeVFOw_.cjs.map
1
+ const e=require(`./theme-Bjs11y3s.cjs`),t=require(`./cn-CU5TNITO.cjs`),n=require(`./layoutProps-B8y2XwHy.cjs`);require(`./core-CLRD6sG4.cjs`);let r=require(`react/jsx-runtime`);function i({align:i=`center`,justify:a=`start`,wrap:o=`wrap`,hidden:s,padding:c,fsize:l,mt:u,mb:d,ml:f,mr:p,mx:m,my:h,pt:g,pb:_,pl:v,pr:y,px:b,py:x,fullWidth:S,className:C,style:w,children:T,...E}){let D=n.n({fsize:l});return(0,r.jsx)(`div`,{className:t.t(`inline`,i,`justify-${a}`,o,...n.t({padding:c,fsize:l,mt:u,mb:d,ml:f,mr:p,mx:m,my:h,pt:g,pb:_,pl:v,pr:y,px:b,py:x,fullWidth:S}),C),style:{...D,...w},...e.r(s),...E,children:T})}function a({component:i,to:a,href:o,target:s,rel:c,tone:l=`default`,outlined:u=!0,padded:d=!0,hidden:f,spacing:p,padding:m,fsize:h,mt:g,mb:_,ml:v,mr:y,mx:b,my:x,pt:S,pb:C,pl:w,pr:T,px:E,py:D,fullWidth:O,className:k,style:A,children:j,...M}){let N=n.n({fsize:h}),P=i??`div`;return(0,r.jsx)(P,{href:P===`a`||i?o:void 0,to:i?a:void 0,target:P===`a`||i?s:void 0,rel:P===`a`||i?c:void 0,className:t.t(`surface`,l,u&&`outlined`,d&&`padded`,...n.t({spacing:p,padding:m,fsize:h,mt:g,mb:_,ml:v,mr:y,mx:b,my:x,pt:S,pb:C,pl:w,pr:T,px:E,py:D,fullWidth:O}),k),style:{...N,...A},...e.r(f),...M,children:j})}Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return a}});
2
+ //# sourceMappingURL=MSurface-CF8BFFn4.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"MSurface-CYeVFOw_.cjs","names":[],"sources":["../src/components/layout/MInline/MInline.tsx","../src/components/layout/MSurface/MSurface.tsx"],"sourcesContent":["import type {MInlineProps} from './MInline.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {getLayoutUtilityClassNames, getLayoutUtilityStyles} from '../../../utils/layoutProps'\nimport './MInline.css'\n\n// Arrange children horizontally with shared alignment and wrapping helpers.\n// `spacing` is not accepted — the flex gap built into `.inline` already spaces children;\n// outer margin should go through `mx/my` or `padding` to avoid overflowing the parent when paired with `fullWidth`.\nexport function MInline({\n align = 'center',\n justify = 'start',\n wrap = 'wrap',\n hidden,\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}: MInlineProps) {\n const utilityStyle = getLayoutUtilityStyles({fsize})\n\n return (\n <div\n className={cn(\n 'inline',\n align,\n `justify-${justify}`,\n wrap,\n ...getLayoutUtilityClassNames({\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 {MSurfaceProps} from './MSurface.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {getLayoutUtilityClassNames, getLayoutUtilityStyles} from '../../../utils/layoutProps'\nimport './MSurface.css'\n\n// Render a reusable surface primitive for cards, panels and preview blocks.\nexport function MSurface({\n component,\n to,\n href,\n target,\n rel,\n tone = 'default',\n outlined = true,\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}: MSurfaceProps) {\n const utilityStyle = getLayoutUtilityStyles({fsize})\n const Component = component ?? 'div'\n\n return (\n <Component\n href={Component === 'a' || component ? href : undefined}\n to={component ? to : undefined}\n target={Component === 'a' || component ? target : undefined}\n rel={Component === 'a' || component ? rel : undefined}\n className={cn(\n 'surface',\n tone,\n outlined && 'outlined',\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 </Component>\n )\n}\n"],"mappings":"iLASA,SAAgB,EAAQ,CACpB,QAAQ,SACR,UAAU,QACV,OAAO,OACP,SACA,UACA,QACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,YACA,YACA,QACA,WACA,GAAG,GACU,CACb,IAAM,EAAe,EAAA,EAAuB,CAAC,QAAM,CAAC,CAEpD,OACI,EAAA,EAAA,KAAC,MAAD,CACI,UAAW,EAAA,EACP,SACA,EACA,WAAW,IACX,EACA,GAAG,EAAA,EAA2B,CAC1B,UACA,QACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,YACH,CAAC,CACF,EACH,CACD,MAAO,CAAC,GAAG,EAAc,GAAG,EAAM,CAClC,GAAI,EAAA,EAAe,EAAO,CAC1B,GAAI,EAEH,WACC,CAAA,CC5Dd,SAAgB,EAAS,CACrB,YACA,KACA,OACA,SACA,MACA,OAAO,UACP,WAAW,GACX,SAAS,GACT,SACA,UACA,UACA,QACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,YACA,YACA,QACA,WACA,GAAG,GACW,CACd,IAAM,EAAe,EAAA,EAAuB,CAAC,QAAM,CAAC,CAC9C,EAAY,GAAa,MAE/B,OACI,EAAA,EAAA,KAAC,EAAD,CACI,KAAM,IAAc,KAAO,EAAY,EAAO,IAAA,GAC9C,GAAI,EAAY,EAAK,IAAA,GACrB,OAAQ,IAAc,KAAO,EAAY,EAAS,IAAA,GAClD,IAAK,IAAc,KAAO,EAAY,EAAM,IAAA,GAC5C,UAAW,EAAA,EACP,UACA,EACA,GAAY,WACZ,GAAU,SACV,GAAG,EAAA,EAA2B,CAC1B,UACA,UACA,QACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,YACH,CAAC,CACF,EACH,CACD,MAAO,CAAC,GAAG,EAAc,GAAG,EAAM,CAClC,GAAI,EAAA,EAAe,EAAO,CAC1B,GAAI,EAEH,WACO,CAAA"}
1
+ {"version":3,"file":"MSurface-CF8BFFn4.cjs","names":[],"sources":["../src/components/layout/MInline/MInline.tsx","../src/components/layout/MSurface/MSurface.tsx"],"sourcesContent":["import type {MInlineProps} from './MInline.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {getLayoutUtilityClassNames, getLayoutUtilityStyles} from '../../../utils/layoutProps'\nimport './MInline.css'\n\n// Arrange children horizontally with shared alignment and wrapping helpers.\n// `spacing` is not accepted — the flex gap built into `.inline` already spaces children;\n// outer margin should go through `mx/my` or `padding` to avoid overflowing the parent when paired with `fullWidth`.\nexport function MInline({\n align = 'center',\n justify = 'start',\n wrap = 'wrap',\n hidden,\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}: MInlineProps) {\n const utilityStyle = getLayoutUtilityStyles({fsize})\n\n return (\n <div\n className={cn(\n 'inline',\n align,\n `justify-${justify}`,\n wrap,\n ...getLayoutUtilityClassNames({\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 {MSurfaceProps} from './MSurface.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {getLayoutUtilityClassNames, getLayoutUtilityStyles} from '../../../utils/layoutProps'\nimport './MSurface.css'\n\n// Render a reusable surface primitive for cards, panels and preview blocks.\nexport function MSurface({\n component,\n to,\n href,\n target,\n rel,\n tone = 'default',\n outlined = true,\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}: MSurfaceProps) {\n const utilityStyle = getLayoutUtilityStyles({fsize})\n const Component = component ?? 'div'\n\n return (\n <Component\n href={Component === 'a' || component ? href : undefined}\n to={component ? to : undefined}\n target={Component === 'a' || component ? target : undefined}\n rel={Component === 'a' || component ? rel : undefined}\n className={cn(\n 'surface',\n tone,\n outlined && 'outlined',\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 </Component>\n )\n}\n"],"mappings":"iLASA,SAAgB,EAAQ,CACpB,QAAQ,SACR,UAAU,QACV,OAAO,OACP,SACA,UACA,QACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,YACA,YACA,QACA,WACA,GAAG,GACU,CACb,IAAM,EAAe,EAAA,EAAuB,CAAC,QAAM,CAAC,CAEpD,OACI,EAAA,EAAA,KAAC,MAAD,CACI,UAAW,EAAA,EACP,SACA,EACA,WAAW,IACX,EACA,GAAG,EAAA,EAA2B,CAC1B,UACA,QACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,YACH,CAAC,CACF,EACH,CACD,MAAO,CAAC,GAAG,EAAc,GAAG,EAAM,CAClC,GAAI,EAAA,EAAe,EAAO,CAC1B,GAAI,EAEH,WACC,CAAA,CC5Dd,SAAgB,EAAS,CACrB,YACA,KACA,OACA,SACA,MACA,OAAO,UACP,WAAW,GACX,SAAS,GACT,SACA,UACA,UACA,QACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,YACA,YACA,QACA,WACA,GAAG,GACW,CACd,IAAM,EAAe,EAAA,EAAuB,CAAC,QAAM,CAAC,CAC9C,EAAY,GAAa,MAE/B,OACI,EAAA,EAAA,KAAC,EAAD,CACI,KAAM,IAAc,KAAO,EAAY,EAAO,IAAA,GAC9C,GAAI,EAAY,EAAK,IAAA,GACrB,OAAQ,IAAc,KAAO,EAAY,EAAS,IAAA,GAClD,IAAK,IAAc,KAAO,EAAY,EAAM,IAAA,GAC5C,UAAW,EAAA,EACP,UACA,EACA,GAAY,WACZ,GAAU,SACV,GAAG,EAAA,EAA2B,CAC1B,UACA,UACA,QACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,YACH,CAAC,CACF,EACH,CACD,MAAO,CAAC,GAAG,EAAc,GAAG,EAAM,CAClC,GAAI,EAAA,EAAe,EAAO,CAC1B,GAAI,EAEH,WACO,CAAA"}
@@ -1,2 +1,2 @@
1
- const e=require(`./theme-BfNZicWk.cjs`),t=require(`./icons-D675Im0B.cjs`),n=require(`./cn-CU5TNITO.cjs`),r=require(`./MButton-R08y1HCT.cjs`);require(`./core-DBpQf3uY.cjs`);let i=require(`react/jsx-runtime`);function a({label:a,color:o=`primary`,variant:s=`solid`,size:c=`md`,hidden:l,rounded:u=!1,closable:d=!1,onClose:f,icon:p,className:m,...h}){return(0,i.jsxs)(`span`,{className:n.t(`m-tag`,`color-${o}`,s,c,u&&`rounded`,m),...e.r(l),...h,children:[p&&(0,i.jsx)(`span`,{className:`m-tag icon`,children:p}),(0,i.jsx)(`span`,{className:`m-tag label`,children:a}),d&&(0,i.jsx)(r.t,{variant:`link`,color:`neutral`,iconOnly:!0,size:`xs`,className:`m-tag close`,onClick:e=>{e.stopPropagation(),f?.()},"aria-label":`Remove`,children:(0,i.jsx)(t.Xi,{})})]})}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return a}});
2
- //# sourceMappingURL=MTag-BzTp1crT.cjs.map
1
+ const e=require(`./theme-Bjs11y3s.cjs`),t=require(`./icons-BxurYyW-.cjs`),n=require(`./cn-CU5TNITO.cjs`),r=require(`./MButton-CMbmWmMI.cjs`);require(`./core-CLRD6sG4.cjs`);let i=require(`react/jsx-runtime`);function a({label:a,color:o=`primary`,variant:s=`solid`,size:c=`md`,hidden:l,rounded:u=!1,closable:d=!1,onClose:f,icon:p,className:m,...h}){return(0,i.jsxs)(`span`,{className:n.t(`m-tag`,`color-${o}`,s,c,u&&`rounded`,m),...e.r(l),...h,children:[p&&(0,i.jsx)(`span`,{className:`m-tag icon`,children:p}),(0,i.jsx)(`span`,{className:`m-tag label`,children:a}),d&&(0,i.jsx)(r.t,{variant:`link`,color:`neutral`,iconOnly:!0,size:`xs`,className:`m-tag close`,onClick:e=>{e.stopPropagation(),f?.()},"aria-label":`Remove`,children:(0,i.jsx)(t.Xi,{})})]})}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return a}});
2
+ //# sourceMappingURL=MTag-CgXh2PQC.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"MTag-BzTp1crT.cjs","names":[],"sources":["../src/components/feedback/MTag/MTag.tsx"],"sourcesContent":["import type {MTagProps} from './MTag.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {MButton} from '../../controls'\nimport {MCloseIcon} from '../../../icons'\nimport './MTag.css'\n\nexport function MTag({\n label,\n color = 'primary',\n variant = 'solid',\n size = 'md',\n hidden,\n rounded = false,\n closable = false,\n onClose,\n icon,\n className,\n ...rest\n}: MTagProps) {\n return (\n <span\n className={cn('m-tag', `color-${color}`, variant, size, rounded && 'rounded', className)}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n {icon && <span className=\"m-tag icon\">{icon}</span>}\n <span className=\"m-tag label\">{label}</span>\n {closable && (\n <MButton\n variant=\"link\"\n color=\"neutral\"\n iconOnly\n size=\"xs\"\n className=\"m-tag close\"\n onClick={(e) => {\n e.stopPropagation()\n onClose?.()\n }}\n aria-label=\"Remove\"\n >\n <MCloseIcon />\n </MButton>\n )}\n </span>\n )\n}\n"],"mappings":"+MAOA,SAAgB,EAAK,CACjB,QACA,QAAQ,UACR,UAAU,QACV,OAAO,KACP,SACA,UAAU,GACV,WAAW,GACX,UACA,OACA,YACA,GAAG,GACO,CACV,OACI,EAAA,EAAA,MAAC,OAAD,CACI,UAAW,EAAA,EAAG,QAAS,SAAS,IAAS,EAAS,EAAM,GAAW,UAAW,EAAU,CACxF,GAAI,EAAA,EAAe,EAAO,CAC1B,GAAI,WAHR,CAKK,IAAQ,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,sBAAc,EAAY,CAAA,EACnD,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,uBAAe,EAAa,CAAA,CAC3C,IACG,EAAA,EAAA,KAAC,EAAA,EAAD,CACI,QAAQ,OACR,MAAM,UACN,SAAA,GACA,KAAK,KACL,UAAU,cACV,QAAU,GAAM,CACZ,EAAE,iBAAiB,CACnB,KAAW,EAEf,aAAW,mBAEX,EAAA,EAAA,KAAC,EAAA,GAAD,EAAc,CAAA,CACR,CAAA,CAEX"}
1
+ {"version":3,"file":"MTag-CgXh2PQC.cjs","names":[],"sources":["../src/components/feedback/MTag/MTag.tsx"],"sourcesContent":["import type {MTagProps} from './MTag.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {MButton} from '../../controls'\nimport {MCloseIcon} from '../../../icons'\nimport './MTag.css'\n\nexport function MTag({\n label,\n color = 'primary',\n variant = 'solid',\n size = 'md',\n hidden,\n rounded = false,\n closable = false,\n onClose,\n icon,\n className,\n ...rest\n}: MTagProps) {\n return (\n <span\n className={cn('m-tag', `color-${color}`, variant, size, rounded && 'rounded', className)}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n {icon && <span className=\"m-tag icon\">{icon}</span>}\n <span className=\"m-tag label\">{label}</span>\n {closable && (\n <MButton\n variant=\"link\"\n color=\"neutral\"\n iconOnly\n size=\"xs\"\n className=\"m-tag close\"\n onClick={(e) => {\n e.stopPropagation()\n onClose?.()\n }}\n aria-label=\"Remove\"\n >\n <MCloseIcon />\n </MButton>\n )}\n </span>\n )\n}\n"],"mappings":"+MAOA,SAAgB,EAAK,CACjB,QACA,QAAQ,UACR,UAAU,QACV,OAAO,KACP,SACA,UAAU,GACV,WAAW,GACX,UACA,OACA,YACA,GAAG,GACO,CACV,OACI,EAAA,EAAA,MAAC,OAAD,CACI,UAAW,EAAA,EAAG,QAAS,SAAS,IAAS,EAAS,EAAM,GAAW,UAAW,EAAU,CACxF,GAAI,EAAA,EAAe,EAAO,CAC1B,GAAI,WAHR,CAKK,IAAQ,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,sBAAc,EAAY,CAAA,EACnD,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,uBAAe,EAAa,CAAA,CAC3C,IACG,EAAA,EAAA,KAAC,EAAA,EAAD,CACI,QAAQ,OACR,MAAM,UACN,SAAA,GACA,KAAK,KACL,UAAU,cACV,QAAU,GAAM,CACZ,EAAE,iBAAiB,CACnB,KAAW,EAEf,aAAW,mBAEX,EAAA,EAAA,KAAC,EAAA,GAAD,EAAc,CAAA,CACR,CAAA,CAEX"}
@@ -1,2 +1,2 @@
1
- const e=require(`./theme-BfNZicWk.cjs`),t=require(`./cn-CU5TNITO.cjs`),n=require(`./layoutProps-B8y2XwHy.cjs`);require(`./core-DBpQf3uY.cjs`);let r=require(`react/jsx-runtime`);function i({color:e}){return[e&&`fcolor-${e}`]}function a({as:a=`p`,tone:o=`default`,size:s,align:c=`left`,hidden:l,color:u,weight:d=`normal`,truncate:f,spacing:p,padding:m,fsize:h,mt:g,mb:_,ml:v,mr:y,mx:b,my:x,pt:S,pb:C,pl:w,pr:T,px:E,py:D,fullWidth:O,className:k,style:A,children:j,...M}){let N=a,P=n.n({fsize:h}),F=typeof f==`number`?f:void 0;return(0,r.jsx)(N,{className:t.t(`text`,!u&&o,s,c,d,f===!0&&`truncate`,F!=null&&`line-clamp`,...i({color:u}),...n.t({spacing:p,padding:m,fsize:h,mt:g,mb:_,ml:v,mr:y,mx:b,my:x,pt:S,pb:C,pl:w,pr:T,px:E,py:D,fullWidth:O}),k),style:{...P,...F?{"--line-clamp":F}:void 0,...A},...e.r(l),...M,children:j})}Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return a}});
2
- //# sourceMappingURL=MText-j6Zbbj5Y.cjs.map
1
+ const e=require(`./theme-Bjs11y3s.cjs`),t=require(`./cn-CU5TNITO.cjs`),n=require(`./layoutProps-B8y2XwHy.cjs`);require(`./core-CLRD6sG4.cjs`);let r=require(`react/jsx-runtime`);function i({color:e}){return[e&&`fcolor-${e}`]}function a({as:a=`p`,tone:o=`default`,size:s,align:c=`left`,hidden:l,color:u,weight:d=`normal`,truncate:f,spacing:p,padding:m,fsize:h,mt:g,mb:_,ml:v,mr:y,mx:b,my:x,pt:S,pb:C,pl:w,pr:T,px:E,py:D,fullWidth:O,className:k,style:A,children:j,...M}){let N=a,P=n.n({fsize:h}),F=typeof f==`number`?f:void 0;return(0,r.jsx)(N,{className:t.t(`text`,!u&&o,s,c,d,f===!0&&`truncate`,F!=null&&`line-clamp`,...i({color:u}),...n.t({spacing:p,padding:m,fsize:h,mt:g,mb:_,ml:v,mr:y,mx:b,my:x,pt:S,pb:C,pl:w,pr:T,px:E,py:D,fullWidth:O}),k),style:{...P,...F?{"--line-clamp":F}:void 0,...A},...e.r(l),...M,children:j})}Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return a}});
2
+ //# sourceMappingURL=MText-CDDEGjBx.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"MText-j6Zbbj5Y.cjs","names":[],"sources":["../src/utils/appearanceProps.ts","../src/components/typography/MText/MText.tsx"],"sourcesContent":["import type {MColor} from '../theme'\n\nexport interface AppearanceProps {\n color?: MColor\n}\n\n// Translate semantic appearance props into shared utility classes.\nexport function getAppearanceClassNames({color}: AppearanceProps): Array<string | false | undefined> {\n return [color && `fcolor-${color}`]\n}\n","import type {MTextProps} from './MText.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {getAppearanceClassNames} from '../../../utils/appearanceProps'\nimport {getLayoutUtilityClassNames, getLayoutUtilityStyles} from '../../../utils/layoutProps'\nimport './MText.css'\n\n// Render body copy with shared tone, size and weight controls.\nexport function MText({\n as = 'p',\n tone = 'default',\n size,\n align = 'left',\n hidden,\n color,\n weight = 'normal',\n truncate,\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}: MTextProps) {\n const Component = as\n const utilityStyle = getLayoutUtilityStyles({fsize})\n const lines = typeof truncate === 'number' ? truncate : undefined\n\n return (\n <Component\n className={cn(\n 'text',\n !color && tone,\n size,\n align,\n weight,\n truncate === true && 'truncate',\n lines != null && 'line-clamp',\n ...getAppearanceClassNames({color}),\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={{\n ...utilityStyle,\n ...(lines ? ({'--line-clamp': lines} as React.CSSProperties) : undefined),\n ...style,\n }}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n {children}\n </Component>\n )\n}\n"],"mappings":"iLAOA,SAAgB,EAAwB,CAAC,SAA4D,CACjG,MAAO,CAAC,GAAS,UAAU,IAAQ,CCAvC,SAAgB,EAAM,CAClB,KAAK,IACL,OAAO,UACP,OACA,QAAQ,OACR,SACA,QACA,SAAS,SACT,WACA,UACA,UACA,QACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,YACA,YACA,QACA,WACA,GAAG,GACQ,CACX,IAAM,EAAY,EACZ,EAAe,EAAA,EAAuB,CAAC,QAAM,CAAC,CAC9C,EAAQ,OAAO,GAAa,SAAW,EAAW,IAAA,GAExD,OACI,EAAA,EAAA,KAAC,EAAD,CACI,UAAW,EAAA,EACP,OACA,CAAC,GAAS,EACV,EACA,EACA,EACA,IAAa,IAAQ,WACrB,GAAS,MAAQ,aACjB,GAAG,EAAwB,CAAC,QAAM,CAAC,CACnC,GAAG,EAAA,EAA2B,CAC1B,UACA,UACA,QACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,YACH,CAAC,CACF,EACH,CACD,MAAO,CACH,GAAG,EACH,GAAI,EAAS,CAAC,eAAgB,EAAM,CAA2B,IAAA,GAC/D,GAAG,EACN,CACD,GAAI,EAAA,EAAe,EAAO,CAC1B,GAAI,EAEH,WACO,CAAA"}
1
+ {"version":3,"file":"MText-CDDEGjBx.cjs","names":[],"sources":["../src/utils/appearanceProps.ts","../src/components/typography/MText/MText.tsx"],"sourcesContent":["import type {MColor} from '../theme'\n\nexport interface AppearanceProps {\n color?: MColor\n}\n\n// Translate semantic appearance props into shared utility classes.\nexport function getAppearanceClassNames({color}: AppearanceProps): Array<string | false | undefined> {\n return [color && `fcolor-${color}`]\n}\n","import type {MTextProps} from './MText.types'\nimport {getHiddenProps} from '../../../theme'\nimport {cn} from '../../../utils/cn'\nimport {getAppearanceClassNames} from '../../../utils/appearanceProps'\nimport {getLayoutUtilityClassNames, getLayoutUtilityStyles} from '../../../utils/layoutProps'\nimport './MText.css'\n\n// Render body copy with shared tone, size and weight controls.\nexport function MText({\n as = 'p',\n tone = 'default',\n size,\n align = 'left',\n hidden,\n color,\n weight = 'normal',\n truncate,\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}: MTextProps) {\n const Component = as\n const utilityStyle = getLayoutUtilityStyles({fsize})\n const lines = typeof truncate === 'number' ? truncate : undefined\n\n return (\n <Component\n className={cn(\n 'text',\n !color && tone,\n size,\n align,\n weight,\n truncate === true && 'truncate',\n lines != null && 'line-clamp',\n ...getAppearanceClassNames({color}),\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={{\n ...utilityStyle,\n ...(lines ? ({'--line-clamp': lines} as React.CSSProperties) : undefined),\n ...style,\n }}\n {...getHiddenProps(hidden)}\n {...rest}\n >\n {children}\n </Component>\n )\n}\n"],"mappings":"iLAOA,SAAgB,EAAwB,CAAC,SAA4D,CACjG,MAAO,CAAC,GAAS,UAAU,IAAQ,CCAvC,SAAgB,EAAM,CAClB,KAAK,IACL,OAAO,UACP,OACA,QAAQ,OACR,SACA,QACA,SAAS,SACT,WACA,UACA,UACA,QACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,YACA,YACA,QACA,WACA,GAAG,GACQ,CACX,IAAM,EAAY,EACZ,EAAe,EAAA,EAAuB,CAAC,QAAM,CAAC,CAC9C,EAAQ,OAAO,GAAa,SAAW,EAAW,IAAA,GAExD,OACI,EAAA,EAAA,KAAC,EAAD,CACI,UAAW,EAAA,EACP,OACA,CAAC,GAAS,EACV,EACA,EACA,EACA,IAAa,IAAQ,WACrB,GAAS,MAAQ,aACjB,GAAG,EAAwB,CAAC,QAAM,CAAC,CACnC,GAAG,EAAA,EAA2B,CAC1B,UACA,UACA,QACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,YACH,CAAC,CACF,EACH,CACD,MAAO,CACH,GAAG,EACH,GAAI,EAAS,CAAC,eAAgB,EAAM,CAA2B,IAAA,GAC/D,GAAG,EACN,CACD,GAAI,EAAA,EAAe,EAAO,CAC1B,GAAI,EAEH,WACO,CAAA"}
@@ -1,2 +1,2 @@
1
- const e=require(`./cn-CU5TNITO.cjs`),t=require(`./MPortal-BciZHNDC.cjs`);require(`./core-DBpQf3uY.cjs`);let n=require(`react`),r=require(`react/jsx-runtime`);function i(e,t,n){switch(n){case`bottom`:return{top:e.bottom+6,left:e.left+e.width/2-t.width/2};case`left`:return{top:e.top+e.height/2-t.height/2,left:e.left-t.width-6};case`right`:return{top:e.top+e.height/2-t.height/2,left:e.right+6};default:return{top:e.top-t.height-6,left:e.left+e.width/2-t.width/2}}}function a({content:a,placement:o=`top`,delay:s=0,className:c,children:l,...u}){let[d,f]=(0,n.useState)(!1),[p,m]=(0,n.useState)(null),h=(0,n.useRef)(null),g=(0,n.useRef)(null),_=(0,n.useRef)(null),v=(0,n.useCallback)(()=>{s>0?_.current=setTimeout(()=>f(!0),s):f(!0)},[s]),y=(0,n.useCallback)(()=>{_.current&&=(clearTimeout(_.current),null),f(!1),m(null)},[]);return(0,n.useLayoutEffect)(()=>{!d||!h.current||!g.current||m(i(h.current.getBoundingClientRect(),g.current.getBoundingClientRect(),o))},[d,o]),(0,r.jsxs)(`div`,{ref:h,className:e.t(`tooltip wrapper`,c),onMouseEnter:v,onMouseLeave:y,onFocus:v,onBlur:y,...u,children:[l,d&&(0,r.jsx)(t.t,{children:(0,r.jsx)(`div`,{ref:g,className:e.t(`tooltip bubble`,o),role:`tooltip`,style:p?{top:p.top,left:p.left}:{visibility:`hidden`},children:a})})]})}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return a}});
2
- //# sourceMappingURL=MTooltip-BEfO9jTe.cjs.map
1
+ const e=require(`./cn-CU5TNITO.cjs`),t=require(`./MPortal-C9Ucq8Um.cjs`);require(`./core-CLRD6sG4.cjs`);let n=require(`react`),r=require(`react/jsx-runtime`);function i(e,t,n){switch(n){case`bottom`:return{top:e.bottom+6,left:e.left+e.width/2-t.width/2};case`left`:return{top:e.top+e.height/2-t.height/2,left:e.left-t.width-6};case`right`:return{top:e.top+e.height/2-t.height/2,left:e.right+6};default:return{top:e.top-t.height-6,left:e.left+e.width/2-t.width/2}}}function a({content:a,placement:o=`top`,delay:s=0,className:c,children:l,...u}){let[d,f]=(0,n.useState)(!1),[p,m]=(0,n.useState)(null),h=(0,n.useRef)(null),g=(0,n.useRef)(null),_=(0,n.useRef)(null),v=(0,n.useCallback)(()=>{s>0?_.current=setTimeout(()=>f(!0),s):f(!0)},[s]),y=(0,n.useCallback)(()=>{_.current&&=(clearTimeout(_.current),null),f(!1),m(null)},[]);return(0,n.useLayoutEffect)(()=>{!d||!h.current||!g.current||m(i(h.current.getBoundingClientRect(),g.current.getBoundingClientRect(),o))},[d,o]),(0,r.jsxs)(`div`,{ref:h,className:e.t(`tooltip wrapper`,c),onMouseEnter:v,onMouseLeave:y,onFocus:v,onBlur:y,...u,children:[l,d&&(0,r.jsx)(t.t,{children:(0,r.jsx)(`div`,{ref:g,className:e.t(`tooltip bubble`,o),role:`tooltip`,style:p?{top:p.top,left:p.left}:{visibility:`hidden`},children:a})})]})}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return a}});
2
+ //# sourceMappingURL=MTooltip-BWqyv6QU.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"MTooltip-BEfO9jTe.cjs","names":[],"sources":["../src/components/overlays/MTooltip/MTooltip.tsx"],"sourcesContent":["import {useRef, useState, useCallback, useLayoutEffect} from 'react'\nimport type {MTooltipProps} from './MTooltip.types'\nimport {cn} from '../../../utils/cn'\nimport {MPortal} from '../../primitives'\nimport './MTooltip.css'\n\nfunction computePosition(trigger: DOMRect, bubble: DOMRect, placement: string): {top: number; left: number} {\n const gap = 6\n switch (placement) {\n case 'bottom':\n return {top: trigger.bottom + gap, left: trigger.left + trigger.width / 2 - bubble.width / 2}\n case 'left':\n return {top: trigger.top + trigger.height / 2 - bubble.height / 2, left: trigger.left - bubble.width - gap}\n case 'right':\n return {top: trigger.top + trigger.height / 2 - bubble.height / 2, left: trigger.right + gap}\n default:\n return {top: trigger.top - bubble.height - gap, left: trigger.left + trigger.width / 2 - bubble.width / 2}\n }\n}\n\nexport function MTooltip({content, placement = 'top', delay = 0, className, children, ...rest}: MTooltipProps) {\n const [visible, setVisible] = useState(false)\n const [pos, setPos] = useState<{top: number; left: number} | null>(null)\n const wrapperRef = useRef<HTMLDivElement>(null)\n const bubbleRef = useRef<HTMLDivElement>(null)\n const timeoutRef = useRef<ReturnType<typeof setTimeout>>(null)\n\n const show = useCallback(() => {\n if (delay > 0) {\n timeoutRef.current = setTimeout(() => setVisible(true), delay)\n } else {\n setVisible(true)\n }\n }, [delay])\n\n const hide = useCallback(() => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current)\n timeoutRef.current = null\n }\n setVisible(false)\n setPos(null)\n }, [])\n\n useLayoutEffect(() => {\n if (!visible || !wrapperRef.current || !bubbleRef.current) return\n const triggerRect = wrapperRef.current.getBoundingClientRect()\n const bubbleRect = bubbleRef.current.getBoundingClientRect()\n setPos(computePosition(triggerRect, bubbleRect, placement))\n }, [visible, placement])\n\n return (\n <div\n ref={wrapperRef}\n className={cn('tooltip wrapper', className)}\n onMouseEnter={show}\n onMouseLeave={hide}\n onFocus={show}\n onBlur={hide}\n {...rest}\n >\n {children}\n {visible && (\n <MPortal>\n <div\n ref={bubbleRef}\n className={cn('tooltip bubble', placement)}\n role=\"tooltip\"\n style={pos ? {top: pos.top, left: pos.left} : {visibility: 'hidden'}}\n >\n {content}\n </div>\n </MPortal>\n )}\n </div>\n )\n}\n"],"mappings":"8JAMA,SAAS,EAAgB,EAAkB,EAAiB,EAAgD,CAExG,OAAQ,EAAR,CACI,IAAK,SACD,MAAO,CAAC,IAAK,EAAQ,OAAS,EAAK,KAAM,EAAQ,KAAO,EAAQ,MAAQ,EAAI,EAAO,MAAQ,EAAE,CACjG,IAAK,OACD,MAAO,CAAC,IAAK,EAAQ,IAAM,EAAQ,OAAS,EAAI,EAAO,OAAS,EAAG,KAAM,EAAQ,KAAO,EAAO,MAAQ,EAAI,CAC/G,IAAK,QACD,MAAO,CAAC,IAAK,EAAQ,IAAM,EAAQ,OAAS,EAAI,EAAO,OAAS,EAAG,KAAM,EAAQ,MAAQ,EAAI,CACjG,QACI,MAAO,CAAC,IAAK,EAAQ,IAAM,EAAO,OAAS,EAAK,KAAM,EAAQ,KAAO,EAAQ,MAAQ,EAAI,EAAO,MAAQ,EAAE,EAItH,SAAgB,EAAS,CAAC,UAAS,YAAY,MAAO,QAAQ,EAAG,YAAW,WAAU,GAAG,GAAsB,CAC3G,GAAM,CAAC,EAAS,IAAA,EAAA,EAAA,UAAuB,GAAM,CACvC,CAAC,EAAK,IAAA,EAAA,EAAA,UAAuD,KAAK,CAClE,GAAA,EAAA,EAAA,QAAoC,KAAK,CACzC,GAAA,EAAA,EAAA,QAAmC,KAAK,CACxC,GAAA,EAAA,EAAA,QAAmD,KAAK,CAExD,GAAA,EAAA,EAAA,iBAAyB,CACvB,EAAQ,EACR,EAAW,QAAU,eAAiB,EAAW,GAAK,CAAE,EAAM,CAE9D,EAAW,GAAK,EAErB,CAAC,EAAM,CAAC,CAEL,GAAA,EAAA,EAAA,iBAAyB,CAC3B,AAEI,EAAW,WADX,aAAa,EAAW,QAAQ,CACX,MAEzB,EAAW,GAAM,CACjB,EAAO,KAAK,EACb,EAAE,CAAC,CASN,OAPA,EAAA,EAAA,qBAAsB,CACd,CAAC,GAAW,CAAC,EAAW,SAAW,CAAC,EAAU,SAGlD,EAAO,EAFa,EAAW,QAAQ,uBAAuB,CAC3C,EAAU,QAAQ,uBAAuB,CACZ,EAAU,CAAC,EAC5D,CAAC,EAAS,EAAU,CAAC,EAGpB,EAAA,EAAA,MAAC,MAAD,CACI,IAAK,EACL,UAAW,EAAA,EAAG,kBAAmB,EAAU,CAC3C,aAAc,EACd,aAAc,EACd,QAAS,EACT,OAAQ,EACR,GAAI,WAPR,CASK,EACA,IACG,EAAA,EAAA,KAAC,EAAA,EAAD,CAAA,UACI,EAAA,EAAA,KAAC,MAAD,CACI,IAAK,EACL,UAAW,EAAA,EAAG,iBAAkB,EAAU,CAC1C,KAAK,UACL,MAAO,EAAM,CAAC,IAAK,EAAI,IAAK,KAAM,EAAI,KAAK,CAAG,CAAC,WAAY,SAAS,UAEnE,EACC,CAAA,CACA,CAAA,CAEZ"}
1
+ {"version":3,"file":"MTooltip-BWqyv6QU.cjs","names":[],"sources":["../src/components/overlays/MTooltip/MTooltip.tsx"],"sourcesContent":["import {useRef, useState, useCallback, useLayoutEffect} from 'react'\nimport type {MTooltipProps} from './MTooltip.types'\nimport {cn} from '../../../utils/cn'\nimport {MPortal} from '../../primitives'\nimport './MTooltip.css'\n\nfunction computePosition(trigger: DOMRect, bubble: DOMRect, placement: string): {top: number; left: number} {\n const gap = 6\n switch (placement) {\n case 'bottom':\n return {top: trigger.bottom + gap, left: trigger.left + trigger.width / 2 - bubble.width / 2}\n case 'left':\n return {top: trigger.top + trigger.height / 2 - bubble.height / 2, left: trigger.left - bubble.width - gap}\n case 'right':\n return {top: trigger.top + trigger.height / 2 - bubble.height / 2, left: trigger.right + gap}\n default:\n return {top: trigger.top - bubble.height - gap, left: trigger.left + trigger.width / 2 - bubble.width / 2}\n }\n}\n\nexport function MTooltip({content, placement = 'top', delay = 0, className, children, ...rest}: MTooltipProps) {\n const [visible, setVisible] = useState(false)\n const [pos, setPos] = useState<{top: number; left: number} | null>(null)\n const wrapperRef = useRef<HTMLDivElement>(null)\n const bubbleRef = useRef<HTMLDivElement>(null)\n const timeoutRef = useRef<ReturnType<typeof setTimeout>>(null)\n\n const show = useCallback(() => {\n if (delay > 0) {\n timeoutRef.current = setTimeout(() => setVisible(true), delay)\n } else {\n setVisible(true)\n }\n }, [delay])\n\n const hide = useCallback(() => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current)\n timeoutRef.current = null\n }\n setVisible(false)\n setPos(null)\n }, [])\n\n useLayoutEffect(() => {\n if (!visible || !wrapperRef.current || !bubbleRef.current) return\n const triggerRect = wrapperRef.current.getBoundingClientRect()\n const bubbleRect = bubbleRef.current.getBoundingClientRect()\n setPos(computePosition(triggerRect, bubbleRect, placement))\n }, [visible, placement])\n\n return (\n <div\n ref={wrapperRef}\n className={cn('tooltip wrapper', className)}\n onMouseEnter={show}\n onMouseLeave={hide}\n onFocus={show}\n onBlur={hide}\n {...rest}\n >\n {children}\n {visible && (\n <MPortal>\n <div\n ref={bubbleRef}\n className={cn('tooltip bubble', placement)}\n role=\"tooltip\"\n style={pos ? {top: pos.top, left: pos.left} : {visibility: 'hidden'}}\n >\n {content}\n </div>\n </MPortal>\n )}\n </div>\n )\n}\n"],"mappings":"8JAMA,SAAS,EAAgB,EAAkB,EAAiB,EAAgD,CAExG,OAAQ,EAAR,CACI,IAAK,SACD,MAAO,CAAC,IAAK,EAAQ,OAAS,EAAK,KAAM,EAAQ,KAAO,EAAQ,MAAQ,EAAI,EAAO,MAAQ,EAAE,CACjG,IAAK,OACD,MAAO,CAAC,IAAK,EAAQ,IAAM,EAAQ,OAAS,EAAI,EAAO,OAAS,EAAG,KAAM,EAAQ,KAAO,EAAO,MAAQ,EAAI,CAC/G,IAAK,QACD,MAAO,CAAC,IAAK,EAAQ,IAAM,EAAQ,OAAS,EAAI,EAAO,OAAS,EAAG,KAAM,EAAQ,MAAQ,EAAI,CACjG,QACI,MAAO,CAAC,IAAK,EAAQ,IAAM,EAAO,OAAS,EAAK,KAAM,EAAQ,KAAO,EAAQ,MAAQ,EAAI,EAAO,MAAQ,EAAE,EAItH,SAAgB,EAAS,CAAC,UAAS,YAAY,MAAO,QAAQ,EAAG,YAAW,WAAU,GAAG,GAAsB,CAC3G,GAAM,CAAC,EAAS,IAAA,EAAA,EAAA,UAAuB,GAAM,CACvC,CAAC,EAAK,IAAA,EAAA,EAAA,UAAuD,KAAK,CAClE,GAAA,EAAA,EAAA,QAAoC,KAAK,CACzC,GAAA,EAAA,EAAA,QAAmC,KAAK,CACxC,GAAA,EAAA,EAAA,QAAmD,KAAK,CAExD,GAAA,EAAA,EAAA,iBAAyB,CACvB,EAAQ,EACR,EAAW,QAAU,eAAiB,EAAW,GAAK,CAAE,EAAM,CAE9D,EAAW,GAAK,EAErB,CAAC,EAAM,CAAC,CAEL,GAAA,EAAA,EAAA,iBAAyB,CAC3B,AAEI,EAAW,WADX,aAAa,EAAW,QAAQ,CACX,MAEzB,EAAW,GAAM,CACjB,EAAO,KAAK,EACb,EAAE,CAAC,CASN,OAPA,EAAA,EAAA,qBAAsB,CACd,CAAC,GAAW,CAAC,EAAW,SAAW,CAAC,EAAU,SAGlD,EAAO,EAFa,EAAW,QAAQ,uBAAuB,CAC3C,EAAU,QAAQ,uBAAuB,CACZ,EAAU,CAAC,EAC5D,CAAC,EAAS,EAAU,CAAC,EAGpB,EAAA,EAAA,MAAC,MAAD,CACI,IAAK,EACL,UAAW,EAAA,EAAG,kBAAmB,EAAU,CAC3C,aAAc,EACd,aAAc,EACd,QAAS,EACT,OAAQ,EACR,GAAI,WAPR,CASK,EACA,IACG,EAAA,EAAA,KAAC,EAAA,EAAD,CAAA,UACI,EAAA,EAAA,KAAC,MAAD,CACI,IAAK,EACL,UAAW,EAAA,EAAG,iBAAkB,EAAU,CAC1C,KAAK,UACL,MAAO,EAAM,CAAC,IAAK,EAAI,IAAK,KAAM,EAAI,KAAK,CAAG,CAAC,WAAY,SAAS,UAEnE,EACC,CAAA,CACA,CAAA,CAEZ"}
@@ -1,2 +1,2 @@
1
- const e=require(`./icons-D675Im0B.cjs`),t=require(`./cn-CU5TNITO.cjs`),n=require(`./MPortal-BciZHNDC.cjs`),r=require(`./MCheckbox-CM5HJQWW.cjs`);require(`./core-DBpQf3uY.cjs`);let i=require(`react`),a=require(`react/jsx-runtime`);var o={pdf:(0,a.jsx)(e.pi,{}),ts:(0,a.jsx)(e.ni,{}),tsx:(0,a.jsx)(e.ri,{}),js:(0,a.jsx)(e.Wr,{}),jsx:(0,a.jsx)(e.di,{}),css:(0,a.jsx)(e.Lr,{}),scss:(0,a.jsx)(e.Lr,{}),html:(0,a.jsx)(e.Hr,{}),json:(0,a.jsx)(e.Gr,{}),md:(0,a.jsx)(e.qr,{}),txt:(0,a.jsx)(e.ii,{}),csv:(0,a.jsx)(e.Rr,{}),zip:(0,a.jsx)(e.ci,{}),rar:(0,a.jsx)(e.ei,{}),svg:(0,a.jsx)(e.ti,{}),png:(0,a.jsx)(e.Qr,{}),jpg:(0,a.jsx)(e.Ur,{}),jpeg:(0,a.jsx)(e.fi,{}),gif:(0,a.jsx)(e.Vr,{}),webp:(0,a.jsx)(e.ai,{}),php:(0,a.jsx)(e.Zr,{}),xml:(0,a.jsx)(e.si,{}),xls:(0,a.jsx)(e.oi,{}),ppt:(0,a.jsx)(e.$r,{}),odt:(0,a.jsx)(e.Xr,{}),exe:(0,a.jsx)(e.Br,{}),mp3:(0,a.jsx)(e.Jr,{}),mp4:(0,a.jsx)(e.Yr,{})};function s(e){let t=e.lastIndexOf(`.`);return t<1?null:e.slice(t+1).toLowerCase()}function c(e){return e.kind===`folder`||!!e.children?.length}function l(t){let n=s(t);return n?o[n]??(0,a.jsx)(e.mi,{}):(0,a.jsx)(e._i,{})}function ee(t,n,r){return t.icon?t.icon:r?c(t)?n?(0,a.jsx)(e.Fr,{}):(0,a.jsx)(e.Ir,{}):l(t.label):null}function u(e){let t=new Map,n=new Map,r=new Map;function i(e){t.set(e.id,e);let a=new Set;for(let t of e.children??[])r.set(t.id,e.id),a.add(t.id),i(t).forEach(e=>a.add(e));return n.set(e.id,a),a}return e.forEach(i),{nodeMap:t,descendants:n,parentMap:r}}function d(e,t){let n=new Set;function r(e){if(!e.children?.length)return t.has(e.id)?{checked:1,total:1}:{checked:0,total:1};let i=0,a=0;for(let t of e.children){let e=r(t);i+=e.checked,a+=e.total}return i>0&&i<a&&n.add(e.id),{checked:i,total:a}}return e.forEach(r),n}function f(e,t){return typeof window>`u`?{x:e,y:t}:{x:Math.max(8,Math.min(e,window.innerWidth-220)),y:Math.max(8,Math.min(t,window.innerHeight-16))}}function p({node:n,color:i,level:o,expandable:s,selectable:l,expandedIds:u,selectedId:d,draggedId:f,dropTargetId:m,onToggle:h,onSelect:g,checkable:_,checkedIds:v,indeterminateIds:y,onCheck:b,indent:x,showLines:S,fileIcons:C,draggable:w,canDropOnNode:T,onContextMenu:E,onDragStart:D,onDragOver:O,onDrop:k,onDragEnd:A}){let j=c(n),M=u.has(n.id),N=d===n.id,P=f===n.id,te=m===n.id,F=T?.(n),I=ee(n,M,!!C),L=v?.has(n.id)??!1,R=y?.has(n.id)??!1;return(0,a.jsxs)(`li`,{role:`treeitem`,"aria-expanded":j?M:void 0,children:[(0,a.jsxs)(`div`,{className:t.t(`item`,N&&`selected`,n.disabled&&`disabled`,l&&!n.disabled&&`selectable`,w&&!n.disabled&&`draggable`,P&&`dragging`,F&&`can-drop`,te&&`drop-target`),"data-color":i,style:{paddingLeft:o*x},draggable:w&&!n.disabled,onClick:()=>{n.disabled||(j&&s&&h(n.id),l&&g?.(n.id,n))},onContextMenu:e=>E?.(e,n),onDragStart:e=>D?.(e,n),onDragOver:e=>O?.(e,n),onDrop:e=>k?.(e,n),onDragEnd:A,children:[(0,a.jsx)(`span`,{className:`toggle`,children:j&&s?(0,a.jsx)(`span`,{className:t.t(`arrow`,M&&`expanded`),children:(0,a.jsx)(e.qi,{})}):(0,a.jsx)(`span`,{className:`spacer`})}),_&&(0,a.jsx)(`span`,{className:`check`,onClick:e=>e.stopPropagation(),children:(0,a.jsx)(r.t,{size:`sm`,clickEffect:`none`,disabled:n.disabled,checked:L,indeterminate:R,onChange:()=>b?.(n.id)})}),I&&(0,a.jsx)(`span`,{className:`icon`,children:I}),(0,a.jsx)(`span`,{className:`label`,children:n.label})]}),j&&M&&(0,a.jsx)(`ul`,{className:`list`,role:`group`,style:S?{"--line-left":`${o*x+17}px`}:void 0,children:(n.children??[]).map(e=>(0,a.jsx)(p,{node:e,color:i,level:o+1,expandable:s,selectable:l,expandedIds:u,selectedId:d,draggedId:f,dropTargetId:m,onToggle:h,onSelect:g,checkable:_,checkedIds:v,indeterminateIds:y,onCheck:b,indent:x,showLines:S,fileIcons:C,draggable:w,canDropOnNode:T,onContextMenu:E,onDragStart:D,onDragOver:O,onDrop:k,onDragEnd:A},e.id))})]})}function m({items:e,color:r=`primary`,expandable:o=!0,selectable:s=!1,defaultExpanded:l=[],expanded:ee,onExpandChange:m,selected:h,onSelect:g,checkable:_=!1,defaultChecked:v=[],checked:y,onCheckedChange:b,indent:x=20,showLines:S=!0,fileIcons:C=!0,draggable:w=!1,canDrop:T,onMove:E,contextMenuItems:D,onContextMenuAction:O,className:k,...A}){let[j,M]=(0,i.useState)(l),[N,P]=(0,i.useState)(null),[te,F]=(0,i.useState)(v),[I,L]=(0,i.useState)(null),[R,z]=(0,i.useState)(null),[B,V]=(0,i.useState)(null),H=(0,i.useRef)(null),U=ee??j,W=new Set(U),ne=h===void 0?N:h,G=new Set(y??te),re=_?d(e,G):new Set,{nodeMap:K,descendants:q,parentMap:J}=u(e),Y=I?K.get(I)??null:null;(0,i.useEffect)(()=>{if(!B)return;function e(e){e&&H.current&&H.current.contains(e.target)||V(null)}function t(e){e.key===`Escape`&&V(null)}return document.addEventListener(`mousedown`,e),document.addEventListener(`scroll`,e,!0),window.addEventListener(`resize`,e),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`mousedown`,e),document.removeEventListener(`scroll`,e,!0),window.removeEventListener(`resize`,e),document.removeEventListener(`keydown`,t)}},[B]);function X(e){let t=W.has(e)?U.filter(t=>t!==e):[...U,e];m?m(t):M(t)}function Z(e,t){g?g(e,t):P(e)}function ie(e){let t=K.get(e);if(!t||t.disabled)return;let n=new Set(G),r=n.has(e),i=[e,...Array.from(q.get(e)??[])];if(r)for(let e of i)n.delete(e);else for(let e of i){let t=K.get(e);t&&!t.disabled&&n.add(e)}let a=J.get(e);for(;a;){let e=K.get(a);if(!e)break;let t=(e.children??[]).every(e=>e.disabled||n.has(e.id)),r=(e.children??[]).some(e=>!e.disabled);t&&r?n.add(a):n.delete(a),a=J.get(a)}let o=Array.from(n);y===void 0&&F(o),b?.(o)}function Q(){L(null),z(null)}function $(e){return!Y||!w||!E||e.disabled||!c(e)||e.id===Y.id||q.get(Y.id)?.has(e.id)?!1:T?T(Y,e):!0}function ae(e,t){if(!D||t.disabled)return;let n=D(t).filter(Boolean);if(!n.length)return;e.preventDefault(),Z(t.id,t);let r=f(e.clientX,e.clientY);V({node:t,items:n,x:r.x,y:r.y})}function oe(e,t){!w||t.disabled||(e.dataTransfer.effectAllowed=`move`,e.dataTransfer.setData(`text/plain`,t.id),V(null),L(t.id))}function se(e,t){$(t)&&(e.preventDefault(),e.dataTransfer.dropEffect=`move`,z(t.id))}function ce(e,t){if(e.preventDefault(),!Y||!$(t)){Q();return}E?.({draggedId:Y.id,draggedNode:Y,targetId:t.id,targetNode:t}),o&&!W.has(t.id)&&X(t.id),Q()}return(0,a.jsxs)(`div`,{className:t.t(`tree`,`color-${r}`,S&&`lines`,k),...A,children:[(0,a.jsx)(`ul`,{className:`list`,role:`tree`,children:e.map(e=>(0,a.jsx)(p,{node:e,color:r,level:0,expandable:o,selectable:s,expandedIds:W,selectedId:ne,draggedId:I,dropTargetId:R,onToggle:X,onSelect:Z,checkable:_,checkedIds:G,indeterminateIds:re,onCheck:ie,indent:x,showLines:S,fileIcons:C,draggable:w,canDropOnNode:$,onContextMenu:ae,onDragStart:oe,onDragOver:se,onDrop:ce,onDragEnd:Q},e.id))}),B&&(0,a.jsx)(n.t,{children:(0,a.jsx)(`div`,{ref:H,className:`tree menu`,style:{top:B.y,left:B.x},role:`menu`,children:B.items.map(e=>(0,a.jsxs)(`button`,{type:`button`,className:t.t(`action`,e.color,e.disabled&&`disabled`),role:`menuitem`,disabled:e.disabled,onClick:()=>{e.disabled||(O?.(e.id,B.node),V(null))},children:[e.icon&&(0,a.jsx)(`span`,{className:`icon`,children:e.icon}),(0,a.jsx)(`span`,{children:e.label})]},e.id))})})]})}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return m}});
2
- //# sourceMappingURL=MTreeView-DuQkm0ZV.cjs.map
1
+ const e=require(`./icons-BxurYyW-.cjs`),t=require(`./cn-CU5TNITO.cjs`),n=require(`./MPortal-C9Ucq8Um.cjs`),r=require(`./MCheckbox-stBujis6.cjs`);require(`./core-CLRD6sG4.cjs`);let i=require(`react`),a=require(`react/jsx-runtime`);var o={pdf:(0,a.jsx)(e.pi,{}),ts:(0,a.jsx)(e.ni,{}),tsx:(0,a.jsx)(e.ri,{}),js:(0,a.jsx)(e.Wr,{}),jsx:(0,a.jsx)(e.di,{}),css:(0,a.jsx)(e.Lr,{}),scss:(0,a.jsx)(e.Lr,{}),html:(0,a.jsx)(e.Hr,{}),json:(0,a.jsx)(e.Gr,{}),md:(0,a.jsx)(e.qr,{}),txt:(0,a.jsx)(e.ii,{}),csv:(0,a.jsx)(e.Rr,{}),zip:(0,a.jsx)(e.ci,{}),rar:(0,a.jsx)(e.ei,{}),svg:(0,a.jsx)(e.ti,{}),png:(0,a.jsx)(e.Qr,{}),jpg:(0,a.jsx)(e.Ur,{}),jpeg:(0,a.jsx)(e.fi,{}),gif:(0,a.jsx)(e.Vr,{}),webp:(0,a.jsx)(e.ai,{}),php:(0,a.jsx)(e.Zr,{}),xml:(0,a.jsx)(e.si,{}),xls:(0,a.jsx)(e.oi,{}),ppt:(0,a.jsx)(e.$r,{}),odt:(0,a.jsx)(e.Xr,{}),exe:(0,a.jsx)(e.Br,{}),mp3:(0,a.jsx)(e.Jr,{}),mp4:(0,a.jsx)(e.Yr,{})};function s(e){let t=e.lastIndexOf(`.`);return t<1?null:e.slice(t+1).toLowerCase()}function c(e){return e.kind===`folder`||!!e.children?.length}function l(t){let n=s(t);return n?o[n]??(0,a.jsx)(e.mi,{}):(0,a.jsx)(e._i,{})}function ee(t,n,r){return t.icon?t.icon:r?c(t)?n?(0,a.jsx)(e.Fr,{}):(0,a.jsx)(e.Ir,{}):l(t.label):null}function u(e){let t=new Map,n=new Map,r=new Map;function i(e){t.set(e.id,e);let a=new Set;for(let t of e.children??[])r.set(t.id,e.id),a.add(t.id),i(t).forEach(e=>a.add(e));return n.set(e.id,a),a}return e.forEach(i),{nodeMap:t,descendants:n,parentMap:r}}function d(e,t){let n=new Set;function r(e){if(!e.children?.length)return t.has(e.id)?{checked:1,total:1}:{checked:0,total:1};let i=0,a=0;for(let t of e.children){let e=r(t);i+=e.checked,a+=e.total}return i>0&&i<a&&n.add(e.id),{checked:i,total:a}}return e.forEach(r),n}function f(e,t){return typeof window>`u`?{x:e,y:t}:{x:Math.max(8,Math.min(e,window.innerWidth-220)),y:Math.max(8,Math.min(t,window.innerHeight-16))}}function p({node:n,color:i,level:o,expandable:s,selectable:l,expandedIds:u,selectedId:d,draggedId:f,dropTargetId:m,onToggle:h,onSelect:g,checkable:_,checkedIds:v,indeterminateIds:y,onCheck:b,indent:x,showLines:S,fileIcons:C,draggable:w,canDropOnNode:T,onContextMenu:E,onDragStart:D,onDragOver:O,onDrop:k,onDragEnd:A}){let j=c(n),M=u.has(n.id),N=d===n.id,P=f===n.id,te=m===n.id,F=T?.(n),I=ee(n,M,!!C),L=v?.has(n.id)??!1,R=y?.has(n.id)??!1;return(0,a.jsxs)(`li`,{role:`treeitem`,"aria-expanded":j?M:void 0,children:[(0,a.jsxs)(`div`,{className:t.t(`item`,N&&`selected`,n.disabled&&`disabled`,l&&!n.disabled&&`selectable`,w&&!n.disabled&&`draggable`,P&&`dragging`,F&&`can-drop`,te&&`drop-target`),"data-color":i,style:{paddingLeft:o*x},draggable:w&&!n.disabled,onClick:()=>{n.disabled||(j&&s&&h(n.id),l&&g?.(n.id,n))},onContextMenu:e=>E?.(e,n),onDragStart:e=>D?.(e,n),onDragOver:e=>O?.(e,n),onDrop:e=>k?.(e,n),onDragEnd:A,children:[(0,a.jsx)(`span`,{className:`toggle`,children:j&&s?(0,a.jsx)(`span`,{className:t.t(`arrow`,M&&`expanded`),children:(0,a.jsx)(e.qi,{})}):(0,a.jsx)(`span`,{className:`spacer`})}),_&&(0,a.jsx)(`span`,{className:`check`,onClick:e=>e.stopPropagation(),children:(0,a.jsx)(r.t,{size:`sm`,clickEffect:`none`,disabled:n.disabled,checked:L,indeterminate:R,onChange:()=>b?.(n.id)})}),I&&(0,a.jsx)(`span`,{className:`icon`,children:I}),(0,a.jsx)(`span`,{className:`label`,children:n.label})]}),j&&M&&(0,a.jsx)(`ul`,{className:`list`,role:`group`,style:S?{"--line-left":`${o*x+17}px`}:void 0,children:(n.children??[]).map(e=>(0,a.jsx)(p,{node:e,color:i,level:o+1,expandable:s,selectable:l,expandedIds:u,selectedId:d,draggedId:f,dropTargetId:m,onToggle:h,onSelect:g,checkable:_,checkedIds:v,indeterminateIds:y,onCheck:b,indent:x,showLines:S,fileIcons:C,draggable:w,canDropOnNode:T,onContextMenu:E,onDragStart:D,onDragOver:O,onDrop:k,onDragEnd:A},e.id))})]})}function m({items:e,color:r=`primary`,expandable:o=!0,selectable:s=!1,defaultExpanded:l=[],expanded:ee,onExpandChange:m,selected:h,onSelect:g,checkable:_=!1,defaultChecked:v=[],checked:y,onCheckedChange:b,indent:x=20,showLines:S=!0,fileIcons:C=!0,draggable:w=!1,canDrop:T,onMove:E,contextMenuItems:D,onContextMenuAction:O,className:k,...A}){let[j,M]=(0,i.useState)(l),[N,P]=(0,i.useState)(null),[te,F]=(0,i.useState)(v),[I,L]=(0,i.useState)(null),[R,z]=(0,i.useState)(null),[B,V]=(0,i.useState)(null),H=(0,i.useRef)(null),U=ee??j,W=new Set(U),ne=h===void 0?N:h,G=new Set(y??te),re=_?d(e,G):new Set,{nodeMap:K,descendants:q,parentMap:J}=u(e),Y=I?K.get(I)??null:null;(0,i.useEffect)(()=>{if(!B)return;function e(e){e&&H.current&&H.current.contains(e.target)||V(null)}function t(e){e.key===`Escape`&&V(null)}return document.addEventListener(`mousedown`,e),document.addEventListener(`scroll`,e,!0),window.addEventListener(`resize`,e),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`mousedown`,e),document.removeEventListener(`scroll`,e,!0),window.removeEventListener(`resize`,e),document.removeEventListener(`keydown`,t)}},[B]);function X(e){let t=W.has(e)?U.filter(t=>t!==e):[...U,e];m?m(t):M(t)}function Z(e,t){g?g(e,t):P(e)}function ie(e){let t=K.get(e);if(!t||t.disabled)return;let n=new Set(G),r=n.has(e),i=[e,...Array.from(q.get(e)??[])];if(r)for(let e of i)n.delete(e);else for(let e of i){let t=K.get(e);t&&!t.disabled&&n.add(e)}let a=J.get(e);for(;a;){let e=K.get(a);if(!e)break;let t=(e.children??[]).every(e=>e.disabled||n.has(e.id)),r=(e.children??[]).some(e=>!e.disabled);t&&r?n.add(a):n.delete(a),a=J.get(a)}let o=Array.from(n);y===void 0&&F(o),b?.(o)}function Q(){L(null),z(null)}function $(e){return!Y||!w||!E||e.disabled||!c(e)||e.id===Y.id||q.get(Y.id)?.has(e.id)?!1:T?T(Y,e):!0}function ae(e,t){if(!D||t.disabled)return;let n=D(t).filter(Boolean);if(!n.length)return;e.preventDefault(),Z(t.id,t);let r=f(e.clientX,e.clientY);V({node:t,items:n,x:r.x,y:r.y})}function oe(e,t){!w||t.disabled||(e.dataTransfer.effectAllowed=`move`,e.dataTransfer.setData(`text/plain`,t.id),V(null),L(t.id))}function se(e,t){$(t)&&(e.preventDefault(),e.dataTransfer.dropEffect=`move`,z(t.id))}function ce(e,t){if(e.preventDefault(),!Y||!$(t)){Q();return}E?.({draggedId:Y.id,draggedNode:Y,targetId:t.id,targetNode:t}),o&&!W.has(t.id)&&X(t.id),Q()}return(0,a.jsxs)(`div`,{className:t.t(`tree`,`color-${r}`,S&&`lines`,k),...A,children:[(0,a.jsx)(`ul`,{className:`list`,role:`tree`,children:e.map(e=>(0,a.jsx)(p,{node:e,color:r,level:0,expandable:o,selectable:s,expandedIds:W,selectedId:ne,draggedId:I,dropTargetId:R,onToggle:X,onSelect:Z,checkable:_,checkedIds:G,indeterminateIds:re,onCheck:ie,indent:x,showLines:S,fileIcons:C,draggable:w,canDropOnNode:$,onContextMenu:ae,onDragStart:oe,onDragOver:se,onDrop:ce,onDragEnd:Q},e.id))}),B&&(0,a.jsx)(n.t,{children:(0,a.jsx)(`div`,{ref:H,className:`tree menu`,style:{top:B.y,left:B.x},role:`menu`,children:B.items.map(e=>(0,a.jsxs)(`button`,{type:`button`,className:t.t(`action`,e.color,e.disabled&&`disabled`),role:`menuitem`,disabled:e.disabled,onClick:()=>{e.disabled||(O?.(e.id,B.node),V(null))},children:[e.icon&&(0,a.jsx)(`span`,{className:`icon`,children:e.icon}),(0,a.jsx)(`span`,{children:e.label})]},e.id))})})]})}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return m}});
2
+ //# sourceMappingURL=MTreeView-BcVw0Bgz.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"MTreeView-DuQkm0ZV.cjs","names":[],"sources":["../src/components/data/MTreeView/MTreeView.tsx"],"sourcesContent":["import {useEffect, useRef, useState} from 'react'\nimport type {CSSProperties, DragEvent, MouseEvent, ReactNode} from 'react'\nimport type {\n MTreeViewProps,\n MTreeItemProps,\n MTreeNode,\n MTreeViewContextMenuItem,\n MTreeViewMoveEvent,\n} from './MTreeView.types'\nimport {cn} from '../../../utils/cn'\nimport {MCheckbox} from '../../controls'\nimport {MPortal} from '../../primitives'\nimport {\n MChevronRightIcon,\n MFileCodeIcon,\n MFileCsvIcon,\n MFileCssIcon,\n MFileExeIcon,\n MFileGifIcon,\n MFileHtmlIcon,\n MFileIcon,\n MFileImageIcon,\n MFileJpgIcon,\n MFileJsIcon,\n MFileJsonIcon,\n MFileMdIcon,\n MFileMp3Icon,\n MFileMp4Icon,\n MFileOdtIcon,\n MFilePdfIcon,\n MFilePhpIcon,\n MFilePngIcon,\n MFilePptIcon,\n MFileRarIcon,\n MFileSvgIcon,\n MFileTextIcon,\n MFileTsIcon,\n MFileTsxIcon,\n MFileTxtIcon,\n MFileWebpIcon,\n MFileXlsIcon,\n MFileXmlIcon,\n MFileZipIcon,\n MFolderIcon,\n MFolderOpenIcon,\n} from '../../../icons'\nimport './MTreeView.css'\nconst fileTypeMap: Record<string, ReactNode> = {\n pdf: <MFilePdfIcon />,\n ts: <MFileTsIcon />,\n tsx: <MFileTsxIcon />,\n js: <MFileJsIcon />,\n jsx: <MFileCodeIcon />,\n css: <MFileCssIcon />,\n scss: <MFileCssIcon />,\n html: <MFileHtmlIcon />,\n json: <MFileJsonIcon />,\n md: <MFileMdIcon />,\n txt: <MFileTxtIcon />,\n csv: <MFileCsvIcon />,\n zip: <MFileZipIcon />,\n rar: <MFileRarIcon />,\n svg: <MFileSvgIcon />,\n png: <MFilePngIcon />,\n jpg: <MFileJpgIcon />,\n jpeg: <MFileImageIcon />,\n gif: <MFileGifIcon />,\n webp: <MFileWebpIcon />,\n php: <MFilePhpIcon />,\n xml: <MFileXmlIcon />,\n xls: <MFileXlsIcon />,\n ppt: <MFilePptIcon />,\n odt: <MFileOdtIcon />,\n exe: <MFileExeIcon />,\n mp3: <MFileMp3Icon />,\n mp4: <MFileMp4Icon />,\n}\n\n// Read the file extension once so icon logic stays predictable.\nfunction getFileExtension(label: string): string | null {\n const dot = label.lastIndexOf('.')\n if (dot < 1) return null\n return label.slice(dot + 1).toLowerCase()\n}\n\n// Treat explicit folders and nodes with children as directory-like.\nfunction isFolderNode(node: MTreeNode) {\n return node.kind === 'folder' || Boolean(node.children?.length)\n}\n\n// Resolve the proper file icon by extension.\nfunction getFileIcon(label: string): ReactNode {\n const ext = getFileExtension(label)\n if (!ext) return <MFileIcon />\n\n return fileTypeMap[ext] ?? <MFileTextIcon />\n}\n\n// Prefer custom icons first, then fall back to folder or file visuals.\nfunction getDefaultIcon(node: MTreeNode, isExpanded: boolean, fileIcons: boolean) {\n if (node.icon) return node.icon\n if (!fileIcons) return null\n\n if (isFolderNode(node)) return isExpanded ? <MFolderOpenIcon /> : <MFolderIcon />\n\n return getFileIcon(node.label)\n}\n\n// Cache nodes and descendants so drag-drop validation stays fast.\nfunction buildTreeLookup(items: MTreeNode[]) {\n const nodeMap = new Map<string, MTreeNode>()\n const descendants = new Map<string, Set<string>>()\n const parentMap = new Map<string, string>()\n\n function walk(node: MTreeNode) {\n nodeMap.set(node.id, node)\n\n const childIds = new Set<string>()\n\n for (const child of node.children ?? []) {\n parentMap.set(child.id, node.id)\n childIds.add(child.id)\n\n const nestedIds = walk(child)\n nestedIds.forEach((id) => childIds.add(id))\n }\n\n descendants.set(node.id, childIds)\n return childIds\n }\n\n items.forEach(walk)\n\n return {nodeMap, descendants, parentMap}\n}\n\n// Compute indeterminate ids: a node where some but not all leaf descendants are checked.\nfunction computeIndeterminate(items: MTreeNode[], checked: Set<string>): Set<string> {\n const indeterminate = new Set<string>()\n\n function walk(node: MTreeNode): {checked: number; total: number} {\n if (!node.children?.length) {\n return checked.has(node.id) ? {checked: 1, total: 1} : {checked: 0, total: 1}\n }\n\n let c = 0\n let t = 0\n\n for (const child of node.children) {\n const r = walk(child)\n c += r.checked\n t += r.total\n }\n\n if (c > 0 && c < t) indeterminate.add(node.id)\n return {checked: c, total: t}\n }\n\n items.forEach(walk)\n return indeterminate\n}\n\n// Keep the context menu inside the viewport.\nfunction clampMenuPosition(x: number, y: number) {\n if (typeof window === 'undefined') {\n return {x, y}\n }\n\n return {\n x: Math.max(8, Math.min(x, window.innerWidth - 220)),\n y: Math.max(8, Math.min(y, window.innerHeight - 16)),\n }\n}\n\n// Render one visible row and recurse into children when expanded.\nfunction TreeItem({\n node,\n color,\n level,\n expandable,\n selectable,\n expandedIds,\n selectedId,\n draggedId,\n dropTargetId,\n onToggle,\n onSelect,\n checkable,\n checkedIds,\n indeterminateIds,\n onCheck,\n indent,\n showLines,\n fileIcons,\n draggable,\n canDropOnNode,\n onContextMenu,\n onDragStart,\n onDragOver,\n onDrop,\n onDragEnd,\n}: MTreeItemProps) {\n const hasChildren = isFolderNode(node)\n const isExpanded = expandedIds.has(node.id)\n const isSelected = selectedId === node.id\n const isDragging = draggedId === node.id\n const isDropTarget = dropTargetId === node.id\n const canDrop = canDropOnNode?.(node)\n const icon = getDefaultIcon(node, isExpanded, !!fileIcons)\n const isChecked = checkedIds?.has(node.id) ?? false\n const isIndeterminate = indeterminateIds?.has(node.id) ?? false\n\n return (\n <li role=\"treeitem\" aria-expanded={hasChildren ? isExpanded : undefined}>\n <div\n className={cn(\n 'item',\n isSelected && 'selected',\n node.disabled && 'disabled',\n selectable && !node.disabled && 'selectable',\n draggable && !node.disabled && 'draggable',\n isDragging && 'dragging',\n canDrop && 'can-drop',\n isDropTarget && 'drop-target'\n )}\n data-color={color}\n style={{paddingLeft: level * indent}}\n draggable={draggable && !node.disabled}\n onClick={() => {\n if (node.disabled) return\n if (hasChildren && expandable) onToggle(node.id)\n if (selectable) onSelect?.(node.id, node)\n }}\n onContextMenu={(event) => onContextMenu?.(event, node)}\n onDragStart={(event) => onDragStart?.(event, node)}\n onDragOver={(event) => onDragOver?.(event, node)}\n onDrop={(event) => onDrop?.(event, node)}\n onDragEnd={onDragEnd}\n >\n <span className=\"toggle\">\n {hasChildren && expandable ? (\n <span className={cn('arrow', isExpanded && 'expanded')}>\n <MChevronRightIcon />\n </span>\n ) : (\n <span className=\"spacer\" />\n )}\n </span>\n {checkable && (\n <span className=\"check\" onClick={(event) => event.stopPropagation()}>\n <MCheckbox\n size=\"sm\"\n clickEffect=\"none\"\n disabled={node.disabled}\n checked={isChecked}\n indeterminate={isIndeterminate}\n onChange={() => onCheck?.(node.id)}\n />\n </span>\n )}\n {icon && <span className=\"icon\">{icon}</span>}\n <span className=\"label\">{node.label}</span>\n </div>\n {hasChildren && isExpanded && (\n <ul\n className=\"list\"\n role=\"group\"\n style={showLines ? ({'--line-left': `${level * indent + 17}px`} as CSSProperties) : undefined}\n >\n {(node.children ?? []).map((child) => (\n <TreeItem\n key={child.id}\n node={child}\n color={color}\n level={level + 1}\n expandable={expandable}\n selectable={selectable}\n expandedIds={expandedIds}\n selectedId={selectedId}\n draggedId={draggedId}\n dropTargetId={dropTargetId}\n onToggle={onToggle}\n onSelect={onSelect}\n checkable={checkable}\n checkedIds={checkedIds}\n indeterminateIds={indeterminateIds}\n onCheck={onCheck}\n indent={indent}\n showLines={showLines}\n fileIcons={fileIcons}\n draggable={draggable}\n canDropOnNode={canDropOnNode}\n onContextMenu={onContextMenu}\n onDragStart={onDragStart}\n onDragOver={onDragOver}\n onDrop={onDrop}\n onDragEnd={onDragEnd}\n />\n ))}\n </ul>\n )}\n </li>\n )\n}\n\n// Render a file tree with selection, context actions and folder moves.\nexport function MTreeView({\n items,\n color = 'primary',\n expandable = true,\n selectable = false,\n defaultExpanded = [],\n expanded: controlledExpanded,\n onExpandChange,\n selected: controlledSelected,\n onSelect,\n checkable = false,\n defaultChecked = [],\n checked: controlledChecked,\n onCheckedChange,\n indent = 20,\n showLines = true,\n fileIcons = true,\n draggable = false,\n canDrop,\n onMove,\n contextMenuItems,\n onContextMenuAction,\n className,\n ...rest\n}: MTreeViewProps) {\n const [internalExpanded, setInternalExpanded] = useState<string[]>(defaultExpanded)\n const [internalSelected, setInternalSelected] = useState<string | null>(null)\n const [internalChecked, setInternalChecked] = useState<string[]>(defaultChecked)\n const [draggedId, setDraggedId] = useState<string | null>(null)\n const [dropTargetId, setDropTargetId] = useState<string | null>(null)\n const [menu, setMenu] = useState<{\n node: MTreeNode\n items: MTreeViewContextMenuItem[]\n x: number\n y: number\n } | null>(null)\n const menuRef = useRef<HTMLDivElement>(null)\n\n const expandedArr = controlledExpanded ?? internalExpanded\n const expandedIds = new Set(expandedArr)\n const selectedId = controlledSelected !== undefined ? controlledSelected : internalSelected\n const checkedArr = controlledChecked ?? internalChecked\n const checkedIds = new Set(checkedArr)\n const indeterminateIds = checkable ? computeIndeterminate(items, checkedIds) : new Set<string>()\n const {nodeMap, descendants, parentMap} = buildTreeLookup(items)\n const draggedNode = draggedId ? (nodeMap.get(draggedId) ?? null) : null\n\n useEffect(() => {\n if (!menu) return\n\n function closeMenu(event?: Event) {\n if (event && menuRef.current && menuRef.current.contains(event.target as Node)) {\n return\n }\n\n setMenu(null)\n }\n\n function handleKey(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n setMenu(null)\n }\n }\n\n document.addEventListener('mousedown', closeMenu)\n document.addEventListener('scroll', closeMenu, true)\n window.addEventListener('resize', closeMenu)\n document.addEventListener('keydown', handleKey)\n\n return () => {\n document.removeEventListener('mousedown', closeMenu)\n document.removeEventListener('scroll', closeMenu, true)\n window.removeEventListener('resize', closeMenu)\n document.removeEventListener('keydown', handleKey)\n }\n }, [menu])\n\n function handleToggle(id: string) {\n const next = expandedIds.has(id) ? expandedArr.filter((e) => e !== id) : [...expandedArr, id]\n if (onExpandChange) onExpandChange(next)\n else setInternalExpanded(next)\n }\n\n function handleSelect(id: string, node: MTreeNode) {\n if (onSelect) onSelect(id, node)\n else setInternalSelected(id)\n }\n\n function handleCheck(id: string) {\n const node = nodeMap.get(id)\n if (!node || node.disabled) return\n\n const next = new Set(checkedIds)\n const isCurrentlyChecked = next.has(id)\n const subtree = [id, ...Array.from(descendants.get(id) ?? [])]\n\n if (isCurrentlyChecked) {\n for (const sid of subtree) next.delete(sid)\n } else {\n for (const sid of subtree) {\n const sNode = nodeMap.get(sid)\n if (sNode && !sNode.disabled) next.add(sid)\n }\n }\n\n let parentId = parentMap.get(id)\n\n while (parentId) {\n const parent = nodeMap.get(parentId)\n if (!parent) break\n\n const allChildrenChecked = (parent.children ?? []).every((child) => child.disabled || next.has(child.id))\n const hasEnabledChild = (parent.children ?? []).some((child) => !child.disabled)\n\n if (allChildrenChecked && hasEnabledChild) next.add(parentId)\n else next.delete(parentId)\n\n parentId = parentMap.get(parentId)\n }\n\n const nextArr = Array.from(next)\n\n if (controlledChecked === undefined) setInternalChecked(nextArr)\n onCheckedChange?.(nextArr)\n }\n\n function closeDrag() {\n setDraggedId(null)\n setDropTargetId(null)\n }\n\n function isValidDropTarget(targetNode: MTreeNode) {\n if (!draggedNode || !draggable || !onMove) return false\n if (targetNode.disabled || !isFolderNode(targetNode)) return false\n if (targetNode.id === draggedNode.id) return false\n if (descendants.get(draggedNode.id)?.has(targetNode.id)) return false\n\n return canDrop ? canDrop(draggedNode, targetNode) : true\n }\n\n function handleContextMenu(event: MouseEvent<HTMLDivElement>, node: MTreeNode) {\n if (!contextMenuItems || node.disabled) return\n\n const items = contextMenuItems(node).filter(Boolean)\n if (!items.length) return\n\n event.preventDefault()\n handleSelect(node.id, node)\n\n const pos = clampMenuPosition(event.clientX, event.clientY)\n setMenu({\n node,\n items,\n x: pos.x,\n y: pos.y,\n })\n }\n\n function handleDragStart(event: DragEvent<HTMLDivElement>, node: MTreeNode) {\n if (!draggable || node.disabled) return\n\n event.dataTransfer.effectAllowed = 'move'\n event.dataTransfer.setData('text/plain', node.id)\n setMenu(null)\n setDraggedId(node.id)\n }\n\n function handleDragOver(event: DragEvent<HTMLDivElement>, targetNode: MTreeNode) {\n if (!isValidDropTarget(targetNode)) return\n\n event.preventDefault()\n event.dataTransfer.dropEffect = 'move'\n setDropTargetId(targetNode.id)\n }\n\n function handleDrop(event: DragEvent<HTMLDivElement>, targetNode: MTreeNode) {\n event.preventDefault()\n\n if (!draggedNode || !isValidDropTarget(targetNode)) {\n closeDrag()\n return\n }\n\n onMove?.({\n draggedId: draggedNode.id,\n draggedNode,\n targetId: targetNode.id,\n targetNode,\n } satisfies MTreeViewMoveEvent)\n\n if (expandable && !expandedIds.has(targetNode.id)) {\n handleToggle(targetNode.id)\n }\n\n closeDrag()\n }\n\n return (\n <div className={cn('tree', `color-${color}`, showLines && 'lines', className)} {...rest}>\n <ul className=\"list\" role=\"tree\">\n {items.map((item) => (\n <TreeItem\n key={item.id}\n node={item}\n color={color}\n level={0}\n expandable={expandable}\n selectable={selectable}\n expandedIds={expandedIds}\n selectedId={selectedId}\n draggedId={draggedId}\n dropTargetId={dropTargetId}\n onToggle={handleToggle}\n onSelect={handleSelect}\n checkable={checkable}\n checkedIds={checkedIds}\n indeterminateIds={indeterminateIds}\n onCheck={handleCheck}\n indent={indent}\n showLines={showLines}\n fileIcons={fileIcons}\n draggable={draggable}\n canDropOnNode={isValidDropTarget}\n onContextMenu={handleContextMenu}\n onDragStart={handleDragStart}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n onDragEnd={closeDrag}\n />\n ))}\n </ul>\n {menu && (\n <MPortal>\n <div ref={menuRef} className=\"tree menu\" style={{top: menu.y, left: menu.x}} role=\"menu\">\n {menu.items.map((item) => (\n <button\n key={item.id}\n type=\"button\"\n className={cn('action', item.color, item.disabled && 'disabled')}\n role=\"menuitem\"\n disabled={item.disabled}\n onClick={() => {\n if (item.disabled) return\n onContextMenuAction?.(item.id, menu.node)\n setMenu(null)\n }}\n >\n {item.icon && <span className=\"icon\">{item.icon}</span>}\n <span>{item.label}</span>\n </button>\n ))}\n </div>\n </MPortal>\n )}\n </div>\n )\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"MTreeView-BcVw0Bgz.cjs","names":[],"sources":["../src/components/data/MTreeView/MTreeView.tsx"],"sourcesContent":["import {useEffect, useRef, useState} from 'react'\nimport type {CSSProperties, DragEvent, MouseEvent, ReactNode} from 'react'\nimport type {\n MTreeViewProps,\n MTreeItemProps,\n MTreeNode,\n MTreeViewContextMenuItem,\n MTreeViewMoveEvent,\n} from './MTreeView.types'\nimport {cn} from '../../../utils/cn'\nimport {MCheckbox} from '../../controls'\nimport {MPortal} from '../../primitives'\nimport {\n MChevronRightIcon,\n MFileCodeIcon,\n MFileCsvIcon,\n MFileCssIcon,\n MFileExeIcon,\n MFileGifIcon,\n MFileHtmlIcon,\n MFileIcon,\n MFileImageIcon,\n MFileJpgIcon,\n MFileJsIcon,\n MFileJsonIcon,\n MFileMdIcon,\n MFileMp3Icon,\n MFileMp4Icon,\n MFileOdtIcon,\n MFilePdfIcon,\n MFilePhpIcon,\n MFilePngIcon,\n MFilePptIcon,\n MFileRarIcon,\n MFileSvgIcon,\n MFileTextIcon,\n MFileTsIcon,\n MFileTsxIcon,\n MFileTxtIcon,\n MFileWebpIcon,\n MFileXlsIcon,\n MFileXmlIcon,\n MFileZipIcon,\n MFolderIcon,\n MFolderOpenIcon,\n} from '../../../icons'\nimport './MTreeView.css'\nconst fileTypeMap: Record<string, ReactNode> = {\n pdf: <MFilePdfIcon />,\n ts: <MFileTsIcon />,\n tsx: <MFileTsxIcon />,\n js: <MFileJsIcon />,\n jsx: <MFileCodeIcon />,\n css: <MFileCssIcon />,\n scss: <MFileCssIcon />,\n html: <MFileHtmlIcon />,\n json: <MFileJsonIcon />,\n md: <MFileMdIcon />,\n txt: <MFileTxtIcon />,\n csv: <MFileCsvIcon />,\n zip: <MFileZipIcon />,\n rar: <MFileRarIcon />,\n svg: <MFileSvgIcon />,\n png: <MFilePngIcon />,\n jpg: <MFileJpgIcon />,\n jpeg: <MFileImageIcon />,\n gif: <MFileGifIcon />,\n webp: <MFileWebpIcon />,\n php: <MFilePhpIcon />,\n xml: <MFileXmlIcon />,\n xls: <MFileXlsIcon />,\n ppt: <MFilePptIcon />,\n odt: <MFileOdtIcon />,\n exe: <MFileExeIcon />,\n mp3: <MFileMp3Icon />,\n mp4: <MFileMp4Icon />,\n}\n\n// Read the file extension once so icon logic stays predictable.\nfunction getFileExtension(label: string): string | null {\n const dot = label.lastIndexOf('.')\n if (dot < 1) return null\n return label.slice(dot + 1).toLowerCase()\n}\n\n// Treat explicit folders and nodes with children as directory-like.\nfunction isFolderNode(node: MTreeNode) {\n return node.kind === 'folder' || Boolean(node.children?.length)\n}\n\n// Resolve the proper file icon by extension.\nfunction getFileIcon(label: string): ReactNode {\n const ext = getFileExtension(label)\n if (!ext) return <MFileIcon />\n\n return fileTypeMap[ext] ?? <MFileTextIcon />\n}\n\n// Prefer custom icons first, then fall back to folder or file visuals.\nfunction getDefaultIcon(node: MTreeNode, isExpanded: boolean, fileIcons: boolean) {\n if (node.icon) return node.icon\n if (!fileIcons) return null\n\n if (isFolderNode(node)) return isExpanded ? <MFolderOpenIcon /> : <MFolderIcon />\n\n return getFileIcon(node.label)\n}\n\n// Cache nodes and descendants so drag-drop validation stays fast.\nfunction buildTreeLookup(items: MTreeNode[]) {\n const nodeMap = new Map<string, MTreeNode>()\n const descendants = new Map<string, Set<string>>()\n const parentMap = new Map<string, string>()\n\n function walk(node: MTreeNode) {\n nodeMap.set(node.id, node)\n\n const childIds = new Set<string>()\n\n for (const child of node.children ?? []) {\n parentMap.set(child.id, node.id)\n childIds.add(child.id)\n\n const nestedIds = walk(child)\n nestedIds.forEach((id) => childIds.add(id))\n }\n\n descendants.set(node.id, childIds)\n return childIds\n }\n\n items.forEach(walk)\n\n return {nodeMap, descendants, parentMap}\n}\n\n// Compute indeterminate ids: a node where some but not all leaf descendants are checked.\nfunction computeIndeterminate(items: MTreeNode[], checked: Set<string>): Set<string> {\n const indeterminate = new Set<string>()\n\n function walk(node: MTreeNode): {checked: number; total: number} {\n if (!node.children?.length) {\n return checked.has(node.id) ? {checked: 1, total: 1} : {checked: 0, total: 1}\n }\n\n let c = 0\n let t = 0\n\n for (const child of node.children) {\n const r = walk(child)\n c += r.checked\n t += r.total\n }\n\n if (c > 0 && c < t) indeterminate.add(node.id)\n return {checked: c, total: t}\n }\n\n items.forEach(walk)\n return indeterminate\n}\n\n// Keep the context menu inside the viewport.\nfunction clampMenuPosition(x: number, y: number) {\n if (typeof window === 'undefined') {\n return {x, y}\n }\n\n return {\n x: Math.max(8, Math.min(x, window.innerWidth - 220)),\n y: Math.max(8, Math.min(y, window.innerHeight - 16)),\n }\n}\n\n// Render one visible row and recurse into children when expanded.\nfunction TreeItem({\n node,\n color,\n level,\n expandable,\n selectable,\n expandedIds,\n selectedId,\n draggedId,\n dropTargetId,\n onToggle,\n onSelect,\n checkable,\n checkedIds,\n indeterminateIds,\n onCheck,\n indent,\n showLines,\n fileIcons,\n draggable,\n canDropOnNode,\n onContextMenu,\n onDragStart,\n onDragOver,\n onDrop,\n onDragEnd,\n}: MTreeItemProps) {\n const hasChildren = isFolderNode(node)\n const isExpanded = expandedIds.has(node.id)\n const isSelected = selectedId === node.id\n const isDragging = draggedId === node.id\n const isDropTarget = dropTargetId === node.id\n const canDrop = canDropOnNode?.(node)\n const icon = getDefaultIcon(node, isExpanded, !!fileIcons)\n const isChecked = checkedIds?.has(node.id) ?? false\n const isIndeterminate = indeterminateIds?.has(node.id) ?? false\n\n return (\n <li role=\"treeitem\" aria-expanded={hasChildren ? isExpanded : undefined}>\n <div\n className={cn(\n 'item',\n isSelected && 'selected',\n node.disabled && 'disabled',\n selectable && !node.disabled && 'selectable',\n draggable && !node.disabled && 'draggable',\n isDragging && 'dragging',\n canDrop && 'can-drop',\n isDropTarget && 'drop-target'\n )}\n data-color={color}\n style={{paddingLeft: level * indent}}\n draggable={draggable && !node.disabled}\n onClick={() => {\n if (node.disabled) return\n if (hasChildren && expandable) onToggle(node.id)\n if (selectable) onSelect?.(node.id, node)\n }}\n onContextMenu={(event) => onContextMenu?.(event, node)}\n onDragStart={(event) => onDragStart?.(event, node)}\n onDragOver={(event) => onDragOver?.(event, node)}\n onDrop={(event) => onDrop?.(event, node)}\n onDragEnd={onDragEnd}\n >\n <span className=\"toggle\">\n {hasChildren && expandable ? (\n <span className={cn('arrow', isExpanded && 'expanded')}>\n <MChevronRightIcon />\n </span>\n ) : (\n <span className=\"spacer\" />\n )}\n </span>\n {checkable && (\n <span className=\"check\" onClick={(event) => event.stopPropagation()}>\n <MCheckbox\n size=\"sm\"\n clickEffect=\"none\"\n disabled={node.disabled}\n checked={isChecked}\n indeterminate={isIndeterminate}\n onChange={() => onCheck?.(node.id)}\n />\n </span>\n )}\n {icon && <span className=\"icon\">{icon}</span>}\n <span className=\"label\">{node.label}</span>\n </div>\n {hasChildren && isExpanded && (\n <ul\n className=\"list\"\n role=\"group\"\n style={showLines ? ({'--line-left': `${level * indent + 17}px`} as CSSProperties) : undefined}\n >\n {(node.children ?? []).map((child) => (\n <TreeItem\n key={child.id}\n node={child}\n color={color}\n level={level + 1}\n expandable={expandable}\n selectable={selectable}\n expandedIds={expandedIds}\n selectedId={selectedId}\n draggedId={draggedId}\n dropTargetId={dropTargetId}\n onToggle={onToggle}\n onSelect={onSelect}\n checkable={checkable}\n checkedIds={checkedIds}\n indeterminateIds={indeterminateIds}\n onCheck={onCheck}\n indent={indent}\n showLines={showLines}\n fileIcons={fileIcons}\n draggable={draggable}\n canDropOnNode={canDropOnNode}\n onContextMenu={onContextMenu}\n onDragStart={onDragStart}\n onDragOver={onDragOver}\n onDrop={onDrop}\n onDragEnd={onDragEnd}\n />\n ))}\n </ul>\n )}\n </li>\n )\n}\n\n// Render a file tree with selection, context actions and folder moves.\nexport function MTreeView({\n items,\n color = 'primary',\n expandable = true,\n selectable = false,\n defaultExpanded = [],\n expanded: controlledExpanded,\n onExpandChange,\n selected: controlledSelected,\n onSelect,\n checkable = false,\n defaultChecked = [],\n checked: controlledChecked,\n onCheckedChange,\n indent = 20,\n showLines = true,\n fileIcons = true,\n draggable = false,\n canDrop,\n onMove,\n contextMenuItems,\n onContextMenuAction,\n className,\n ...rest\n}: MTreeViewProps) {\n const [internalExpanded, setInternalExpanded] = useState<string[]>(defaultExpanded)\n const [internalSelected, setInternalSelected] = useState<string | null>(null)\n const [internalChecked, setInternalChecked] = useState<string[]>(defaultChecked)\n const [draggedId, setDraggedId] = useState<string | null>(null)\n const [dropTargetId, setDropTargetId] = useState<string | null>(null)\n const [menu, setMenu] = useState<{\n node: MTreeNode\n items: MTreeViewContextMenuItem[]\n x: number\n y: number\n } | null>(null)\n const menuRef = useRef<HTMLDivElement>(null)\n\n const expandedArr = controlledExpanded ?? internalExpanded\n const expandedIds = new Set(expandedArr)\n const selectedId = controlledSelected !== undefined ? controlledSelected : internalSelected\n const checkedArr = controlledChecked ?? internalChecked\n const checkedIds = new Set(checkedArr)\n const indeterminateIds = checkable ? computeIndeterminate(items, checkedIds) : new Set<string>()\n const {nodeMap, descendants, parentMap} = buildTreeLookup(items)\n const draggedNode = draggedId ? (nodeMap.get(draggedId) ?? null) : null\n\n useEffect(() => {\n if (!menu) return\n\n function closeMenu(event?: Event) {\n if (event && menuRef.current && menuRef.current.contains(event.target as Node)) {\n return\n }\n\n setMenu(null)\n }\n\n function handleKey(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n setMenu(null)\n }\n }\n\n document.addEventListener('mousedown', closeMenu)\n document.addEventListener('scroll', closeMenu, true)\n window.addEventListener('resize', closeMenu)\n document.addEventListener('keydown', handleKey)\n\n return () => {\n document.removeEventListener('mousedown', closeMenu)\n document.removeEventListener('scroll', closeMenu, true)\n window.removeEventListener('resize', closeMenu)\n document.removeEventListener('keydown', handleKey)\n }\n }, [menu])\n\n function handleToggle(id: string) {\n const next = expandedIds.has(id) ? expandedArr.filter((e) => e !== id) : [...expandedArr, id]\n if (onExpandChange) onExpandChange(next)\n else setInternalExpanded(next)\n }\n\n function handleSelect(id: string, node: MTreeNode) {\n if (onSelect) onSelect(id, node)\n else setInternalSelected(id)\n }\n\n function handleCheck(id: string) {\n const node = nodeMap.get(id)\n if (!node || node.disabled) return\n\n const next = new Set(checkedIds)\n const isCurrentlyChecked = next.has(id)\n const subtree = [id, ...Array.from(descendants.get(id) ?? [])]\n\n if (isCurrentlyChecked) {\n for (const sid of subtree) next.delete(sid)\n } else {\n for (const sid of subtree) {\n const sNode = nodeMap.get(sid)\n if (sNode && !sNode.disabled) next.add(sid)\n }\n }\n\n let parentId = parentMap.get(id)\n\n while (parentId) {\n const parent = nodeMap.get(parentId)\n if (!parent) break\n\n const allChildrenChecked = (parent.children ?? []).every((child) => child.disabled || next.has(child.id))\n const hasEnabledChild = (parent.children ?? []).some((child) => !child.disabled)\n\n if (allChildrenChecked && hasEnabledChild) next.add(parentId)\n else next.delete(parentId)\n\n parentId = parentMap.get(parentId)\n }\n\n const nextArr = Array.from(next)\n\n if (controlledChecked === undefined) setInternalChecked(nextArr)\n onCheckedChange?.(nextArr)\n }\n\n function closeDrag() {\n setDraggedId(null)\n setDropTargetId(null)\n }\n\n function isValidDropTarget(targetNode: MTreeNode) {\n if (!draggedNode || !draggable || !onMove) return false\n if (targetNode.disabled || !isFolderNode(targetNode)) return false\n if (targetNode.id === draggedNode.id) return false\n if (descendants.get(draggedNode.id)?.has(targetNode.id)) return false\n\n return canDrop ? canDrop(draggedNode, targetNode) : true\n }\n\n function handleContextMenu(event: MouseEvent<HTMLDivElement>, node: MTreeNode) {\n if (!contextMenuItems || node.disabled) return\n\n const items = contextMenuItems(node).filter(Boolean)\n if (!items.length) return\n\n event.preventDefault()\n handleSelect(node.id, node)\n\n const pos = clampMenuPosition(event.clientX, event.clientY)\n setMenu({\n node,\n items,\n x: pos.x,\n y: pos.y,\n })\n }\n\n function handleDragStart(event: DragEvent<HTMLDivElement>, node: MTreeNode) {\n if (!draggable || node.disabled) return\n\n event.dataTransfer.effectAllowed = 'move'\n event.dataTransfer.setData('text/plain', node.id)\n setMenu(null)\n setDraggedId(node.id)\n }\n\n function handleDragOver(event: DragEvent<HTMLDivElement>, targetNode: MTreeNode) {\n if (!isValidDropTarget(targetNode)) return\n\n event.preventDefault()\n event.dataTransfer.dropEffect = 'move'\n setDropTargetId(targetNode.id)\n }\n\n function handleDrop(event: DragEvent<HTMLDivElement>, targetNode: MTreeNode) {\n event.preventDefault()\n\n if (!draggedNode || !isValidDropTarget(targetNode)) {\n closeDrag()\n return\n }\n\n onMove?.({\n draggedId: draggedNode.id,\n draggedNode,\n targetId: targetNode.id,\n targetNode,\n } satisfies MTreeViewMoveEvent)\n\n if (expandable && !expandedIds.has(targetNode.id)) {\n handleToggle(targetNode.id)\n }\n\n closeDrag()\n }\n\n return (\n <div className={cn('tree', `color-${color}`, showLines && 'lines', className)} {...rest}>\n <ul className=\"list\" role=\"tree\">\n {items.map((item) => (\n <TreeItem\n key={item.id}\n node={item}\n color={color}\n level={0}\n expandable={expandable}\n selectable={selectable}\n expandedIds={expandedIds}\n selectedId={selectedId}\n draggedId={draggedId}\n dropTargetId={dropTargetId}\n onToggle={handleToggle}\n onSelect={handleSelect}\n checkable={checkable}\n checkedIds={checkedIds}\n indeterminateIds={indeterminateIds}\n onCheck={handleCheck}\n indent={indent}\n showLines={showLines}\n fileIcons={fileIcons}\n draggable={draggable}\n canDropOnNode={isValidDropTarget}\n onContextMenu={handleContextMenu}\n onDragStart={handleDragStart}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n onDragEnd={closeDrag}\n />\n ))}\n </ul>\n {menu && (\n <MPortal>\n <div ref={menuRef} className=\"tree menu\" style={{top: menu.y, left: menu.x}} role=\"menu\">\n {menu.items.map((item) => (\n <button\n key={item.id}\n type=\"button\"\n className={cn('action', item.color, item.disabled && 'disabled')}\n role=\"menuitem\"\n disabled={item.disabled}\n onClick={() => {\n if (item.disabled) return\n onContextMenuAction?.(item.id, menu.node)\n setMenu(null)\n }}\n >\n {item.icon && <span className=\"icon\">{item.icon}</span>}\n <span>{item.label}</span>\n </button>\n ))}\n </div>\n </MPortal>\n )}\n </div>\n )\n}\n"],"mappings":"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"}
@@ -258,4 +258,4 @@ function t(t) {
258
258
  //#endregion
259
259
  export { t as default };
260
260
 
261
- //# sourceMappingURL=arduino-UeOrXakL.js.map
261
+ //# sourceMappingURL=arduino-BHobW-W2.js.map