@banzamel/mineralui 2.4.3 → 2.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (545) hide show
  1. package/README.md +1 -1
  2. package/dist/MAvatar-CvQuiGvT.cjs +2 -0
  3. package/dist/MAvatar-CvQuiGvT.cjs.map +1 -0
  4. package/dist/MAvatar-EkOBrEtS.js +73 -0
  5. package/dist/MAvatar-EkOBrEtS.js.map +1 -0
  6. package/dist/MButton-BxEky3xQ.cjs +2 -0
  7. package/dist/MButton-BxEky3xQ.cjs.map +1 -0
  8. package/dist/MButton-KELyyBw1.js +123 -0
  9. package/dist/MButton-KELyyBw1.js.map +1 -0
  10. package/dist/{MButtonGroup-BEJxXZ8u.js → MButtonGroup-DDnn8Wfy.js} +3 -3
  11. package/dist/{MButtonGroup-BEJxXZ8u.js.map → MButtonGroup-DDnn8Wfy.js.map} +1 -1
  12. package/dist/{MButtonGroup-DO1Tq3Za.cjs → MButtonGroup-Dz8Fm-oA.cjs} +2 -2
  13. package/dist/{MButtonGroup-DO1Tq3Za.cjs.map → MButtonGroup-Dz8Fm-oA.cjs.map} +1 -1
  14. package/dist/{MCard-P8OoswWM.cjs → MCard-Bqm4BjK_.cjs} +2 -2
  15. package/dist/MCard-Bqm4BjK_.cjs.map +1 -0
  16. package/dist/{MCard-BqSkGAgf.js → MCard-CqZYGaS2.js} +4 -4
  17. package/dist/MCard-CqZYGaS2.js.map +1 -0
  18. package/dist/MCheckbox-CaWgyUn5.js +72 -0
  19. package/dist/MCheckbox-CaWgyUn5.js.map +1 -0
  20. package/dist/MCheckbox-DpKJpnFF.cjs +2 -0
  21. package/dist/MCheckbox-DpKJpnFF.cjs.map +1 -0
  22. package/dist/{MConflictIllustration-znC7ijmP.js → MConflictIllustration-dwZS44ye.js} +1517 -1515
  23. package/dist/MConflictIllustration-dwZS44ye.js.map +1 -0
  24. package/dist/MConflictIllustration-vfHs-jad.cjs +2 -0
  25. package/dist/MConflictIllustration-vfHs-jad.cjs.map +1 -0
  26. package/dist/MDetailList-C3othNs3.js +127 -0
  27. package/dist/MDetailList-C3othNs3.js.map +1 -0
  28. package/dist/MDetailList-DkDHLdJ8.cjs +2 -0
  29. package/dist/MDetailList-DkDHLdJ8.cjs.map +1 -0
  30. package/dist/MDropdownMenu-C4-r7UZM.cjs +2 -0
  31. package/dist/MDropdownMenu-C4-r7UZM.cjs.map +1 -0
  32. package/dist/MDropdownMenu-Dvg9UsHB.js +219 -0
  33. package/dist/MDropdownMenu-Dvg9UsHB.js.map +1 -0
  34. package/dist/MGrid-CQqT8nHi.js +271 -0
  35. package/dist/MGrid-CQqT8nHi.js.map +1 -0
  36. package/dist/MGrid-tBsqShLG.cjs +2 -0
  37. package/dist/MGrid-tBsqShLG.cjs.map +1 -0
  38. package/dist/MHeading-DQSQ8c7L.js +21 -0
  39. package/dist/MHeading-DQSQ8c7L.js.map +1 -0
  40. package/dist/MHeading-DiGYs1FJ.cjs +2 -0
  41. package/dist/MHeading-DiGYs1FJ.cjs.map +1 -0
  42. package/dist/MInput-BeEGufZG.cjs +2 -0
  43. package/dist/MInput-BeEGufZG.cjs.map +1 -0
  44. package/dist/MInput-QnQV9L8U.js +190 -0
  45. package/dist/MInput-QnQV9L8U.js.map +1 -0
  46. package/dist/MInputCVC-CCNRAqHw.cjs +2 -0
  47. package/dist/MInputCVC-CCNRAqHw.cjs.map +1 -0
  48. package/dist/MInputCVC-IXIYZwex.js +410 -0
  49. package/dist/MInputCVC-IXIYZwex.js.map +1 -0
  50. package/dist/MInputSearch-BSIc6m2P.cjs +2 -0
  51. package/dist/MInputSearch-BSIc6m2P.cjs.map +1 -0
  52. package/dist/MInputSearch-CNuTAbYs.js +44 -0
  53. package/dist/MInputSearch-CNuTAbYs.js.map +1 -0
  54. package/dist/{MKbd-BR1GX5oK.cjs → MKbd-CnW3NUIu.cjs} +2 -2
  55. package/dist/{MKbd-BR1GX5oK.cjs.map → MKbd-CnW3NUIu.cjs.map} +1 -1
  56. package/dist/{MKbd-COb7oh_k.js → MKbd-DjfGyajR.js} +2 -2
  57. package/dist/{MKbd-COb7oh_k.js.map → MKbd-DjfGyajR.js.map} +1 -1
  58. package/dist/MLink-C6uwA6db.cjs +2 -0
  59. package/dist/MLink-C6uwA6db.cjs.map +1 -0
  60. package/dist/MLink-ixg0xFFI.js +31 -0
  61. package/dist/MLink-ixg0xFFI.js.map +1 -0
  62. package/dist/MLoader-CViA3zBo.js +44 -0
  63. package/dist/MLoader-CViA3zBo.js.map +1 -0
  64. package/dist/MLoader-DUOoOoNE.cjs +2 -0
  65. package/dist/MLoader-DUOoOoNE.cjs.map +1 -0
  66. package/dist/MPagination-BTGenxWW.js +122 -0
  67. package/dist/MPagination-BTGenxWW.js.map +1 -0
  68. package/dist/MPagination-DitmdtCc.cjs +2 -0
  69. package/dist/MPagination-DitmdtCc.cjs.map +1 -0
  70. package/dist/MPopover-CBDbUOW6.js +183 -0
  71. package/dist/MPopover-CBDbUOW6.js.map +1 -0
  72. package/dist/MPopover-ZeoU9hb5.cjs +2 -0
  73. package/dist/MPopover-ZeoU9hb5.cjs.map +1 -0
  74. package/dist/{MSimpleGrid-Ui8cI0ho.js → MSimpleGrid-C_QvLmck.js} +3 -3
  75. package/dist/MSimpleGrid-C_QvLmck.js.map +1 -0
  76. package/dist/MSimpleGrid-wgvjnxwM.cjs +2 -0
  77. package/dist/MSimpleGrid-wgvjnxwM.cjs.map +1 -0
  78. package/dist/{MSkeleton-Dhu-loDO.js → MSkeleton-BpcpBBJq.js} +12 -10
  79. package/dist/MSkeleton-BpcpBBJq.js.map +1 -0
  80. package/dist/MSkeleton-DuAN8Vcv.cjs +2 -0
  81. package/dist/MSkeleton-DuAN8Vcv.cjs.map +1 -0
  82. package/dist/MSlider-CLASUc2H.js +134 -0
  83. package/dist/MSlider-CLASUc2H.js.map +1 -0
  84. package/dist/MSlider-hONQBulE.cjs +2 -0
  85. package/dist/MSlider-hONQBulE.cjs.map +1 -0
  86. package/dist/MStack-BwAFeGGg.js +39 -0
  87. package/dist/MStack-BwAFeGGg.js.map +1 -0
  88. package/dist/MStack-CGII4A-q.cjs +2 -0
  89. package/dist/MStack-CGII4A-q.cjs.map +1 -0
  90. package/dist/MSubText-BeZk-fhz.js +17 -0
  91. package/dist/MSubText-BeZk-fhz.js.map +1 -0
  92. package/dist/MSubText-Dl1PfToZ.cjs +2 -0
  93. package/dist/MSubText-Dl1PfToZ.cjs.map +1 -0
  94. package/dist/MSurface-B_QnRLr5.js +74 -0
  95. package/dist/MSurface-B_QnRLr5.js.map +1 -0
  96. package/dist/MSurface-BrFo-JMJ.cjs +2 -0
  97. package/dist/MSurface-BrFo-JMJ.cjs.map +1 -0
  98. package/dist/MTag-BZrKN_DS.js +41 -0
  99. package/dist/MTag-BZrKN_DS.js.map +1 -0
  100. package/dist/MTag-DCE1vRJM.cjs +2 -0
  101. package/dist/MTag-DCE1vRJM.cjs.map +1 -0
  102. package/dist/MText-BUWQPoBM.js +45 -0
  103. package/dist/MText-BUWQPoBM.js.map +1 -0
  104. package/dist/MText-nsvLFsSv.cjs +2 -0
  105. package/dist/MText-nsvLFsSv.cjs.map +1 -0
  106. package/dist/MTooltip-BRSPJ3RY.js +100 -0
  107. package/dist/MTooltip-BRSPJ3RY.js.map +1 -0
  108. package/dist/MTooltip-Cj2Fxmzc.cjs +2 -0
  109. package/dist/MTooltip-Cj2Fxmzc.cjs.map +1 -0
  110. package/dist/MTreeView-BWCTlsU-.cjs +2 -0
  111. package/dist/MTreeView-BWCTlsU-.cjs.map +1 -0
  112. package/dist/MTreeView-CWcMwE-Z.js +554 -0
  113. package/dist/MTreeView-CWcMwE-Z.js.map +1 -0
  114. package/dist/calendar-2yhnCkGW.cjs +2 -0
  115. package/dist/calendar-2yhnCkGW.cjs.map +1 -0
  116. package/dist/calendar-DcNYDTVb.js +195 -0
  117. package/dist/calendar-DcNYDTVb.js.map +1 -0
  118. package/dist/calendar.cjs +1 -1
  119. package/dist/calendar.js +1 -1
  120. package/dist/{calendarDates-M_Dawj0j.js → calendarDates-Bpw_G_QR.js} +30 -19
  121. package/dist/calendarDates-Bpw_G_QR.js.map +1 -0
  122. package/dist/calendarDates-Cg0nm69Y.cjs +2 -0
  123. package/dist/calendarDates-Cg0nm69Y.cjs.map +1 -0
  124. package/dist/cards-Bp886TRb.cjs +2 -0
  125. package/dist/cards-Bp886TRb.cjs.map +1 -0
  126. package/dist/cards-BvER6Gx0.js +1277 -0
  127. package/dist/cards-BvER6Gx0.js.map +1 -0
  128. package/dist/cards.cjs +1 -1
  129. package/dist/cards.js +2 -2
  130. package/dist/{cn-YER3QsV1.js → cn-CUSXNnjF.js} +1 -1
  131. package/dist/{cn-YER3QsV1.js.map → cn-CUSXNnjF.js.map} +1 -1
  132. package/dist/{cn-CU5TNITO.cjs → cn-DYFxgzi2.cjs} +1 -1
  133. package/dist/{cn-CU5TNITO.cjs.map → cn-DYFxgzi2.cjs.map} +1 -1
  134. package/dist/components/cards/MCardDaySchedule/MCardDaySchedule.d.ts +1 -1
  135. package/dist/components/cards/MCardDocumentTree/MCardDocumentTree.d.ts +1 -1
  136. package/dist/components/cards/MCardGrid/MCardGrid.d.ts +1 -1
  137. package/dist/components/cards/MCardPayment/MCardPayment.d.ts +1 -1
  138. package/dist/components/cards/MCardPayment/MCardPayment.types.d.ts +4 -0
  139. package/dist/components/cards/MCardPaymentMethod/MCardPaymentMethod.d.ts +1 -1
  140. package/dist/components/cards/MStatCard/MStatCard.d.ts +1 -1
  141. package/dist/components/controls/MCheckbox/MCheckbox.types.d.ts +6 -0
  142. package/dist/components/controls/MLoadMore/MLoadMore.d.ts +1 -1
  143. package/dist/components/controls/MSlider/MSlider.d.ts +1 -1
  144. package/dist/components/controls/MSlider/MSlider.types.d.ts +5 -0
  145. package/dist/components/data/MTreeView/MTreeView.d.ts +1 -1
  146. package/dist/components/data/MTreeView/MTreeView.types.d.ts +6 -0
  147. package/dist/components/data/MWeekGrid/MWeekGrid.d.ts +1 -1
  148. package/dist/components/data/MWeekGrid/MWeekGrid.types.d.ts +9 -3
  149. package/dist/components/display/MCodeBlock/MCodeBlock.d.ts +1 -1
  150. package/dist/components/dropdowns/MAutocomplete/MAutocomplete.d.ts +1 -1
  151. package/dist/components/dropdowns/MAutocomplete/MAutocomplete.types.d.ts +8 -2
  152. package/dist/components/dropdowns/MSelect/MSelect.d.ts +1 -1
  153. package/dist/components/dropdowns/shared/TimeColumnListbox.d.ts +20 -0
  154. package/dist/components/feedback/MAlert/MAlert.d.ts +1 -1
  155. package/dist/components/feedback/MBadge/MBadge.d.ts +1 -1
  156. package/dist/components/feedback/MBanner/MBanner.d.ts +1 -1
  157. package/dist/components/feedback/MLoader/MLoader.d.ts +1 -1
  158. package/dist/components/feedback/MSpinner/MSpinner.d.ts +1 -1
  159. package/dist/components/feedback/MTag/MTag.d.ts +1 -1
  160. package/dist/components/inputs/MInput/MInput.types.d.ts +6 -1
  161. package/dist/components/inputs/MInput/useFormatCaret.d.ts +8 -0
  162. package/dist/components/layout/MCanvasGrid/MCanvasGrid.types.d.ts +5 -0
  163. package/dist/components/layout/MContainer/MContainer.d.ts +1 -1
  164. package/dist/components/layout/MDivider/MDivider.d.ts +1 -1
  165. package/dist/components/layout/MFooter/MFooter.d.ts +1 -1
  166. package/dist/components/layout/MHeader/MHeader.d.ts +1 -1
  167. package/dist/components/layout/MInline/MInline.d.ts +1 -1
  168. package/dist/components/layout/MNavbar/MNavbar.d.ts +1 -1
  169. package/dist/components/layout/MNavbar/MNavbar.types.d.ts +2 -0
  170. package/dist/components/layout/MSection/MSection.d.ts +1 -1
  171. package/dist/components/layout/MStack/MStack.d.ts +1 -1
  172. package/dist/components/layout/MStickyPanel/MStickyPanel.types.d.ts +4 -0
  173. package/dist/components/layout/MSurface/MSurface.d.ts +1 -1
  174. package/dist/components/media/MAvatar/MAvatar.d.ts +1 -1
  175. package/dist/components/media/MAvatar/MAvatar.types.d.ts +10 -0
  176. package/dist/components/media/MCarousel/MCarousel.d.ts +1 -1
  177. package/dist/components/media/MImage/MImage.d.ts +1 -1
  178. package/dist/components/media/carouselA11y.d.ts +9 -0
  179. package/dist/components/overlays/MCommandPalette/MCommandPalette.d.ts +1 -1
  180. package/dist/components/overlays/MDropdownMenu/MDropdownMenu.d.ts +4 -2
  181. package/dist/components/overlays/MDropdownMenu/MDropdownMenu.types.d.ts +3 -1
  182. package/dist/components/overlays/MPopconfirm/MPopconfirm.d.ts +1 -1
  183. package/dist/components/overlays/scrollLock.d.ts +14 -0
  184. package/dist/components/primitives/MPopover/MPopover.d.ts +1 -1
  185. package/dist/components/primitives/MPopover/MPopover.types.d.ts +32 -1
  186. package/dist/components/primitives/MPopover/popoverStack.d.ts +6 -0
  187. package/dist/components/typography/MHeading/MHeading.d.ts +2 -3
  188. package/dist/components/typography/MSubText/MSubText.d.ts +1 -1
  189. package/dist/components/typography/MText/MText.d.ts +1 -1
  190. package/dist/controls-B4Dxaab4.js +491 -0
  191. package/dist/controls-B4Dxaab4.js.map +1 -0
  192. package/dist/controls-CyXEIOXD.cjs +2 -0
  193. package/dist/controls-CyXEIOXD.cjs.map +1 -0
  194. package/dist/controls.cjs +1 -1
  195. package/dist/controls.js +5 -5
  196. package/dist/creditCards-Bo2mrc53.cjs +2 -0
  197. package/dist/creditCards-Bo2mrc53.cjs.map +1 -0
  198. package/dist/{creditCards-D_iWmtG6.js → creditCards-DmDOyvcw.js} +20 -31
  199. package/dist/creditCards-DmDOyvcw.js.map +1 -0
  200. package/dist/data-BM3KG8oN.cjs +2 -0
  201. package/dist/data-BM3KG8oN.cjs.map +1 -0
  202. package/dist/data-qnR8OBmj.js +808 -0
  203. package/dist/data-qnR8OBmj.js.map +1 -0
  204. package/dist/data.cjs +1 -1
  205. package/dist/data.js +2 -2
  206. package/dist/{dateUtils-CUY6CRCf.js → dateUtils-B-ToNZq_.js} +5 -6
  207. package/dist/dateUtils-B-ToNZq_.js.map +1 -0
  208. package/dist/dateUtils-z2L7ZaxA.cjs +2 -0
  209. package/dist/dateUtils-z2L7ZaxA.cjs.map +1 -0
  210. package/dist/display-BLMOBofj.cjs +3 -0
  211. package/dist/display-BLMOBofj.cjs.map +1 -0
  212. package/dist/display-Dlb79lkA.js +968 -0
  213. package/dist/display-Dlb79lkA.js.map +1 -0
  214. package/dist/display.cjs +1 -1
  215. package/dist/display.js +2 -2
  216. package/dist/dropdowns-2_7VMEDo.js +2009 -0
  217. package/dist/dropdowns-2_7VMEDo.js.map +1 -0
  218. package/dist/dropdowns-DN7j8J-V.cjs +2 -0
  219. package/dist/dropdowns-DN7j8J-V.cjs.map +1 -0
  220. package/dist/dropdowns.cjs +1 -1
  221. package/dist/dropdowns.js +1 -1
  222. package/dist/feedback-CECayytY.js +335 -0
  223. package/dist/feedback-CECayytY.js.map +1 -0
  224. package/dist/feedback-paV8Ls-h.cjs +2 -0
  225. package/dist/feedback-paV8Ls-h.cjs.map +1 -0
  226. package/dist/feedback.cjs +1 -1
  227. package/dist/feedback.js +5 -5
  228. package/dist/form-Br56h5EF.cjs +2 -0
  229. package/dist/form-Br56h5EF.cjs.map +1 -0
  230. package/dist/form-CJmMZgsH.js +165 -0
  231. package/dist/form-CJmMZgsH.js.map +1 -0
  232. package/dist/form.cjs +1 -1
  233. package/dist/form.js +1 -1
  234. package/dist/{formatters-CNjg_h7-.cjs → formatters-CauWlsnM.cjs} +1 -1
  235. package/dist/{formatters-CNjg_h7-.cjs.map → formatters-CauWlsnM.cjs.map} +1 -1
  236. package/dist/{formatters-T0vvjMtB.js → formatters-Doqdu_w1.js} +1 -1
  237. package/dist/{formatters-T0vvjMtB.js.map → formatters-Doqdu_w1.js.map} +1 -1
  238. package/dist/frameworkTexts-CaqdiKHW.cjs +2 -0
  239. package/dist/frameworkTexts-CaqdiKHW.cjs.map +1 -0
  240. package/dist/frameworkTexts-o43FqY1A.js +505 -0
  241. package/dist/frameworkTexts-o43FqY1A.js.map +1 -0
  242. package/dist/i18n/MI18nProvider.d.ts +6 -1
  243. package/dist/i18n/frameworkTexts.d.ts +511 -0
  244. package/dist/i18n/index.d.ts +1 -0
  245. package/dist/i18n.cjs +1 -1
  246. package/dist/i18n.js +2 -2
  247. package/dist/icons-Bp8bB9TP.cjs +2 -0
  248. package/dist/icons-Bp8bB9TP.cjs.map +1 -0
  249. package/dist/{icons-CBMl-kOM.js → icons-IqEBmGh3.js} +1223 -1220
  250. package/dist/icons-IqEBmGh3.js.map +1 -0
  251. package/dist/icons.cjs +1 -1
  252. package/dist/icons.js +1 -1
  253. package/dist/illustrations.cjs +1 -1
  254. package/dist/illustrations.js +1 -1
  255. package/dist/index.cjs +1 -1
  256. package/dist/index.d.ts +4 -2
  257. package/dist/index.js +56 -56
  258. package/dist/inputs-C0BJzlA-.js +1923 -0
  259. package/dist/inputs-C0BJzlA-.js.map +1 -0
  260. package/dist/inputs-CvNBBLFA.cjs +2 -0
  261. package/dist/inputs-CvNBBLFA.cjs.map +1 -0
  262. package/dist/inputs.cjs +1 -1
  263. package/dist/inputs.js +4 -4
  264. package/dist/layout-BSFqGXLZ.js +1101 -0
  265. package/dist/layout-BSFqGXLZ.js.map +1 -0
  266. package/dist/layout-MKqvUkPv.cjs +2 -0
  267. package/dist/layout-MKqvUkPv.cjs.map +1 -0
  268. package/dist/layout.cjs +1 -1
  269. package/dist/layout.js +6 -6
  270. package/dist/{layoutProps-Ck4VtGm9.cjs → layoutProps-B8y2XwHy.cjs} +1 -1
  271. package/dist/{layoutProps-Ck4VtGm9.cjs.map → layoutProps-B8y2XwHy.cjs.map} +1 -1
  272. package/dist/{layoutProps-Cl6d1KmH.js → layoutProps-CE5-ghKw.js} +1 -1
  273. package/dist/{layoutProps-Cl6d1KmH.js.map → layoutProps-CE5-ghKw.js.map} +1 -1
  274. package/dist/{licensing-f5KYVz7D.js → licensing-BKmoAdfr.js} +5 -4
  275. package/dist/licensing-BKmoAdfr.js.map +1 -0
  276. package/dist/licensing-DVgjkw-s.cjs +2 -0
  277. package/dist/licensing-DVgjkw-s.cjs.map +1 -0
  278. package/dist/media-fiasAbBv.js +485 -0
  279. package/dist/media-fiasAbBv.js.map +1 -0
  280. package/dist/media-tr1s386v.cjs +2 -0
  281. package/dist/media-tr1s386v.cjs.map +1 -0
  282. package/dist/media.cjs +1 -1
  283. package/dist/media.js +2 -2
  284. package/dist/overlays-Df-NpmkW.cjs +2 -0
  285. package/dist/overlays-Df-NpmkW.cjs.map +1 -0
  286. package/dist/overlays-W0WW3fn7.js +607 -0
  287. package/dist/overlays-W0WW3fn7.js.map +1 -0
  288. package/dist/overlays.cjs +1 -1
  289. package/dist/overlays.js +3 -3
  290. package/dist/primitives.cjs +1 -1
  291. package/dist/primitives.js +2 -2
  292. package/dist/radioGroupKeys-Bm-Qeh8G.js +28 -0
  293. package/dist/radioGroupKeys-Bm-Qeh8G.js.map +1 -0
  294. package/dist/radioGroupKeys-COL8uXbH.cjs +2 -0
  295. package/dist/radioGroupKeys-COL8uXbH.cjs.map +1 -0
  296. package/dist/{relativeTime-Cr-NVzij.js → relativeTime-BqCuaBqb.js} +1 -1
  297. package/dist/{relativeTime-Cr-NVzij.js.map → relativeTime-BqCuaBqb.js.map} +1 -1
  298. package/dist/{relativeTime-DgYBUaVm.cjs → relativeTime-DUbW4O44.cjs} +1 -1
  299. package/dist/{relativeTime-DgYBUaVm.cjs.map → relativeTime-DUbW4O44.cjs.map} +1 -1
  300. package/dist/scrollLock-C9P9o6wH.cjs +2 -0
  301. package/dist/scrollLock-C9P9o6wH.cjs.map +1 -0
  302. package/dist/scrollLock-D27VmgPV.js +14 -0
  303. package/dist/scrollLock-D27VmgPV.js.map +1 -0
  304. package/dist/style-runtime.cjs +1 -1
  305. package/dist/style-runtime.js +1 -1
  306. package/dist/styles.css +1 -1
  307. package/dist/theme/MThemeProvider.d.ts +18 -1
  308. package/dist/theme/index.d.ts +2 -2
  309. package/dist/{theme-DAOU1aPs.js → theme-B_juOenJ.js} +71 -61
  310. package/dist/theme-B_juOenJ.js.map +1 -0
  311. package/dist/theme-ByPZH0dh.cjs +2 -0
  312. package/dist/theme-ByPZH0dh.cjs.map +1 -0
  313. package/dist/theme.cjs +1 -1
  314. package/dist/theme.js +2 -2
  315. package/dist/{typography-C806GYT4.js → typography-DNcB8dOy.js} +3 -3
  316. package/dist/{typography-C806GYT4.js.map → typography-DNcB8dOy.js.map} +1 -1
  317. package/dist/{typography-4v01oNWx.cjs → typography-I7aeG8pH.cjs} +2 -2
  318. package/dist/{typography-4v01oNWx.cjs.map → typography-I7aeG8pH.cjs.map} +1 -1
  319. package/dist/typography.cjs +1 -1
  320. package/dist/typography.js +6 -6
  321. package/dist/useGhostText-CKsb8Ufa.js +240 -0
  322. package/dist/useGhostText-CKsb8Ufa.js.map +1 -0
  323. package/dist/useGhostText-DO-tfxS0.cjs +2 -0
  324. package/dist/useGhostText-DO-tfxS0.cjs.map +1 -0
  325. package/dist/useModalLayer-CpOPSDbf.js +128 -0
  326. package/dist/useModalLayer-CpOPSDbf.js.map +1 -0
  327. package/dist/useModalLayer-Cyt93Prs.cjs +2 -0
  328. package/dist/useModalLayer-Cyt93Prs.cjs.map +1 -0
  329. package/dist/utils/calendarDates.d.ts +5 -0
  330. package/dist/utils/radioGroupKeys.d.ts +9 -0
  331. package/dist/utils/useDateGridNav.d.ts +39 -0
  332. package/dist/utils/useGhostText.d.ts +2 -1
  333. package/dist/utils/useKeyboardNav.d.ts +51 -5
  334. package/dist/utils/useModalLayer.d.ts +4 -0
  335. package/dist/utils/useRovingToolbar.d.ts +26 -0
  336. package/dist/utils/validationMessages.d.ts +15 -0
  337. package/dist/utils.cjs +1 -1
  338. package/dist/utils.entry.d.ts +3 -1
  339. package/dist/utils.js +11 -11
  340. package/dist/validationMessages-BFimXxlT.js +23 -0
  341. package/dist/validationMessages-BFimXxlT.js.map +1 -0
  342. package/dist/validationMessages-iHu7apWr.cjs +2 -0
  343. package/dist/validationMessages-iHu7apWr.cjs.map +1 -0
  344. package/dist/validators-SZmLxnir.cjs +2 -0
  345. package/dist/validators-SZmLxnir.cjs.map +1 -0
  346. package/dist/{validators-DVYOtFnw.js → validators-ULebNme2.js} +107 -106
  347. package/dist/validators-ULebNme2.js.map +1 -0
  348. package/package.json +1 -1
  349. package/dist/MAvatar-DHNB3829.cjs +0 -2
  350. package/dist/MAvatar-DHNB3829.cjs.map +0 -1
  351. package/dist/MAvatar-GeRL-CNO.js +0 -63
  352. package/dist/MAvatar-GeRL-CNO.js.map +0 -1
  353. package/dist/MButton-CEwo8lUB.js +0 -115
  354. package/dist/MButton-CEwo8lUB.js.map +0 -1
  355. package/dist/MButton-CnAr77Za.cjs +0 -2
  356. package/dist/MButton-CnAr77Za.cjs.map +0 -1
  357. package/dist/MCard-BqSkGAgf.js.map +0 -1
  358. package/dist/MCard-P8OoswWM.cjs.map +0 -1
  359. package/dist/MCheckbox-BxFBADcE.js +0 -59
  360. package/dist/MCheckbox-BxFBADcE.js.map +0 -1
  361. package/dist/MCheckbox-DozwF2ai.cjs +0 -2
  362. package/dist/MCheckbox-DozwF2ai.cjs.map +0 -1
  363. package/dist/MConflictIllustration-2QL-BHYv.cjs +0 -2
  364. package/dist/MConflictIllustration-2QL-BHYv.cjs.map +0 -1
  365. package/dist/MConflictIllustration-znC7ijmP.js.map +0 -1
  366. package/dist/MDetailList-CThQvoyf.cjs +0 -2
  367. package/dist/MDetailList-CThQvoyf.cjs.map +0 -1
  368. package/dist/MDetailList-Cx9H81xT.js +0 -98
  369. package/dist/MDetailList-Cx9H81xT.js.map +0 -1
  370. package/dist/MDropdownMenu-DnKcCyW6.cjs +0 -2
  371. package/dist/MDropdownMenu-DnKcCyW6.cjs.map +0 -1
  372. package/dist/MDropdownMenu-DxbKN7Ui.js +0 -172
  373. package/dist/MDropdownMenu-DxbKN7Ui.js.map +0 -1
  374. package/dist/MGrid-BkRSGN2t.cjs +0 -2
  375. package/dist/MGrid-BkRSGN2t.cjs.map +0 -1
  376. package/dist/MGrid-CIz-2i6X.js +0 -265
  377. package/dist/MGrid-CIz-2i6X.js.map +0 -1
  378. package/dist/MHeading-AYQ8_GFP.cjs +0 -2
  379. package/dist/MHeading-AYQ8_GFP.cjs.map +0 -1
  380. package/dist/MHeading-DcGxUMwC.js +0 -21
  381. package/dist/MHeading-DcGxUMwC.js.map +0 -1
  382. package/dist/MI18nProvider-CqAwaswx.cjs +0 -2
  383. package/dist/MI18nProvider-CqAwaswx.cjs.map +0 -1
  384. package/dist/MI18nProvider-VH14CI8u.js +0 -72
  385. package/dist/MI18nProvider-VH14CI8u.js.map +0 -1
  386. package/dist/MInput-BYj2BdUe.cjs +0 -2
  387. package/dist/MInput-BYj2BdUe.cjs.map +0 -1
  388. package/dist/MInput-nodE-CZF.js +0 -188
  389. package/dist/MInput-nodE-CZF.js.map +0 -1
  390. package/dist/MInputCVC-9XWryaTz.cjs +0 -2
  391. package/dist/MInputCVC-9XWryaTz.cjs.map +0 -1
  392. package/dist/MInputCVC-CrDTaUXm.js +0 -321
  393. package/dist/MInputCVC-CrDTaUXm.js.map +0 -1
  394. package/dist/MInputSearch-BMgCHjFk.js +0 -43
  395. package/dist/MInputSearch-BMgCHjFk.js.map +0 -1
  396. package/dist/MInputSearch-BiVI1jNc.cjs +0 -2
  397. package/dist/MInputSearch-BiVI1jNc.cjs.map +0 -1
  398. package/dist/MLink-CAl6N6_z.js +0 -31
  399. package/dist/MLink-CAl6N6_z.js.map +0 -1
  400. package/dist/MLink-Dk_ReE6i.cjs +0 -2
  401. package/dist/MLink-Dk_ReE6i.cjs.map +0 -1
  402. package/dist/MLoader-CYp0OJU_.js +0 -41
  403. package/dist/MLoader-CYp0OJU_.js.map +0 -1
  404. package/dist/MLoader-DvmFle31.cjs +0 -2
  405. package/dist/MLoader-DvmFle31.cjs.map +0 -1
  406. package/dist/MPagination-E7IixIeo.js +0 -113
  407. package/dist/MPagination-E7IixIeo.js.map +0 -1
  408. package/dist/MPagination-reDU9xTW.cjs +0 -2
  409. package/dist/MPagination-reDU9xTW.cjs.map +0 -1
  410. package/dist/MPopover-8gYD3Ogq.js +0 -118
  411. package/dist/MPopover-8gYD3Ogq.js.map +0 -1
  412. package/dist/MPopover-B3npyAkL.cjs +0 -2
  413. package/dist/MPopover-B3npyAkL.cjs.map +0 -1
  414. package/dist/MPortal-Ba2Sxset.js +0 -10
  415. package/dist/MPortal-Ba2Sxset.js.map +0 -1
  416. package/dist/MPortal-CuBXhhl_.cjs +0 -2
  417. package/dist/MPortal-CuBXhhl_.cjs.map +0 -1
  418. package/dist/MSimpleGrid-BchGYPMi.cjs +0 -2
  419. package/dist/MSimpleGrid-BchGYPMi.cjs.map +0 -1
  420. package/dist/MSimpleGrid-Ui8cI0ho.js.map +0 -1
  421. package/dist/MSkeleton-DPa_G_2X.cjs +0 -2
  422. package/dist/MSkeleton-DPa_G_2X.cjs.map +0 -1
  423. package/dist/MSkeleton-Dhu-loDO.js.map +0 -1
  424. package/dist/MSlider-BRjhyBSc.js +0 -75
  425. package/dist/MSlider-BRjhyBSc.js.map +0 -1
  426. package/dist/MSlider-w5214a-W.cjs +0 -2
  427. package/dist/MSlider-w5214a-W.cjs.map +0 -1
  428. package/dist/MStack-Dt-rWvg3.js +0 -39
  429. package/dist/MStack-Dt-rWvg3.js.map +0 -1
  430. package/dist/MStack-nc6Y_9K3.cjs +0 -2
  431. package/dist/MStack-nc6Y_9K3.cjs.map +0 -1
  432. package/dist/MSubText-B0tXiuAp.js +0 -17
  433. package/dist/MSubText-B0tXiuAp.js.map +0 -1
  434. package/dist/MSubText-C6v6Exa2.cjs +0 -2
  435. package/dist/MSubText-C6v6Exa2.cjs.map +0 -1
  436. package/dist/MSurface-BjE-mL1L.cjs +0 -2
  437. package/dist/MSurface-BjE-mL1L.cjs.map +0 -1
  438. package/dist/MSurface-CpDJCdb5.js +0 -74
  439. package/dist/MSurface-CpDJCdb5.js.map +0 -1
  440. package/dist/MTag-BgOxiahL.cjs +0 -2
  441. package/dist/MTag-BgOxiahL.cjs.map +0 -1
  442. package/dist/MTag-cw3cIGHX.js +0 -41
  443. package/dist/MTag-cw3cIGHX.js.map +0 -1
  444. package/dist/MText-BDI4mdw8.cjs +0 -2
  445. package/dist/MText-BDI4mdw8.cjs.map +0 -1
  446. package/dist/MText-DhbAjtUE.js +0 -45
  447. package/dist/MText-DhbAjtUE.js.map +0 -1
  448. package/dist/MTooltip-BAgHlv5I.cjs +0 -2
  449. package/dist/MTooltip-BAgHlv5I.cjs.map +0 -1
  450. package/dist/MTooltip-CJxvlkOX.js +0 -92
  451. package/dist/MTooltip-CJxvlkOX.js.map +0 -1
  452. package/dist/MTreeView-DsBnYQMT.js +0 -315
  453. package/dist/MTreeView-DsBnYQMT.js.map +0 -1
  454. package/dist/MTreeView-LiJ5o-zy.cjs +0 -2
  455. package/dist/MTreeView-LiJ5o-zy.cjs.map +0 -1
  456. package/dist/calendar-Bq6NMNnS.js +0 -193
  457. package/dist/calendar-Bq6NMNnS.js.map +0 -1
  458. package/dist/calendar-C57BH8Nd.cjs +0 -2
  459. package/dist/calendar-C57BH8Nd.cjs.map +0 -1
  460. package/dist/calendarDates-M_Dawj0j.js.map +0 -1
  461. package/dist/calendarDates-qm047RW2.cjs +0 -2
  462. package/dist/calendarDates-qm047RW2.cjs.map +0 -1
  463. package/dist/cards-D4xJVd4q.js +0 -1227
  464. package/dist/cards-D4xJVd4q.js.map +0 -1
  465. package/dist/cards-Du6dbZSQ.cjs +0 -2
  466. package/dist/cards-Du6dbZSQ.cjs.map +0 -1
  467. package/dist/controls-BKoc_yel.js +0 -475
  468. package/dist/controls-BKoc_yel.js.map +0 -1
  469. package/dist/controls-Ck-PMt__.cjs +0 -2
  470. package/dist/controls-Ck-PMt__.cjs.map +0 -1
  471. package/dist/creditCards-D_HwRUBz.cjs +0 -2
  472. package/dist/creditCards-D_HwRUBz.cjs.map +0 -1
  473. package/dist/creditCards-D_iWmtG6.js.map +0 -1
  474. package/dist/data-CdQximqm.js +0 -689
  475. package/dist/data-CdQximqm.js.map +0 -1
  476. package/dist/data-PS4ygCyj.cjs +0 -2
  477. package/dist/data-PS4ygCyj.cjs.map +0 -1
  478. package/dist/dateUtils-CUY6CRCf.js.map +0 -1
  479. package/dist/dateUtils-Dq1vaA-D.cjs +0 -2
  480. package/dist/dateUtils-Dq1vaA-D.cjs.map +0 -1
  481. package/dist/display-YC1fVpXA.js +0 -782
  482. package/dist/display-YC1fVpXA.js.map +0 -1
  483. package/dist/display-slIo1bQI.cjs +0 -3
  484. package/dist/display-slIo1bQI.cjs.map +0 -1
  485. package/dist/dropdowns-DFbUoZ8Q.cjs +0 -2
  486. package/dist/dropdowns-DFbUoZ8Q.cjs.map +0 -1
  487. package/dist/dropdowns-nW3MY5XG.js +0 -1715
  488. package/dist/dropdowns-nW3MY5XG.js.map +0 -1
  489. package/dist/feedback-6MNb2Xyk.cjs +0 -2
  490. package/dist/feedback-6MNb2Xyk.cjs.map +0 -1
  491. package/dist/feedback-CPwJaQHY.js +0 -259
  492. package/dist/feedback-CPwJaQHY.js.map +0 -1
  493. package/dist/form-CMsZo6Dm.cjs +0 -2
  494. package/dist/form-CMsZo6Dm.cjs.map +0 -1
  495. package/dist/form-WU6DcQGD.js +0 -164
  496. package/dist/form-WU6DcQGD.js.map +0 -1
  497. package/dist/frameworkTexts-BSXUtXOp.cjs +0 -2
  498. package/dist/frameworkTexts-BSXUtXOp.cjs.map +0 -1
  499. package/dist/frameworkTexts-DP5RUl19.js +0 -131
  500. package/dist/frameworkTexts-DP5RUl19.js.map +0 -1
  501. package/dist/icons-CBMl-kOM.js.map +0 -1
  502. package/dist/icons-D3n9-919.cjs +0 -2
  503. package/dist/icons-D3n9-919.cjs.map +0 -1
  504. package/dist/inputs-B7rGMLMr.js +0 -1753
  505. package/dist/inputs-B7rGMLMr.js.map +0 -1
  506. package/dist/inputs-BiN62hgH.cjs +0 -2
  507. package/dist/inputs-BiN62hgH.cjs.map +0 -1
  508. package/dist/layout-BMggJ_qO.cjs +0 -2
  509. package/dist/layout-BMggJ_qO.cjs.map +0 -1
  510. package/dist/layout-DBYHyCTr.js +0 -883
  511. package/dist/layout-DBYHyCTr.js.map +0 -1
  512. package/dist/licensing-Be3g-PJt.cjs +0 -2
  513. package/dist/licensing-Be3g-PJt.cjs.map +0 -1
  514. package/dist/licensing-f5KYVz7D.js.map +0 -1
  515. package/dist/media-BPzMgzqE.js +0 -405
  516. package/dist/media-BPzMgzqE.js.map +0 -1
  517. package/dist/media-D63hxCAJ.cjs +0 -2
  518. package/dist/media-D63hxCAJ.cjs.map +0 -1
  519. package/dist/overlays-CCeYD6hT.js +0 -555
  520. package/dist/overlays-CCeYD6hT.js.map +0 -1
  521. package/dist/overlays-CsRN5OG8.cjs +0 -2
  522. package/dist/overlays-CsRN5OG8.cjs.map +0 -1
  523. package/dist/popoverStack--0r2oJCD.js +0 -44
  524. package/dist/popoverStack--0r2oJCD.js.map +0 -1
  525. package/dist/popoverStack-BmMk-VZJ.cjs +0 -2
  526. package/dist/popoverStack-BmMk-VZJ.cjs.map +0 -1
  527. package/dist/theme-CJuqObWL.cjs +0 -2
  528. package/dist/theme-CJuqObWL.cjs.map +0 -1
  529. package/dist/theme-DAOU1aPs.js.map +0 -1
  530. package/dist/useGhostText-DG0bzcao.js +0 -68
  531. package/dist/useGhostText-DG0bzcao.js.map +0 -1
  532. package/dist/useGhostText-mibV4s1-.cjs +0 -2
  533. package/dist/useGhostText-mibV4s1-.cjs.map +0 -1
  534. package/dist/useKeyboardNav-CCUoRMgm.cjs +0 -2
  535. package/dist/useKeyboardNav-CCUoRMgm.cjs.map +0 -1
  536. package/dist/useKeyboardNav-iEXOdEMB.js +0 -43
  537. package/dist/useKeyboardNav-iEXOdEMB.js.map +0 -1
  538. package/dist/useModalLayer-Bf4TcEz-.js +0 -58
  539. package/dist/useModalLayer-Bf4TcEz-.js.map +0 -1
  540. package/dist/useModalLayer-DxYhhgRO.cjs +0 -2
  541. package/dist/useModalLayer-DxYhhgRO.cjs.map +0 -1
  542. package/dist/utils/proActivationWarning.d.ts +0 -7
  543. package/dist/validators-B6yWdsu2.cjs +0 -2
  544. package/dist/validators-B6yWdsu2.cjs.map +0 -1
  545. package/dist/validators-DVYOtFnw.js.map +0 -1
@@ -0,0 +1,100 @@
1
+ import { t as e } from "./cn-CUSXNnjF.js";
2
+ import { c as t } from "./useModalLayer-CpOPSDbf.js";
3
+ import { Fragment as n, cloneElement as r, isValidElement as i, useCallback as a, useEffect as o, useId as s, useLayoutEffect as c, useRef as l, useState as u } from "react";
4
+ import { jsx as d, jsxs as f } from "react/jsx-runtime";
5
+ //#region src/components/overlays/MTooltip/MTooltip.tsx
6
+ var p = 8, m = 120, h = {
7
+ top: "bottom",
8
+ bottom: "top",
9
+ left: "right",
10
+ right: "left"
11
+ };
12
+ function g(e, t, n) {
13
+ switch (n) {
14
+ case "bottom": return {
15
+ top: e.bottom + 6,
16
+ left: e.left + e.width / 2 - t.width / 2
17
+ };
18
+ case "left": return {
19
+ top: e.top + e.height / 2 - t.height / 2,
20
+ left: e.left - t.width - 6
21
+ };
22
+ case "right": return {
23
+ top: e.top + e.height / 2 - t.height / 2,
24
+ left: e.right + 6
25
+ };
26
+ default: return {
27
+ top: e.top - t.height - 6,
28
+ left: e.left + e.width / 2 - t.width / 2
29
+ };
30
+ }
31
+ }
32
+ function _(e, t, n) {
33
+ return n === "top" ? e.top >= p : n === "bottom" ? e.top + t.height <= window.innerHeight - p : n === "left" ? e.left >= p : e.left + t.width <= window.innerWidth - p;
34
+ }
35
+ function v(e, t, n) {
36
+ return Math.min(Math.max(e, t), Math.max(t, n));
37
+ }
38
+ function y(e, t, n) {
39
+ let r = n, i = g(e, t, n);
40
+ if (!_(i, t, n)) {
41
+ let a = g(e, t, h[n]);
42
+ _(a, t, h[n]) && (r = h[n], i = a);
43
+ }
44
+ return {
45
+ placement: r,
46
+ top: v(i.top, p, window.innerHeight - t.height - p),
47
+ left: v(i.left, p, window.innerWidth - t.width - p)
48
+ };
49
+ }
50
+ function b({ content: p, placement: h = "top", delay: g = 0, className: _, children: v, ...b }) {
51
+ let [x, S] = u(!1), [C, w] = u(null), T = s(), E = l(null), D = l(null), O = l(null), k = l(null), A = a(() => {
52
+ k.current &&= (clearTimeout(k.current), null);
53
+ }, []), j = a(() => {
54
+ A(), !O.current && (g > 0 ? O.current = setTimeout(() => {
55
+ O.current = null, S(!0);
56
+ }, g) : S(!0));
57
+ }, [g, A]), M = a(() => {
58
+ A(), O.current &&= (clearTimeout(O.current), null), S(!1), w(null);
59
+ }, [A]), N = a(() => {
60
+ A(), k.current = setTimeout(M, m);
61
+ }, [A, M]);
62
+ c(() => {
63
+ !x || !E.current || !D.current || w(y(E.current.getBoundingClientRect(), D.current.getBoundingClientRect(), h));
64
+ }, [x, h]), o(() => {
65
+ if (!x) return;
66
+ let e = (e) => {
67
+ e.key === "Escape" && M();
68
+ };
69
+ return document.addEventListener("keydown", e), () => document.removeEventListener("keydown", e);
70
+ }, [x, M]), o(() => () => {
71
+ O.current && clearTimeout(O.current), k.current && clearTimeout(k.current);
72
+ }, []);
73
+ let P = x && i(v) && v.type !== n ? r(v, { "aria-describedby": [v.props["aria-describedby"], T].filter(Boolean).join(" ") }) : v;
74
+ return /* @__PURE__ */ f("div", {
75
+ ref: E,
76
+ className: e("tooltip wrapper", _),
77
+ onMouseEnter: j,
78
+ onMouseLeave: N,
79
+ onFocus: j,
80
+ onBlur: M,
81
+ ...b,
82
+ children: [P, x && /* @__PURE__ */ d(t, { children: /* @__PURE__ */ d("div", {
83
+ ref: D,
84
+ id: T,
85
+ className: e("tooltip bubble", C?.placement ?? h),
86
+ role: "tooltip",
87
+ style: C ? {
88
+ top: C.top,
89
+ left: C.left
90
+ } : { visibility: "hidden" },
91
+ onMouseEnter: A,
92
+ onMouseLeave: N,
93
+ children: p
94
+ }) })]
95
+ });
96
+ }
97
+ //#endregion
98
+ export { b as t };
99
+
100
+ //# sourceMappingURL=MTooltip-BRSPJ3RY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MTooltip-BRSPJ3RY.js","names":[],"sources":["../src/components/overlays/MTooltip/MTooltip.tsx"],"sourcesContent":["import {\n Fragment,\n cloneElement,\n isValidElement,\n useCallback,\n useEffect,\n useId,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react'\nimport type {ReactElement} from 'react'\nimport type {MTooltipPlacement, MTooltipProps} from './MTooltip.types'\nimport {cn} from '../../../utils/cn'\nimport {MPortal} from '../../primitives'\nimport './MTooltip.css'\n\nconst VIEWPORT_MARGIN = 8\n// Grace period for moving the pointer from the trigger across the gap onto the bubble.\nconst HOVER_HIDE_DELAY = 120\n\nconst OPPOSITE: Record<MTooltipPlacement, MTooltipPlacement> = {\n top: 'bottom',\n bottom: 'top',\n left: 'right',\n right: 'left',\n}\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\nfunction fitsViewport(pos: {top: number; left: number}, bubble: DOMRect, placement: MTooltipPlacement): boolean {\n if (placement === 'top') return pos.top >= VIEWPORT_MARGIN\n if (placement === 'bottom') return pos.top + bubble.height <= window.innerHeight - VIEWPORT_MARGIN\n if (placement === 'left') return pos.left >= VIEWPORT_MARGIN\n return pos.left + bubble.width <= window.innerWidth - VIEWPORT_MARGIN\n}\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), Math.max(min, max))\n}\n\n// Flip to the opposite side when the preferred one overflows, then keep the bubble on screen.\nfunction resolvePosition(trigger: DOMRect, bubble: DOMRect, placement: MTooltipPlacement) {\n let resolved = placement\n let pos = computePosition(trigger, bubble, placement)\n\n if (!fitsViewport(pos, bubble, placement)) {\n const flipped = computePosition(trigger, bubble, OPPOSITE[placement])\n if (fitsViewport(flipped, bubble, OPPOSITE[placement])) {\n resolved = OPPOSITE[placement]\n pos = flipped\n }\n }\n\n return {\n placement: resolved,\n top: clamp(pos.top, VIEWPORT_MARGIN, window.innerHeight - bubble.height - VIEWPORT_MARGIN),\n left: clamp(pos.left, VIEWPORT_MARGIN, window.innerWidth - bubble.width - VIEWPORT_MARGIN),\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; placement: MTooltipPlacement} | null>(null)\n const tooltipId = useId()\n const wrapperRef = useRef<HTMLDivElement>(null)\n const bubbleRef = useRef<HTMLDivElement>(null)\n const timeoutRef = useRef<ReturnType<typeof setTimeout>>(null)\n const hideTimeoutRef = useRef<ReturnType<typeof setTimeout>>(null)\n\n const cancelHide = useCallback(() => {\n if (hideTimeoutRef.current) {\n clearTimeout(hideTimeoutRef.current)\n hideTimeoutRef.current = null\n }\n }, [])\n\n const show = useCallback(() => {\n cancelHide()\n if (timeoutRef.current) return\n if (delay > 0) {\n timeoutRef.current = setTimeout(() => {\n timeoutRef.current = null\n setVisible(true)\n }, delay)\n } else {\n setVisible(true)\n }\n }, [delay, cancelHide])\n\n const hide = useCallback(() => {\n cancelHide()\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current)\n timeoutRef.current = null\n }\n setVisible(false)\n setPos(null)\n }, [cancelHide])\n\n // WCAG 1.4.13 (hoverable): leaving the trigger only hides the bubble after a short\n // grace period, so the pointer can cross the gap and rest on the bubble itself.\n const scheduleHide = useCallback(() => {\n cancelHide()\n hideTimeoutRef.current = setTimeout(hide, HOVER_HIDE_DELAY)\n }, [cancelHide, hide])\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(resolvePosition(triggerRect, bubbleRect, placement))\n }, [visible, placement])\n\n // Let keyboard and screen-magnifier users dismiss the bubble without moving focus.\n useEffect(() => {\n if (!visible) return\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') hide()\n }\n document.addEventListener('keydown', handleKeyDown)\n return () => document.removeEventListener('keydown', handleKeyDown)\n }, [visible, hide])\n\n useEffect(\n () => () => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current)\n if (hideTimeoutRef.current) clearTimeout(hideTimeoutRef.current)\n },\n []\n )\n\n // Describe the trigger itself, so the tooltip is announced when it receives focus.\n const describedChild =\n visible && isValidElement(children) && children.type !== Fragment\n ? cloneElement(children as ReactElement<{'aria-describedby'?: string}>, {\n 'aria-describedby': [\n (children as ReactElement<{'aria-describedby'?: string}>).props['aria-describedby'],\n tooltipId,\n ]\n .filter(Boolean)\n .join(' '),\n })\n : children\n\n return (\n <div\n ref={wrapperRef}\n className={cn('tooltip wrapper', className)}\n onMouseEnter={show}\n onMouseLeave={scheduleHide}\n onFocus={show}\n onBlur={hide}\n {...rest}\n >\n {describedChild}\n {visible && (\n <MPortal>\n <div\n ref={bubbleRef}\n id={tooltipId}\n className={cn('tooltip bubble', pos?.placement ?? placement)}\n role=\"tooltip\"\n style={pos ? {top: pos.top, left: pos.left} : {visibility: 'hidden'}}\n onMouseEnter={cancelHide}\n onMouseLeave={scheduleHide}\n >\n {content}\n </div>\n </MPortal>\n )}\n </div>\n )\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ const e=require(`./cn-DYFxgzi2.cjs`),t=require(`./useModalLayer-Cyt93Prs.cjs`);require(`./core-w629c4ND.cjs`);let n=require(`react`),r=require(`react/jsx-runtime`);var i=8,a=120,o={top:`bottom`,bottom:`top`,left:`right`,right:`left`};function s(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 c(e,t,n){return n===`top`?e.top>=i:n===`bottom`?e.top+t.height<=window.innerHeight-i:n===`left`?e.left>=i:e.left+t.width<=window.innerWidth-i}function l(e,t,n){return Math.min(Math.max(e,t),Math.max(t,n))}function u(e,t,n){let r=n,a=s(e,t,n);if(!c(a,t,n)){let i=s(e,t,o[n]);c(i,t,o[n])&&(r=o[n],a=i)}return{placement:r,top:l(a.top,i,window.innerHeight-t.height-i),left:l(a.left,i,window.innerWidth-t.width-i)}}function d({content:i,placement:o=`top`,delay:s=0,className:c,children:l,...d}){let[f,p]=(0,n.useState)(!1),[m,h]=(0,n.useState)(null),g=(0,n.useId)(),_=(0,n.useRef)(null),v=(0,n.useRef)(null),y=(0,n.useRef)(null),b=(0,n.useRef)(null),x=(0,n.useCallback)(()=>{b.current&&=(clearTimeout(b.current),null)},[]),S=(0,n.useCallback)(()=>{x(),!y.current&&(s>0?y.current=setTimeout(()=>{y.current=null,p(!0)},s):p(!0))},[s,x]),C=(0,n.useCallback)(()=>{x(),y.current&&=(clearTimeout(y.current),null),p(!1),h(null)},[x]),w=(0,n.useCallback)(()=>{x(),b.current=setTimeout(C,a)},[x,C]);(0,n.useLayoutEffect)(()=>{!f||!_.current||!v.current||h(u(_.current.getBoundingClientRect(),v.current.getBoundingClientRect(),o))},[f,o]),(0,n.useEffect)(()=>{if(!f)return;let e=e=>{e.key===`Escape`&&C()};return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[f,C]),(0,n.useEffect)(()=>()=>{y.current&&clearTimeout(y.current),b.current&&clearTimeout(b.current)},[]);let T=f&&(0,n.isValidElement)(l)&&l.type!==n.Fragment?(0,n.cloneElement)(l,{"aria-describedby":[l.props[`aria-describedby`],g].filter(Boolean).join(` `)}):l;return(0,r.jsxs)(`div`,{ref:_,className:e.t(`tooltip wrapper`,c),onMouseEnter:S,onMouseLeave:w,onFocus:S,onBlur:C,...d,children:[T,f&&(0,r.jsx)(t.c,{children:(0,r.jsx)(`div`,{ref:v,id:g,className:e.t(`tooltip bubble`,m?.placement??o),role:`tooltip`,style:m?{top:m.top,left:m.left}:{visibility:`hidden`},onMouseEnter:x,onMouseLeave:w,children:i})})]})}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return d}});
2
+ //# sourceMappingURL=MTooltip-Cj2Fxmzc.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MTooltip-Cj2Fxmzc.cjs","names":[],"sources":["../src/components/overlays/MTooltip/MTooltip.tsx"],"sourcesContent":["import {\n Fragment,\n cloneElement,\n isValidElement,\n useCallback,\n useEffect,\n useId,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react'\nimport type {ReactElement} from 'react'\nimport type {MTooltipPlacement, MTooltipProps} from './MTooltip.types'\nimport {cn} from '../../../utils/cn'\nimport {MPortal} from '../../primitives'\nimport './MTooltip.css'\n\nconst VIEWPORT_MARGIN = 8\n// Grace period for moving the pointer from the trigger across the gap onto the bubble.\nconst HOVER_HIDE_DELAY = 120\n\nconst OPPOSITE: Record<MTooltipPlacement, MTooltipPlacement> = {\n top: 'bottom',\n bottom: 'top',\n left: 'right',\n right: 'left',\n}\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\nfunction fitsViewport(pos: {top: number; left: number}, bubble: DOMRect, placement: MTooltipPlacement): boolean {\n if (placement === 'top') return pos.top >= VIEWPORT_MARGIN\n if (placement === 'bottom') return pos.top + bubble.height <= window.innerHeight - VIEWPORT_MARGIN\n if (placement === 'left') return pos.left >= VIEWPORT_MARGIN\n return pos.left + bubble.width <= window.innerWidth - VIEWPORT_MARGIN\n}\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), Math.max(min, max))\n}\n\n// Flip to the opposite side when the preferred one overflows, then keep the bubble on screen.\nfunction resolvePosition(trigger: DOMRect, bubble: DOMRect, placement: MTooltipPlacement) {\n let resolved = placement\n let pos = computePosition(trigger, bubble, placement)\n\n if (!fitsViewport(pos, bubble, placement)) {\n const flipped = computePosition(trigger, bubble, OPPOSITE[placement])\n if (fitsViewport(flipped, bubble, OPPOSITE[placement])) {\n resolved = OPPOSITE[placement]\n pos = flipped\n }\n }\n\n return {\n placement: resolved,\n top: clamp(pos.top, VIEWPORT_MARGIN, window.innerHeight - bubble.height - VIEWPORT_MARGIN),\n left: clamp(pos.left, VIEWPORT_MARGIN, window.innerWidth - bubble.width - VIEWPORT_MARGIN),\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; placement: MTooltipPlacement} | null>(null)\n const tooltipId = useId()\n const wrapperRef = useRef<HTMLDivElement>(null)\n const bubbleRef = useRef<HTMLDivElement>(null)\n const timeoutRef = useRef<ReturnType<typeof setTimeout>>(null)\n const hideTimeoutRef = useRef<ReturnType<typeof setTimeout>>(null)\n\n const cancelHide = useCallback(() => {\n if (hideTimeoutRef.current) {\n clearTimeout(hideTimeoutRef.current)\n hideTimeoutRef.current = null\n }\n }, [])\n\n const show = useCallback(() => {\n cancelHide()\n if (timeoutRef.current) return\n if (delay > 0) {\n timeoutRef.current = setTimeout(() => {\n timeoutRef.current = null\n setVisible(true)\n }, delay)\n } else {\n setVisible(true)\n }\n }, [delay, cancelHide])\n\n const hide = useCallback(() => {\n cancelHide()\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current)\n timeoutRef.current = null\n }\n setVisible(false)\n setPos(null)\n }, [cancelHide])\n\n // WCAG 1.4.13 (hoverable): leaving the trigger only hides the bubble after a short\n // grace period, so the pointer can cross the gap and rest on the bubble itself.\n const scheduleHide = useCallback(() => {\n cancelHide()\n hideTimeoutRef.current = setTimeout(hide, HOVER_HIDE_DELAY)\n }, [cancelHide, hide])\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(resolvePosition(triggerRect, bubbleRect, placement))\n }, [visible, placement])\n\n // Let keyboard and screen-magnifier users dismiss the bubble without moving focus.\n useEffect(() => {\n if (!visible) return\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') hide()\n }\n document.addEventListener('keydown', handleKeyDown)\n return () => document.removeEventListener('keydown', handleKeyDown)\n }, [visible, hide])\n\n useEffect(\n () => () => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current)\n if (hideTimeoutRef.current) clearTimeout(hideTimeoutRef.current)\n },\n []\n )\n\n // Describe the trigger itself, so the tooltip is announced when it receives focus.\n const describedChild =\n visible && isValidElement(children) && children.type !== Fragment\n ? cloneElement(children as ReactElement<{'aria-describedby'?: string}>, {\n 'aria-describedby': [\n (children as ReactElement<{'aria-describedby'?: string}>).props['aria-describedby'],\n tooltipId,\n ]\n .filter(Boolean)\n .join(' '),\n })\n : children\n\n return (\n <div\n ref={wrapperRef}\n className={cn('tooltip wrapper', className)}\n onMouseEnter={show}\n onMouseLeave={scheduleHide}\n onFocus={show}\n onBlur={hide}\n {...rest}\n >\n {describedChild}\n {visible && (\n <MPortal>\n <div\n ref={bubbleRef}\n id={tooltipId}\n className={cn('tooltip bubble', pos?.placement ?? placement)}\n role=\"tooltip\"\n style={pos ? {top: pos.top, left: pos.left} : {visibility: 'hidden'}}\n onMouseEnter={cancelHide}\n onMouseLeave={scheduleHide}\n >\n {content}\n </div>\n </MPortal>\n )}\n </div>\n )\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ const e=require(`./frameworkTexts-CaqdiKHW.cjs`),t=require(`./icons-Bp8bB9TP.cjs`),n=require(`./cn-DYFxgzi2.cjs`),r=require(`./useGhostText-DO-tfxS0.cjs`),i=require(`./useModalLayer-Cyt93Prs.cjs`),a=require(`./MCheckbox-DpKJpnFF.cjs`),o=require(`./radioGroupKeys-COL8uXbH.cjs`);require(`./core-w629c4ND.cjs`);let s=require(`react`),c=require(`react/jsx-runtime`);var l={pdf:(0,c.jsx)(t.pi,{}),ts:(0,c.jsx)(t.ni,{}),tsx:(0,c.jsx)(t.ri,{}),js:(0,c.jsx)(t.Wr,{}),jsx:(0,c.jsx)(t.di,{}),css:(0,c.jsx)(t.Lr,{}),scss:(0,c.jsx)(t.Lr,{}),html:(0,c.jsx)(t.Hr,{}),json:(0,c.jsx)(t.Gr,{}),md:(0,c.jsx)(t.qr,{}),txt:(0,c.jsx)(t.ii,{}),csv:(0,c.jsx)(t.Rr,{}),zip:(0,c.jsx)(t.ci,{}),rar:(0,c.jsx)(t.ei,{}),svg:(0,c.jsx)(t.ti,{}),png:(0,c.jsx)(t.Qr,{}),jpg:(0,c.jsx)(t.Ur,{}),jpeg:(0,c.jsx)(t.fi,{}),gif:(0,c.jsx)(t.Vr,{}),webp:(0,c.jsx)(t.ai,{}),php:(0,c.jsx)(t.Zr,{}),xml:(0,c.jsx)(t.si,{}),xls:(0,c.jsx)(t.oi,{}),ppt:(0,c.jsx)(t.$r,{}),odt:(0,c.jsx)(t.Xr,{}),exe:(0,c.jsx)(t.Br,{}),mp3:(0,c.jsx)(t.Jr,{}),mp4:(0,c.jsx)(t.Yr,{})};function u(e){let t=e.lastIndexOf(`.`);return t<1?null:e.slice(t+1).toLowerCase()}function d(e){return e.kind===`folder`||!!e.children?.length}function f(e){let n=u(e);return n?l[n]??(0,c.jsx)(t.mi,{}):(0,c.jsx)(t._i,{})}function p(e,n,r){return e.icon?e.icon:r?d(e)?n?(0,c.jsx)(t.Fr,{}):(0,c.jsx)(t.Ir,{}):f(e.label):null}function m(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 h(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 g(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))}}var _=`__mineral-tree-cut`,v=`__mineral-tree-move-here`,y=`__mineral-tree-cancel-move`,ee=new Set([_,v,y]);function te(e,t){let n=[];function r(e,i){for(let a of e)n.push({node:a,parentId:i}),d(a)&&t.has(a.id)&&r(a.children??[],a.id)}return r(e,null),n}var ne=(0,s.createContext)(null);function re({node:e,color:r,level:i,expandable:o,selectable:l,expandedIds:u,selectedId:f,draggedId:m,dropTargetId:h,onToggle:g,onSelect:_,checkable:v,checkedIds:y,indeterminateIds:ee,onCheck:te,indent:b,showLines:x,fileIcons:S,draggable:C,canDropOnNode:w,onContextMenu:T,onDragStart:ie,onDragOver:E,onDrop:D,onDragEnd:O}){let k=(0,s.useContext)(ne),A=d(e),j=u.has(e.id),ae=f===e.id,oe=m===e.id,se=h===e.id,ce=w?.(e),le=p(e,j,!!S),ue=y?.has(e.id)??!1,M=ee?.has(e.id)??!1,N=k?.cutId===e.id;return(0,c.jsxs)(`li`,{ref:k?t=>k.registerItem(e.id,t):void 0,role:`treeitem`,"aria-expanded":A?j:void 0,"aria-selected":l?ae:void 0,"aria-checked":v?M?`mixed`:ue:void 0,"aria-disabled":e.disabled||void 0,"aria-level":i+1,"aria-label":e.label,tabIndex:k?k.tabbableId===e.id?0:-1:void 0,"data-node-id":e.id,onFocus:t=>{t.target===t.currentTarget&&k?.onItemFocus(e.id)},children:[(0,c.jsxs)(`div`,{className:n.t(`item`,ae&&`selected`,e.disabled&&`disabled`,l&&!e.disabled&&`selectable`,C&&!e.disabled&&`draggable`,oe&&`dragging`,ce&&`can-drop`,se&&`drop-target`,N&&`cut`),"data-color":r,style:{paddingLeft:i*b},draggable:C&&!e.disabled,onClick:()=>{e.disabled||(A&&o&&g(e.id),l&&_?.(e.id,e))},onContextMenu:t=>T?.(t,e),onDragStart:t=>ie?.(t,e),onDragOver:t=>E?.(t,e),onDrop:t=>D?.(t,e),onDragEnd:O,children:[(0,c.jsx)(`span`,{className:`toggle`,children:A&&o?(0,c.jsx)(`span`,{className:n.t(`arrow`,j&&`expanded`),children:(0,c.jsx)(t.qi,{})}):(0,c.jsx)(`span`,{className:`spacer`})}),v&&(0,c.jsx)(`span`,{className:`check`,"aria-hidden":`true`,onClick:e=>e.stopPropagation(),onMouseDown:e=>e.preventDefault(),children:(0,c.jsx)(a.t,{ref:e=>{e&&(e.tabIndex=-1)},size:`sm`,clickEffect:`none`,disabled:e.disabled,checked:ue,indeterminate:M,"aria-label":e.label,onChange:()=>te?.(e.id)})}),le&&(0,c.jsx)(`span`,{className:`icon`,children:le}),(0,c.jsx)(`span`,{className:`label`,children:e.label})]}),A&&j&&(0,c.jsx)(`ul`,{className:`list`,role:`group`,style:x?{"--line-left":`${i*b+17}px`}:void 0,children:(e.children??[]).map(e=>(0,c.jsx)(re,{node:e,color:r,level:i+1,expandable:o,selectable:l,expandedIds:u,selectedId:f,draggedId:m,dropTargetId:h,onToggle:g,onSelect:_,checkable:v,checkedIds:y,indeterminateIds:ee,onCheck:te,indent:b,showLines:x,fileIcons:S,draggable:C,canDropOnNode:w,onContextMenu:T,onDragStart:ie,onDragOver:E,onDrop:D,onDragEnd:O},e.id))})]})}function b({items:t,color:a=`primary`,expandable:l=!0,selectable:u=!1,defaultExpanded:f=[],expanded:p,onExpandChange:b,selected:x,onSelect:S,checkable:C=!1,defaultChecked:w=[],checked:T,onCheckedChange:ie,indent:E=20,showLines:D=!0,fileIcons:O=!0,draggable:k=!1,canDrop:A,onMove:j,keyboardMove:ae=!0,contextMenuItems:oe,onContextMenuAction:se,className:ce,"aria-label":le,"aria-labelledby":ue,...M}){let N=e.E(),[de,fe]=(0,s.useState)(f),[pe,me]=(0,s.useState)(null),[he,ge]=(0,s.useState)(w),[P,_e]=(0,s.useState)(null),[ve,ye]=(0,s.useState)(null),[F,be]=(0,s.useState)(null),[I,L]=(0,s.useState)(null),[xe,Se]=(0,s.useState)(``),[R,z]=(0,s.useState)(null),B=(0,s.useRef)(null),Ce=(0,s.useRef)(null),V=(0,s.useRef)(new Map),we=(0,s.useRef)([]),H=(0,s.useRef)({buffer:``,timer:null}),U=p??de,W=new Set(U),G=x===void 0?pe:x,Te=new Set(T??he),Ee=C?h(t,Te):new Set,{nodeMap:K,descendants:De,parentMap:Oe}=m(t),q=P?K.get(P)??null:null,ke=k&&!!j&&ae,J=I?K.get(I)??null:null,Y=te(t,W),X=Y.map(e=>e.node.id),Ae=F&&X.includes(F)?F:G&&X.includes(G)?G:X[0]??null,{onKeyDown:je,getItemProps:Me,focusItem:Ne}=r.n({itemCount:R?.items.length??0,isOpen:!!R,mode:`roving`,selectOnSpace:!0,isItemDisabled:e=>!!R?.items[e]?.disabled,getItemLabel:e=>{let t=R?.items[e]?.label;return typeof t==`string`||typeof t==`number`?String(t):``},onSelect:e=>we.current[e]?.click(),onClose:()=>Ie(!0)});(0,s.useEffect)(()=>{if(!R)return;function e(e){e&&B.current&&B.current.contains(e.target)||z(null)}function t(e){e.key===`Escape`&&!e.defaultPrevented&&z(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)}},[R]),(0,s.useEffect)(()=>{if(!R)return;let e=R.items.findIndex(e=>!e.disabled);e>=0?Ne(e):B.current?.focus()},[R]),(0,s.useEffect)(()=>{let e=H.current;return()=>{e.timer&&clearTimeout(e.timer)}},[]);function Pe(e,t){t?V.current.set(e,t):V.current.delete(e)}function Z(e){be(e),V.current.get(e)?.focus()}function Fe(e){Se(e)}function Ie(e){let t=R?.node;z(null),e&&t&&Z(t.id)}function Q(e){let t=W.has(e)?U.filter(t=>t!==e):[...U,e];b?b(t):fe(t)}function Le(e){let t=e.filter(e=>!W.has(e));if(!t.length)return;let n=[...U,...t];b?b(n):fe(n)}function $(e,t){S?S(e,t):me(e)}function Re(e){let t=K.get(e);if(!t||t.disabled)return;let n=new Set(Te),r=n.has(e),i=[e,...Array.from(De.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=Oe.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=Oe.get(a)}let o=Array.from(n);T===void 0&&ge(o),ie?.(o)}function ze(){_e(null),ye(null)}function Be(e,t){return!e||!k||!j||t.disabled||!d(t)||t.id===e.id||De.get(e.id)?.has(t.id)||Oe.get(e.id)===t.id?!1:A?A(e,t):!0}function Ve(e){return Be(q,e)}function He(t){!ke||t.disabled||(L(t.id),Fe(e.t(N.cutAnnouncement,{label:t.label})))}function Ue(t){return!J||!Be(J,t)?!1:(j?.({draggedId:J.id,draggedNode:J,targetId:t.id,targetNode:t}),l&&!W.has(t.id)&&Q(t.id),L(null),Fe(e.t(N.movedAnnouncement,{label:J.label,target:t.label})),!0)}function We(){L(null),Fe(N.moveCancelled)}function Ge(e){if(!ke)return[];let t=[];return J&&J.id!==e.id&&Be(J,e)&&t.push({id:v,label:N.moveHere}),!e.disabled&&I!==e.id&&t.push({id:_,label:N.cut}),I&&t.push({id:y,label:N.cancelMove}),t}function Ke(e){return[...oe?oe(e).filter(Boolean):[],...Ge(e)]}function qe(e,t,n){if(e.disabled)return!1;let r=Ke(e);if(!r.length)return!1;$(e.id,e);let i=g(t,n);return z({node:e,items:r,x:i.x,y:i.y}),!0}function Je(e,t){t.disabled||!Ke(t).length||(e.preventDefault(),qe(t,e.clientX,e.clientY))}function Ye(e,t){if(e.disabled)return;let n=!!B.current?.contains(document.activeElement);e.id===_?He(t):e.id===v?Ue(t):e.id===y&&We(),ee.has(e.id)||se?.(e.id,t),Ie(n)}function Xe(e){if(e.key===`Tab`){e.preventDefault(),Ie(!0);return}je(e)}function Ze(e,t){!k||t.disabled||(e.dataTransfer.effectAllowed=`move`,e.dataTransfer.setData(`text/plain`,t.id),z(null),_e(t.id))}function Qe(e,t){Ve(t)&&(e.preventDefault(),e.dataTransfer.dropEffect=`move`,ye(t.id))}function $e(e,t){if(e.preventDefault(),!q||!Ve(t)){ze();return}j?.({draggedId:q.id,draggedNode:q,targetId:t.id,targetNode:t}),l&&!W.has(t.id)&&Q(t.id),ze()}function et(e){e.disabled||(d(e)&&l&&Q(e.id),u&&$(e.id,e))}function tt(e,t){let n=H.current;n.timer&&clearTimeout(n.timer),n.buffer+=e.toLowerCase(),n.timer=setTimeout(()=>{n.buffer=``,n.timer=null},500);let r=n.buffer,i=r.split(``).every(e=>e===r[0])?r[0]:r,a=+(i.length===1);for(let e=0;e<Y.length;e++){let n=Y[(t+a+e)%Y.length];if(n.node.label.toLowerCase().startsWith(i))return Z(n.node.id),!0}return!1}function nt(e){let n=e.target;if(n.getAttribute(`role`)!==`treeitem`)return;let r=n.dataset.nodeId??``,i=X.indexOf(r);if(i<0)return;let{node:a,parentId:s}=Y[i],c=d(a),f=W.has(r),p=e.ctrlKey||e.metaKey,m=e.key;if(m===`ContextMenu`||m===`F10`&&e.shiftKey){let t=n.querySelector(`.item`)?.getBoundingClientRect()??n.getBoundingClientRect();qe(a,t.left+16,t.bottom)&&e.preventDefault();return}if(p&&!e.altKey&&(m===`x`||m===`X`)){ke&&!a.disabled&&(e.preventDefault(),He(a));return}if(p&&!e.altKey&&(m===`v`||m===`V`)){J&&(e.preventDefault(),Ue(a));return}if(m===`Escape`&&I){e.preventDefault(),We();return}if(p||e.altKey)return;let h=o.n(Ce.current),g=h?`ArrowLeft`:`ArrowRight`,_=h?`ArrowRight`:`ArrowLeft`;switch(m){case`ArrowDown`:i<Y.length-1&&Z(X[i+1]);break;case`ArrowUp`:i>0&&Z(X[i-1]);break;case`Home`:Z(X[0]);break;case`End`:Z(X[X.length-1]);break;case g:c&&!f?l&&!a.disabled&&Q(r):c&&f&&a.children?.length&&Z(X[i+1]);break;case _:c&&f&&l&&!a.disabled?Q(r):s&&Z(s);break;case`Enter`:et(a);break;case` `:H.current.buffer?tt(` `,i):C?Re(r):u&&!a.disabled&&$(r,a);break;case`*`:if(!l)return;Le((s?K.get(s)?.children??[]:t).filter(e=>d(e)&&!e.disabled).map(e=>e.id));break;default:if(m.length===1&&m!==` `&&tt(m,i))break;return}e.preventDefault()}let rt={tabbableId:Ae,cutId:I,registerItem:Pe,onItemFocus:be};return(0,c.jsxs)(`div`,{className:n.t(`tree`,`color-${a}`,D&&`lines`,ce),...M,children:[(0,c.jsx)(ne.Provider,{value:rt,children:(0,c.jsx)(`ul`,{ref:Ce,className:`list`,role:`tree`,"aria-label":le,"aria-labelledby":ue,onKeyDown:nt,children:t.map(e=>(0,c.jsx)(re,{node:e,color:a,level:0,expandable:l,selectable:u,expandedIds:W,selectedId:G,draggedId:P,dropTargetId:ve,onToggle:Q,onSelect:$,checkable:C,checkedIds:Te,indeterminateIds:Ee,onCheck:Re,indent:E,showLines:D,fileIcons:O,draggable:k,canDropOnNode:Ve,onContextMenu:Je,onDragStart:Ze,onDragOver:Qe,onDrop:$e,onDragEnd:ze},e.id))})}),(0,c.jsx)(`div`,{className:`tree-live`,role:`status`,"aria-live":`polite`,"aria-atomic":`true`,children:xe}),R&&(0,c.jsx)(i.c,{children:(0,c.jsx)(`div`,{ref:B,className:`tree menu`,style:{top:R.y,left:R.x},role:`menu`,tabIndex:-1,"aria-label":e.t(N.menuLabel,{label:R.node.label}),onKeyDown:Xe,children:R.items.map((e,t)=>{let r=Me(t);return(0,c.jsxs)(`button`,{id:r.id,ref:e=>{r.ref?.(e),we.current[t]=e},tabIndex:r.tabIndex,onFocus:r.onFocus,type:`button`,className:n.t(`action`,e.color,e.disabled&&`disabled`),role:`menuitem`,disabled:e.disabled,onClick:()=>Ye(e,R.node),children:[e.icon&&(0,c.jsx)(`span`,{className:`icon`,children:e.icon}),(0,c.jsx)(`span`,{children:e.label})]},e.id)})})})]})}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return b}});
2
+ //# sourceMappingURL=MTreeView-BWCTlsU-.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MTreeView-BWCTlsU-.cjs","names":[],"sources":["../src/components/data/MTreeView/MTreeView.tsx"],"sourcesContent":["import {createContext, useContext, useEffect, useRef, useState} from 'react'\nimport type {CSSProperties, DragEvent, KeyboardEvent as ReactKeyboardEvent, 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 {formatMText, useMTreeViewTexts} from '../../../i18n/frameworkTexts'\nimport {MCheckbox} from '../../controls'\nimport {MPortal} from '../../primitives'\nimport {useKeyboardNav} from '../../../utils/useKeyboardNav'\nimport {isRtlElement} from '../../../utils/radioGroupKeys'\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// Built-in context-menu actions (keyboard / single-pointer alternative to dragging, WCAG 2.5.7).\nconst CUT_ACTION = '__mineral-tree-cut'\nconst MOVE_HERE_ACTION = '__mineral-tree-move-here'\nconst CANCEL_MOVE_ACTION = '__mineral-tree-cancel-move'\nconst BUILT_IN_ACTIONS = new Set([CUT_ACTION, MOVE_HERE_ACTION, CANCEL_MOVE_ACTION])\n\ninterface VisibleNode {\n node: MTreeNode\n parentId: string | null\n}\n\n// Visible nodes in document order (the rows a keyboard user walks through).\nfunction flattenVisible(items: MTreeNode[], expandedIds: Set<string>): VisibleNode[] {\n const result: VisibleNode[] = []\n\n function walk(nodes: MTreeNode[], parentId: string | null) {\n for (const node of nodes) {\n result.push({node, parentId})\n if (isFolderNode(node) && expandedIds.has(node.id)) walk(node.children ?? [], node.id)\n }\n }\n\n walk(items, null)\n return result\n}\n\n// Roving-focus state shared with every row (APG tree: one tab stop, focus moves with the arrows).\ninterface TreeNavState {\n tabbableId: string | null\n cutId: string | null\n registerItem: (id: string, element: HTMLLIElement | null) => void\n onItemFocus: (id: string) => void\n}\n\nconst TreeNavContext = createContext<TreeNavState | null>(null)\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 nav = useContext(TreeNavContext)\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 const isCut = nav?.cutId === node.id\n\n return (\n <li\n ref={nav ? (element) => nav.registerItem(node.id, element) : undefined}\n role=\"treeitem\"\n aria-expanded={hasChildren ? isExpanded : undefined}\n aria-selected={selectable ? isSelected : undefined}\n aria-checked={checkable ? (isIndeterminate ? 'mixed' : isChecked) : undefined}\n aria-disabled={node.disabled || undefined}\n aria-level={level + 1}\n // Name the row by its own label, not by the text of its whole subtree.\n aria-label={node.label}\n tabIndex={nav ? (nav.tabbableId === node.id ? 0 : -1) : undefined}\n data-node-id={node.id}\n onFocus={(event) => {\n if (event.target === event.currentTarget) nav?.onItemFocus(node.id)\n }}\n >\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 isCut && 'cut'\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 // The row carries `aria-checked` (APG tree); the checkbox is a pointer target only,\n // so it stays out of the tab order and the accessibility tree.\n <span\n className=\"check\"\n aria-hidden=\"true\"\n onClick={(event) => event.stopPropagation()}\n onMouseDown={(event) => event.preventDefault()}\n >\n <MCheckbox\n ref={(element) => {\n if (element) element.tabIndex = -1\n }}\n size=\"sm\"\n clickEffect=\"none\"\n disabled={node.disabled}\n checked={isChecked}\n indeterminate={isIndeterminate}\n aria-label={node.label}\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 keyboardMove = true,\n contextMenuItems,\n onContextMenuAction,\n className,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n ...rest\n}: MTreeViewProps) {\n const texts = useMTreeViewTexts()\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 [focusedId, setFocusedId] = useState<string | null>(null)\n const [cutId, setCutId] = useState<string | null>(null)\n const [announcement, setAnnouncement] = useState('')\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 const treeRef = useRef<HTMLUListElement>(null)\n const itemEls = useRef(new Map<string, HTMLLIElement>())\n const menuItemEls = useRef<(HTMLButtonElement | null)[]>([])\n const typeahead = useRef<{buffer: string; timer: ReturnType<typeof setTimeout> | null}>({buffer: '', timer: 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 const moveEnabled = draggable && !!onMove && keyboardMove\n const cutNode = cutId ? (nodeMap.get(cutId) ?? null) : null\n\n const visible = flattenVisible(items, expandedIds)\n const visibleIds = visible.map((entry) => entry.node.id)\n const tabbableId =\n focusedId && visibleIds.includes(focusedId)\n ? focusedId\n : selectedId && visibleIds.includes(selectedId)\n ? selectedId\n : (visibleIds[0] ?? null)\n\n const menuItemCount = menu?.items.length ?? 0\n const {\n onKeyDown: onMenuNavKeyDown,\n getItemProps: getMenuItemProps,\n focusItem: focusMenuItem,\n } = useKeyboardNav({\n itemCount: menuItemCount,\n isOpen: !!menu,\n mode: 'roving',\n selectOnSpace: true,\n isItemDisabled: (index) => !!menu?.items[index]?.disabled,\n getItemLabel: (index) => {\n const label = menu?.items[index]?.label\n return typeof label === 'string' || typeof label === 'number' ? String(label) : ''\n },\n onSelect: (index) => menuItemEls.current[index]?.click(),\n onClose: () => closeMenu(true),\n })\n\n useEffect(() => {\n if (!menu) return\n\n function closeOnOutside(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' && !event.defaultPrevented) {\n setMenu(null)\n }\n }\n\n document.addEventListener('mousedown', closeOnOutside)\n document.addEventListener('scroll', closeOnOutside, true)\n window.addEventListener('resize', closeOnOutside)\n document.addEventListener('keydown', handleKey)\n\n return () => {\n document.removeEventListener('mousedown', closeOnOutside)\n document.removeEventListener('scroll', closeOnOutside, true)\n window.removeEventListener('resize', closeOnOutside)\n document.removeEventListener('keydown', handleKey)\n }\n }, [menu])\n\n // APG menu: focus lands on the first enabled item when the menu opens.\n useEffect(() => {\n if (!menu) return\n const first = menu.items.findIndex((item) => !item.disabled)\n if (first >= 0) focusMenuItem(first)\n else menuRef.current?.focus()\n // Only on open: `menu` is a new object per opening.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [menu])\n\n useEffect(() => {\n const state = typeahead.current\n return () => {\n if (state.timer) clearTimeout(state.timer)\n }\n }, [])\n\n function registerItem(id: string, element: HTMLLIElement | null) {\n if (element) itemEls.current.set(id, element)\n else itemEls.current.delete(id)\n }\n\n function focusNode(id: string) {\n setFocusedId(id)\n itemEls.current.get(id)?.focus()\n }\n\n function announce(message: string) {\n setAnnouncement(message)\n }\n\n function closeMenu(restoreFocus: boolean) {\n const node = menu?.node\n setMenu(null)\n if (restoreFocus && node) focusNode(node.id)\n }\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 expandMany(ids: string[]) {\n const missing = ids.filter((id) => !expandedIds.has(id))\n if (!missing.length) return\n const next = [...expandedArr, ...missing]\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 // Shared by drag-and-drop and the keyboard / menu move.\n function canMoveNode(sourceNode: MTreeNode | null, targetNode: MTreeNode) {\n if (!sourceNode || !draggable || !onMove) return false\n if (targetNode.disabled || !isFolderNode(targetNode)) return false\n if (targetNode.id === sourceNode.id) return false\n if (descendants.get(sourceNode.id)?.has(targetNode.id)) return false\n // Dropping into the folder that already holds the node would be an empty move.\n if (parentMap.get(sourceNode.id) === targetNode.id) return false\n\n return canDrop ? canDrop(sourceNode, targetNode) : true\n }\n\n function isValidDropTarget(targetNode: MTreeNode) {\n return canMoveNode(draggedNode, targetNode)\n }\n\n /* ── Keyboard / single-pointer move (cut → move here) ── */\n\n function cutForMove(node: MTreeNode) {\n if (!moveEnabled || node.disabled) return\n setCutId(node.id)\n announce(formatMText(texts.cutAnnouncement, {label: node.label}))\n }\n\n function moveCutInto(targetNode: MTreeNode) {\n if (!cutNode || !canMoveNode(cutNode, targetNode)) return false\n\n onMove?.({\n draggedId: cutNode.id,\n draggedNode: cutNode,\n targetId: targetNode.id,\n targetNode,\n } satisfies MTreeViewMoveEvent)\n\n if (expandable && !expandedIds.has(targetNode.id)) {\n handleToggle(targetNode.id)\n }\n\n setCutId(null)\n announce(formatMText(texts.movedAnnouncement, {label: cutNode.label, target: targetNode.label}))\n return true\n }\n\n function cancelMove() {\n setCutId(null)\n announce(texts.moveCancelled)\n }\n\n function builtInMenuItems(node: MTreeNode): MTreeViewContextMenuItem[] {\n if (!moveEnabled) return []\n\n const result: MTreeViewContextMenuItem[] = []\n if (cutNode && cutNode.id !== node.id && canMoveNode(cutNode, node)) {\n result.push({id: MOVE_HERE_ACTION, label: texts.moveHere})\n }\n if (!node.disabled && cutId !== node.id) {\n result.push({id: CUT_ACTION, label: texts.cut})\n }\n if (cutId) {\n result.push({id: CANCEL_MOVE_ACTION, label: texts.cancelMove})\n }\n\n return result\n }\n\n function menuItemsFor(node: MTreeNode) {\n const custom = contextMenuItems ? contextMenuItems(node).filter(Boolean) : []\n return [...custom, ...builtInMenuItems(node)]\n }\n\n function openMenu(node: MTreeNode, x: number, y: number) {\n if (node.disabled) return false\n\n const nextItems = menuItemsFor(node)\n if (!nextItems.length) return false\n\n handleSelect(node.id, node)\n\n const pos = clampMenuPosition(x, y)\n setMenu({\n node,\n items: nextItems,\n x: pos.x,\n y: pos.y,\n })\n return true\n }\n\n function handleContextMenu(event: MouseEvent<HTMLDivElement>, node: MTreeNode) {\n if (node.disabled || !menuItemsFor(node).length) return\n\n event.preventDefault()\n openMenu(node, event.clientX, event.clientY)\n }\n\n function handleMenuAction(item: MTreeViewContextMenuItem, node: MTreeNode) {\n if (item.disabled) return\n\n const restore = !!menuRef.current?.contains(document.activeElement)\n\n if (item.id === CUT_ACTION) cutForMove(node)\n else if (item.id === MOVE_HERE_ACTION) moveCutInto(node)\n else if (item.id === CANCEL_MOVE_ACTION) cancelMove()\n\n if (!BUILT_IN_ACTIONS.has(item.id)) onContextMenuAction?.(item.id, node)\n closeMenu(restore)\n }\n\n function handleMenuKeyDown(event: ReactKeyboardEvent<HTMLDivElement>) {\n if (event.key === 'Tab') {\n // Leaving the menu closes it and puts focus back on its node.\n event.preventDefault()\n closeMenu(true)\n return\n }\n onMenuNavKeyDown(event)\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 /* ── APG tree keyboard ── */\n\n function activateNode(node: MTreeNode) {\n if (node.disabled) return\n if (isFolderNode(node) && expandable) handleToggle(node.id)\n if (selectable) handleSelect(node.id, node)\n }\n\n function typeaheadTo(char: string, from: number) {\n const state = typeahead.current\n if (state.timer) clearTimeout(state.timer)\n state.buffer += char.toLowerCase()\n state.timer = setTimeout(() => {\n state.buffer = ''\n state.timer = null\n }, 500)\n\n const buffer = state.buffer\n const sameChar = buffer.split('').every((c) => c === buffer[0])\n const search = sameChar ? buffer[0] : buffer\n const offset = search.length === 1 ? 1 : 0\n for (let n = 0; n < visible.length; n++) {\n const entry = visible[(from + offset + n) % visible.length]\n if (entry.node.label.toLowerCase().startsWith(search)) {\n focusNode(entry.node.id)\n return true\n }\n }\n return false\n }\n\n function handleTreeKeyDown(event: ReactKeyboardEvent<HTMLUListElement>) {\n const target = event.target as HTMLElement\n if (target.getAttribute('role') !== 'treeitem') return\n\n const id = target.dataset.nodeId ?? ''\n const position = visibleIds.indexOf(id)\n if (position < 0) return\n\n const {node, parentId} = visible[position]\n const folder = isFolderNode(node)\n const open = expandedIds.has(id)\n const ctrl = event.ctrlKey || event.metaKey\n const key = event.key\n\n // Context menu from the keyboard.\n if (key === 'ContextMenu' || (key === 'F10' && event.shiftKey)) {\n const rect = target.querySelector('.item')?.getBoundingClientRect() ?? target.getBoundingClientRect()\n if (openMenu(node, rect.left + 16, rect.bottom)) event.preventDefault()\n return\n }\n\n if (ctrl && !event.altKey && (key === 'x' || key === 'X')) {\n if (moveEnabled && !node.disabled) {\n event.preventDefault()\n cutForMove(node)\n }\n return\n }\n\n if (ctrl && !event.altKey && (key === 'v' || key === 'V')) {\n if (cutNode) {\n event.preventDefault()\n moveCutInto(node)\n }\n return\n }\n\n if (key === 'Escape' && cutId) {\n event.preventDefault()\n cancelMove()\n return\n }\n\n if (ctrl || event.altKey) return\n\n const rtl = isRtlElement(treeRef.current)\n const forward = rtl ? 'ArrowLeft' : 'ArrowRight'\n const backward = rtl ? 'ArrowRight' : 'ArrowLeft'\n\n switch (key) {\n case 'ArrowDown':\n if (position < visible.length - 1) focusNode(visibleIds[position + 1])\n break\n case 'ArrowUp':\n if (position > 0) focusNode(visibleIds[position - 1])\n break\n case 'Home':\n focusNode(visibleIds[0])\n break\n case 'End':\n focusNode(visibleIds[visibleIds.length - 1])\n break\n case forward:\n if (folder && !open) {\n if (expandable && !node.disabled) handleToggle(id)\n } else if (folder && open && node.children?.length) {\n focusNode(visibleIds[position + 1])\n }\n break\n case backward:\n if (folder && open && expandable && !node.disabled) handleToggle(id)\n else if (parentId) focusNode(parentId)\n break\n case 'Enter':\n activateNode(node)\n break\n case ' ':\n if (typeahead.current.buffer) {\n typeaheadTo(' ', position)\n } else if (checkable) {\n handleCheck(id)\n } else if (selectable && !node.disabled) {\n handleSelect(id, node)\n }\n break\n case '*': {\n if (!expandable) return\n const siblings = parentId ? (nodeMap.get(parentId)?.children ?? []) : items\n expandMany(siblings.filter((sibling) => isFolderNode(sibling) && !sibling.disabled).map((s) => s.id))\n break\n }\n default:\n if (key.length === 1 && key !== ' ' && typeaheadTo(key, position)) break\n return\n }\n\n event.preventDefault()\n }\n\n const navState: TreeNavState = {\n tabbableId,\n cutId,\n registerItem,\n onItemFocus: setFocusedId,\n }\n\n return (\n <div className={cn('tree', `color-${color}`, showLines && 'lines', className)} {...rest}>\n <TreeNavContext.Provider value={navState}>\n <ul\n ref={treeRef}\n className=\"list\"\n role=\"tree\"\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n onKeyDown={handleTreeKeyDown}\n >\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 </TreeNavContext.Provider>\n <div className=\"tree-live\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">\n {announcement}\n </div>\n {menu && (\n <MPortal>\n <div\n ref={menuRef}\n className=\"tree menu\"\n style={{top: menu.y, left: menu.x}}\n role=\"menu\"\n tabIndex={-1}\n aria-label={formatMText(texts.menuLabel, {label: menu.node.label})}\n onKeyDown={handleMenuKeyDown}\n >\n {menu.items.map((item, index) => {\n const navProps = getMenuItemProps(index)\n return (\n <button\n key={item.id}\n id={navProps.id}\n ref={(element) => {\n navProps.ref?.(element)\n menuItemEls.current[index] = element\n }}\n tabIndex={navProps.tabIndex}\n onFocus={navProps.onFocus}\n type=\"button\"\n className={cn('action', item.color, item.disabled && 'disabled')}\n role=\"menuitem\"\n disabled={item.disabled}\n onClick={() => handleMenuAction(item, menu.node)}\n >\n {item.icon && <span className=\"icon\">{item.icon}</span>}\n <span>{item.label}</span>\n </button>\n )\n })}\n </div>\n </MPortal>\n )}\n </div>\n )\n}\n"],"mappings":"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"}