@banzamel/mineralui 2.4.3 → 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 (544) hide show
  1. package/README.md +1 -1
  2. package/dist/MAvatar-CvQuiGvT.cjs +2 -0
  3. package/dist/MAvatar-CvQuiGvT.cjs.map +1 -0
  4. package/dist/MAvatar-EkOBrEtS.js +73 -0
  5. package/dist/MAvatar-EkOBrEtS.js.map +1 -0
  6. package/dist/MButton-BxEky3xQ.cjs +2 -0
  7. package/dist/MButton-BxEky3xQ.cjs.map +1 -0
  8. package/dist/MButton-KELyyBw1.js +123 -0
  9. package/dist/MButton-KELyyBw1.js.map +1 -0
  10. package/dist/{MButtonGroup-BEJxXZ8u.js → MButtonGroup-DDnn8Wfy.js} +3 -3
  11. package/dist/{MButtonGroup-BEJxXZ8u.js.map → MButtonGroup-DDnn8Wfy.js.map} +1 -1
  12. package/dist/{MButtonGroup-DO1Tq3Za.cjs → MButtonGroup-Dz8Fm-oA.cjs} +2 -2
  13. package/dist/{MButtonGroup-DO1Tq3Za.cjs.map → MButtonGroup-Dz8Fm-oA.cjs.map} +1 -1
  14. package/dist/{MCard-P8OoswWM.cjs → MCard-Bqm4BjK_.cjs} +2 -2
  15. package/dist/MCard-Bqm4BjK_.cjs.map +1 -0
  16. package/dist/{MCard-BqSkGAgf.js → MCard-CqZYGaS2.js} +4 -4
  17. package/dist/MCard-CqZYGaS2.js.map +1 -0
  18. package/dist/MCheckbox-CaWgyUn5.js +72 -0
  19. package/dist/MCheckbox-CaWgyUn5.js.map +1 -0
  20. package/dist/MCheckbox-DpKJpnFF.cjs +2 -0
  21. package/dist/MCheckbox-DpKJpnFF.cjs.map +1 -0
  22. package/dist/{MConflictIllustration-znC7ijmP.js → MConflictIllustration-dwZS44ye.js} +1517 -1515
  23. package/dist/MConflictIllustration-dwZS44ye.js.map +1 -0
  24. package/dist/MConflictIllustration-vfHs-jad.cjs +2 -0
  25. package/dist/MConflictIllustration-vfHs-jad.cjs.map +1 -0
  26. package/dist/MDetailList-C3othNs3.js +127 -0
  27. package/dist/MDetailList-C3othNs3.js.map +1 -0
  28. package/dist/MDetailList-DkDHLdJ8.cjs +2 -0
  29. package/dist/MDetailList-DkDHLdJ8.cjs.map +1 -0
  30. package/dist/MDropdownMenu-C4-r7UZM.cjs +2 -0
  31. package/dist/MDropdownMenu-C4-r7UZM.cjs.map +1 -0
  32. package/dist/MDropdownMenu-Dvg9UsHB.js +219 -0
  33. package/dist/MDropdownMenu-Dvg9UsHB.js.map +1 -0
  34. package/dist/MGrid-CQqT8nHi.js +271 -0
  35. package/dist/MGrid-CQqT8nHi.js.map +1 -0
  36. package/dist/MGrid-tBsqShLG.cjs +2 -0
  37. package/dist/MGrid-tBsqShLG.cjs.map +1 -0
  38. package/dist/MHeading-DQSQ8c7L.js +21 -0
  39. package/dist/MHeading-DQSQ8c7L.js.map +1 -0
  40. package/dist/MHeading-DiGYs1FJ.cjs +2 -0
  41. package/dist/MHeading-DiGYs1FJ.cjs.map +1 -0
  42. package/dist/MInput-BeEGufZG.cjs +2 -0
  43. package/dist/MInput-BeEGufZG.cjs.map +1 -0
  44. package/dist/MInput-QnQV9L8U.js +190 -0
  45. package/dist/MInput-QnQV9L8U.js.map +1 -0
  46. package/dist/MInputCVC-CCNRAqHw.cjs +2 -0
  47. package/dist/MInputCVC-CCNRAqHw.cjs.map +1 -0
  48. package/dist/MInputCVC-IXIYZwex.js +410 -0
  49. package/dist/MInputCVC-IXIYZwex.js.map +1 -0
  50. package/dist/MInputSearch-BSIc6m2P.cjs +2 -0
  51. package/dist/MInputSearch-BSIc6m2P.cjs.map +1 -0
  52. package/dist/MInputSearch-CNuTAbYs.js +44 -0
  53. package/dist/MInputSearch-CNuTAbYs.js.map +1 -0
  54. package/dist/{MKbd-BR1GX5oK.cjs → MKbd-CnW3NUIu.cjs} +2 -2
  55. package/dist/{MKbd-BR1GX5oK.cjs.map → MKbd-CnW3NUIu.cjs.map} +1 -1
  56. package/dist/{MKbd-COb7oh_k.js → MKbd-DjfGyajR.js} +2 -2
  57. package/dist/{MKbd-COb7oh_k.js.map → MKbd-DjfGyajR.js.map} +1 -1
  58. package/dist/MLink-C6uwA6db.cjs +2 -0
  59. package/dist/MLink-C6uwA6db.cjs.map +1 -0
  60. package/dist/MLink-ixg0xFFI.js +31 -0
  61. package/dist/MLink-ixg0xFFI.js.map +1 -0
  62. package/dist/MLoader-CViA3zBo.js +44 -0
  63. package/dist/MLoader-CViA3zBo.js.map +1 -0
  64. package/dist/MLoader-DUOoOoNE.cjs +2 -0
  65. package/dist/MLoader-DUOoOoNE.cjs.map +1 -0
  66. package/dist/MPagination-BTGenxWW.js +122 -0
  67. package/dist/MPagination-BTGenxWW.js.map +1 -0
  68. package/dist/MPagination-DitmdtCc.cjs +2 -0
  69. package/dist/MPagination-DitmdtCc.cjs.map +1 -0
  70. package/dist/MPopover-CBDbUOW6.js +183 -0
  71. package/dist/MPopover-CBDbUOW6.js.map +1 -0
  72. package/dist/MPopover-ZeoU9hb5.cjs +2 -0
  73. package/dist/MPopover-ZeoU9hb5.cjs.map +1 -0
  74. package/dist/{MSimpleGrid-Ui8cI0ho.js → MSimpleGrid-C_QvLmck.js} +3 -3
  75. package/dist/MSimpleGrid-C_QvLmck.js.map +1 -0
  76. package/dist/MSimpleGrid-wgvjnxwM.cjs +2 -0
  77. package/dist/MSimpleGrid-wgvjnxwM.cjs.map +1 -0
  78. package/dist/{MSkeleton-Dhu-loDO.js → MSkeleton-BpcpBBJq.js} +12 -10
  79. package/dist/MSkeleton-BpcpBBJq.js.map +1 -0
  80. package/dist/MSkeleton-DuAN8Vcv.cjs +2 -0
  81. package/dist/MSkeleton-DuAN8Vcv.cjs.map +1 -0
  82. package/dist/MSlider-CLASUc2H.js +134 -0
  83. package/dist/MSlider-CLASUc2H.js.map +1 -0
  84. package/dist/MSlider-hONQBulE.cjs +2 -0
  85. package/dist/MSlider-hONQBulE.cjs.map +1 -0
  86. package/dist/MStack-BwAFeGGg.js +39 -0
  87. package/dist/MStack-BwAFeGGg.js.map +1 -0
  88. package/dist/MStack-CGII4A-q.cjs +2 -0
  89. package/dist/MStack-CGII4A-q.cjs.map +1 -0
  90. package/dist/MSubText-BeZk-fhz.js +17 -0
  91. package/dist/MSubText-BeZk-fhz.js.map +1 -0
  92. package/dist/MSubText-Dl1PfToZ.cjs +2 -0
  93. package/dist/MSubText-Dl1PfToZ.cjs.map +1 -0
  94. package/dist/MSurface-B_QnRLr5.js +74 -0
  95. package/dist/MSurface-B_QnRLr5.js.map +1 -0
  96. package/dist/MSurface-BrFo-JMJ.cjs +2 -0
  97. package/dist/MSurface-BrFo-JMJ.cjs.map +1 -0
  98. package/dist/MTag-BZrKN_DS.js +41 -0
  99. package/dist/MTag-BZrKN_DS.js.map +1 -0
  100. package/dist/MTag-DCE1vRJM.cjs +2 -0
  101. package/dist/MTag-DCE1vRJM.cjs.map +1 -0
  102. package/dist/MText-BUWQPoBM.js +45 -0
  103. package/dist/MText-BUWQPoBM.js.map +1 -0
  104. package/dist/MText-nsvLFsSv.cjs +2 -0
  105. package/dist/MText-nsvLFsSv.cjs.map +1 -0
  106. package/dist/MTooltip-BRSPJ3RY.js +100 -0
  107. package/dist/MTooltip-BRSPJ3RY.js.map +1 -0
  108. package/dist/MTooltip-Cj2Fxmzc.cjs +2 -0
  109. package/dist/MTooltip-Cj2Fxmzc.cjs.map +1 -0
  110. package/dist/MTreeView-BWCTlsU-.cjs +2 -0
  111. package/dist/MTreeView-BWCTlsU-.cjs.map +1 -0
  112. package/dist/MTreeView-CWcMwE-Z.js +554 -0
  113. package/dist/MTreeView-CWcMwE-Z.js.map +1 -0
  114. package/dist/calendar-2yhnCkGW.cjs +2 -0
  115. package/dist/calendar-2yhnCkGW.cjs.map +1 -0
  116. package/dist/calendar-DcNYDTVb.js +195 -0
  117. package/dist/calendar-DcNYDTVb.js.map +1 -0
  118. package/dist/calendar.cjs +1 -1
  119. package/dist/calendar.js +1 -1
  120. package/dist/{calendarDates-M_Dawj0j.js → calendarDates-Bpw_G_QR.js} +30 -19
  121. package/dist/calendarDates-Bpw_G_QR.js.map +1 -0
  122. package/dist/calendarDates-Cg0nm69Y.cjs +2 -0
  123. package/dist/calendarDates-Cg0nm69Y.cjs.map +1 -0
  124. package/dist/cards-Bp886TRb.cjs +2 -0
  125. package/dist/cards-Bp886TRb.cjs.map +1 -0
  126. package/dist/cards-BvER6Gx0.js +1277 -0
  127. package/dist/cards-BvER6Gx0.js.map +1 -0
  128. package/dist/cards.cjs +1 -1
  129. package/dist/cards.js +2 -2
  130. package/dist/{cn-YER3QsV1.js → cn-CUSXNnjF.js} +1 -1
  131. package/dist/{cn-YER3QsV1.js.map → cn-CUSXNnjF.js.map} +1 -1
  132. package/dist/{cn-CU5TNITO.cjs → cn-DYFxgzi2.cjs} +1 -1
  133. package/dist/{cn-CU5TNITO.cjs.map → cn-DYFxgzi2.cjs.map} +1 -1
  134. package/dist/components/cards/MCardDaySchedule/MCardDaySchedule.d.ts +1 -1
  135. package/dist/components/cards/MCardDocumentTree/MCardDocumentTree.d.ts +1 -1
  136. package/dist/components/cards/MCardGrid/MCardGrid.d.ts +1 -1
  137. package/dist/components/cards/MCardPayment/MCardPayment.d.ts +1 -1
  138. package/dist/components/cards/MCardPayment/MCardPayment.types.d.ts +4 -0
  139. package/dist/components/cards/MCardPaymentMethod/MCardPaymentMethod.d.ts +1 -1
  140. package/dist/components/cards/MStatCard/MStatCard.d.ts +1 -1
  141. package/dist/components/controls/MCheckbox/MCheckbox.types.d.ts +6 -0
  142. package/dist/components/controls/MLoadMore/MLoadMore.d.ts +1 -1
  143. package/dist/components/controls/MSlider/MSlider.d.ts +1 -1
  144. package/dist/components/controls/MSlider/MSlider.types.d.ts +5 -0
  145. package/dist/components/data/MTreeView/MTreeView.d.ts +1 -1
  146. package/dist/components/data/MTreeView/MTreeView.types.d.ts +6 -0
  147. package/dist/components/data/MWeekGrid/MWeekGrid.d.ts +1 -1
  148. package/dist/components/data/MWeekGrid/MWeekGrid.types.d.ts +9 -3
  149. package/dist/components/display/MCodeBlock/MCodeBlock.d.ts +1 -1
  150. package/dist/components/dropdowns/MAutocomplete/MAutocomplete.d.ts +1 -1
  151. package/dist/components/dropdowns/MAutocomplete/MAutocomplete.types.d.ts +8 -2
  152. package/dist/components/dropdowns/MSelect/MSelect.d.ts +1 -1
  153. package/dist/components/dropdowns/shared/TimeColumnListbox.d.ts +20 -0
  154. package/dist/components/feedback/MAlert/MAlert.d.ts +1 -1
  155. package/dist/components/feedback/MBadge/MBadge.d.ts +1 -1
  156. package/dist/components/feedback/MBanner/MBanner.d.ts +1 -1
  157. package/dist/components/feedback/MLoader/MLoader.d.ts +1 -1
  158. package/dist/components/feedback/MSpinner/MSpinner.d.ts +1 -1
  159. package/dist/components/feedback/MTag/MTag.d.ts +1 -1
  160. package/dist/components/inputs/MInput/MInput.types.d.ts +6 -1
  161. package/dist/components/inputs/MInput/useFormatCaret.d.ts +8 -0
  162. package/dist/components/layout/MCanvasGrid/MCanvasGrid.types.d.ts +5 -0
  163. package/dist/components/layout/MContainer/MContainer.d.ts +1 -1
  164. package/dist/components/layout/MDivider/MDivider.d.ts +1 -1
  165. package/dist/components/layout/MFooter/MFooter.d.ts +1 -1
  166. package/dist/components/layout/MHeader/MHeader.d.ts +1 -1
  167. package/dist/components/layout/MInline/MInline.d.ts +1 -1
  168. package/dist/components/layout/MNavbar/MNavbar.d.ts +1 -1
  169. package/dist/components/layout/MNavbar/MNavbar.types.d.ts +2 -0
  170. package/dist/components/layout/MSection/MSection.d.ts +1 -1
  171. package/dist/components/layout/MStack/MStack.d.ts +1 -1
  172. package/dist/components/layout/MStickyPanel/MStickyPanel.types.d.ts +4 -0
  173. package/dist/components/layout/MSurface/MSurface.d.ts +1 -1
  174. package/dist/components/media/MAvatar/MAvatar.d.ts +1 -1
  175. package/dist/components/media/MAvatar/MAvatar.types.d.ts +10 -0
  176. package/dist/components/media/MCarousel/MCarousel.d.ts +1 -1
  177. package/dist/components/media/MImage/MImage.d.ts +1 -1
  178. package/dist/components/media/carouselA11y.d.ts +9 -0
  179. package/dist/components/overlays/MCommandPalette/MCommandPalette.d.ts +1 -1
  180. package/dist/components/overlays/MDropdownMenu/MDropdownMenu.d.ts +4 -2
  181. package/dist/components/overlays/MDropdownMenu/MDropdownMenu.types.d.ts +3 -1
  182. package/dist/components/overlays/MPopconfirm/MPopconfirm.d.ts +1 -1
  183. package/dist/components/overlays/scrollLock.d.ts +14 -0
  184. package/dist/components/primitives/MPopover/MPopover.d.ts +1 -1
  185. package/dist/components/primitives/MPopover/MPopover.types.d.ts +32 -1
  186. package/dist/components/primitives/MPopover/popoverStack.d.ts +6 -0
  187. package/dist/components/typography/MHeading/MHeading.d.ts +2 -3
  188. package/dist/components/typography/MSubText/MSubText.d.ts +1 -1
  189. package/dist/components/typography/MText/MText.d.ts +1 -1
  190. package/dist/controls-B4Dxaab4.js +491 -0
  191. package/dist/controls-B4Dxaab4.js.map +1 -0
  192. package/dist/controls-CyXEIOXD.cjs +2 -0
  193. package/dist/controls-CyXEIOXD.cjs.map +1 -0
  194. package/dist/controls.cjs +1 -1
  195. package/dist/controls.js +5 -5
  196. package/dist/creditCards-Bo2mrc53.cjs +2 -0
  197. package/dist/creditCards-Bo2mrc53.cjs.map +1 -0
  198. package/dist/{creditCards-D_iWmtG6.js → creditCards-DmDOyvcw.js} +20 -31
  199. package/dist/creditCards-DmDOyvcw.js.map +1 -0
  200. package/dist/data-BM3KG8oN.cjs +2 -0
  201. package/dist/data-BM3KG8oN.cjs.map +1 -0
  202. package/dist/data-qnR8OBmj.js +808 -0
  203. package/dist/data-qnR8OBmj.js.map +1 -0
  204. package/dist/data.cjs +1 -1
  205. package/dist/data.js +2 -2
  206. package/dist/{dateUtils-CUY6CRCf.js → dateUtils-B-ToNZq_.js} +5 -6
  207. package/dist/dateUtils-B-ToNZq_.js.map +1 -0
  208. package/dist/dateUtils-z2L7ZaxA.cjs +2 -0
  209. package/dist/dateUtils-z2L7ZaxA.cjs.map +1 -0
  210. package/dist/display-BLMOBofj.cjs +3 -0
  211. package/dist/display-BLMOBofj.cjs.map +1 -0
  212. package/dist/display-Dlb79lkA.js +968 -0
  213. package/dist/display-Dlb79lkA.js.map +1 -0
  214. package/dist/display.cjs +1 -1
  215. package/dist/display.js +2 -2
  216. package/dist/dropdowns-2_7VMEDo.js +2009 -0
  217. package/dist/dropdowns-2_7VMEDo.js.map +1 -0
  218. package/dist/dropdowns-DN7j8J-V.cjs +2 -0
  219. package/dist/dropdowns-DN7j8J-V.cjs.map +1 -0
  220. package/dist/dropdowns.cjs +1 -1
  221. package/dist/dropdowns.js +1 -1
  222. package/dist/feedback-CECayytY.js +335 -0
  223. package/dist/feedback-CECayytY.js.map +1 -0
  224. package/dist/feedback-paV8Ls-h.cjs +2 -0
  225. package/dist/feedback-paV8Ls-h.cjs.map +1 -0
  226. package/dist/feedback.cjs +1 -1
  227. package/dist/feedback.js +5 -5
  228. package/dist/form-Br56h5EF.cjs +2 -0
  229. package/dist/form-Br56h5EF.cjs.map +1 -0
  230. package/dist/form-CJmMZgsH.js +165 -0
  231. package/dist/form-CJmMZgsH.js.map +1 -0
  232. package/dist/form.cjs +1 -1
  233. package/dist/form.js +1 -1
  234. package/dist/{formatters-CNjg_h7-.cjs → formatters-CauWlsnM.cjs} +1 -1
  235. package/dist/{formatters-CNjg_h7-.cjs.map → formatters-CauWlsnM.cjs.map} +1 -1
  236. package/dist/{formatters-T0vvjMtB.js → formatters-Doqdu_w1.js} +1 -1
  237. package/dist/{formatters-T0vvjMtB.js.map → formatters-Doqdu_w1.js.map} +1 -1
  238. package/dist/frameworkTexts-CaqdiKHW.cjs +2 -0
  239. package/dist/frameworkTexts-CaqdiKHW.cjs.map +1 -0
  240. package/dist/frameworkTexts-o43FqY1A.js +505 -0
  241. package/dist/frameworkTexts-o43FqY1A.js.map +1 -0
  242. package/dist/i18n/MI18nProvider.d.ts +6 -1
  243. package/dist/i18n/frameworkTexts.d.ts +511 -0
  244. package/dist/i18n/index.d.ts +1 -0
  245. package/dist/i18n.cjs +1 -1
  246. package/dist/i18n.js +2 -2
  247. package/dist/icons-Bp8bB9TP.cjs +2 -0
  248. package/dist/icons-Bp8bB9TP.cjs.map +1 -0
  249. package/dist/{icons-CBMl-kOM.js → icons-IqEBmGh3.js} +1223 -1220
  250. package/dist/icons-IqEBmGh3.js.map +1 -0
  251. package/dist/icons.cjs +1 -1
  252. package/dist/icons.js +1 -1
  253. package/dist/illustrations.cjs +1 -1
  254. package/dist/illustrations.js +1 -1
  255. package/dist/index.cjs +1 -1
  256. package/dist/index.d.ts +4 -2
  257. package/dist/index.js +56 -56
  258. package/dist/inputs-C0BJzlA-.js +1923 -0
  259. package/dist/inputs-C0BJzlA-.js.map +1 -0
  260. package/dist/inputs-CvNBBLFA.cjs +2 -0
  261. package/dist/inputs-CvNBBLFA.cjs.map +1 -0
  262. package/dist/inputs.cjs +1 -1
  263. package/dist/inputs.js +4 -4
  264. package/dist/layout-BSFqGXLZ.js +1101 -0
  265. package/dist/layout-BSFqGXLZ.js.map +1 -0
  266. package/dist/layout-MKqvUkPv.cjs +2 -0
  267. package/dist/layout-MKqvUkPv.cjs.map +1 -0
  268. package/dist/layout.cjs +1 -1
  269. package/dist/layout.js +6 -6
  270. package/dist/{layoutProps-Ck4VtGm9.cjs → layoutProps-B8y2XwHy.cjs} +1 -1
  271. package/dist/{layoutProps-Ck4VtGm9.cjs.map → layoutProps-B8y2XwHy.cjs.map} +1 -1
  272. package/dist/{layoutProps-Cl6d1KmH.js → layoutProps-CE5-ghKw.js} +1 -1
  273. package/dist/{layoutProps-Cl6d1KmH.js.map → layoutProps-CE5-ghKw.js.map} +1 -1
  274. package/dist/{licensing-f5KYVz7D.js → licensing-BKmoAdfr.js} +5 -4
  275. package/dist/licensing-BKmoAdfr.js.map +1 -0
  276. package/dist/licensing-DVgjkw-s.cjs +2 -0
  277. package/dist/licensing-DVgjkw-s.cjs.map +1 -0
  278. package/dist/media-fiasAbBv.js +485 -0
  279. package/dist/media-fiasAbBv.js.map +1 -0
  280. package/dist/media-tr1s386v.cjs +2 -0
  281. package/dist/media-tr1s386v.cjs.map +1 -0
  282. package/dist/media.cjs +1 -1
  283. package/dist/media.js +2 -2
  284. package/dist/overlays-Df-NpmkW.cjs +2 -0
  285. package/dist/overlays-Df-NpmkW.cjs.map +1 -0
  286. package/dist/overlays-W0WW3fn7.js +607 -0
  287. package/dist/overlays-W0WW3fn7.js.map +1 -0
  288. package/dist/overlays.cjs +1 -1
  289. package/dist/overlays.js +3 -3
  290. package/dist/primitives.cjs +1 -1
  291. package/dist/primitives.js +2 -2
  292. package/dist/radioGroupKeys-Bm-Qeh8G.js +28 -0
  293. package/dist/radioGroupKeys-Bm-Qeh8G.js.map +1 -0
  294. package/dist/radioGroupKeys-COL8uXbH.cjs +2 -0
  295. package/dist/radioGroupKeys-COL8uXbH.cjs.map +1 -0
  296. package/dist/{relativeTime-Cr-NVzij.js → relativeTime-BqCuaBqb.js} +1 -1
  297. package/dist/{relativeTime-Cr-NVzij.js.map → relativeTime-BqCuaBqb.js.map} +1 -1
  298. package/dist/{relativeTime-DgYBUaVm.cjs → relativeTime-DUbW4O44.cjs} +1 -1
  299. package/dist/{relativeTime-DgYBUaVm.cjs.map → relativeTime-DUbW4O44.cjs.map} +1 -1
  300. package/dist/scrollLock-C9P9o6wH.cjs +2 -0
  301. package/dist/scrollLock-C9P9o6wH.cjs.map +1 -0
  302. package/dist/scrollLock-D27VmgPV.js +14 -0
  303. package/dist/scrollLock-D27VmgPV.js.map +1 -0
  304. package/dist/style-runtime.cjs +1 -1
  305. package/dist/style-runtime.js +1 -1
  306. package/dist/styles.css +1 -1
  307. package/dist/theme/MThemeProvider.d.ts +18 -1
  308. package/dist/theme/index.d.ts +2 -2
  309. package/dist/{theme-DAOU1aPs.js → theme-B_juOenJ.js} +71 -61
  310. package/dist/theme-B_juOenJ.js.map +1 -0
  311. package/dist/theme-ByPZH0dh.cjs +2 -0
  312. package/dist/theme-ByPZH0dh.cjs.map +1 -0
  313. package/dist/theme.cjs +1 -1
  314. package/dist/theme.js +2 -2
  315. package/dist/{typography-C806GYT4.js → typography-DNcB8dOy.js} +3 -3
  316. package/dist/{typography-C806GYT4.js.map → typography-DNcB8dOy.js.map} +1 -1
  317. package/dist/{typography-4v01oNWx.cjs → typography-I7aeG8pH.cjs} +2 -2
  318. package/dist/{typography-4v01oNWx.cjs.map → typography-I7aeG8pH.cjs.map} +1 -1
  319. package/dist/typography.cjs +1 -1
  320. package/dist/typography.js +6 -6
  321. package/dist/useGhostText-CKsb8Ufa.js +240 -0
  322. package/dist/useGhostText-CKsb8Ufa.js.map +1 -0
  323. package/dist/useGhostText-DO-tfxS0.cjs +2 -0
  324. package/dist/useGhostText-DO-tfxS0.cjs.map +1 -0
  325. package/dist/useModalLayer-CpOPSDbf.js +128 -0
  326. package/dist/useModalLayer-CpOPSDbf.js.map +1 -0
  327. package/dist/useModalLayer-Cyt93Prs.cjs +2 -0
  328. package/dist/useModalLayer-Cyt93Prs.cjs.map +1 -0
  329. package/dist/utils/calendarDates.d.ts +5 -0
  330. package/dist/utils/radioGroupKeys.d.ts +9 -0
  331. package/dist/utils/useDateGridNav.d.ts +39 -0
  332. package/dist/utils/useGhostText.d.ts +2 -1
  333. package/dist/utils/useKeyboardNav.d.ts +51 -5
  334. package/dist/utils/useModalLayer.d.ts +4 -0
  335. package/dist/utils/useRovingToolbar.d.ts +26 -0
  336. package/dist/utils/validationMessages.d.ts +15 -0
  337. package/dist/utils.cjs +1 -1
  338. package/dist/utils.entry.d.ts +3 -1
  339. package/dist/utils.js +11 -11
  340. package/dist/validationMessages-BFimXxlT.js +23 -0
  341. package/dist/validationMessages-BFimXxlT.js.map +1 -0
  342. package/dist/validationMessages-iHu7apWr.cjs +2 -0
  343. package/dist/validationMessages-iHu7apWr.cjs.map +1 -0
  344. package/dist/validators-SZmLxnir.cjs +2 -0
  345. package/dist/validators-SZmLxnir.cjs.map +1 -0
  346. package/dist/{validators-DVYOtFnw.js → validators-ULebNme2.js} +107 -106
  347. package/dist/validators-ULebNme2.js.map +1 -0
  348. package/package.json +1 -1
  349. package/dist/MAvatar-DHNB3829.cjs +0 -2
  350. package/dist/MAvatar-DHNB3829.cjs.map +0 -1
  351. package/dist/MAvatar-GeRL-CNO.js +0 -63
  352. package/dist/MAvatar-GeRL-CNO.js.map +0 -1
  353. package/dist/MButton-CEwo8lUB.js +0 -115
  354. package/dist/MButton-CEwo8lUB.js.map +0 -1
  355. package/dist/MButton-CnAr77Za.cjs +0 -2
  356. package/dist/MButton-CnAr77Za.cjs.map +0 -1
  357. package/dist/MCard-BqSkGAgf.js.map +0 -1
  358. package/dist/MCard-P8OoswWM.cjs.map +0 -1
  359. package/dist/MCheckbox-BxFBADcE.js +0 -59
  360. package/dist/MCheckbox-BxFBADcE.js.map +0 -1
  361. package/dist/MCheckbox-DozwF2ai.cjs +0 -2
  362. package/dist/MCheckbox-DozwF2ai.cjs.map +0 -1
  363. package/dist/MConflictIllustration-2QL-BHYv.cjs +0 -2
  364. package/dist/MConflictIllustration-2QL-BHYv.cjs.map +0 -1
  365. package/dist/MConflictIllustration-znC7ijmP.js.map +0 -1
  366. package/dist/MDetailList-CThQvoyf.cjs +0 -2
  367. package/dist/MDetailList-CThQvoyf.cjs.map +0 -1
  368. package/dist/MDetailList-Cx9H81xT.js +0 -98
  369. package/dist/MDetailList-Cx9H81xT.js.map +0 -1
  370. package/dist/MDropdownMenu-DnKcCyW6.cjs +0 -2
  371. package/dist/MDropdownMenu-DnKcCyW6.cjs.map +0 -1
  372. package/dist/MDropdownMenu-DxbKN7Ui.js +0 -172
  373. package/dist/MDropdownMenu-DxbKN7Ui.js.map +0 -1
  374. package/dist/MGrid-BkRSGN2t.cjs +0 -2
  375. package/dist/MGrid-BkRSGN2t.cjs.map +0 -1
  376. package/dist/MGrid-CIz-2i6X.js +0 -265
  377. package/dist/MGrid-CIz-2i6X.js.map +0 -1
  378. package/dist/MHeading-AYQ8_GFP.cjs +0 -2
  379. package/dist/MHeading-AYQ8_GFP.cjs.map +0 -1
  380. package/dist/MHeading-DcGxUMwC.js +0 -21
  381. package/dist/MHeading-DcGxUMwC.js.map +0 -1
  382. package/dist/MI18nProvider-CqAwaswx.cjs +0 -2
  383. package/dist/MI18nProvider-CqAwaswx.cjs.map +0 -1
  384. package/dist/MI18nProvider-VH14CI8u.js +0 -72
  385. package/dist/MI18nProvider-VH14CI8u.js.map +0 -1
  386. package/dist/MInput-BYj2BdUe.cjs +0 -2
  387. package/dist/MInput-BYj2BdUe.cjs.map +0 -1
  388. package/dist/MInput-nodE-CZF.js +0 -188
  389. package/dist/MInput-nodE-CZF.js.map +0 -1
  390. package/dist/MInputCVC-9XWryaTz.cjs +0 -2
  391. package/dist/MInputCVC-9XWryaTz.cjs.map +0 -1
  392. package/dist/MInputCVC-CrDTaUXm.js +0 -321
  393. package/dist/MInputCVC-CrDTaUXm.js.map +0 -1
  394. package/dist/MInputSearch-BMgCHjFk.js +0 -43
  395. package/dist/MInputSearch-BMgCHjFk.js.map +0 -1
  396. package/dist/MInputSearch-BiVI1jNc.cjs +0 -2
  397. package/dist/MInputSearch-BiVI1jNc.cjs.map +0 -1
  398. package/dist/MLink-CAl6N6_z.js +0 -31
  399. package/dist/MLink-CAl6N6_z.js.map +0 -1
  400. package/dist/MLink-Dk_ReE6i.cjs +0 -2
  401. package/dist/MLink-Dk_ReE6i.cjs.map +0 -1
  402. package/dist/MLoader-CYp0OJU_.js +0 -41
  403. package/dist/MLoader-CYp0OJU_.js.map +0 -1
  404. package/dist/MLoader-DvmFle31.cjs +0 -2
  405. package/dist/MLoader-DvmFle31.cjs.map +0 -1
  406. package/dist/MPagination-E7IixIeo.js +0 -113
  407. package/dist/MPagination-E7IixIeo.js.map +0 -1
  408. package/dist/MPagination-reDU9xTW.cjs +0 -2
  409. package/dist/MPagination-reDU9xTW.cjs.map +0 -1
  410. package/dist/MPopover-8gYD3Ogq.js +0 -118
  411. package/dist/MPopover-8gYD3Ogq.js.map +0 -1
  412. package/dist/MPopover-B3npyAkL.cjs +0 -2
  413. package/dist/MPopover-B3npyAkL.cjs.map +0 -1
  414. package/dist/MPortal-Ba2Sxset.js +0 -10
  415. package/dist/MPortal-Ba2Sxset.js.map +0 -1
  416. package/dist/MPortal-CuBXhhl_.cjs +0 -2
  417. package/dist/MPortal-CuBXhhl_.cjs.map +0 -1
  418. package/dist/MSimpleGrid-BchGYPMi.cjs +0 -2
  419. package/dist/MSimpleGrid-BchGYPMi.cjs.map +0 -1
  420. package/dist/MSimpleGrid-Ui8cI0ho.js.map +0 -1
  421. package/dist/MSkeleton-DPa_G_2X.cjs +0 -2
  422. package/dist/MSkeleton-DPa_G_2X.cjs.map +0 -1
  423. package/dist/MSkeleton-Dhu-loDO.js.map +0 -1
  424. package/dist/MSlider-BRjhyBSc.js +0 -75
  425. package/dist/MSlider-BRjhyBSc.js.map +0 -1
  426. package/dist/MSlider-w5214a-W.cjs +0 -2
  427. package/dist/MSlider-w5214a-W.cjs.map +0 -1
  428. package/dist/MStack-Dt-rWvg3.js +0 -39
  429. package/dist/MStack-Dt-rWvg3.js.map +0 -1
  430. package/dist/MStack-nc6Y_9K3.cjs +0 -2
  431. package/dist/MStack-nc6Y_9K3.cjs.map +0 -1
  432. package/dist/MSubText-B0tXiuAp.js +0 -17
  433. package/dist/MSubText-B0tXiuAp.js.map +0 -1
  434. package/dist/MSubText-C6v6Exa2.cjs +0 -2
  435. package/dist/MSubText-C6v6Exa2.cjs.map +0 -1
  436. package/dist/MSurface-BjE-mL1L.cjs +0 -2
  437. package/dist/MSurface-BjE-mL1L.cjs.map +0 -1
  438. package/dist/MSurface-CpDJCdb5.js +0 -74
  439. package/dist/MSurface-CpDJCdb5.js.map +0 -1
  440. package/dist/MTag-BgOxiahL.cjs +0 -2
  441. package/dist/MTag-BgOxiahL.cjs.map +0 -1
  442. package/dist/MTag-cw3cIGHX.js +0 -41
  443. package/dist/MTag-cw3cIGHX.js.map +0 -1
  444. package/dist/MText-BDI4mdw8.cjs +0 -2
  445. package/dist/MText-BDI4mdw8.cjs.map +0 -1
  446. package/dist/MText-DhbAjtUE.js +0 -45
  447. package/dist/MText-DhbAjtUE.js.map +0 -1
  448. package/dist/MTooltip-BAgHlv5I.cjs +0 -2
  449. package/dist/MTooltip-BAgHlv5I.cjs.map +0 -1
  450. package/dist/MTooltip-CJxvlkOX.js +0 -92
  451. package/dist/MTooltip-CJxvlkOX.js.map +0 -1
  452. package/dist/MTreeView-DsBnYQMT.js +0 -315
  453. package/dist/MTreeView-DsBnYQMT.js.map +0 -1
  454. package/dist/MTreeView-LiJ5o-zy.cjs +0 -2
  455. package/dist/MTreeView-LiJ5o-zy.cjs.map +0 -1
  456. package/dist/calendar-Bq6NMNnS.js +0 -193
  457. package/dist/calendar-Bq6NMNnS.js.map +0 -1
  458. package/dist/calendar-C57BH8Nd.cjs +0 -2
  459. package/dist/calendar-C57BH8Nd.cjs.map +0 -1
  460. package/dist/calendarDates-M_Dawj0j.js.map +0 -1
  461. package/dist/calendarDates-qm047RW2.cjs +0 -2
  462. package/dist/calendarDates-qm047RW2.cjs.map +0 -1
  463. package/dist/cards-D4xJVd4q.js +0 -1227
  464. package/dist/cards-D4xJVd4q.js.map +0 -1
  465. package/dist/cards-Du6dbZSQ.cjs +0 -2
  466. package/dist/cards-Du6dbZSQ.cjs.map +0 -1
  467. package/dist/controls-BKoc_yel.js +0 -475
  468. package/dist/controls-BKoc_yel.js.map +0 -1
  469. package/dist/controls-Ck-PMt__.cjs +0 -2
  470. package/dist/controls-Ck-PMt__.cjs.map +0 -1
  471. package/dist/creditCards-D_HwRUBz.cjs +0 -2
  472. package/dist/creditCards-D_HwRUBz.cjs.map +0 -1
  473. package/dist/creditCards-D_iWmtG6.js.map +0 -1
  474. package/dist/data-CdQximqm.js +0 -689
  475. package/dist/data-CdQximqm.js.map +0 -1
  476. package/dist/data-PS4ygCyj.cjs +0 -2
  477. package/dist/data-PS4ygCyj.cjs.map +0 -1
  478. package/dist/dateUtils-CUY6CRCf.js.map +0 -1
  479. package/dist/dateUtils-Dq1vaA-D.cjs +0 -2
  480. package/dist/dateUtils-Dq1vaA-D.cjs.map +0 -1
  481. package/dist/display-YC1fVpXA.js +0 -782
  482. package/dist/display-YC1fVpXA.js.map +0 -1
  483. package/dist/display-slIo1bQI.cjs +0 -3
  484. package/dist/display-slIo1bQI.cjs.map +0 -1
  485. package/dist/dropdowns-DFbUoZ8Q.cjs +0 -2
  486. package/dist/dropdowns-DFbUoZ8Q.cjs.map +0 -1
  487. package/dist/dropdowns-nW3MY5XG.js +0 -1715
  488. package/dist/dropdowns-nW3MY5XG.js.map +0 -1
  489. package/dist/feedback-6MNb2Xyk.cjs +0 -2
  490. package/dist/feedback-6MNb2Xyk.cjs.map +0 -1
  491. package/dist/feedback-CPwJaQHY.js +0 -259
  492. package/dist/feedback-CPwJaQHY.js.map +0 -1
  493. package/dist/form-CMsZo6Dm.cjs +0 -2
  494. package/dist/form-CMsZo6Dm.cjs.map +0 -1
  495. package/dist/form-WU6DcQGD.js +0 -164
  496. package/dist/form-WU6DcQGD.js.map +0 -1
  497. package/dist/frameworkTexts-BSXUtXOp.cjs +0 -2
  498. package/dist/frameworkTexts-BSXUtXOp.cjs.map +0 -1
  499. package/dist/frameworkTexts-DP5RUl19.js +0 -131
  500. package/dist/frameworkTexts-DP5RUl19.js.map +0 -1
  501. package/dist/icons-CBMl-kOM.js.map +0 -1
  502. package/dist/icons-D3n9-919.cjs +0 -2
  503. package/dist/icons-D3n9-919.cjs.map +0 -1
  504. package/dist/inputs-B7rGMLMr.js +0 -1753
  505. package/dist/inputs-B7rGMLMr.js.map +0 -1
  506. package/dist/inputs-BiN62hgH.cjs +0 -2
  507. package/dist/inputs-BiN62hgH.cjs.map +0 -1
  508. package/dist/layout-BMggJ_qO.cjs +0 -2
  509. package/dist/layout-BMggJ_qO.cjs.map +0 -1
  510. package/dist/layout-DBYHyCTr.js +0 -883
  511. package/dist/layout-DBYHyCTr.js.map +0 -1
  512. package/dist/licensing-Be3g-PJt.cjs +0 -2
  513. package/dist/licensing-Be3g-PJt.cjs.map +0 -1
  514. package/dist/licensing-f5KYVz7D.js.map +0 -1
  515. package/dist/media-BPzMgzqE.js +0 -405
  516. package/dist/media-BPzMgzqE.js.map +0 -1
  517. package/dist/media-D63hxCAJ.cjs +0 -2
  518. package/dist/media-D63hxCAJ.cjs.map +0 -1
  519. package/dist/overlays-CCeYD6hT.js +0 -555
  520. package/dist/overlays-CCeYD6hT.js.map +0 -1
  521. package/dist/overlays-CsRN5OG8.cjs +0 -2
  522. package/dist/overlays-CsRN5OG8.cjs.map +0 -1
  523. package/dist/popoverStack--0r2oJCD.js +0 -44
  524. package/dist/popoverStack--0r2oJCD.js.map +0 -1
  525. package/dist/popoverStack-BmMk-VZJ.cjs +0 -2
  526. package/dist/popoverStack-BmMk-VZJ.cjs.map +0 -1
  527. package/dist/theme-CJuqObWL.cjs +0 -2
  528. package/dist/theme-CJuqObWL.cjs.map +0 -1
  529. package/dist/theme-DAOU1aPs.js.map +0 -1
  530. package/dist/useGhostText-DG0bzcao.js +0 -68
  531. package/dist/useGhostText-DG0bzcao.js.map +0 -1
  532. package/dist/useGhostText-mibV4s1-.cjs +0 -2
  533. package/dist/useGhostText-mibV4s1-.cjs.map +0 -1
  534. package/dist/useKeyboardNav-CCUoRMgm.cjs +0 -2
  535. package/dist/useKeyboardNav-CCUoRMgm.cjs.map +0 -1
  536. package/dist/useKeyboardNav-iEXOdEMB.js +0 -43
  537. package/dist/useKeyboardNav-iEXOdEMB.js.map +0 -1
  538. package/dist/useModalLayer-Bf4TcEz-.js +0 -58
  539. package/dist/useModalLayer-Bf4TcEz-.js.map +0 -1
  540. package/dist/useModalLayer-DxYhhgRO.cjs +0 -2
  541. package/dist/useModalLayer-DxYhhgRO.cjs.map +0 -1
  542. package/dist/validators-B6yWdsu2.cjs +0 -2
  543. package/dist/validators-B6yWdsu2.cjs.map +0 -1
  544. package/dist/validators-DVYOtFnw.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controls-CyXEIOXD.cjs","names":[],"sources":["../src/components/controls/MRadio/RadioContext.ts","../src/components/controls/MRadio/MRadio.tsx","../src/components/controls/MRadio/MRadioGroup.tsx","../src/components/controls/MToggle/MToggle.tsx","../src/components/controls/MLoadMore/MLoadMore.tsx","../src/components/controls/MScrollTop/MScrollTop.tsx","../src/components/controls/MQuickActions/MQuickActions.tsx","../src/components/controls/MSocialButton/MSocialButton.icons.tsx","../src/components/controls/MSocialButton/MSocialButton.tsx"],"sourcesContent":["import {createContext, useContext} from 'react'\nimport type {MRadioGroupContextValue} from './MRadio.types'\n\nexport const RadioContext = createContext<MRadioGroupContextValue | null>(null)\n\n// Read the nearest radio-group context when a radio participates in grouped state.\nexport function useRadioGroup(): MRadioGroupContextValue | null {\n return useContext(RadioContext)\n}\n","import {forwardRef, useCallback} from 'react'\nimport type * as React from 'react'\nimport type {MRadioProps} from './MRadio.types'\nimport {useRadioGroup} from './RadioContext'\nimport {cn} from '../../../utils/cn'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport './MRadio.css'\n\n// Render a single radio that can work standalone or inside MRadioGroup.\nexport const MRadio = forwardRef<HTMLInputElement, MRadioProps>(function MRadio(\n {\n checked,\n defaultChecked,\n name,\n id,\n value,\n disabled = false,\n size,\n color,\n label,\n labelPosition = 'right',\n onChange,\n clickEffect = 'ripple',\n rippleColor,\n className,\n style,\n },\n ref\n) {\n const group = useRadioGroup()\n\n const resolvedName = group?.name ?? name\n // The radio's own props win over the group; the group only fills in what the radio leaves out.\n const resolvedDisabled = disabled || Boolean(group?.disabled)\n const resolvedSize = size ?? group?.size ?? 'md'\n const resolvedColor = color ?? group?.color ?? 'primary'\n const resolvedChecked = group ? group.value === value : checked\n const {effectClassName, effectLayer, handlePointerDown, triggerEffect} = useInteractionEffect<HTMLSpanElement>({\n effect: clickEffect,\n disabled: resolvedDisabled,\n centered: true,\n color: rippleColor,\n })\n\n // Delegate selection back to the group when one is present.\n const handleChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(event)\n if (group?.onChange && value) {\n group.onChange(value)\n }\n },\n [onChange, group, value]\n )\n\n return (\n <label\n className={cn(\n 'radio',\n resolvedSize,\n labelPosition === 'left' && 'label-left',\n resolvedDisabled && 'disabled',\n className\n )}\n style={style}\n >\n <span className={cn('circle', `color-${resolvedColor}`, effectClassName)} onPointerDown={handlePointerDown}>\n {effectLayer}\n <input\n ref={ref}\n type=\"radio\"\n name={resolvedName}\n id={id}\n value={value}\n checked={resolvedChecked}\n defaultChecked={!group ? defaultChecked : undefined}\n disabled={resolvedDisabled}\n onChange={handleChange}\n onKeyDown={(event) => {\n if (event.key === ' ' || event.key === 'Enter') {\n triggerEffect(event.currentTarget.parentElement as HTMLSpanElement | null)\n }\n }}\n className=\"input\"\n />\n </span>\n {label && <span className=\"label-text\">{label}</span>}\n </label>\n )\n})\n","import {useState, useCallback, useId, useMemo} from 'react'\nimport type {MRadioGroupProps} from './MRadio.types'\nimport {RadioContext} from './RadioContext'\nimport {cn} from '../../../utils/cn'\nimport './MRadio.css'\n\n// Coordinate multiple radio items through shared context and optional controlled state.\nexport function MRadioGroup({\n name,\n value,\n defaultValue,\n onChange,\n direction = 'vertical',\n children,\n disabled = false,\n size = 'md',\n color = 'primary',\n error = false,\n errorText,\n label,\n className,\n style,\n}: MRadioGroupProps) {\n const [internalValue, setInternalValue] = useState(defaultValue)\n const errorId = useId()\n const hasError = error || Boolean(errorText)\n const currentValue = value !== undefined ? value : internalValue\n\n // Mirror controlled and uncontrolled usage with the same group API.\n const handleChange = useCallback(\n (val: string) => {\n if (value === undefined) {\n setInternalValue(val)\n }\n onChange?.(val)\n },\n [onChange, value]\n )\n\n // Memoize context so nested radios only update when relevant inputs change.\n const ctx = useMemo(\n () => ({name, value: currentValue, disabled, size, color, onChange: handleChange}),\n [name, currentValue, disabled, size, color, handleChange]\n )\n\n return (\n <RadioContext.Provider value={ctx}>\n <fieldset\n className={cn('radio-group', direction, className)}\n style={style}\n role=\"radiogroup\"\n aria-invalid={hasError || undefined}\n aria-describedby={errorText ? errorId : undefined}\n >\n {label && <legend className={cn('label', error && 'error')}>{label}</legend>}\n {children}\n {errorText && (\n <span id={errorId} className=\"field-error\" role=\"alert\">\n {errorText}\n </span>\n )}\n </fieldset>\n </RadioContext.Provider>\n )\n}\n","import {forwardRef} from 'react'\nimport type {MToggleProps} from './MToggle.types'\nimport {cn} from '../../../utils/cn'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport './MToggle.css'\n\n// Render a switch-style boolean control with the same API shape as MCheckbox.\nexport const MToggle = forwardRef<HTMLInputElement, MToggleProps>(function MToggle(\n {\n checked,\n defaultChecked,\n name,\n id,\n disabled = false,\n size = 'md',\n color = 'primary',\n label,\n labelPosition = 'right',\n onChange,\n clickEffect = 'ripple',\n rippleColor,\n className,\n style,\n },\n ref\n) {\n const {effectClassName, effectLayer, handlePointerDown, triggerEffect} = useInteractionEffect<HTMLSpanElement>({\n effect: clickEffect,\n disabled,\n centered: true,\n color: rippleColor,\n })\n\n return (\n <label\n className={cn('toggle', size, labelPosition === 'left' && 'label-left', disabled && 'disabled', className)}\n style={style}\n >\n <span className={cn('track', `color-${color}`, effectClassName)} onPointerDown={handlePointerDown}>\n {effectLayer}\n <input\n ref={ref}\n type=\"checkbox\"\n checked={checked}\n defaultChecked={defaultChecked}\n name={name}\n id={id}\n disabled={disabled}\n onChange={onChange}\n onKeyDown={(event) => {\n if (event.key === ' ' || event.key === 'Enter') {\n triggerEffect(event.currentTarget.parentElement as HTMLSpanElement | null)\n }\n }}\n className=\"input\"\n // The native checked state is exposed as the switch state; aria-checked on a\n // checkbox input is not allowed and was undefined when uncontrolled.\n role=\"switch\"\n />\n <span className=\"knob\" />\n </span>\n {label && <span className=\"label-text\">{label}</span>}\n </label>\n )\n})\n","import {useEffect, useRef, useCallback} from 'react'\nimport type {MLoadMoreProps} from './MLoadMore.types'\nimport {MButton} from '../MButton'\nimport {cn} from '../../../utils/cn'\nimport './MLoadMore.css'\nimport {useMLoadMoreTexts} from '../../../i18n/frameworkTexts'\n\nexport function MLoadMore({\n onLoadMore,\n loading = false,\n hasMore = true,\n loaded,\n total,\n auto = false,\n autoThreshold = 100,\n variant = 'outlined',\n color = 'primary',\n label: labelProp,\n loadingLabel: loadingLabelProp,\n doneLabel: doneLabelProp,\n className,\n ...rest\n}: MLoadMoreProps) {\n const texts = useMLoadMoreTexts()\n const label = labelProp ?? texts.label\n const loadingLabel = loadingLabelProp ?? texts.loading\n const doneLabel = doneLabelProp ?? texts.done\n const sentinelRef = useRef<HTMLDivElement>(null)\n const loadMoreRef = useRef(onLoadMore)\n loadMoreRef.current = onLoadMore\n\n useEffect(() => {\n if (!auto || !hasMore || loading) return\n\n const sentinel = sentinelRef.current\n if (!sentinel) return\n\n const observer = new IntersectionObserver(\n (entries) => {\n if (entries[0].isIntersecting) {\n loadMoreRef.current()\n }\n },\n {rootMargin: `${autoThreshold}px`}\n )\n\n observer.observe(sentinel)\n return () => observer.disconnect()\n }, [auto, hasMore, loading, autoThreshold])\n\n const handleClick = useCallback(() => {\n if (!loading && hasMore) onLoadMore()\n }, [onLoadMore, loading, hasMore])\n\n const showCount = loaded !== undefined && total !== undefined\n // An empty list (total 0) is complete, not NaN%.\n const barPercent = showCount ? (total > 0 ? Math.min(Math.max((loaded / total) * 100, 0), 100) : 100) : 0\n\n return (\n <div className={cn('load-more', className)} {...rest}>\n {showCount && (\n <span className=\"load-more-count\" aria-live=\"polite\" aria-atomic=\"true\">\n {loaded} / {total}\n </span>\n )}\n\n {hasMore ? (\n <MButton\n variant={variant}\n color={color}\n loading={loading}\n onClick={handleClick}\n className=\"load-more-btn\"\n >\n {loading ? loadingLabel : label}\n </MButton>\n ) : (\n <span className=\"load-more-done\" role=\"status\">\n {doneLabel}\n </span>\n )}\n\n {auto && hasMore && <div ref={sentinelRef} className=\"load-more-sentinel\" />}\n\n {showCount && (\n <div className=\"load-more-bar\">\n <div className=\"load-more-bar-fill\" style={{width: `${barPercent}%`}} />\n </div>\n )}\n </div>\n )\n}\n","import {useState, useEffect, useCallback} from 'react'\nimport type {MScrollTopProps} from './MScrollTop.types'\nimport {MButton} from '../MButton'\nimport {MArrowUpIcon} from '../../../icons'\nimport {cn} from '../../../utils/cn'\nimport './MScrollTop.css'\nimport {useMCommonTexts} from '../../../i18n/frameworkTexts'\n\nexport function MScrollTop({\n threshold = 300,\n variant = 'filled',\n color = 'primary',\n smooth = true,\n className,\n}: MScrollTopProps) {\n const texts = useMCommonTexts()\n const [visible, setVisible] = useState(false)\n\n useEffect(() => {\n function onScroll() {\n setVisible(window.scrollY > threshold)\n }\n onScroll()\n window.addEventListener('scroll', onScroll, {passive: true})\n return () => window.removeEventListener('scroll', onScroll)\n }, [threshold])\n\n const scrollToTop = useCallback(() => {\n // Smooth scrolling is skipped for users who asked the OS to reduce motion.\n const reduceMotion =\n typeof window.matchMedia === 'function' && window.matchMedia('(prefers-reduced-motion: reduce)').matches\n window.scrollTo({top: 0, behavior: smooth && !reduceMotion ? 'smooth' : 'instant'})\n }, [smooth])\n\n return (\n <MButton\n variant={variant}\n color={color}\n shape=\"circle\"\n size=\"lg\"\n iconOnly\n onClick={scrollToTop}\n aria-label={texts.scrollToTop}\n className={cn('scroll-top', visible && 'visible', className)}\n // While hidden (opacity 0) the button must leave the Tab order and the accessibility tree.\n inert={!visible}\n >\n <MArrowUpIcon />\n </MButton>\n )\n}\n","import type {MQuickActionsProps} from './MQuickActions.types'\nimport {MButton} from '../MButton'\nimport {MButtonGroup} from '../MButtonGroup'\nimport {MSimpleGrid} from '../../layout'\nimport {cn} from '../../../utils/cn'\nimport './MQuickActions.css'\n\nexport function MQuickActions({\n items,\n layout = 'group',\n orientation = 'horizontal',\n columns = 4,\n size = 'sm',\n color,\n variant = 'ghost',\n fullWidth = true,\n className,\n ...rest\n}: MQuickActionsProps) {\n const buttons = items.map((item) => (\n <MButton\n key={item.key ?? item.to ?? item.href ?? item.label?.toString()}\n component={item.component}\n to={item.to}\n href={item.href}\n target={item.target}\n rel={item.rel}\n onClick={item.onClick}\n color={item.color ?? color}\n variant={item.variant ?? variant}\n size={size}\n startIcon={item.icon}\n badge={item.badge}\n badgeColor={item.badgeColor}\n badgePulsing={item.badgePulsing}\n pulsing={item.pulsing}\n disabled={item.disabled}\n fullWidth={layout === 'grid' ? true : fullWidth}\n >\n {item.description ? (\n <span className=\"quick-actions-text\">\n <span className=\"quick-actions-label\">{item.label}</span>\n <span className=\"quick-actions-description\">{item.description}</span>\n </span>\n ) : (\n item.label\n )}\n </MButton>\n ))\n\n if (layout === 'grid') {\n return (\n <MSimpleGrid\n columns={columns}\n className={cn('quick-actions', fullWidth && 'full-width', className)}\n {...rest}\n >\n {buttons}\n </MSimpleGrid>\n )\n }\n\n return (\n <div className={cn('quick-actions', fullWidth && 'full-width', className)} {...rest}>\n <MButtonGroup orientation={orientation} size={size} variant={variant} color={color} attached={false}>\n {buttons}\n </MButtonGroup>\n </div>\n )\n}\n","import type {ReactNode, SVGProps} from 'react'\n\ntype SocialMarkProps = SVGProps<SVGSVGElement>\n\nfunction createMark(children: ReactNode, props: SocialMarkProps) {\n return (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" {...props}>\n {children}\n </svg>\n )\n}\n\nexport function SocialGoogleMark(props: SocialMarkProps) {\n return createMark(\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10.2\" fill=\"#fff\" stroke=\"#dadce0\" strokeWidth=\"1.2\" />\n <path\n d=\"M17.95 12.25c0-.48-.04-.83-.13-1.2H12v2.26h3.42c-.07.56-.48 1.4-1.4 1.97l-.01.08 2 1.52.14.02c1.28-1.15 1.8-2.84 1.8-4.65z\"\n fill=\"#4285F4\"\n />\n <path\n d=\"M12 18.2c1.67 0 3.07-.54 4.1-1.48l-2.13-1.62c-.57.39-1.34.67-1.97.67-1.64 0-3.03-1.06-3.53-2.53l-.08.01-2.08 1.58-.03.08c1.02 1.97 3.09 3.29 5.72 3.29z\"\n fill=\"#34A853\"\n />\n <path\n d=\"M8.47 13.24a3.72 3.72 0 0 1-.2-1.24c0-.43.08-.84.19-1.24l-.01-.08-2.1-1.6-.07.03a6.02 6.02 0 0 0 0 5.78l2.19-1.65z\"\n fill=\"#FBBC05\"\n />\n <path\n d=\"M12 8.22c.8 0 1.53.27 2.1.8l1.54-1.48C14.99 6.96 13.67 6.5 12 6.5c-2.63 0-4.7 1.32-5.72 3.29l2.18 1.66c.5-1.47 1.9-2.53 3.54-2.53z\"\n fill=\"#EA4335\"\n />\n </>,\n props\n )\n}\n\nexport function SocialFacebookMark(props: SocialMarkProps) {\n return createMark(\n <>\n <rect x=\"2.2\" y=\"2.2\" width=\"19.6\" height=\"19.6\" rx=\"6.2\" fill=\"#1877F2\" />\n <path\n d=\"M13.28 20v-6.02h2.02l.31-2.43h-2.33V10c0-.78.27-1.37 1.35-1.37h1.11V6.4c-.4-.06-1.09-.11-2.03-.11-2.3 0-3.64 1.22-3.64 3.76v1.49h-1.9v2.44h1.9V20z\"\n fill=\"#fff\"\n />\n </>,\n props\n )\n}\n\nexport function SocialAppleMark(props: SocialMarkProps) {\n return createMark(\n <>\n <path\n d=\"M15.38 11.84c.02 2.33 2.04 3.1 2.07 3.12-.03.07-.33 1.09-1.06 2.16-.63.91-1.3 1.84-2.34 1.86-1.03.02-1.37-.61-2.57-.61-1.2 0-1.57.59-2.53.63-1.02.04-1.79-1.01-2.43-1.92-1.3-1.89-2.3-5.33-.97-7.64.67-1.15 1.86-1.88 3.14-1.9.98-.02 1.89.65 2.57.65.67 0 1.92-.81 3.24-.69.55.02 2.1.22 3.09 1.67-.08.05-1.84 1.07-1.81 2.67z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M13.59 4.67c.53-.64.9-1.52.8-2.42-.77.04-1.69.52-2.24 1.15-.5.58-.93 1.49-.82 2.35.86.07 1.72-.44 2.26-1.08z\"\n fill=\"currentColor\"\n />\n </>,\n props\n )\n}\n\nexport function SocialMicrosoftMark(props: SocialMarkProps) {\n return createMark(\n <>\n <rect x=\"3.5\" y=\"3.5\" width=\"7.8\" height=\"7.8\" rx=\"1.3\" fill=\"#F25022\" />\n <rect x=\"12.7\" y=\"3.5\" width=\"7.8\" height=\"7.8\" rx=\"1.3\" fill=\"#7FBA00\" />\n <rect x=\"3.5\" y=\"12.7\" width=\"7.8\" height=\"7.8\" rx=\"1.3\" fill=\"#00A4EF\" />\n <rect x=\"12.7\" y=\"12.7\" width=\"7.8\" height=\"7.8\" rx=\"1.3\" fill=\"#FFB900\" />\n </>,\n props\n )\n}\n\nexport function SocialPinterestMark(props: SocialMarkProps) {\n return createMark(\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10.1\" fill=\"#fff\" />\n <path\n d=\"M12.87 6.76c-2.95 0-4.74 2.03-4.74 4.34 0 1.65.92 3.07 2.38 3.62.1.03.14.01.17-.06l.32-1.23c.05-.14.02-.19-.09-.33-.26-.33-.47-.96-.47-1.57 0-1.52 1.14-2.97 3.08-2.97 1.68 0 2.86 1.14 2.86 2.78 0 1.86-.93 3.13-2.14 3.13-.67 0-1.17-.56-1-1.23.18-.8.55-1.64.55-2.2 0-.51-.28-.93-.84-.93-.67 0-1.2.69-1.2 1.62 0 .59.2.99.2.99l-.78 3.28c-.14.58-.03 1.55.01 1.68.02.08.1.1.15.03.09-.11 1.07-1.49 1.24-2.18l.27-1.06c.25.48.99.89 1.77.89 2.34 0 4.04-2.15 4.04-4.79 0-2.54-2.08-4.44-4.78-4.44z\"\n fill=\"#E60023\"\n />\n </>,\n props\n )\n}\n\nexport function SocialLinkedInMark(props: SocialMarkProps) {\n return createMark(\n <>\n <rect x=\"2.4\" y=\"2.4\" width=\"19.2\" height=\"19.2\" rx=\"4.8\" fill=\"#fff\" />\n <path\n d=\"M8.1 10.02h2.04v7.24H8.1zm1.03-3.22a1.17 1.17 0 1 1 0 2.35 1.17 1.17 0 0 1 0-2.35zm2.68 3.22h1.95v.99c.34-.61 1.08-1.15 2.13-1.15 2.15 0 2.82 1.42 2.82 3.78v3.62h-2.04v-3.26c0-.98-.35-1.67-1.23-1.67-.66 0-1.05.45-1.23.88-.08.16-.08.38-.08.59v3.46h-2.32z\"\n fill=\"#0A66C2\"\n />\n </>,\n props\n )\n}\n","import {forwardRef} from 'react'\nimport type {MSocialButtonProps} from './MSocialButton.types'\nimport {getHiddenProps} from '../../../theme'\nimport {\n SocialAppleMark,\n SocialFacebookMark,\n SocialGoogleMark,\n SocialLinkedInMark,\n SocialMicrosoftMark,\n SocialPinterestMark,\n} from './MSocialButton.icons'\nimport {MSpinner} from '../../feedback'\nimport {cn} from '../../../utils/cn'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport './MSocialButton.css'\nimport {formatMText, useMSocialButtonTexts} from '../../../i18n/frameworkTexts'\n\nconst socialButtonConfig = {\n google: {\n label: 'Sign in with Google',\n iconLabel: 'Google',\n mode: 'google',\n Icon: SocialGoogleMark,\n },\n facebook: {\n label: 'Sign in with Facebook',\n iconLabel: 'Facebook',\n mode: 'outline',\n Icon: SocialFacebookMark,\n },\n apple: {\n label: 'Sign in with Apple',\n iconLabel: 'Apple',\n mode: 'brand',\n Icon: SocialAppleMark,\n },\n microsoft: {\n label: 'Sign in with Microsoft',\n iconLabel: 'Microsoft',\n mode: 'brand',\n Icon: SocialMicrosoftMark,\n },\n pinterest: {\n label: 'Sign in with Pinterest',\n iconLabel: 'Pinterest',\n mode: 'brand',\n Icon: SocialPinterestMark,\n },\n linkedin: {\n label: 'Sign in with LinkedIn',\n iconLabel: 'LinkedIn',\n mode: 'brand',\n Icon: SocialLinkedInMark,\n },\n} as const\n\nexport const MSocialButton = forwardRef<HTMLButtonElement, MSocialButtonProps>(function MSocialButton(\n {\n platform = 'google',\n variant = 'outline',\n size = 'md',\n iconOnly = false,\n iconShape = 'circle',\n hidden,\n hiddenAbove,\n fullWidth = false,\n loading = false,\n active = false,\n pulsing = false,\n clickEffect = 'ripple',\n rippleColor,\n className,\n style,\n children,\n disabled = false,\n type = 'button',\n onPointerDown,\n onKeyDown,\n 'aria-label': ariaLabel,\n ...rest\n },\n ref\n) {\n const texts = useMSocialButtonTexts()\n const config = socialButtonConfig[platform]\n const Icon = config.Icon\n const signInLabel = formatMText(texts.signIn, {platform: config.iconLabel})\n const label = children ?? signInLabel\n // An icon-only button names the action (\"Sign in with Google\"), not just the brand (WCAG 2.4.6).\n const resolvedAriaLabel =\n ariaLabel ??\n (iconOnly ? (typeof children === 'string' && children.trim() !== '' ? children : signInLabel) : undefined)\n const resolvedVariant = config.mode === 'google' ? variant : config.mode\n const isDisabled = disabled || loading\n const {effectClassName, effectLayer, handlePointerDown, triggerEffect} = useInteractionEffect<HTMLButtonElement>({\n effect: clickEffect,\n disabled: isDisabled,\n centered: iconOnly,\n color: rippleColor,\n })\n\n return (\n <button\n ref={ref}\n type={type}\n className={cn(\n 'social-button-root',\n platform,\n resolvedVariant,\n size,\n fullWidth && 'full-width',\n iconOnly && 'icon-only',\n iconOnly && `icon-shape-${iconShape}`,\n loading && 'loading',\n active && 'active',\n pulsing && 'pulsing',\n isDisabled && 'disabled',\n effectClassName,\n className\n )}\n style={style}\n disabled={isDisabled}\n aria-busy={loading || undefined}\n aria-label={resolvedAriaLabel}\n onPointerDown={(event) => {\n handlePointerDown(event)\n onPointerDown?.(event)\n }}\n onKeyDown={(event) => {\n if (event.key === ' ' || event.key === 'Enter') {\n triggerEffect(event.currentTarget)\n }\n\n onKeyDown?.(event)\n }}\n {...getHiddenProps(hidden, hiddenAbove)}\n {...rest}\n >\n {effectLayer}\n {loading && <MSpinner size=\"sm\" color=\"inherit\" className=\"social-button-spinner\" aria-hidden=\"true\" />}\n <span className=\"social-button-brand\" aria-hidden=\"true\">\n <Icon className=\"social-button-mark\" />\n </span>\n {!iconOnly && <span className=\"social-button-label\">{label}</span>}\n </button>\n )\n})\n"],"mappings":"+YAGA,IAAa,GAAA,EAAA,EAAA,eAA6D,KAAK,CAG/E,SAAgB,GAAgD,CAC5D,OAAA,EAAA,EAAA,YAAkB,EAAa,CCEnC,IAAa,GAAA,EAAA,EAAA,YAAmD,SAC5D,CACI,UACA,iBACA,OACA,KACA,QACA,WAAW,GACX,OACA,QACA,QACA,gBAAgB,QAChB,WACA,cAAc,SACd,cACA,YACA,SAEJ,EACF,CACE,IAAM,EAAQ,GAAe,CAEvB,EAAe,GAAO,MAAQ,EAE9B,EAAmB,GAAY,EAAQ,GAAO,SAC9C,EAAe,GAAQ,GAAO,MAAQ,KACtC,EAAgB,GAAS,GAAO,OAAS,UACzC,EAAkB,EAAQ,EAAM,QAAU,EAAQ,EAClD,CAAC,kBAAiB,cAAa,oBAAmB,iBAAiB,EAAA,EAAsC,CAC3G,OAAQ,EACR,SAAU,EACV,SAAU,GACV,MAAO,EACV,CAAC,CAGI,GAAA,EAAA,EAAA,aACD,GAA+C,CAC5C,IAAW,EAAM,CACb,GAAO,UAAY,GACnB,EAAM,SAAS,EAAM,EAG7B,CAAC,EAAU,EAAO,EAAM,CAC3B,CAED,OACI,EAAA,EAAA,MAAC,QAAD,CACI,UAAW,EAAA,EACP,QACA,EACA,IAAkB,QAAU,aAC5B,GAAoB,WACpB,EACH,CACM,iBARX,EAUI,EAAA,EAAA,MAAC,OAAD,CAAM,UAAW,EAAA,EAAG,SAAU,SAAS,IAAiB,EAAgB,CAAE,cAAe,WAAzF,CACK,GACD,EAAA,EAAA,KAAC,QAAD,CACS,MACL,KAAK,QACL,KAAM,EACF,KACG,QACP,QAAS,EACT,eAAiB,EAAyB,IAAA,GAAjB,EACzB,SAAU,EACV,SAAU,EACV,UAAY,GAAU,EACd,EAAM,MAAQ,KAAO,EAAM,MAAQ,UACnC,EAAc,EAAM,cAAc,cAAwC,EAGlF,UAAU,QACZ,CAAA,CACC,GACN,IAAS,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,sBAAc,EAAa,CAAA,CACjD,IAEd,CClFF,SAAgB,EAAY,CACxB,OACA,QACA,eACA,WACA,YAAY,WACZ,WACA,WAAW,GACX,OAAO,KACP,QAAQ,UACR,QAAQ,GACR,YACA,QACA,YACA,SACiB,CACjB,GAAM,CAAC,EAAe,IAAA,EAAA,EAAA,UAA6B,EAAa,CAC1D,GAAA,EAAA,EAAA,QAAiB,CACjB,EAAW,GAAS,EAAQ,EAC5B,EAAe,IAAU,IAAA,GAAoB,EAAR,EAGrC,GAAA,EAAA,EAAA,aACD,GAAgB,CACT,IAAU,IAAA,IACV,EAAiB,EAAI,CAEzB,IAAW,EAAI,EAEnB,CAAC,EAAU,EAAM,CACpB,CAGK,GAAA,EAAA,EAAA,cACK,CAAC,OAAM,MAAO,EAAc,WAAU,OAAM,QAAO,SAAU,EAAa,EACjF,CAAC,EAAM,EAAc,EAAU,EAAM,EAAO,EAAa,CAC5D,CAED,OACI,EAAA,EAAA,KAAC,EAAa,SAAd,CAAuB,MAAO,YAC1B,EAAA,EAAA,MAAC,WAAD,CACI,UAAW,EAAA,EAAG,cAAe,EAAW,EAAU,CAC3C,QACP,KAAK,aACL,eAAc,GAAY,IAAA,GAC1B,mBAAkB,EAAY,EAAU,IAAA,YAL5C,CAOK,IAAS,EAAA,EAAA,KAAC,SAAD,CAAQ,UAAW,EAAA,EAAG,QAAS,GAAS,QAAQ,UAAG,EAAe,CAAA,CAC3E,EACA,IACG,EAAA,EAAA,KAAC,OAAD,CAAM,GAAI,EAAS,UAAU,cAAc,KAAK,iBAC3C,EACE,CAAA,CAEJ,GACS,CAAA,CCvDhC,IAAa,GAAA,EAAA,EAAA,YAAqD,SAC9D,CACI,UACA,iBACA,OACA,KACA,WAAW,GACX,OAAO,KACP,QAAQ,UACR,QACA,gBAAgB,QAChB,WACA,cAAc,SACd,cACA,YACA,SAEJ,EACF,CACE,GAAM,CAAC,kBAAiB,cAAa,oBAAmB,iBAAiB,EAAA,EAAsC,CAC3G,OAAQ,EACR,WACA,SAAU,GACV,MAAO,EACV,CAAC,CAEF,OACI,EAAA,EAAA,MAAC,QAAD,CACI,UAAW,EAAA,EAAG,SAAU,EAAM,IAAkB,QAAU,aAAc,GAAY,WAAY,EAAU,CACnG,iBAFX,EAII,EAAA,EAAA,MAAC,OAAD,CAAM,UAAW,EAAA,EAAG,QAAS,SAAS,IAAS,EAAgB,CAAE,cAAe,WAAhF,CACK,GACD,EAAA,EAAA,KAAC,QAAD,CACS,MACL,KAAK,WACI,UACO,iBACV,OACF,KACM,WACA,WACV,UAAY,GAAU,EACd,EAAM,MAAQ,KAAO,EAAM,MAAQ,UACnC,EAAc,EAAM,cAAc,cAAwC,EAGlF,UAAU,QAGV,KAAK,SACP,CAAA,EACF,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,OAAS,CAAA,CACtB,GACN,IAAS,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,sBAAc,EAAa,CAAA,CACjD,IAEd,CCzDF,SAAgB,EAAU,CACtB,aACA,UAAU,GACV,UAAU,GACV,SACA,QACA,OAAO,GACP,gBAAgB,IAChB,UAAU,WACV,QAAQ,UACR,MAAO,EACP,aAAc,EACd,UAAW,EACX,YACA,GAAG,GACY,CACf,IAAM,EAAQ,EAAA,GAAmB,CAC3B,EAAQ,GAAa,EAAM,MAC3B,EAAe,GAAoB,EAAM,QACzC,EAAY,GAAiB,EAAM,KACnC,GAAA,EAAA,EAAA,QAAqC,KAAK,CAC1C,GAAA,EAAA,EAAA,QAAqB,EAAW,CACtC,EAAY,QAAU,GAEtB,EAAA,EAAA,eAAgB,CACZ,GAAI,CAAC,GAAQ,CAAC,GAAW,EAAS,OAElC,IAAM,EAAW,EAAY,QAC7B,GAAI,CAAC,EAAU,OAEf,IAAM,EAAW,IAAI,qBAChB,GAAY,CACL,EAAQ,GAAG,gBACX,EAAY,SAAS,EAG7B,CAAC,WAAY,GAAG,EAAc,IAAI,CACrC,CAGD,OADA,EAAS,QAAQ,EAAS,KACb,EAAS,YAAY,EACnC,CAAC,EAAM,EAAS,EAAS,EAAc,CAAC,CAE3C,IAAM,GAAA,EAAA,EAAA,iBAAgC,CAC9B,CAAC,GAAW,GAAS,GAAY,EACtC,CAAC,EAAY,EAAS,EAAQ,CAAC,CAE5B,EAAY,IAAW,IAAA,IAAa,IAAU,IAAA,GAE9C,EAAa,EAAa,EAAQ,EAAI,KAAK,IAAI,KAAK,IAAK,EAAS,EAAS,IAAK,EAAE,CAAE,IAAI,CAAG,IAAO,EAExG,OACI,EAAA,EAAA,MAAC,MAAD,CAAK,UAAW,EAAA,EAAG,YAAa,EAAU,CAAE,GAAI,WAAhD,CACK,IACG,EAAA,EAAA,MAAC,OAAD,CAAM,UAAU,kBAAkB,YAAU,SAAS,cAAY,gBAAjE,CACK,EAAO,MAAI,EACT,GAGV,GACG,EAAA,EAAA,KAAC,EAAA,EAAD,CACa,UACF,QACE,UACT,QAAS,EACT,UAAU,yBAET,EAAU,EAAe,EACpB,CAAA,EAEV,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,iBAAiB,KAAK,kBACjC,EACE,CAAA,CAGV,GAAQ,IAAW,EAAA,EAAA,KAAC,MAAD,CAAK,IAAK,EAAa,UAAU,qBAAuB,CAAA,CAE3E,IACG,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,0BACX,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,qBAAqB,MAAO,CAAC,MAAO,GAAG,EAAW,GAAG,CAAI,CAAA,CACtE,CAAA,CAER,GCjFd,SAAgB,EAAW,CACvB,YAAY,IACZ,UAAU,SACV,QAAQ,UACR,SAAS,GACT,aACgB,CAChB,IAAM,EAAQ,EAAA,GAAiB,CACzB,CAAC,EAAS,IAAA,EAAA,EAAA,UAAuB,GAAM,CAkB7C,OAhBA,EAAA,EAAA,eAAgB,CACZ,SAAS,GAAW,CAChB,EAAW,OAAO,QAAU,EAAU,CAI1C,OAFA,GAAU,CACV,OAAO,iBAAiB,SAAU,EAAU,CAAC,QAAS,GAAK,CAAC,KAC/C,OAAO,oBAAoB,SAAU,EAAS,EAC5D,CAAC,EAAU,CAAC,EAUX,EAAA,EAAA,KAAC,EAAA,EAAD,CACa,UACF,QACP,MAAM,SACN,KAAK,KACL,SAAA,GACA,SAAA,EAAA,EAAA,iBAd8B,CAElC,IAAM,EACF,OAAO,OAAO,YAAe,YAAc,OAAO,WAAW,mCAAmC,CAAC,QACrG,OAAO,SAAS,CAAC,IAAK,EAAG,SAAU,GAAU,CAAC,EAAe,SAAW,UAAU,CAAC,EACpF,CAAC,EAAO,CAAC,CAUJ,aAAY,EAAM,YAClB,UAAW,EAAA,EAAG,aAAc,GAAW,UAAW,EAAU,CAE5D,MAAO,CAAC,YAER,EAAA,EAAA,KAAC,EAAA,GAAD,EAAgB,CAAA,CACV,CAAA,CCzClB,SAAgB,EAAc,CAC1B,QACA,SAAS,QACT,cAAc,aACd,UAAU,EACV,OAAO,KACP,QACA,UAAU,QACV,YAAY,GACZ,YACA,GAAG,GACgB,CACnB,IAAM,EAAU,EAAM,IAAK,IACvB,EAAA,EAAA,KAAC,EAAA,EAAD,CAEI,UAAW,EAAK,UAChB,GAAI,EAAK,GACT,KAAM,EAAK,KACX,OAAQ,EAAK,OACb,IAAK,EAAK,IACV,QAAS,EAAK,QACd,MAAO,EAAK,OAAS,EACrB,QAAS,EAAK,SAAW,EACnB,OACN,UAAW,EAAK,KAChB,MAAO,EAAK,MACZ,WAAY,EAAK,WACjB,aAAc,EAAK,aACnB,QAAS,EAAK,QACd,SAAU,EAAK,SACf,UAAW,IAAW,OAAS,GAAO,WAErC,EAAK,aACF,EAAA,EAAA,MAAC,OAAD,CAAM,UAAU,8BAAhB,EACI,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,+BAAuB,EAAK,MAAa,CAAA,EACzD,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,qCAA6B,EAAK,YAAmB,CAAA,CAClE,GAEP,EAAK,MAEH,CA1BD,EAAK,KAAO,EAAK,IAAM,EAAK,MAAQ,EAAK,OAAO,UAAU,CA0BzD,CACZ,CAcF,OAZI,IAAW,QAEP,EAAA,EAAA,KAAC,EAAA,EAAD,CACa,UACT,UAAW,EAAA,EAAG,gBAAiB,GAAa,aAAc,EAAU,CACpE,GAAI,WAEH,EACS,CAAA,EAKlB,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,EAAA,EAAG,gBAAiB,GAAa,aAAc,EAAU,CAAE,GAAI,YAC3E,EAAA,EAAA,KAAC,EAAA,EAAD,CAA2B,cAAmB,OAAe,UAAgB,QAAO,SAAU,YACzF,EACU,CAAA,CACb,CAAA,CC/Dd,SAAS,EAAW,EAAqB,EAAwB,CAC7D,OACI,EAAA,EAAA,KAAC,MAAD,CAAK,QAAQ,YAAY,KAAK,OAAO,MAAM,6BAA6B,cAAY,OAAO,GAAI,EAC1F,WACC,CAAA,CAId,SAAgB,EAAiB,EAAwB,CACrD,OAAO,GACH,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACI,EAAA,EAAA,KAAC,SAAD,CAAQ,GAAG,KAAK,GAAG,KAAK,EAAE,OAAO,KAAK,OAAO,OAAO,UAAU,YAAY,MAAQ,CAAA,EAClF,EAAA,EAAA,KAAC,OAAD,CACI,EAAE,6HACF,KAAK,UACP,CAAA,EACF,EAAA,EAAA,KAAC,OAAD,CACI,EAAE,0JACF,KAAK,UACP,CAAA,EACF,EAAA,EAAA,KAAC,OAAD,CACI,EAAE,qHACF,KAAK,UACP,CAAA,EACF,EAAA,EAAA,KAAC,OAAD,CACI,EAAE,qIACF,KAAK,UACP,CAAA,CACH,CAAA,CAAA,CACH,EACH,CAGL,SAAgB,EAAmB,EAAwB,CACvD,OAAO,GACH,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACI,EAAA,EAAA,KAAC,OAAD,CAAM,EAAE,MAAM,EAAE,MAAM,MAAM,OAAO,OAAO,OAAO,GAAG,MAAM,KAAK,UAAY,CAAA,EAC3E,EAAA,EAAA,KAAC,OAAD,CACI,EAAE,qJACF,KAAK,OACP,CAAA,CACH,CAAA,CAAA,CACH,EACH,CAGL,SAAgB,EAAgB,EAAwB,CACpD,OAAO,GACH,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACI,EAAA,EAAA,KAAC,OAAD,CACI,EAAE,kUACF,KAAK,eACP,CAAA,EACF,EAAA,EAAA,KAAC,OAAD,CACI,EAAE,+GACF,KAAK,eACP,CAAA,CACH,CAAA,CAAA,CACH,EACH,CAGL,SAAgB,EAAoB,EAAwB,CACxD,OAAO,GACH,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACI,EAAA,EAAA,KAAC,OAAD,CAAM,EAAE,MAAM,EAAE,MAAM,MAAM,MAAM,OAAO,MAAM,GAAG,MAAM,KAAK,UAAY,CAAA,EACzE,EAAA,EAAA,KAAC,OAAD,CAAM,EAAE,OAAO,EAAE,MAAM,MAAM,MAAM,OAAO,MAAM,GAAG,MAAM,KAAK,UAAY,CAAA,EAC1E,EAAA,EAAA,KAAC,OAAD,CAAM,EAAE,MAAM,EAAE,OAAO,MAAM,MAAM,OAAO,MAAM,GAAG,MAAM,KAAK,UAAY,CAAA,EAC1E,EAAA,EAAA,KAAC,OAAD,CAAM,EAAE,OAAO,EAAE,OAAO,MAAM,MAAM,OAAO,MAAM,GAAG,MAAM,KAAK,UAAY,CAAA,CAC5E,CAAA,CAAA,CACH,EACH,CAGL,SAAgB,EAAoB,EAAwB,CACxD,OAAO,GACH,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACI,EAAA,EAAA,KAAC,SAAD,CAAQ,GAAG,KAAK,GAAG,KAAK,EAAE,OAAO,KAAK,OAAS,CAAA,EAC/C,EAAA,EAAA,KAAC,OAAD,CACI,EAAE,weACF,KAAK,UACP,CAAA,CACH,CAAA,CAAA,CACH,EACH,CAGL,SAAgB,EAAmB,EAAwB,CACvD,OAAO,GACH,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACI,EAAA,EAAA,KAAC,OAAD,CAAM,EAAE,MAAM,EAAE,MAAM,MAAM,OAAO,OAAO,OAAO,GAAG,MAAM,KAAK,OAAS,CAAA,EACxE,EAAA,EAAA,KAAC,OAAD,CACI,EAAE,gQACF,KAAK,UACP,CAAA,CACH,CAAA,CAAA,CACH,EACH,CCpFL,IAAM,EAAqB,CACvB,OAAQ,CACJ,MAAO,sBACP,UAAW,SACX,KAAM,SACN,KAAM,EACT,CACD,SAAU,CACN,MAAO,wBACP,UAAW,WACX,KAAM,UACN,KAAM,EACT,CACD,MAAO,CACH,MAAO,qBACP,UAAW,QACX,KAAM,QACN,KAAM,EACT,CACD,UAAW,CACP,MAAO,yBACP,UAAW,YACX,KAAM,QACN,KAAM,EACT,CACD,UAAW,CACP,MAAO,yBACP,UAAW,YACX,KAAM,QACN,KAAM,EACT,CACD,SAAU,CACN,MAAO,wBACP,UAAW,WACX,KAAM,QACN,KAAM,EACT,CACJ,CAEY,GAAA,EAAA,EAAA,YAAkE,SAC3E,CACI,WAAW,SACX,UAAU,UACV,OAAO,KACP,WAAW,GACX,YAAY,SACZ,SACA,cACA,YAAY,GACZ,UAAU,GACV,SAAS,GACT,UAAU,GACV,cAAc,SACd,cACA,YACA,QACA,WACA,WAAW,GACX,OAAO,SACP,gBACA,YACA,aAAc,EACd,GAAG,GAEP,EACF,CACE,IAAM,EAAQ,EAAA,GAAuB,CAC/B,EAAS,EAAmB,GAC5B,EAAO,EAAO,KACd,EAAc,EAAA,EAAY,EAAM,OAAQ,CAAC,SAAU,EAAO,UAAU,CAAC,CACrE,EAAQ,GAAY,EAEpB,EACF,IACC,EAAY,OAAO,GAAa,UAAY,EAAS,MAAM,GAAK,GAAK,EAAW,EAAe,IAAA,IAC9F,EAAkB,EAAO,OAAS,SAAW,EAAU,EAAO,KAC9D,EAAa,GAAY,EACzB,CAAC,kBAAiB,cAAa,oBAAmB,iBAAiB,EAAA,EAAwC,CAC7G,OAAQ,EACR,SAAU,EACV,SAAU,EACV,MAAO,EACV,CAAC,CAEF,OACI,EAAA,EAAA,MAAC,SAAD,CACS,MACC,OACN,UAAW,EAAA,EACP,qBACA,EACA,EACA,EACA,GAAa,aACb,GAAY,YACZ,GAAY,cAAc,IAC1B,GAAW,UACX,GAAU,SACV,GAAW,UACX,GAAc,WACd,EACA,EACH,CACM,QACP,SAAU,EACV,YAAW,GAAW,IAAA,GACtB,aAAY,EACZ,cAAgB,GAAU,CACtB,EAAkB,EAAM,CACxB,IAAgB,EAAM,EAE1B,UAAY,GAAU,EACd,EAAM,MAAQ,KAAO,EAAM,MAAQ,UACnC,EAAc,EAAM,cAAc,CAGtC,IAAY,EAAM,EAEtB,GAAI,EAAA,EAAe,EAAQ,EAAY,CACvC,GAAI,WAlCR,CAoCK,EACA,IAAW,EAAA,EAAA,KAAC,EAAA,EAAD,CAAU,KAAK,KAAK,MAAM,UAAU,UAAU,wBAAwB,cAAY,OAAS,CAAA,EACvG,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,sBAAsB,cAAY,iBAC9C,EAAA,EAAA,KAAC,EAAD,CAAM,UAAU,qBAAuB,CAAA,CACpC,CAAA,CACN,CAAC,IAAY,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,+BAAuB,EAAa,CAAA,CAC7D,IAEf"}
package/dist/controls.cjs CHANGED
@@ -1,3 +1,3 @@
1
1
  const {ensureStyles}=require('./style-runtime.cjs')
2
2
  ensureStyles()
3
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./MButton-CnAr77Za.cjs`),t=require(`./MButtonGroup-DO1Tq3Za.cjs`),n=require(`./MCheckbox-DozwF2ai.cjs`),r=require(`./controls-Ck-PMt__.cjs`),i=require(`./MSlider-w5214a-W.cjs`);exports.MButton=e.t,exports.MButtonGroup=t.t,exports.MCheckbox=n.t,exports.MLoadMore=r.i,exports.MQuickActions=r.n,exports.MRadio=r.s,exports.MRadioGroup=r.o,exports.MScrollTop=r.r,exports.MSlider=i.t,exports.MSocialButton=r.t,exports.MToggle=r.a;
3
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./MButton-BxEky3xQ.cjs`),t=require(`./MButtonGroup-Dz8Fm-oA.cjs`),n=require(`./MCheckbox-DpKJpnFF.cjs`),r=require(`./controls-CyXEIOXD.cjs`),i=require(`./MSlider-hONQBulE.cjs`);exports.MButton=e.t,exports.MButtonGroup=t.t,exports.MCheckbox=n.t,exports.MLoadMore=r.i,exports.MQuickActions=r.n,exports.MRadio=r.s,exports.MRadioGroup=r.o,exports.MScrollTop=r.r,exports.MSlider=i.t,exports.MSocialButton=r.t,exports.MToggle=r.a;
package/dist/controls.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import {ensureStyles} from './style-runtime.js'
2
2
  ensureStyles()
3
- import { t as e } from "./MButton-CEwo8lUB.js";
4
- import { t } from "./MButtonGroup-BEJxXZ8u.js";
5
- import { t as n } from "./MCheckbox-BxFBADcE.js";
6
- import { a as r, i, n as a, o, r as s, s as c, t as l } from "./controls-BKoc_yel.js";
7
- import { t as u } from "./MSlider-BRjhyBSc.js";
3
+ import { t as e } from "./MButton-KELyyBw1.js";
4
+ import { t } from "./MButtonGroup-DDnn8Wfy.js";
5
+ import { t as n } from "./MCheckbox-CaWgyUn5.js";
6
+ import { a as r, i, n as a, o, r as s, s as c, t as l } from "./controls-B4Dxaab4.js";
7
+ import { t as u } from "./MSlider-CLASUc2H.js";
8
8
  export { e as MButton, t as MButtonGroup, n as MCheckbox, i as MLoadMore, a as MQuickActions, c as MRadio, o as MRadioGroup, s as MScrollTop, u as MSlider, l as MSocialButton, r as MToggle };
@@ -0,0 +1,2 @@
1
+ const e=require(`./validationMessages-iHu7apWr.cjs`);var t={valid:!0},n=[{brand:`visa`,label:`Visa`,iconLabel:`VISA`,maxLength:16,formatGroups:[4,4,4,4],regex:/^4\d{12}(?:\d{3})?$/,prefixRegex:/^4/},{brand:`mastercard`,label:`Mastercard`,iconLabel:`MC`,maxLength:16,formatGroups:[4,4,4,4],regex:/^(5[1-5]\d{14}|2(?:2[2-9]|[3-6]\d|7[01])\d{12}|2720\d{12})$/,prefixRegex:/^(5[1-5]|2(2[2-9]|[3-6]|7[01])|2720)/},{brand:`amex`,label:`American Express`,iconLabel:`AMEX`,maxLength:15,formatGroups:[4,6,5],regex:/^3[47]\d{13}$/,prefixRegex:/^3[47]/},{brand:`discover`,label:`Discover`,iconLabel:`DISC`,maxLength:16,formatGroups:[4,4,4,4],regex:/^(6011\d{12}|65\d{14}|64[4-9]\d{13})$/,prefixRegex:/^(6011|65|64[4-9])/},{brand:`maestro`,label:`Maestro`,iconLabel:`MAES`,maxLength:19,formatGroups:[4,4,4,4,3],regex:/^(5[06789]\d{0,17}|6\d{0,18})$/,prefixRegex:/^(5[06789]|6)/}];function r(e){return{brand:`unknown`,label:`Card`,iconLabel:`CARD`,maxLength:Math.min(Math.max(e.length||16,16),19),formatGroups:[4,4,4,4,3],regex:/^\d{12,19}$/,prefixRegex:/^\d/}}function i(e){return e.replace(/\D/g,``)}function a(e){let t=i(e);return t?n.find(e=>e.regex.test(t))??n.find(e=>e.prefixRegex.test(t))??r(t):r(t)}function o(e){let t=i(e),n=a(t),r=t.slice(0,n.maxLength),o=[],s=0;for(let e of n.formatGroups){if(s>=r.length)break;o.push(r.slice(s,s+e)),s+=e}return s<r.length&&o.push(r.slice(s)),o.join(` `)}function s(e){let t=0,n=!1;for(let r=e.length-1;r>=0;--r){let i=parseInt(e[r],10);if(Number.isNaN(i))return!1;n&&(i*=2,i>9&&(i-=9)),t+=i,n=!n}return t%10==0}function c(n){if(!n)return t;let r=i(n),o=a(r);return r.length<12?e.r(`cardTooShort`,`Card number is too short`):r.length>o.maxLength?o.brand===`unknown`?e.r(`cardTooLong`,`Card number is too long`):e.r(`cardBrandTooLong`,`{brand} card number is too long`,{brand:o.label}):o.brand!==`unknown`&&!o.regex.test(r)?e.r(`cardBrandInvalid`,`Invalid {brand} card number`,{brand:o.label}):s(r)?t:e.r(`cardChecksum`,`Invalid card checksum`)}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return n}});
2
+ //# sourceMappingURL=creditCards-Bo2mrc53.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"creditCards-Bo2mrc53.cjs","names":[],"sources":["../src/utils/creditCards.ts"],"sourcesContent":["import type {ValidationResult} from './validators'\nimport {validationFailure} from './validationMessages'\n\nexport type CreditCardBrand = 'visa' | 'mastercard' | 'amex' | 'discover' | 'maestro' | 'unknown'\n\nexport interface CreditCardBrandDetails {\n brand: CreditCardBrand\n label: string\n iconLabel: string\n maxLength: number\n formatGroups: number[]\n regex: RegExp\n prefixRegex: RegExp\n}\n\nconst OK_RESULT: ValidationResult = {valid: true}\n\n// Card brand rules also drive formatting and visible brand badges.\nconst creditCardBrands: CreditCardBrandDetails[] = [\n {\n brand: 'visa',\n label: 'Visa',\n iconLabel: 'VISA',\n maxLength: 16,\n formatGroups: [4, 4, 4, 4],\n regex: /^4\\d{12}(?:\\d{3})?$/,\n prefixRegex: /^4/,\n },\n {\n brand: 'mastercard',\n label: 'Mastercard',\n iconLabel: 'MC',\n maxLength: 16,\n formatGroups: [4, 4, 4, 4],\n regex: /^(5[1-5]\\d{14}|2(?:2[2-9]|[3-6]\\d|7[01])\\d{12}|2720\\d{12})$/,\n prefixRegex: /^(5[1-5]|2(2[2-9]|[3-6]|7[01])|2720)/,\n },\n {\n brand: 'amex',\n label: 'American Express',\n iconLabel: 'AMEX',\n maxLength: 15,\n formatGroups: [4, 6, 5],\n regex: /^3[47]\\d{13}$/,\n prefixRegex: /^3[47]/,\n },\n {\n brand: 'discover',\n label: 'Discover',\n iconLabel: 'DISC',\n maxLength: 16,\n formatGroups: [4, 4, 4, 4],\n regex: /^(6011\\d{12}|65\\d{14}|64[4-9]\\d{13})$/,\n prefixRegex: /^(6011|65|64[4-9])/,\n },\n {\n brand: 'maestro',\n label: 'Maestro',\n iconLabel: 'MAES',\n maxLength: 19,\n formatGroups: [4, 4, 4, 4, 3],\n regex: /^(5[06789]\\d{0,17}|6\\d{0,18})$/,\n prefixRegex: /^(5[06789]|6)/,\n },\n]\n\n// Fall back to a generic brand so formatting still works for unknown prefixes.\nfunction fallbackBrand(digits: string): CreditCardBrandDetails {\n return {\n brand: 'unknown',\n label: 'Card',\n iconLabel: 'CARD',\n maxLength: Math.min(Math.max(digits.length || 16, 16), 19),\n formatGroups: [4, 4, 4, 4, 3],\n regex: /^\\d{12,19}$/,\n prefixRegex: /^\\d/,\n }\n}\n\n// Remove every separator so card validation can work on raw digits.\nexport function stripCardNumber(value: string): string {\n return value.replace(/\\D/g, '')\n}\n\n// Detect the best matching payment brand from the visible card prefix.\n// Uses prefixRegex so the right brand (and its maxLength) is locked in while typing.\nexport function detectCardBrand(value: string): CreditCardBrandDetails {\n const digits = stripCardNumber(value)\n\n if (!digits) {\n return fallbackBrand(digits)\n }\n\n return (\n creditCardBrands.find((rule) => rule.regex.test(digits)) ??\n creditCardBrands.find((rule) => rule.prefixRegex.test(digits)) ??\n fallbackBrand(digits)\n )\n}\n\n// Group card digits according to the detected payment brand.\nexport function formatCardNumber(value: string): string {\n const digits = stripCardNumber(value)\n const rule = detectCardBrand(digits)\n const trimmedDigits = digits.slice(0, rule.maxLength)\n const parts: string[] = []\n let offset = 0\n\n for (const length of rule.formatGroups) {\n if (offset >= trimmedDigits.length) {\n break\n }\n\n parts.push(trimmedDigits.slice(offset, offset + length))\n offset += length\n }\n\n if (offset < trimmedDigits.length) {\n parts.push(trimmedDigits.slice(offset))\n }\n\n return parts.join(' ')\n}\n\n// Run the Luhn checksum used by most card numbers.\nfunction passesLuhn(value: string): boolean {\n let sum = 0\n let shouldDouble = false\n\n for (let index = value.length - 1; index >= 0; index -= 1) {\n let digit = parseInt(value[index], 10)\n\n if (Number.isNaN(digit)) {\n return false\n }\n\n if (shouldDouble) {\n digit *= 2\n if (digit > 9) {\n digit -= 9\n }\n }\n\n sum += digit\n shouldDouble = !shouldDouble\n }\n\n return sum % 10 === 0\n}\n\n// Validate the detected card brand and Luhn checksum without third-party runtime dependencies.\nexport function validateCardNumber(value: string): ValidationResult {\n if (!value) {\n return OK_RESULT\n }\n\n const digits = stripCardNumber(value)\n const rule = detectCardBrand(digits)\n\n if (digits.length < 12) {\n return validationFailure('cardTooShort', 'Card number is too short')\n }\n\n if (digits.length > rule.maxLength) {\n return rule.brand === 'unknown'\n ? validationFailure('cardTooLong', 'Card number is too long')\n : validationFailure('cardBrandTooLong', '{brand} card number is too long', {brand: rule.label})\n }\n\n if (rule.brand !== 'unknown' && !rule.regex.test(digits)) {\n return validationFailure('cardBrandInvalid', 'Invalid {brand} card number', {brand: rule.label})\n }\n\n if (!passesLuhn(digits)) {\n return validationFailure('cardChecksum', 'Invalid card checksum')\n }\n\n return OK_RESULT\n}\n\nexport {creditCardBrands}\n"],"mappings":"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"}
@@ -1,5 +1,6 @@
1
+ import { r as e } from "./validationMessages-BFimXxlT.js";
1
2
  //#region src/utils/creditCards.ts
2
- var e = { valid: !0 }, t = [
3
+ var t = { valid: !0 }, n = [
3
4
  {
4
5
  brand: "visa",
5
6
  label: "Visa",
@@ -71,10 +72,10 @@ var e = { valid: !0 }, t = [
71
72
  prefixRegex: /^(5[06789]|6)/
72
73
  }
73
74
  ];
74
- function n(e) {
75
+ function r(e) {
75
76
  return {
76
77
  brand: "unknown",
77
- label: "MCard",
78
+ label: "Card",
78
79
  iconLabel: "CARD",
79
80
  maxLength: Math.min(Math.max(e.length || 16, 16), 19),
80
81
  formatGroups: [
@@ -88,22 +89,22 @@ function n(e) {
88
89
  prefixRegex: /^\d/
89
90
  };
90
91
  }
91
- function r(e) {
92
- return e.replace(/\D/g, "");
93
- }
94
92
  function i(e) {
95
- let i = r(e);
96
- return i ? t.find((e) => e.regex.test(i)) ?? t.find((e) => e.prefixRegex.test(i)) ?? n(i) : n(i);
93
+ return e.replace(/\D/g, "");
97
94
  }
98
95
  function a(e) {
99
- let t = r(e), n = i(t), a = t.slice(0, n.maxLength), o = [], s = 0;
96
+ let t = i(e);
97
+ return t ? n.find((e) => e.regex.test(t)) ?? n.find((e) => e.prefixRegex.test(t)) ?? r(t) : r(t);
98
+ }
99
+ function o(e) {
100
+ let t = i(e), n = a(t), r = t.slice(0, n.maxLength), o = [], s = 0;
100
101
  for (let e of n.formatGroups) {
101
- if (s >= a.length) break;
102
- o.push(a.slice(s, s + e)), s += e;
102
+ if (s >= r.length) break;
103
+ o.push(r.slice(s, s + e)), s += e;
103
104
  }
104
- return s < a.length && o.push(a.slice(s)), o.join(" ");
105
+ return s < r.length && o.push(r.slice(s)), o.join(" ");
105
106
  }
106
- function o(e) {
107
+ function s(e) {
107
108
  let t = 0, n = !1;
108
109
  for (let r = e.length - 1; r >= 0; --r) {
109
110
  let i = parseInt(e[r], 10);
@@ -112,24 +113,12 @@ function o(e) {
112
113
  }
113
114
  return t % 10 == 0;
114
115
  }
115
- function s(t) {
116
- if (!t) return e;
117
- let n = r(t), a = i(n);
118
- return n.length < 12 ? {
119
- valid: !1,
120
- error: "MCard number is too short"
121
- } : n.length > a.maxLength ? {
122
- valid: !1,
123
- error: `${a.label} card number is too long`
124
- } : a.brand !== "unknown" && !a.regex.test(n) ? {
125
- valid: !1,
126
- error: `Invalid ${a.label} card number`
127
- } : o(n) ? e : {
128
- valid: !1,
129
- error: "Invalid card checksum"
130
- };
116
+ function c(n) {
117
+ if (!n) return t;
118
+ let r = i(n), o = a(r);
119
+ return r.length < 12 ? e("cardTooShort", "Card number is too short") : r.length > o.maxLength ? o.brand === "unknown" ? e("cardTooLong", "Card number is too long") : e("cardBrandTooLong", "{brand} card number is too long", { brand: o.label }) : o.brand !== "unknown" && !o.regex.test(r) ? e("cardBrandInvalid", "Invalid {brand} card number", { brand: o.label }) : s(r) ? t : e("cardChecksum", "Invalid card checksum");
131
120
  }
132
121
  //#endregion
133
- export { s as a, r as i, i as n, a as r, t };
122
+ export { c as a, i, a as n, o as r, n as t };
134
123
 
135
- //# sourceMappingURL=creditCards-D_iWmtG6.js.map
124
+ //# sourceMappingURL=creditCards-DmDOyvcw.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"creditCards-DmDOyvcw.js","names":[],"sources":["../src/utils/creditCards.ts"],"sourcesContent":["import type {ValidationResult} from './validators'\nimport {validationFailure} from './validationMessages'\n\nexport type CreditCardBrand = 'visa' | 'mastercard' | 'amex' | 'discover' | 'maestro' | 'unknown'\n\nexport interface CreditCardBrandDetails {\n brand: CreditCardBrand\n label: string\n iconLabel: string\n maxLength: number\n formatGroups: number[]\n regex: RegExp\n prefixRegex: RegExp\n}\n\nconst OK_RESULT: ValidationResult = {valid: true}\n\n// Card brand rules also drive formatting and visible brand badges.\nconst creditCardBrands: CreditCardBrandDetails[] = [\n {\n brand: 'visa',\n label: 'Visa',\n iconLabel: 'VISA',\n maxLength: 16,\n formatGroups: [4, 4, 4, 4],\n regex: /^4\\d{12}(?:\\d{3})?$/,\n prefixRegex: /^4/,\n },\n {\n brand: 'mastercard',\n label: 'Mastercard',\n iconLabel: 'MC',\n maxLength: 16,\n formatGroups: [4, 4, 4, 4],\n regex: /^(5[1-5]\\d{14}|2(?:2[2-9]|[3-6]\\d|7[01])\\d{12}|2720\\d{12})$/,\n prefixRegex: /^(5[1-5]|2(2[2-9]|[3-6]|7[01])|2720)/,\n },\n {\n brand: 'amex',\n label: 'American Express',\n iconLabel: 'AMEX',\n maxLength: 15,\n formatGroups: [4, 6, 5],\n regex: /^3[47]\\d{13}$/,\n prefixRegex: /^3[47]/,\n },\n {\n brand: 'discover',\n label: 'Discover',\n iconLabel: 'DISC',\n maxLength: 16,\n formatGroups: [4, 4, 4, 4],\n regex: /^(6011\\d{12}|65\\d{14}|64[4-9]\\d{13})$/,\n prefixRegex: /^(6011|65|64[4-9])/,\n },\n {\n brand: 'maestro',\n label: 'Maestro',\n iconLabel: 'MAES',\n maxLength: 19,\n formatGroups: [4, 4, 4, 4, 3],\n regex: /^(5[06789]\\d{0,17}|6\\d{0,18})$/,\n prefixRegex: /^(5[06789]|6)/,\n },\n]\n\n// Fall back to a generic brand so formatting still works for unknown prefixes.\nfunction fallbackBrand(digits: string): CreditCardBrandDetails {\n return {\n brand: 'unknown',\n label: 'Card',\n iconLabel: 'CARD',\n maxLength: Math.min(Math.max(digits.length || 16, 16), 19),\n formatGroups: [4, 4, 4, 4, 3],\n regex: /^\\d{12,19}$/,\n prefixRegex: /^\\d/,\n }\n}\n\n// Remove every separator so card validation can work on raw digits.\nexport function stripCardNumber(value: string): string {\n return value.replace(/\\D/g, '')\n}\n\n// Detect the best matching payment brand from the visible card prefix.\n// Uses prefixRegex so the right brand (and its maxLength) is locked in while typing.\nexport function detectCardBrand(value: string): CreditCardBrandDetails {\n const digits = stripCardNumber(value)\n\n if (!digits) {\n return fallbackBrand(digits)\n }\n\n return (\n creditCardBrands.find((rule) => rule.regex.test(digits)) ??\n creditCardBrands.find((rule) => rule.prefixRegex.test(digits)) ??\n fallbackBrand(digits)\n )\n}\n\n// Group card digits according to the detected payment brand.\nexport function formatCardNumber(value: string): string {\n const digits = stripCardNumber(value)\n const rule = detectCardBrand(digits)\n const trimmedDigits = digits.slice(0, rule.maxLength)\n const parts: string[] = []\n let offset = 0\n\n for (const length of rule.formatGroups) {\n if (offset >= trimmedDigits.length) {\n break\n }\n\n parts.push(trimmedDigits.slice(offset, offset + length))\n offset += length\n }\n\n if (offset < trimmedDigits.length) {\n parts.push(trimmedDigits.slice(offset))\n }\n\n return parts.join(' ')\n}\n\n// Run the Luhn checksum used by most card numbers.\nfunction passesLuhn(value: string): boolean {\n let sum = 0\n let shouldDouble = false\n\n for (let index = value.length - 1; index >= 0; index -= 1) {\n let digit = parseInt(value[index], 10)\n\n if (Number.isNaN(digit)) {\n return false\n }\n\n if (shouldDouble) {\n digit *= 2\n if (digit > 9) {\n digit -= 9\n }\n }\n\n sum += digit\n shouldDouble = !shouldDouble\n }\n\n return sum % 10 === 0\n}\n\n// Validate the detected card brand and Luhn checksum without third-party runtime dependencies.\nexport function validateCardNumber(value: string): ValidationResult {\n if (!value) {\n return OK_RESULT\n }\n\n const digits = stripCardNumber(value)\n const rule = detectCardBrand(digits)\n\n if (digits.length < 12) {\n return validationFailure('cardTooShort', 'Card number is too short')\n }\n\n if (digits.length > rule.maxLength) {\n return rule.brand === 'unknown'\n ? validationFailure('cardTooLong', 'Card number is too long')\n : validationFailure('cardBrandTooLong', '{brand} card number is too long', {brand: rule.label})\n }\n\n if (rule.brand !== 'unknown' && !rule.regex.test(digits)) {\n return validationFailure('cardBrandInvalid', 'Invalid {brand} card number', {brand: rule.label})\n }\n\n if (!passesLuhn(digits)) {\n return validationFailure('cardChecksum', 'Invalid card checksum')\n }\n\n return OK_RESULT\n}\n\nexport {creditCardBrands}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ const e=require(`./frameworkTexts-CaqdiKHW.cjs`),t=require(`./icons-Bp8bB9TP.cjs`),n=require(`./cn-DYFxgzi2.cjs`),r=require(`./MPopover-ZeoU9hb5.cjs`),i=require(`./MText-nsvLFsSv.cjs`),a=require(`./MHeading-DiGYs1FJ.cjs`),o=require(`./MSubText-Dl1PfToZ.cjs`),s=require(`./MButton-BxEky3xQ.cjs`),c=require(`./MCheckbox-DpKJpnFF.cjs`),l=require(`./MLoader-DUOoOoNE.cjs`),u=require(`./radioGroupKeys-COL8uXbH.cjs`),d=require(`./MStack-CGII4A-q.cjs`),f=require(`./MInputSearch-BSIc6m2P.cjs`),p=require(`./MTooltip-Cj2Fxmzc.cjs`),m=require(`./MPagination-DitmdtCc.cjs`);require(`./core-w629c4ND.cjs`);let h=require(`react`),g=require(`react/jsx-runtime`);function _(e,t,n){return typeof n==`function`?n(e,t):String(typeof n==`string`?e[n]:e.id??t)}function v(e,t){let n=t.split(`.`),r=e;for(let e of n){if(typeof r!=`object`||!r)return;r=r[e]}return r}function y({columns:i,data:a,rowKey:o,sortable:u=!1,filterable:d=!1,selectable:p=!1,pagination:y=!1,pageSize:b=10,striped:x=!1,compact:S=!1,stickyHeader:C=!1,loading:w=!1,loadingLabel:T,scrollOffset:E,sort:D,onSortChange:O,search:k,onSearchChange:A,searchKeys:j,filterKeys:M=[],filters:N,onFiltersChange:P,sortKeys:F=[],page:I,onPageChange:ee,total:te,manualSearch:ne=!1,manualFilters:re=!1,manualSort:ie=!1,manualPagination:L=!1,selectedKeys:ae,onSelectionChange:oe,emptyText:se,filterPlaceholder:ce,className:R,style:z,...le}){let ue=e.s(),B=e.l(),V=e.c(),[H,U]=(0,h.useState)(null),[de,fe]=(0,h.useState)([]),[W,pe]=(0,h.useState)(``),[me,he]=(0,h.useState)({}),[ge,G]=(0,h.useState)(1),[K,q]=(0,h.useState)(!1),[J,Y]=(0,h.useState)(!1),_e=(0,h.useRef)(null),ve=(0,h.useRef)(null),ye=(0,h.useId)(),be=`${ye}-filter`,xe=`${ye}-sort`,X=D===void 0?H:D,Se=k===void 0?W:k,Z=N===void 0?me:N,Q=I===void 0?ge:I,$=ae??de,Ce=oe??fe,we=(0,h.useCallback)(e=>{k===void 0&&pe(e),!L&&I===void 0&&G(1),A?.(e)},[k,I,L,A]),Te=(0,h.useCallback)(e=>{N===void 0&&he(e),!L&&I===void 0&&G(1),P?.(e)},[N,I,L,P]),Ee=(0,h.useCallback)(e=>{D===void 0&&U(e),!L&&I===void 0&&G(1),O?.(e)},[D,I,L,O]),De=(0,h.useRef)(null),Oe=(0,h.useCallback)(e=>{I===void 0&&G(e),ee?.(e),De.current?.scrollIntoView({block:`start`,behavior:`smooth`})},[I,ee]);function ke(e){let t;t=X?.key===e?X.dir===`asc`?{key:e,dir:`desc`}:null:{key:e,dir:`asc`},Ee(t)}function Ae(e,t){let n=Z[e]??[],r=n.includes(t)?n.filter(e=>e!==t):[...n,t];Te({...Z,[e]:r})}let je=(0,h.useMemo)(()=>{let e={};for(let t of M){if(t.options){e[t.key]=t.options;continue}let n=new Set;for(let e of a){let r=v(e,t.key);r!=null&&n.add(String(r))}e[t.key]=Array.from(n).sort()}return e},[a,M]),Me=(0,h.useMemo)(()=>{let e=a;if(!ne&&d&&Se.trim()){let t=Se.toLowerCase();e=j&&j.length>0?e.filter(e=>j.some(n=>{let r=v(e,n);return r!=null&&String(r).toLowerCase().includes(t)})):e.filter(e=>i.some(n=>{if(n.filterable===!1)return!1;let r=e[n.key];return r!=null&&String(r).toLowerCase().includes(t)}))}if(!re)for(let[t,n]of Object.entries(Z))!n||n.length===0||(e=e.filter(e=>{let r=v(e,t);return r!=null&&n.includes(String(r))}));return e},[a,ne,re,d,Se,j,i,Z]),Ne=(0,h.useMemo)(()=>{if(ie||!X)return Me;let e=i.find(e=>e.key===X.key),t=F.some(e=>e.key===X.key);if(!e?.sortable&&!u&&!t)return Me;let n=X.dir===`asc`?1:-1;return[...Me].sort((e,t)=>{let r=e[X.key],i=t[X.key];return r==null&&i==null?0:r==null?1:i==null?-1:typeof r==`number`&&typeof i==`number`?(r-i)*n:String(r).localeCompare(String(i))*n})},[Me,X,i,u,F,ie]),Pe=L?te??Ne.length:Ne.length,Fe=y?Math.max(1,Math.ceil(Pe/b)):1,Ie=(0,h.useMemo)(()=>{if(!y||L)return Ne;let e=(Q-1)*b;return Ne.slice(e,e+b)},[Ne,y,L,Q,b]),Le=Ie.map((e,t)=>_(e,(Q-1)*b+t,o)),Re=Le.length>0&&Le.every(e=>$.includes(e));function ze(){Ce(Re?$.filter(e=>!Le.includes(e)):[...new Set([...$,...Le])])}function Be(e){Ce($.includes(e)?$.filter(t=>t!==e):[...$,e])}function Ve(e,t){t.target.closest(`button, a, [data-no-row-select]`)||Be(e)}let He=(0,h.useCallback)(()=>{q(e=>!e),Y(!1)},[]),Ue=(0,h.useCallback)(()=>{Y(e=>!e),q(!1)},[]),We=F.find(e=>e.key===X?.key),Ge=d||M.length>0||F.length>0;return(0,g.jsxs)(`div`,{ref:De,className:n.t(`data-table`,R),style:E===void 0?z:{scrollMarginTop:E,...z},...le,children:[Ge&&(0,g.jsxs)(`div`,{className:`toolbar`,children:[d&&(0,g.jsx)(f.t,{className:`filter-search`,size:`sm`,fullWidth:!0,placeholder:ce??B.searchPlaceholder,value:Se,onChange:e=>we(e.target.value),onClear:()=>we(``)}),(M.length>0||F.length>0)&&(0,g.jsxs)(`div`,{className:`toolbar-actions`,children:[M.length>0&&(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(s.t,{ref:_e,variant:`outlined`,size:`sm`,startIcon:(0,g.jsx)(t.Jn,{}),"aria-haspopup":`dialog`,"aria-expanded":K,"aria-controls":K?be:void 0,onClick:He,children:B.filter}),(0,g.jsx)(r.t,{open:K,anchorRef:_e,onClose:()=>q(!1),placement:`bottom-end`,role:`dialog`,id:be,"aria-label":B.filter,initialFocus:`first`,closeOnTabOut:!0,className:`data-table-dropdown`,children:M.map((e,t)=>(0,g.jsxs)(`div`,{className:`data-table-filter-group`,role:`group`,"aria-labelledby":`${be}-group-${t}`,children:[(0,g.jsx)(`span`,{id:`${be}-group-${t}`,className:`data-table-filter-label`,children:e.label}),(je[e.key]??[]).map(t=>(0,g.jsx)(`div`,{className:`data-table-filter-option`,children:(0,g.jsx)(c.t,{size:`sm`,clickEffect:`none`,checked:Z[e.key]?.includes(t)??!1,onChange:()=>Ae(e.key,t),label:t})},t))]},e.key))})]}),F.length>0&&(0,g.jsxs)(g.Fragment,{children:[(0,g.jsxs)(s.t,{ref:ve,variant:`outlined`,size:`sm`,startIcon:X?X.dir===`asc`?(0,g.jsx)(t.Hi,{}):(0,g.jsx)(t.Vi,{}):(0,g.jsx)(t.qn,{}),"aria-haspopup":`dialog`,"aria-expanded":J,"aria-controls":J?xe:void 0,onClick:Ue,children:[We?e.t(B.sortBy,{label:We.label}):B.sort,We&&X&&(0,g.jsxs)(`span`,{className:`data-table-sr-only`,children:[`, `,X.dir===`asc`?B.sortAscending:B.sortDescending]})]}),(0,g.jsx)(r.t,{open:J,anchorRef:ve,onClose:()=>Y(!1),placement:`bottom-end`,role:`dialog`,id:xe,"aria-label":B.sort,initialFocus:`first`,closeOnTabOut:!0,className:`data-table-dropdown`,children:F.map(e=>(0,g.jsxs)(`button`,{type:`button`,className:n.t(`data-table-sort-item`,X?.key===e.key&&`active`),"aria-pressed":X?.key===e.key,onClick:()=>{X?.key===e.key?Ee({key:e.key,dir:X.dir===`asc`?`desc`:`asc`}):Ee({key:e.key,dir:`asc`})},children:[e.label,X?.key===e.key&&(0,g.jsxs)(`span`,{className:`data-table-sort-dir`,children:[X.dir===`asc`?(0,g.jsx)(t.Hi,{className:`data-table-sort-icon`}):(0,g.jsx)(t.Vi,{className:`data-table-sort-icon`}),(0,g.jsxs)(`span`,{className:`data-table-sr-only`,children:[`, `,X.dir===`asc`?B.sortAscending:B.sortDescending]})]})]},e.key))})]})]})]}),(0,g.jsxs)(`div`,{className:n.t(`data-table-body`,w&&`loading`),children:[(0,g.jsx)(`div`,{className:`scroll`,"aria-busy":w||void 0,children:(0,g.jsxs)(`table`,{className:n.t(`root`,x&&`striped`,S&&`compact`),children:[(0,g.jsx)(`thead`,{className:n.t(`head`,C&&`sticky`),children:(0,g.jsxs)(`tr`,{children:[p&&(0,g.jsx)(`th`,{className:`th check-col`,scope:`col`,children:(0,g.jsx)(c.t,{checked:Re,onChange:ze,size:`sm`,clickEffect:`none`,label:(0,g.jsx)(`span`,{className:`data-table-sr-only`,children:V.selectAllRows})})}),i.map(e=>{let r=e.sortable??u,i=X?.key===e.key;return(0,g.jsx)(`th`,{scope:`col`,"aria-sort":i?X.dir===`asc`?`ascending`:`descending`:void 0,className:n.t(`th`,r&&`sortable`,i&&`sorted-${X.dir}`),style:{width:e.width,textAlign:e.align},onClick:r?()=>ke(e.key):void 0,children:r?(0,g.jsx)(`button`,{type:`button`,className:`th-sort-button`,children:(0,g.jsxs)(`span`,{className:`th-content`,children:[e.label,(0,g.jsx)(`span`,{className:`sort-icon`,children:i?X.dir===`asc`?(0,g.jsx)(t.Hi,{"aria-hidden":`true`}):(0,g.jsx)(t.Vi,{"aria-hidden":`true`}):(0,g.jsx)(t.Bi,{"aria-hidden":`true`})})]})}):(0,g.jsx)(`span`,{className:`th-content`,children:e.label})},e.key)})]})}),(0,g.jsxs)(`tbody`,{children:[Ie.length===0&&(0,g.jsx)(`tr`,{children:(0,g.jsx)(`td`,{className:`empty`,colSpan:i.length+ +!!p,children:se??V.empty})}),Ie.map((t,r)=>{let a=_(t,(Q-1)*b+r,o),s=$.includes(a);return(0,g.jsxs)(`tr`,{className:n.t(`row`,s&&`selected`,p&&`selectable`),onClick:p?e=>Ve(a,e):void 0,children:[p&&(0,g.jsx)(`td`,{className:`td check-col`,children:(0,g.jsx)(c.t,{checked:s,onChange:()=>{},size:`sm`,clickEffect:`none`,label:(0,g.jsx)(`span`,{className:`data-table-sr-only`,children:e.t(V.selectRow,{index:(Q-1)*b+r+1})})})}),i.map(e=>(0,g.jsx)(`td`,{className:`td`,style:{textAlign:e.align},children:e.render?e.render(t[e.key],t,(Q-1)*b+r):t[e.key]},e.key))]},a)})]})]})}),w&&(0,g.jsx)(`div`,{className:`data-table-loading`,children:(0,g.jsx)(l.t,{center:!1,minHeight:`auto`,label:T??ue.loading})})]}),y&&Fe>1&&(0,g.jsx)(m.t,{total:Pe,page:Q,pageSize:b,onChange:Oe})]})}function b({items:e,color:t=`primary`,size:r=`md`,strikethrough:i=!0,onChange:a,className:o,...s}){return(0,g.jsx)(`div`,{className:n.t(`task list`,`color-${t}`,`size-${r}`,o),role:`list`,...s,children:e.map(e=>(0,g.jsxs)(`div`,{className:n.t(`task item`,e.checked&&`checked`,e.disabled&&`disabled`),role:`listitem`,onClick:t=>{e.disabled||t.target.closest(`.checkbox`)||a?.(e.id,!(e.checked??!1))},children:[(0,g.jsx)(c.t,{className:`task control`,checked:e.checked??!1,color:t,size:r,disabled:e.disabled,onChange:t=>a?.(e.id,t.target.checked),clickEffect:`ripple`}),(0,g.jsx)(`span`,{className:n.t(`task label`,e.checked&&i&&`done`),children:e.label})]},e.id))})}var x=7,S=24,C=[0,1,2,3],w=100;function T(e,t){if(t<=0||e<=0)return 0;let n=e/t;return n>=.66?3:n>=.33?2:1}function E(e,t){if(t<=0)return[0];if(!(Number.isInteger(t)&&e.every(e=>e.every(e=>Number.isInteger(e))))||t>w)return C;let n=new Set([0]);for(let e=1;e<=t;e+=1)n.add(T(e,t));return C.filter(e=>n.has(e))}function D(e,t,n){let r=Array.from({length:t},()=>Array.from({length:n},()=>0));if(Array.isArray(e)&&e.length>0&&Array.isArray(e[0])){let i=e;for(let e=0;e<Math.min(t,i.length);e+=1){let t=i[e];if(t)for(let i=0;i<Math.min(n,t.length);i+=1)r[e][i]=t[i]??0}return r}for(let i of e)i.day<0||i.day>=t||i.slot<0||i.slot>=n||(r[i.day][i.slot]=i.value);return r}function O(e,t){if(typeof t==`number`)return t;let n=0;for(let t of e)for(let e of t)e>n&&(n=e);return n}function k(e,t,n,r){return r&&r.length>=e?Array.from({length:e},(e,t)=>({label:r[t],calendarDay:t})):e===7?(t===1?[1,2,3,4,5,6,0]:[0,1,2,3,4,5,6]).map(e=>({label:n[e],calendarDay:e})):Array.from({length:e},(e,t)=>({label:String(t+1),calendarDay:t}))}function A(e,t){return t&&t.length>=e?t.slice(0,e):e===24?Array.from({length:24},(e,t)=>t.toString().padStart(2,`0`)):Array.from({length:e},(e,t)=>String(t+1))}function j(e,t,n,r,i,a,o){let s=i-1,c=a-1;switch(e){case`ArrowRight`:return{row:n,col:o?Math.max(r-1,0):Math.min(r+1,c)};case`ArrowLeft`:return{row:n,col:o?Math.min(r+1,c):Math.max(r-1,0)};case`ArrowDown`:return{row:Math.min(n+1,s),col:r};case`ArrowUp`:return{row:Math.max(n-1,0),col:r};case`Home`:return t?{row:0,col:0}:{row:n,col:0};case`End`:return t?{row:s,col:c}:{row:n,col:c};case`PageUp`:return{row:0,col:r};case`PageDown`:return{row:s,col:r};default:return null}}function M(e){return e.value>0?e.value:``}function N(e,t,n){return`${t} ${n} — ${e.value}`}function P({data:t,max:r,days:s=x,slots:c=S,dayLabels:l,slotLabels:f,weekStart:m=1,color:_=`warning`,title:v,description:y,hint:b,peakLabel:C,renderCell:w,renderTooltip:P,onCellClick:I,showLegend:ee=!0,bandLabels:te,legendUnit:ne,rowLabelWidth:re=48,cellHeight:ie=24,cellMinWidth:L=24,interactive:ae,className:oe,style:se,...ce}){let R=ae??!!I,z=!R&&!!I,[le,ue]=(0,h.useState)({row:0,col:0}),B=(0,h.useRef)(null),V=`${(0,h.useId)()}-title`,H=(0,h.useMemo)(()=>D(t,s,c),[t,s,c]),U=(0,h.useMemo)(()=>O(H,r),[H,r]),de=(0,h.useMemo)(()=>A(c,f),[c,f]),fe=(0,h.useMemo)(()=>E(H,U),[H,U]),W=e.O(),pe=(0,h.useMemo)(()=>k(s,m,W.days,l),[s,m,W.days,l]),me=te??W.bands,he={gridTemplateColumns:`${re}px repeat(${c}, minmax(${L}px, 1fr))`},ge={"--mineral-week-grid-color":`var(--mineral-${_})`,...se},G=v!=null||y!=null||b!=null||C!=null,K=pe.length,q=de.length,J={row:Math.min(le.row,Math.max(K-1,0)),col:Math.min(le.col,Math.max(q-1,0))},Y=R&&typeof v==`string`&&!ce[`aria-label`]&&!ce[`aria-labelledby`];function _e(e,t){ue({row:e,col:t}),B.current?.querySelector(`[data-week-grid-cell="${e}-${t}"]`)?.focus()}function ve(e,t,n,r){if(e.key===`Enter`||e.key===` `){if(!I)return;e.preventDefault(),I(r);return}let i=u.n(B.current),a=j(e.key,e.ctrlKey||e.metaKey,t,n,K,q,i);a&&(e.preventDefault(),_e(a.row,a.col))}return(0,g.jsxs)(`div`,{className:n.t(`mineral-week-grid`,oe),style:ge,...ce,children:[G&&(0,g.jsxs)(d.t,{spacing:`xs`,children:[(0,g.jsxs)(`div`,{className:`mineral-week-grid__title-row`,children:[(0,g.jsxs)(`div`,{className:`mineral-week-grid__title-text`,children:[v!=null&&(typeof v==`string`?(0,g.jsx)(a.t,{level:5,id:Y?V:void 0,children:v}):v),y!=null&&(typeof y==`string`?(0,g.jsx)(o.t,{tone:`muted`,children:y}):y)]}),C!=null&&(0,g.jsx)(i.t,{size:`sm`,tone:`muted`,children:C})]}),b!=null&&(0,g.jsx)(o.t,{size:`xs`,tone:`muted`,children:b})]}),(0,g.jsxs)(`div`,{ref:B,className:n.t(`mineral-week-grid__matrix`,R&&`mineral-week-grid__matrix--grid`),style:he,role:R?`grid`:void 0,"aria-labelledby":Y?V:void 0,children:[(0,g.jsxs)(F,{enabled:R,children:[(0,g.jsx)(`div`,{role:R?`columnheader`:void 0}),de.map((e,t)=>(0,g.jsx)(`div`,{className:`mineral-week-grid__col-header`,role:R?`columnheader`:void 0,children:(0,g.jsx)(o.t,{size:`xs`,tone:`muted`,children:e})},`col-${t}`))]}),pe.map(({label:t,calendarDay:r},i)=>(0,g.jsxs)(F,{enabled:R,children:[(0,g.jsx)(`div`,{className:`mineral-week-grid__row-label`,role:R?`rowheader`:void 0,children:(0,g.jsx)(o.t,{size:`xs`,tone:`muted`,children:t})}),de.map((a,o)=>{let s=H[r]?.[o]??0,c=T(s,U),l={day:r,slot:o,value:s,band:c},u=w?w(l):M(l),d=P?P(l):N(l,t,a),f=n.t(`mineral-week-grid__cell`,`mineral-week-grid__cell--band-${c}`,I&&`mineral-week-grid__cell--interactive`,!I&&d!=null&&`mineral-week-grid__cell--tooltip`,R&&`mineral-week-grid__cell--grid`),m=J.row===i&&J.col===o,_=(0,g.jsx)(`div`,{className:f,style:{height:ie},onClick:I?()=>I(l):void 0,onKeyDown:R?e=>ve(e,i,o,l):I?e=>{e.key!==`Enter`&&e.key!==` `||(e.preventDefault(),I(l))}:void 0,onFocus:R?()=>ue({row:i,col:o}):void 0,"data-week-grid-cell":R?`${i}-${o}`:void 0,role:R?`gridcell`:z?`button`:void 0,tabIndex:R?m?0:-1:z?0:void 0,"aria-label":R||z?e.t(W.cellLabel,{day:t,slot:a,value:s}):void 0,children:u});return d==null?(0,g.jsx)(h.Fragment,{children:_},`cell-${i}-${o}`):(0,g.jsx)(p.t,{content:d,children:_},`cell-${i}-${o}`)})]},`row-${i}-${r}`))]}),ee&&(0,g.jsxs)(`div`,{className:`mineral-week-grid__legend`,children:[(0,g.jsx)(o.t,{size:`xs`,tone:`muted`,children:e.t(W.scale,{min:0,max:U,unit:ne?` ${ne}`:``})}),(0,g.jsx)(`div`,{className:`mineral-week-grid__legend-bands`,children:fe.map(e=>(0,g.jsxs)(`div`,{className:`mineral-week-grid__legend-band`,children:[(0,g.jsx)(`span`,{className:n.t(`mineral-week-grid__legend-swatch`,`mineral-week-grid__cell--band-${e}`)}),(0,g.jsx)(o.t,{size:`xs`,tone:`muted`,children:me[e]})]},`legend-${e}`))})]})]})}function F({enabled:e,children:t}){return e?(0,g.jsx)(`div`,{role:`row`,className:`mineral-week-grid__row`,children:t}):(0,g.jsx)(g.Fragment,{children:t})}function I(e,t={}){let{perPage:n=20,initialPage:r=1,initialSearch:i=``,initialFilters:a,initialSort:o=null,invalidationKey:s}=t,[c,l]=(0,h.useState)([]),[u,d]=(0,h.useState)(0),[f,p]=(0,h.useState)(r),[m,g]=(0,h.useState)(i),[_,v]=(0,h.useState)(a??{}),[y,b]=(0,h.useState)(o),[x,S]=(0,h.useState)(!1),[C,w]=(0,h.useState)(null),[T,E]=(0,h.useState)(0),D=(0,h.useRef)(e);D.current=e;let O=(0,h.useMemo)(()=>({page:f,perPage:n,search:m,filters:_,sort:y}),[f,n,m,_,y]);(0,h.useEffect)(()=>{let e=typeof AbortController<`u`?new AbortController:void 0,t=!1;return S(!0),w(null),D.current(O,e?.signal).then(e=>{t||(l(e.data),d(e.meta.total))}).catch(e=>{t||e instanceof Error&&e.name===`AbortError`||w(e instanceof Error?e:Error(String(e)))}).finally(()=>{t||S(!1)}),()=>{t=!0,e?.abort()}},[O,s,T]);let k=(0,h.useCallback)(e=>{g(e),p(1)},[]),A=(0,h.useCallback)(e=>{v(e),p(1)},[]),j=(0,h.useCallback)(e=>{b(e),p(1)},[]),M=(0,h.useCallback)(()=>E(e=>e+1),[]);return{tableProps:{data:c,total:u,page:f,onPageChange:p,sort:y,onSortChange:j,search:m,onSearchChange:k,filters:_,onFiltersChange:A,manualSearch:!0,manualFilters:!0,manualSort:!0,manualPagination:!0,pageSize:n,loading:x},isLoading:x,error:C,refetch:M}}function ee(e){return e?{key:e.key,dir:e.direction}:null}function te(e,t={}){let{perPage:n=12,initialPage:r=1,initialSearch:i=``,initialFilters:a,initialSort:o=null,invalidationKey:s}=t,[c,l]=(0,h.useState)([]),[u,d]=(0,h.useState)(0),[f,p]=(0,h.useState)(r),[m,g]=(0,h.useState)(i),[_,v]=(0,h.useState)(a??{}),[y,b]=(0,h.useState)(o??null),[x,S]=(0,h.useState)(!1),[C,w]=(0,h.useState)(null),[T,E]=(0,h.useState)(0),D=(0,h.useRef)(e);D.current=e;let O=(0,h.useMemo)(()=>({page:f,perPage:n,search:m,filters:_,sort:ee(y)}),[f,n,m,_,y]);(0,h.useEffect)(()=>{let e=typeof AbortController<`u`?new AbortController:void 0,t=!1;return S(!0),w(null),D.current(O,e?.signal).then(e=>{t||(l(e.data),d(e.meta.total))}).catch(e=>{t||e instanceof Error&&e.name===`AbortError`||w(e instanceof Error?e:Error(String(e)))}).finally(()=>{t||S(!1)}),()=>{t=!0,e?.abort()}},[O,s,T]);let k=(0,h.useCallback)(e=>{g(e),p(1)},[]),A=(0,h.useCallback)(e=>{v(e),p(1)},[]),j=(0,h.useCallback)(e=>{b(e),p(1)},[]),M=(0,h.useCallback)(()=>E(e=>e+1),[]);return{gridProps:{items:c,total:u,page:f,onPageChange:p,sort:y,onSortChange:j,search:m,onSearchChange:k,filters:_,onFiltersChange:A,manualSearch:!0,manualFilters:!0,manualSort:!0,manualPagination:!0,pageSize:n,loading:x},isLoading:x,error:C,refetch:M}}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return I}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return P}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return te}});
2
+ //# sourceMappingURL=data-BM3KG8oN.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-BM3KG8oN.cjs","names":[],"sources":["../src/components/data/MDataTable/MDataTable.tsx","../src/components/data/MTaskList/MTaskList.tsx","../src/components/data/MWeekGrid/MWeekGrid.tsx","../src/components/data/useMTable.ts","../src/components/data/useMCardGrid.ts"],"sourcesContent":["import {useCallback, useId, useMemo, useRef, useState} from 'react'\nimport type * as React from 'react'\nimport type {MDataTableProps, MDataTableSort} from './MDataTable.types'\nimport {MButton, MCheckbox} from '../../controls'\nimport {MInputSearch} from '../../inputs'\nimport {MPagination} from '../../layout'\nimport {MPopover} from '../../primitives'\nimport {MLoader} from '../../feedback'\nimport {MArrowDownIcon, MArrowUpDownIcon, MArrowUpIcon, MFilterIcon, MSortIcon} from '../../../icons'\nimport {cn} from '../../../utils/cn'\nimport {formatMText, useMCommonTexts, useMDataTableTexts, useMDataViewTexts} from '../../../i18n/frameworkTexts'\nimport './MDataTable.css'\n\nfunction getRowKey<T>(row: T, index: number, rowKey?: string | ((row: T, index: number) => string)): string {\n if (typeof rowKey === 'function') return rowKey(row, index)\n if (typeof rowKey === 'string') return String((row as any)[rowKey])\n return String((row as any).id ?? index)\n}\n\nfunction getNestedValue(obj: unknown, key: string): unknown {\n const parts = key.split('.')\n let val: unknown = obj\n\n for (const p of parts) {\n if (val == null || typeof val !== 'object') return undefined\n val = (val as Record<string, unknown>)[p]\n }\n\n return val\n}\n\nexport function MDataTable<T = any>({\n columns,\n data,\n rowKey,\n sortable = false,\n filterable = false,\n selectable = false,\n pagination = false,\n pageSize = 10,\n striped = false,\n compact = false,\n stickyHeader = false,\n loading = false,\n loadingLabel,\n scrollOffset,\n sort: controlledSort,\n onSortChange,\n search: controlledSearch,\n onSearchChange,\n searchKeys,\n filterKeys = [],\n filters: controlledFilters,\n onFiltersChange,\n sortKeys = [],\n page: controlledPage,\n onPageChange,\n total,\n manualSearch = false,\n manualFilters = false,\n manualSort = false,\n manualPagination = false,\n selectedKeys: controlledSelected,\n onSelectionChange,\n emptyText,\n filterPlaceholder,\n className,\n style,\n ...rest\n}: MDataTableProps<T>) {\n const commonTexts = useMCommonTexts()\n const viewTexts = useMDataViewTexts()\n const tableTexts = useMDataTableTexts()\n const [internalSort, setInternalSort] = useState<MDataTableSort | null>(null)\n const [internalSelected, setInternalSelected] = useState<string[]>([])\n const [internalSearch, setInternalSearch] = useState('')\n const [internalFilters, setInternalFilters] = useState<Record<string, string[]>>({})\n const [internalPage, setInternalPage] = useState(1)\n const [filterOpen, setFilterOpen] = useState(false)\n const [sortOpen, setSortOpen] = useState(false)\n const filterBtnRef = useRef<HTMLElement>(null)\n const sortBtnRef = useRef<HTMLElement>(null)\n const toolbarId = useId()\n const filterPopoverId = `${toolbarId}-filter`\n const sortPopoverId = `${toolbarId}-sort`\n\n const activeSort = controlledSort !== undefined ? controlledSort : internalSort\n const search = controlledSearch !== undefined ? controlledSearch : internalSearch\n const filters = controlledFilters !== undefined ? controlledFilters : internalFilters\n const page = controlledPage !== undefined ? controlledPage : internalPage\n const selected = controlledSelected ?? internalSelected\n const setSelected = onSelectionChange ?? setInternalSelected\n\n const setSearch = useCallback(\n (next: string) => {\n if (controlledSearch === undefined) setInternalSearch(next)\n if (!manualPagination && controlledPage === undefined) setInternalPage(1)\n onSearchChange?.(next)\n },\n [controlledSearch, controlledPage, manualPagination, onSearchChange]\n )\n\n const setFilters = useCallback(\n (next: Record<string, string[]>) => {\n if (controlledFilters === undefined) setInternalFilters(next)\n if (!manualPagination && controlledPage === undefined) setInternalPage(1)\n onFiltersChange?.(next)\n },\n [controlledFilters, controlledPage, manualPagination, onFiltersChange]\n )\n\n const setSort = useCallback(\n (next: MDataTableSort | null) => {\n if (controlledSort === undefined) setInternalSort(next)\n if (!manualPagination && controlledPage === undefined) setInternalPage(1)\n onSortChange?.(next)\n },\n [controlledSort, controlledPage, manualPagination, onSortChange]\n )\n\n const rootRef = useRef<HTMLDivElement>(null)\n\n const setPage = useCallback(\n (next: number) => {\n if (controlledPage === undefined) setInternalPage(next)\n onPageChange?.(next)\n // After page change, bring the top of the table back into view so\n // the user does not stay scrolled deep into the previous page's rows.\n rootRef.current?.scrollIntoView({block: 'start', behavior: 'smooth'})\n },\n [controlledPage, onPageChange]\n )\n\n function handleSort(key: string) {\n let next: MDataTableSort | null\n\n if (activeSort?.key === key) {\n next = activeSort.dir === 'asc' ? {key, dir: 'desc'} : null\n } else {\n next = {key, dir: 'asc'}\n }\n\n setSort(next)\n }\n\n function toggleFilterValue(key: string, value: string) {\n const current = filters[key] ?? []\n const next = current.includes(value) ? current.filter((item) => item !== value) : [...current, value]\n setFilters({...filters, [key]: next})\n }\n\n const filterOptions = useMemo(() => {\n const map: Record<string, string[]> = {}\n\n for (const filterKey of filterKeys) {\n if (filterKey.options) {\n map[filterKey.key] = filterKey.options\n continue\n }\n\n const values = new Set<string>()\n\n for (const row of data) {\n const value = getNestedValue(row, filterKey.key)\n if (value != null) values.add(String(value))\n }\n\n map[filterKey.key] = Array.from(values).sort()\n }\n\n return map\n }, [data, filterKeys])\n\n const filtered = useMemo(() => {\n let result: T[] = data\n\n if (!manualSearch && filterable && search.trim()) {\n const query = search.toLowerCase()\n\n if (searchKeys && searchKeys.length > 0) {\n result = result.filter((row) =>\n searchKeys.some((key) => {\n const value = getNestedValue(row, key)\n return value != null && String(value).toLowerCase().includes(query)\n })\n )\n } else {\n result = result.filter((row) =>\n columns.some((col) => {\n if (col.filterable === false) return false\n const value = (row as any)[col.key]\n return value != null && String(value).toLowerCase().includes(query)\n })\n )\n }\n }\n\n if (!manualFilters) {\n for (const [key, selectedValues] of Object.entries(filters)) {\n if (!selectedValues || selectedValues.length === 0) continue\n\n result = result.filter((row) => {\n const value = getNestedValue(row, key)\n return value != null && selectedValues.includes(String(value))\n })\n }\n }\n\n return result\n }, [data, manualSearch, manualFilters, filterable, search, searchKeys, columns, filters])\n\n const sorted = useMemo(() => {\n if (manualSort || !activeSort) return filtered\n\n const col = columns.find((item) => item.key === activeSort.key)\n const sortKeyAllowed = sortKeys.some((item) => item.key === activeSort.key)\n if (!col?.sortable && !sortable && !sortKeyAllowed) return filtered\n\n const dir = activeSort.dir === 'asc' ? 1 : -1\n\n return [...filtered].sort((a, b) => {\n const va = (a as any)[activeSort.key]\n const vb = (b as any)[activeSort.key]\n\n if (va == null && vb == null) return 0\n if (va == null) return 1\n if (vb == null) return -1\n if (typeof va === 'number' && typeof vb === 'number') return (va - vb) * dir\n\n return String(va).localeCompare(String(vb)) * dir\n })\n }, [filtered, activeSort, columns, sortable, sortKeys, manualSort])\n\n const totalItems = manualPagination ? (total ?? sorted.length) : sorted.length\n const totalPages = pagination ? Math.max(1, Math.ceil(totalItems / pageSize)) : 1\n const pageData = useMemo(() => {\n if (!pagination || manualPagination) return sorted\n const start = (page - 1) * pageSize\n return sorted.slice(start, start + pageSize)\n }, [sorted, pagination, manualPagination, page, pageSize])\n\n const allKeys = pageData.map((row, index) => getRowKey(row, (page - 1) * pageSize + index, rowKey))\n const allSelected = allKeys.length > 0 && allKeys.every((key) => selected.includes(key))\n\n function toggleAll() {\n if (allSelected) {\n setSelected(selected.filter((key) => !allKeys.includes(key)))\n } else {\n setSelected([...new Set([...selected, ...allKeys])])\n }\n }\n\n function toggleRow(key: string) {\n setSelected(selected.includes(key) ? selected.filter((item) => item !== key) : [...selected, key])\n }\n\n function handleRowClick(key: string, event: React.MouseEvent) {\n const target = event.target as HTMLElement\n if (target.closest('button, a, [data-no-row-select]')) return\n toggleRow(key)\n }\n\n const openFilter = useCallback(() => {\n setFilterOpen((v) => !v)\n setSortOpen(false)\n }, [])\n\n const openSort = useCallback(() => {\n setSortOpen((v) => !v)\n setFilterOpen(false)\n }, [])\n\n const activeSortMenuItem = sortKeys.find((item) => item.key === activeSort?.key)\n const showToolbar = filterable || filterKeys.length > 0 || sortKeys.length > 0\n\n return (\n <div\n ref={rootRef}\n className={cn('data-table', className)}\n style={scrollOffset !== undefined ? {scrollMarginTop: scrollOffset, ...style} : style}\n {...rest}\n >\n {showToolbar && (\n <div className=\"toolbar\">\n {filterable && (\n <MInputSearch\n className=\"filter-search\"\n size=\"sm\"\n fullWidth\n placeholder={filterPlaceholder ?? viewTexts.searchPlaceholder}\n value={search}\n onChange={(event) => setSearch(event.target.value)}\n onClear={() => setSearch('')}\n />\n )}\n\n {(filterKeys.length > 0 || sortKeys.length > 0) && (\n <div className=\"toolbar-actions\">\n {filterKeys.length > 0 && (\n <>\n <MButton\n ref={filterBtnRef}\n variant=\"outlined\"\n size=\"sm\"\n startIcon={<MFilterIcon />}\n aria-haspopup=\"dialog\"\n aria-expanded={filterOpen}\n aria-controls={filterOpen ? filterPopoverId : undefined}\n onClick={openFilter}\n >\n {viewTexts.filter}\n </MButton>\n <MPopover\n open={filterOpen}\n anchorRef={filterBtnRef}\n onClose={() => setFilterOpen(false)}\n placement=\"bottom-end\"\n role=\"dialog\"\n id={filterPopoverId}\n aria-label={viewTexts.filter}\n initialFocus=\"first\"\n closeOnTabOut\n className=\"data-table-dropdown\"\n >\n {filterKeys.map((filterKey, groupIndex) => (\n <div\n key={filterKey.key}\n className=\"data-table-filter-group\"\n role=\"group\"\n aria-labelledby={`${filterPopoverId}-group-${groupIndex}`}\n >\n <span\n id={`${filterPopoverId}-group-${groupIndex}`}\n className=\"data-table-filter-label\"\n >\n {filterKey.label}\n </span>\n {(filterOptions[filterKey.key] ?? []).map((option) => (\n <div key={option} className=\"data-table-filter-option\">\n <MCheckbox\n size=\"sm\"\n clickEffect=\"none\"\n checked={filters[filterKey.key]?.includes(option) ?? false}\n onChange={() => toggleFilterValue(filterKey.key, option)}\n label={option}\n />\n </div>\n ))}\n </div>\n ))}\n </MPopover>\n </>\n )}\n\n {sortKeys.length > 0 && (\n <>\n <MButton\n ref={sortBtnRef}\n variant=\"outlined\"\n size=\"sm\"\n startIcon={\n activeSort ? (\n activeSort.dir === 'asc' ? (\n <MArrowUpIcon />\n ) : (\n <MArrowDownIcon />\n )\n ) : (\n <MSortIcon />\n )\n }\n aria-haspopup=\"dialog\"\n aria-expanded={sortOpen}\n aria-controls={sortOpen ? sortPopoverId : undefined}\n onClick={openSort}\n >\n {activeSortMenuItem\n ? formatMText(viewTexts.sortBy, {label: activeSortMenuItem.label})\n : viewTexts.sort}\n {activeSortMenuItem && activeSort && (\n <span className=\"data-table-sr-only\">\n {', '}\n {activeSort.dir === 'asc'\n ? viewTexts.sortAscending\n : viewTexts.sortDescending}\n </span>\n )}\n </MButton>\n <MPopover\n open={sortOpen}\n anchorRef={sortBtnRef}\n onClose={() => setSortOpen(false)}\n placement=\"bottom-end\"\n role=\"dialog\"\n id={sortPopoverId}\n aria-label={viewTexts.sort}\n initialFocus=\"first\"\n closeOnTabOut\n className=\"data-table-dropdown\"\n >\n {sortKeys.map((sortItem) => (\n <button\n key={sortItem.key}\n type=\"button\"\n className={cn(\n 'data-table-sort-item',\n activeSort?.key === sortItem.key && 'active'\n )}\n aria-pressed={activeSort?.key === sortItem.key}\n onClick={() => {\n if (activeSort?.key === sortItem.key) {\n setSort({\n key: sortItem.key,\n dir: activeSort.dir === 'asc' ? 'desc' : 'asc',\n })\n } else {\n setSort({key: sortItem.key, dir: 'asc'})\n }\n }}\n >\n {sortItem.label}\n {activeSort?.key === sortItem.key && (\n <span className=\"data-table-sort-dir\">\n {activeSort.dir === 'asc' ? (\n <MArrowUpIcon className=\"data-table-sort-icon\" />\n ) : (\n <MArrowDownIcon className=\"data-table-sort-icon\" />\n )}\n <span className=\"data-table-sr-only\">\n {', '}\n {activeSort.dir === 'asc'\n ? viewTexts.sortAscending\n : viewTexts.sortDescending}\n </span>\n </span>\n )}\n </button>\n ))}\n </MPopover>\n </>\n )}\n </div>\n )}\n </div>\n )}\n <div className={cn('data-table-body', loading && 'loading')}>\n <div className=\"scroll\" aria-busy={loading || undefined}>\n <table className={cn('root', striped && 'striped', compact && 'compact')}>\n <thead className={cn('head', stickyHeader && 'sticky')}>\n <tr>\n {selectable && (\n <th className=\"th check-col\" scope=\"col\">\n <MCheckbox\n checked={allSelected}\n onChange={toggleAll}\n size=\"sm\"\n clickEffect=\"none\"\n label={\n <span className=\"data-table-sr-only\">{tableTexts.selectAllRows}</span>\n }\n />\n </th>\n )}\n {columns.map((col) => {\n const isSortable = col.sortable ?? sortable\n const isSorted = activeSort?.key === col.key\n\n return (\n <th\n key={col.key}\n scope=\"col\"\n aria-sort={\n isSorted\n ? activeSort!.dir === 'asc'\n ? 'ascending'\n : 'descending'\n : undefined\n }\n className={cn(\n 'th',\n isSortable && 'sortable',\n isSorted && `sorted-${activeSort!.dir}`\n )}\n style={{\n width: col.width,\n textAlign: col.align,\n }}\n onClick={isSortable ? () => handleSort(col.key) : undefined}\n >\n {isSortable ? (\n // The header cell owns the click (so its padding sorts too);\n // the button makes the header reachable and operable by keyboard.\n <button type=\"button\" className=\"th-sort-button\">\n <span className=\"th-content\">\n {col.label}\n <span className=\"sort-icon\">\n {isSorted ? (\n activeSort!.dir === 'asc' ? (\n <MArrowUpIcon aria-hidden=\"true\" />\n ) : (\n <MArrowDownIcon aria-hidden=\"true\" />\n )\n ) : (\n <MArrowUpDownIcon aria-hidden=\"true\" />\n )}\n </span>\n </span>\n </button>\n ) : (\n <span className=\"th-content\">{col.label}</span>\n )}\n </th>\n )\n })}\n </tr>\n </thead>\n <tbody>\n {pageData.length === 0 && (\n <tr>\n <td className=\"empty\" colSpan={columns.length + (selectable ? 1 : 0)}>\n {emptyText ?? tableTexts.empty}\n </td>\n </tr>\n )}\n {pageData.map((row, index) => {\n const key = getRowKey(row, (page - 1) * pageSize + index, rowKey)\n const isSelected = selected.includes(key)\n\n return (\n <tr\n key={key}\n className={cn('row', isSelected && 'selected', selectable && 'selectable')}\n onClick={selectable ? (event) => handleRowClick(key, event) : undefined}\n >\n {selectable && (\n <td className=\"td check-col\">\n <MCheckbox\n checked={isSelected}\n onChange={() => {}}\n size=\"sm\"\n clickEffect=\"none\"\n label={\n <span className=\"data-table-sr-only\">\n {formatMText(tableTexts.selectRow, {\n index: (page - 1) * pageSize + index + 1,\n })}\n </span>\n }\n />\n </td>\n )}\n {columns.map((col) => (\n <td key={col.key} className=\"td\" style={{textAlign: col.align}}>\n {col.render\n ? col.render(\n (row as any)[col.key],\n row,\n (page - 1) * pageSize + index\n )\n : (row as any)[col.key]}\n </td>\n ))}\n </tr>\n )\n })}\n </tbody>\n </table>\n </div>\n {loading && (\n <div className=\"data-table-loading\">\n <MLoader center={false} minHeight=\"auto\" label={loadingLabel ?? commonTexts.loading} />\n </div>\n )}\n </div>\n {pagination && totalPages > 1 && (\n <MPagination total={totalItems} page={page} pageSize={pageSize} onChange={setPage} />\n )}\n </div>\n )\n}\n","import type {MTaskListProps} from './MTaskList.types'\nimport {MCheckbox} from '../../controls'\nimport {cn} from '../../../utils/cn'\nimport './MTaskList.css'\n\n// Render an interactive checklist with toggleable task items.\nexport function MTaskList({\n items,\n color = 'primary',\n size = 'md',\n strikethrough = true,\n onChange,\n className,\n ...rest\n}: MTaskListProps) {\n return (\n <div className={cn('task list', `color-${color}`, `size-${size}`, className)} role=\"list\" {...rest}>\n {items.map((item) => (\n <div\n key={item.id}\n className={cn('task item', item.checked && 'checked', item.disabled && 'disabled')}\n role=\"listitem\"\n onClick={(event) => {\n if (item.disabled) return\n if ((event.target as HTMLElement).closest('.checkbox')) return\n onChange?.(item.id, !(item.checked ?? false))\n }}\n >\n <MCheckbox\n className=\"task control\"\n checked={item.checked ?? false}\n color={color}\n size={size}\n disabled={item.disabled}\n onChange={(e) => onChange?.(item.id, e.target.checked)}\n clickEffect=\"ripple\"\n />\n <span className={cn('task label', item.checked && strikethrough && 'done')}>{item.label}</span>\n </div>\n ))}\n </div>\n )\n}\n","import {Fragment, useId, useMemo, useRef, useState, type CSSProperties, type KeyboardEvent, type ReactNode} from 'react'\n\nimport {MStack} from '../../layout'\nimport {MTooltip} from '../../overlays'\nimport {MHeading, MSubText, MText} from '../../typography'\nimport {cn} from '../../../utils/cn'\nimport {formatMText, useMWeekGridTexts} from '../../../i18n/frameworkTexts'\nimport {isRtlElement} from '../../../utils/radioGroupKeys'\n\nimport type {MWeekGridBand, MWeekGridCell, MWeekGridCellContext, MWeekGridProps} from './MWeekGrid.types'\n\nimport './MWeekGrid.css'\n\nconst DEFAULT_DAYS = 7\nconst DEFAULT_SLOTS = 24\n\nconst ALL_BANDS: MWeekGridBand[] = [0, 1, 2, 3]\n\n// Largest integer max for which the reachable bands are enumerated value by value.\nconst ENUMERABLE_MAX = 100\n\nfunction densityBand(value: number, max: number): MWeekGridBand {\n if (max <= 0 || value <= 0) return 0\n const ratio = value / max\n if (ratio >= 0.66) return 3\n if (ratio >= 0.33) return 2\n return 1\n}\n\n/**\n * Bands a cell can actually land in. On an integer grid only `1..max` can occur,\n * so e.g. `max = 1` (on/off data) reaches bands 0 and 3 only. Fractional data\n * or a large max can hit every band.\n */\nfunction reachableBands(grid: number[][], max: number): MWeekGridBand[] {\n if (max <= 0) return [0]\n const integral = Number.isInteger(max) && grid.every((row) => row.every((value) => Number.isInteger(value)))\n if (!integral || max > ENUMERABLE_MAX) return ALL_BANDS\n const bands = new Set<MWeekGridBand>([0])\n for (let value = 1; value <= max; value += 1) bands.add(densityBand(value, max))\n return ALL_BANDS.filter((band) => bands.has(band))\n}\n\nfunction buildGrid(data: MWeekGridProps['data'], days: number, slots: number): number[][] {\n const grid: number[][] = Array.from({length: days}, () => Array.from({length: slots}, () => 0))\n\n if (Array.isArray(data) && data.length > 0 && Array.isArray(data[0])) {\n const matrix = data as number[][]\n for (let day = 0; day < Math.min(days, matrix.length); day += 1) {\n const row = matrix[day]\n if (!row) continue\n for (let slot = 0; slot < Math.min(slots, row.length); slot += 1) {\n grid[day][slot] = row[slot] ?? 0\n }\n }\n return grid\n }\n\n for (const cell of data as MWeekGridCell[]) {\n if (cell.day < 0 || cell.day >= days) continue\n if (cell.slot < 0 || cell.slot >= slots) continue\n grid[cell.day][cell.slot] = cell.value\n }\n return grid\n}\n\nfunction resolveMax(grid: number[][], max?: number): number {\n if (typeof max === 'number') return max\n let best = 0\n for (const row of grid) {\n for (const value of row) {\n if (value > best) best = value\n }\n }\n return best\n}\n\nfunction resolveDayLabels(\n days: number,\n weekStart: 0 | 1,\n defaultLabelsFromSunday: readonly string[],\n custom?: string[]\n): {label: string; calendarDay: number}[] {\n if (custom && custom.length >= days) {\n return Array.from({length: days}, (_, index) => ({label: custom[index], calendarDay: index}))\n }\n\n if (days === 7) {\n const order = weekStart === 1 ? [1, 2, 3, 4, 5, 6, 0] : [0, 1, 2, 3, 4, 5, 6]\n return order.map((calendarDay) => ({\n label: defaultLabelsFromSunday[calendarDay],\n calendarDay,\n }))\n }\n\n return Array.from({length: days}, (_, index) => ({\n label: String(index + 1),\n calendarDay: index,\n }))\n}\n\nfunction resolveSlotLabels(slots: number, custom?: string[]): string[] {\n if (custom && custom.length >= slots) return custom.slice(0, slots)\n if (slots === 24) {\n return Array.from({length: 24}, (_, hour) => hour.toString().padStart(2, '0'))\n }\n return Array.from({length: slots}, (_, slot) => String(slot + 1))\n}\n\n/**\n * Next cell for an APG grid key, or `null` when the key does not move.\n * Rows and columns clamp at the edges (no wrapping), as in the APG data grid.\n */\nfunction gridKeyTarget(\n key: string,\n ctrl: boolean,\n row: number,\n col: number,\n rowCount: number,\n colCount: number,\n rtl: boolean\n): {row: number; col: number} | null {\n const lastRow = rowCount - 1\n const lastCol = colCount - 1\n switch (key) {\n case 'ArrowRight':\n return {row, col: rtl ? Math.max(col - 1, 0) : Math.min(col + 1, lastCol)}\n case 'ArrowLeft':\n return {row, col: rtl ? Math.min(col + 1, lastCol) : Math.max(col - 1, 0)}\n case 'ArrowDown':\n return {row: Math.min(row + 1, lastRow), col}\n case 'ArrowUp':\n return {row: Math.max(row - 1, 0), col}\n case 'Home':\n return ctrl ? {row: 0, col: 0} : {row, col: 0}\n case 'End':\n return ctrl ? {row: lastRow, col: lastCol} : {row, col: lastCol}\n case 'PageUp':\n return {row: 0, col}\n case 'PageDown':\n return {row: lastRow, col}\n default:\n return null\n }\n}\n\nfunction defaultRenderCell(ctx: MWeekGridCellContext): ReactNode {\n return ctx.value > 0 ? ctx.value : ''\n}\n\nfunction defaultRenderTooltip(ctx: MWeekGridCellContext, dayLabel: string, slotLabel: string): ReactNode {\n return `${dayLabel} ${slotLabel} — ${ctx.value}`\n}\n\n/**\n * Week-grid heatmap — rows = days, columns = hours (or any fixed slot range).\n * Cells colour-shade by density (four discrete bands) and accept tooltips,\n * custom renderers and click handlers. Common use cases: availability /\n * attendance maps, booking density, opening hours, peak-load views.\n */\nexport function MWeekGrid({\n data,\n max,\n days = DEFAULT_DAYS,\n slots = DEFAULT_SLOTS,\n dayLabels,\n slotLabels,\n weekStart = 1,\n color = 'warning',\n title,\n description,\n hint,\n peakLabel,\n renderCell,\n renderTooltip,\n onCellClick,\n showLegend = true,\n bandLabels,\n legendUnit,\n rowLabelWidth = 48,\n cellHeight = 24,\n cellMinWidth = 24,\n interactive,\n className,\n style,\n ...rest\n}: MWeekGridProps) {\n // Grid mode: one tab stop and APG grid arrow keys instead of a tab stop per cell.\n const gridMode = interactive ?? !!onCellClick\n const legacyButtons = !gridMode && !!onCellClick\n const [activeCell, setActiveCell] = useState({row: 0, col: 0})\n const matrixRef = useRef<HTMLDivElement>(null)\n const titleId = `${useId()}-title`\n const grid = useMemo(() => buildGrid(data, days, slots), [data, days, slots])\n const resolvedMax = useMemo(() => resolveMax(grid, max), [grid, max])\n const cols = useMemo(() => resolveSlotLabels(slots, slotLabels), [slots, slotLabels])\n const legendBands = useMemo(() => reachableBands(grid, resolvedMax), [grid, resolvedMax])\n const texts = useMWeekGridTexts()\n const rows = useMemo(\n () => resolveDayLabels(days, weekStart, texts.days, dayLabels),\n [days, weekStart, texts.days, dayLabels]\n )\n const resolvedBandLabels = bandLabels ?? texts.bands\n\n const matrixStyle: CSSProperties = {\n gridTemplateColumns: `${rowLabelWidth}px repeat(${slots}, minmax(${cellMinWidth}px, 1fr))`,\n }\n\n const wrapperStyle: CSSProperties = {\n ['--mineral-week-grid-color' as never]: `var(--mineral-${color})`,\n ...style,\n }\n\n const hasHeader = title != null || description != null || hint != null || peakLabel != null\n const rowCount = rows.length\n const colCount = cols.length\n const active = {\n row: Math.min(activeCell.row, Math.max(rowCount - 1, 0)),\n col: Math.min(activeCell.col, Math.max(colCount - 1, 0)),\n }\n const labelledByTitle = gridMode && typeof title === 'string' && !rest['aria-label'] && !rest['aria-labelledby']\n\n function focusCell(row: number, col: number) {\n setActiveCell({row, col})\n matrixRef.current?.querySelector<HTMLElement>(`[data-week-grid-cell=\"${row}-${col}\"]`)?.focus()\n }\n\n function handleGridKeyDown(\n event: KeyboardEvent<HTMLDivElement>,\n row: number,\n col: number,\n ctx: MWeekGridCellContext\n ) {\n if (event.key === 'Enter' || event.key === ' ') {\n if (!onCellClick) return\n event.preventDefault()\n onCellClick(ctx)\n return\n }\n const rtl = isRtlElement(matrixRef.current)\n const target = gridKeyTarget(event.key, event.ctrlKey || event.metaKey, row, col, rowCount, colCount, rtl)\n if (!target) return\n event.preventDefault()\n focusCell(target.row, target.col)\n }\n\n return (\n <div className={cn('mineral-week-grid', className)} style={wrapperStyle} {...rest}>\n {hasHeader && (\n <MStack spacing={'xs'}>\n <div className={'mineral-week-grid__title-row'}>\n <div className={'mineral-week-grid__title-text'}>\n {title != null &&\n (typeof title === 'string' ? (\n <MHeading level={5} id={labelledByTitle ? titleId : undefined}>\n {title}\n </MHeading>\n ) : (\n title\n ))}\n {description != null &&\n (typeof description === 'string' ? (\n <MSubText tone={'muted'}>{description}</MSubText>\n ) : (\n description\n ))}\n </div>\n {peakLabel != null && (\n <MText size={'sm'} tone={'muted'}>\n {peakLabel}\n </MText>\n )}\n </div>\n {hint != null && (\n <MSubText size={'xs'} tone={'muted'}>\n {hint}\n </MSubText>\n )}\n </MStack>\n )}\n\n <div\n ref={matrixRef}\n className={cn('mineral-week-grid__matrix', gridMode && 'mineral-week-grid__matrix--grid')}\n style={matrixStyle}\n role={gridMode ? 'grid' : undefined}\n aria-labelledby={labelledByTitle ? titleId : undefined}\n >\n <GridRow enabled={gridMode}>\n <div role={gridMode ? 'columnheader' : undefined} />\n {cols.map((label, slot) => (\n <div\n key={`col-${slot}`}\n className={'mineral-week-grid__col-header'}\n role={gridMode ? 'columnheader' : undefined}\n >\n <MSubText size={'xs'} tone={'muted'}>\n {label}\n </MSubText>\n </div>\n ))}\n </GridRow>\n\n {rows.map(({label: dayLabel, calendarDay}, rowIndex) => (\n <GridRow enabled={gridMode} key={`row-${rowIndex}-${calendarDay}`}>\n <div className={'mineral-week-grid__row-label'} role={gridMode ? 'rowheader' : undefined}>\n <MSubText size={'xs'} tone={'muted'}>\n {dayLabel}\n </MSubText>\n </div>\n {cols.map((slotLabel, slot) => {\n const value = grid[calendarDay]?.[slot] ?? 0\n const band = densityBand(value, resolvedMax)\n const ctx: MWeekGridCellContext = {day: calendarDay, slot, value, band}\n const cellContent = renderCell ? renderCell(ctx) : defaultRenderCell(ctx)\n const tooltipContent = renderTooltip\n ? renderTooltip(ctx)\n : defaultRenderTooltip(ctx, dayLabel, slotLabel)\n\n const cellClasses = cn(\n 'mineral-week-grid__cell',\n `mineral-week-grid__cell--band-${band}`,\n onCellClick && 'mineral-week-grid__cell--interactive',\n !onCellClick && tooltipContent != null && 'mineral-week-grid__cell--tooltip',\n gridMode && 'mineral-week-grid__cell--grid'\n )\n const isActive = active.row === rowIndex && active.col === slot\n\n const handleKeyDown = gridMode\n ? (event: KeyboardEvent<HTMLDivElement>) =>\n handleGridKeyDown(event, rowIndex, slot, ctx)\n : onCellClick\n ? (event: KeyboardEvent<HTMLDivElement>) => {\n if (event.key !== 'Enter' && event.key !== ' ') return\n event.preventDefault()\n onCellClick(ctx)\n }\n : undefined\n\n const cellNode = (\n <div\n className={cellClasses}\n style={{height: cellHeight}}\n onClick={onCellClick ? () => onCellClick(ctx) : undefined}\n onKeyDown={handleKeyDown}\n onFocus={gridMode ? () => setActiveCell({row: rowIndex, col: slot}) : undefined}\n data-week-grid-cell={gridMode ? `${rowIndex}-${slot}` : undefined}\n role={gridMode ? 'gridcell' : legacyButtons ? 'button' : undefined}\n tabIndex={gridMode ? (isActive ? 0 : -1) : legacyButtons ? 0 : undefined}\n aria-label={\n gridMode || legacyButtons\n ? formatMText(texts.cellLabel, {day: dayLabel, slot: slotLabel, value})\n : undefined\n }\n >\n {cellContent}\n </div>\n )\n\n if (tooltipContent == null) {\n return <Fragment key={`cell-${rowIndex}-${slot}`}>{cellNode}</Fragment>\n }\n\n return (\n <MTooltip key={`cell-${rowIndex}-${slot}`} content={tooltipContent}>\n {cellNode}\n </MTooltip>\n )\n })}\n </GridRow>\n ))}\n </div>\n\n {showLegend && (\n <div className={'mineral-week-grid__legend'}>\n <MSubText size={'xs'} tone={'muted'}>\n {formatMText(texts.scale, {\n min: 0,\n max: resolvedMax,\n unit: legendUnit ? ` ${legendUnit}` : '',\n })}\n </MSubText>\n <div className={'mineral-week-grid__legend-bands'}>\n {legendBands.map((band) => (\n <div key={`legend-${band}`} className={'mineral-week-grid__legend-band'}>\n <span\n className={cn(\n 'mineral-week-grid__legend-swatch',\n `mineral-week-grid__cell--band-${band}`\n )}\n />\n <MSubText size={'xs'} tone={'muted'}>\n {resolvedBandLabels[band]}\n </MSubText>\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n )\n}\n\n/** A `role=\"row\"` wrapper in grid mode (`display: contents`, so the CSS grid is untouched). */\nfunction GridRow({enabled, children}: {enabled: boolean; children: ReactNode}) {\n if (!enabled) return <>{children}</>\n return (\n <div role={'row'} className={'mineral-week-grid__row'}>\n {children}\n </div>\n )\n}\n","import {useCallback, useEffect, useMemo, useRef, useState} from 'react'\n\nimport type {MDataTableSort} from './MDataTable'\n\n/**\n * Generic query shape that backend lists can satisfy. Drop-in adapter between\n * `useMTable` and the API call. The framework does not assume axios/fetch/swr —\n * the consumer plugs whatever fetcher they want.\n */\nexport interface MTableQuery {\n page?: number\n perPage?: number\n search?: string\n filters?: Record<string, string[]>\n sort?: MDataTableSort | null\n}\n\n/**\n * Standard list response. Mirrors the most common server convention\n * (data + meta with pagination total). Adapt your fetcher to this shape if your\n * backend uses different envelope keys.\n */\nexport interface MTableResponse<T> {\n data: T[]\n meta: {\n total: number\n page: number\n perPage: number\n totalPages: number\n }\n}\n\nexport type MTableFetcher<T> = (query: MTableQuery, signal?: AbortSignal) => Promise<MTableResponse<T>>\n\nexport interface MTableOptions {\n perPage?: number\n initialPage?: number\n initialSearch?: string\n initialFilters?: Record<string, string[]>\n initialSort?: MDataTableSort | null\n /** Bump to force a refetch (e.g. after a mutation invalidates the list). */\n invalidationKey?: number | string\n}\n\nexport interface MTableProps<T> {\n data: T[]\n total: number\n page: number\n onPageChange: (page: number) => void\n sort: MDataTableSort | null\n onSortChange: (sort: MDataTableSort | null) => void\n search: string\n onSearchChange: (search: string) => void\n filters: Record<string, string[]>\n onFiltersChange: (filters: Record<string, string[]>) => void\n manualSearch: true\n manualFilters: true\n manualSort: true\n manualPagination: true\n pageSize: number\n /** Mirrors `isLoading`; drives `MDataTable`'s loading scrim when `tableProps` is spread. */\n loading: boolean\n}\n\nexport interface MTableHandle<T> {\n /** Spread directly onto `<MDataTable>` — wires up all manual* + state props. */\n tableProps: MTableProps<T>\n isLoading: boolean\n error: Error | null\n /** Trigger a fresh fetch with current query. */\n refetch: () => void\n}\n\n/**\n * Adapter hook that bridges a fetcher returning `MTableResponse<T>` with\n * `MDataTable` in manual mode. Owns the search / filters / sort / page state,\n * debounces nothing on its own (fetcher decides), and aborts in-flight\n * requests when the query changes. Spread `tableProps` onto your table.\n */\nexport function useMTable<T>(fetcher: MTableFetcher<T>, options: MTableOptions = {}): MTableHandle<T> {\n const {\n perPage = 20,\n initialPage = 1,\n initialSearch = '',\n initialFilters,\n initialSort = null,\n invalidationKey,\n } = options\n\n const [data, setData] = useState<T[]>([])\n const [total, setTotal] = useState(0)\n const [page, setPage] = useState(initialPage)\n const [search, setSearch] = useState(initialSearch)\n const [filters, setFilters] = useState<Record<string, string[]>>(initialFilters ?? {})\n const [sort, setSort] = useState<MDataTableSort | null>(initialSort)\n const [isLoading, setIsLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n const [bump, setBump] = useState(0)\n\n const fetcherRef = useRef(fetcher)\n fetcherRef.current = fetcher\n\n const query = useMemo<MTableQuery>(\n () => ({page, perPage, search, filters, sort}),\n [page, perPage, search, filters, sort]\n )\n\n useEffect(() => {\n const controller = typeof AbortController !== 'undefined' ? new AbortController() : undefined\n let cancelled = false\n setIsLoading(true)\n setError(null)\n fetcherRef\n .current(query, controller?.signal)\n .then((response) => {\n if (cancelled) return\n setData(response.data)\n setTotal(response.meta.total)\n })\n .catch((err: unknown) => {\n if (cancelled) return\n if (err instanceof Error && err.name === 'AbortError') return\n setError(err instanceof Error ? err : new Error(String(err)))\n })\n .finally(() => {\n if (!cancelled) setIsLoading(false)\n })\n return () => {\n cancelled = true\n controller?.abort()\n }\n }, [query, invalidationKey, bump])\n\n // Reset to page 1 when search/filters/sort change.\n const handleSearchChange = useCallback((next: string) => {\n setSearch(next)\n setPage(1)\n }, [])\n const handleFiltersChange = useCallback((next: Record<string, string[]>) => {\n setFilters(next)\n setPage(1)\n }, [])\n const handleSortChange = useCallback((next: MDataTableSort | null) => {\n setSort(next)\n setPage(1)\n }, [])\n\n const refetch = useCallback(() => setBump((value) => value + 1), [])\n\n const tableProps: MTableProps<T> = {\n data,\n total,\n page,\n onPageChange: setPage,\n sort,\n onSortChange: handleSortChange,\n search,\n onSearchChange: handleSearchChange,\n filters,\n onFiltersChange: handleFiltersChange,\n manualSearch: true,\n manualFilters: true,\n manualSort: true,\n manualPagination: true,\n pageSize: perPage,\n loading: isLoading,\n }\n\n return {tableProps, isLoading, error, refetch}\n}\n","import {useCallback, useEffect, useMemo, useRef, useState} from 'react'\n\nimport type {MCardGridSort} from '../cards/MCardGrid'\nimport type {MTableQuery, MTableResponse, MTableFetcher, MTableOptions} from './useMTable'\n\n/**\n * Card-grid analog of `useMTable`. Same fetcher-agnostic pattern; returns props\n * spreadable onto `<MCardGrid>` in manual mode. Note that `MCardGridSort` uses\n * `direction` (vs `MDataTableSort.dir`) — convert if you reuse a fetcher.\n */\nexport interface MCardGridProps<T> {\n items: T[]\n total: number\n page: number\n onPageChange: (page: number) => void\n sort: MCardGridSort<T> | null\n onSortChange: (sort: MCardGridSort<T> | null) => void\n search: string\n onSearchChange: (search: string) => void\n filters: Record<string, string[]>\n onFiltersChange: (filters: Record<string, string[]>) => void\n manualSearch: true\n manualFilters: true\n manualSort: true\n manualPagination: true\n pageSize: number\n /** Mirrors `isLoading`; drives `MCardGrid`'s loading scrim when `gridProps` is spread. */\n loading: boolean\n}\n\nexport interface MCardGridHandle<T> {\n /** Spread directly onto `<MCardGrid>`. */\n gridProps: MCardGridProps<T>\n isLoading: boolean\n error: Error | null\n refetch: () => void\n}\n\nfunction toTableSort<T>(sort: MCardGridSort<T> | null): MTableQuery['sort'] {\n if (!sort) return null\n return {key: sort.key, dir: sort.direction}\n}\n\n/**\n * Adapter hook for `MCardGrid` in manual mode. Owns search / filters / sort /\n * page state, calls a generic `MTableFetcher`, returns `gridProps` to spread.\n */\nexport function useMCardGrid<T>(fetcher: MTableFetcher<T>, options: MTableOptions = {}): MCardGridHandle<T> {\n const {\n perPage = 12,\n initialPage = 1,\n initialSearch = '',\n initialFilters,\n initialSort = null,\n invalidationKey,\n } = options\n\n const [items, setItems] = useState<T[]>([])\n const [total, setTotal] = useState(0)\n const [page, setPage] = useState(initialPage)\n const [search, setSearch] = useState(initialSearch)\n const [filters, setFilters] = useState<Record<string, string[]>>(initialFilters ?? {})\n const [sort, setSort] = useState<MCardGridSort<T> | null>(\n (initialSort as MCardGridSort<T> | null | undefined) ?? null\n )\n const [isLoading, setIsLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n const [bump, setBump] = useState(0)\n\n const fetcherRef = useRef(fetcher)\n fetcherRef.current = fetcher\n\n const query = useMemo<MTableQuery>(\n () => ({page, perPage, search, filters, sort: toTableSort(sort)}),\n [page, perPage, search, filters, sort]\n )\n\n useEffect(() => {\n const controller = typeof AbortController !== 'undefined' ? new AbortController() : undefined\n let cancelled = false\n setIsLoading(true)\n setError(null)\n fetcherRef\n .current(query, controller?.signal)\n .then((response: MTableResponse<T>) => {\n if (cancelled) return\n setItems(response.data)\n setTotal(response.meta.total)\n })\n .catch((err: unknown) => {\n if (cancelled) return\n if (err instanceof Error && err.name === 'AbortError') return\n setError(err instanceof Error ? err : new Error(String(err)))\n })\n .finally(() => {\n if (!cancelled) setIsLoading(false)\n })\n return () => {\n cancelled = true\n controller?.abort()\n }\n }, [query, invalidationKey, bump])\n\n const handleSearchChange = useCallback((next: string) => {\n setSearch(next)\n setPage(1)\n }, [])\n const handleFiltersChange = useCallback((next: Record<string, string[]>) => {\n setFilters(next)\n setPage(1)\n }, [])\n const handleSortChange = useCallback((next: MCardGridSort<T> | null) => {\n setSort(next)\n setPage(1)\n }, [])\n\n const refetch = useCallback(() => setBump((value) => value + 1), [])\n\n const gridProps: MCardGridProps<T> = {\n items,\n total,\n page,\n onPageChange: setPage,\n sort,\n onSortChange: handleSortChange,\n search,\n onSearchChange: handleSearchChange,\n filters,\n onFiltersChange: handleFiltersChange,\n manualSearch: true,\n manualFilters: true,\n manualSort: true,\n manualPagination: true,\n pageSize: perPage,\n loading: isLoading,\n }\n\n return {gridProps, isLoading, error, refetch}\n}\n"],"mappings":"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"}