@banzamel/mineralui 2.4.3 → 2.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (545) hide show
  1. package/README.md +1 -1
  2. package/dist/MAvatar-CvQuiGvT.cjs +2 -0
  3. package/dist/MAvatar-CvQuiGvT.cjs.map +1 -0
  4. package/dist/MAvatar-EkOBrEtS.js +73 -0
  5. package/dist/MAvatar-EkOBrEtS.js.map +1 -0
  6. package/dist/MButton-BxEky3xQ.cjs +2 -0
  7. package/dist/MButton-BxEky3xQ.cjs.map +1 -0
  8. package/dist/MButton-KELyyBw1.js +123 -0
  9. package/dist/MButton-KELyyBw1.js.map +1 -0
  10. package/dist/{MButtonGroup-BEJxXZ8u.js → MButtonGroup-DDnn8Wfy.js} +3 -3
  11. package/dist/{MButtonGroup-BEJxXZ8u.js.map → MButtonGroup-DDnn8Wfy.js.map} +1 -1
  12. package/dist/{MButtonGroup-DO1Tq3Za.cjs → MButtonGroup-Dz8Fm-oA.cjs} +2 -2
  13. package/dist/{MButtonGroup-DO1Tq3Za.cjs.map → MButtonGroup-Dz8Fm-oA.cjs.map} +1 -1
  14. package/dist/{MCard-P8OoswWM.cjs → MCard-Bqm4BjK_.cjs} +2 -2
  15. package/dist/MCard-Bqm4BjK_.cjs.map +1 -0
  16. package/dist/{MCard-BqSkGAgf.js → MCard-CqZYGaS2.js} +4 -4
  17. package/dist/MCard-CqZYGaS2.js.map +1 -0
  18. package/dist/MCheckbox-CaWgyUn5.js +72 -0
  19. package/dist/MCheckbox-CaWgyUn5.js.map +1 -0
  20. package/dist/MCheckbox-DpKJpnFF.cjs +2 -0
  21. package/dist/MCheckbox-DpKJpnFF.cjs.map +1 -0
  22. package/dist/{MConflictIllustration-znC7ijmP.js → MConflictIllustration-dwZS44ye.js} +1517 -1515
  23. package/dist/MConflictIllustration-dwZS44ye.js.map +1 -0
  24. package/dist/MConflictIllustration-vfHs-jad.cjs +2 -0
  25. package/dist/MConflictIllustration-vfHs-jad.cjs.map +1 -0
  26. package/dist/MDetailList-C3othNs3.js +127 -0
  27. package/dist/MDetailList-C3othNs3.js.map +1 -0
  28. package/dist/MDetailList-DkDHLdJ8.cjs +2 -0
  29. package/dist/MDetailList-DkDHLdJ8.cjs.map +1 -0
  30. package/dist/MDropdownMenu-C4-r7UZM.cjs +2 -0
  31. package/dist/MDropdownMenu-C4-r7UZM.cjs.map +1 -0
  32. package/dist/MDropdownMenu-Dvg9UsHB.js +219 -0
  33. package/dist/MDropdownMenu-Dvg9UsHB.js.map +1 -0
  34. package/dist/MGrid-CQqT8nHi.js +271 -0
  35. package/dist/MGrid-CQqT8nHi.js.map +1 -0
  36. package/dist/MGrid-tBsqShLG.cjs +2 -0
  37. package/dist/MGrid-tBsqShLG.cjs.map +1 -0
  38. package/dist/MHeading-DQSQ8c7L.js +21 -0
  39. package/dist/MHeading-DQSQ8c7L.js.map +1 -0
  40. package/dist/MHeading-DiGYs1FJ.cjs +2 -0
  41. package/dist/MHeading-DiGYs1FJ.cjs.map +1 -0
  42. package/dist/MInput-BeEGufZG.cjs +2 -0
  43. package/dist/MInput-BeEGufZG.cjs.map +1 -0
  44. package/dist/MInput-QnQV9L8U.js +190 -0
  45. package/dist/MInput-QnQV9L8U.js.map +1 -0
  46. package/dist/MInputCVC-CCNRAqHw.cjs +2 -0
  47. package/dist/MInputCVC-CCNRAqHw.cjs.map +1 -0
  48. package/dist/MInputCVC-IXIYZwex.js +410 -0
  49. package/dist/MInputCVC-IXIYZwex.js.map +1 -0
  50. package/dist/MInputSearch-BSIc6m2P.cjs +2 -0
  51. package/dist/MInputSearch-BSIc6m2P.cjs.map +1 -0
  52. package/dist/MInputSearch-CNuTAbYs.js +44 -0
  53. package/dist/MInputSearch-CNuTAbYs.js.map +1 -0
  54. package/dist/{MKbd-BR1GX5oK.cjs → MKbd-CnW3NUIu.cjs} +2 -2
  55. package/dist/{MKbd-BR1GX5oK.cjs.map → MKbd-CnW3NUIu.cjs.map} +1 -1
  56. package/dist/{MKbd-COb7oh_k.js → MKbd-DjfGyajR.js} +2 -2
  57. package/dist/{MKbd-COb7oh_k.js.map → MKbd-DjfGyajR.js.map} +1 -1
  58. package/dist/MLink-C6uwA6db.cjs +2 -0
  59. package/dist/MLink-C6uwA6db.cjs.map +1 -0
  60. package/dist/MLink-ixg0xFFI.js +31 -0
  61. package/dist/MLink-ixg0xFFI.js.map +1 -0
  62. package/dist/MLoader-CViA3zBo.js +44 -0
  63. package/dist/MLoader-CViA3zBo.js.map +1 -0
  64. package/dist/MLoader-DUOoOoNE.cjs +2 -0
  65. package/dist/MLoader-DUOoOoNE.cjs.map +1 -0
  66. package/dist/MPagination-BTGenxWW.js +122 -0
  67. package/dist/MPagination-BTGenxWW.js.map +1 -0
  68. package/dist/MPagination-DitmdtCc.cjs +2 -0
  69. package/dist/MPagination-DitmdtCc.cjs.map +1 -0
  70. package/dist/MPopover-CBDbUOW6.js +183 -0
  71. package/dist/MPopover-CBDbUOW6.js.map +1 -0
  72. package/dist/MPopover-ZeoU9hb5.cjs +2 -0
  73. package/dist/MPopover-ZeoU9hb5.cjs.map +1 -0
  74. package/dist/{MSimpleGrid-Ui8cI0ho.js → MSimpleGrid-C_QvLmck.js} +3 -3
  75. package/dist/MSimpleGrid-C_QvLmck.js.map +1 -0
  76. package/dist/MSimpleGrid-wgvjnxwM.cjs +2 -0
  77. package/dist/MSimpleGrid-wgvjnxwM.cjs.map +1 -0
  78. package/dist/{MSkeleton-Dhu-loDO.js → MSkeleton-BpcpBBJq.js} +12 -10
  79. package/dist/MSkeleton-BpcpBBJq.js.map +1 -0
  80. package/dist/MSkeleton-DuAN8Vcv.cjs +2 -0
  81. package/dist/MSkeleton-DuAN8Vcv.cjs.map +1 -0
  82. package/dist/MSlider-CLASUc2H.js +134 -0
  83. package/dist/MSlider-CLASUc2H.js.map +1 -0
  84. package/dist/MSlider-hONQBulE.cjs +2 -0
  85. package/dist/MSlider-hONQBulE.cjs.map +1 -0
  86. package/dist/MStack-BwAFeGGg.js +39 -0
  87. package/dist/MStack-BwAFeGGg.js.map +1 -0
  88. package/dist/MStack-CGII4A-q.cjs +2 -0
  89. package/dist/MStack-CGII4A-q.cjs.map +1 -0
  90. package/dist/MSubText-BeZk-fhz.js +17 -0
  91. package/dist/MSubText-BeZk-fhz.js.map +1 -0
  92. package/dist/MSubText-Dl1PfToZ.cjs +2 -0
  93. package/dist/MSubText-Dl1PfToZ.cjs.map +1 -0
  94. package/dist/MSurface-B_QnRLr5.js +74 -0
  95. package/dist/MSurface-B_QnRLr5.js.map +1 -0
  96. package/dist/MSurface-BrFo-JMJ.cjs +2 -0
  97. package/dist/MSurface-BrFo-JMJ.cjs.map +1 -0
  98. package/dist/MTag-BZrKN_DS.js +41 -0
  99. package/dist/MTag-BZrKN_DS.js.map +1 -0
  100. package/dist/MTag-DCE1vRJM.cjs +2 -0
  101. package/dist/MTag-DCE1vRJM.cjs.map +1 -0
  102. package/dist/MText-BUWQPoBM.js +45 -0
  103. package/dist/MText-BUWQPoBM.js.map +1 -0
  104. package/dist/MText-nsvLFsSv.cjs +2 -0
  105. package/dist/MText-nsvLFsSv.cjs.map +1 -0
  106. package/dist/MTooltip-BRSPJ3RY.js +100 -0
  107. package/dist/MTooltip-BRSPJ3RY.js.map +1 -0
  108. package/dist/MTooltip-Cj2Fxmzc.cjs +2 -0
  109. package/dist/MTooltip-Cj2Fxmzc.cjs.map +1 -0
  110. package/dist/MTreeView-BWCTlsU-.cjs +2 -0
  111. package/dist/MTreeView-BWCTlsU-.cjs.map +1 -0
  112. package/dist/MTreeView-CWcMwE-Z.js +554 -0
  113. package/dist/MTreeView-CWcMwE-Z.js.map +1 -0
  114. package/dist/calendar-2yhnCkGW.cjs +2 -0
  115. package/dist/calendar-2yhnCkGW.cjs.map +1 -0
  116. package/dist/calendar-DcNYDTVb.js +195 -0
  117. package/dist/calendar-DcNYDTVb.js.map +1 -0
  118. package/dist/calendar.cjs +1 -1
  119. package/dist/calendar.js +1 -1
  120. package/dist/{calendarDates-M_Dawj0j.js → calendarDates-Bpw_G_QR.js} +30 -19
  121. package/dist/calendarDates-Bpw_G_QR.js.map +1 -0
  122. package/dist/calendarDates-Cg0nm69Y.cjs +2 -0
  123. package/dist/calendarDates-Cg0nm69Y.cjs.map +1 -0
  124. package/dist/cards-Bp886TRb.cjs +2 -0
  125. package/dist/cards-Bp886TRb.cjs.map +1 -0
  126. package/dist/cards-BvER6Gx0.js +1277 -0
  127. package/dist/cards-BvER6Gx0.js.map +1 -0
  128. package/dist/cards.cjs +1 -1
  129. package/dist/cards.js +2 -2
  130. package/dist/{cn-YER3QsV1.js → cn-CUSXNnjF.js} +1 -1
  131. package/dist/{cn-YER3QsV1.js.map → cn-CUSXNnjF.js.map} +1 -1
  132. package/dist/{cn-CU5TNITO.cjs → cn-DYFxgzi2.cjs} +1 -1
  133. package/dist/{cn-CU5TNITO.cjs.map → cn-DYFxgzi2.cjs.map} +1 -1
  134. package/dist/components/cards/MCardDaySchedule/MCardDaySchedule.d.ts +1 -1
  135. package/dist/components/cards/MCardDocumentTree/MCardDocumentTree.d.ts +1 -1
  136. package/dist/components/cards/MCardGrid/MCardGrid.d.ts +1 -1
  137. package/dist/components/cards/MCardPayment/MCardPayment.d.ts +1 -1
  138. package/dist/components/cards/MCardPayment/MCardPayment.types.d.ts +4 -0
  139. package/dist/components/cards/MCardPaymentMethod/MCardPaymentMethod.d.ts +1 -1
  140. package/dist/components/cards/MStatCard/MStatCard.d.ts +1 -1
  141. package/dist/components/controls/MCheckbox/MCheckbox.types.d.ts +6 -0
  142. package/dist/components/controls/MLoadMore/MLoadMore.d.ts +1 -1
  143. package/dist/components/controls/MSlider/MSlider.d.ts +1 -1
  144. package/dist/components/controls/MSlider/MSlider.types.d.ts +5 -0
  145. package/dist/components/data/MTreeView/MTreeView.d.ts +1 -1
  146. package/dist/components/data/MTreeView/MTreeView.types.d.ts +6 -0
  147. package/dist/components/data/MWeekGrid/MWeekGrid.d.ts +1 -1
  148. package/dist/components/data/MWeekGrid/MWeekGrid.types.d.ts +9 -3
  149. package/dist/components/display/MCodeBlock/MCodeBlock.d.ts +1 -1
  150. package/dist/components/dropdowns/MAutocomplete/MAutocomplete.d.ts +1 -1
  151. package/dist/components/dropdowns/MAutocomplete/MAutocomplete.types.d.ts +8 -2
  152. package/dist/components/dropdowns/MSelect/MSelect.d.ts +1 -1
  153. package/dist/components/dropdowns/shared/TimeColumnListbox.d.ts +20 -0
  154. package/dist/components/feedback/MAlert/MAlert.d.ts +1 -1
  155. package/dist/components/feedback/MBadge/MBadge.d.ts +1 -1
  156. package/dist/components/feedback/MBanner/MBanner.d.ts +1 -1
  157. package/dist/components/feedback/MLoader/MLoader.d.ts +1 -1
  158. package/dist/components/feedback/MSpinner/MSpinner.d.ts +1 -1
  159. package/dist/components/feedback/MTag/MTag.d.ts +1 -1
  160. package/dist/components/inputs/MInput/MInput.types.d.ts +6 -1
  161. package/dist/components/inputs/MInput/useFormatCaret.d.ts +8 -0
  162. package/dist/components/layout/MCanvasGrid/MCanvasGrid.types.d.ts +5 -0
  163. package/dist/components/layout/MContainer/MContainer.d.ts +1 -1
  164. package/dist/components/layout/MDivider/MDivider.d.ts +1 -1
  165. package/dist/components/layout/MFooter/MFooter.d.ts +1 -1
  166. package/dist/components/layout/MHeader/MHeader.d.ts +1 -1
  167. package/dist/components/layout/MInline/MInline.d.ts +1 -1
  168. package/dist/components/layout/MNavbar/MNavbar.d.ts +1 -1
  169. package/dist/components/layout/MNavbar/MNavbar.types.d.ts +2 -0
  170. package/dist/components/layout/MSection/MSection.d.ts +1 -1
  171. package/dist/components/layout/MStack/MStack.d.ts +1 -1
  172. package/dist/components/layout/MStickyPanel/MStickyPanel.types.d.ts +4 -0
  173. package/dist/components/layout/MSurface/MSurface.d.ts +1 -1
  174. package/dist/components/media/MAvatar/MAvatar.d.ts +1 -1
  175. package/dist/components/media/MAvatar/MAvatar.types.d.ts +10 -0
  176. package/dist/components/media/MCarousel/MCarousel.d.ts +1 -1
  177. package/dist/components/media/MImage/MImage.d.ts +1 -1
  178. package/dist/components/media/carouselA11y.d.ts +9 -0
  179. package/dist/components/overlays/MCommandPalette/MCommandPalette.d.ts +1 -1
  180. package/dist/components/overlays/MDropdownMenu/MDropdownMenu.d.ts +4 -2
  181. package/dist/components/overlays/MDropdownMenu/MDropdownMenu.types.d.ts +3 -1
  182. package/dist/components/overlays/MPopconfirm/MPopconfirm.d.ts +1 -1
  183. package/dist/components/overlays/scrollLock.d.ts +14 -0
  184. package/dist/components/primitives/MPopover/MPopover.d.ts +1 -1
  185. package/dist/components/primitives/MPopover/MPopover.types.d.ts +32 -1
  186. package/dist/components/primitives/MPopover/popoverStack.d.ts +6 -0
  187. package/dist/components/typography/MHeading/MHeading.d.ts +2 -3
  188. package/dist/components/typography/MSubText/MSubText.d.ts +1 -1
  189. package/dist/components/typography/MText/MText.d.ts +1 -1
  190. package/dist/controls-B4Dxaab4.js +491 -0
  191. package/dist/controls-B4Dxaab4.js.map +1 -0
  192. package/dist/controls-CyXEIOXD.cjs +2 -0
  193. package/dist/controls-CyXEIOXD.cjs.map +1 -0
  194. package/dist/controls.cjs +1 -1
  195. package/dist/controls.js +5 -5
  196. package/dist/creditCards-Bo2mrc53.cjs +2 -0
  197. package/dist/creditCards-Bo2mrc53.cjs.map +1 -0
  198. package/dist/{creditCards-D_iWmtG6.js → creditCards-DmDOyvcw.js} +20 -31
  199. package/dist/creditCards-DmDOyvcw.js.map +1 -0
  200. package/dist/data-BM3KG8oN.cjs +2 -0
  201. package/dist/data-BM3KG8oN.cjs.map +1 -0
  202. package/dist/data-qnR8OBmj.js +808 -0
  203. package/dist/data-qnR8OBmj.js.map +1 -0
  204. package/dist/data.cjs +1 -1
  205. package/dist/data.js +2 -2
  206. package/dist/{dateUtils-CUY6CRCf.js → dateUtils-B-ToNZq_.js} +5 -6
  207. package/dist/dateUtils-B-ToNZq_.js.map +1 -0
  208. package/dist/dateUtils-z2L7ZaxA.cjs +2 -0
  209. package/dist/dateUtils-z2L7ZaxA.cjs.map +1 -0
  210. package/dist/display-BLMOBofj.cjs +3 -0
  211. package/dist/display-BLMOBofj.cjs.map +1 -0
  212. package/dist/display-Dlb79lkA.js +968 -0
  213. package/dist/display-Dlb79lkA.js.map +1 -0
  214. package/dist/display.cjs +1 -1
  215. package/dist/display.js +2 -2
  216. package/dist/dropdowns-2_7VMEDo.js +2009 -0
  217. package/dist/dropdowns-2_7VMEDo.js.map +1 -0
  218. package/dist/dropdowns-DN7j8J-V.cjs +2 -0
  219. package/dist/dropdowns-DN7j8J-V.cjs.map +1 -0
  220. package/dist/dropdowns.cjs +1 -1
  221. package/dist/dropdowns.js +1 -1
  222. package/dist/feedback-CECayytY.js +335 -0
  223. package/dist/feedback-CECayytY.js.map +1 -0
  224. package/dist/feedback-paV8Ls-h.cjs +2 -0
  225. package/dist/feedback-paV8Ls-h.cjs.map +1 -0
  226. package/dist/feedback.cjs +1 -1
  227. package/dist/feedback.js +5 -5
  228. package/dist/form-Br56h5EF.cjs +2 -0
  229. package/dist/form-Br56h5EF.cjs.map +1 -0
  230. package/dist/form-CJmMZgsH.js +165 -0
  231. package/dist/form-CJmMZgsH.js.map +1 -0
  232. package/dist/form.cjs +1 -1
  233. package/dist/form.js +1 -1
  234. package/dist/{formatters-CNjg_h7-.cjs → formatters-CauWlsnM.cjs} +1 -1
  235. package/dist/{formatters-CNjg_h7-.cjs.map → formatters-CauWlsnM.cjs.map} +1 -1
  236. package/dist/{formatters-T0vvjMtB.js → formatters-Doqdu_w1.js} +1 -1
  237. package/dist/{formatters-T0vvjMtB.js.map → formatters-Doqdu_w1.js.map} +1 -1
  238. package/dist/frameworkTexts-CaqdiKHW.cjs +2 -0
  239. package/dist/frameworkTexts-CaqdiKHW.cjs.map +1 -0
  240. package/dist/frameworkTexts-o43FqY1A.js +505 -0
  241. package/dist/frameworkTexts-o43FqY1A.js.map +1 -0
  242. package/dist/i18n/MI18nProvider.d.ts +6 -1
  243. package/dist/i18n/frameworkTexts.d.ts +511 -0
  244. package/dist/i18n/index.d.ts +1 -0
  245. package/dist/i18n.cjs +1 -1
  246. package/dist/i18n.js +2 -2
  247. package/dist/icons-Bp8bB9TP.cjs +2 -0
  248. package/dist/icons-Bp8bB9TP.cjs.map +1 -0
  249. package/dist/{icons-CBMl-kOM.js → icons-IqEBmGh3.js} +1223 -1220
  250. package/dist/icons-IqEBmGh3.js.map +1 -0
  251. package/dist/icons.cjs +1 -1
  252. package/dist/icons.js +1 -1
  253. package/dist/illustrations.cjs +1 -1
  254. package/dist/illustrations.js +1 -1
  255. package/dist/index.cjs +1 -1
  256. package/dist/index.d.ts +4 -2
  257. package/dist/index.js +56 -56
  258. package/dist/inputs-C0BJzlA-.js +1923 -0
  259. package/dist/inputs-C0BJzlA-.js.map +1 -0
  260. package/dist/inputs-CvNBBLFA.cjs +2 -0
  261. package/dist/inputs-CvNBBLFA.cjs.map +1 -0
  262. package/dist/inputs.cjs +1 -1
  263. package/dist/inputs.js +4 -4
  264. package/dist/layout-BSFqGXLZ.js +1101 -0
  265. package/dist/layout-BSFqGXLZ.js.map +1 -0
  266. package/dist/layout-MKqvUkPv.cjs +2 -0
  267. package/dist/layout-MKqvUkPv.cjs.map +1 -0
  268. package/dist/layout.cjs +1 -1
  269. package/dist/layout.js +6 -6
  270. package/dist/{layoutProps-Ck4VtGm9.cjs → layoutProps-B8y2XwHy.cjs} +1 -1
  271. package/dist/{layoutProps-Ck4VtGm9.cjs.map → layoutProps-B8y2XwHy.cjs.map} +1 -1
  272. package/dist/{layoutProps-Cl6d1KmH.js → layoutProps-CE5-ghKw.js} +1 -1
  273. package/dist/{layoutProps-Cl6d1KmH.js.map → layoutProps-CE5-ghKw.js.map} +1 -1
  274. package/dist/{licensing-f5KYVz7D.js → licensing-BKmoAdfr.js} +5 -4
  275. package/dist/licensing-BKmoAdfr.js.map +1 -0
  276. package/dist/licensing-DVgjkw-s.cjs +2 -0
  277. package/dist/licensing-DVgjkw-s.cjs.map +1 -0
  278. package/dist/media-fiasAbBv.js +485 -0
  279. package/dist/media-fiasAbBv.js.map +1 -0
  280. package/dist/media-tr1s386v.cjs +2 -0
  281. package/dist/media-tr1s386v.cjs.map +1 -0
  282. package/dist/media.cjs +1 -1
  283. package/dist/media.js +2 -2
  284. package/dist/overlays-Df-NpmkW.cjs +2 -0
  285. package/dist/overlays-Df-NpmkW.cjs.map +1 -0
  286. package/dist/overlays-W0WW3fn7.js +607 -0
  287. package/dist/overlays-W0WW3fn7.js.map +1 -0
  288. package/dist/overlays.cjs +1 -1
  289. package/dist/overlays.js +3 -3
  290. package/dist/primitives.cjs +1 -1
  291. package/dist/primitives.js +2 -2
  292. package/dist/radioGroupKeys-Bm-Qeh8G.js +28 -0
  293. package/dist/radioGroupKeys-Bm-Qeh8G.js.map +1 -0
  294. package/dist/radioGroupKeys-COL8uXbH.cjs +2 -0
  295. package/dist/radioGroupKeys-COL8uXbH.cjs.map +1 -0
  296. package/dist/{relativeTime-Cr-NVzij.js → relativeTime-BqCuaBqb.js} +1 -1
  297. package/dist/{relativeTime-Cr-NVzij.js.map → relativeTime-BqCuaBqb.js.map} +1 -1
  298. package/dist/{relativeTime-DgYBUaVm.cjs → relativeTime-DUbW4O44.cjs} +1 -1
  299. package/dist/{relativeTime-DgYBUaVm.cjs.map → relativeTime-DUbW4O44.cjs.map} +1 -1
  300. package/dist/scrollLock-C9P9o6wH.cjs +2 -0
  301. package/dist/scrollLock-C9P9o6wH.cjs.map +1 -0
  302. package/dist/scrollLock-D27VmgPV.js +14 -0
  303. package/dist/scrollLock-D27VmgPV.js.map +1 -0
  304. package/dist/style-runtime.cjs +1 -1
  305. package/dist/style-runtime.js +1 -1
  306. package/dist/styles.css +1 -1
  307. package/dist/theme/MThemeProvider.d.ts +18 -1
  308. package/dist/theme/index.d.ts +2 -2
  309. package/dist/{theme-DAOU1aPs.js → theme-B_juOenJ.js} +71 -61
  310. package/dist/theme-B_juOenJ.js.map +1 -0
  311. package/dist/theme-ByPZH0dh.cjs +2 -0
  312. package/dist/theme-ByPZH0dh.cjs.map +1 -0
  313. package/dist/theme.cjs +1 -1
  314. package/dist/theme.js +2 -2
  315. package/dist/{typography-C806GYT4.js → typography-DNcB8dOy.js} +3 -3
  316. package/dist/{typography-C806GYT4.js.map → typography-DNcB8dOy.js.map} +1 -1
  317. package/dist/{typography-4v01oNWx.cjs → typography-I7aeG8pH.cjs} +2 -2
  318. package/dist/{typography-4v01oNWx.cjs.map → typography-I7aeG8pH.cjs.map} +1 -1
  319. package/dist/typography.cjs +1 -1
  320. package/dist/typography.js +6 -6
  321. package/dist/useGhostText-CKsb8Ufa.js +240 -0
  322. package/dist/useGhostText-CKsb8Ufa.js.map +1 -0
  323. package/dist/useGhostText-DO-tfxS0.cjs +2 -0
  324. package/dist/useGhostText-DO-tfxS0.cjs.map +1 -0
  325. package/dist/useModalLayer-CpOPSDbf.js +128 -0
  326. package/dist/useModalLayer-CpOPSDbf.js.map +1 -0
  327. package/dist/useModalLayer-Cyt93Prs.cjs +2 -0
  328. package/dist/useModalLayer-Cyt93Prs.cjs.map +1 -0
  329. package/dist/utils/calendarDates.d.ts +5 -0
  330. package/dist/utils/radioGroupKeys.d.ts +9 -0
  331. package/dist/utils/useDateGridNav.d.ts +39 -0
  332. package/dist/utils/useGhostText.d.ts +2 -1
  333. package/dist/utils/useKeyboardNav.d.ts +51 -5
  334. package/dist/utils/useModalLayer.d.ts +4 -0
  335. package/dist/utils/useRovingToolbar.d.ts +26 -0
  336. package/dist/utils/validationMessages.d.ts +15 -0
  337. package/dist/utils.cjs +1 -1
  338. package/dist/utils.entry.d.ts +3 -1
  339. package/dist/utils.js +11 -11
  340. package/dist/validationMessages-BFimXxlT.js +23 -0
  341. package/dist/validationMessages-BFimXxlT.js.map +1 -0
  342. package/dist/validationMessages-iHu7apWr.cjs +2 -0
  343. package/dist/validationMessages-iHu7apWr.cjs.map +1 -0
  344. package/dist/validators-SZmLxnir.cjs +2 -0
  345. package/dist/validators-SZmLxnir.cjs.map +1 -0
  346. package/dist/{validators-DVYOtFnw.js → validators-ULebNme2.js} +107 -106
  347. package/dist/validators-ULebNme2.js.map +1 -0
  348. package/package.json +1 -1
  349. package/dist/MAvatar-DHNB3829.cjs +0 -2
  350. package/dist/MAvatar-DHNB3829.cjs.map +0 -1
  351. package/dist/MAvatar-GeRL-CNO.js +0 -63
  352. package/dist/MAvatar-GeRL-CNO.js.map +0 -1
  353. package/dist/MButton-CEwo8lUB.js +0 -115
  354. package/dist/MButton-CEwo8lUB.js.map +0 -1
  355. package/dist/MButton-CnAr77Za.cjs +0 -2
  356. package/dist/MButton-CnAr77Za.cjs.map +0 -1
  357. package/dist/MCard-BqSkGAgf.js.map +0 -1
  358. package/dist/MCard-P8OoswWM.cjs.map +0 -1
  359. package/dist/MCheckbox-BxFBADcE.js +0 -59
  360. package/dist/MCheckbox-BxFBADcE.js.map +0 -1
  361. package/dist/MCheckbox-DozwF2ai.cjs +0 -2
  362. package/dist/MCheckbox-DozwF2ai.cjs.map +0 -1
  363. package/dist/MConflictIllustration-2QL-BHYv.cjs +0 -2
  364. package/dist/MConflictIllustration-2QL-BHYv.cjs.map +0 -1
  365. package/dist/MConflictIllustration-znC7ijmP.js.map +0 -1
  366. package/dist/MDetailList-CThQvoyf.cjs +0 -2
  367. package/dist/MDetailList-CThQvoyf.cjs.map +0 -1
  368. package/dist/MDetailList-Cx9H81xT.js +0 -98
  369. package/dist/MDetailList-Cx9H81xT.js.map +0 -1
  370. package/dist/MDropdownMenu-DnKcCyW6.cjs +0 -2
  371. package/dist/MDropdownMenu-DnKcCyW6.cjs.map +0 -1
  372. package/dist/MDropdownMenu-DxbKN7Ui.js +0 -172
  373. package/dist/MDropdownMenu-DxbKN7Ui.js.map +0 -1
  374. package/dist/MGrid-BkRSGN2t.cjs +0 -2
  375. package/dist/MGrid-BkRSGN2t.cjs.map +0 -1
  376. package/dist/MGrid-CIz-2i6X.js +0 -265
  377. package/dist/MGrid-CIz-2i6X.js.map +0 -1
  378. package/dist/MHeading-AYQ8_GFP.cjs +0 -2
  379. package/dist/MHeading-AYQ8_GFP.cjs.map +0 -1
  380. package/dist/MHeading-DcGxUMwC.js +0 -21
  381. package/dist/MHeading-DcGxUMwC.js.map +0 -1
  382. package/dist/MI18nProvider-CqAwaswx.cjs +0 -2
  383. package/dist/MI18nProvider-CqAwaswx.cjs.map +0 -1
  384. package/dist/MI18nProvider-VH14CI8u.js +0 -72
  385. package/dist/MI18nProvider-VH14CI8u.js.map +0 -1
  386. package/dist/MInput-BYj2BdUe.cjs +0 -2
  387. package/dist/MInput-BYj2BdUe.cjs.map +0 -1
  388. package/dist/MInput-nodE-CZF.js +0 -188
  389. package/dist/MInput-nodE-CZF.js.map +0 -1
  390. package/dist/MInputCVC-9XWryaTz.cjs +0 -2
  391. package/dist/MInputCVC-9XWryaTz.cjs.map +0 -1
  392. package/dist/MInputCVC-CrDTaUXm.js +0 -321
  393. package/dist/MInputCVC-CrDTaUXm.js.map +0 -1
  394. package/dist/MInputSearch-BMgCHjFk.js +0 -43
  395. package/dist/MInputSearch-BMgCHjFk.js.map +0 -1
  396. package/dist/MInputSearch-BiVI1jNc.cjs +0 -2
  397. package/dist/MInputSearch-BiVI1jNc.cjs.map +0 -1
  398. package/dist/MLink-CAl6N6_z.js +0 -31
  399. package/dist/MLink-CAl6N6_z.js.map +0 -1
  400. package/dist/MLink-Dk_ReE6i.cjs +0 -2
  401. package/dist/MLink-Dk_ReE6i.cjs.map +0 -1
  402. package/dist/MLoader-CYp0OJU_.js +0 -41
  403. package/dist/MLoader-CYp0OJU_.js.map +0 -1
  404. package/dist/MLoader-DvmFle31.cjs +0 -2
  405. package/dist/MLoader-DvmFle31.cjs.map +0 -1
  406. package/dist/MPagination-E7IixIeo.js +0 -113
  407. package/dist/MPagination-E7IixIeo.js.map +0 -1
  408. package/dist/MPagination-reDU9xTW.cjs +0 -2
  409. package/dist/MPagination-reDU9xTW.cjs.map +0 -1
  410. package/dist/MPopover-8gYD3Ogq.js +0 -118
  411. package/dist/MPopover-8gYD3Ogq.js.map +0 -1
  412. package/dist/MPopover-B3npyAkL.cjs +0 -2
  413. package/dist/MPopover-B3npyAkL.cjs.map +0 -1
  414. package/dist/MPortal-Ba2Sxset.js +0 -10
  415. package/dist/MPortal-Ba2Sxset.js.map +0 -1
  416. package/dist/MPortal-CuBXhhl_.cjs +0 -2
  417. package/dist/MPortal-CuBXhhl_.cjs.map +0 -1
  418. package/dist/MSimpleGrid-BchGYPMi.cjs +0 -2
  419. package/dist/MSimpleGrid-BchGYPMi.cjs.map +0 -1
  420. package/dist/MSimpleGrid-Ui8cI0ho.js.map +0 -1
  421. package/dist/MSkeleton-DPa_G_2X.cjs +0 -2
  422. package/dist/MSkeleton-DPa_G_2X.cjs.map +0 -1
  423. package/dist/MSkeleton-Dhu-loDO.js.map +0 -1
  424. package/dist/MSlider-BRjhyBSc.js +0 -75
  425. package/dist/MSlider-BRjhyBSc.js.map +0 -1
  426. package/dist/MSlider-w5214a-W.cjs +0 -2
  427. package/dist/MSlider-w5214a-W.cjs.map +0 -1
  428. package/dist/MStack-Dt-rWvg3.js +0 -39
  429. package/dist/MStack-Dt-rWvg3.js.map +0 -1
  430. package/dist/MStack-nc6Y_9K3.cjs +0 -2
  431. package/dist/MStack-nc6Y_9K3.cjs.map +0 -1
  432. package/dist/MSubText-B0tXiuAp.js +0 -17
  433. package/dist/MSubText-B0tXiuAp.js.map +0 -1
  434. package/dist/MSubText-C6v6Exa2.cjs +0 -2
  435. package/dist/MSubText-C6v6Exa2.cjs.map +0 -1
  436. package/dist/MSurface-BjE-mL1L.cjs +0 -2
  437. package/dist/MSurface-BjE-mL1L.cjs.map +0 -1
  438. package/dist/MSurface-CpDJCdb5.js +0 -74
  439. package/dist/MSurface-CpDJCdb5.js.map +0 -1
  440. package/dist/MTag-BgOxiahL.cjs +0 -2
  441. package/dist/MTag-BgOxiahL.cjs.map +0 -1
  442. package/dist/MTag-cw3cIGHX.js +0 -41
  443. package/dist/MTag-cw3cIGHX.js.map +0 -1
  444. package/dist/MText-BDI4mdw8.cjs +0 -2
  445. package/dist/MText-BDI4mdw8.cjs.map +0 -1
  446. package/dist/MText-DhbAjtUE.js +0 -45
  447. package/dist/MText-DhbAjtUE.js.map +0 -1
  448. package/dist/MTooltip-BAgHlv5I.cjs +0 -2
  449. package/dist/MTooltip-BAgHlv5I.cjs.map +0 -1
  450. package/dist/MTooltip-CJxvlkOX.js +0 -92
  451. package/dist/MTooltip-CJxvlkOX.js.map +0 -1
  452. package/dist/MTreeView-DsBnYQMT.js +0 -315
  453. package/dist/MTreeView-DsBnYQMT.js.map +0 -1
  454. package/dist/MTreeView-LiJ5o-zy.cjs +0 -2
  455. package/dist/MTreeView-LiJ5o-zy.cjs.map +0 -1
  456. package/dist/calendar-Bq6NMNnS.js +0 -193
  457. package/dist/calendar-Bq6NMNnS.js.map +0 -1
  458. package/dist/calendar-C57BH8Nd.cjs +0 -2
  459. package/dist/calendar-C57BH8Nd.cjs.map +0 -1
  460. package/dist/calendarDates-M_Dawj0j.js.map +0 -1
  461. package/dist/calendarDates-qm047RW2.cjs +0 -2
  462. package/dist/calendarDates-qm047RW2.cjs.map +0 -1
  463. package/dist/cards-D4xJVd4q.js +0 -1227
  464. package/dist/cards-D4xJVd4q.js.map +0 -1
  465. package/dist/cards-Du6dbZSQ.cjs +0 -2
  466. package/dist/cards-Du6dbZSQ.cjs.map +0 -1
  467. package/dist/controls-BKoc_yel.js +0 -475
  468. package/dist/controls-BKoc_yel.js.map +0 -1
  469. package/dist/controls-Ck-PMt__.cjs +0 -2
  470. package/dist/controls-Ck-PMt__.cjs.map +0 -1
  471. package/dist/creditCards-D_HwRUBz.cjs +0 -2
  472. package/dist/creditCards-D_HwRUBz.cjs.map +0 -1
  473. package/dist/creditCards-D_iWmtG6.js.map +0 -1
  474. package/dist/data-CdQximqm.js +0 -689
  475. package/dist/data-CdQximqm.js.map +0 -1
  476. package/dist/data-PS4ygCyj.cjs +0 -2
  477. package/dist/data-PS4ygCyj.cjs.map +0 -1
  478. package/dist/dateUtils-CUY6CRCf.js.map +0 -1
  479. package/dist/dateUtils-Dq1vaA-D.cjs +0 -2
  480. package/dist/dateUtils-Dq1vaA-D.cjs.map +0 -1
  481. package/dist/display-YC1fVpXA.js +0 -782
  482. package/dist/display-YC1fVpXA.js.map +0 -1
  483. package/dist/display-slIo1bQI.cjs +0 -3
  484. package/dist/display-slIo1bQI.cjs.map +0 -1
  485. package/dist/dropdowns-DFbUoZ8Q.cjs +0 -2
  486. package/dist/dropdowns-DFbUoZ8Q.cjs.map +0 -1
  487. package/dist/dropdowns-nW3MY5XG.js +0 -1715
  488. package/dist/dropdowns-nW3MY5XG.js.map +0 -1
  489. package/dist/feedback-6MNb2Xyk.cjs +0 -2
  490. package/dist/feedback-6MNb2Xyk.cjs.map +0 -1
  491. package/dist/feedback-CPwJaQHY.js +0 -259
  492. package/dist/feedback-CPwJaQHY.js.map +0 -1
  493. package/dist/form-CMsZo6Dm.cjs +0 -2
  494. package/dist/form-CMsZo6Dm.cjs.map +0 -1
  495. package/dist/form-WU6DcQGD.js +0 -164
  496. package/dist/form-WU6DcQGD.js.map +0 -1
  497. package/dist/frameworkTexts-BSXUtXOp.cjs +0 -2
  498. package/dist/frameworkTexts-BSXUtXOp.cjs.map +0 -1
  499. package/dist/frameworkTexts-DP5RUl19.js +0 -131
  500. package/dist/frameworkTexts-DP5RUl19.js.map +0 -1
  501. package/dist/icons-CBMl-kOM.js.map +0 -1
  502. package/dist/icons-D3n9-919.cjs +0 -2
  503. package/dist/icons-D3n9-919.cjs.map +0 -1
  504. package/dist/inputs-B7rGMLMr.js +0 -1753
  505. package/dist/inputs-B7rGMLMr.js.map +0 -1
  506. package/dist/inputs-BiN62hgH.cjs +0 -2
  507. package/dist/inputs-BiN62hgH.cjs.map +0 -1
  508. package/dist/layout-BMggJ_qO.cjs +0 -2
  509. package/dist/layout-BMggJ_qO.cjs.map +0 -1
  510. package/dist/layout-DBYHyCTr.js +0 -883
  511. package/dist/layout-DBYHyCTr.js.map +0 -1
  512. package/dist/licensing-Be3g-PJt.cjs +0 -2
  513. package/dist/licensing-Be3g-PJt.cjs.map +0 -1
  514. package/dist/licensing-f5KYVz7D.js.map +0 -1
  515. package/dist/media-BPzMgzqE.js +0 -405
  516. package/dist/media-BPzMgzqE.js.map +0 -1
  517. package/dist/media-D63hxCAJ.cjs +0 -2
  518. package/dist/media-D63hxCAJ.cjs.map +0 -1
  519. package/dist/overlays-CCeYD6hT.js +0 -555
  520. package/dist/overlays-CCeYD6hT.js.map +0 -1
  521. package/dist/overlays-CsRN5OG8.cjs +0 -2
  522. package/dist/overlays-CsRN5OG8.cjs.map +0 -1
  523. package/dist/popoverStack--0r2oJCD.js +0 -44
  524. package/dist/popoverStack--0r2oJCD.js.map +0 -1
  525. package/dist/popoverStack-BmMk-VZJ.cjs +0 -2
  526. package/dist/popoverStack-BmMk-VZJ.cjs.map +0 -1
  527. package/dist/theme-CJuqObWL.cjs +0 -2
  528. package/dist/theme-CJuqObWL.cjs.map +0 -1
  529. package/dist/theme-DAOU1aPs.js.map +0 -1
  530. package/dist/useGhostText-DG0bzcao.js +0 -68
  531. package/dist/useGhostText-DG0bzcao.js.map +0 -1
  532. package/dist/useGhostText-mibV4s1-.cjs +0 -2
  533. package/dist/useGhostText-mibV4s1-.cjs.map +0 -1
  534. package/dist/useKeyboardNav-CCUoRMgm.cjs +0 -2
  535. package/dist/useKeyboardNav-CCUoRMgm.cjs.map +0 -1
  536. package/dist/useKeyboardNav-iEXOdEMB.js +0 -43
  537. package/dist/useKeyboardNav-iEXOdEMB.js.map +0 -1
  538. package/dist/useModalLayer-Bf4TcEz-.js +0 -58
  539. package/dist/useModalLayer-Bf4TcEz-.js.map +0 -1
  540. package/dist/useModalLayer-DxYhhgRO.cjs +0 -2
  541. package/dist/useModalLayer-DxYhhgRO.cjs.map +0 -1
  542. package/dist/utils/proActivationWarning.d.ts +0 -7
  543. package/dist/validators-B6yWdsu2.cjs +0 -2
  544. package/dist/validators-B6yWdsu2.cjs.map +0 -1
  545. package/dist/validators-DVYOtFnw.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overlays-W0WW3fn7.js","names":[],"sources":["../src/components/overlays/MModal/MModal.tsx","../src/components/overlays/MSheet/MSheet.tsx","../src/components/overlays/MCommandPalette/MCommandPalette.tsx","../src/components/overlays/MDrawer/MDrawer.tsx","../src/components/overlays/MPopconfirm/MPopconfirm.tsx"],"sourcesContent":["import {useEffect, useId, useState, useRef} from 'react'\nimport type {MouseEvent} from 'react'\nimport type {MModalProps} from './MModal.types'\nimport {MCard, MCardBody, MCardFooter, MCardHeader} from '../../cards'\nimport {MPortal} from '../../primitives'\nimport {cn} from '../../../utils/cn'\nimport {useModalLayer} from '../../../utils/useModalLayer'\nimport {lockBodyScroll} from '../scrollLock'\nimport './MModal.css'\n\nconst EXIT_DURATION = 540\n\n// Render blocking overlay content for dense details and mobile-friendly dialogs.\nexport function MModal({\n open,\n onClose,\n title,\n description,\n footer,\n size = 'md',\n closeOnBackdrop = true,\n closeOnEscape = true,\n className,\n children,\n ...rest\n}: MModalProps) {\n const titleId = useId()\n const [mounted, setMounted] = useState(false)\n const [closing, setClosing] = useState(false)\n const backdropRef = useRef<HTMLDivElement>(null)\n\n useModalLayer({active: open && mounted, containerRef: backdropRef, onEscape: closeOnEscape ? onClose : undefined})\n\n // Open → mount immediately\n useEffect(() => {\n if (open) {\n setMounted(true)\n setClosing(false)\n }\n }, [open])\n\n // Close → animate out, then unmount\n useEffect(() => {\n if (!open && mounted) {\n setClosing(true)\n const timer = setTimeout(() => {\n setMounted(false)\n setClosing(false)\n }, EXIT_DURATION)\n return () => clearTimeout(timer)\n }\n }, [open, mounted])\n\n useEffect(() => {\n if (!mounted) return\n return lockBodyScroll()\n }, [mounted])\n\n if (!mounted) return null\n\n const handleBackdropClick = (event: MouseEvent<HTMLDivElement>) => {\n if (!closeOnBackdrop) return\n if (event.target === event.currentTarget) onClose()\n }\n\n return (\n <MPortal>\n <div\n ref={backdropRef}\n className={cn('mineral-backdrop', 'modal-backdrop', closing && 'closing')}\n onMouseDown={handleBackdropClick}\n >\n <div className={'modal-shell'}>\n <MCard\n className={cn('modal', size, className)}\n role={'dialog'}\n aria-modal={'true'}\n aria-labelledby={title ? titleId : undefined}\n {...rest}\n >\n {(title || description) && (\n <MCardHeader>\n {title && (\n <div id={titleId} className={'modal-title'}>\n {title}\n </div>\n )}\n {description && <div className={'modal-description'}>{description}</div>}\n </MCardHeader>\n )}\n <MCardBody>{children}</MCardBody>\n {footer && <MCardFooter>{footer}</MCardFooter>}\n </MCard>\n </div>\n </div>\n </MPortal>\n )\n}\n","import {useEffect, useId, useRef, useState} from 'react'\nimport type {PointerEvent as ReactPointerEvent, MouseEvent} from 'react'\nimport type {MSheetProps, MSheetSize} from './MSheet.types'\nimport {MCard, MCardBody, MCardFooter, MCardHeader} from '../../cards'\nimport {MButton} from '../../controls'\nimport {MPortal} from '../../primitives'\nimport {MCloseIcon} from '../../../icons'\nimport {cn} from '../../../utils/cn'\nimport {useModalLayer} from '../../../utils/useModalLayer'\nimport {lockBodyScroll} from '../scrollLock'\nimport './MSheet.css'\nimport {useMCommonTexts} from '../../../i18n/frameworkTexts'\n\nconst EXIT_DURATION = 540\nconst CLOSE_DRAG_THRESHOLD = 72\n\nconst SHEET_HEIGHTS: Record<MSheetSize, string> = {\n sm: '32vh',\n md: '52vh',\n lg: '72vh',\n full: '92vh',\n}\n\nexport function MSheet({\n open,\n onClose,\n title,\n description,\n footer,\n size = 'md',\n closeOnBackdrop = true,\n closeOnEscape = true,\n className,\n children,\n style,\n ...rest\n}: MSheetProps) {\n const texts = useMCommonTexts()\n const titleId = useId()\n const [mounted, setMounted] = useState(false)\n const [closing, setClosing] = useState(false)\n const [dragOffset, setDragOffset] = useState(0)\n\n const dragStateRef = useRef<{pointerId: number; startY: number} | null>(null)\n const dragOffsetRef = useRef(0)\n const backdropRef = useRef<HTMLDivElement>(null)\n\n useModalLayer({active: open && mounted, containerRef: backdropRef, onEscape: closeOnEscape ? onClose : undefined})\n\n useEffect(() => {\n if (open) {\n setMounted(true)\n setClosing(false)\n setDragOffset(0)\n dragOffsetRef.current = 0\n }\n }, [open])\n\n useEffect(() => {\n if (!open && mounted) {\n setClosing(true)\n const timer = window.setTimeout(() => {\n setMounted(false)\n setClosing(false)\n }, EXIT_DURATION)\n return () => window.clearTimeout(timer)\n }\n }, [open, mounted])\n\n useEffect(() => {\n if (!mounted) return\n return lockBodyScroll()\n }, [mounted])\n\n function handleBackdropClick(event: MouseEvent<HTMLDivElement>) {\n if (closeOnBackdrop && event.target === event.currentTarget) {\n onClose()\n }\n }\n\n function handleHandlePointerDown(event: ReactPointerEvent<HTMLButtonElement>) {\n event.preventDefault()\n event.currentTarget.setPointerCapture(event.pointerId)\n\n dragStateRef.current = {\n pointerId: event.pointerId,\n startY: event.clientY,\n }\n setDragOffset(0)\n dragOffsetRef.current = 0\n }\n\n function handleHandlePointerMove(event: ReactPointerEvent<HTMLButtonElement>) {\n const dragState = dragStateRef.current\n if (!dragState || dragState.pointerId !== event.pointerId) {\n return\n }\n\n const nextOffset = Math.max(event.clientY - dragState.startY, 0)\n dragOffsetRef.current = nextOffset\n setDragOffset(nextOffset)\n }\n\n function finishDrag(pointerId: number) {\n const dragState = dragStateRef.current\n if (!dragState || dragState.pointerId !== pointerId) {\n return\n }\n\n dragStateRef.current = null\n\n if (dragOffsetRef.current > CLOSE_DRAG_THRESHOLD) {\n setDragOffset(0)\n dragOffsetRef.current = 0\n onClose()\n return\n }\n\n setDragOffset(0)\n dragOffsetRef.current = 0\n }\n\n if (!mounted) return null\n\n const resolvedHeight = SHEET_HEIGHTS[size]\n const transformStyle = dragOffset > 0 ? `translateY(${dragOffset}px)` : undefined\n\n return (\n <MPortal>\n <div\n ref={backdropRef}\n className={cn('mineral-backdrop', 'sheet-backdrop', closing && 'closing')}\n onMouseDown={handleBackdropClick}\n >\n <div className=\"sheet-shell\" style={{transform: transformStyle}}>\n <MCard\n className={cn('sheet', `size-${size}`, className)}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? titleId : undefined}\n style={{\n ...style,\n height: size === 'full' ? resolvedHeight : undefined,\n maxHeight: resolvedHeight,\n }}\n {...rest}\n >\n <button\n type=\"button\"\n className=\"sheet-grabber\"\n onPointerDown={handleHandlePointerDown}\n onPointerMove={handleHandlePointerMove}\n onPointerUp={(event) => finishDrag(event.pointerId)}\n onPointerCancel={(event) => finishDrag(event.pointerId)}\n // Enter / Space on the grabber produce a click with `detail === 0`;\n // keyboard users get the same \"close\" the drag gesture offers.\n // Pointer clicks (detail >= 1) stay drag-only.\n onClick={(event) => {\n if (event.detail === 0) onClose()\n }}\n aria-label={texts.dragToClose}\n >\n <span className=\"sheet-handle\" />\n </button>\n\n {(title || description) && (\n <MCardHeader className=\"sheet-header\">\n <div className=\"sheet-copy\">\n {title && (\n <div id={titleId} className=\"sheet-title\">\n {title}\n </div>\n )}\n {description && <div className=\"sheet-description\">{description}</div>}\n </div>\n <MButton\n variant=\"link\"\n color=\"neutral\"\n iconOnly\n size=\"sm\"\n onClick={onClose}\n aria-label={texts.close}\n className=\"sheet-close\"\n >\n <MCloseIcon />\n </MButton>\n </MCardHeader>\n )}\n\n <MCardBody className=\"sheet-body\">{children}</MCardBody>\n\n {footer && <MCardFooter className=\"sheet-footer\">{footer}</MCardFooter>}\n </MCard>\n </div>\n </div>\n </MPortal>\n )\n}\n","import {useEffect, useId, useMemo, useRef, useState} from 'react'\nimport type {KeyboardEvent as ReactKeyboardEvent, ReactNode} from 'react'\nimport type {MCommandPaletteItem, MCommandPaletteProps} from './MCommandPalette.types'\nimport {MButton} from '../../controls'\nimport {MInputSearch} from '../../inputs'\nimport {MCard, MCardBody, MCardHeader} from '../../cards'\nimport {MInline, MSimpleGrid, MStack} from '../../layout'\nimport {MSheet} from '../MSheet'\nimport {MTooltip} from '../MTooltip'\nimport {MBadge} from '../../feedback'\nimport {MLinkIcon, MSearchIcon} from '../../../icons'\nimport {MKbd, MHeading, MText} from '../../typography'\nimport {cn} from '../../../utils/cn'\nimport {useKeyboardNav} from '../../../utils/useKeyboardNav'\nimport {formatMText, useMCommandPaletteTexts} from '../../../i18n/frameworkTexts'\nimport './MCommandPalette.css'\n\nfunction normalizeText(value: ReactNode) {\n if (typeof value === 'string' || typeof value === 'number') {\n return value.toString()\n }\n\n return ''\n}\n\nfunction matchesShortcut(event: KeyboardEvent, shortcut: string) {\n const normalized = shortcut.toLowerCase().replace(/\\s+/g, '')\n const parts = normalized.split('+')\n const key = parts[parts.length - 1]\n\n if (!key) {\n return false\n }\n\n const expectsCtrl = parts.includes('ctrl')\n const expectsMeta = parts.includes('meta') || parts.includes('cmd')\n const expectsShift = parts.includes('shift')\n const expectsAlt = parts.includes('alt') || parts.includes('option')\n\n return (\n event.key.toLowerCase() === key &&\n !!expectsCtrl === event.ctrlKey &&\n !!expectsMeta === event.metaKey &&\n !!expectsShift === event.shiftKey &&\n !!expectsAlt === event.altKey\n )\n}\n\nfunction filterItems(items: MCommandPaletteItem[], query: string) {\n if (!query.trim()) {\n return items\n }\n\n const normalizedQuery = query.trim().toLowerCase()\n\n return items.filter((item) =>\n [\n normalizeText(item.title),\n normalizeText(item.description),\n normalizeText(item.group),\n normalizeText(item.actionLabel),\n ...(item.keywords ?? []),\n ].some((value) => value.toLowerCase().includes(normalizedQuery))\n )\n}\n\nfunction groupItems(items: MCommandPaletteItem[], generalLabel: string) {\n const groups = new Map<string, {label: ReactNode; items: MCommandPaletteItem[]}>()\n\n items.forEach((item) => {\n const key = normalizeText(item.group) || 'General'\n const current = groups.get(key) ?? {label: item.group ?? generalLabel, items: []}\n current.items.push(item)\n groups.set(key, current)\n })\n\n return Array.from(groups.values())\n}\n\nexport function MCommandPalette({\n items,\n featuredItems = [],\n open,\n defaultOpen = false,\n onOpenChange,\n onSelect,\n title: titleProp,\n description,\n trigger,\n shortcut = 'ctrl+k',\n placeholder: placeholderProp,\n emptyLabel: emptyLabelProp,\n footer,\n size = 'lg',\n closeOnSelect = true,\n}: MCommandPaletteProps) {\n const texts = useMCommandPaletteTexts()\n const title = titleProp ?? texts.title\n const placeholder = placeholderProp ?? texts.placeholder\n const emptyLabel = emptyLabelProp ?? texts.empty\n const [internalOpen, setInternalOpen] = useState(defaultOpen)\n const [query, setQuery] = useState('')\n const isControlled = open !== undefined\n const isOpen = isControlled ? open : internalOpen\n const inputRef = useRef<HTMLInputElement>(null)\n const baseId = useId()\n const listboxId = `${baseId}-listbox`\n\n function setOpenState(nextOpen: boolean) {\n if (!isControlled) {\n setInternalOpen(nextOpen)\n }\n\n onOpenChange?.(nextOpen)\n }\n\n const filteredItems = useMemo(() => filterItems(items, query), [items, query])\n const groupedItems = useMemo(\n () => groupItems(filteredItems, texts.generalGroup),\n [filteredItems, texts.generalGroup]\n )\n const flattenedItems = useMemo(() => groupedItems.flatMap((group) => group.items), [groupedItems])\n const featured = useMemo(() => (featuredItems.length ? featuredItems : items.slice(0, 6)), [featuredItems, items])\n\n function executeItem(item: MCommandPaletteItem) {\n item.onSelect?.()\n onSelect?.(item)\n\n if (!item.onSelect && item.href) {\n window.location.assign(item.href)\n }\n\n if (closeOnSelect) {\n setOpenState(false)\n setQuery('')\n resetIndex()\n }\n }\n\n // APG combobox: focus stays in the search field, the highlighted option is exposed\n // through aria-activedescendant.\n const {activeIndex, setActiveIndex, resetIndex, onKeyDown, activeDescendantId, getItemProps} = useKeyboardNav({\n itemCount: flattenedItems.length,\n isOpen,\n mode: 'activedescendant',\n onClose: () => setOpenState(false),\n onSelect: (index) => {\n const item = flattenedItems[index]\n\n if (item) {\n executeItem(item)\n }\n },\n })\n\n useEffect(() => {\n const handleKeydown = (event: KeyboardEvent) => {\n if (matchesShortcut(event, shortcut)) {\n event.preventDefault()\n setOpenState(true)\n }\n }\n\n window.addEventListener('keydown', handleKeydown)\n\n return () => {\n window.removeEventListener('keydown', handleKeydown)\n }\n }, [shortcut])\n\n useEffect(() => {\n if (!isOpen) {\n resetIndex()\n return\n }\n\n queueMicrotask(() => inputRef.current?.focus())\n }, [isOpen, resetIndex])\n\n const activeItemId = flattenedItems[activeIndex]?.id ?? null\n\n function handleSearchKeyDown(event: ReactKeyboardEvent<HTMLInputElement>) {\n // Home / End keep moving the caret inside the text field (APG combobox).\n if (event.key === 'Home' || event.key === 'End') return\n onKeyDown(event)\n }\n\n const hasResults = groupedItems.length > 0\n\n return (\n <>\n {trigger ?? (\n <MButton\n variant={'filled'}\n size={'sm'}\n color={'primary'}\n iconOnly\n startIcon={<MSearchIcon />}\n aria-label={typeof title === 'string' ? title : texts.open}\n onClick={() => setOpenState(true)}\n />\n )}\n\n <MSheet\n open={isOpen}\n onClose={() => setOpenState(false)}\n title={title}\n description={description}\n size={size}\n footer={footer}\n >\n <div className=\"command-palette-body\">\n <div className=\"command-palette-search\">\n <MInputSearch\n ref={inputRef}\n value={query}\n onChange={(event) => {\n setQuery(event.target.value)\n setActiveIndex(-1)\n }}\n onKeyDown={handleSearchKeyDown}\n placeholder={placeholder}\n clearable\n fullWidth\n inputProps={{\n role: 'combobox',\n 'aria-label': texts.searchLabel,\n 'aria-autocomplete': 'list',\n 'aria-expanded': hasResults,\n 'aria-controls': hasResults ? listboxId : undefined,\n 'aria-activedescendant': activeDescendantId,\n }}\n />\n <span className=\"command-palette-sr-only\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">\n {query.trim() ? formatMText(texts.resultsAnnouncement, {count: flattenedItems.length}) : ''}\n </span>\n </div>\n\n <div className=\"command-palette-grid\">\n <MCard stretch={false}>\n <MCardHeader>\n <MHeading level={4}>{texts.featured}</MHeading>\n <MText size={'sm'} tone={'muted'}>\n {texts.featuredDescription}\n </MText>\n </MCardHeader>\n <MCardBody>\n <MSimpleGrid columns={4}>\n {featured.map((item) => {\n const label = item.actionLabel ?? item.title\n const ariaLabel = typeof label === 'string' ? label : normalizeText(label)\n\n return (\n <MTooltip key={item.id} content={label}>\n <MButton\n variant={'ghost'}\n color={'primary'}\n component={item.component}\n to={item.to}\n href={item.href}\n target={item.target}\n rel={item.rel}\n startIcon={item.icon ?? <MLinkIcon />}\n iconOnly\n aria-label={ariaLabel || undefined}\n onClick={() => executeItem(item)}\n />\n </MTooltip>\n )\n })}\n </MSimpleGrid>\n </MCardBody>\n </MCard>\n\n <MCard stretch={false}>\n <MCardHeader>\n <MHeading level={4}>{texts.results}</MHeading>\n <MInline align={'center'} padding={'xs'}>\n <MText size={'sm'} tone={'muted'}>\n {formatMText(texts.resultsCount, {count: flattenedItems.length})}\n </MText>\n <MKbd>{shortcut.toUpperCase()}</MKbd>\n </MInline>\n </MCardHeader>\n <MCardBody>\n {hasResults ? (\n <MStack\n padding={'xs'}\n className=\"command-palette-results\"\n id={listboxId}\n role=\"listbox\"\n aria-label={texts.results}\n >\n {groupedItems.map((group, groupIndex) => (\n <MStack\n key={normalizeText(group.label) || 'general'}\n padding={'xs'}\n role=\"group\"\n aria-labelledby={`${listboxId}-group-${groupIndex}`}\n >\n <MText\n size={'sm'}\n tone={'muted'}\n id={`${listboxId}-group-${groupIndex}`}\n role=\"presentation\"\n >\n {group.label}\n </MText>\n {group.items.map((item) => {\n const index = flattenedItems.indexOf(item)\n const {id: optionId, ref: optionRef} = getItemProps(index)\n\n return (\n <button\n key={item.id}\n id={optionId}\n ref={optionRef}\n type=\"button\"\n role=\"option\"\n aria-selected={activeItemId === item.id}\n tabIndex={-1}\n className={cn(\n 'command-palette-item',\n activeItemId === item.id && 'active'\n )}\n // Keep focus in the search field so typing and arrows keep working.\n onMouseDown={(event) => event.preventDefault()}\n onMouseEnter={() => setActiveIndex(index)}\n onClick={() => executeItem(item)}\n >\n <span className=\"command-palette-item-icon\">\n {item.icon ?? <MLinkIcon />}\n </span>\n <span className=\"command-palette-item-copy\">\n <span className=\"command-palette-item-title\">\n {item.title}\n </span>\n {item.description && (\n <span className=\"command-palette-item-description\">\n {item.description}\n </span>\n )}\n </span>\n {item.badge && (\n <span className=\"command-palette-item-badge\">\n <MBadge color={'primary'} size={'sm'}>\n {item.badge}\n </MBadge>\n </span>\n )}\n </button>\n )\n })}\n </MStack>\n ))}\n </MStack>\n ) : (\n <MText tone={'muted'}>{emptyLabel}</MText>\n )}\n </MCardBody>\n </MCard>\n </div>\n </div>\n </MSheet>\n </>\n )\n}\n","import {Children, isValidElement, useEffect, useId, useState, useRef} from 'react'\nimport type {MouseEvent, ReactElement, ReactNode} from 'react'\nimport type {MDrawerProps, MDrawerSectionProps} from './MDrawer.types'\nimport {MPortal} from '../../primitives'\nimport {MButton} from '../../controls'\nimport {MCloseIcon} from '../../../icons'\nimport {cn} from '../../../utils/cn'\nimport {useModalLayer} from '../../../utils/useModalLayer'\nimport {lockBodyScroll} from '../scrollLock'\nimport './MDrawer.css'\nimport {useMCommonTexts} from '../../../i18n/frameworkTexts'\n\nconst EXIT_DURATION = 600\n\ntype DrawerSlotElement = ReactElement<MDrawerSectionProps>\n\nfunction isDrawerHeader(child: ReactNode): child is DrawerSlotElement {\n return isValidElement(child) && !!(child.type as any).__drawerHeader\n}\n\nfunction isDrawerBody(child: ReactNode): child is DrawerSlotElement {\n return isValidElement(child) && !!(child.type as any).__drawerBody\n}\n\nfunction isDrawerFooter(child: ReactNode): child is DrawerSlotElement {\n return isValidElement(child) && !!(child.type as any).__drawerFooter\n}\n\nexport function MDrawerHeader({children}: MDrawerSectionProps) {\n return <>{children}</>\n}\n;(MDrawerHeader as any).__drawerHeader = true\n\nexport function MDrawerBody({children}: MDrawerSectionProps) {\n return <>{children}</>\n}\n;(MDrawerBody as any).__drawerBody = true\n\nexport function MDrawerFooter({children}: MDrawerSectionProps) {\n return <>{children}</>\n}\n;(MDrawerFooter as any).__drawerFooter = true\n\nexport function MDrawer({\n open,\n onClose,\n side = 'right',\n size = 'md',\n overlay = true,\n closeOnBackdrop = true,\n closeOnEscape = true,\n className,\n children,\n ...rest\n}: MDrawerProps) {\n const texts = useMCommonTexts()\n const [mounted, setMounted] = useState(false)\n const [closing, setClosing] = useState(false)\n const backdropRef = useRef<HTMLDivElement>(null)\n const drawerRef = useRef<HTMLDivElement>(null)\n const titleId = useId()\n\n useModalLayer({active: open && mounted, containerRef: backdropRef, onEscape: closeOnEscape ? onClose : undefined})\n\n useEffect(() => {\n if (open) {\n setMounted(true)\n setClosing(false)\n }\n }, [open])\n\n useEffect(() => {\n if (!open && mounted) {\n setClosing(true)\n const timer = setTimeout(() => {\n setMounted(false)\n setClosing(false)\n }, EXIT_DURATION)\n return () => clearTimeout(timer)\n }\n }, [open, mounted])\n\n // A drawer without an overlay is non-modal: the page beside it stays usable,\n // so it neither locks scrolling nor blocks clicks.\n useEffect(() => {\n if (!mounted || !overlay) return\n return lockBodyScroll()\n }, [mounted, overlay])\n\n // Without an overlay the backdrop lets clicks through (`pointer-events: none`),\n // so \"click outside closes\" is detected on the document instead.\n const onCloseRef = useRef(onClose)\n useEffect(() => {\n onCloseRef.current = onClose\n }, [onClose])\n useEffect(() => {\n if (!open || !mounted || overlay || !closeOnBackdrop) return\n\n const handlePointerDown = (event: globalThis.MouseEvent) => {\n const target = event.target\n if (!(target instanceof Element)) return\n if (drawerRef.current?.contains(target)) return\n // Popovers, menus and other overlays opened from the drawer portal outside it.\n if (target.closest('.popover, .mineral-backdrop')) return\n onCloseRef.current()\n }\n\n document.addEventListener('mousedown', handlePointerDown)\n return () => document.removeEventListener('mousedown', handlePointerDown)\n }, [open, mounted, overlay, closeOnBackdrop])\n\n if (!mounted) return null\n\n const handleBackdropClick = (e: MouseEvent<HTMLDivElement>) => {\n if (closeOnBackdrop && e.target === e.currentTarget) onClose()\n }\n\n let header: ReactNode = null\n let headerProps: MDrawerSectionProps | null = null\n let bodyProps: MDrawerSectionProps | null = null\n let footer: ReactNode = null\n let footerProps: MDrawerSectionProps | null = null\n const body: ReactNode[] = []\n\n Children.forEach(children, (child) => {\n if (isDrawerHeader(child)) {\n header = child.props.children\n headerProps = child.props\n return\n }\n\n if (isDrawerBody(child)) {\n bodyProps = child.props\n body.push(child.props.children)\n return\n }\n\n if (isDrawerFooter(child)) {\n footer = child.props.children\n footerProps = child.props\n return\n }\n\n body.push(child)\n })\n\n const headerSection = headerProps ?? ({children: undefined} as MDrawerSectionProps)\n const bodySection = bodyProps ?? ({children: undefined} as MDrawerSectionProps)\n const footerSection = footerProps ?? ({children: undefined} as MDrawerSectionProps)\n const {\n children: _headerChildren,\n className: headerClassName,\n bordered: headerBordered = false,\n ...headerRest\n } = headerSection\n const {children: _bodyChildren, className: bodyClassName, ...bodyRest} = bodySection\n const {\n children: _footerChildren,\n className: footerClassName,\n bordered: footerBordered = false,\n ...footerRest\n } = footerSection\n\n return (\n <MPortal>\n <div\n ref={backdropRef}\n className={cn('mineral-backdrop', 'drawer-backdrop', !overlay && 'no-overlay', closing && 'closing')}\n onMouseDown={handleBackdropClick}\n >\n <div\n ref={drawerRef}\n className={cn('drawer', side, size, className)}\n role=\"dialog\"\n aria-modal={overlay ? 'true' : undefined}\n aria-labelledby={header ? titleId : undefined}\n {...rest}\n >\n {header && (\n <div\n {...headerRest}\n className={cn('drawer-header', headerBordered && 'bordered', headerClassName)}\n >\n <div id={titleId} className=\"drawer-title\">\n {header}\n </div>\n <MButton\n variant=\"link\"\n color=\"neutral\"\n iconOnly\n size=\"sm\"\n onClick={onClose}\n aria-label={texts.close}\n className=\"close\"\n >\n <MCloseIcon />\n </MButton>\n </div>\n )}\n <div {...bodyRest} className={cn('drawer-body', bodyClassName)}>\n {body}\n </div>\n {footer && (\n <div\n {...footerRest}\n className={cn('drawer-footer', footerBordered && 'bordered', footerClassName)}\n >\n {footer}\n </div>\n )}\n </div>\n </div>\n </MPortal>\n )\n}\n","import {useCallback, useId, useRef} from 'react'\nimport type {KeyboardEvent as ReactKeyboardEvent} from 'react'\nimport type {MPopconfirmProps} from './MPopconfirm.types'\nimport {MPopover} from '../../primitives'\nimport {MButton} from '../../controls'\nimport {cn} from '../../../utils/cn'\nimport {getTabbable} from '../../../utils/useModalLayer'\nimport {useMPopconfirmTexts} from '../../../i18n/frameworkTexts'\nimport './MPopconfirm.css'\n\nexport function MPopconfirm({\n title,\n description,\n onConfirm,\n onCancel,\n confirmText: confirmTextProp,\n cancelText: cancelTextProp,\n color = 'warning',\n icon,\n placement = 'top-start',\n open,\n onOpenChange,\n anchorRef,\n className,\n}: MPopconfirmProps) {\n const texts = useMPopconfirmTexts()\n const confirmText = confirmTextProp ?? texts.confirm\n const cancelText = cancelTextProp ?? texts.cancel\n const baseId = useId()\n const titleId = `${baseId}-title`\n const descriptionId = `${baseId}-description`\n // APG alertdialog: focus starts on the least destructive action.\n const cancelRef = useRef<HTMLElement>(null)\n\n const handleCancel = useCallback(() => {\n onOpenChange(false)\n onCancel?.()\n }, [onOpenChange, onCancel])\n\n const handleConfirm = useCallback(() => {\n onOpenChange(false)\n onConfirm()\n }, [onOpenChange, onConfirm])\n\n // Keep Tab / Shift+Tab cycling inside the confirmation while it is open.\n const handleKeyDown = useCallback((e: ReactKeyboardEvent<HTMLDivElement>) => {\n if (e.key !== 'Tab') return\n const layer = e.currentTarget.closest<HTMLElement>('.popconfirm')\n if (!layer) return\n const focusable = getTabbable(layer)\n if (focusable.length === 0) return\n const first = focusable[0]\n const last = focusable[focusable.length - 1]\n const active = document.activeElement\n if (e.shiftKey && (active === first || active === layer)) {\n e.preventDefault()\n last.focus()\n } else if (!e.shiftKey && active === last) {\n e.preventDefault()\n first.focus()\n }\n }, [])\n\n return (\n <MPopover\n open={open}\n anchorRef={anchorRef}\n onClose={handleCancel}\n placement={placement}\n className={cn('popconfirm', `color-${color}`, className)}\n role=\"alertdialog\"\n aria-labelledby={titleId}\n aria-describedby={description ? descriptionId : undefined}\n initialFocus={cancelRef}\n >\n <div className=\"body\" onKeyDown={handleKeyDown}>\n {icon && <div className=\"icon\">{icon}</div>}\n <div className=\"content\">\n <div id={titleId} className=\"title\">\n {title}\n </div>\n {description && (\n <div id={descriptionId} className=\"description\">\n {description}\n </div>\n )}\n </div>\n </div>\n <div className=\"actions\" onKeyDown={handleKeyDown}>\n <MButton ref={cancelRef} variant=\"ghost\" size=\"sm\" color=\"neutral\" onClick={handleCancel}>\n {cancelText}\n </MButton>\n <MButton variant=\"ghost\" size=\"sm\" color={color} onClick={handleConfirm}>\n {confirmText}\n </MButton>\n </div>\n </MPopover>\n )\n}\n"],"mappings":"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"}
package/dist/overlays.cjs CHANGED
@@ -1,3 +1,3 @@
1
1
  const {ensureStyles}=require('./style-runtime.cjs')
2
2
  ensureStyles()
3
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./overlays-CsRN5OG8.cjs`),t=require(`./MTooltip-BAgHlv5I.cjs`),n=require(`./MDropdownMenu-DnKcCyW6.cjs`);exports.MCommandPalette=e.o,exports.MDrawer=e.n,exports.MDrawerBody=e.r,exports.MDrawerFooter=e.i,exports.MDrawerHeader=e.a,exports.MDropdownDivider=n.t,exports.MDropdownGroup=n.n,exports.MDropdownItem=n.r,exports.MDropdownMenu=n.i,exports.MModal=e.c,exports.MPopconfirm=e.t,exports.MSheet=e.s,exports.MTooltip=t.t;
3
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./overlays-Df-NpmkW.cjs`),t=require(`./MTooltip-Cj2Fxmzc.cjs`),n=require(`./MDropdownMenu-C4-r7UZM.cjs`);exports.MCommandPalette=e.o,exports.MDrawer=e.n,exports.MDrawerBody=e.r,exports.MDrawerFooter=e.i,exports.MDrawerHeader=e.a,exports.MDropdownDivider=n.t,exports.MDropdownGroup=n.n,exports.MDropdownItem=n.r,exports.MDropdownMenu=n.i,exports.MModal=e.c,exports.MPopconfirm=e.t,exports.MSheet=e.s,exports.MTooltip=t.t;
package/dist/overlays.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import {ensureStyles} from './style-runtime.js'
2
2
  ensureStyles()
3
- import { a as e, c as t, i as n, n as r, o as i, r as a, s as o, t as s } from "./overlays-CCeYD6hT.js";
4
- import { t as c } from "./MTooltip-CJxvlkOX.js";
5
- import { i as l, n as u, r as d, t as f } from "./MDropdownMenu-DxbKN7Ui.js";
3
+ import { a as e, c as t, i as n, n as r, o as i, r as a, s as o, t as s } from "./overlays-W0WW3fn7.js";
4
+ import { t as c } from "./MTooltip-BRSPJ3RY.js";
5
+ import { i as l, n as u, r as d, t as f } from "./MDropdownMenu-Dvg9UsHB.js";
6
6
  export { i as MCommandPalette, r as MDrawer, a as MDrawerBody, n as MDrawerFooter, e as MDrawerHeader, f as MDropdownDivider, u as MDropdownGroup, d as MDropdownItem, l as MDropdownMenu, t as MModal, s as MPopconfirm, o as MSheet, c as MTooltip };
@@ -1,3 +1,3 @@
1
1
  const {ensureStyles}=require('./style-runtime.cjs')
2
2
  ensureStyles()
3
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./MPortal-CuBXhhl_.cjs`),t=require(`./MPopover-B3npyAkL.cjs`);exports.MPopover=t.t,exports.MPortal=e.t;
3
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./useModalLayer-Cyt93Prs.cjs`),t=require(`./MPopover-ZeoU9hb5.cjs`);exports.MPopover=t.t,exports.MPortal=e.c;
@@ -1,5 +1,5 @@
1
1
  import {ensureStyles} from './style-runtime.js'
2
2
  ensureStyles()
3
- import { t as e } from "./MPortal-Ba2Sxset.js";
4
- import { t } from "./MPopover-8gYD3Ogq.js";
3
+ import { c as e } from "./useModalLayer-CpOPSDbf.js";
4
+ import { t } from "./MPopover-CBDbUOW6.js";
5
5
  export { t as MPopover, e as MPortal };
@@ -0,0 +1,28 @@
1
+ //#region src/utils/radioGroupKeys.ts
2
+ function e(e, t, n, r = !1) {
3
+ if (n <= 0) return null;
4
+ let i = e;
5
+ switch (r && e === "ArrowRight" ? i = "ArrowLeft" : r && e === "ArrowLeft" && (i = "ArrowRight"), i) {
6
+ case "ArrowRight":
7
+ case "ArrowDown": return t < 0 ? 0 : (t + 1) % n;
8
+ case "ArrowLeft":
9
+ case "ArrowUp": return t < 0 ? n - 1 : (t - 1 + n) % n;
10
+ case "Home": return 0;
11
+ case "End": return n - 1;
12
+ default: return null;
13
+ }
14
+ }
15
+ function t(e) {
16
+ if (!e || typeof window > "u") return !1;
17
+ let t = e.closest("[dir]");
18
+ if (t) return t.getAttribute("dir")?.toLowerCase() === "rtl";
19
+ try {
20
+ return window.getComputedStyle(e).direction === "rtl";
21
+ } catch {
22
+ return !1;
23
+ }
24
+ }
25
+ //#endregion
26
+ export { t as n, e as t };
27
+
28
+ //# sourceMappingURL=radioGroupKeys-Bm-Qeh8G.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"radioGroupKeys-Bm-Qeh8G.js","names":[],"sources":["../src/utils/radioGroupKeys.ts"],"sourcesContent":["/**\n * Arrow-key target for an APG radio group (roving tabindex, selection follows focus).\n * ArrowRight / ArrowDown move forward, ArrowLeft / ArrowUp move back, both wrap; Home / End jump\n * to the ends. In right-to-left layouts ArrowLeft / ArrowRight are flipped. Returns `null` for\n * keys the group does not handle. Internal helper, not re-exported.\n */\nexport function getRadioGroupTarget(key: string, index: number, count: number, rtl = false): number | null {\n if (count <= 0) return null\n let effective = key\n if (rtl && key === 'ArrowRight') effective = 'ArrowLeft'\n else if (rtl && key === 'ArrowLeft') effective = 'ArrowRight'\n\n switch (effective) {\n case 'ArrowRight':\n case 'ArrowDown':\n return index < 0 ? 0 : (index + 1) % count\n case 'ArrowLeft':\n case 'ArrowUp':\n return index < 0 ? count - 1 : (index - 1 + count) % count\n case 'Home':\n return 0\n case 'End':\n return count - 1\n default:\n return null\n }\n}\n\n/** True when the element is laid out right-to-left. */\nexport function isRtlElement(element: Element | null): boolean {\n if (!element || typeof window === 'undefined') return false\n const dirHost = element.closest('[dir]')\n if (dirHost) return dirHost.getAttribute('dir')?.toLowerCase() === 'rtl'\n try {\n return window.getComputedStyle(element).direction === 'rtl'\n } catch {\n return false\n }\n}\n"],"mappings":";AAMA,SAAgB,EAAoB,GAAa,GAAe,GAAe,IAAM,IAAsB;AACvG,KAAI,KAAS,EAAG,QAAO;CACvB,IAAI,IAAY;AAIhB,SAHI,KAAO,MAAQ,eAAc,IAAY,cACpC,KAAO,MAAQ,gBAAa,IAAY,eAEzC,GAAR;EACI,KAAK;EACL,KAAK,YACD,QAAO,IAAQ,IAAI,KAAK,IAAQ,KAAK;EACzC,KAAK;EACL,KAAK,UACD,QAAO,IAAQ,IAAI,IAAQ,KAAK,IAAQ,IAAI,KAAS;EACzD,KAAK,OACD,QAAO;EACX,KAAK,MACD,QAAO,IAAQ;EACnB,QACI,QAAO;;;AAKnB,SAAgB,EAAa,GAAkC;AAC3D,KAAI,CAAC,KAAW,OAAO,SAAW,IAAa,QAAO;CACtD,IAAM,IAAU,EAAQ,QAAQ,QAAQ;AACxC,KAAI,EAAS,QAAO,EAAQ,aAAa,MAAM,EAAE,aAAa,KAAK;AACnE,KAAI;AACA,SAAO,OAAO,iBAAiB,EAAQ,CAAC,cAAc;SAClD;AACJ,SAAO"}
@@ -0,0 +1,2 @@
1
+ function e(e,t,n,r=!1){if(n<=0)return null;let i=e;switch(r&&e===`ArrowRight`?i=`ArrowLeft`:r&&e===`ArrowLeft`&&(i=`ArrowRight`),i){case`ArrowRight`:case`ArrowDown`:return t<0?0:(t+1)%n;case`ArrowLeft`:case`ArrowUp`:return t<0?n-1:(t-1+n)%n;case`Home`:return 0;case`End`:return n-1;default:return null}}function t(e){if(!e||typeof window>`u`)return!1;let t=e.closest(`[dir]`);if(t)return t.getAttribute(`dir`)?.toLowerCase()===`rtl`;try{return window.getComputedStyle(e).direction===`rtl`}catch{return!1}}Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return t}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return e}});
2
+ //# sourceMappingURL=radioGroupKeys-COL8uXbH.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"radioGroupKeys-COL8uXbH.cjs","names":[],"sources":["../src/utils/radioGroupKeys.ts"],"sourcesContent":["/**\n * Arrow-key target for an APG radio group (roving tabindex, selection follows focus).\n * ArrowRight / ArrowDown move forward, ArrowLeft / ArrowUp move back, both wrap; Home / End jump\n * to the ends. In right-to-left layouts ArrowLeft / ArrowRight are flipped. Returns `null` for\n * keys the group does not handle. Internal helper, not re-exported.\n */\nexport function getRadioGroupTarget(key: string, index: number, count: number, rtl = false): number | null {\n if (count <= 0) return null\n let effective = key\n if (rtl && key === 'ArrowRight') effective = 'ArrowLeft'\n else if (rtl && key === 'ArrowLeft') effective = 'ArrowRight'\n\n switch (effective) {\n case 'ArrowRight':\n case 'ArrowDown':\n return index < 0 ? 0 : (index + 1) % count\n case 'ArrowLeft':\n case 'ArrowUp':\n return index < 0 ? count - 1 : (index - 1 + count) % count\n case 'Home':\n return 0\n case 'End':\n return count - 1\n default:\n return null\n }\n}\n\n/** True when the element is laid out right-to-left. */\nexport function isRtlElement(element: Element | null): boolean {\n if (!element || typeof window === 'undefined') return false\n const dirHost = element.closest('[dir]')\n if (dirHost) return dirHost.getAttribute('dir')?.toLowerCase() === 'rtl'\n try {\n return window.getComputedStyle(element).direction === 'rtl'\n } catch {\n return false\n }\n}\n"],"mappings":"AAMA,SAAgB,EAAoB,EAAa,EAAe,EAAe,EAAM,GAAsB,CACvG,GAAI,GAAS,EAAG,OAAO,KACvB,IAAI,EAAY,EAIhB,OAHI,GAAO,IAAQ,aAAc,EAAY,YACpC,GAAO,IAAQ,cAAa,EAAY,cAEzC,EAAR,CACI,IAAK,aACL,IAAK,YACD,OAAO,EAAQ,EAAI,GAAK,EAAQ,GAAK,EACzC,IAAK,YACL,IAAK,UACD,OAAO,EAAQ,EAAI,EAAQ,GAAK,EAAQ,EAAI,GAAS,EACzD,IAAK,OACD,MAAO,GACX,IAAK,MACD,OAAO,EAAQ,EACnB,QACI,OAAO,MAKnB,SAAgB,EAAa,EAAkC,CAC3D,GAAI,CAAC,GAAW,OAAO,OAAW,IAAa,MAAO,GACtD,IAAM,EAAU,EAAQ,QAAQ,QAAQ,CACxC,GAAI,EAAS,OAAO,EAAQ,aAAa,MAAM,EAAE,aAAa,GAAK,MACnE,GAAI,CACA,OAAO,OAAO,iBAAiB,EAAQ,CAAC,YAAc,WAClD,CACJ,MAAO"}
@@ -88,4 +88,4 @@ function p(i, a = Date.now()) {
88
88
  //#endregion
89
89
  export { l as a, u as i, d as n, c as o, p as r, f as t };
90
90
 
91
- //# sourceMappingURL=relativeTime-Cr-NVzij.js.map
91
+ //# sourceMappingURL=relativeTime-BqCuaBqb.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"relativeTime-Cr-NVzij.js","names":[],"sources":["../src/utils/relativeTime.ts"],"sourcesContent":["export type RelativeTimeUnit = Intl.RelativeTimeFormatUnit\n\nexport type RelativeTimeFallbackFormat = 'date' | 'datetime'\n\nexport interface RelativeTimeValue {\n value: number\n unit: RelativeTimeUnit\n}\n\nexport interface FormatRelativeTimeOptions {\n locale?: string\n now?: Date | number\n}\n\nconst SECOND = 1000\nconst MINUTE = 60 * SECOND\nconst HOUR = 60 * MINUTE\nconst DAY = 24 * HOUR\nconst WEEK = 7 * DAY\nconst MONTH = Math.round(30.44 * DAY)\nconst YEAR = Math.round(365.25 * DAY)\n\nconst thresholdMap = {\n s: SECOND,\n m: MINUTE,\n h: HOUR,\n d: DAY,\n w: WEEK,\n mo: MONTH,\n y: YEAR,\n} as const\n\nexport function toDate(value: Date | string | number): Date | null {\n const date = value instanceof Date ? value : new Date(value)\n return Number.isNaN(date.getTime()) ? null : date\n}\n\nexport function parseRelativeThreshold(value?: string | number | null): number | null {\n if (value == null) return null\n if (typeof value === 'number') return value >= 0 ? value : null\n\n const match = value.trim().match(/^(\\d+)\\s*(mo|[smhdwy])$/i)\n if (!match) return null\n\n const amount = Number(match[1])\n const unit = match[2].toLowerCase() as keyof typeof thresholdMap\n\n return amount * thresholdMap[unit]\n}\n\nexport function getRelativeTimeValue(\n value: Date | string | number,\n now: Date | number = Date.now()\n): RelativeTimeValue | null {\n const date = toDate(value)\n const current = toDate(now)\n\n if (!date || !current) return null\n\n const diff = date.getTime() - current.getTime()\n const abs = Math.abs(diff)\n\n if (abs < MINUTE) {\n return {value: Math.round(diff / SECOND), unit: 'second'}\n }\n\n if (abs < HOUR) {\n return {value: Math.round(diff / MINUTE), unit: 'minute'}\n }\n\n if (abs < DAY) {\n return {value: Math.round(diff / HOUR), unit: 'hour'}\n }\n\n if (abs < WEEK) {\n return {value: Math.round(diff / DAY), unit: 'day'}\n }\n\n if (abs < MONTH) {\n return {value: Math.round(diff / WEEK), unit: 'week'}\n }\n\n if (abs < YEAR) {\n return {value: Math.round(diff / MONTH), unit: 'month'}\n }\n\n return {value: Math.round(diff / YEAR), unit: 'year'}\n}\n\nexport function formatRelativeTime(\n value: Date | string | number,\n {locale = 'en', now = Date.now()}: FormatRelativeTimeOptions = {}\n): string | null {\n const relative = getRelativeTimeValue(value, now)\n\n if (!relative) return null\n\n let formatter: Intl.RelativeTimeFormat\n\n try {\n formatter = new Intl.RelativeTimeFormat(locale, {\n numeric: 'auto',\n style: 'long',\n })\n } catch {\n formatter = new Intl.RelativeTimeFormat('en', {\n numeric: 'auto',\n style: 'long',\n })\n }\n\n return formatter.format(relative.value, relative.unit)\n}\n\nexport function formatAbsoluteTime(\n value: Date | string | number,\n locale: string = 'en',\n fallbackFormat: RelativeTimeFallbackFormat = 'date'\n): string | null {\n const date = toDate(value)\n\n if (!date) return null\n\n let formatter: Intl.DateTimeFormat\n\n try {\n formatter = new Intl.DateTimeFormat(locale, {\n dateStyle: 'medium',\n ...(fallbackFormat === 'datetime' ? {timeStyle: 'short'} : {}),\n })\n } catch {\n formatter = new Intl.DateTimeFormat('en', {\n dateStyle: 'medium',\n ...(fallbackFormat === 'datetime' ? {timeStyle: 'short'} : {}),\n })\n }\n\n return formatter.format(date)\n}\n\nexport function getAutoUpdateInterval(value: Date | string | number, now: Date | number = Date.now()): number {\n const date = toDate(value)\n const current = toDate(now)\n\n if (!date || !current) return HOUR\n\n const diff = Math.abs(date.getTime() - current.getTime())\n\n if (diff < MINUTE) return SECOND\n if (diff < HOUR) return MINUTE\n if (diff < DAY) return HOUR\n return DAY\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"relativeTime-BqCuaBqb.js","names":[],"sources":["../src/utils/relativeTime.ts"],"sourcesContent":["export type RelativeTimeUnit = Intl.RelativeTimeFormatUnit\n\nexport type RelativeTimeFallbackFormat = 'date' | 'datetime'\n\nexport interface RelativeTimeValue {\n value: number\n unit: RelativeTimeUnit\n}\n\nexport interface FormatRelativeTimeOptions {\n locale?: string\n now?: Date | number\n}\n\nconst SECOND = 1000\nconst MINUTE = 60 * SECOND\nconst HOUR = 60 * MINUTE\nconst DAY = 24 * HOUR\nconst WEEK = 7 * DAY\nconst MONTH = Math.round(30.44 * DAY)\nconst YEAR = Math.round(365.25 * DAY)\n\nconst thresholdMap = {\n s: SECOND,\n m: MINUTE,\n h: HOUR,\n d: DAY,\n w: WEEK,\n mo: MONTH,\n y: YEAR,\n} as const\n\nexport function toDate(value: Date | string | number): Date | null {\n const date = value instanceof Date ? value : new Date(value)\n return Number.isNaN(date.getTime()) ? null : date\n}\n\nexport function parseRelativeThreshold(value?: string | number | null): number | null {\n if (value == null) return null\n if (typeof value === 'number') return value >= 0 ? value : null\n\n const match = value.trim().match(/^(\\d+)\\s*(mo|[smhdwy])$/i)\n if (!match) return null\n\n const amount = Number(match[1])\n const unit = match[2].toLowerCase() as keyof typeof thresholdMap\n\n return amount * thresholdMap[unit]\n}\n\nexport function getRelativeTimeValue(\n value: Date | string | number,\n now: Date | number = Date.now()\n): RelativeTimeValue | null {\n const date = toDate(value)\n const current = toDate(now)\n\n if (!date || !current) return null\n\n const diff = date.getTime() - current.getTime()\n const abs = Math.abs(diff)\n\n if (abs < MINUTE) {\n return {value: Math.round(diff / SECOND), unit: 'second'}\n }\n\n if (abs < HOUR) {\n return {value: Math.round(diff / MINUTE), unit: 'minute'}\n }\n\n if (abs < DAY) {\n return {value: Math.round(diff / HOUR), unit: 'hour'}\n }\n\n if (abs < WEEK) {\n return {value: Math.round(diff / DAY), unit: 'day'}\n }\n\n if (abs < MONTH) {\n return {value: Math.round(diff / WEEK), unit: 'week'}\n }\n\n if (abs < YEAR) {\n return {value: Math.round(diff / MONTH), unit: 'month'}\n }\n\n return {value: Math.round(diff / YEAR), unit: 'year'}\n}\n\nexport function formatRelativeTime(\n value: Date | string | number,\n {locale = 'en', now = Date.now()}: FormatRelativeTimeOptions = {}\n): string | null {\n const relative = getRelativeTimeValue(value, now)\n\n if (!relative) return null\n\n let formatter: Intl.RelativeTimeFormat\n\n try {\n formatter = new Intl.RelativeTimeFormat(locale, {\n numeric: 'auto',\n style: 'long',\n })\n } catch {\n formatter = new Intl.RelativeTimeFormat('en', {\n numeric: 'auto',\n style: 'long',\n })\n }\n\n return formatter.format(relative.value, relative.unit)\n}\n\nexport function formatAbsoluteTime(\n value: Date | string | number,\n locale: string = 'en',\n fallbackFormat: RelativeTimeFallbackFormat = 'date'\n): string | null {\n const date = toDate(value)\n\n if (!date) return null\n\n let formatter: Intl.DateTimeFormat\n\n try {\n formatter = new Intl.DateTimeFormat(locale, {\n dateStyle: 'medium',\n ...(fallbackFormat === 'datetime' ? {timeStyle: 'short'} : {}),\n })\n } catch {\n formatter = new Intl.DateTimeFormat('en', {\n dateStyle: 'medium',\n ...(fallbackFormat === 'datetime' ? {timeStyle: 'short'} : {}),\n })\n }\n\n return formatter.format(date)\n}\n\nexport function getAutoUpdateInterval(value: Date | string | number, now: Date | number = Date.now()): number {\n const date = toDate(value)\n const current = toDate(now)\n\n if (!date || !current) return HOUR\n\n const diff = Math.abs(date.getTime() - current.getTime())\n\n if (diff < MINUTE) return SECOND\n if (diff < HOUR) return MINUTE\n if (diff < DAY) return HOUR\n return DAY\n}\n"],"mappings":";AAcA,IAAM,IAAS,KACT,IAAS,KAAK,GACd,IAAO,KAAK,GACZ,IAAM,KAAK,GACX,IAAO,IAAI,GACX,IAAQ,KAAK,MAAM,QAAQ,EAAI,EAC/B,IAAO,KAAK,MAAM,SAAS,EAAI,EAE/B,IAAe;CACjB,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACH,IAAI;CACJ,GAAG;CACN;AAED,SAAgB,EAAO,GAA4C;CAC/D,IAAM,IAAO,aAAiB,OAAO,IAAQ,IAAI,KAAK,EAAM;AAC5D,QAAO,OAAO,MAAM,EAAK,SAAS,CAAC,GAAG,OAAO;;AAGjD,SAAgB,EAAuB,GAA+C;AAClF,KAAI,KAAS,KAAM,QAAO;AAC1B,KAAI,OAAO,KAAU,SAAU,QAAO,KAAS,IAAI,IAAQ;CAE3D,IAAM,IAAQ,EAAM,MAAM,CAAC,MAAM,2BAA2B;AAM5D,QALK,IAEU,OAAO,EAAM,GAAG,GAGf,EAFH,EAAM,GAAG,aAAa,IAHhB;;AAQvB,SAAgB,EACZ,GACA,IAAqB,KAAK,KAAK,EACP;CACxB,IAAM,IAAO,EAAO,EAAM,EACpB,IAAU,EAAO,EAAI;AAE3B,KAAI,CAAC,KAAQ,CAAC,EAAS,QAAO;CAE9B,IAAM,IAAO,EAAK,SAAS,GAAG,EAAQ,SAAS,EACzC,IAAM,KAAK,IAAI,EAAK;AA0B1B,QAxBI,IAAM,IACC;EAAC,OAAO,KAAK,MAAM,IAAO,EAAO;EAAE,MAAM;EAAS,GAGzD,IAAM,IACC;EAAC,OAAO,KAAK,MAAM,IAAO,EAAO;EAAE,MAAM;EAAS,GAGzD,IAAM,IACC;EAAC,OAAO,KAAK,MAAM,IAAO,EAAK;EAAE,MAAM;EAAO,GAGrD,IAAM,IACC;EAAC,OAAO,KAAK,MAAM,IAAO,EAAI;EAAE,MAAM;EAAM,GAGnD,IAAM,IACC;EAAC,OAAO,KAAK,MAAM,IAAO,EAAK;EAAE,MAAM;EAAO,GAGrD,IAAM,IACC;EAAC,OAAO,KAAK,MAAM,IAAO,EAAM;EAAE,MAAM;EAAQ,GAGpD;EAAC,OAAO,KAAK,MAAM,IAAO,EAAK;EAAE,MAAM;EAAO;;AAGzD,SAAgB,EACZ,GACA,EAAC,YAAS,MAAM,SAAM,KAAK,KAAK,KAA+B,EAAE,EACpD;CACb,IAAM,IAAW,EAAqB,GAAO,EAAI;AAEjD,KAAI,CAAC,EAAU,QAAO;CAEtB,IAAI;AAEJ,KAAI;AACA,MAAY,IAAI,KAAK,mBAAmB,GAAQ;GAC5C,SAAS;GACT,OAAO;GACV,CAAC;SACE;AACJ,MAAY,IAAI,KAAK,mBAAmB,MAAM;GAC1C,SAAS;GACT,OAAO;GACV,CAAC;;AAGN,QAAO,EAAU,OAAO,EAAS,OAAO,EAAS,KAAK;;AAG1D,SAAgB,EACZ,GACA,IAAiB,MACjB,IAA6C,QAChC;CACb,IAAM,IAAO,EAAO,EAAM;AAE1B,KAAI,CAAC,EAAM,QAAO;CAElB,IAAI;AAEJ,KAAI;AACA,MAAY,IAAI,KAAK,eAAe,GAAQ;GACxC,WAAW;GACX,GAAI,MAAmB,aAAa,EAAC,WAAW,SAAQ,GAAG,EAAE;GAChE,CAAC;SACE;AACJ,MAAY,IAAI,KAAK,eAAe,MAAM;GACtC,WAAW;GACX,GAAI,MAAmB,aAAa,EAAC,WAAW,SAAQ,GAAG,EAAE;GAChE,CAAC;;AAGN,QAAO,EAAU,OAAO,EAAK;;AAGjC,SAAgB,EAAsB,GAA+B,IAAqB,KAAK,KAAK,EAAU;CAC1G,IAAM,IAAO,EAAO,EAAM,EACpB,IAAU,EAAO,EAAI;AAE3B,KAAI,CAAC,KAAQ,CAAC,EAAS,QAAO;CAE9B,IAAM,IAAO,KAAK,IAAI,EAAK,SAAS,GAAG,EAAQ,SAAS,CAAC;AAKzD,QAHI,IAAO,IAAe,IACtB,IAAO,IAAa,IACpB,IAAO,IAAY,IAChB"}
@@ -1,2 +1,2 @@
1
1
  var e=1e3,t=60*e,n=60*t,r=24*n,i=7*r,a=Math.round(30.44*r),o=Math.round(365.25*r),s={s:e,m:t,h:n,d:r,w:i,mo:a,y:o};function c(e){let t=e instanceof Date?e:new Date(e);return Number.isNaN(t.getTime())?null:t}function l(e){if(e==null)return null;if(typeof e==`number`)return e>=0?e:null;let t=e.trim().match(/^(\d+)\s*(mo|[smhdwy])$/i);return t?Number(t[1])*s[t[2].toLowerCase()]:null}function u(s,l=Date.now()){let u=c(s),d=c(l);if(!u||!d)return null;let f=u.getTime()-d.getTime(),p=Math.abs(f);return p<t?{value:Math.round(f/e),unit:`second`}:p<n?{value:Math.round(f/t),unit:`minute`}:p<r?{value:Math.round(f/n),unit:`hour`}:p<i?{value:Math.round(f/r),unit:`day`}:p<a?{value:Math.round(f/i),unit:`week`}:p<o?{value:Math.round(f/a),unit:`month`}:{value:Math.round(f/o),unit:`year`}}function d(e,{locale:t=`en`,now:n=Date.now()}={}){let r=u(e,n);if(!r)return null;let i;try{i=new Intl.RelativeTimeFormat(t,{numeric:`auto`,style:`long`})}catch{i=new Intl.RelativeTimeFormat(`en`,{numeric:`auto`,style:`long`})}return i.format(r.value,r.unit)}function f(e,t=`en`,n=`date`){let r=c(e);if(!r)return null;let i;try{i=new Intl.DateTimeFormat(t,{dateStyle:`medium`,...n===`datetime`?{timeStyle:`short`}:{}})}catch{i=new Intl.DateTimeFormat(`en`,{dateStyle:`medium`,...n===`datetime`?{timeStyle:`short`}:{}})}return i.format(r)}function p(i,a=Date.now()){let o=c(i),s=c(a);if(!o||!s)return n;let l=Math.abs(o.getTime()-s.getTime());return l<t?e:l<n?t:l<r?n:r}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return f}});
2
- //# sourceMappingURL=relativeTime-DgYBUaVm.cjs.map
2
+ //# sourceMappingURL=relativeTime-DUbW4O44.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"relativeTime-DgYBUaVm.cjs","names":[],"sources":["../src/utils/relativeTime.ts"],"sourcesContent":["export type RelativeTimeUnit = Intl.RelativeTimeFormatUnit\n\nexport type RelativeTimeFallbackFormat = 'date' | 'datetime'\n\nexport interface RelativeTimeValue {\n value: number\n unit: RelativeTimeUnit\n}\n\nexport interface FormatRelativeTimeOptions {\n locale?: string\n now?: Date | number\n}\n\nconst SECOND = 1000\nconst MINUTE = 60 * SECOND\nconst HOUR = 60 * MINUTE\nconst DAY = 24 * HOUR\nconst WEEK = 7 * DAY\nconst MONTH = Math.round(30.44 * DAY)\nconst YEAR = Math.round(365.25 * DAY)\n\nconst thresholdMap = {\n s: SECOND,\n m: MINUTE,\n h: HOUR,\n d: DAY,\n w: WEEK,\n mo: MONTH,\n y: YEAR,\n} as const\n\nexport function toDate(value: Date | string | number): Date | null {\n const date = value instanceof Date ? value : new Date(value)\n return Number.isNaN(date.getTime()) ? null : date\n}\n\nexport function parseRelativeThreshold(value?: string | number | null): number | null {\n if (value == null) return null\n if (typeof value === 'number') return value >= 0 ? value : null\n\n const match = value.trim().match(/^(\\d+)\\s*(mo|[smhdwy])$/i)\n if (!match) return null\n\n const amount = Number(match[1])\n const unit = match[2].toLowerCase() as keyof typeof thresholdMap\n\n return amount * thresholdMap[unit]\n}\n\nexport function getRelativeTimeValue(\n value: Date | string | number,\n now: Date | number = Date.now()\n): RelativeTimeValue | null {\n const date = toDate(value)\n const current = toDate(now)\n\n if (!date || !current) return null\n\n const diff = date.getTime() - current.getTime()\n const abs = Math.abs(diff)\n\n if (abs < MINUTE) {\n return {value: Math.round(diff / SECOND), unit: 'second'}\n }\n\n if (abs < HOUR) {\n return {value: Math.round(diff / MINUTE), unit: 'minute'}\n }\n\n if (abs < DAY) {\n return {value: Math.round(diff / HOUR), unit: 'hour'}\n }\n\n if (abs < WEEK) {\n return {value: Math.round(diff / DAY), unit: 'day'}\n }\n\n if (abs < MONTH) {\n return {value: Math.round(diff / WEEK), unit: 'week'}\n }\n\n if (abs < YEAR) {\n return {value: Math.round(diff / MONTH), unit: 'month'}\n }\n\n return {value: Math.round(diff / YEAR), unit: 'year'}\n}\n\nexport function formatRelativeTime(\n value: Date | string | number,\n {locale = 'en', now = Date.now()}: FormatRelativeTimeOptions = {}\n): string | null {\n const relative = getRelativeTimeValue(value, now)\n\n if (!relative) return null\n\n let formatter: Intl.RelativeTimeFormat\n\n try {\n formatter = new Intl.RelativeTimeFormat(locale, {\n numeric: 'auto',\n style: 'long',\n })\n } catch {\n formatter = new Intl.RelativeTimeFormat('en', {\n numeric: 'auto',\n style: 'long',\n })\n }\n\n return formatter.format(relative.value, relative.unit)\n}\n\nexport function formatAbsoluteTime(\n value: Date | string | number,\n locale: string = 'en',\n fallbackFormat: RelativeTimeFallbackFormat = 'date'\n): string | null {\n const date = toDate(value)\n\n if (!date) return null\n\n let formatter: Intl.DateTimeFormat\n\n try {\n formatter = new Intl.DateTimeFormat(locale, {\n dateStyle: 'medium',\n ...(fallbackFormat === 'datetime' ? {timeStyle: 'short'} : {}),\n })\n } catch {\n formatter = new Intl.DateTimeFormat('en', {\n dateStyle: 'medium',\n ...(fallbackFormat === 'datetime' ? {timeStyle: 'short'} : {}),\n })\n }\n\n return formatter.format(date)\n}\n\nexport function getAutoUpdateInterval(value: Date | string | number, now: Date | number = Date.now()): number {\n const date = toDate(value)\n const current = toDate(now)\n\n if (!date || !current) return HOUR\n\n const diff = Math.abs(date.getTime() - current.getTime())\n\n if (diff < MINUTE) return SECOND\n if (diff < HOUR) return MINUTE\n if (diff < DAY) return HOUR\n return DAY\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"relativeTime-DUbW4O44.cjs","names":[],"sources":["../src/utils/relativeTime.ts"],"sourcesContent":["export type RelativeTimeUnit = Intl.RelativeTimeFormatUnit\n\nexport type RelativeTimeFallbackFormat = 'date' | 'datetime'\n\nexport interface RelativeTimeValue {\n value: number\n unit: RelativeTimeUnit\n}\n\nexport interface FormatRelativeTimeOptions {\n locale?: string\n now?: Date | number\n}\n\nconst SECOND = 1000\nconst MINUTE = 60 * SECOND\nconst HOUR = 60 * MINUTE\nconst DAY = 24 * HOUR\nconst WEEK = 7 * DAY\nconst MONTH = Math.round(30.44 * DAY)\nconst YEAR = Math.round(365.25 * DAY)\n\nconst thresholdMap = {\n s: SECOND,\n m: MINUTE,\n h: HOUR,\n d: DAY,\n w: WEEK,\n mo: MONTH,\n y: YEAR,\n} as const\n\nexport function toDate(value: Date | string | number): Date | null {\n const date = value instanceof Date ? value : new Date(value)\n return Number.isNaN(date.getTime()) ? null : date\n}\n\nexport function parseRelativeThreshold(value?: string | number | null): number | null {\n if (value == null) return null\n if (typeof value === 'number') return value >= 0 ? value : null\n\n const match = value.trim().match(/^(\\d+)\\s*(mo|[smhdwy])$/i)\n if (!match) return null\n\n const amount = Number(match[1])\n const unit = match[2].toLowerCase() as keyof typeof thresholdMap\n\n return amount * thresholdMap[unit]\n}\n\nexport function getRelativeTimeValue(\n value: Date | string | number,\n now: Date | number = Date.now()\n): RelativeTimeValue | null {\n const date = toDate(value)\n const current = toDate(now)\n\n if (!date || !current) return null\n\n const diff = date.getTime() - current.getTime()\n const abs = Math.abs(diff)\n\n if (abs < MINUTE) {\n return {value: Math.round(diff / SECOND), unit: 'second'}\n }\n\n if (abs < HOUR) {\n return {value: Math.round(diff / MINUTE), unit: 'minute'}\n }\n\n if (abs < DAY) {\n return {value: Math.round(diff / HOUR), unit: 'hour'}\n }\n\n if (abs < WEEK) {\n return {value: Math.round(diff / DAY), unit: 'day'}\n }\n\n if (abs < MONTH) {\n return {value: Math.round(diff / WEEK), unit: 'week'}\n }\n\n if (abs < YEAR) {\n return {value: Math.round(diff / MONTH), unit: 'month'}\n }\n\n return {value: Math.round(diff / YEAR), unit: 'year'}\n}\n\nexport function formatRelativeTime(\n value: Date | string | number,\n {locale = 'en', now = Date.now()}: FormatRelativeTimeOptions = {}\n): string | null {\n const relative = getRelativeTimeValue(value, now)\n\n if (!relative) return null\n\n let formatter: Intl.RelativeTimeFormat\n\n try {\n formatter = new Intl.RelativeTimeFormat(locale, {\n numeric: 'auto',\n style: 'long',\n })\n } catch {\n formatter = new Intl.RelativeTimeFormat('en', {\n numeric: 'auto',\n style: 'long',\n })\n }\n\n return formatter.format(relative.value, relative.unit)\n}\n\nexport function formatAbsoluteTime(\n value: Date | string | number,\n locale: string = 'en',\n fallbackFormat: RelativeTimeFallbackFormat = 'date'\n): string | null {\n const date = toDate(value)\n\n if (!date) return null\n\n let formatter: Intl.DateTimeFormat\n\n try {\n formatter = new Intl.DateTimeFormat(locale, {\n dateStyle: 'medium',\n ...(fallbackFormat === 'datetime' ? {timeStyle: 'short'} : {}),\n })\n } catch {\n formatter = new Intl.DateTimeFormat('en', {\n dateStyle: 'medium',\n ...(fallbackFormat === 'datetime' ? {timeStyle: 'short'} : {}),\n })\n }\n\n return formatter.format(date)\n}\n\nexport function getAutoUpdateInterval(value: Date | string | number, now: Date | number = Date.now()): number {\n const date = toDate(value)\n const current = toDate(now)\n\n if (!date || !current) return HOUR\n\n const diff = Math.abs(date.getTime() - current.getTime())\n\n if (diff < MINUTE) return SECOND\n if (diff < HOUR) return MINUTE\n if (diff < DAY) return HOUR\n return DAY\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ var e=0,t=``;function n(){if(typeof document>`u`)return()=>{};e===0&&(t=document.body.style.overflow,document.body.style.overflow=`hidden`),e+=1;let n=!1;return()=>{n||(n=!0,e=Math.max(0,e-1),e===0&&(document.body.style.overflow=t))}}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return n}});
2
+ //# sourceMappingURL=scrollLock-C9P9o6wH.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scrollLock-C9P9o6wH.cjs","names":[],"sources":["../src/components/overlays/scrollLock.ts"],"sourcesContent":["/**\n * Reference-counted body scroll lock shared by blocking overlays (MModal, MDrawer, MSheet).\n *\n * Each overlay used to save `body.style.overflow`, set it to `hidden` and restore the\n * saved value on close. With nested overlays closed in the \"wrong\" order (the outer one\n * first) the inner one restored `hidden` after the outer one had already unlocked, or the\n * outer one unlocked while the inner one was still open. A shared counter keeps the page\n * locked while ANY overlay holds a lock and restores the original value once the last\n * one releases it.\n */\n\nlet lockCount = 0\nlet savedOverflow = ''\n\n/** Locks body scrolling and returns an idempotent release function. */\nexport function lockBodyScroll(): () => void {\n if (typeof document === 'undefined') return () => {}\n\n if (lockCount === 0) {\n savedOverflow = document.body.style.overflow\n document.body.style.overflow = 'hidden'\n }\n lockCount += 1\n\n let released = false\n return () => {\n if (released) return\n released = true\n lockCount = Math.max(0, lockCount - 1)\n if (lockCount === 0) {\n document.body.style.overflow = savedOverflow\n }\n }\n}\n\n/** Test-only helper — the counter is module state that outlives a render. */\nexport function __resetBodyScrollLock(): void {\n lockCount = 0\n savedOverflow = ''\n}\n"],"mappings":"AAWA,IAAI,EAAY,EACZ,EAAgB,GAGpB,SAAgB,GAA6B,CACzC,GAAI,OAAO,SAAa,IAAa,UAAa,GAE9C,IAAc,IACd,EAAgB,SAAS,KAAK,MAAM,SACpC,SAAS,KAAK,MAAM,SAAW,UAEnC,GAAa,EAEb,IAAI,EAAW,GACf,UAAa,CACL,IACJ,EAAW,GACX,EAAY,KAAK,IAAI,EAAG,EAAY,EAAE,CAClC,IAAc,IACd,SAAS,KAAK,MAAM,SAAW"}
@@ -0,0 +1,14 @@
1
+ //#region src/components/overlays/scrollLock.ts
2
+ var e = 0, t = "";
3
+ function n() {
4
+ if (typeof document > "u") return () => {};
5
+ e === 0 && (t = document.body.style.overflow, document.body.style.overflow = "hidden"), e += 1;
6
+ let n = !1;
7
+ return () => {
8
+ n || (n = !0, e = Math.max(0, e - 1), e === 0 && (document.body.style.overflow = t));
9
+ };
10
+ }
11
+ //#endregion
12
+ export { n as t };
13
+
14
+ //# sourceMappingURL=scrollLock-D27VmgPV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scrollLock-D27VmgPV.js","names":[],"sources":["../src/components/overlays/scrollLock.ts"],"sourcesContent":["/**\n * Reference-counted body scroll lock shared by blocking overlays (MModal, MDrawer, MSheet).\n *\n * Each overlay used to save `body.style.overflow`, set it to `hidden` and restore the\n * saved value on close. With nested overlays closed in the \"wrong\" order (the outer one\n * first) the inner one restored `hidden` after the outer one had already unlocked, or the\n * outer one unlocked while the inner one was still open. A shared counter keeps the page\n * locked while ANY overlay holds a lock and restores the original value once the last\n * one releases it.\n */\n\nlet lockCount = 0\nlet savedOverflow = ''\n\n/** Locks body scrolling and returns an idempotent release function. */\nexport function lockBodyScroll(): () => void {\n if (typeof document === 'undefined') return () => {}\n\n if (lockCount === 0) {\n savedOverflow = document.body.style.overflow\n document.body.style.overflow = 'hidden'\n }\n lockCount += 1\n\n let released = false\n return () => {\n if (released) return\n released = true\n lockCount = Math.max(0, lockCount - 1)\n if (lockCount === 0) {\n document.body.style.overflow = savedOverflow\n }\n }\n}\n\n/** Test-only helper — the counter is module state that outlives a render. */\nexport function __resetBodyScrollLock(): void {\n lockCount = 0\n savedOverflow = ''\n}\n"],"mappings":";AAWA,IAAI,IAAY,GACZ,IAAgB;AAGpB,SAAgB,IAA6B;AACzC,KAAI,OAAO,WAAa,IAAa,cAAa;AAMlD,CAJI,MAAc,MACd,IAAgB,SAAS,KAAK,MAAM,UACpC,SAAS,KAAK,MAAM,WAAW,WAEnC,KAAa;CAEb,IAAI,IAAW;AACf,cAAa;AACL,QACJ,IAAW,IACX,IAAY,KAAK,IAAI,GAAG,IAAY,EAAE,EAClC,MAAc,MACd,SAAS,KAAK,MAAM,WAAW"}