@banzamel/mineralui 2.4.2 → 2.5.1

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 (582) 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-BkNf7fzo.js → MButtonGroup-DDnn8Wfy.js} +3 -3
  11. package/dist/{MButtonGroup-BkNf7fzo.js.map → MButtonGroup-DDnn8Wfy.js.map} +1 -1
  12. package/dist/{MButtonGroup-iPv14c0V.cjs → MButtonGroup-Dz8Fm-oA.cjs} +2 -2
  13. package/dist/{MButtonGroup-iPv14c0V.cjs.map → MButtonGroup-Dz8Fm-oA.cjs.map} +1 -1
  14. package/dist/{MCard-DK-_FkpE.cjs → MCard-Bqm4BjK_.cjs} +2 -2
  15. package/dist/MCard-Bqm4BjK_.cjs.map +1 -0
  16. package/dist/{MCard-azpp4YVD.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-DqMnZ7Iv.cjs → MKbd-CnW3NUIu.cjs} +2 -2
  55. package/dist/{MKbd-DqMnZ7Iv.cjs.map → MKbd-CnW3NUIu.cjs.map} +1 -1
  56. package/dist/{MKbd-v6-tJ9sP.js → MKbd-DjfGyajR.js} +2 -2
  57. package/dist/{MKbd-v6-tJ9sP.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-BWKurW6H.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-C5uD4Axo.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/{arduino-BdpdaLwK.cjs → arduino-C1gw-z1N.cjs} +1 -1
  115. package/dist/{arduino-BdpdaLwK.cjs.map → arduino-C1gw-z1N.cjs.map} +1 -1
  116. package/dist/{arduino-DDDlP9Yt.js → arduino-CcVvzDWF.js} +1 -1
  117. package/dist/{arduino-DDDlP9Yt.js.map → arduino-CcVvzDWF.js.map} +1 -1
  118. package/dist/{bash-D8WbAmuA.js → bash-DkMiO80l.js} +1 -1
  119. package/dist/{bash-D8WbAmuA.js.map → bash-DkMiO80l.js.map} +1 -1
  120. package/dist/{bash-eOUFh3S1.cjs → bash-wzZkpJC-.cjs} +1 -1
  121. package/dist/{bash-eOUFh3S1.cjs.map → bash-wzZkpJC-.cjs.map} +1 -1
  122. package/dist/{c-Bur7Mn-u.cjs → c-BSPjDa0P.cjs} +1 -1
  123. package/dist/{c-Bur7Mn-u.cjs.map → c-BSPjDa0P.cjs.map} +1 -1
  124. package/dist/{c-CTKNfUJI.js → c-DtlFV5Pa.js} +1 -1
  125. package/dist/{c-CTKNfUJI.js.map → c-DtlFV5Pa.js.map} +1 -1
  126. package/dist/calendar-2yhnCkGW.cjs +2 -0
  127. package/dist/calendar-2yhnCkGW.cjs.map +1 -0
  128. package/dist/calendar-DcNYDTVb.js +195 -0
  129. package/dist/calendar-DcNYDTVb.js.map +1 -0
  130. package/dist/calendar.cjs +1 -1
  131. package/dist/calendar.js +1 -1
  132. package/dist/{calendarDates-CYkJqcnp.js → calendarDates-Bpw_G_QR.js} +30 -19
  133. package/dist/calendarDates-Bpw_G_QR.js.map +1 -0
  134. package/dist/calendarDates-Cg0nm69Y.cjs +2 -0
  135. package/dist/calendarDates-Cg0nm69Y.cjs.map +1 -0
  136. package/dist/cards-Bp886TRb.cjs +2 -0
  137. package/dist/cards-Bp886TRb.cjs.map +1 -0
  138. package/dist/cards-BvER6Gx0.js +1277 -0
  139. package/dist/cards-BvER6Gx0.js.map +1 -0
  140. package/dist/cards.cjs +1 -1
  141. package/dist/cards.js +2 -2
  142. package/dist/{cn-YER3QsV1.js → cn-CUSXNnjF.js} +1 -1
  143. package/dist/{cn-YER3QsV1.js.map → cn-CUSXNnjF.js.map} +1 -1
  144. package/dist/{cn-CU5TNITO.cjs → cn-DYFxgzi2.cjs} +1 -1
  145. package/dist/{cn-CU5TNITO.cjs.map → cn-DYFxgzi2.cjs.map} +1 -1
  146. package/dist/components/cards/MCardDaySchedule/MCardDaySchedule.d.ts +1 -1
  147. package/dist/components/cards/MCardDocumentTree/MCardDocumentTree.d.ts +1 -1
  148. package/dist/components/cards/MCardGrid/MCardGrid.d.ts +1 -1
  149. package/dist/components/cards/MCardPayment/MCardPayment.d.ts +1 -1
  150. package/dist/components/cards/MCardPayment/MCardPayment.types.d.ts +4 -0
  151. package/dist/components/cards/MCardPaymentMethod/MCardPaymentMethod.d.ts +1 -1
  152. package/dist/components/cards/MStatCard/MStatCard.d.ts +1 -1
  153. package/dist/components/controls/MCheckbox/MCheckbox.types.d.ts +6 -0
  154. package/dist/components/controls/MLoadMore/MLoadMore.d.ts +1 -1
  155. package/dist/components/controls/MSlider/MSlider.d.ts +1 -1
  156. package/dist/components/controls/MSlider/MSlider.types.d.ts +5 -0
  157. package/dist/components/data/MTreeView/MTreeView.d.ts +1 -1
  158. package/dist/components/data/MTreeView/MTreeView.types.d.ts +6 -0
  159. package/dist/components/data/MWeekGrid/MWeekGrid.d.ts +1 -1
  160. package/dist/components/data/MWeekGrid/MWeekGrid.types.d.ts +9 -3
  161. package/dist/components/display/MCodeBlock/MCodeBlock.d.ts +1 -1
  162. package/dist/components/dropdowns/MAutocomplete/MAutocomplete.d.ts +1 -1
  163. package/dist/components/dropdowns/MAutocomplete/MAutocomplete.types.d.ts +8 -2
  164. package/dist/components/dropdowns/MSelect/MSelect.d.ts +1 -1
  165. package/dist/components/dropdowns/shared/TimeColumnListbox.d.ts +20 -0
  166. package/dist/components/feedback/MAlert/MAlert.d.ts +1 -1
  167. package/dist/components/feedback/MBadge/MBadge.d.ts +1 -1
  168. package/dist/components/feedback/MBanner/MBanner.d.ts +1 -1
  169. package/dist/components/feedback/MLoader/MLoader.d.ts +1 -1
  170. package/dist/components/feedback/MSpinner/MSpinner.d.ts +1 -1
  171. package/dist/components/feedback/MTag/MTag.d.ts +1 -1
  172. package/dist/components/inputs/MInput/MInput.types.d.ts +6 -1
  173. package/dist/components/inputs/MInput/useFormatCaret.d.ts +8 -0
  174. package/dist/components/layout/MCanvasGrid/MCanvasGrid.types.d.ts +5 -0
  175. package/dist/components/layout/MContainer/MContainer.d.ts +1 -1
  176. package/dist/components/layout/MDivider/MDivider.d.ts +1 -1
  177. package/dist/components/layout/MFooter/MFooter.d.ts +1 -1
  178. package/dist/components/layout/MHeader/MHeader.d.ts +1 -1
  179. package/dist/components/layout/MInline/MInline.d.ts +1 -1
  180. package/dist/components/layout/MNavbar/MNavbar.d.ts +1 -1
  181. package/dist/components/layout/MNavbar/MNavbar.types.d.ts +2 -0
  182. package/dist/components/layout/MSection/MSection.d.ts +1 -1
  183. package/dist/components/layout/MStack/MStack.d.ts +1 -1
  184. package/dist/components/layout/MStickyPanel/MStickyPanel.types.d.ts +4 -0
  185. package/dist/components/layout/MSurface/MSurface.d.ts +1 -1
  186. package/dist/components/media/MAvatar/MAvatar.d.ts +1 -1
  187. package/dist/components/media/MAvatar/MAvatar.types.d.ts +10 -0
  188. package/dist/components/media/MCarousel/MCarousel.d.ts +1 -1
  189. package/dist/components/media/MImage/MImage.d.ts +1 -1
  190. package/dist/components/media/carouselA11y.d.ts +9 -0
  191. package/dist/components/overlays/MCommandPalette/MCommandPalette.d.ts +1 -1
  192. package/dist/components/overlays/MDropdownMenu/MDropdownMenu.d.ts +4 -2
  193. package/dist/components/overlays/MDropdownMenu/MDropdownMenu.types.d.ts +3 -1
  194. package/dist/components/overlays/MPopconfirm/MPopconfirm.d.ts +1 -1
  195. package/dist/components/overlays/scrollLock.d.ts +14 -0
  196. package/dist/components/primitives/MPopover/MPopover.d.ts +1 -1
  197. package/dist/components/primitives/MPopover/MPopover.types.d.ts +32 -1
  198. package/dist/components/primitives/MPopover/popoverStack.d.ts +8 -0
  199. package/dist/components/typography/MHeading/MHeading.d.ts +2 -3
  200. package/dist/components/typography/MSubText/MSubText.d.ts +1 -1
  201. package/dist/components/typography/MText/MText.d.ts +1 -1
  202. package/dist/controls-B4Dxaab4.js +491 -0
  203. package/dist/controls-B4Dxaab4.js.map +1 -0
  204. package/dist/controls-CyXEIOXD.cjs +2 -0
  205. package/dist/controls-CyXEIOXD.cjs.map +1 -0
  206. package/dist/controls.cjs +1 -1
  207. package/dist/controls.js +5 -5
  208. package/dist/{core-D5-SQcs8.js → core-B8VC-Umz.js} +1 -1
  209. package/dist/{core-D5-SQcs8.js.map → core-B8VC-Umz.js.map} +1 -1
  210. package/dist/{core-D66c1_Wo.cjs → core-w629c4ND.cjs} +1 -1
  211. package/dist/{core-D66c1_Wo.cjs.map → core-w629c4ND.cjs.map} +1 -1
  212. package/dist/{cpp-DAzz2TpY.js → cpp-BraS2arf.js} +1 -1
  213. package/dist/{cpp-DAzz2TpY.js.map → cpp-BraS2arf.js.map} +1 -1
  214. package/dist/{cpp-BMULAf-B.cjs → cpp-LIcuHkFj.cjs} +1 -1
  215. package/dist/{cpp-BMULAf-B.cjs.map → cpp-LIcuHkFj.cjs.map} +1 -1
  216. package/dist/creditCards-Bo2mrc53.cjs +2 -0
  217. package/dist/creditCards-Bo2mrc53.cjs.map +1 -0
  218. package/dist/{creditCards-D_iWmtG6.js → creditCards-DmDOyvcw.js} +20 -31
  219. package/dist/creditCards-DmDOyvcw.js.map +1 -0
  220. package/dist/{css-9M03GzKO.cjs → css-D6fGBtGV.cjs} +1 -1
  221. package/dist/{css-9M03GzKO.cjs.map → css-D6fGBtGV.cjs.map} +1 -1
  222. package/dist/{css-EGOXTWIl.js → css-Dy8pFAWa.js} +1 -1
  223. package/dist/{css-EGOXTWIl.js.map → css-Dy8pFAWa.js.map} +1 -1
  224. package/dist/data-BM3KG8oN.cjs +2 -0
  225. package/dist/data-BM3KG8oN.cjs.map +1 -0
  226. package/dist/data-qnR8OBmj.js +808 -0
  227. package/dist/data-qnR8OBmj.js.map +1 -0
  228. package/dist/data.cjs +1 -1
  229. package/dist/data.js +2 -2
  230. package/dist/{dateUtils-CUY6CRCf.js → dateUtils-B-ToNZq_.js} +5 -6
  231. package/dist/dateUtils-B-ToNZq_.js.map +1 -0
  232. package/dist/dateUtils-z2L7ZaxA.cjs +2 -0
  233. package/dist/dateUtils-z2L7ZaxA.cjs.map +1 -0
  234. package/dist/display-BLMOBofj.cjs +3 -0
  235. package/dist/display-BLMOBofj.cjs.map +1 -0
  236. package/dist/display-Dlb79lkA.js +968 -0
  237. package/dist/display-Dlb79lkA.js.map +1 -0
  238. package/dist/display.cjs +1 -1
  239. package/dist/display.js +2 -2
  240. package/dist/dropdowns-2_7VMEDo.js +2009 -0
  241. package/dist/dropdowns-2_7VMEDo.js.map +1 -0
  242. package/dist/dropdowns-DN7j8J-V.cjs +2 -0
  243. package/dist/dropdowns-DN7j8J-V.cjs.map +1 -0
  244. package/dist/dropdowns.cjs +1 -1
  245. package/dist/dropdowns.js +1 -1
  246. package/dist/feedback-CECayytY.js +335 -0
  247. package/dist/feedback-CECayytY.js.map +1 -0
  248. package/dist/feedback-paV8Ls-h.cjs +2 -0
  249. package/dist/feedback-paV8Ls-h.cjs.map +1 -0
  250. package/dist/feedback.cjs +1 -1
  251. package/dist/feedback.js +5 -5
  252. package/dist/form-Br56h5EF.cjs +2 -0
  253. package/dist/form-Br56h5EF.cjs.map +1 -0
  254. package/dist/form-CJmMZgsH.js +165 -0
  255. package/dist/form-CJmMZgsH.js.map +1 -0
  256. package/dist/form.cjs +1 -1
  257. package/dist/form.js +1 -1
  258. package/dist/{formatters-CNjg_h7-.cjs → formatters-CauWlsnM.cjs} +1 -1
  259. package/dist/{formatters-CNjg_h7-.cjs.map → formatters-CauWlsnM.cjs.map} +1 -1
  260. package/dist/{formatters-T0vvjMtB.js → formatters-Doqdu_w1.js} +1 -1
  261. package/dist/{formatters-T0vvjMtB.js.map → formatters-Doqdu_w1.js.map} +1 -1
  262. package/dist/frameworkTexts-CaqdiKHW.cjs +2 -0
  263. package/dist/frameworkTexts-CaqdiKHW.cjs.map +1 -0
  264. package/dist/frameworkTexts-o43FqY1A.js +505 -0
  265. package/dist/frameworkTexts-o43FqY1A.js.map +1 -0
  266. package/dist/i18n/MI18nProvider.d.ts +6 -1
  267. package/dist/i18n/frameworkTexts.d.ts +572 -0
  268. package/dist/i18n/index.d.ts +1 -0
  269. package/dist/i18n.cjs +1 -1
  270. package/dist/i18n.js +2 -2
  271. package/dist/icons-Bp8bB9TP.cjs +2 -0
  272. package/dist/icons-Bp8bB9TP.cjs.map +1 -0
  273. package/dist/{icons-CBMl-kOM.js → icons-IqEBmGh3.js} +1223 -1220
  274. package/dist/icons-IqEBmGh3.js.map +1 -0
  275. package/dist/icons.cjs +1 -1
  276. package/dist/icons.js +1 -1
  277. package/dist/illustrations.cjs +1 -1
  278. package/dist/illustrations.js +1 -1
  279. package/dist/index.cjs +1 -1
  280. package/dist/index.d.ts +4 -2
  281. package/dist/index.js +56 -56
  282. package/dist/inputs-C0BJzlA-.js +1923 -0
  283. package/dist/inputs-C0BJzlA-.js.map +1 -0
  284. package/dist/inputs-CvNBBLFA.cjs +2 -0
  285. package/dist/inputs-CvNBBLFA.cjs.map +1 -0
  286. package/dist/inputs.cjs +1 -1
  287. package/dist/inputs.js +4 -4
  288. package/dist/{javascript-CHSg4NGc.js → javascript-CqKLBRqa.js} +1 -1
  289. package/dist/{javascript-CHSg4NGc.js.map → javascript-CqKLBRqa.js.map} +1 -1
  290. package/dist/{javascript-CastOQF5.cjs → javascript-Oy5hkezl.cjs} +1 -1
  291. package/dist/{javascript-CastOQF5.cjs.map → javascript-Oy5hkezl.cjs.map} +1 -1
  292. package/dist/{json-DCkJ-m-p.cjs → json-BP8eqPWc.cjs} +1 -1
  293. package/dist/{json-DCkJ-m-p.cjs.map → json-BP8eqPWc.cjs.map} +1 -1
  294. package/dist/{json-Bejy9Rlg.js → json-DJkyYaPe.js} +1 -1
  295. package/dist/{json-Bejy9Rlg.js.map → json-DJkyYaPe.js.map} +1 -1
  296. package/dist/layout-BSFqGXLZ.js +1101 -0
  297. package/dist/layout-BSFqGXLZ.js.map +1 -0
  298. package/dist/layout-MKqvUkPv.cjs +2 -0
  299. package/dist/layout-MKqvUkPv.cjs.map +1 -0
  300. package/dist/layout.cjs +1 -1
  301. package/dist/layout.js +6 -6
  302. package/dist/{licensing-f5KYVz7D.js → licensing-BKmoAdfr.js} +5 -4
  303. package/dist/licensing-BKmoAdfr.js.map +1 -0
  304. package/dist/licensing-DVgjkw-s.cjs +2 -0
  305. package/dist/licensing-DVgjkw-s.cjs.map +1 -0
  306. package/dist/{locale-DRRl_s5-.cjs → locale-C08q7FjE.cjs} +2 -2
  307. package/dist/{locale-DRRl_s5-.cjs.map → locale-C08q7FjE.cjs.map} +1 -1
  308. package/dist/{locale-CS1-IY_I.js → locale-CjJpk9GN.js} +1 -1
  309. package/dist/{locale-CS1-IY_I.js.map → locale-CjJpk9GN.js.map} +1 -1
  310. package/dist/media-fiasAbBv.js +485 -0
  311. package/dist/media-fiasAbBv.js.map +1 -0
  312. package/dist/media-tr1s386v.cjs +2 -0
  313. package/dist/media-tr1s386v.cjs.map +1 -0
  314. package/dist/media.cjs +1 -1
  315. package/dist/media.js +2 -2
  316. package/dist/overlays-Df-NpmkW.cjs +2 -0
  317. package/dist/overlays-Df-NpmkW.cjs.map +1 -0
  318. package/dist/overlays-W0WW3fn7.js +607 -0
  319. package/dist/overlays-W0WW3fn7.js.map +1 -0
  320. package/dist/overlays.cjs +1 -1
  321. package/dist/overlays.js +3 -3
  322. package/dist/{php-BdVXegqn.cjs → php-Cwjc-ZYq.cjs} +1 -1
  323. package/dist/{php-BdVXegqn.cjs.map → php-Cwjc-ZYq.cjs.map} +1 -1
  324. package/dist/{php-Cb_S1hXT.js → php-Db8PWzaX.js} +1 -1
  325. package/dist/{php-Cb_S1hXT.js.map → php-Db8PWzaX.js.map} +1 -1
  326. package/dist/primitives.cjs +1 -1
  327. package/dist/primitives.js +2 -2
  328. package/dist/radioGroupKeys-Bm-Qeh8G.js +28 -0
  329. package/dist/radioGroupKeys-Bm-Qeh8G.js.map +1 -0
  330. package/dist/radioGroupKeys-COL8uXbH.cjs +2 -0
  331. package/dist/radioGroupKeys-COL8uXbH.cjs.map +1 -0
  332. package/dist/{relativeTime-Cr-NVzij.js → relativeTime-BqCuaBqb.js} +1 -1
  333. package/dist/{relativeTime-Cr-NVzij.js.map → relativeTime-BqCuaBqb.js.map} +1 -1
  334. package/dist/{relativeTime-DgYBUaVm.cjs → relativeTime-DUbW4O44.cjs} +1 -1
  335. package/dist/{relativeTime-DgYBUaVm.cjs.map → relativeTime-DUbW4O44.cjs.map} +1 -1
  336. package/dist/scrollLock-C9P9o6wH.cjs +2 -0
  337. package/dist/scrollLock-C9P9o6wH.cjs.map +1 -0
  338. package/dist/scrollLock-D27VmgPV.js +14 -0
  339. package/dist/scrollLock-D27VmgPV.js.map +1 -0
  340. package/dist/style-runtime.cjs +1 -1
  341. package/dist/style-runtime.js +1 -1
  342. package/dist/styles.css +1 -1
  343. package/dist/theme/MThemeProvider.d.ts +18 -1
  344. package/dist/theme/index.d.ts +2 -2
  345. package/dist/{theme-DAOU1aPs.js → theme-B_juOenJ.js} +71 -61
  346. package/dist/theme-B_juOenJ.js.map +1 -0
  347. package/dist/theme-ByPZH0dh.cjs +2 -0
  348. package/dist/theme-ByPZH0dh.cjs.map +1 -0
  349. package/dist/theme.cjs +1 -1
  350. package/dist/theme.js +2 -2
  351. package/dist/{typescript-CcGBfzlS.cjs → typescript-QKlfKtex.cjs} +1 -1
  352. package/dist/{typescript-CcGBfzlS.cjs.map → typescript-QKlfKtex.cjs.map} +1 -1
  353. package/dist/{typescript-0VHxrxf2.js → typescript-chdf_txx.js} +1 -1
  354. package/dist/{typescript-0VHxrxf2.js.map → typescript-chdf_txx.js.map} +1 -1
  355. package/dist/{typography-CAW17MDj.js → typography-DNcB8dOy.js} +3 -3
  356. package/dist/{typography-CAW17MDj.js.map → typography-DNcB8dOy.js.map} +1 -1
  357. package/dist/{typography-C4_O8len.cjs → typography-I7aeG8pH.cjs} +2 -2
  358. package/dist/{typography-C4_O8len.cjs.map → typography-I7aeG8pH.cjs.map} +1 -1
  359. package/dist/typography.cjs +1 -1
  360. package/dist/typography.js +6 -6
  361. package/dist/useGhostText-CKsb8Ufa.js +240 -0
  362. package/dist/useGhostText-CKsb8Ufa.js.map +1 -0
  363. package/dist/useGhostText-DO-tfxS0.cjs +2 -0
  364. package/dist/useGhostText-DO-tfxS0.cjs.map +1 -0
  365. package/dist/{useInteractionEffect-CFwDX5UF.cjs → useInteractionEffect-CtXlbjhC.cjs} +2 -2
  366. package/dist/{useInteractionEffect-CFwDX5UF.cjs.map → useInteractionEffect-CtXlbjhC.cjs.map} +1 -1
  367. package/dist/useModalLayer-CpOPSDbf.js +128 -0
  368. package/dist/useModalLayer-CpOPSDbf.js.map +1 -0
  369. package/dist/useModalLayer-Cyt93Prs.cjs +2 -0
  370. package/dist/useModalLayer-Cyt93Prs.cjs.map +1 -0
  371. package/dist/utils/calendarDates.d.ts +5 -0
  372. package/dist/utils/radioGroupKeys.d.ts +9 -0
  373. package/dist/utils/useDateGridNav.d.ts +39 -0
  374. package/dist/utils/useGhostText.d.ts +2 -1
  375. package/dist/utils/useKeyboardNav.d.ts +51 -5
  376. package/dist/utils/useModalLayer.d.ts +14 -0
  377. package/dist/utils/useRovingToolbar.d.ts +26 -0
  378. package/dist/utils/validationMessages.d.ts +15 -0
  379. package/dist/utils.cjs +1 -1
  380. package/dist/utils.entry.d.ts +3 -1
  381. package/dist/utils.js +11 -11
  382. package/dist/validationMessages-BFimXxlT.js +23 -0
  383. package/dist/validationMessages-BFimXxlT.js.map +1 -0
  384. package/dist/validationMessages-iHu7apWr.cjs +2 -0
  385. package/dist/validationMessages-iHu7apWr.cjs.map +1 -0
  386. package/dist/validators-SZmLxnir.cjs +2 -0
  387. package/dist/validators-SZmLxnir.cjs.map +1 -0
  388. package/dist/{validators-DVYOtFnw.js → validators-ULebNme2.js} +107 -106
  389. package/dist/validators-ULebNme2.js.map +1 -0
  390. package/dist/{xml-Dbm3mobK.cjs → xml-DEtyywwU.cjs} +1 -1
  391. package/dist/{xml-Dbm3mobK.cjs.map → xml-DEtyywwU.cjs.map} +1 -1
  392. package/dist/{xml-8GjNy8SM.js → xml-DnydRpfh.js} +1 -1
  393. package/dist/{xml-8GjNy8SM.js.map → xml-DnydRpfh.js.map} +1 -1
  394. package/package.json +1 -1
  395. package/dist/MAvatar-Capz5Gbc.cjs +0 -2
  396. package/dist/MAvatar-Capz5Gbc.cjs.map +0 -1
  397. package/dist/MAvatar-DtJCj3dD.js +0 -63
  398. package/dist/MAvatar-DtJCj3dD.js.map +0 -1
  399. package/dist/MButton-C1pnL4_j.js +0 -115
  400. package/dist/MButton-C1pnL4_j.js.map +0 -1
  401. package/dist/MButton-sTKnano6.cjs +0 -2
  402. package/dist/MButton-sTKnano6.cjs.map +0 -1
  403. package/dist/MCard-DK-_FkpE.cjs.map +0 -1
  404. package/dist/MCard-azpp4YVD.js.map +0 -1
  405. package/dist/MCheckbox-B7SpcD4H.js +0 -59
  406. package/dist/MCheckbox-B7SpcD4H.js.map +0 -1
  407. package/dist/MCheckbox-CIX7wp41.cjs +0 -2
  408. package/dist/MCheckbox-CIX7wp41.cjs.map +0 -1
  409. package/dist/MConflictIllustration-CZ3Md38Z.cjs +0 -2
  410. package/dist/MConflictIllustration-CZ3Md38Z.cjs.map +0 -1
  411. package/dist/MConflictIllustration-znC7ijmP.js.map +0 -1
  412. package/dist/MDetailList-Ce7KzUKC.cjs +0 -2
  413. package/dist/MDetailList-Ce7KzUKC.cjs.map +0 -1
  414. package/dist/MDetailList-fDhVyhm7.js +0 -98
  415. package/dist/MDetailList-fDhVyhm7.js.map +0 -1
  416. package/dist/MDropdownMenu-B_QWQhxy.cjs +0 -2
  417. package/dist/MDropdownMenu-B_QWQhxy.cjs.map +0 -1
  418. package/dist/MDropdownMenu-C4CuKMRZ.js +0 -172
  419. package/dist/MDropdownMenu-C4CuKMRZ.js.map +0 -1
  420. package/dist/MGrid-CYL3cbUI.js +0 -265
  421. package/dist/MGrid-CYL3cbUI.js.map +0 -1
  422. package/dist/MGrid-fTx6wFq_.cjs +0 -2
  423. package/dist/MGrid-fTx6wFq_.cjs.map +0 -1
  424. package/dist/MHeading-B7KgSP4T.js +0 -21
  425. package/dist/MHeading-B7KgSP4T.js.map +0 -1
  426. package/dist/MHeading-KDSpnCof.cjs +0 -2
  427. package/dist/MHeading-KDSpnCof.cjs.map +0 -1
  428. package/dist/MI18nProvider-DXRbB0VY.cjs +0 -2
  429. package/dist/MI18nProvider-DXRbB0VY.cjs.map +0 -1
  430. package/dist/MI18nProvider-VH14CI8u.js +0 -72
  431. package/dist/MI18nProvider-VH14CI8u.js.map +0 -1
  432. package/dist/MInput-C8ObGzQk.js +0 -187
  433. package/dist/MInput-C8ObGzQk.js.map +0 -1
  434. package/dist/MInput-CGl2Q-rM.cjs +0 -2
  435. package/dist/MInput-CGl2Q-rM.cjs.map +0 -1
  436. package/dist/MInputCVC-Blv5PeyS.js +0 -320
  437. package/dist/MInputCVC-Blv5PeyS.js.map +0 -1
  438. package/dist/MInputCVC-lAFKTV6y.cjs +0 -2
  439. package/dist/MInputCVC-lAFKTV6y.cjs.map +0 -1
  440. package/dist/MInputSearch-BM8gLlJ1.js +0 -43
  441. package/dist/MInputSearch-BM8gLlJ1.js.map +0 -1
  442. package/dist/MInputSearch-BZDnbFB4.cjs +0 -2
  443. package/dist/MInputSearch-BZDnbFB4.cjs.map +0 -1
  444. package/dist/MLink-Bd8fLH1N.js +0 -31
  445. package/dist/MLink-Bd8fLH1N.js.map +0 -1
  446. package/dist/MLink-U24G6KJj.cjs +0 -2
  447. package/dist/MLink-U24G6KJj.cjs.map +0 -1
  448. package/dist/MLoader-CnvWqFtA.js +0 -41
  449. package/dist/MLoader-CnvWqFtA.js.map +0 -1
  450. package/dist/MLoader-CvFIvytw.cjs +0 -2
  451. package/dist/MLoader-CvFIvytw.cjs.map +0 -1
  452. package/dist/MPagination-BkvOEZpp.js +0 -113
  453. package/dist/MPagination-BkvOEZpp.js.map +0 -1
  454. package/dist/MPagination-DgQta29Q.cjs +0 -2
  455. package/dist/MPagination-DgQta29Q.cjs.map +0 -1
  456. package/dist/MPopover-C-e1CoV0.cjs +0 -2
  457. package/dist/MPopover-C-e1CoV0.cjs.map +0 -1
  458. package/dist/MPopover-Dd-GIBU6.js +0 -155
  459. package/dist/MPopover-Dd-GIBU6.js.map +0 -1
  460. package/dist/MPortal-Ba2Sxset.js +0 -10
  461. package/dist/MPortal-Ba2Sxset.js.map +0 -1
  462. package/dist/MPortal-DUSIuINN.cjs +0 -2
  463. package/dist/MPortal-DUSIuINN.cjs.map +0 -1
  464. package/dist/MSimpleGrid-BWKurW6H.js.map +0 -1
  465. package/dist/MSimpleGrid-BzlIitcJ.cjs +0 -2
  466. package/dist/MSimpleGrid-BzlIitcJ.cjs.map +0 -1
  467. package/dist/MSkeleton-BoFpowFU.cjs +0 -2
  468. package/dist/MSkeleton-BoFpowFU.cjs.map +0 -1
  469. package/dist/MSkeleton-C5uD4Axo.js.map +0 -1
  470. package/dist/MSlider-BTDBqF8t.cjs +0 -2
  471. package/dist/MSlider-BTDBqF8t.cjs.map +0 -1
  472. package/dist/MSlider-CqrusKJQ.js +0 -75
  473. package/dist/MSlider-CqrusKJQ.js.map +0 -1
  474. package/dist/MStack-B3Ldqsc-.cjs +0 -2
  475. package/dist/MStack-B3Ldqsc-.cjs.map +0 -1
  476. package/dist/MStack-CSCw6to2.js +0 -39
  477. package/dist/MStack-CSCw6to2.js.map +0 -1
  478. package/dist/MSubText-47PsgE8T.cjs +0 -2
  479. package/dist/MSubText-47PsgE8T.cjs.map +0 -1
  480. package/dist/MSubText-C-N15d4Z.js +0 -17
  481. package/dist/MSubText-C-N15d4Z.js.map +0 -1
  482. package/dist/MSurface-B-sjyczH.js +0 -74
  483. package/dist/MSurface-B-sjyczH.js.map +0 -1
  484. package/dist/MSurface-QYEygc_0.cjs +0 -2
  485. package/dist/MSurface-QYEygc_0.cjs.map +0 -1
  486. package/dist/MTag-BjV-dXkk.cjs +0 -2
  487. package/dist/MTag-BjV-dXkk.cjs.map +0 -1
  488. package/dist/MTag-D9q6faIk.js +0 -39
  489. package/dist/MTag-D9q6faIk.js.map +0 -1
  490. package/dist/MText-CL-LPcXi.js +0 -45
  491. package/dist/MText-CL-LPcXi.js.map +0 -1
  492. package/dist/MText-Dni707tS.cjs +0 -2
  493. package/dist/MText-Dni707tS.cjs.map +0 -1
  494. package/dist/MTooltip-ChvuN4Ow.cjs +0 -2
  495. package/dist/MTooltip-ChvuN4Ow.cjs.map +0 -1
  496. package/dist/MTooltip-H3we0a7w.js +0 -57
  497. package/dist/MTooltip-H3we0a7w.js.map +0 -1
  498. package/dist/MTreeView-B1J7uqd1.js +0 -315
  499. package/dist/MTreeView-B1J7uqd1.js.map +0 -1
  500. package/dist/MTreeView-VYp0eErQ.cjs +0 -2
  501. package/dist/MTreeView-VYp0eErQ.cjs.map +0 -1
  502. package/dist/calendar-P7MwKfWS.cjs +0 -2
  503. package/dist/calendar-P7MwKfWS.cjs.map +0 -1
  504. package/dist/calendar-bzeZRst9.js +0 -193
  505. package/dist/calendar-bzeZRst9.js.map +0 -1
  506. package/dist/calendarDates-AnlGcvZM.cjs +0 -2
  507. package/dist/calendarDates-AnlGcvZM.cjs.map +0 -1
  508. package/dist/calendarDates-CYkJqcnp.js.map +0 -1
  509. package/dist/cards-CFDJsdxR.js +0 -1226
  510. package/dist/cards-CFDJsdxR.js.map +0 -1
  511. package/dist/cards-DeA7I2KC.cjs +0 -2
  512. package/dist/cards-DeA7I2KC.cjs.map +0 -1
  513. package/dist/controls-BKAhqjNM.js +0 -474
  514. package/dist/controls-BKAhqjNM.js.map +0 -1
  515. package/dist/controls-KK-TyUTT.cjs +0 -2
  516. package/dist/controls-KK-TyUTT.cjs.map +0 -1
  517. package/dist/creditCards-D_HwRUBz.cjs +0 -2
  518. package/dist/creditCards-D_HwRUBz.cjs.map +0 -1
  519. package/dist/creditCards-D_iWmtG6.js.map +0 -1
  520. package/dist/data-CgLutFxU.js +0 -689
  521. package/dist/data-CgLutFxU.js.map +0 -1
  522. package/dist/data-DFrkJTlF.cjs +0 -2
  523. package/dist/data-DFrkJTlF.cjs.map +0 -1
  524. package/dist/dateUtils-CUY6CRCf.js.map +0 -1
  525. package/dist/dateUtils-Dq1vaA-D.cjs +0 -2
  526. package/dist/dateUtils-Dq1vaA-D.cjs.map +0 -1
  527. package/dist/display--E7rI0tk.cjs +0 -3
  528. package/dist/display--E7rI0tk.cjs.map +0 -1
  529. package/dist/display-BnkHKW1n.js +0 -782
  530. package/dist/display-BnkHKW1n.js.map +0 -1
  531. package/dist/dropdowns-DGYg9zIh.cjs +0 -2
  532. package/dist/dropdowns-DGYg9zIh.cjs.map +0 -1
  533. package/dist/dropdowns-Dq-xAplH.js +0 -1698
  534. package/dist/dropdowns-Dq-xAplH.js.map +0 -1
  535. package/dist/feedback-CA77ShtB.cjs +0 -2
  536. package/dist/feedback-CA77ShtB.cjs.map +0 -1
  537. package/dist/feedback-CCwbdNZu.js +0 -255
  538. package/dist/feedback-CCwbdNZu.js.map +0 -1
  539. package/dist/form-CAFcvmUS.js +0 -167
  540. package/dist/form-CAFcvmUS.js.map +0 -1
  541. package/dist/form-DpfzLUOn.cjs +0 -2
  542. package/dist/form-DpfzLUOn.cjs.map +0 -1
  543. package/dist/frameworkTexts-DH0Xp-Vx.js +0 -78
  544. package/dist/frameworkTexts-DH0Xp-Vx.js.map +0 -1
  545. package/dist/frameworkTexts-iDXhcW6k.cjs +0 -2
  546. package/dist/frameworkTexts-iDXhcW6k.cjs.map +0 -1
  547. package/dist/icons-CBMl-kOM.js.map +0 -1
  548. package/dist/icons-D_NB67he.cjs +0 -2
  549. package/dist/icons-D_NB67he.cjs.map +0 -1
  550. package/dist/inputs-B1LCddA4.js +0 -1752
  551. package/dist/inputs-B1LCddA4.js.map +0 -1
  552. package/dist/inputs-Clenc4Rm.cjs +0 -2
  553. package/dist/inputs-Clenc4Rm.cjs.map +0 -1
  554. package/dist/layout-CNoZdeXw.cjs +0 -2
  555. package/dist/layout-CNoZdeXw.cjs.map +0 -1
  556. package/dist/layout-DsE4zfpg.js +0 -882
  557. package/dist/layout-DsE4zfpg.js.map +0 -1
  558. package/dist/licensing-DGIdtfNg.cjs +0 -2
  559. package/dist/licensing-DGIdtfNg.cjs.map +0 -1
  560. package/dist/licensing-f5KYVz7D.js.map +0 -1
  561. package/dist/media-DRTBXDnn.cjs +0 -2
  562. package/dist/media-DRTBXDnn.cjs.map +0 -1
  563. package/dist/media-vOQOIYFD.js +0 -402
  564. package/dist/media-vOQOIYFD.js.map +0 -1
  565. package/dist/overlays-BKk_ZXue.js +0 -568
  566. package/dist/overlays-BKk_ZXue.js.map +0 -1
  567. package/dist/overlays-Qbp4d596.cjs +0 -2
  568. package/dist/overlays-Qbp4d596.cjs.map +0 -1
  569. package/dist/theme-DAOU1aPs.js.map +0 -1
  570. package/dist/theme-DgaM4CjM.cjs +0 -2
  571. package/dist/theme-DgaM4CjM.cjs.map +0 -1
  572. package/dist/useGhostText-DG0bzcao.js +0 -68
  573. package/dist/useGhostText-DG0bzcao.js.map +0 -1
  574. package/dist/useGhostText-Dlemg1vw.cjs +0 -2
  575. package/dist/useGhostText-Dlemg1vw.cjs.map +0 -1
  576. package/dist/useKeyboardNav-Bm-dxVq-.cjs +0 -2
  577. package/dist/useKeyboardNav-Bm-dxVq-.cjs.map +0 -1
  578. package/dist/useKeyboardNav-iEXOdEMB.js +0 -43
  579. package/dist/useKeyboardNav-iEXOdEMB.js.map +0 -1
  580. package/dist/validators-B6yWdsu2.cjs +0 -2
  581. package/dist/validators-B6yWdsu2.cjs.map +0 -1
  582. package/dist/validators-DVYOtFnw.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dropdowns-DN7j8J-V.cjs","names":[],"sources":["../src/components/dropdowns/MSelect/MSelect.tsx","../src/components/dropdowns/MAutocomplete/MAutocomplete.tsx","../src/utils/colorRgbVar.ts","../src/utils/useDateGridNav.ts","../src/components/dropdowns/shared/TimeColumnListbox.tsx","../src/components/dropdowns/MDatePicker/MDatePicker.tsx","../src/components/dropdowns/MTimePicker/MTimePicker.tsx","../src/components/dropdowns/MDateRangePicker/MDateRangePicker.tsx"],"sourcesContent":["import {useState, useRef, useCallback, useId, useMemo} from 'react'\nimport type * as React from 'react'\nimport type {MSelectProps, MSelectOption} from './MSelect.types'\nimport {MPopover} from '../../primitives'\nimport {cn} from '../../../utils/cn'\nimport {useKeyboardNav} from '../../../utils/useKeyboardNav'\nimport {MSpinner, MTag} from '../../feedback'\nimport {MCheckIcon, MChevronDownIcon, MCloseIcon} from '../../../icons'\nimport './MSelect.css'\nimport {useMCommonTexts, useMSelectTexts} from '../../../i18n/frameworkTexts'\n\n// Render a selectable list with optional search, grouping and multi-select tags.\nexport function MSelect({\n options,\n value,\n defaultValue,\n onChange,\n multiple = false,\n searchable = false,\n placeholder: placeholderProp,\n disabled = false,\n name,\n id,\n variant = 'outlined',\n size = 'md',\n color,\n fullWidth = false,\n label,\n helperText,\n errorText,\n error = false,\n required = false,\n loading = false,\n clearable = false,\n maxHeight = 300,\n noOptionsText: noOptionsTextProp,\n renderOption,\n searchPlaceholder: searchPlaceholderProp,\n renderValue,\n className,\n style,\n}: MSelectProps) {\n const texts = useMCommonTexts()\n const selectTexts = useMSelectTexts()\n const placeholder = placeholderProp ?? selectTexts.placeholder\n const noOptionsText = noOptionsTextProp ?? selectTexts.noOptions\n const searchPlaceholder = searchPlaceholderProp ?? selectTexts.searchPlaceholder\n const [open, setOpen] = useState(false)\n const [internalValue, setInternalValue] = useState<string | string[]>(defaultValue ?? (multiple ? [] : ''))\n const [search, setSearch] = useState('')\n const triggerRef = useRef<HTMLDivElement>(null)\n const searchRef = useRef<HTMLInputElement>(null)\n\n const currentValue = value !== undefined ? value : internalValue\n const hasError = error || !!errorText\n\n // Normalize the public value into a string array for rendering and selection logic.\n const selectedValues = useMemo(() => {\n if (Array.isArray(currentValue)) return currentValue\n return currentValue ? [currentValue] : []\n }, [currentValue])\n\n const selectedOptions = useMemo(\n () => options.filter((o) => selectedValues.includes(o.value)),\n [options, selectedValues]\n )\n\n // Filter options locally when the searchable mode is active.\n const filteredOptions = useMemo(() => {\n if (!searchable || !search) return options\n const lower = search.toLowerCase()\n return options.filter((o) => o.label.toLowerCase().includes(lower))\n }, [options, searchable, search])\n\n // Group options\n // Preserve group headers without changing the flat keyboard navigation index map.\n const groupedOptions = useMemo(() => {\n const groups = new Map<string, MSelectOption[]>()\n for (const opt of filteredOptions) {\n const key = opt.group ?? ''\n if (!groups.has(key)) groups.set(key, [])\n groups.get(key)!.push(opt)\n }\n return groups\n }, [filteredOptions])\n\n // Keyboard order must match the rendered (grouped) order. With interleaved groups\n // (A1, B1, A2) the DOM shows A1, A2, B1, so indexing the raw filtered list made the\n // arrows jump between groups.\n const flatFiltered = useMemo(() => [...groupedOptions.values()].flat(), [groupedOptions])\n\n // MToggle or replace the current selection depending on the mode.\n const handleSelect = useCallback(\n (index: number) => {\n const opt = flatFiltered[index]\n if (!opt || opt.disabled) return\n\n if (multiple) {\n const arr = Array.isArray(currentValue) ? currentValue : []\n const newVal = arr.includes(opt.value) ? arr.filter((v) => v !== opt.value) : [...arr, opt.value]\n if (value === undefined) setInternalValue(newVal)\n onChange?.(newVal)\n } else {\n if (value === undefined) setInternalValue(opt.value)\n onChange?.(opt.value)\n setOpen(false)\n setSearch('')\n }\n },\n [flatFiltered, multiple, currentValue, value, onChange]\n )\n\n const {activeIndex, setActiveIndex, resetIndex, onKeyDown} = useKeyboardNav({\n itemCount: flatFiltered.length,\n onSelect: handleSelect,\n onClose: () => {\n setOpen(false)\n setSearch('')\n },\n isOpen: open,\n })\n\n // APG select-only combobox: Enter, Space, ArrowDown / ArrowUp and Alt+ArrowDown open the list\n // from the closed trigger; once open the shared keyboard navigation takes over.\n const handleTriggerKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (disabled) return\n if (e.target !== e.currentTarget) return\n if (!open) {\n if (e.key === 'Enter' || e.key === ' ' || e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n e.preventDefault()\n setOpen(true)\n if (searchable || e.altKey) {\n resetIndex()\n return\n }\n const selectedIndex = flatFiltered.findIndex((o) => selectedValues.includes(o.value))\n if (selectedIndex >= 0) setActiveIndex(selectedIndex)\n else if (e.key === 'ArrowUp') setActiveIndex(flatFiltered.length - 1)\n else setActiveIndex(flatFiltered.findIndex((o) => !o.disabled))\n }\n return\n }\n if (e.key === 'Tab') {\n setOpen(false)\n setSearch('')\n return\n }\n onKeyDown(e)\n },\n [disabled, open, searchable, flatFiltered, selectedValues, setActiveIndex, resetIndex, onKeyDown]\n )\n\n // The search field is an editable combobox: Home / End move the caret, everything else\n // (arrows, Enter, Escape) drives the listbox through aria-activedescendant.\n const handleSearchKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Home' || e.key === 'End') return\n onKeyDown(e)\n },\n [onKeyDown]\n )\n\n // Screen readers follow the highlighted option through aria-activedescendant.\n const baseId = useId()\n const labelId = `${baseId}-label`\n const listboxId = `${baseId}-listbox`\n const optionId = (index: number) => `${baseId}-option-${index}`\n const searchId = `${baseId}-search`\n const activeDescendant =\n open && activeIndex >= 0 && activeIndex < flatFiltered.length ? optionId(activeIndex) : undefined\n const hasListbox = flatFiltered.length > 0\n\n // Open the popover and reset keyboard navigation when the trigger is used.\n const handleTriggerClick = useCallback(() => {\n if (disabled) return\n setOpen((v) => !v)\n resetIndex()\n }, [disabled, resetIndex])\n\n // Reset the current selection without closing the outer field wrapper.\n const handleClear = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation()\n const empty = multiple ? [] : ''\n if (value === undefined) setInternalValue(empty)\n onChange?.(empty)\n },\n [multiple, value, onChange]\n )\n\n // Render tags, labels or the placeholder based on the current selection state.\n const displayValue = useMemo(() => {\n if (renderValue && selectedOptions.length > 0) {\n return renderValue(multiple ? selectedOptions : selectedOptions[0])\n }\n if (multiple && selectedOptions.length > 0) {\n return (\n <span className=\"tags\">\n {selectedOptions.map((o) => (\n <MTag key={o.value} label={o.label} color={color} size={size} variant=\"solid\" />\n ))}\n </span>\n )\n }\n if (!multiple && selectedOptions.length > 0) {\n return selectedOptions[0].label\n }\n return <span className=\"placeholder\">{placeholder}</span>\n }, [selectedOptions, multiple, renderValue, placeholder, color, size])\n\n return (\n <div className={cn('select', color && `color-${color}`, fullWidth && 'full-width', className)} style={style}>\n {label && (\n <label\n id={labelId}\n htmlFor={id}\n className={cn('field-label', open && 'focused', hasError && 'error', required && 'required')}\n >\n {label}\n </label>\n )}\n\n <div\n ref={triggerRef}\n className={cn(\n 'trigger',\n `field-${variant}`,\n `field-${size}`,\n open && 'focused',\n hasError && 'error',\n disabled && 'disabled'\n )}\n onClick={handleTriggerClick}\n onKeyDown={handleTriggerKeyDown}\n tabIndex={disabled ? -1 : 0}\n role=\"combobox\"\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n aria-controls={open && hasListbox ? listboxId : undefined}\n aria-activedescendant={searchable ? undefined : activeDescendant}\n aria-disabled={disabled || undefined}\n aria-labelledby={label ? labelId : undefined}\n aria-invalid={hasError || undefined}\n id={id}\n >\n <span className=\"value\">{displayValue}</span>\n\n {loading && <MSpinner size=\"sm\" color={color} />}\n\n {clearable && selectedValues.length > 0 && !loading && !disabled && (\n <button\n type=\"button\"\n className=\"clear-btn clear-btn-base\"\n onClick={handleClear}\n tabIndex={-1}\n aria-label={texts.clearSelection}\n >\n <MCloseIcon />\n </button>\n )}\n\n <span className={cn('arrow', open && 'open')} aria-hidden=\"true\">\n <MChevronDownIcon />\n </span>\n </div>\n\n {/* Hidden input for form submission */}\n {name && (\n <input\n type=\"hidden\"\n name={name}\n value={Array.isArray(currentValue) ? currentValue.join(',') : currentValue}\n />\n )}\n\n <MPopover\n className={'select-popover'}\n open={open}\n anchorRef={triggerRef}\n onClose={() => {\n setOpen(false)\n setSearch('')\n }}\n matchWidth\n placement=\"bottom-start\"\n role={null}\n initialFocus={searchable ? searchRef : undefined}\n closeOnTabOut={searchable}\n >\n <div style={{maxHeight}} className=\"dropdown\">\n {searchable && (\n <div className=\"search-box\">\n <input\n ref={searchRef}\n id={searchId}\n type=\"text\"\n className=\"search-input\"\n placeholder={searchPlaceholder}\n value={search}\n onChange={(e) => {\n setSearch(e.target.value)\n setActiveIndex(0)\n }}\n onKeyDown={handleSearchKeyDown}\n role=\"combobox\"\n aria-expanded={hasListbox}\n aria-controls={hasListbox ? listboxId : undefined}\n aria-activedescendant={activeDescendant}\n aria-autocomplete=\"list\"\n aria-labelledby={label ? labelId : undefined}\n aria-label={label ? undefined : selectTexts.searchLabel}\n autoComplete=\"off\"\n spellCheck={false}\n autoFocus\n />\n </div>\n )}\n\n {flatFiltered.length === 0 ? (\n <div className=\"no-options\">{noOptionsText}</div>\n ) : (\n <div\n id={listboxId}\n className=\"options-list\"\n role=\"listbox\"\n aria-multiselectable={multiple || undefined}\n aria-labelledby={label ? labelId : undefined}\n >\n {[...groupedOptions.entries()].map(([group, opts]) => (\n <div key={group}>\n {group && <div className=\"group-header\">{group}</div>}\n {opts.map((opt) => {\n const flatIndex = flatFiltered.indexOf(opt)\n const isActive = flatIndex === activeIndex\n const isSelected = selectedValues.includes(opt.value)\n return (\n <div\n key={opt.value}\n id={optionId(flatIndex)}\n className={cn(\n 'option',\n isActive && 'active',\n isSelected && 'selected',\n opt.disabled && 'disabled'\n )}\n onClick={() => !opt.disabled && handleSelect(flatIndex)}\n onMouseEnter={() => setActiveIndex(flatIndex)}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={opt.disabled}\n >\n {/* Visual-only check: a real checkbox inside role=\"option\"\n would be a nested interactive control. */}\n {multiple && (\n <span\n className={cn(\n 'select-check',\n color && `color-${color}`,\n isSelected && 'checked'\n )}\n aria-hidden=\"true\"\n >\n {isSelected && <MCheckIcon />}\n </span>\n )}\n {renderOption ? renderOption(opt, isActive, isSelected) : opt.label}\n </div>\n )\n })}\n </div>\n ))}\n </div>\n )}\n </div>\n </MPopover>\n\n {(errorText || helperText) && (\n <div className=\"bottom-row\">\n {errorText ? (\n <span className=\"field-error\" role=\"alert\">\n {errorText}\n </span>\n ) : (\n <span className=\"helper-text\">{helperText}</span>\n )}\n </div>\n )}\n </div>\n )\n}\n","import {useState, useRef, useCallback, useId, useMemo} from 'react'\nimport type * as React from 'react'\nimport type {MAutocompleteProps} from './MAutocomplete.types'\nimport {MPopover} from '../../primitives'\nimport {cn} from '../../../utils/cn'\nimport {useMAutocompleteTexts, useMCommonTexts} from '../../../i18n/frameworkTexts'\nimport {useKeyboardNav} from '../../../utils/useKeyboardNav'\nimport {useDebouncedCallback} from '../../../utils/useDebounce'\nimport {MSpinner, MTag} from '../../feedback'\nimport {MCloseIcon} from '../../../icons'\nimport './MAutocomplete.css'\n\n// Resolve labels for primitive string options without extra configuration.\nfunction defaultGetLabel<T>(option: T): string {\n if (typeof option === 'string') return option\n return String(option)\n}\n\n// Resolve values for primitive string options without extra configuration.\nfunction defaultGetValue<T>(option: T): string {\n if (typeof option === 'string') return option\n return String(option)\n}\n\n// Apply a basic case-insensitive filter when the caller does not provide one.\nfunction defaultFilter<T>(options: T[], input: string, getLabel: (o: T) => string): T[] {\n if (!input) return options\n const lower = input.toLowerCase()\n return options.filter((o) => getLabel(o).toLowerCase().includes(lower))\n}\n\n// Render a searchable suggestion list with optional multi-tag behavior.\nexport function MAutocomplete<T = string>({\n options,\n value,\n onChange,\n getOptionLabel = defaultGetLabel,\n getOptionValue = defaultGetValue,\n filterOptions,\n multiple = false,\n debounceMs = 0,\n onInputChange,\n loading = false,\n loadingText: loadingTextProp,\n noOptionsText: noOptionsTextProp,\n placeholder: placeholderProp,\n disabled = false,\n name,\n id,\n variant = 'outlined',\n size = 'md',\n color,\n fullWidth = false,\n label,\n helperText,\n errorText,\n error = false,\n required = false,\n clearable = false,\n maxHeight = 300,\n renderOption,\n renderTags,\n className,\n style,\n}: MAutocompleteProps<T>) {\n const baseId = useId()\n const texts = useMCommonTexts()\n const autocompleteTexts = useMAutocompleteTexts()\n const loadingText = loadingTextProp ?? autocompleteTexts.loading\n const noOptionsText = noOptionsTextProp ?? autocompleteTexts.noOptions\n const placeholder = placeholderProp ?? autocompleteTexts.placeholder\n const [open, setOpen] = useState(false)\n const [inputValue, setInputValue] = useState('')\n const wrapperRef = useRef<HTMLDivElement>(null)\n const inputRef = useRef<HTMLInputElement>(null)\n\n const hasError = error || !!errorText\n\n // Normalize the public value into an array for tag and selection rendering.\n const selectedValues = useMemo(() => {\n if (value == null) return []\n return Array.isArray(value) ? value.filter((item) => item != null) : [value]\n }, [value])\n\n // Filter suggestions locally unless the caller owns that logic.\n const filtered = useMemo(() => {\n if (filterOptions) return filterOptions(options, inputValue)\n return defaultFilter(options, inputValue, getOptionLabel)\n }, [options, inputValue, filterOptions, getOptionLabel])\n\n const debouncedInputChange = useDebouncedCallback((val: string) => onInputChange?.(val), debounceMs)\n\n // Update the visible query and optionally notify async search logic.\n const handleInputChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n setInputValue(e.target.value)\n debouncedInputChange(e.target.value)\n if (!open) setOpen(true)\n },\n [open, debouncedInputChange]\n )\n\n // Apply a selected option to single or multiple value modes.\n const handleSelect = useCallback(\n (index: number) => {\n const opt = filtered[index]\n if (!opt) return\n\n if (multiple) {\n const arr = [...selectedValues]\n const val = getOptionValue(opt)\n const existIdx = arr.findIndex((v) => getOptionValue(v) === val)\n if (existIdx >= 0) {\n arr.splice(existIdx, 1)\n } else {\n arr.push(opt)\n }\n onChange?.(arr)\n setInputValue('')\n // The query was cleared; tell async consumers so they do not keep the old one.\n if (inputValue) debouncedInputChange('')\n inputRef.current?.focus()\n } else {\n onChange?.(opt)\n setInputValue(getOptionLabel(opt))\n setOpen(false)\n }\n },\n [filtered, multiple, selectedValues, getOptionValue, getOptionLabel, onChange, inputValue, debouncedInputChange]\n )\n\n // Remove a selected tag by index in multiple mode.\n const handleRemoveTag = useCallback(\n (index: number) => {\n const arr = [...selectedValues]\n arr.splice(index, 1)\n onChange?.(multiple ? arr : (arr[0] ?? null))\n },\n [selectedValues, onChange, multiple]\n )\n\n const {\n activeIndex,\n setActiveIndex,\n resetIndex,\n onKeyDown: navKeyDown,\n } = useKeyboardNav({\n itemCount: filtered.length,\n onSelect: handleSelect,\n onClose: () => setOpen(false),\n isOpen: open,\n })\n\n // Combine tag removal and list navigation.\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n // Backspace removes last tag in multiple\n if (e.key === 'Backspace' && multiple && !inputValue && selectedValues.length > 0) {\n handleRemoveTag(selectedValues.length - 1)\n return\n }\n navKeyDown(e as unknown as React.KeyboardEvent)\n },\n [inputValue, multiple, selectedValues, navKeyDown, handleRemoveTag]\n )\n\n // Clear the input query and the selected value(s) together.\n const handleClear = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation()\n setInputValue('')\n if (inputValue) debouncedInputChange('')\n // An empty selection is `[]` (multiple) or `null` (single) — never `''` cast to T,\n // which for object options produced a fake \"selected\" value.\n onChange?.(multiple ? [] : null)\n inputRef.current?.focus()\n },\n [multiple, onChange, inputValue, debouncedInputChange]\n )\n\n // Screen readers follow the highlighted option through aria-activedescendant.\n const listboxId = `${baseId}-listbox`\n const labelId = `${baseId}-label`\n const optionId = (index: number) => `${baseId}-option-${index}`\n const activeDescendant =\n open && !loading && activeIndex >= 0 && activeIndex < filtered.length ? optionId(activeIndex) : undefined\n\n return (\n <div\n className={cn('autocomplete', color && `color-${color}`, fullWidth && 'full-width', className)}\n style={style}\n >\n {label && (\n <label\n id={labelId}\n htmlFor={id}\n className={cn('field-label', open && 'focused', hasError && 'error', required && 'required')}\n >\n {label}\n </label>\n )}\n\n <div\n ref={wrapperRef}\n className={cn(\n 'input-wrapper',\n `field-${variant}`,\n `field-${size}`,\n open && 'focused',\n hasError && 'error',\n disabled && 'disabled'\n )}\n onClick={() => inputRef.current?.focus()}\n >\n {multiple &&\n selectedValues.length > 0 &&\n (renderTags ? (\n renderTags(selectedValues, handleRemoveTag)\n ) : (\n <span className=\"tags\">\n {selectedValues.map((v, i) => (\n <MTag\n key={getOptionValue(v)}\n label={getOptionLabel(v)}\n color={color}\n size={size}\n variant=\"solid\"\n closable\n onClose={() => handleRemoveTag(i)}\n />\n ))}\n </span>\n ))}\n\n <input\n ref={inputRef}\n type=\"text\"\n className=\"input\"\n value={inputValue}\n onChange={handleInputChange}\n onFocus={() => {\n setOpen(true)\n resetIndex()\n }}\n onKeyDown={handleKeyDown}\n placeholder={selectedValues.length > 0 ? '' : placeholder}\n disabled={disabled}\n id={id}\n role=\"combobox\"\n aria-autocomplete=\"list\"\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n aria-controls={open ? listboxId : undefined}\n aria-activedescendant={activeDescendant}\n aria-labelledby={label ? labelId : undefined}\n aria-invalid={hasError || undefined}\n autoComplete=\"off\"\n />\n\n {loading && <MSpinner size=\"sm\" color={color} />}\n\n {clearable && (selectedValues.length > 0 || inputValue) && !loading && !disabled && (\n <button\n type=\"button\"\n className=\"clear-btn clear-btn-base\"\n onClick={handleClear}\n tabIndex={-1}\n aria-label={texts.clearInput}\n >\n <MCloseIcon />\n </button>\n )}\n </div>\n\n {name && <input type=\"hidden\" name={name} value={selectedValues.map(getOptionValue).join(',')} />}\n\n <MPopover\n className={cn('autocomplete-popover', color && `color-${color}`)}\n open={open && (filtered.length > 0 || loading || !!inputValue)}\n anchorRef={wrapperRef}\n onClose={() => setOpen(false)}\n matchWidth\n placement=\"bottom-start\"\n role={null}\n >\n <div style={{maxHeight}} className=\"dropdown\">\n {loading ? (\n <div className=\"loading-msg\">{loadingText}</div>\n ) : filtered.length === 0 ? (\n <div className=\"no-options\">{noOptionsText}</div>\n ) : (\n <div\n id={listboxId}\n className=\"options-list\"\n role=\"listbox\"\n aria-multiselectable={multiple || undefined}\n aria-labelledby={label ? labelId : undefined}\n >\n {filtered.map((opt, i) => {\n const isActive = i === activeIndex\n const isSelected = selectedValues.some((v) => getOptionValue(v) === getOptionValue(opt))\n return (\n <div\n key={getOptionValue(opt)}\n id={optionId(i)}\n className={cn('option', isActive && 'active', isSelected && 'selected')}\n onClick={() => handleSelect(i)}\n onMouseEnter={() => setActiveIndex(i)}\n role=\"option\"\n aria-selected={isSelected}\n >\n {renderOption ? renderOption(opt, isActive) : getOptionLabel(opt)}\n </div>\n )\n })}\n </div>\n )}\n </div>\n </MPopover>\n\n {(errorText || helperText) && (\n <div className=\"bottom-row\">\n {errorText ? (\n <span className=\"field-error\" role=\"alert\">\n {errorText}\n </span>\n ) : (\n <span className=\"helper-text\">{helperText}</span>\n )}\n </div>\n )}\n </div>\n )\n}\n","const COLOR_MAP: Record<string, string> = {\n primary: 'var(--mineral-primary-rgb)',\n neutral: 'var(--mineral-neutral-rgb)',\n success: 'var(--mineral-success-rgb)',\n error: 'var(--mineral-error-rgb)',\n warning: 'var(--mineral-warning-rgb)',\n info: 'var(--mineral-info-rgb)',\n light: 'var(--mineral-light-rgb)',\n dark: 'var(--mineral-dark-color-rgb)',\n news: 'var(--mineral-news-rgb)',\n}\n\nexport function colorRgbVar(color: string | undefined): string {\n return COLOR_MAP[color ?? 'primary'] ?? COLOR_MAP.primary\n}\n","import {useCallback, useEffect, useRef, useState} from 'react'\nimport type {KeyboardEvent} from 'react'\nimport {\n addDays,\n addMonthsClamped,\n addMonthsToMonth,\n getDateKey,\n isSameDay,\n isSameMonth,\n startOfMonth,\n startOfWeek,\n stripTime,\n} from './calendarDates'\nimport type {CalendarWeekStart} from './calendarDates'\n\n/**\n * Internal (not re-exported from the package root): WAI-ARIA APG date-grid keyboard model shared\n * by MDatePicker and MDateRangePicker.\n *\n * One roving tab stop across every visible month; arrows move by day / week, PageUp / PageDown by\n * month (Shift: year), Home / End to the edges of the week, Enter / Space select. Moving past the\n * visible months scrolls the view. Unavailable days stay focusable (`aria-disabled`) so the\n * arrows never get stuck, but they are never selected.\n */\nexport interface UseDateGridNavOptions {\n /** First visible month (any day inside it). */\n viewMonth: Date\n /** Number of months rendered side by side. Defaults to 1. */\n monthsShown?: number\n onViewMonthChange: (month: Date) => void\n selectedDate: Date | null\n weekStartsOn: CalendarWeekStart\n onSelect: (date: Date) => void\n isDisabled: (date: Date) => boolean\n /** Called whenever the keyboard moves the focused day (e.g. a range preview). */\n onFocusDate?: (date: Date) => void\n}\n\nexport interface DateGridCellProps {\n 'data-date': string\n tabIndex: number\n ref: (el: HTMLElement | null) => void\n onFocus: () => void\n}\n\nexport function getDateGridTarget(key: string, current: Date, shiftKey: boolean, weekStartsOn: CalendarWeekStart) {\n switch (key) {\n case 'ArrowLeft':\n return addDays(current, -1)\n case 'ArrowRight':\n return addDays(current, 1)\n case 'ArrowUp':\n return addDays(current, -7)\n case 'ArrowDown':\n return addDays(current, 7)\n case 'PageUp':\n return addMonthsClamped(current, shiftKey ? -12 : -1)\n case 'PageDown':\n return addMonthsClamped(current, shiftKey ? 12 : 1)\n case 'Home':\n return startOfWeek(current, weekStartsOn)\n case 'End':\n return addDays(startOfWeek(current, weekStartsOn), 6)\n default:\n return null\n }\n}\n\nexport function useDateGridNav({\n viewMonth,\n monthsShown = 1,\n onViewMonthChange,\n selectedDate,\n weekStartsOn,\n onSelect,\n isDisabled,\n onFocusDate,\n}: UseDateGridNavOptions) {\n const [focusDate, setFocusDate] = useState<Date | null>(null)\n const containerRef = useRef<HTMLElement | null>(null)\n const tabStopRef = useRef<HTMLElement | null>(null)\n const focusPendingRef = useRef(false)\n\n const firstMonthTime = startOfMonth(viewMonth).getTime()\n const firstMonth = new Date(firstMonthTime)\n const isVisible = useCallback(\n (date: Date) => {\n for (let index = 0; index < monthsShown; index++) {\n if (isSameMonth(date, addMonthsToMonth(new Date(firstMonthTime), index))) return true\n }\n return false\n },\n [firstMonthTime, monthsShown]\n )\n\n // The tab stop always sits on a day of a visible month: the last keyboard position, else the\n // selected day, else today, else the 1st of the first visible month.\n const today = stripTime(new Date())\n const tabStop =\n focusDate && isVisible(focusDate)\n ? focusDate\n : selectedDate && isVisible(selectedDate)\n ? stripTime(selectedDate)\n : isVisible(today)\n ? today\n : firstMonth\n const tabStopKey = getDateKey(tabStop)\n\n // Move DOM focus once the target day is rendered (it may live in a month that just scrolled in).\n useEffect(() => {\n if (!focusPendingRef.current) return\n focusPendingRef.current = false\n const node = containerRef.current?.querySelector<HTMLElement>(`[data-date=\"${tabStopKey}\"]`)\n node?.focus()\n }, [tabStopKey])\n\n const moveFocus = (next: Date) => {\n const target = stripTime(next)\n setFocusDate(target)\n onFocusDate?.(target)\n if (!isVisible(target)) {\n const lastMonthTime = addMonthsToMonth(firstMonth, monthsShown - 1).getTime()\n onViewMonthChange(\n target.getTime() < firstMonthTime\n ? startOfMonth(target)\n : target.getTime() > lastMonthTime\n ? addMonthsToMonth(target, -(monthsShown - 1))\n : firstMonth\n )\n }\n if (isSameDay(target, tabStop)) {\n // Same day (e.g. Home on the first day of the week): no re-render, focus right away.\n containerRef.current?.querySelector<HTMLElement>(`[data-date=\"${getDateKey(target)}\"]`)?.focus()\n } else {\n focusPendingRef.current = true\n }\n }\n\n const onGridKeyDown = (event: KeyboardEvent) => {\n if (event.altKey || event.ctrlKey || event.metaKey) return\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n if (!isDisabled(tabStop)) onSelect(tabStop)\n return\n }\n const next = getDateGridTarget(event.key, tabStop, event.shiftKey, weekStartsOn)\n if (!next) return\n event.preventDefault()\n moveFocus(next)\n }\n\n const getCellProps = useCallback(\n (date: Date): DateGridCellProps => {\n const key = getDateKey(date)\n const isTabStop = key === tabStopKey\n return {\n 'data-date': key,\n tabIndex: isTabStop ? 0 : -1,\n ref: (el: HTMLElement | null) => {\n if (isTabStop) tabStopRef.current = el\n },\n onFocus: () => {\n if (key !== tabStopKey) setFocusDate(stripTime(date))\n },\n }\n },\n [tabStopKey]\n )\n\n /** Put DOM focus on the current tab stop (e.g. after opening the picker from the keyboard). */\n const focusTabStop = useCallback(() => {\n tabStopRef.current?.focus()\n }, [])\n\n return {tabStop, containerRef, tabStopRef, getCellProps, onGridKeyDown, focusTabStop}\n}\n","import {useEffect, useId, useRef} from 'react'\nimport type * as React from 'react'\nimport {cn} from '../../../utils/cn'\nimport {useKeyboardNav} from '../../../utils/useKeyboardNav'\n\n/** Rows skipped by PageUp / PageDown inside a time column. */\nconst PAGE_STEP = 5\n\nexport interface TimeColumnListboxClassNames {\n column: string\n label: string\n list: string\n item: string\n}\n\nexport interface TimeColumnListboxProps<T extends number | string> {\n items: T[]\n selected?: T\n onSelect: (value: T) => void\n isDisabled?: (value: T) => boolean\n label: string\n classNames: TimeColumnListboxClassNames\n}\n\nconst renderValue = (value: number | string) => (typeof value === 'number' ? value.toString().padStart(2, '0') : value)\n\n/**\n * Internal: one scrollable time column (hours, minutes, seconds or AM/PM) exposed as an APG\n * single-select listbox. The column is a single tab stop; ArrowUp / ArrowDown, Home / End and\n * PageUp / PageDown move focus, typing digits jumps to a value, Enter / Space select.\n */\nexport function TimeColumnListbox<T extends number | string>({\n items,\n selected,\n onSelect,\n isDisabled,\n label,\n classNames,\n}: TimeColumnListboxProps<T>) {\n const listRef = useRef<HTMLDivElement>(null)\n const labelId = useId()\n const selectedIndex = selected === undefined ? -1 : items.indexOf(selected)\n\n const nav = useKeyboardNav({\n itemCount: items.length,\n onSelect: (index) => onSelect(items[index]),\n mode: 'roving',\n isItemDisabled: (index) => isDisabled?.(items[index]) ?? false,\n getItemLabel: (index) => String(renderValue(items[index])),\n selectOnSpace: true,\n loop: false,\n initialIndex: selectedIndex,\n })\n const {setActiveIndex, focusItem} = nav\n\n // Keep the roving tab stop on the selected value while the user is not inside the column.\n useEffect(() => {\n if (selectedIndex < 0) return\n const list = listRef.current\n if (list && list.contains(list.ownerDocument.activeElement)) return\n setActiveIndex(selectedIndex)\n }, [selectedIndex, setActiveIndex])\n\n // Keep the selected value centred in the column.\n useEffect(() => {\n if (selected === undefined || !listRef.current) return\n const element = listRef.current.querySelector(`[data-value=\"${selected}\"]`) as HTMLElement | null\n if (element) {\n const list = listRef.current\n list.scrollTop = element.offsetTop - list.clientHeight / 2 + element.offsetHeight / 2\n }\n }, [selected])\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === 'PageUp' || event.key === 'PageDown') {\n event.preventDefault()\n const direction = event.key === 'PageDown' ? 1 : -1\n const start = nav.activeIndex < 0 ? Math.max(selectedIndex, 0) : nav.activeIndex\n let target = Math.min(Math.max(start + direction * PAGE_STEP, 0), items.length - 1)\n // Land on the nearest available value in the direction of travel, then back off.\n while (target >= 0 && target < items.length && isDisabled?.(items[target])) target += direction\n if (target < 0 || target >= items.length) {\n target = Math.min(Math.max(start + direction * PAGE_STEP, 0), items.length - 1)\n while (target !== start && isDisabled?.(items[target])) target -= direction\n }\n focusItem(target)\n return\n }\n nav.onKeyDown(event)\n }\n\n return (\n <div className={classNames.column}>\n <div id={labelId} className={classNames.label}>\n {label}\n </div>\n <div\n ref={listRef}\n className={classNames.list}\n role=\"listbox\"\n aria-labelledby={labelId}\n onKeyDown={handleKeyDown}\n >\n {items.map((item, index) => {\n const disabled = isDisabled?.(item) ?? false\n const isSelected = item === selected\n const itemProps = nav.getItemProps(index)\n return (\n <button\n key={item}\n type=\"button\"\n data-value={item}\n id={itemProps.id}\n ref={itemProps.ref}\n tabIndex={itemProps.tabIndex}\n onFocus={itemProps.onFocus}\n role=\"option\"\n aria-selected={isSelected}\n className={cn(classNames.item, isSelected && 'selected', disabled && 'disabled')}\n onClick={() => onSelect(item)}\n disabled={disabled}\n >\n {renderValue(item)}\n </button>\n )\n })}\n </div>\n </div>\n )\n}\n","import {useState, useRef, useCallback, useMemo, useEffect, useId} from 'react'\nimport type * as React from 'react'\nimport type {MDatePickerProps} from './MDatePicker.types'\nimport type {MDateFormat} from '../../inputs'\nimport {MInput} from '../../inputs'\nimport {MPopover} from '../../primitives'\nimport {cn} from '../../../utils/cn'\nimport {\n useMDatePickerTexts,\n useMCommonTexts,\n useMTimePickerTexts,\n useMValidationMessage,\n} from '../../../i18n/frameworkTexts'\nimport {useDocumentLocale} from '../../../utils/locale'\nimport type {ValidationResult} from '../../../utils/validators'\nimport {parseDateString, validateDate} from '../../../utils/validators'\nimport {stripNonDigits, formatDateInput} from '../../../utils/formatters'\nimport {colorRgbVar} from '../../../utils/colorRgbVar'\nimport {\n formatDate,\n isSameDay,\n isDateInRange,\n getDayNames,\n getMonthNames,\n addMonths,\n stripTime,\n combineDateAndTime,\n formatHiddenDateValue,\n formatTimeWithFormat,\n parseTimeWithFormat,\n} from '../../../utils/dateUtils'\nimport {\n MCalendarIcon,\n MChevronLeftIcon as ChevronLeftGlyphIcon,\n MChevronRightIcon as ChevronRightGlyphIcon,\n} from '../../../icons'\nimport {getMonthMatrix, getWeekdayLabels} from '../../../utils/calendarDates'\nimport {useDateGridNav} from '../../../utils/useDateGridNav'\nimport {TimeColumnListbox} from '../shared/TimeColumnListbox'\nimport './MDatePicker.css'\n\nconst DATE_UNAVAILABLE_ERROR = 'Date is unavailable'\nconst INVALID_TIME_ERROR = 'Invalid time'\n\ntype Meridiem = 'AM' | 'PM'\n\ntype MDatePickerInputConfig = {\n inputFormat: MDateFormat\n separator: '/' | '.' | '-'\n}\n\ntype ParsedInputState =\n | {status: 'empty'}\n | {status: 'partial'; datePart: string; timePart: string}\n | {status: 'invalid'; datePart: string; timePart: string; result: ValidationResult}\n | {status: 'valid'; datePart: string; timePart: string; value: Date}\n\nfunction toDate(value: Date | string | undefined): Date | null {\n if (!value) return null\n if (value instanceof Date) return isNaN(value.getTime()) ? null : new Date(value.getTime())\n\n const date = new Date(value)\n return isNaN(date.getTime()) ? null : date\n}\n\nfunction normalizeDatePickerFormat(format: string): MDatePickerInputConfig {\n const normalizedFormat = format.replace(/DD/g, 'dd').replace(/YYYY/g, 'yyyy')\n const tokens = normalizedFormat.match(/dd|MM|yyyy/g)\n const detectedSeparator = normalizedFormat.match(/[^dMy]/)?.[0]\n const separator =\n detectedSeparator === '/' || detectedSeparator === '.' || detectedSeparator === '-' ? detectedSeparator : '.'\n const order = tokens?.join('/')\n\n switch (order) {\n case 'MM/dd/yyyy':\n return {inputFormat: 'MM/DD/YYYY', separator}\n case 'yyyy/MM/dd':\n return {inputFormat: 'YYYY/MM/DD', separator}\n case 'dd/MM/yyyy':\n default:\n return {inputFormat: 'DD/MM/YYYY', separator}\n }\n}\n\nfunction getDefaultTimePlaceholder(format: '24h' | '12h', showSeconds: boolean): string {\n if (format === '12h') {\n return showSeconds ? 'hh:mm:ss AM' : 'hh:mm AM'\n }\n\n return showSeconds ? 'HH:MM:SS' : 'HH:MM'\n}\n\nfunction getInputPlaceholder(\n basePlaceholder: string | undefined,\n dateFormat: string,\n withTime: boolean,\n timeFormat: '24h' | '12h',\n showSeconds: boolean,\n timePlaceholder?: string\n): string {\n if (basePlaceholder) {\n return basePlaceholder\n }\n\n if (!withTime) {\n return dateFormat\n }\n\n return `${dateFormat} ${timePlaceholder ?? getDefaultTimePlaceholder(timeFormat, showSeconds)}`\n}\n\nfunction formatDisplayValue(\n date: Date | null,\n options: {\n format: string\n withTime: boolean\n timeFormat: '24h' | '12h'\n showSeconds: boolean\n }\n): string {\n if (!date) return ''\n\n const datePart = formatDate(stripTime(date), options.format)\n\n if (!options.withTime) {\n return datePart\n }\n\n return `${datePart} ${formatTimeWithFormat(\n date.getHours(),\n date.getMinutes(),\n date.getSeconds(),\n options.showSeconds,\n options.timeFormat\n )}`\n}\n\nfunction formatTimeDraft(digits: string, showSeconds: boolean): string {\n if (!digits) return ''\n\n if (digits.length <= 2) return digits\n if (digits.length <= 4) return `${digits.slice(0, 2)}:${digits.slice(2)}`\n if (!showSeconds) return `${digits.slice(0, 2)}:${digits.slice(2, 4)}`\n return `${digits.slice(0, 2)}:${digits.slice(2, 4)}:${digits.slice(4, 6)}`\n}\n\nfunction normalizeMeridiemDraft(value: string): string {\n const letters = value.toUpperCase().replace(/[^APM]/g, '')\n\n if (!letters) return ''\n if (letters.startsWith('AM')) return 'AM'\n if (letters.startsWith('PM')) return 'PM'\n if (letters.startsWith('A')) return 'A'\n if (letters.startsWith('P')) return 'P'\n\n return ''\n}\n\nfunction splitInputValue(value: string, withTime: boolean) {\n const trimmed = value.trim()\n\n if (!trimmed) {\n return {datePart: '', timePart: ''}\n }\n\n if (!withTime) {\n return {datePart: trimmed, timePart: ''}\n }\n\n const firstSpaceIndex = trimmed.indexOf(' ')\n\n if (firstSpaceIndex === -1) {\n return {datePart: trimmed, timePart: ''}\n }\n\n return {\n datePart: trimmed.slice(0, firstSpaceIndex).trim(),\n timePart: trimmed.slice(firstSpaceIndex + 1).trim(),\n }\n}\n\nfunction formatTypedInput(\n rawValue: string,\n options: {\n inputFormat: MDateFormat\n separator: '/' | '.' | '-'\n withTime: boolean\n timeFormat: '24h' | '12h'\n showSeconds: boolean\n }\n) {\n const normalizedValue = rawValue.toUpperCase()\n const digits = stripNonDigits(normalizedValue)\n const dateDigits = digits.slice(0, 8)\n const timeDigits = options.withTime ? digits.slice(8, 8 + (options.showSeconds ? 6 : 4)) : ''\n const datePart = formatDateInput(dateDigits, options.inputFormat, options.separator)\n\n if (!options.withTime) {\n return {formatted: datePart, datePart, timePart: ''}\n }\n\n const timeBase = formatTimeDraft(timeDigits, options.showSeconds)\n const meridiem = options.timeFormat === '12h' ? normalizeMeridiemDraft(normalizedValue) : ''\n const timePart = `${timeBase}${meridiem ? `${timeBase ? ' ' : ''}${meridiem}` : ''}`.trim()\n\n if (!datePart) {\n return {formatted: timePart, datePart: '', timePart}\n }\n\n // Preserve the space delimiter once the date is complete so the user can keep typing the time.\n const dateComplete = dateDigits.length === 8\n const userTypedSpaceAfterDate = /\\s/.test(normalizedValue.slice(datePart.length))\n const showSpace = timePart || (dateComplete && userTypedSpaceAfterDate)\n\n return {\n formatted: showSpace ? `${datePart} ${timePart}` : datePart,\n datePart,\n timePart,\n }\n}\n\nfunction getTimeDraftFromDate(date: Date | null, showSeconds: boolean): string {\n if (!date) return ''\n return formatTimeWithFormat(date.getHours(), date.getMinutes(), date.getSeconds(), showSeconds, '24h')\n}\n\nfunction parseInputValue(\n value: string,\n options: {\n inputFormat: MDateFormat\n minDate: Date | null\n maxDate: Date | null\n withTime: boolean\n timeFormat: '24h' | '12h'\n showSeconds: boolean\n isDisabled: (date: Date) => boolean\n }\n): ParsedInputState {\n const {datePart, timePart} = splitInputValue(value, options.withTime)\n\n if (!datePart && !timePart) {\n return {status: 'empty'}\n }\n\n const validation = validateDate(datePart, {\n format: options.inputFormat,\n minDate: options.minDate ?? undefined,\n maxDate: options.maxDate ?? undefined,\n })\n\n if (!validation.valid) {\n return validation.error === 'Incomplete date'\n ? {status: 'partial', datePart, timePart}\n : {status: 'invalid', datePart, timePart, result: validation}\n }\n\n const parsedDate = parseDateString(datePart, options.inputFormat)\n\n if (!parsedDate) {\n return {status: 'invalid', datePart, timePart, result: {valid: false, error: 'Invalid date'}}\n }\n\n if (options.isDisabled(parsedDate)) {\n return {status: 'invalid', datePart, timePart, result: {valid: false, error: DATE_UNAVAILABLE_ERROR}}\n }\n\n if (!options.withTime) {\n return {status: 'valid', datePart, timePart: '', value: stripTime(parsedDate)}\n }\n\n if (!timePart) {\n return {\n status: 'valid',\n datePart,\n timePart: '',\n value: combineDateAndTime(parsedDate, '', {format: options.timeFormat, showSeconds: options.showSeconds}),\n }\n }\n\n const parsedTime = parseTimeWithFormat(timePart, options.timeFormat)\n\n if (!parsedTime) {\n return {status: 'invalid', datePart, timePart, result: {valid: false, error: INVALID_TIME_ERROR}}\n }\n\n return {\n status: 'valid',\n datePart,\n timePart,\n value: combineDateAndTime(parsedDate, timePart, {format: options.timeFormat, showSeconds: options.showSeconds}),\n }\n}\n\nfunction to12HourParts(value: {hours: number; minutes: number; seconds: number}) {\n const meridiem: Meridiem = value.hours >= 12 ? 'PM' : 'AM'\n const hours = value.hours % 12 || 12\n return {hours, minutes: value.minutes, seconds: value.seconds, meridiem}\n}\n\nfunction to24HourValue(hours: number, meridiem: Meridiem): number {\n if (meridiem === 'AM') {\n return hours === 12 ? 0 : hours\n }\n\n return hours === 12 ? 12 : hours + 12\n}\n\nexport function MDatePicker({\n value,\n defaultValue,\n onChange,\n format = 'dd.MM.yyyy',\n locale: localeOverride,\n min,\n max,\n disabledDates,\n placeholder,\n disabled = false,\n readOnly = false,\n name,\n id,\n variant = 'outlined',\n size = 'md',\n color,\n label,\n helperText,\n errorText,\n error = false,\n required = false,\n clearable = false,\n withTime = false,\n validateOnBlur = true,\n validateOnChange = false,\n onValidationChange,\n timeFormat = '24h',\n showSeconds = false,\n minuteStep = 1,\n timePlaceholder,\n inline = false,\n showTodayButton = true,\n firstDayOfWeek = 1,\n fullWidth = false,\n className,\n style,\n}: MDatePickerProps) {\n const commonTexts = useMCommonTexts()\n const locale = useDocumentLocale(localeOverride)\n const texts = useMDatePickerTexts()\n const timeTexts = useMTimePickerTexts()\n const {inputFormat, separator} = useMemo(() => normalizeDatePickerFormat(format), [format])\n const [open, setOpen] = useState(false)\n // Opening from the keyboard moves focus to the day grid (APG date picker dialog); a click keeps it in the field.\n const [focusOnOpen, setFocusOnOpen] = useState(false)\n const [internalValue, setInternalValue] = useState<Date | null>(() => toDate(defaultValue))\n const [validationState, setValidationState] = useState<ValidationResult>({valid: true})\n const [touched, setTouched] = useState(false)\n const selectedValue = value !== undefined ? toDate(value) : internalValue\n const [inputValue, setInputValue] = useState(() =>\n formatDisplayValue(selectedValue, {format, withTime, timeFormat, showSeconds})\n )\n const [draftTimeValue, setDraftTimeValue] = useState(() => getTimeDraftFromDate(selectedValue, showSeconds))\n const [viewDate, setViewDate] = useState(() => {\n const baseDate = selectedValue ? stripTime(selectedValue) : new Date()\n return new Date(baseDate.getFullYear(), baseDate.getMonth(), 1)\n })\n const [viewMode, setViewMode] = useState<'days' | 'months'>('days')\n const anchorRef = useRef<HTMLDivElement>(null)\n const selectedValueKey = selectedValue?.getTime() ?? null\n const minDate = toDate(min)\n const maxDate = toDate(max)\n const hasError = error || (touched && !validationState.valid)\n const resolvedErrorText = errorText || (touched && !validationState.valid ? validationState.error : undefined)\n const dayNames = getDayNames(locale, firstDayOfWeek)\n const monthNames = getMonthNames(locale)\n\n useEffect(() => {\n setInputValue(formatDisplayValue(selectedValue, {format, withTime, timeFormat, showSeconds}))\n setDraftTimeValue(getTimeDraftFromDate(selectedValue, showSeconds))\n if (selectedValue) {\n const normalizedDate = stripTime(selectedValue)\n setViewDate(new Date(normalizedDate.getFullYear(), normalizedDate.getMonth(), 1))\n }\n }, [format, selectedValueKey, showSeconds, timeFormat, withTime])\n\n const isDisabled = useCallback(\n (date: Date): boolean => {\n if (!isDateInRange(date, minDate, maxDate)) return true\n if (Array.isArray(disabledDates)) {\n return disabledDates.some((disabledDate) => isSameDay(disabledDate, date))\n }\n if (typeof disabledDates === 'function') {\n return disabledDates(date)\n }\n return false\n },\n [disabledDates, maxDate, minDate]\n )\n\n const translateValidation = useMValidationMessage()\n const emitValidation = useCallback(\n (result: ValidationResult) => {\n // Built-in validator messages go through `mineralui.validation.*`; others pass unchanged.\n const translated = translateValidation(result)\n setValidationState(translated)\n onValidationChange?.(translated)\n },\n [onValidationChange, translateValidation]\n )\n\n const commitValue = useCallback(\n (nextValue: Date | null) => {\n if (value === undefined) {\n setInternalValue(nextValue)\n }\n\n onChange?.(nextValue)\n },\n [onChange, value]\n )\n\n const parsedInputState = useMemo(\n () =>\n parseInputValue(inputValue, {\n inputFormat,\n minDate,\n maxDate,\n withTime,\n timeFormat,\n showSeconds,\n isDisabled,\n }),\n [inputFormat, inputValue, isDisabled, maxDate, minDate, showSeconds, timeFormat, withTime]\n )\n\n const currentDateForPanel = useMemo(() => {\n if (parsedInputState.status === 'valid') {\n return stripTime(parsedInputState.value)\n }\n\n return selectedValue ? stripTime(selectedValue) : null\n }, [parsedInputState, selectedValue])\n\n const currentTimeForPanel = useMemo(() => {\n if (!withTime) return null\n\n const timeSource =\n parsedInputState.status !== 'empty' && parsedInputState.timePart\n ? parsedInputState.timePart\n : draftTimeValue || getTimeDraftFromDate(selectedValue, showSeconds)\n\n return parseTimeWithFormat(timeSource, timeFormat) ?? {hours: 0, minutes: 0, seconds: 0}\n }, [draftTimeValue, parsedInputState, selectedValue, showSeconds, timeFormat, withTime])\n\n const handleInputChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const nextTyped = formatTypedInput(event.target.value, {\n inputFormat,\n separator,\n withTime,\n timeFormat,\n showSeconds,\n })\n\n setInputValue(nextTyped.formatted)\n setDraftTimeValue(nextTyped.timePart)\n\n const nextParsedState = parseInputValue(nextTyped.formatted, {\n inputFormat,\n minDate,\n maxDate,\n withTime,\n timeFormat,\n showSeconds,\n isDisabled,\n })\n\n if (nextParsedState.status === 'empty') {\n emitValidation({valid: true})\n commitValue(null)\n return\n }\n\n if (nextParsedState.status === 'invalid' && validateOnChange) {\n emitValidation(nextParsedState.result)\n } else if (nextParsedState.status === 'valid') {\n emitValidation({valid: true})\n setViewDate(new Date(nextParsedState.value.getFullYear(), nextParsedState.value.getMonth(), 1))\n // Hold the commit until the time is fully typed so the formatter doesn't pad\n // partial minutes/seconds (e.g. \"21:3\" → \"21:03\") and overwrite the cursor while typing.\n // Blur falls back to 00:00 via the INVALID_TIME_ERROR retry if the user never finishes.\n const requiredTimeDigits = showSeconds ? 6 : 4\n const typedTimeDigits = withTime ? stripNonDigits(event.target.value).slice(8).length : 0\n const timeComplete = !withTime || typedTimeDigits >= requiredTimeDigits\n if (timeComplete) {\n commitValue(nextParsedState.value)\n }\n }\n },\n [\n commitValue,\n emitValidation,\n inputFormat,\n isDisabled,\n maxDate,\n minDate,\n separator,\n showSeconds,\n timeFormat,\n validateOnChange,\n withTime,\n ]\n )\n\n const handleInputBlur = useCallback(() => {\n setTouched(true)\n\n const nextParsedState = parseInputValue(inputValue, {\n inputFormat,\n minDate,\n maxDate,\n withTime,\n timeFormat,\n showSeconds,\n isDisabled,\n })\n\n if (nextParsedState.status === 'empty') {\n emitValidation({valid: true})\n return\n }\n\n if (nextParsedState.status === 'partial') {\n if (validateOnBlur) {\n emitValidation({valid: false, error: 'Incomplete date'})\n }\n return\n }\n\n if (nextParsedState.status === 'invalid') {\n // Out-of-range time entry (e.g. 48:69) clamps to 00:00 on blur instead of staying invalid.\n if (withTime && nextParsedState.result.error === INVALID_TIME_ERROR && nextParsedState.datePart) {\n const fallbackTimePart = formatTimeWithFormat(0, 0, 0, showSeconds, timeFormat)\n const retry = parseInputValue(`${nextParsedState.datePart} ${fallbackTimePart}`, {\n inputFormat,\n minDate,\n maxDate,\n withTime,\n timeFormat,\n showSeconds,\n isDisabled,\n })\n\n if (retry.status === 'valid') {\n emitValidation({valid: true})\n setInputValue(formatDisplayValue(retry.value, {format, withTime, timeFormat, showSeconds}))\n setDraftTimeValue(getTimeDraftFromDate(retry.value, showSeconds))\n commitValue(retry.value)\n return\n }\n }\n\n if (validateOnBlur) {\n emitValidation(nextParsedState.result)\n }\n return\n }\n\n emitValidation({valid: true})\n setInputValue(formatDisplayValue(nextParsedState.value, {format, withTime, timeFormat, showSeconds}))\n setDraftTimeValue(getTimeDraftFromDate(nextParsedState.value, showSeconds))\n commitValue(nextParsedState.value)\n }, [\n commitValue,\n emitValidation,\n format,\n inputFormat,\n inputValue,\n isDisabled,\n maxDate,\n minDate,\n showSeconds,\n timeFormat,\n validateOnBlur,\n withTime,\n ])\n\n const handleInputKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLInputElement>) => {\n // ArrowDown / Alt+ArrowDown opens the calendar and moves focus to the day grid.\n if (event.key === 'ArrowDown') {\n event.preventDefault()\n if (!disabled && !readOnly && !inline) {\n setFocusOnOpen(true)\n setOpen(true)\n }\n return\n }\n\n if (['Backspace', 'Delete', 'Tab', 'ArrowLeft', 'ArrowRight', 'Home', 'End', 'Enter'].includes(event.key)) {\n return\n }\n\n if (event.ctrlKey || event.metaKey) {\n return\n }\n\n const allowCharacter = withTime ? /^[0-9\\s:./-APMapm]$/ : /^[0-9./-]$/\n\n if (!allowCharacter.test(event.key)) {\n event.preventDefault()\n }\n },\n [disabled, inline, readOnly, withTime]\n )\n\n const handleClear = useCallback(() => {\n setInputValue('')\n setDraftTimeValue('')\n setTouched(false)\n emitValidation({valid: true})\n commitValue(null)\n }, [commitValue, emitValidation])\n\n const handleTogglePopover = useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n event.preventDefault()\n event.stopPropagation()\n\n if (disabled || readOnly || inline) return\n\n // `detail === 0`: activated with Enter / Space rather than a pointer.\n setFocusOnOpen(event.detail === 0)\n setOpen((current) => !current)\n },\n [disabled, inline, readOnly]\n )\n\n const handleClosePopover = useCallback(() => {\n setOpen(false)\n setFocusOnOpen(false)\n }, [])\n\n const handleSelectDate = useCallback(\n (date: Date) => {\n if (isDisabled(date)) return\n\n const nextTime = withTime ? draftTimeValue || formatTimeWithFormat(0, 0, 0, showSeconds, timeFormat) : ''\n const nextValue = withTime\n ? combineDateAndTime(date, nextTime, {format: timeFormat, showSeconds})\n : stripTime(date)\n\n setTouched(true)\n emitValidation({valid: true})\n setDraftTimeValue(nextTime)\n setInputValue(formatDisplayValue(nextValue, {format, withTime, timeFormat, showSeconds}))\n setViewDate(new Date(date.getFullYear(), date.getMonth(), 1))\n commitValue(nextValue)\n\n if (!withTime && !inline) {\n setOpen(false)\n }\n },\n [commitValue, draftTimeValue, emitValidation, format, inline, isDisabled, showSeconds, timeFormat, withTime]\n )\n\n const handleToday = useCallback(() => {\n const today = stripTime(new Date())\n\n if (isDisabled(today)) return\n\n handleSelectDate(today)\n }, [handleSelectDate, isDisabled])\n\n const hours = useMemo(() => {\n if (!withTime) return []\n\n const items: number[] = []\n const maxHour = timeFormat === '12h' ? 12 : 23\n const startHour = timeFormat === '12h' ? 1 : 0\n\n for (let index = startHour; index <= maxHour; index += 1) {\n items.push(index)\n }\n\n return items\n }, [timeFormat, withTime])\n\n const minutes = useMemo(() => {\n if (!withTime) return []\n\n const items: number[] = []\n\n for (let index = 0; index < 60; index += minuteStep) {\n items.push(index)\n }\n\n return items\n }, [minuteStep, withTime])\n\n const seconds = useMemo(() => {\n if (!withTime || !showSeconds) return []\n\n const items: number[] = []\n\n for (let index = 0; index < 60; index += 1) {\n items.push(index)\n }\n\n return items\n }, [showSeconds, withTime])\n\n const handleTimeSelection = useCallback(\n (hoursValue: number, minutesValue: number, secondsValue: number = 0) => {\n const formattedTime = formatTimeWithFormat(hoursValue, minutesValue, secondsValue, showSeconds, timeFormat)\n const nextDate = currentDateForPanel\n\n setTouched(true)\n setDraftTimeValue(formattedTime)\n\n if (!nextDate) {\n setInputValue(formattedTime)\n return\n }\n\n const nextValue = combineDateAndTime(nextDate, formattedTime, {format: timeFormat, showSeconds})\n\n emitValidation({valid: true})\n setInputValue(formatDisplayValue(nextValue, {format, withTime, timeFormat, showSeconds}))\n commitValue(nextValue)\n },\n [commitValue, currentDateForPanel, emitValidation, format, showSeconds, timeFormat, withTime]\n )\n\n const handleMeridiemChange = useCallback(\n (meridiem: Meridiem) => {\n const currentHours = currentTimeForPanel ? to12HourParts(currentTimeForPanel).hours : 12\n const nextHours = to24HourValue(currentHours, meridiem)\n\n handleTimeSelection(nextHours, currentTimeForPanel?.minutes ?? 0, currentTimeForPanel?.seconds ?? 0)\n },\n [currentTimeForPanel, handleTimeSelection]\n )\n\n const calendarDays = useMemo(\n () =>\n getMonthMatrix(viewDate, firstDayOfWeek).map((date) => ({\n date,\n currentMonth: date.getMonth() === viewDate.getMonth(),\n })),\n [firstDayOfWeek, viewDate]\n )\n\n const today = stripTime(new Date())\n const selectedDate = selectedValue ? stripTime(selectedValue) : currentDateForPanel\n\n const gridNav = useDateGridNav({\n viewMonth: viewDate,\n onViewMonthChange: setViewDate,\n selectedDate,\n weekStartsOn: firstDayOfWeek,\n onSelect: handleSelectDate,\n isDisabled,\n })\n const baseId = useId()\n const titleId = `${baseId}-title`\n const weekdayLong = useMemo(() => getWeekdayLabels(locale, firstDayOfWeek, 'long'), [locale, firstDayOfWeek])\n const dayLabelFormatter = useMemo(\n () => new Intl.DateTimeFormat(locale, {weekday: 'long', day: 'numeric', month: 'long', year: 'numeric'}),\n [locale]\n )\n const calendarWeeks = useMemo(\n () => Array.from({length: calendarDays.length / 7}, (_, row) => calendarDays.slice(row * 7, row * 7 + 7)),\n [calendarDays]\n )\n\n const renderCalendar = () => (\n <div className=\"calendar\">\n <div className=\"calendar-header\">\n <button\n type=\"button\"\n className=\"nav-btn\"\n onClick={() => setViewDate(addMonths(viewDate, -1))}\n aria-label={texts.previousMonth}\n >\n <ChevronLeftGlyphIcon />\n </button>\n <button\n type=\"button\"\n id={titleId}\n className=\"header-title\"\n aria-live=\"polite\"\n onClick={() => setViewMode((current) => (current === 'days' ? 'months' : 'days'))}\n >\n {monthNames[viewDate.getMonth()]} {viewDate.getFullYear()}\n </button>\n <button\n type=\"button\"\n className=\"nav-btn\"\n onClick={() => setViewDate(addMonths(viewDate, 1))}\n aria-label={texts.nextMonth}\n >\n <ChevronRightGlyphIcon />\n </button>\n </div>\n\n {viewMode === 'days' ? (\n // APG date grid: one tab stop, arrows / PageUp / PageDown / Home / End move the focused day.\n <div\n ref={gridNav.containerRef as React.RefObject<HTMLDivElement>}\n className=\"day-table\"\n role=\"grid\"\n aria-labelledby={titleId}\n onKeyDown={gridNav.onGridKeyDown}\n >\n <div className=\"day-names\" role=\"row\">\n {dayNames.map((dayName, index) => (\n <span\n key={dayName}\n className=\"day-name\"\n role=\"columnheader\"\n aria-label={weekdayLong[index]}\n >\n {dayName}\n </span>\n ))}\n </div>\n\n <div className=\"day-grid\" role=\"rowgroup\">\n {calendarWeeks.map((week, row) => (\n <div key={row} className=\"day-row\" role=\"row\">\n {week.map(({date, currentMonth}, column) => {\n const isSelected = selectedDate ? isSameDay(date, selectedDate) : false\n const isToday = isSameDay(date, today)\n const disabledDay = isDisabled(date)\n\n return (\n <div\n key={`${date.toISOString()}-${row * 7 + column}`}\n {...gridNav.getCellProps(date)}\n role=\"gridcell\"\n className={cn(\n 'day',\n !currentMonth && 'other-month',\n isToday && 'today',\n isSelected && 'selected',\n disabledDay && 'disabled'\n )}\n onClick={() => handleSelectDate(date)}\n aria-selected={isSelected}\n // Not native `disabled`: the roving tab stop may land on an\n // unavailable day and must stay focusable.\n aria-disabled={disabledDay || undefined}\n aria-current={isToday ? 'date' : undefined}\n aria-label={dayLabelFormatter.format(date)}\n >\n {date.getDate()}\n </div>\n )\n })}\n </div>\n ))}\n </div>\n </div>\n ) : (\n <div className=\"month-grid\">\n {monthNames.map((monthName, index) => (\n <button\n key={monthName}\n type=\"button\"\n className={cn('month-cell', viewDate.getMonth() === index && 'selected')}\n onClick={() => {\n setViewDate(new Date(viewDate.getFullYear(), index, 1))\n setViewMode('days')\n }}\n >\n {monthName.slice(0, 3)}\n </button>\n ))}\n </div>\n )}\n\n {showTodayButton && (\n <div className=\"footer\">\n <button type=\"button\" className=\"today-btn\" onClick={handleToday}>\n {texts.today}\n </button>\n </div>\n )}\n </div>\n )\n\n const renderTimePanel = () => {\n if (!withTime) return null\n\n const displayTime = currentTimeForPanel ? to12HourParts(currentTimeForPanel) : null\n\n return (\n <div className=\"date-picker-time-panel\">\n <div className=\"date-picker-time-header\">{timeTexts.time}</div>\n <div className=\"date-picker-time-columns\">\n <TimeColumnListbox\n classNames={TIME_COLUMN_CLASSES}\n items={hours}\n selected={timeFormat === '12h' ? displayTime?.hours : currentTimeForPanel?.hours}\n onSelect={(hoursValue) =>\n handleTimeSelection(\n timeFormat === '12h'\n ? to24HourValue(hoursValue, displayTime?.meridiem ?? 'AM')\n : hoursValue,\n currentTimeForPanel?.minutes ?? 0,\n currentTimeForPanel?.seconds ?? 0\n )\n }\n label={timeTexts.hours}\n />\n <TimeColumnListbox\n classNames={TIME_COLUMN_CLASSES}\n items={minutes}\n selected={currentTimeForPanel?.minutes}\n onSelect={(minutesValue) =>\n handleTimeSelection(\n currentTimeForPanel?.hours ?? 0,\n minutesValue,\n currentTimeForPanel?.seconds ?? 0\n )\n }\n label={timeTexts.minutes}\n />\n {showSeconds && (\n <TimeColumnListbox\n classNames={TIME_COLUMN_CLASSES}\n items={seconds}\n selected={currentTimeForPanel?.seconds}\n onSelect={(secondsValue) =>\n handleTimeSelection(\n currentTimeForPanel?.hours ?? 0,\n currentTimeForPanel?.minutes ?? 0,\n secondsValue\n )\n }\n label={timeTexts.seconds}\n />\n )}\n {timeFormat === '12h' && (\n <TimeColumnListbox\n classNames={TIME_COLUMN_CLASSES}\n items={['AM', 'PM']}\n selected={displayTime?.meridiem}\n onSelect={handleMeridiemChange}\n label={timeTexts.meridiem}\n />\n )}\n </div>\n </div>\n )\n }\n\n const renderPopoverContent = () => (\n <div className={cn('date-picker-popover-content', withTime && 'with-time')}>\n {renderCalendar()}\n {renderTimePanel()}\n </div>\n )\n\n const maxLength = withTime ? (timeFormat === '12h' ? (showSeconds ? 22 : 19) : showSeconds ? 19 : 16) : 10\n const inputPlaceholder = getInputPlaceholder(\n placeholder,\n format,\n withTime,\n timeFormat,\n showSeconds,\n timePlaceholder\n )\n\n if (inline) {\n return (\n <div\n className={cn('date-picker', color && `color-${color}`, fullWidth && 'full-width', className)}\n style={style}\n >\n <MInput\n value={inputValue}\n onChange={handleInputChange}\n onBlur={handleInputBlur}\n onKeyDown={handleInputKeyDown}\n onClear={handleClear}\n type=\"text\"\n inputMode={withTime ? 'text' : 'numeric'}\n autoComplete=\"off\"\n maxLength={maxLength}\n placeholder={inputPlaceholder}\n disabled={disabled}\n readOnly={readOnly}\n id={id}\n variant={variant}\n size={size}\n color={color}\n label={label}\n helperText={helperText}\n error={hasError}\n errorText={resolvedErrorText}\n required={required}\n clearable={clearable}\n fullWidth={fullWidth}\n />\n {renderPopoverContent()}\n {name && selectedValue && (\n <input\n type=\"hidden\"\n name={name}\n value={formatHiddenDateValue(selectedValue, withTime, showSeconds)}\n />\n )}\n </div>\n )\n }\n\n return (\n <div\n className={cn('date-picker', color && `color-${color}`, fullWidth && 'full-width', className)}\n style={style}\n >\n <div ref={anchorRef} className=\"date-picker-input-anchor\">\n <MInput\n value={inputValue}\n onChange={handleInputChange}\n onBlur={handleInputBlur}\n onKeyDown={handleInputKeyDown}\n onClear={handleClear}\n type=\"text\"\n inputMode={withTime ? 'text' : 'numeric'}\n autoComplete=\"off\"\n maxLength={maxLength}\n placeholder={inputPlaceholder}\n disabled={disabled}\n readOnly={readOnly}\n id={id}\n variant={variant}\n size={size}\n color={color}\n label={label}\n helperText={helperText}\n error={hasError}\n errorText={resolvedErrorText}\n required={required}\n clearable={clearable}\n fullWidth={fullWidth}\n endIcon={\n <button\n type=\"button\"\n className=\"date-picker-toggle\"\n onMouseDown={(event) => event.preventDefault()}\n onClick={handleTogglePopover}\n aria-label={commonTexts.openCalendar}\n disabled={disabled || readOnly}\n >\n <MCalendarIcon />\n </button>\n }\n />\n </div>\n\n {name && selectedValue && (\n <input type=\"hidden\" name={name} value={formatHiddenDateValue(selectedValue, withTime, showSeconds)} />\n )}\n\n <MPopover\n className=\"date-picker-popover\"\n style={{'--color-rgb': colorRgbVar(color)} as React.CSSProperties}\n open={open}\n anchorRef={anchorRef}\n onClose={handleClosePopover}\n placement=\"bottom-start\"\n role=\"dialog\"\n aria-label={label ?? texts.dialogLabel}\n initialFocus={focusOnOpen ? gridNav.tabStopRef : undefined}\n closeOnTabOut\n >\n {renderPopoverContent()}\n </MPopover>\n </div>\n )\n}\n\nconst TIME_COLUMN_CLASSES = {\n column: 'date-picker-time-column',\n label: 'date-picker-time-column-label',\n list: 'date-picker-time-column-list',\n item: 'date-picker-time-column-item',\n}\n","import {useState, useRef, useCallback, useMemo} from 'react'\nimport type * as React from 'react'\nimport type {MTimePickerProps} from './MTimePicker.types'\nimport {MPopover} from '../../primitives'\nimport {TimeColumnListbox} from '../shared/TimeColumnListbox'\nimport {cn} from '../../../utils/cn'\nimport {MClockIcon, MCloseIcon} from '../../../icons'\nimport {formatTime, parseTime} from '../../../utils/dateUtils'\nimport './MTimePicker.css'\nimport {useMCommonTexts, useMTimePickerTexts} from '../../../i18n/frameworkTexts'\n\ntype ParsedTimeValue = {hours: number; minutes: number; seconds: number}\ntype Meridiem = 'AM' | 'PM'\n\nfunction to12HourParts(value: ParsedTimeValue) {\n const meridiem: Meridiem = value.hours >= 12 ? 'PM' : 'AM'\n const hours = value.hours % 12 || 12\n return {hours, minutes: value.minutes, seconds: value.seconds, meridiem}\n}\n\nfunction to24HourValue(hours: number, meridiem: Meridiem): number {\n if (meridiem === 'AM') {\n return hours === 12 ? 0 : hours\n }\n return hours === 12 ? 12 : hours + 12\n}\n\nfunction formatTimeValue(\n hours: number,\n minutes: number,\n seconds: number,\n showSeconds: boolean,\n format: '24h' | '12h'\n): string {\n if (format === '24h') {\n return formatTime(hours, minutes, seconds, showSeconds)\n }\n\n const parts = to12HourParts({hours, minutes, seconds})\n const base = `${parts.hours.toString().padStart(2, '0')}:${parts.minutes.toString().padStart(2, '0')}`\n const withSeconds = showSeconds ? `${base}:${parts.seconds.toString().padStart(2, '0')}` : base\n return `${withSeconds} ${parts.meridiem}`\n}\n\nfunction parseTimeValue(value: string, format: '24h' | '12h'): ParsedTimeValue | null {\n if (format === '24h') {\n return parseTime(value)\n }\n\n const normalized = value.trim().toUpperCase()\n const match = normalized.match(/^(\\d{1,2}):(\\d{2})(?::(\\d{2}))?\\s*(AM|PM)$/)\n if (match) {\n const hours = parseInt(match[1], 10)\n const minutes = parseInt(match[2], 10)\n const seconds = match[3] ? parseInt(match[3], 10) : 0\n const meridiem = match[4] as Meridiem\n\n if (hours < 1 || hours > 12 || minutes > 59 || seconds > 59) {\n return null\n }\n\n return {hours: to24HourValue(hours, meridiem), minutes, seconds}\n }\n\n return parseTime(value)\n}\n\n// Compare time tuples so min/max checks can stay string-format agnostic.\nfunction compareTimeParts(\n left: {hours: number; minutes: number; seconds: number},\n right: {hours: number; minutes: number; seconds: number}\n): number {\n if (left.hours !== right.hours) return left.hours - right.hours\n if (left.minutes !== right.minutes) return left.minutes - right.minutes\n return left.seconds - right.seconds\n}\n\n// Check whether a time falls within optional min and max boundaries.\nfunction isTimeInRange(\n value: {hours: number; minutes: number; seconds: number},\n min?: {hours: number; minutes: number; seconds: number} | null,\n max?: {hours: number; minutes: number; seconds: number} | null\n): boolean {\n return (!min || compareTimeParts(value, min) >= 0) && (!max || compareTimeParts(value, max) <= 0)\n}\n\ntype TimeParts = {hours: number; minutes: number; seconds: number}\n\n// True when the closed window [from, to] overlaps the optional min / max range.\nfunction windowIntersectsRange(from: TimeParts, to: TimeParts, min?: TimeParts | null, max?: TimeParts | null) {\n return (!min || compareTimeParts(to, min) >= 0) && (!max || compareTimeParts(from, max) <= 0)\n}\n\n// Pull a time back inside the optional min / max range.\nfunction clampTime(value: TimeParts, min?: TimeParts | null, max?: TimeParts | null): TimeParts {\n if (min && compareTimeParts(value, min) < 0) return {...min}\n if (max && compareTimeParts(value, max) > 0) return {...max}\n return value\n}\n\n// Render a time input backed by scrollable hour, minute and second columns.\nexport function MTimePicker({\n value,\n defaultValue,\n onChange,\n format = '24h',\n showSeconds = false,\n minuteStep = 1,\n min,\n max,\n placeholder,\n disabled = false,\n readOnly = false,\n name,\n id,\n variant = 'outlined',\n size = 'md',\n color,\n label,\n helperText,\n errorText,\n error = false,\n required = false,\n clearable = false,\n fullWidth = false,\n className,\n style,\n}: MTimePickerProps) {\n const texts = useMCommonTexts()\n const timeTexts = useMTimePickerTexts()\n const [open, setOpen] = useState(false)\n // Opening from the keyboard moves focus into the first column (APG dialog); a click keeps it in the field.\n const [focusOnOpen, setFocusOnOpen] = useState(false)\n const [internalValue, setInternalValue] = useState(defaultValue ?? '')\n const triggerRef = useRef<HTMLDivElement>(null)\n\n const currentValue = value !== undefined ? value : internalValue\n const hasError = error || !!errorText\n const parsed = parseTimeValue(currentValue, format)\n const minTime = parseTimeValue(min ?? '', format)\n const maxTime = parseTimeValue(max ?? '', format)\n const displayTime = parsed ? to12HourParts(parsed) : null\n const displayValue = parsed\n ? formatTimeValue(parsed.hours, parsed.minutes, parsed.seconds, showSeconds, format)\n : currentValue\n\n // Build the visible hour list based on the selected time format.\n const hours = useMemo(() => {\n const items: number[] = []\n const maxHour = format === '12h' ? 12 : 23\n const startHour = format === '12h' ? 1 : 0\n for (let index = startHour; index <= maxHour; index++) {\n items.push(index)\n }\n return items\n }, [format])\n\n // Build the minute list using the configured step size.\n const minutes = useMemo(() => {\n const items: number[] = []\n for (let index = 0; index < 60; index += minuteStep) {\n items.push(index)\n }\n return items\n }, [minuteStep])\n\n // Build the seconds list only when the picker exposes seconds.\n const seconds = useMemo(() => {\n if (!showSeconds) return []\n const items: number[] = []\n for (let index = 0; index < 60; index++) {\n items.push(index)\n }\n return items\n }, [showSeconds])\n\n // Reuse range validation for list rendering and direct text input.\n const isSelectable = useCallback(\n (hoursValue: number, minutesValue: number, secondsValue: number = 0) => {\n return isTimeInRange({hours: hoursValue, minutes: minutesValue, seconds: secondsValue}, minTime, maxTime)\n },\n [maxTime, minTime]\n )\n\n // A column option is available when ANY time it can lead to lies in range — not just\n // the combination with the other columns' current values. Picking hour 9 while the\n // minutes read 15 with `min=\"09:30\"` is allowed and clamps to 09:30.\n const lastSecond = showSeconds ? 59 : 0\n const isMinuteAvailable = useCallback(\n (hoursValue: number, minutesValue: number) =>\n windowIntersectsRange(\n {hours: hoursValue, minutes: minutesValue, seconds: 0},\n {hours: hoursValue, minutes: minutesValue, seconds: lastSecond},\n minTime,\n maxTime\n ),\n [lastSecond, maxTime, minTime]\n )\n const isHourAvailable = useCallback(\n (hoursValue: number) => minutes.some((minutesValue) => isMinuteAvailable(hoursValue, minutesValue)),\n [isMinuteAvailable, minutes]\n )\n const isMeridiemAvailable = useCallback(\n (meridiem: Meridiem) => {\n const offset = meridiem === 'AM' ? 0 : 12\n for (let hour = offset; hour < offset + 12; hour++) {\n if (isHourAvailable(hour)) return true\n }\n return false\n },\n [isHourAvailable]\n )\n\n // Apply the selected time and keep uncontrolled usage in sync.\n const handleSelect = useCallback(\n (hoursValue: number, minutesValue: number, secondsValue: number = 0) => {\n const next = clampTime({hours: hoursValue, minutes: minutesValue, seconds: secondsValue}, minTime, maxTime)\n if (!isSelectable(next.hours, next.minutes, next.seconds)) return\n const time = formatTimeValue(next.hours, next.minutes, next.seconds, showSeconds, format)\n if (value === undefined) setInternalValue(time)\n onChange?.(time)\n },\n [format, isSelectable, maxTime, minTime, onChange, showSeconds, value]\n )\n\n const handleInputChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const raw = event.target.value\n if (value === undefined) setInternalValue(raw)\n },\n [value]\n )\n\n // Normalize manual input once the user leaves the field.\n const handleInputBlur = useCallback(() => {\n const nextValue = parseTimeValue(currentValue, format)\n if (nextValue && isTimeInRange(nextValue, minTime, maxTime)) {\n const time = formatTimeValue(nextValue.hours, nextValue.minutes, nextValue.seconds, showSeconds, format)\n if (value === undefined) setInternalValue(time)\n onChange?.(time)\n }\n }, [currentValue, format, maxTime, minTime, onChange, showSeconds, value])\n\n const handleMeridiemChange = useCallback(\n (meridiem: Meridiem) => {\n const currentHours = displayTime?.hours ?? 12\n const minutesValue = parsed?.minutes ?? 0\n const secondsValue = parsed?.seconds ?? 0\n const nextHours = to24HourValue(currentHours, meridiem)\n handleSelect(nextHours, minutesValue, secondsValue)\n },\n [displayTime?.hours, handleSelect, parsed?.minutes, parsed?.seconds]\n )\n\n // ArrowDown / Alt+ArrowDown in the field opens the columns and moves focus into them.\n const handleInputKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (disabled || readOnly || event.key !== 'ArrowDown') return\n event.preventDefault()\n setFocusOnOpen(true)\n setOpen(true)\n },\n [disabled, readOnly]\n )\n\n const handleClose = useCallback(() => {\n setOpen(false)\n setFocusOnOpen(false)\n }, [])\n\n // Clear the current time without closing the trigger first.\n const handleClear = useCallback(\n (event: React.MouseEvent) => {\n event.stopPropagation()\n if (value === undefined) setInternalValue('')\n onChange?.('')\n },\n [onChange, value]\n )\n\n return (\n <div\n className={cn('time picker', color && `color-${color}`, fullWidth && 'full-width', className)}\n style={style}\n >\n {label && (\n <label\n htmlFor={id}\n className={cn('field-label', open && 'focused', hasError && 'error', required && 'required')}\n >\n {label}\n </label>\n )}\n\n <div\n ref={triggerRef}\n className={cn(\n 'time trigger',\n `field-${variant}`,\n `field-${size}`,\n open && 'focused',\n hasError && 'error',\n disabled && 'disabled'\n )}\n onClick={() => !disabled && !readOnly && setOpen(true)}\n >\n <span className=\"time icon\">\n <MClockIcon />\n </span>\n <input\n type=\"text\"\n className=\"time input\"\n value={displayValue}\n onChange={handleInputChange}\n onBlur={handleInputBlur}\n onKeyDown={handleInputKeyDown}\n placeholder={\n placeholder ??\n (format === '12h'\n ? showSeconds\n ? 'hh:mm:ss AM'\n : 'hh:mm AM'\n : showSeconds\n ? 'HH:MM:SS'\n : 'HH:MM')\n }\n disabled={disabled}\n readOnly={readOnly}\n id={id}\n aria-invalid={hasError || undefined}\n />\n {clearable && currentValue && !disabled && (\n <button\n type=\"button\"\n className=\"time clear clear-btn-base\"\n onClick={handleClear}\n tabIndex={-1}\n aria-label={texts.clearTime}\n >\n <MCloseIcon />\n </button>\n )}\n </div>\n\n {name && <input type=\"hidden\" name={name} value={displayValue} />}\n\n <MPopover\n className=\"time picker popover\"\n open={open}\n anchorRef={triggerRef}\n onClose={handleClose}\n placement=\"bottom-start\"\n role=\"dialog\"\n aria-label={label ?? timeTexts.dialogLabel}\n initialFocus={focusOnOpen ? 'first' : undefined}\n closeOnTabOut\n >\n <div className=\"time columns\">\n <TimeColumnListbox\n classNames={TIME_COLUMN_CLASSES}\n items={hours}\n selected={format === '12h' ? displayTime?.hours : parsed?.hours}\n onSelect={(hoursValue) =>\n handleSelect(\n format === '12h'\n ? to24HourValue(hoursValue, displayTime?.meridiem ?? 'AM')\n : hoursValue,\n parsed?.minutes ?? 0,\n parsed?.seconds ?? 0\n )\n }\n isDisabled={(hoursValue) =>\n !isHourAvailable(\n format === '12h' ? to24HourValue(hoursValue, displayTime?.meridiem ?? 'AM') : hoursValue\n )\n }\n label={timeTexts.hours}\n />\n <TimeColumnListbox\n classNames={TIME_COLUMN_CLASSES}\n items={minutes}\n selected={parsed?.minutes}\n onSelect={(minutesValue) =>\n handleSelect(parsed?.hours ?? 0, minutesValue, parsed?.seconds ?? 0)\n }\n isDisabled={(minutesValue) => !isMinuteAvailable(parsed?.hours ?? 0, minutesValue)}\n label={timeTexts.minutes}\n />\n {showSeconds && (\n <TimeColumnListbox\n classNames={TIME_COLUMN_CLASSES}\n items={seconds}\n selected={parsed?.seconds}\n onSelect={(secondsValue) =>\n handleSelect(parsed?.hours ?? 0, parsed?.minutes ?? 0, secondsValue)\n }\n isDisabled={(secondsValue) =>\n !isSelectable(parsed?.hours ?? 0, parsed?.minutes ?? 0, secondsValue)\n }\n label={timeTexts.seconds}\n />\n )}\n {format === '12h' && (\n <TimeColumnListbox\n classNames={TIME_COLUMN_CLASSES}\n items={['AM', 'PM']}\n selected={displayTime?.meridiem}\n onSelect={handleMeridiemChange}\n isDisabled={(meridiem) => !isMeridiemAvailable(meridiem)}\n label={timeTexts.meridiem}\n />\n )}\n </div>\n </MPopover>\n\n {(errorText || helperText) && (\n <div className=\"time bottom\">\n {errorText ? (\n <span className=\"field-error\" role=\"alert\">\n {errorText}\n </span>\n ) : (\n <span className=\"time helper\">{helperText}</span>\n )}\n </div>\n )}\n </div>\n )\n}\n\nconst TIME_COLUMN_CLASSES = {\n column: 'time column',\n label: 'time column label',\n list: 'time column list',\n item: 'time column item',\n}\n","import {useCallback, useEffect, useId, useMemo, useRef, useState} from 'react'\nimport type * as React from 'react'\nimport {MPopover} from '../../primitives'\nimport {cn} from '../../../utils/cn'\nimport {useMDateRangePickerTexts} from '../../../i18n/frameworkTexts'\nimport {useDocumentLocale} from '../../../utils/locale'\nimport {MCalendarIcon, MChevronLeftIcon, MChevronRightIcon, MCloseIcon} from '../../../icons'\nimport {\n addMonths,\n daysInMonth,\n firstDayOfMonth,\n formatDate,\n getDayNames,\n getMonthNames,\n isDateInRange,\n isSameDay,\n stripTime,\n} from '../../../utils/dateUtils'\nimport type {MDateRangePickerProps, MDateRangePreset} from './MDateRangePicker.types'\nimport {colorRgbVar} from '../../../utils/colorRgbVar'\nimport {getWeekdayLabels} from '../../../utils/calendarDates'\nimport {useDateGridNav} from '../../../utils/useDateGridNav'\nimport './MDateRangePicker.css'\n\nfunction toDate(value: Date | string | null | undefined): Date | null {\n if (!value) return null\n if (value instanceof Date) return stripTime(value)\n const date = new Date(value)\n return isNaN(date.getTime()) ? null : stripTime(date)\n}\n\nfunction sortRange(start: Date, end: Date) {\n return start.getTime() <= end.getTime() ? {start, end} : {start: end, end: start}\n}\n\nfunction isBetween(date: Date, start: Date | null, end: Date | null) {\n if (!start || !end) return false\n const time = date.getTime()\n return time > start.getTime() && time < end.getTime()\n}\n\nfunction formatRangeLabel(start: Date | null, end: Date | null, format: string) {\n if (start && end) {\n return `${formatDate(start, format)} - ${formatDate(end, format)}`\n }\n\n if (start) {\n return `${formatDate(start, format)} - ...`\n }\n\n return ''\n}\n\n// Form value of a calendar day in LOCAL time. `toISOString()` converts to UTC first,\n// which moves local midnight to the previous day east of Greenwich.\nfunction toLocalIsoDate(date: Date) {\n const year = date.getFullYear().toString().padStart(4, '0')\n const month = (date.getMonth() + 1).toString().padStart(2, '0')\n const day = date.getDate().toString().padStart(2, '0')\n return `${year}-${month}-${day}`\n}\n\nfunction startOfMonth(date: Date) {\n return new Date(date.getFullYear(), date.getMonth(), 1)\n}\n\nfunction endOfMonth(date: Date) {\n return new Date(date.getFullYear(), date.getMonth() + 1, 0)\n}\n\nfunction daysAgo(days: number): Date {\n const date = stripTime(new Date())\n date.setDate(date.getDate() - (days - 1))\n return date\n}\n\nfunction monthsAgo(months: number): Date {\n const today = stripTime(new Date())\n return new Date(today.getFullYear(), today.getMonth() - months, today.getDate())\n}\n\nfunction getDefaultPresets(texts: ReturnType<typeof useMDateRangePickerTexts>): MDateRangePreset[] {\n const today = stripTime(new Date())\n const previousMonthDate = new Date(today.getFullYear(), today.getMonth() - 1, 1)\n\n return [\n {label: texts.presets.today, value: {start: today, end: today}},\n {label: texts.presets.days2, value: {start: daysAgo(2), end: today}},\n {label: texts.presets.days3, value: {start: daysAgo(3), end: today}},\n {label: texts.presets.days7, value: {start: daysAgo(7), end: today}},\n {label: texts.presets.days14, value: {start: daysAgo(14), end: today}},\n {label: texts.presets.days31, value: {start: daysAgo(31), end: today}},\n {label: texts.presets.thisMonth, value: {start: startOfMonth(today), end: endOfMonth(today)}},\n {\n label: texts.presets.previousMonth,\n value: {start: startOfMonth(previousMonthDate), end: endOfMonth(previousMonthDate)},\n },\n {label: texts.presets.months2, value: {start: monthsAgo(2), end: today}},\n {label: texts.presets.months3, value: {start: monthsAgo(3), end: today}},\n {label: texts.presets.months6, value: {start: monthsAgo(6), end: today}},\n {label: texts.presets.year1, value: {start: monthsAgo(12), end: today}},\n ]\n}\n\nfunction buildCalendarDays(viewDate: Date, firstDayOfWeek: 0 | 1) {\n const year = viewDate.getFullYear()\n const month = viewDate.getMonth()\n const totalDays = daysInMonth(year, month)\n let startDay = firstDayOfMonth(year, month)\n\n if (firstDayOfWeek === 1) {\n startDay = startDay === 0 ? 6 : startDay - 1\n }\n\n const days = [] as Array<{date: Date; currentMonth: boolean}>\n\n const previousMonth = month === 0 ? 11 : month - 1\n const previousYear = month === 0 ? year - 1 : year\n const previousMonthDays = daysInMonth(previousYear, previousMonth)\n\n for (let index = startDay - 1; index >= 0; index -= 1) {\n days.push({date: new Date(previousYear, previousMonth, previousMonthDays - index), currentMonth: false})\n }\n\n for (let day = 1; day <= totalDays; day += 1) {\n days.push({date: new Date(year, month, day), currentMonth: true})\n }\n\n const remaining = 42 - days.length\n const nextMonth = month === 11 ? 0 : month + 1\n const nextYear = month === 11 ? year + 1 : year\n\n for (let day = 1; day <= remaining; day += 1) {\n days.push({date: new Date(nextYear, nextMonth, day), currentMonth: false})\n }\n\n return days\n}\n\n// Render a single control for start and end date selection inside one calendar popover.\nexport function MDateRangePicker({\n value,\n defaultValue,\n onChange,\n format = 'dd.MM.yyyy',\n locale: localeOverride,\n min,\n max,\n disabledDates,\n placeholder,\n disabled = false,\n readOnly = false,\n name,\n id,\n variant = 'outlined',\n size = 'md',\n color,\n label,\n helperText,\n errorText,\n error = false,\n required = false,\n clearable = false,\n inline = false,\n showTodayButton = true,\n presets = false,\n presetsSidebar = false,\n firstDayOfWeek = 1,\n fullWidth = false,\n allowSameDay = true,\n className,\n style,\n}: MDateRangePickerProps) {\n const locale = useDocumentLocale(localeOverride)\n const controlledRange = value\n ? {\n start: toDate(value.start),\n end: toDate(value.end),\n }\n : null\n const [internalRange, setInternalRange] = useState(() => ({\n start: toDate(defaultValue?.start),\n end: toDate(defaultValue?.end),\n }))\n const [hoveredDate, setHoveredDate] = useState<Date | null>(null)\n const [open, setOpen] = useState(false)\n // Opening from the keyboard moves focus to the day grid (APG date picker dialog); a click does not.\n const [focusOnOpen, setFocusOnOpen] = useState(false)\n const triggerRef = useRef<HTMLDivElement>(null)\n\n const selectedRange = controlledRange ?? internalRange\n const startDate = selectedRange.start\n const endDate = selectedRange.end\n const minDate = toDate(min)\n const maxDate = toDate(max)\n const hasError = error || !!errorText\n const texts = useMDateRangePickerTexts()\n const dayNames = getDayNames(locale, firstDayOfWeek)\n const monthNames = getMonthNames(locale)\n const availablePresets = useMemo(() => {\n const list =\n presets === true || (presetsSidebar && !presets)\n ? getDefaultPresets(texts)\n : Array.isArray(presets)\n ? presets\n : []\n\n if (allowSameDay) return list\n\n // One-day presets (e.g. \"Today\") cannot be applied when `allowSameDay` is false.\n return list.filter((preset) => {\n const start = toDate(preset.value.start)\n const end = toDate(preset.value.end)\n return !(start && end && isSameDay(start, end))\n })\n }, [allowSameDay, presets, presetsSidebar, texts])\n\n const [viewDate, setViewDate] = useState(() => {\n const baseDate = startDate ?? new Date()\n return new Date(baseDate.getFullYear(), baseDate.getMonth(), 1)\n })\n\n const startTime = startDate?.getTime() ?? null\n useEffect(() => {\n if (!startTime) return\n const d = new Date(startTime)\n setViewDate(new Date(d.getFullYear(), d.getMonth(), 1))\n }, [startTime])\n\n const isDisabled = useCallback(\n (date: Date): boolean => {\n if (!isDateInRange(date, minDate, maxDate)) return true\n if (Array.isArray(disabledDates)) {\n return disabledDates.some((disabledDate) => isSameDay(disabledDate, date))\n }\n if (typeof disabledDates === 'function') {\n return disabledDates(date)\n }\n return false\n },\n [disabledDates, maxDate, minDate]\n )\n\n const commitRange = useCallback(\n (nextRange: {start: Date | null; end: Date | null}) => {\n if (value === undefined) {\n setInternalRange(nextRange)\n }\n onChange?.(nextRange)\n },\n [onChange, value]\n )\n\n const handleDayClick = useCallback(\n (date: Date) => {\n if (isDisabled(date)) return\n\n if (!startDate || (startDate && endDate)) {\n commitRange({start: date, end: null})\n setHoveredDate(null)\n return\n }\n\n if (!allowSameDay && isSameDay(date, startDate)) {\n return\n }\n\n const orderedRange = sortRange(startDate, date)\n commitRange(orderedRange)\n setHoveredDate(null)\n\n if (!inline) {\n setOpen(false)\n }\n },\n [allowSameDay, commitRange, endDate, inline, isDisabled, startDate]\n )\n\n const handleClear = useCallback(\n (event: React.MouseEvent) => {\n event.stopPropagation()\n commitRange({start: null, end: null})\n setHoveredDate(null)\n },\n [commitRange]\n )\n\n const handleToday = useCallback(() => {\n const today = stripTime(new Date())\n if (isDisabled(today)) return\n if (!allowSameDay) {\n // A one-day range is not allowed: start the range today and let the user pick the end.\n commitRange({start: today, end: null})\n setViewDate(new Date(today.getFullYear(), today.getMonth(), 1))\n setHoveredDate(null)\n return\n }\n commitRange({start: today, end: today})\n setViewDate(new Date(today.getFullYear(), today.getMonth(), 1))\n setHoveredDate(null)\n if (!inline) {\n setOpen(false)\n }\n }, [allowSameDay, commitRange, inline, isDisabled])\n\n const handlePresetClick = useCallback(\n (preset: MDateRangePreset) => {\n const start = toDate(preset.value.start)\n const end = toDate(preset.value.end)\n\n if (!start || !end) {\n return\n }\n\n const orderedRange = sortRange(start, end)\n\n if (isDisabled(orderedRange.start) || isDisabled(orderedRange.end)) {\n return\n }\n\n if (!allowSameDay && isSameDay(orderedRange.start, orderedRange.end)) {\n return\n }\n\n commitRange(orderedRange)\n setViewDate(new Date(orderedRange.start.getFullYear(), orderedRange.start.getMonth(), 1))\n setHoveredDate(null)\n\n if (!inline) {\n setOpen(false)\n }\n },\n [allowSameDay, commitRange, inline, isDisabled]\n )\n\n const previewEnd = startDate && !endDate ? hoveredDate : null\n const firstMonth = viewDate\n const secondMonth = addMonths(viewDate, 1)\n const today = stripTime(new Date())\n\n // Both visible months share one roving tab stop; the arrows cross from one panel to the other.\n const gridNav = useDateGridNav({\n viewMonth: viewDate,\n monthsShown: 2,\n onViewMonthChange: setViewDate,\n selectedDate: endDate ?? startDate,\n weekStartsOn: firstDayOfWeek,\n onSelect: handleDayClick,\n isDisabled,\n onFocusDate: (date) => {\n if (startDate && !endDate) setHoveredDate(date)\n },\n })\n const baseId = useId()\n const weekdayLong = useMemo(() => getWeekdayLabels(locale, firstDayOfWeek, 'long'), [locale, firstDayOfWeek])\n const dayLabelFormatter = useMemo(\n () => new Intl.DateTimeFormat(locale, {weekday: 'long', day: 'numeric', month: 'long', year: 'numeric'}),\n [locale]\n )\n\n const openFromKeyboard = useCallback(() => {\n if (disabled || readOnly) return\n setFocusOnOpen(true)\n setOpen(true)\n }, [disabled, readOnly])\n\n // The read-only field opens the calendar with Enter, Space, ArrowDown or Alt+ArrowDown.\n const handleInputKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter' || event.key === ' ' || event.key === 'ArrowDown') {\n event.preventDefault()\n openFromKeyboard()\n }\n },\n [openFromKeyboard]\n )\n\n const handleClosePopover = useCallback(() => {\n setOpen(false)\n setFocusOnOpen(false)\n setHoveredDate(null)\n }, [])\n\n const displayValue = useMemo(() => formatRangeLabel(startDate, endDate, format), [endDate, format, startDate])\n\n const calendarMonths = useMemo(\n () =>\n [firstMonth, secondMonth].map((monthDate) => ({\n monthDate,\n days: buildCalendarDays(monthDate, firstDayOfWeek),\n })),\n [firstDayOfWeek, firstMonth, secondMonth]\n )\n\n const summaryText =\n startDate && endDate\n ? `${formatDate(startDate, format)} - ${formatDate(endDate, format)}`\n : startDate\n ? `${formatDate(startDate, format)} - ...`\n : (placeholder ?? texts.defaultRangePlaceholder)\n\n const showSidebar = presetsSidebar && availablePresets.length > 0\n const showInlinePresets = !presetsSidebar && availablePresets.length > 0\n\n const renderPresetsSidebar = () => (\n <div className=\"presets-sidebar\">\n {availablePresets.map((preset) => (\n <button\n key={preset.label}\n type=\"button\"\n className=\"preset-sidebar-btn\"\n onClick={() => handlePresetClick(preset)}\n >\n {preset.label}\n </button>\n ))}\n </div>\n )\n\n const renderCalendarContent = () => (\n <div className=\"calendar-body\">\n <div className=\"calendar-top\">\n <div className=\"calendar-caption\">\n <span className=\"caption-title\">\n {monthNames[firstMonth.getMonth()]} {firstMonth.getFullYear()}\n </span>\n <span className=\"caption-subtitle\">{texts.rangeSubtitle}</span>\n </div>\n <div className=\"nav-actions\">\n <button\n type=\"button\"\n className=\"nav-btn\"\n onClick={() => setViewDate(addMonths(viewDate, -1))}\n aria-label={texts.previousMonth}\n >\n <MChevronLeftIcon />\n </button>\n <button\n type=\"button\"\n className=\"nav-btn\"\n onClick={() => setViewDate(addMonths(viewDate, 1))}\n aria-label={texts.nextMonth}\n >\n <MChevronRightIcon />\n </button>\n </div>\n </div>\n\n {showInlinePresets && (\n <div className=\"presets\">\n {availablePresets.map((preset) => (\n <button\n key={preset.label}\n type=\"button\"\n className=\"preset-btn\"\n onClick={() => handlePresetClick(preset)}\n >\n {preset.label}\n </button>\n ))}\n </div>\n )}\n\n <div ref={gridNav.containerRef as React.RefObject<HTMLDivElement>} className=\"months\">\n {calendarMonths.map(({monthDate, days}, monthIndex) => (\n <div key={monthDate.toISOString()} className=\"month-panel\">\n <div id={`${baseId}-month-${monthIndex}`} className=\"month-title\" aria-live=\"polite\">\n {monthNames[monthDate.getMonth()]} {monthDate.getFullYear()}\n </div>\n {/* APG date grid per month; one tab stop across both. */}\n <div\n className=\"day-table\"\n role=\"grid\"\n aria-labelledby={`${baseId}-month-${monthIndex}`}\n onKeyDown={gridNav.onGridKeyDown}\n >\n <div className=\"day-names\" role=\"row\">\n {dayNames.map((dayName, dayIndex) => (\n <span\n key={`${monthDate.toISOString()}-${dayName}`}\n className=\"day-name\"\n role=\"columnheader\"\n aria-label={weekdayLong[dayIndex]}\n >\n {dayName}\n </span>\n ))}\n </div>\n <div className=\"day-grid\" role=\"rowgroup\">\n {Array.from({length: days.length / 7}, (_, row) => (\n <div key={row} className=\"day-row\" role=\"row\">\n {days.slice(row * 7, row * 7 + 7).map(({date, currentMonth}, column) => {\n const index = row * 7 + column\n // Two panels side by side: a neighbouring month's days already\n // appear in the other panel, so drawing them here too would paint\n // the selected range twice. Keep an empty grid cell instead.\n if (!currentMonth) {\n return (\n <span\n key={`${monthDate.toISOString()}-${index}`}\n className=\"day other-month outside\"\n role=\"gridcell\"\n />\n )\n }\n\n const disabledDay = isDisabled(date)\n const selectedStart = startDate ? isSameDay(date, startDate) : false\n const selectedEnd = endDate ? isSameDay(date, endDate) : false\n const inRange = isBetween(date, startDate, endDate)\n const previewRangeData =\n !endDate && startDate && previewEnd\n ? sortRange(startDate, previewEnd)\n : null\n const previewRange = previewRangeData\n ? isBetween(date, previewRangeData.start, previewRangeData.end)\n : false\n const previewEdge = previewRangeData\n ? isSameDay(date, previewRangeData.start) ||\n isSameDay(date, previewRangeData.end)\n : false\n\n const cellProps = gridNav.getCellProps(date)\n const isToday = isSameDay(date, today)\n\n return (\n <div\n key={`${monthDate.toISOString()}-${index}`}\n {...cellProps}\n role=\"gridcell\"\n className={cn(\n 'day',\n !currentMonth && 'other-month',\n isToday && 'today',\n selectedStart && 'range-start selected',\n selectedEnd && 'range-end selected',\n inRange && 'in-range',\n previewRange && !previewEdge && 'preview-range',\n disabledDay && 'disabled'\n )}\n onClick={() => handleDayClick(date)}\n onMouseEnter={() => startDate && !endDate && setHoveredDate(date)}\n onFocus={() => {\n cellProps.onFocus()\n if (startDate && !endDate) setHoveredDate(date)\n }}\n aria-selected={selectedStart || selectedEnd || inRange}\n // Not native `disabled`: the roving tab stop may land on\n // an unavailable day and must stay focusable.\n aria-disabled={disabledDay || undefined}\n aria-current={isToday ? 'date' : undefined}\n aria-label={dayLabelFormatter.format(date)}\n >\n {date.getDate()}\n </div>\n )\n })}\n </div>\n ))}\n </div>\n </div>\n </div>\n ))}\n </div>\n\n <div className=\"footer\">\n <span className=\"summary\">{summaryText}</span>\n <div className=\"footer-actions\">\n {clearable && (startDate || endDate) && (\n <button\n type=\"button\"\n className=\"footer-btn\"\n onClick={(event) => {\n event.preventDefault()\n commitRange({start: null, end: null})\n setHoveredDate(null)\n }}\n >\n {texts.clear}\n </button>\n )}\n {showTodayButton && (\n <button type=\"button\" className=\"footer-btn\" onClick={handleToday}>\n {texts.today}\n </button>\n )}\n </div>\n </div>\n </div>\n )\n\n const renderCalendar = () => (\n <div className={cn('date-range-calendar', showSidebar && 'with-sidebar')}>\n {showSidebar && renderPresetsSidebar()}\n {renderCalendarContent()}\n </div>\n )\n\n if (inline) {\n return (\n <div\n className={cn('date-range-picker', color && `color-${color}`, fullWidth && 'full-width', className)}\n style={style}\n >\n {label && (\n <label className={cn('field-label', hasError && 'error', required && 'required')}>{label}</label>\n )}\n {renderCalendar()}\n </div>\n )\n }\n\n return (\n <div\n className={cn('date-range-picker', color && `color-${color}`, fullWidth && 'full-width', className)}\n style={style}\n >\n {label && (\n <label\n htmlFor={id}\n className={cn('field-label', open && 'focused', hasError && 'error', required && 'required')}\n >\n {label}\n </label>\n )}\n\n <div\n ref={triggerRef}\n className={cn(\n 'trigger',\n `field-${variant}`,\n `field-${size}`,\n open && 'focused',\n hasError && 'error',\n disabled && 'disabled'\n )}\n onClick={() => !disabled && !readOnly && setOpen(true)}\n >\n <span className=\"icon\">\n <MCalendarIcon />\n </span>\n <input\n type=\"text\"\n className=\"input\"\n value={displayValue}\n placeholder={placeholder ?? texts.defaultRangePlaceholder}\n disabled={disabled}\n readOnly\n id={id}\n aria-invalid={hasError || undefined}\n onKeyDown={handleInputKeyDown}\n />\n {clearable && (startDate || endDate) && !disabled && (\n <button\n type=\"button\"\n className=\"clear-btn clear-btn-base\"\n onClick={handleClear}\n tabIndex={-1}\n aria-label={texts.clear}\n >\n <MCloseIcon />\n </button>\n )}\n </div>\n\n {name && startDate && endDate && (\n <input type=\"hidden\" name={name} value={`${toLocalIsoDate(startDate)}:${toLocalIsoDate(endDate)}`} />\n )}\n\n <MPopover\n className={'date-range-picker-popover'}\n style={{'--color-rgb': colorRgbVar(color)} as React.CSSProperties}\n open={open}\n anchorRef={triggerRef}\n onClose={handleClosePopover}\n placement=\"bottom-start\"\n role=\"dialog\"\n aria-label={label ?? texts.dialogLabel}\n initialFocus={focusOnOpen ? gridNav.tabStopRef : undefined}\n closeOnTabOut\n >\n {renderCalendar()}\n </MPopover>\n\n {(errorText || helperText) && (\n <div className=\"bottom-row\">\n {errorText ? (\n <span className=\"field-error\" role=\"alert\">\n {errorText}\n </span>\n ) : (\n <span className=\"helper-text\">{helperText}</span>\n )}\n </div>\n )}\n </div>\n )\n}\n"],"mappings":"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"}
@@ -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(`./dropdowns-DGYg9zIh.cjs`);exports.MAutocomplete=e.i,exports.MDatePicker=e.r,exports.MDateRangePicker=e.t,exports.MSelect=e.a,exports.MTimePicker=e.n;
3
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./dropdowns-DN7j8J-V.cjs`);exports.MAutocomplete=e.i,exports.MDatePicker=e.r,exports.MDateRangePicker=e.t,exports.MSelect=e.a,exports.MTimePicker=e.n;
package/dist/dropdowns.js CHANGED
@@ -1,4 +1,4 @@
1
1
  import {ensureStyles} from './style-runtime.js'
2
2
  ensureStyles()
3
- import { a as e, i as t, n, r, t as i } from "./dropdowns-Dq-xAplH.js";
3
+ import { a as e, i as t, n, r, t as i } from "./dropdowns-2_7VMEDo.js";
4
4
  export { t as MAutocomplete, r as MDatePicker, i as MDateRangePicker, e as MSelect, n as MTimePicker };