@banzamel/mineralui 2.4.0 → 2.4.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 (227) hide show
  1. package/README.md +1 -1
  2. package/dist/{MAvatar-xI5aZ-bP.cjs → MAvatar-Capz5Gbc.cjs} +2 -2
  3. package/dist/{MAvatar-xI5aZ-bP.cjs.map → MAvatar-Capz5Gbc.cjs.map} +1 -1
  4. package/dist/{MButton-CMbmWmMI.cjs → MButton-sTKnano6.cjs} +2 -2
  5. package/dist/{MButton-CMbmWmMI.cjs.map → MButton-sTKnano6.cjs.map} +1 -1
  6. package/dist/{MButtonGroup-agnKWUPy.cjs → MButtonGroup-iPv14c0V.cjs} +2 -2
  7. package/dist/{MButtonGroup-agnKWUPy.cjs.map → MButtonGroup-iPv14c0V.cjs.map} +1 -1
  8. package/dist/{MCard-CADu7UUA.cjs → MCard-DK-_FkpE.cjs} +2 -2
  9. package/dist/{MCard-CADu7UUA.cjs.map → MCard-DK-_FkpE.cjs.map} +1 -1
  10. package/dist/{MCheckbox-stBujis6.cjs → MCheckbox-CIX7wp41.cjs} +2 -2
  11. package/dist/{MCheckbox-stBujis6.cjs.map → MCheckbox-CIX7wp41.cjs.map} +1 -1
  12. package/dist/{MConflictIllustration-Drsm8_8C.js → MConflictIllustration-3K0lCAsD.js} +3 -3
  13. package/dist/MConflictIllustration-3K0lCAsD.js.map +1 -0
  14. package/dist/MConflictIllustration-BuK6cSsc.cjs +2 -0
  15. package/dist/MConflictIllustration-BuK6cSsc.cjs.map +1 -0
  16. package/dist/{MDetailList-CQ2sJ7Jl.cjs → MDetailList-Ce7KzUKC.cjs} +2 -2
  17. package/dist/{MDetailList-CQ2sJ7Jl.cjs.map → MDetailList-Ce7KzUKC.cjs.map} +1 -1
  18. package/dist/{MDropdownMenu-DAzieAOs.cjs → MDropdownMenu-B_QWQhxy.cjs} +2 -2
  19. package/dist/{MDropdownMenu-DAzieAOs.cjs.map → MDropdownMenu-B_QWQhxy.cjs.map} +1 -1
  20. package/dist/{MDropdownMenu-B7RR8d8x.js → MDropdownMenu-C4CuKMRZ.js} +1 -1
  21. package/dist/{MDropdownMenu-B7RR8d8x.js.map → MDropdownMenu-C4CuKMRZ.js.map} +1 -1
  22. package/dist/{MGrid-LHi7TY5J.cjs → MGrid-fTx6wFq_.cjs} +2 -2
  23. package/dist/{MGrid-LHi7TY5J.cjs.map → MGrid-fTx6wFq_.cjs.map} +1 -1
  24. package/dist/{MHeading-7yt1C6oS.cjs → MHeading-KDSpnCof.cjs} +2 -2
  25. package/dist/{MHeading-7yt1C6oS.cjs.map → MHeading-KDSpnCof.cjs.map} +1 -1
  26. package/dist/{MI18nProvider-Cx4ZaFtv.cjs → MI18nProvider-DXRbB0VY.cjs} +2 -2
  27. package/dist/{MI18nProvider-Cx4ZaFtv.cjs.map → MI18nProvider-DXRbB0VY.cjs.map} +1 -1
  28. package/dist/{MInput-BSeWCsPi.cjs → MInput-CGl2Q-rM.cjs} +2 -2
  29. package/dist/{MInput-BSeWCsPi.cjs.map → MInput-CGl2Q-rM.cjs.map} +1 -1
  30. package/dist/{MInputCVC-CtHPCx_r.js → MInputCVC-Blv5PeyS.js} +2 -2
  31. package/dist/{MInputCVC-CtHPCx_r.js.map → MInputCVC-Blv5PeyS.js.map} +1 -1
  32. package/dist/{MInputCVC-rNs8w4gH.cjs → MInputCVC-lAFKTV6y.cjs} +2 -2
  33. package/dist/{MInputCVC-rNs8w4gH.cjs.map → MInputCVC-lAFKTV6y.cjs.map} +1 -1
  34. package/dist/{MInputSearch-BfPPgEGZ.cjs → MInputSearch-BZDnbFB4.cjs} +2 -2
  35. package/dist/{MInputSearch-BfPPgEGZ.cjs.map → MInputSearch-BZDnbFB4.cjs.map} +1 -1
  36. package/dist/{MKbd-C6XHWlmE.cjs → MKbd-DqMnZ7Iv.cjs} +2 -2
  37. package/dist/{MKbd-C6XHWlmE.cjs.map → MKbd-DqMnZ7Iv.cjs.map} +1 -1
  38. package/dist/{MLink-CbaDlP5I.cjs → MLink-U24G6KJj.cjs} +2 -2
  39. package/dist/{MLink-CbaDlP5I.cjs.map → MLink-U24G6KJj.cjs.map} +1 -1
  40. package/dist/{MLoader-DELAIhz5.cjs → MLoader-CvFIvytw.cjs} +2 -2
  41. package/dist/{MLoader-DELAIhz5.cjs.map → MLoader-CvFIvytw.cjs.map} +1 -1
  42. package/dist/{MPagination-CgmNEAZX.js → MPagination-BkvOEZpp.js} +1 -1
  43. package/dist/{MPagination-CgmNEAZX.js.map → MPagination-BkvOEZpp.js.map} +1 -1
  44. package/dist/{MPagination-C2lpvPqC.cjs → MPagination-DgQta29Q.cjs} +2 -2
  45. package/dist/{MPagination-C2lpvPqC.cjs.map → MPagination-DgQta29Q.cjs.map} +1 -1
  46. package/dist/{MPopover-DI_7niwe.cjs → MPopover-C-e1CoV0.cjs} +2 -2
  47. package/dist/{MPopover-DI_7niwe.cjs.map → MPopover-C-e1CoV0.cjs.map} +1 -1
  48. package/dist/{MPortal-C9Ucq8Um.cjs → MPortal-DUSIuINN.cjs} +2 -2
  49. package/dist/{MPortal-C9Ucq8Um.cjs.map → MPortal-DUSIuINN.cjs.map} +1 -1
  50. package/dist/{MSimpleGrid-K-8Qg9em.cjs → MSimpleGrid-BzlIitcJ.cjs} +2 -2
  51. package/dist/{MSimpleGrid-K-8Qg9em.cjs.map → MSimpleGrid-BzlIitcJ.cjs.map} +1 -1
  52. package/dist/{MSkeleton-DgU8aktI.cjs → MSkeleton-BoFpowFU.cjs} +2 -2
  53. package/dist/{MSkeleton-DgU8aktI.cjs.map → MSkeleton-BoFpowFU.cjs.map} +1 -1
  54. package/dist/{MSlider-0ApojrDC.cjs → MSlider-BTDBqF8t.cjs} +2 -2
  55. package/dist/{MSlider-0ApojrDC.cjs.map → MSlider-BTDBqF8t.cjs.map} +1 -1
  56. package/dist/{MStack-BOOciEts.cjs → MStack-B3Ldqsc-.cjs} +2 -2
  57. package/dist/{MStack-BOOciEts.cjs.map → MStack-B3Ldqsc-.cjs.map} +1 -1
  58. package/dist/{MSubText-WixraICV.cjs → MSubText-47PsgE8T.cjs} +2 -2
  59. package/dist/{MSubText-WixraICV.cjs.map → MSubText-47PsgE8T.cjs.map} +1 -1
  60. package/dist/{MSurface-CF8BFFn4.cjs → MSurface-QYEygc_0.cjs} +2 -2
  61. package/dist/{MSurface-CF8BFFn4.cjs.map → MSurface-QYEygc_0.cjs.map} +1 -1
  62. package/dist/{MTag-CgXh2PQC.cjs → MTag-BjV-dXkk.cjs} +2 -2
  63. package/dist/{MTag-CgXh2PQC.cjs.map → MTag-BjV-dXkk.cjs.map} +1 -1
  64. package/dist/{MText-CDDEGjBx.cjs → MText-Dni707tS.cjs} +2 -2
  65. package/dist/{MText-CDDEGjBx.cjs.map → MText-Dni707tS.cjs.map} +1 -1
  66. package/dist/{MTooltip-BWqyv6QU.cjs → MTooltip-ChvuN4Ow.cjs} +2 -2
  67. package/dist/{MTooltip-BWqyv6QU.cjs.map → MTooltip-ChvuN4Ow.cjs.map} +1 -1
  68. package/dist/{MTooltip-BTJkzOah.js → MTooltip-H3we0a7w.js} +1 -1
  69. package/dist/{MTooltip-BTJkzOah.js.map → MTooltip-H3we0a7w.js.map} +1 -1
  70. package/dist/{MTreeView-BcVw0Bgz.cjs → MTreeView-VYp0eErQ.cjs} +2 -2
  71. package/dist/{MTreeView-BcVw0Bgz.cjs.map → MTreeView-VYp0eErQ.cjs.map} +1 -1
  72. package/dist/{arduino-Bedph8hQ.cjs → arduino-BdpdaLwK.cjs} +1 -1
  73. package/dist/{arduino-Bedph8hQ.cjs.map → arduino-BdpdaLwK.cjs.map} +1 -1
  74. package/dist/{arduino-BHobW-W2.js → arduino-DDDlP9Yt.js} +1 -1
  75. package/dist/{arduino-BHobW-W2.js.map → arduino-DDDlP9Yt.js.map} +1 -1
  76. package/dist/{bash-oKnFbgn1.js → bash-D8WbAmuA.js} +1 -1
  77. package/dist/{bash-oKnFbgn1.js.map → bash-D8WbAmuA.js.map} +1 -1
  78. package/dist/{bash-CK4DSkpy.cjs → bash-eOUFh3S1.cjs} +1 -1
  79. package/dist/{bash-CK4DSkpy.cjs.map → bash-eOUFh3S1.cjs.map} +1 -1
  80. package/dist/{c-9Uw9QchT.cjs → c-Bur7Mn-u.cjs} +1 -1
  81. package/dist/{c-9Uw9QchT.cjs.map → c-Bur7Mn-u.cjs.map} +1 -1
  82. package/dist/{c-Bjn-r6WZ.js → c-CTKNfUJI.js} +1 -1
  83. package/dist/{c-Bjn-r6WZ.js.map → c-CTKNfUJI.js.map} +1 -1
  84. package/dist/calendar-P7MwKfWS.cjs +2 -0
  85. package/dist/{calendar-BFfeWRa0.cjs.map → calendar-P7MwKfWS.cjs.map} +1 -1
  86. package/dist/{calendar-DhRP5_mS.js → calendar-bzeZRst9.js} +59 -58
  87. package/dist/{calendar-DhRP5_mS.js.map → calendar-bzeZRst9.js.map} +1 -1
  88. package/dist/calendar.cjs +1 -1
  89. package/dist/calendar.js +1 -1
  90. package/dist/calendarDates-AnlGcvZM.cjs +2 -0
  91. package/dist/calendarDates-AnlGcvZM.cjs.map +1 -0
  92. package/dist/calendarDates-CYkJqcnp.js +50 -0
  93. package/dist/calendarDates-CYkJqcnp.js.map +1 -0
  94. package/dist/{cards-Dus8TmSD.js → cards-CFDJsdxR.js} +4 -4
  95. package/dist/{cards-Dus8TmSD.js.map → cards-CFDJsdxR.js.map} +1 -1
  96. package/dist/{cards-Bwos44EP.cjs → cards-DeA7I2KC.cjs} +2 -2
  97. package/dist/{cards-Bwos44EP.cjs.map → cards-DeA7I2KC.cjs.map} +1 -1
  98. package/dist/cards.cjs +1 -1
  99. package/dist/cards.js +1 -1
  100. package/dist/components/data/MWeekGrid/MWeekGrid.types.d.ts +9 -4
  101. package/dist/{controls-CeHdKaQv.cjs → controls-KK-TyUTT.cjs} +2 -2
  102. package/dist/{controls-CeHdKaQv.cjs.map → controls-KK-TyUTT.cjs.map} +1 -1
  103. package/dist/controls.cjs +1 -1
  104. package/dist/{core-CMHNXulE.js → core-D5-SQcs8.js} +1 -1
  105. package/dist/{core-CMHNXulE.js.map → core-D5-SQcs8.js.map} +1 -1
  106. package/dist/{core-CLRD6sG4.cjs → core-D66c1_Wo.cjs} +1 -1
  107. package/dist/{core-CLRD6sG4.cjs.map → core-D66c1_Wo.cjs.map} +1 -1
  108. package/dist/{cpp-BWqMcMeX.cjs → cpp-BMULAf-B.cjs} +1 -1
  109. package/dist/{cpp-BWqMcMeX.cjs.map → cpp-BMULAf-B.cjs.map} +1 -1
  110. package/dist/{cpp-b3FmFTKl.js → cpp-DAzz2TpY.js} +1 -1
  111. package/dist/{cpp-b3FmFTKl.js.map → cpp-DAzz2TpY.js.map} +1 -1
  112. package/dist/{css-B4MkxW0b.cjs → css-9M03GzKO.cjs} +1 -1
  113. package/dist/{css-B4MkxW0b.cjs.map → css-9M03GzKO.cjs.map} +1 -1
  114. package/dist/{css-8EzLAJKV.js → css-EGOXTWIl.js} +1 -1
  115. package/dist/{css-8EzLAJKV.js.map → css-EGOXTWIl.js.map} +1 -1
  116. package/dist/{data-Dh3C_VTi.js → data-CgLutFxU.js} +245 -230
  117. package/dist/data-CgLutFxU.js.map +1 -0
  118. package/dist/data-DFrkJTlF.cjs +2 -0
  119. package/dist/data-DFrkJTlF.cjs.map +1 -0
  120. package/dist/data.cjs +1 -1
  121. package/dist/data.js +1 -1
  122. package/dist/{display-DU9E_18w.cjs → display--E7rI0tk.cjs} +2 -2
  123. package/dist/{display-DU9E_18w.cjs.map → display--E7rI0tk.cjs.map} +1 -1
  124. package/dist/{display-CYC1AImx.js → display-BnkHKW1n.js} +12 -12
  125. package/dist/{display-CYC1AImx.js.map → display-BnkHKW1n.js.map} +1 -1
  126. package/dist/display.cjs +1 -1
  127. package/dist/display.js +1 -1
  128. package/dist/dropdowns-DGYg9zIh.cjs +2 -0
  129. package/dist/{dropdowns-vaj6vhl6.cjs.map → dropdowns-DGYg9zIh.cjs.map} +1 -1
  130. package/dist/{dropdowns-ByDu8Wbt.js → dropdowns-Dq-xAplH.js} +12 -11
  131. package/dist/{dropdowns-ByDu8Wbt.js.map → dropdowns-Dq-xAplH.js.map} +1 -1
  132. package/dist/dropdowns.cjs +1 -1
  133. package/dist/dropdowns.js +1 -1
  134. package/dist/{feedback-CUGuh4QZ.cjs → feedback-CA77ShtB.cjs} +2 -2
  135. package/dist/{feedback-CUGuh4QZ.cjs.map → feedback-CA77ShtB.cjs.map} +1 -1
  136. package/dist/feedback.cjs +1 -1
  137. package/dist/{form-Dri4AzY9.js → form-CAFcvmUS.js} +1 -1
  138. package/dist/{form-Dri4AzY9.js.map → form-CAFcvmUS.js.map} +1 -1
  139. package/dist/{form-DICGXS6_.cjs → form-DpfzLUOn.cjs} +2 -2
  140. package/dist/{form-DICGXS6_.cjs.map → form-DpfzLUOn.cjs.map} +1 -1
  141. package/dist/form.cjs +1 -1
  142. package/dist/form.js +1 -1
  143. package/dist/{frameworkTexts-C1yvIVm4.js → frameworkTexts-DH0Xp-Vx.js} +30 -61
  144. package/dist/frameworkTexts-DH0Xp-Vx.js.map +1 -0
  145. package/dist/frameworkTexts-iDXhcW6k.cjs +2 -0
  146. package/dist/frameworkTexts-iDXhcW6k.cjs.map +1 -0
  147. package/dist/i18n/frameworkTexts.d.ts +13 -0
  148. package/dist/i18n.cjs +1 -1
  149. package/dist/{icons-BxurYyW-.cjs → icons-D_NB67he.cjs} +2 -2
  150. package/dist/{icons-BxurYyW-.cjs.map → icons-D_NB67he.cjs.map} +1 -1
  151. package/dist/icons.cjs +1 -1
  152. package/dist/illustrations.cjs +1 -1
  153. package/dist/illustrations.js +1 -1
  154. package/dist/index.cjs +1 -1
  155. package/dist/index.js +13 -13
  156. package/dist/{inputs-GCUfD923.cjs → inputs-Clenc4Rm.cjs} +2 -2
  157. package/dist/{inputs-GCUfD923.cjs.map → inputs-Clenc4Rm.cjs.map} +1 -1
  158. package/dist/inputs.cjs +1 -1
  159. package/dist/inputs.js +1 -1
  160. package/dist/{javascript-CH9YvIk2.js → javascript-CHSg4NGc.js} +1 -1
  161. package/dist/{javascript-CH9YvIk2.js.map → javascript-CHSg4NGc.js.map} +1 -1
  162. package/dist/{javascript-BGrveJJw.cjs → javascript-CastOQF5.cjs} +1 -1
  163. package/dist/{javascript-BGrveJJw.cjs.map → javascript-CastOQF5.cjs.map} +1 -1
  164. package/dist/{json-CPWARxtL.js → json-Bejy9Rlg.js} +1 -1
  165. package/dist/{json-CPWARxtL.js.map → json-Bejy9Rlg.js.map} +1 -1
  166. package/dist/{json-D6oa0Lra.cjs → json-DCkJ-m-p.cjs} +1 -1
  167. package/dist/{json-D6oa0Lra.cjs.map → json-DCkJ-m-p.cjs.map} +1 -1
  168. package/dist/{layout-Gr99WWTA.cjs → layout-CNoZdeXw.cjs} +2 -2
  169. package/dist/{layout-Gr99WWTA.cjs.map → layout-CNoZdeXw.cjs.map} +1 -1
  170. package/dist/{layout-CS_dHOLM.js → layout-DsE4zfpg.js} +3 -3
  171. package/dist/{layout-CS_dHOLM.js.map → layout-DsE4zfpg.js.map} +1 -1
  172. package/dist/layout.cjs +1 -1
  173. package/dist/layout.js +2 -2
  174. package/dist/{licensing-DXCHcZd1.cjs → licensing-DGIdtfNg.cjs} +2 -2
  175. package/dist/{licensing-DXCHcZd1.cjs.map → licensing-DGIdtfNg.cjs.map} +1 -1
  176. package/dist/{locale-BGLDTJSi.cjs → locale-DRRl_s5-.cjs} +2 -2
  177. package/dist/{locale-BGLDTJSi.cjs.map → locale-DRRl_s5-.cjs.map} +1 -1
  178. package/dist/{media-CE59IEdY.cjs → media-DRTBXDnn.cjs} +2 -2
  179. package/dist/{media-CE59IEdY.cjs.map → media-DRTBXDnn.cjs.map} +1 -1
  180. package/dist/media.cjs +1 -1
  181. package/dist/{overlays-DCXP_KsX.js → overlays-BKk_ZXue.js} +2 -2
  182. package/dist/{overlays-DCXP_KsX.js.map → overlays-BKk_ZXue.js.map} +1 -1
  183. package/dist/{overlays--Pe-H5TW.cjs → overlays-Qbp4d596.cjs} +2 -2
  184. package/dist/{overlays--Pe-H5TW.cjs.map → overlays-Qbp4d596.cjs.map} +1 -1
  185. package/dist/overlays.cjs +1 -1
  186. package/dist/overlays.js +3 -3
  187. package/dist/{php-DJ1nTQpr.cjs → php-BdVXegqn.cjs} +1 -1
  188. package/dist/{php-DJ1nTQpr.cjs.map → php-BdVXegqn.cjs.map} +1 -1
  189. package/dist/{php-DeBdikHj.js → php-Cb_S1hXT.js} +1 -1
  190. package/dist/{php-DeBdikHj.js.map → php-Cb_S1hXT.js.map} +1 -1
  191. package/dist/primitives.cjs +1 -1
  192. package/dist/style-runtime.cjs +1 -1
  193. package/dist/style-runtime.js +1 -1
  194. package/dist/styles.css +1 -1
  195. package/dist/{theme-Bjs11y3s.cjs → theme-DgaM4CjM.cjs} +2 -2
  196. package/dist/{theme-Bjs11y3s.cjs.map → theme-DgaM4CjM.cjs.map} +1 -1
  197. package/dist/theme.cjs +1 -1
  198. package/dist/{typescript-B5GRzMtL.js → typescript-0VHxrxf2.js} +1 -1
  199. package/dist/{typescript-B5GRzMtL.js.map → typescript-0VHxrxf2.js.map} +1 -1
  200. package/dist/{typescript-qNh_eaB0.cjs → typescript-CcGBfzlS.cjs} +1 -1
  201. package/dist/{typescript-qNh_eaB0.cjs.map → typescript-CcGBfzlS.cjs.map} +1 -1
  202. package/dist/{typography-D4PUdtMV.cjs → typography-C4_O8len.cjs} +2 -2
  203. package/dist/{typography-D4PUdtMV.cjs.map → typography-C4_O8len.cjs.map} +1 -1
  204. package/dist/typography.cjs +1 -1
  205. package/dist/{useGhostText-BTPneo4u.cjs → useGhostText-Dlemg1vw.cjs} +2 -2
  206. package/dist/{useGhostText-BTPneo4u.cjs.map → useGhostText-Dlemg1vw.cjs.map} +1 -1
  207. package/dist/{useInteractionEffect-q_9csNj7.cjs → useInteractionEffect-CFwDX5UF.cjs} +2 -2
  208. package/dist/{useInteractionEffect-q_9csNj7.cjs.map → useInteractionEffect-CFwDX5UF.cjs.map} +1 -1
  209. package/dist/{useKeyboardNav-D_OwIEZp.cjs → useKeyboardNav-Bm-dxVq-.cjs} +2 -2
  210. package/dist/{useKeyboardNav-D_OwIEZp.cjs.map → useKeyboardNav-Bm-dxVq-.cjs.map} +1 -1
  211. package/dist/utils.cjs +1 -1
  212. package/dist/{xml-BTZ6XeQ9.js → xml-8GjNy8SM.js} +1 -1
  213. package/dist/{xml-BTZ6XeQ9.js.map → xml-8GjNy8SM.js.map} +1 -1
  214. package/dist/{xml-_Z3NZw2H.cjs → xml-Dbm3mobK.cjs} +1 -1
  215. package/dist/{xml-_Z3NZw2H.cjs.map → xml-Dbm3mobK.cjs.map} +1 -1
  216. package/package.json +1 -1
  217. package/dist/MConflictIllustration-CWWnskbi.cjs +0 -2
  218. package/dist/MConflictIllustration-CWWnskbi.cjs.map +0 -1
  219. package/dist/MConflictIllustration-Drsm8_8C.js.map +0 -1
  220. package/dist/calendar-BFfeWRa0.cjs +0 -2
  221. package/dist/data-Dh3C_VTi.js.map +0 -1
  222. package/dist/data-Dl6U8Uct.cjs +0 -2
  223. package/dist/data-Dl6U8Uct.cjs.map +0 -1
  224. package/dist/dropdowns-vaj6vhl6.cjs +0 -2
  225. package/dist/frameworkTexts-C1yvIVm4.js.map +0 -1
  226. package/dist/frameworkTexts-D3wbwWCu.cjs +0 -2
  227. package/dist/frameworkTexts-D3wbwWCu.cjs.map +0 -1
@@ -1,2 +0,0 @@
1
- const e=require(`./icons-BxurYyW-.cjs`),t=require(`./cn-CU5TNITO.cjs`),n=require(`./MButton-CMbmWmMI.cjs`),r=require(`./locale-BGLDTJSi.cjs`),i=require(`./frameworkTexts-D3wbwWCu.cjs`);require(`./core-CLRD6sG4.cjs`);let a=require(`react`),o=require(`react/jsx-runtime`);function s(e,t,n){let[r,i]=(0,a.useState)(t),o=e!==void 0,s=o?e:r,c=(0,a.useRef)(n);c.current=n;let l=(0,a.useRef)(s);return l.current=s,[s,(0,a.useCallback)(e=>{o||i(e),Object.is(e,l.current)||c.current?.(e)},[o])]}var c=new Set([`primary`,`neutral`,`success`,`error`,`warning`,`info`,`light`,`dark`,`news`]);function l(e){return e?c.has(e)?`var(--mineral-${e})`:e:`var(--mineral-primary)`}function u(e){return e?Array.isArray(e)?e:[e]:[]}function d({value:c,defaultValue:d=null,onChange:f,month:p,defaultMonth:m,onMonthChange:h,min:g,max:_,disabledDates:v,weekStartsOn:y=1,locale:b,highlightRange:x,markers:S,showOutsideDays:C=!0,size:ee=`md`,color:w=`primary`,texts:T,autoFocus:E=!1,className:D,style:O,...k}){let A=r.t(b),j=i.r(A,T),[M,N]=s(c,d,e=>{e&&f?.(e)}),P=i.m(new Date),[F,I]=s(p?i.f(p):void 0,()=>i.f(m??c??d??P),h),[L,R]=(0,a.useState)(()=>i.m(c??d??P)),z=(0,a.useRef)(null),B=(0,a.useRef)(E),V=(0,a.useMemo)(()=>i.d(g??null),[g]),H=(0,a.useMemo)(()=>i.d(_??null),[_]),U=e=>V&&e<V||H&&e>H?!0:typeof v==`function`?v(e):!!v?.some(t=>i.l(t,e));(0,a.useEffect)(()=>{i.u(L,F)||R(i.m(M&&i.u(M,F)?M:F))},[F]),(0,a.useEffect)(()=>{B.current&&(B.current=!1,(z.current?.querySelector(`[data-date="${i.o(L)}"]`))?.focus())},[L]);let W=(0,a.useMemo)(()=>i.s(F,y),[F,y]),G=(0,a.useMemo)(()=>Array.from({length:6},(e,t)=>W.slice(t*7,t*7+7)),[W]),K=(0,a.useMemo)(()=>i.c(A,y,`short`),[A,y]),q=(0,a.useMemo)(()=>i.c(A,y,`long`),[A,y]),J=new Intl.DateTimeFormat(A,{month:`long`,year:`numeric`}).format(F),Y=(0,a.useMemo)(()=>new Intl.DateTimeFormat(A,{weekday:`long`,day:`numeric`,month:`long`,year:`numeric`}),[A]),X=x?i.m(x.start):null,Z=x?i.m(x.end):null,te=e=>{let t=i.m(e);B.current=!0,R(t),i.u(t,F)||I(i.f(t))},Q=e=>{U(e)||(N(e),R(e),i.u(e,F)||I(i.f(e)))},ne=e=>{let t=L,n=null;switch(e.key){case`ArrowLeft`:n=i.i(t,-1);break;case`ArrowRight`:n=i.i(t,1);break;case`ArrowUp`:n=i.i(t,-7);break;case`ArrowDown`:n=i.i(t,7);break;case`PageUp`:n=i.a(t,e.shiftKey?-12:-1);break;case`PageDown`:n=i.a(t,e.shiftKey?12:1);break;case`Home`:n=i.p(t,y);break;case`End`:n=i.i(i.p(t,y),6);break;case`Enter`:case` `:e.preventDefault(),Q(t);return;default:return}e.preventDefault(),te(n)},$=e=>{I(i.f(i.a(F,e)))};return(0,o.jsxs)(`div`,{className:t.t(`mineral-mini-calendar`,`mineral-mini-calendar--${ee}`,D),style:{"--mineral-mini-calendar-accent":`var(--mineral-${w})`,"--mineral-mini-calendar-accent-contrast":`var(--mineral-${w}-contrast)`,...O},...k,children:[(0,o.jsxs)(`div`,{className:`mineral-mini-calendar__header`,children:[(0,o.jsx)(n.t,{size:`sm`,variant:`ghost`,color:w,iconOnly:!0,"aria-label":j.previousMonth,startIcon:(0,o.jsx)(e.Ji,{size:16}),onClick:()=>$(-1)}),(0,o.jsx)(`span`,{className:`mineral-mini-calendar__title`,"aria-live":`polite`,children:J}),(0,o.jsx)(n.t,{size:`sm`,variant:`ghost`,color:w,iconOnly:!0,"aria-label":j.nextMonth,startIcon:(0,o.jsx)(e.qi,{size:16}),onClick:()=>$(1)})]}),(0,o.jsxs)(`div`,{ref:z,className:`mineral-mini-calendar__grid`,role:`grid`,"aria-label":J,onKeyDown:ne,children:[(0,o.jsx)(`div`,{className:`mineral-mini-calendar__row`,role:`row`,children:K.map((e,t)=>(0,o.jsx)(`span`,{className:`mineral-mini-calendar__weekday`,role:`columnheader`,"aria-label":q[t],children:e},e+t))}),G.map(e=>(0,o.jsx)(`div`,{className:`mineral-mini-calendar__row`,role:`row`,children:e.map(e=>{let n=!i.u(e,F);if(n&&!C)return(0,o.jsx)(`span`,{className:`mineral-mini-calendar__cell`,role:`gridcell`},i.o(e));let r=U(e),a=!!(M&&i.l(M,e)),s=i.l(P,e),c=!!(X&&Z&&e>=X&&e<=Z),d=S?u(S(e)):[],f=d.map(e=>e.label).filter(Boolean).join(`, `);return(0,o.jsx)(`span`,{className:`mineral-mini-calendar__cell`,role:`gridcell`,"aria-selected":a,children:(0,o.jsxs)(`button`,{type:`button`,"data-date":i.o(e),className:t.t(`mineral-mini-calendar__day`,n&&`mineral-mini-calendar__day--outside`,s&&`mineral-mini-calendar__day--today`,a&&`mineral-mini-calendar__day--selected`,c&&`mineral-mini-calendar__day--in-range`,r&&`mineral-mini-calendar__day--disabled`),tabIndex:i.l(e,L)?0:-1,disabled:r,"aria-current":s?`date`:void 0,"aria-label":f?`${Y.format(e)}, ${f}`:Y.format(e),onClick:()=>Q(e),onFocus:()=>{i.l(e,L)||R(e)},children:[(0,o.jsx)(`span`,{className:`mineral-mini-calendar__number`,children:e.getDate()}),d.length>0?(0,o.jsx)(`span`,{className:`mineral-mini-calendar__markers`,"aria-hidden":`true`,children:d.slice(0,3).map((e,t)=>(0,o.jsx)(`span`,{className:`mineral-mini-calendar__marker`,style:{background:l(e.color)}},t))}):null]})},i.o(e))})},i.o(e[0])))]})]})}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return d}});
2
- //# sourceMappingURL=calendar-BFfeWRa0.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"data-Dh3C_VTi.js","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, 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 './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 = 'Loading',\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 = 'No data',\n filterPlaceholder = 'Search...',\n className,\n style,\n ...rest\n}: MDataTableProps<T>) {\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\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}\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-expanded={filterOpen}\n onClick={openFilter}\n >\n Filter\n </MButton>\n <MPopover\n open={filterOpen}\n anchorRef={filterBtnRef}\n onClose={() => setFilterOpen(false)}\n placement=\"bottom-end\"\n className=\"data-table-dropdown\"\n >\n {filterKeys.map((filterKey) => (\n <div key={filterKey.key} className=\"data-table-filter-group\">\n <span className=\"data-table-filter-label\">{filterKey.label}</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-expanded={sortOpen}\n onClick={openSort}\n >\n {activeSortMenuItem ? `Sort: ${activeSortMenuItem.label}` : 'Sort'}\n </MButton>\n <MPopover\n open={sortOpen}\n anchorRef={sortBtnRef}\n onClose={() => setSortOpen(false)}\n placement=\"bottom-end\"\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 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>\n )}\n </button>\n ))}\n </MPopover>\n </>\n )}\n </div>\n )}\n </div>\n )}\n <div className={cn('data-table-body', loading && 'loading')} aria-busy={loading || undefined}>\n <div className=\"scroll\">\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\">\n <MCheckbox\n checked={allSelected}\n onChange={toggleAll}\n size=\"sm\"\n clickEffect=\"none\"\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 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 <span className=\"th-content\">\n {col.label}\n {isSortable && (\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 )}\n </span>\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}\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 />\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\" role=\"status\" aria-live=\"polite\">\n <MLoader center={false} minHeight=\"auto\" label={loadingLabel} />\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, useMemo, type CSSProperties, type ReactNode} from 'react'\n\nimport {MStack} from '../../layout'\nimport {MTooltip} from '../../overlays'\nimport {MHeading, MSubText, MText} from '../../typography'\nimport {cn} from '../../../utils/cn'\n\nimport type {\n MWeekGridBand,\n MWeekGridCell,\n MWeekGridCellContext,\n MWeekGridProps,\n} from './MWeekGrid.types'\n\nimport './MWeekGrid.css'\n\nconst DEFAULT_DAYS = 7\nconst DEFAULT_SLOTS = 24\n\nconst DEFAULT_DAY_LABELS_FROM_SUNDAY = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']\n\nconst DEFAULT_BAND_LABELS: [string, string, string, string] = ['None', 'Few', 'Some', 'Many']\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\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 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: DEFAULT_DAY_LABELS_FROM_SUNDAY[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\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 = DEFAULT_BAND_LABELS,\n legendUnit,\n rowLabelWidth = 48,\n cellHeight = 24,\n cellMinWidth = 24,\n className,\n style,\n ...rest\n}: MWeekGridProps) {\n const grid = useMemo(() => buildGrid(data, days, slots), [data, days, slots])\n const resolvedMax = useMemo(() => resolveMax(grid, max), [grid, max])\n const rows = useMemo(\n () => resolveDayLabels(days, weekStart, dayLabels),\n [days, weekStart, dayLabels]\n )\n const cols = useMemo(() => resolveSlotLabels(slots, slotLabels), [slots, slotLabels])\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\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' ? <MHeading level={5}>{title}</MHeading> : title\n )}\n {description != null && (\n typeof description === 'string' ? (\n <MSubText tone={'muted'}>{description}</MSubText>\n ) : (\n description\n )\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 className={'mineral-week-grid__matrix'} style={matrixStyle}>\n <div />\n {cols.map((label, slot) => (\n <div key={`col-${slot}`} className={'mineral-week-grid__col-header'}>\n <MSubText size={'xs'} tone={'muted'}>\n {label}\n </MSubText>\n </div>\n ))}\n\n {rows.map(({label: dayLabel, calendarDay}, rowIndex) => (\n <Fragment key={`row-${rowIndex}-${calendarDay}`}>\n <div className={'mineral-week-grid__row-label'}>\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 )\n\n const cellNode = (\n <div\n className={cellClasses}\n style={{height: cellHeight}}\n onClick={onCellClick ? () => onCellClick(ctx) : undefined}\n role={onCellClick ? 'button' : undefined}\n tabIndex={onCellClick ? 0 : undefined}\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 </Fragment>\n ))}\n </div>\n\n {showLegend && (\n <div className={'mineral-week-grid__legend'}>\n <MSubText size={'xs'} tone={'muted'}>\n {`Scale: 0 — ${resolvedMax}${legendUnit ? ` ${legendUnit}` : ''}`}\n </MSubText>\n <div className={'mineral-week-grid__legend-bands'}>\n {([0, 1, 2, 3] as const).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 {bandLabels[band]}\n </MSubText>\n </div>\n ))}\n </div>\n </div>\n )}\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":";;;;;;;;;;;;;;;;AAYA,SAAS,EAAa,GAAQ,GAAe,GAA+D;AAGxG,QAFI,OAAO,KAAW,aAAmB,EAAO,GAAK,EAAM,GACpB,OAAnC,OAAO,KAAW,WAAyB,EAAY,KAC5C,EAAY,MAAM,EADkC;;AAIvE,SAAS,EAAe,GAAc,GAAsB;CACxD,IAAM,IAAQ,EAAI,MAAM,IAAI,EACxB,IAAe;AAEnB,MAAK,IAAM,KAAK,GAAO;AACnB,MAAmB,OAAO,KAAQ,aAA9B,EAAwC;AAC5C,MAAO,EAAgC;;AAG3C,QAAO;;AAGX,SAAgB,EAAoB,EAChC,YACA,SACA,WACA,cAAW,IACX,gBAAa,IACb,gBAAa,IACb,gBAAa,IACb,cAAW,IACX,aAAU,IACV,aAAU,IACV,kBAAe,IACf,aAAU,IACV,kBAAe,WACf,iBACA,MAAM,GACN,iBACA,QAAQ,GACR,oBACA,eACA,gBAAa,EAAE,EACf,SAAS,GACT,oBACA,cAAW,EAAE,EACb,MAAM,GACN,iBACA,WACA,kBAAe,IACf,oBAAgB,IAChB,iBAAa,IACb,sBAAmB,IACnB,cAAc,IACd,uBACA,gBAAY,WACZ,wBAAoB,aACpB,eACA,WACA,GAAG,MACgB;CACnB,IAAM,CAAC,IAAc,MAAmB,EAAgC,KAAK,EACvE,CAAC,IAAkB,MAAuB,EAAmB,EAAE,CAAC,EAChE,CAAC,IAAgB,MAAqB,EAAS,GAAG,EAClD,CAAC,IAAiB,MAAsB,EAAmC,EAAE,CAAC,EAC9E,CAAC,IAAc,KAAmB,EAAS,EAAE,EAC7C,CAAC,IAAY,MAAiB,EAAS,GAAM,EAC7C,CAAC,IAAU,MAAe,EAAS,GAAM,EACzC,KAAe,EAAoB,KAAK,EACxC,KAAa,EAAoB,KAAK,EAEtC,IAAa,MAAmB,KAAA,IAA6B,KAAjB,GAC5C,IAAS,MAAqB,KAAA,IAA+B,KAAnB,GAC1C,IAAU,MAAsB,KAAA,IAAgC,KAApB,GAC5C,IAAO,MAAmB,KAAA,IAA6B,KAAjB,GACtC,IAAW,MAAsB,IACjC,KAAc,MAAqB,IAEnC,KAAY,GACb,MAAiB;AAGd,EAFI,MAAqB,KAAA,KAAW,GAAkB,EAAK,EACvD,CAAC,KAAoB,MAAmB,KAAA,KAAW,EAAgB,EAAE,EACzE,KAAiB,EAAK;IAE1B;EAAC;EAAkB;EAAgB;EAAkB;EAAe,CACvE,EAEK,KAAa,GACd,MAAmC;AAGhC,EAFI,MAAsB,KAAA,KAAW,GAAmB,EAAK,EACzD,CAAC,KAAoB,MAAmB,KAAA,KAAW,EAAgB,EAAE,EACzE,IAAkB,EAAK;IAE3B;EAAC;EAAmB;EAAgB;EAAkB;EAAgB,CACzE,EAEK,KAAU,GACX,MAAgC;AAG7B,EAFI,MAAmB,KAAA,KAAW,GAAgB,EAAK,EACnD,CAAC,KAAoB,MAAmB,KAAA,KAAW,EAAgB,EAAE,EACzE,IAAe,EAAK;IAExB;EAAC;EAAgB;EAAgB;EAAkB;EAAa,CACnE,EAEK,KAAU,EAAuB,KAAK,EAEtC,KAAU,GACX,MAAiB;AAKd,EAJI,MAAmB,KAAA,KAAW,EAAgB,EAAK,EACvD,IAAe,EAAK,EAGpB,GAAQ,SAAS,eAAe;GAAC,OAAO;GAAS,UAAU;GAAS,CAAC;IAEzE,CAAC,GAAgB,EAAa,CACjC;CAED,SAAS,GAAW,GAAa;EAC7B,IAAI;AAQJ,EANA,AAGI,IAHA,GAAY,QAAQ,IACb,EAAW,QAAQ,QAAQ;GAAC;GAAK,KAAK;GAAO,GAAG,OAEhD;GAAC;GAAK,KAAK;GAAM,EAG5B,GAAQ,EAAK;;CAGjB,SAAS,GAAkB,GAAa,GAAe;EACnD,IAAM,IAAU,EAAQ,MAAQ,EAAE,EAC5B,IAAO,EAAQ,SAAS,EAAM,GAAG,EAAQ,QAAQ,MAAS,MAAS,EAAM,GAAG,CAAC,GAAG,GAAS,EAAM;AACrG,KAAW;GAAC,GAAG;IAAU,IAAM;GAAK,CAAC;;CAGzC,IAAM,KAAgB,QAAc;EAChC,IAAM,IAAgC,EAAE;AAExC,OAAK,IAAM,KAAa,GAAY;AAChC,OAAI,EAAU,SAAS;AACnB,MAAI,EAAU,OAAO,EAAU;AAC/B;;GAGJ,IAAM,oBAAS,IAAI,KAAa;AAEhC,QAAK,IAAM,KAAO,GAAM;IACpB,IAAM,IAAQ,EAAe,GAAK,EAAU,IAAI;AAChD,IAAI,KAAS,QAAM,EAAO,IAAI,OAAO,EAAM,CAAC;;AAGhD,KAAI,EAAU,OAAO,MAAM,KAAK,EAAO,CAAC,MAAM;;AAGlD,SAAO;IACR,CAAC,GAAM,EAAW,CAAC,EAEhB,KAAW,QAAc;EAC3B,IAAI,IAAc;AAElB,MAAI,CAAC,KAAgB,KAAc,EAAO,MAAM,EAAE;GAC9C,IAAM,IAAQ,EAAO,aAAa;AAElC,GAQI,IARA,KAAc,EAAW,SAAS,IACzB,EAAO,QAAQ,MACpB,EAAW,MAAM,MAAQ;IACrB,IAAM,IAAQ,EAAe,GAAK,EAAI;AACtC,WAAO,KAAS,QAAQ,OAAO,EAAM,CAAC,aAAa,CAAC,SAAS,EAAM;KACrE,CACL,GAEQ,EAAO,QAAQ,MACpB,EAAQ,MAAM,MAAQ;AAClB,QAAI,EAAI,eAAe,GAAO,QAAO;IACrC,IAAM,IAAS,EAAY,EAAI;AAC/B,WAAO,KAAS,QAAQ,OAAO,EAAM,CAAC,aAAa,CAAC,SAAS,EAAM;KACrE,CACL;;AAIT,MAAI,CAAC,GACD,MAAK,IAAM,CAAC,GAAK,MAAmB,OAAO,QAAQ,EAAQ,CACnD,EAAC,KAAkB,EAAe,WAAW,MAEjD,IAAS,EAAO,QAAQ,MAAQ;GAC5B,IAAM,IAAQ,EAAe,GAAK,EAAI;AACtC,UAAO,KAAS,QAAQ,EAAe,SAAS,OAAO,EAAM,CAAC;IAChE;AAIV,SAAO;IACR;EAAC;EAAM;EAAc;EAAe;EAAY;EAAQ;EAAY;EAAS;EAAQ,CAAC,EAEnF,IAAS,QAAc;AACzB,MAAI,MAAc,CAAC,EAAY,QAAO;EAEtC,IAAM,IAAM,EAAQ,MAAM,MAAS,EAAK,QAAQ,EAAW,IAAI,EACzD,IAAiB,EAAS,MAAM,MAAS,EAAK,QAAQ,EAAW,IAAI;AAC3E,MAAI,CAAC,GAAK,YAAY,CAAC,KAAY,CAAC,EAAgB,QAAO;EAE3D,IAAM,IAAM,EAAW,QAAQ,QAAQ,IAAI;AAE3C,SAAO,CAAC,GAAG,GAAS,CAAC,MAAM,GAAG,MAAM;GAChC,IAAM,IAAM,EAAU,EAAW,MAC3B,IAAM,EAAU,EAAW;AAOjC,UALI,KAAM,QAAQ,KAAM,OAAa,IACjC,KAAM,OAAa,IACnB,KAAM,OAAa,KACnB,OAAO,KAAO,YAAY,OAAO,KAAO,YAAkB,IAAK,KAAM,IAElE,OAAO,EAAG,CAAC,cAAc,OAAO,EAAG,CAAC,GAAG;IAChD;IACH;EAAC;EAAU;EAAY;EAAS;EAAU;EAAU;EAAW,CAAC,EAE7D,KAAa,IAAoB,MAAS,EAAO,SAAU,EAAO,QAClE,KAAa,IAAa,KAAK,IAAI,GAAG,KAAK,KAAK,KAAa,EAAS,CAAC,GAAG,GAC1E,KAAW,QAAc;AAC3B,MAAI,CAAC,KAAc,EAAkB,QAAO;EAC5C,IAAM,KAAS,IAAO,KAAK;AAC3B,SAAO,EAAO,MAAM,GAAO,IAAQ,EAAS;IAC7C;EAAC;EAAQ;EAAY;EAAkB;EAAM;EAAS,CAAC,EAEpD,KAAU,GAAS,KAAK,GAAK,MAAU,EAAU,IAAM,IAAO,KAAK,IAAW,GAAO,EAAO,CAAC,EAC7F,KAAc,GAAQ,SAAS,KAAK,GAAQ,OAAO,MAAQ,EAAS,SAAS,EAAI,CAAC;CAExF,SAAS,KAAY;AACjB,EACI,GADA,KACY,EAAS,QAAQ,MAAQ,CAAC,GAAQ,SAAS,EAAI,CAAC,GAEhD,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,GAAU,GAAG,GAAQ,CAAC,CAAC,CAAC;;CAI5D,SAAS,GAAU,GAAa;AAC5B,KAAY,EAAS,SAAS,EAAI,GAAG,EAAS,QAAQ,MAAS,MAAS,EAAI,GAAG,CAAC,GAAG,GAAU,EAAI,CAAC;;CAGtG,SAAS,GAAe,GAAa,GAAyB;AAC3C,IAAM,OACV,QAAQ,kCAAkC,IACrD,GAAU,EAAI;;CAGlB,IAAM,KAAa,QAAkB;AAEjC,EADA,IAAe,MAAM,CAAC,EAAE,EACxB,GAAY,GAAM;IACnB,EAAE,CAAC,EAEA,KAAW,QAAkB;AAE/B,EADA,IAAa,MAAM,CAAC,EAAE,EACtB,GAAc,GAAM;IACrB,EAAE,CAAC,EAEA,KAAqB,EAAS,MAAM,MAAS,EAAK,QAAQ,GAAY,IAAI,EAC1E,KAAc,KAAc,EAAW,SAAS,KAAK,EAAS,SAAS;AAE7E,QACI,kBAAC,OAAD;EACI,KAAK;EACL,WAAW,EAAG,cAAc,GAAU;EACtC,OAAO,MAAiB,KAAA,IAAwD,KAA5C;GAAC,iBAAiB;GAAc,GAAG;GAAM;EAC7E,GAAI;YAJR;GAMK,MACG,kBAAC,OAAD;IAAK,WAAU;cAAf,CACK,KACG,kBAAC,GAAD;KACI,WAAU;KACV,MAAK;KACL,WAAA;KACA,aAAa;KACb,OAAO;KACP,WAAW,MAAU,GAAU,EAAM,OAAO,MAAM;KAClD,eAAe,GAAU,GAAG;KAC9B,CAAA,GAGJ,EAAW,SAAS,KAAK,EAAS,SAAS,MACzC,kBAAC,OAAD;KAAK,WAAU;eAAf,CACK,EAAW,SAAS,KACjB,kBAAA,GAAA,EAAA,UAAA,CACI,kBAAC,GAAD;MACI,KAAK;MACL,SAAQ;MACR,MAAK;MACL,WAAW,kBAAC,GAAD,EAAe,CAAA;MAC1B,iBAAe;MACf,SAAS;gBACZ;MAES,CAAA,EACV,kBAAC,GAAD;MACI,MAAM;MACN,WAAW;MACX,eAAe,GAAc,GAAM;MACnC,WAAU;MACV,WAAU;gBAET,EAAW,KAAK,MACb,kBAAC,OAAD;OAAyB,WAAU;iBAAnC,CACI,kBAAC,QAAD;QAAM,WAAU;kBAA2B,EAAU;QAAa,CAAA,GAChE,GAAc,EAAU,QAAQ,EAAE,EAAE,KAAK,MACvC,kBAAC,OAAD;QAAkB,WAAU;kBACxB,kBAAC,GAAD;SACI,MAAK;SACL,aAAY;SACZ,SAAS,EAAQ,EAAU,MAAM,SAAS,EAAO,IAAI;SACrD,gBAAgB,GAAkB,EAAU,KAAK,EAAO;SACxD,OAAO;SACT,CAAA;QACA,EARI,EAQJ,CACR,CACA;SAbI,EAAU,IAad,CACR;MACK,CAAA,CACZ,EAAA,CAAA,EAGN,EAAS,SAAS,KACf,kBAAA,GAAA,EAAA,UAAA,CACI,kBAAC,GAAD;MACI,KAAK;MACL,SAAQ;MACR,MAAK;MACL,WACI,IACI,EAAW,QAAQ,QACf,kBAAC,GAAD,EAAgB,CAAA,GAEhB,kBAAC,GAAD,EAAkB,CAAA,GAGtB,kBAAC,GAAD,EAAa,CAAA;MAGrB,iBAAe;MACf,SAAS;gBAER,KAAqB,SAAS,GAAmB,UAAU;MACtD,CAAA,EACV,kBAAC,GAAD;MACI,MAAM;MACN,WAAW;MACX,eAAe,GAAY,GAAM;MACjC,WAAU;MACV,WAAU;gBAET,EAAS,KAAK,MACX,kBAAC,UAAD;OAEI,MAAK;OACL,WAAW,EACP,wBACA,GAAY,QAAQ,EAAS,OAAO,SACvC;OACD,eAAe;AACX,QAAI,GAAY,QAAQ,EAAS,MAC7B,GAAQ;SACJ,KAAK,EAAS;SACd,KAAK,EAAW,QAAQ,QAAQ,SAAS;SAC5C,CAAC,GAEF,GAAQ;SAAC,KAAK,EAAS;SAAK,KAAK;SAAM,CAAC;;iBAdpD,CAkBK,EAAS,OACT,GAAY,QAAQ,EAAS,OAC1B,kBAAC,QAAD;QAAM,WAAU;kBACX,EAAW,QAAQ,QAChB,kBAAC,GAAD,EAAc,WAAU,wBAAyB,CAAA,GAEjD,kBAAC,GAAD,EAAgB,WAAU,wBAAyB,CAAA;QAEpD,CAAA,CAEN;SA3BA,EAAS,IA2BT,CACX;MACK,CAAA,CACZ,EAAA,CAAA,CAEL;OAER;;GAEV,kBAAC,OAAD;IAAK,WAAW,EAAG,mBAAmB,KAAW,UAAU;IAAE,aAAW,KAAW,KAAA;cAAnF,CACI,kBAAC,OAAD;KAAK,WAAU;eACX,kBAAC,SAAD;MAAO,WAAW,EAAG,QAAQ,KAAW,WAAW,KAAW,UAAU;gBAAxE,CACI,kBAAC,SAAD;OAAO,WAAW,EAAG,QAAQ,KAAgB,SAAS;iBAClD,kBAAC,MAAD,EAAA,UAAA,CACK,KACG,kBAAC,MAAD;QAAI,WAAU;kBACV,kBAAC,GAAD;SACI,SAAS;SACT,UAAU;SACV,MAAK;SACL,aAAY;SACd,CAAA;QACD,CAAA,EAER,EAAQ,KAAK,MAAQ;QAClB,IAAM,IAAa,EAAI,YAAY,GAC7B,IAAW,GAAY,QAAQ,EAAI;AAEzC,eACI,kBAAC,MAAD;SAEI,WAAW,EACP,MACA,KAAc,YACd,KAAY,UAAU,EAAY,MACrC;SACD,OAAO;UACH,OAAO,EAAI;UACX,WAAW,EAAI;UAClB;SACD,SAAS,UAAmB,GAAW,EAAI,IAAI,GAAG,KAAA;mBAElD,kBAAC,QAAD;UAAM,WAAU;oBAAhB,CACK,EAAI,OACJ,KACG,kBAAC,QAAD;WAAM,WAAU;qBACX,IACG,EAAY,QAAQ,QAChB,kBAAC,GAAD,EAAc,eAAY,QAAS,CAAA,GAEnC,kBAAC,GAAD,EAAgB,eAAY,QAAS,CAAA,GAGzC,kBAAC,GAAD,EAAkB,eAAY,QAAS,CAAA;WAExC,CAAA,CAER;;SACN,EA5BI,EAAI,IA4BR;SAEX,CACD,EAAA,CAAA;OACD,CAAA,EACR,kBAAC,SAAD,EAAA,UAAA,CACK,GAAS,WAAW,KACjB,kBAAC,MAAD,EAAA,UACI,kBAAC,MAAD;OAAI,WAAU;OAAQ,SAAS,EAAQ,SAAU;iBAC5C;OACA,CAAA,EACJ,CAAA,EAER,GAAS,KAAK,GAAK,MAAU;OAC1B,IAAM,IAAM,EAAU,IAAM,IAAO,KAAK,IAAW,GAAO,EAAO,EAC3D,IAAa,EAAS,SAAS,EAAI;AAEzC,cACI,kBAAC,MAAD;QAEI,WAAW,EAAG,OAAO,KAAc,YAAY,KAAc,aAAa;QAC1E,SAAS,KAAc,MAAU,GAAe,GAAK,EAAM,GAAG,KAAA;kBAHlE,CAKK,KACG,kBAAC,MAAD;SAAI,WAAU;mBACV,kBAAC,GAAD;UACI,SAAS;UACT,gBAAgB;UAChB,MAAK;UACL,aAAY;UACd,CAAA;SACD,CAAA,EAER,EAAQ,KAAK,MACV,kBAAC,MAAD;SAAkB,WAAU;SAAK,OAAO,EAAC,WAAW,EAAI,OAAM;mBACzD,EAAI,SACC,EAAI,OACC,EAAY,EAAI,MACjB,IACC,IAAO,KAAK,IAAW,EAC3B,GACA,EAAY,EAAI;SACtB,EARI,EAAI,IAQR,CACP,CACD;UAzBI,EAyBJ;QAEX,CACE,EAAA,CAAA,CACJ;;KACN,CAAA,EACL,KACG,kBAAC,OAAD;KAAK,WAAU;KAAqB,MAAK;KAAS,aAAU;eACxD,kBAAC,GAAD;MAAS,QAAQ;MAAO,WAAU;MAAO,OAAO;MAAgB,CAAA;KAC9D,CAAA,CAER;;GACL,KAAc,KAAa,KACxB,kBAAC,GAAD;IAAa,OAAO;IAAkB;IAAgB;IAAU,UAAU;IAAW,CAAA;GAEvF;;;;;ACnfd,SAAgB,EAAU,EACtB,UACA,WAAQ,WACR,UAAO,MACP,mBAAgB,IAChB,aACA,cACA,GAAG,KACY;AACf,QACI,kBAAC,OAAD;EAAK,WAAW,EAAG,aAAa,SAAS,KAAS,QAAQ,KAAQ,EAAU;EAAE,MAAK;EAAO,GAAI;YACzF,EAAM,KAAK,MACR,kBAAC,OAAD;GAEI,WAAW,EAAG,aAAa,EAAK,WAAW,WAAW,EAAK,YAAY,WAAW;GAClF,MAAK;GACL,UAAU,MAAU;AACZ,MAAK,YACJ,EAAM,OAAuB,QAAQ,YAAY,IACtD,IAAW,EAAK,IAAI,EAAE,EAAK,WAAW,IAAO;;aAPrD,CAUI,kBAAC,GAAD;IACI,WAAU;IACV,SAAS,EAAK,WAAW;IAClB;IACD;IACN,UAAU,EAAK;IACf,WAAW,MAAM,IAAW,EAAK,IAAI,EAAE,OAAO,QAAQ;IACtD,aAAY;IACd,CAAA,EACF,kBAAC,QAAD;IAAM,WAAW,EAAG,cAAc,EAAK,WAAW,KAAiB,OAAO;cAAG,EAAK;IAAa,CAAA,CAC7F;KAnBG,EAAK,GAmBR,CACR;EACA,CAAA;;;;ACxBd,IAAM,IAAe,GACf,IAAgB,IAEhB,IAAiC;CAAC;CAAO;CAAO;CAAO;CAAO;CAAO;CAAO;CAAM,EAElF,IAAwD;CAAC;CAAQ;CAAO;CAAQ;CAAO;AAE7F,SAAS,EAAY,GAAe,GAA4B;AAC5D,KAAI,KAAO,KAAK,KAAS,EAAG,QAAO;CACnC,IAAM,IAAQ,IAAQ;AAGtB,QAFI,KAAS,MAAa,IACtB,KAAS,MAAa,IACnB;;AAGX,SAAS,EAAU,GAA8B,GAAc,GAA2B;CACtF,IAAM,IAAmB,MAAM,KAAK,EAAC,QAAQ,GAAK,QAAQ,MAAM,KAAK,EAAC,QAAQ,GAAM,QAAQ,EAAE,CAAC;AAE/F,KAAI,MAAM,QAAQ,EAAK,IAAI,EAAK,SAAS,KAAK,MAAM,QAAQ,EAAK,GAAG,EAAE;EAClE,IAAM,IAAS;AACf,OAAK,IAAI,IAAM,GAAG,IAAM,KAAK,IAAI,GAAM,EAAO,OAAO,EAAE,KAAO,GAAG;GAC7D,IAAM,IAAM,EAAO;AACd,SACL,MAAK,IAAI,IAAO,GAAG,IAAO,KAAK,IAAI,GAAO,EAAI,OAAO,EAAE,KAAQ,EAC3D,GAAK,GAAK,KAAQ,EAAI,MAAS;;AAGvC,SAAO;;AAGX,MAAK,IAAM,KAAQ,EACX,GAAK,MAAM,KAAK,EAAK,OAAO,KAC5B,EAAK,OAAO,KAAK,EAAK,QAAQ,MAClC,EAAK,EAAK,KAAK,EAAK,QAAQ,EAAK;AAErC,QAAO;;AAGX,SAAS,EAAW,GAAkB,GAAsB;AACxD,KAAI,OAAO,KAAQ,SAAU,QAAO;CACpC,IAAI,IAAO;AACX,MAAK,IAAM,KAAO,EACd,MAAK,IAAM,KAAS,EAChB,CAAI,IAAQ,MAAM,IAAO;AAGjC,QAAO;;AAGX,SAAS,EACL,GACA,GACA,GACsC;AAatC,QAZI,KAAU,EAAO,UAAU,IACpB,MAAM,KAAK,EAAC,QAAQ,GAAK,GAAG,GAAG,OAAW;EAAC,OAAO,EAAO;EAAQ,aAAa;EAAM,EAAE,GAG7F,MAAS,KACK,MAAc,IAAI;EAAC;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAE,GAAG;EAAC;EAAG;EAAG;EAAG;EAAG;EAAG;EAAG;EAAE,EAChE,KAAK,OAAiB;EAC/B,OAAO,EAA+B;EACtC;EACH,EAAE,GAGA,MAAM,KAAK,EAAC,QAAQ,GAAK,GAAG,GAAG,OAAW;EAC7C,OAAO,OAAO,IAAQ,EAAE;EACxB,aAAa;EAChB,EAAE;;AAGP,SAAS,GAAkB,GAAe,GAA6B;AAKnE,QAJI,KAAU,EAAO,UAAU,IAAc,EAAO,MAAM,GAAG,EAAM,GAC/D,MAAU,KACH,MAAM,KAAK,EAAC,QAAQ,IAAG,GAAG,GAAG,MAAS,EAAK,UAAU,CAAC,SAAS,GAAG,IAAI,CAAC,GAE3E,MAAM,KAAK,EAAC,QAAQ,GAAM,GAAG,GAAG,MAAS,OAAO,IAAO,EAAE,CAAC;;AAGrE,SAAS,EAAkB,GAAsC;AAC7D,QAAO,EAAI,QAAQ,IAAI,EAAI,QAAQ;;AAGvC,SAAS,EAAqB,GAA2B,GAAkB,GAA8B;AACrG,QAAO,GAAG,EAAS,GAAG,EAAU,KAAK,EAAI;;AAS7C,SAAgB,EAAU,EACtB,SACA,QACA,UAAO,GACP,WAAQ,GACR,cACA,eACA,eAAY,GACZ,WAAQ,WACR,UACA,gBACA,SACA,cACA,eACA,kBACA,gBACA,gBAAa,IACb,gBAAa,GACb,eACA,mBAAgB,IAChB,gBAAa,IACb,kBAAe,IACf,cACA,UACA,GAAG,KACY;CACf,IAAM,IAAO,QAAc,EAAU,GAAM,GAAM,EAAM,EAAE;EAAC;EAAM;EAAM;EAAM,CAAC,EACvE,IAAc,QAAc,EAAW,GAAM,EAAI,EAAE,CAAC,GAAM,EAAI,CAAC,EAC/D,KAAO,QACH,EAAiB,GAAM,GAAW,EAAU,EAClD;EAAC;EAAM;EAAW;EAAU,CAC/B,EACK,IAAO,QAAc,GAAkB,GAAO,EAAW,EAAE,CAAC,GAAO,EAAW,CAAC,EAE/E,KAA6B,EAC/B,qBAAqB,GAAG,EAAc,YAAY,EAAM,WAAW,EAAa,YACnF,EAEK,KAA8B;EAC/B,6BAAuC,iBAAiB,EAAM;EAC/D,GAAG;EACN,EAEK,IAAY,KAAS,QAAQ,KAAe,QAAQ,KAAQ,QAAQ,KAAa;AAEvF,QACI,kBAAC,OAAD;EAAK,WAAW,EAAG,qBAAqB,EAAU;EAAE,OAAO;EAAc,GAAI;YAA7E;GACK,KACG,kBAAC,GAAD;IAAQ,SAAS;cAAjB,CACI,kBAAC,OAAD;KAAK,WAAW;eAAhB,CACI,kBAAC,OAAD;MAAK,WAAW;gBAAhB,CACK,KAAS,SACN,OAAO,KAAU,WAAW,kBAAC,GAAD;OAAU,OAAO;iBAAI;OAAiB,CAAA,GAAG,IAExE,KAAe,SACZ,OAAO,KAAgB,WACnB,kBAAC,GAAD;OAAU,MAAM;iBAAU;OAAuB,CAAA,GAEjD,GAGN;SACL,KAAa,QACV,kBAAC,GAAD;MAAO,MAAM;MAAM,MAAM;gBACpB;MACG,CAAA,CAEV;QACL,KAAQ,QACL,kBAAC,GAAD;KAAU,MAAM;KAAM,MAAM;eACvB;KACM,CAAA,CAEV;;GAGb,kBAAC,OAAD;IAAK,WAAW;IAA6B,OAAO;cAApD;KACI,kBAAC,OAAD,EAAO,CAAA;KACN,EAAK,KAAK,GAAO,MACd,kBAAC,OAAD;MAAyB,WAAW;gBAChC,kBAAC,GAAD;OAAU,MAAM;OAAM,MAAM;iBACvB;OACM,CAAA;MACT,EAJI,OAAO,IAIX,CACR;KAED,GAAK,KAAK,EAAC,OAAO,GAAU,kBAAc,MACvC,kBAAC,GAAD,EAAA,UAAA,CACI,kBAAC,OAAD;MAAK,WAAW;gBACZ,kBAAC,GAAD;OAAU,MAAM;OAAM,MAAM;iBACvB;OACM,CAAA;MACT,CAAA,EACL,EAAK,KAAK,GAAW,MAAS;MAC3B,IAAM,IAAQ,EAAK,KAAe,MAAS,GACrC,IAAO,EAAY,GAAO,EAAY,EACtC,IAA4B;OAAC,KAAK;OAAa;OAAM;OAAO;OAAK,EACjE,IAAc,IAAa,EAAW,EAAI,GAAG,EAAkB,EAAI,EACnE,IAAiB,IACjB,EAAc,EAAI,GAClB,EAAqB,GAAK,GAAU,EAAU,EAS9C,IACF,kBAAC,OAAD;OACI,WATY,EAChB,2BACA,iCAAiC,KACjC,KAAe,wCACf,CAAC,KAAe,KAAkB,QAAQ,mCAC7C;OAKO,OAAO,EAAC,QAAQ,GAAW;OAC3B,SAAS,UAAoB,EAAY,EAAI,GAAG,KAAA;OAChD,MAAM,IAAc,WAAW,KAAA;OAC/B,UAAU,IAAc,IAAI,KAAA;iBAE3B;OACC,CAAA;AAOV,aAJI,KAAkB,OACX,kBAAC,GAAD,EAAA,UAA4C,GAAoB,EAAjD,QAAQ,EAAS,GAAG,IAA6B,GAIvE,kBAAC,GAAD;OAA2C,SAAS;iBAC/C;OACM,EAFI,QAAQ,EAAS,GAAG,IAExB;OAEjB,CACK,EAAA,EA5CI,OAAO,EAAS,GAAG,IA4CvB,CACb;KACA;;GAEL,KACG,kBAAC,OAAD;IAAK,WAAW;cAAhB,CACI,kBAAC,GAAD;KAAU,MAAM;KAAM,MAAM;eACvB,cAAc,IAAc,IAAa,IAAI,MAAe;KACtD,CAAA,EACX,kBAAC,OAAD;KAAK,WAAW;eACV;MAAC;MAAG;MAAG;MAAG;MAAE,CAAW,KAAK,MAC1B,kBAAC,OAAD;MAA4B,WAAW;gBAAvC,CACI,kBAAC,QAAD,EACI,WAAW,EACP,oCACA,iCAAiC,IACpC,EACH,CAAA,EACF,kBAAC,GAAD;OAAU,MAAM;OAAM,MAAM;iBACvB,EAAW;OACL,CAAA,CACT;QAVI,UAAU,IAUd,CACR;KACA,CAAA,CACJ;;GAER;;;;;AC5Ld,SAAgB,EAAa,GAA2B,IAAyB,EAAE,EAAmB;CAClG,IAAM,EACF,aAAU,IACV,iBAAc,GACd,mBAAgB,IAChB,mBACA,iBAAc,MACd,uBACA,GAEE,CAAC,GAAM,KAAW,EAAc,EAAE,CAAC,EACnC,CAAC,GAAO,KAAY,EAAS,EAAE,EAC/B,CAAC,GAAM,KAAW,EAAS,EAAY,EACvC,CAAC,GAAQ,KAAa,EAAS,EAAc,EAC7C,CAAC,GAAS,KAAc,EAAmC,KAAkB,EAAE,CAAC,EAChF,CAAC,GAAM,KAAW,EAAgC,EAAY,EAC9D,CAAC,GAAW,KAAgB,EAAS,GAAM,EAC3C,CAAC,GAAO,KAAY,EAAuB,KAAK,EAChD,CAAC,GAAM,KAAW,EAAS,EAAE,EAE7B,IAAa,EAAO,EAAQ;AAClC,GAAW,UAAU;CAErB,IAAM,IAAQ,SACH;EAAC;EAAM;EAAS;EAAQ;EAAS;EAAK,GAC7C;EAAC;EAAM;EAAS;EAAQ;EAAS;EAAK,CACzC;AAED,SAAgB;EACZ,IAAM,IAAa,OAAO,kBAAoB,MAAc,IAAI,iBAAiB,GAAG,KAAA,GAChF,IAAY;AAkBhB,SAjBA,EAAa,GAAK,EAClB,EAAS,KAAK,EACd,EACK,QAAQ,GAAO,GAAY,OAAO,CAClC,MAAM,MAAa;AACZ,SACJ,EAAQ,EAAS,KAAK,EACtB,EAAS,EAAS,KAAK,MAAM;IAC/B,CACD,OAAO,MAAiB;AACjB,QACA,aAAe,SAAS,EAAI,SAAS,gBACzC,EAAS,aAAe,QAAQ,IAAU,MAAM,OAAO,EAAI,CAAC,CAAC;IAC/D,CACD,cAAc;AACX,GAAK,KAAW,EAAa,GAAM;IACrC,QACO;AAET,GADA,IAAY,IACZ,GAAY,OAAO;;IAExB;EAAC;EAAO;EAAiB;EAAK,CAAC;CAGlC,IAAM,IAAqB,GAAa,MAAiB;AAErD,EADA,EAAU,EAAK,EACf,EAAQ,EAAE;IACX,EAAE,CAAC,EACA,IAAsB,GAAa,MAAmC;AAExE,EADA,EAAW,EAAK,EAChB,EAAQ,EAAE;IACX,EAAE,CAAC,EACA,IAAmB,GAAa,MAAgC;AAElE,EADA,EAAQ,EAAK,EACb,EAAQ,EAAE;IACX,EAAE,CAAC,EAEA,IAAU,QAAkB,GAAS,MAAU,IAAQ,EAAE,EAAE,EAAE,CAAC;AAqBpE,QAAO;EAAC,YAnB2B;GAC/B;GACA;GACA;GACA,cAAc;GACd;GACA,cAAc;GACd;GACA,gBAAgB;GAChB;GACA,iBAAiB;GACjB,cAAc;GACd,eAAe;GACf,YAAY;GACZ,kBAAkB;GAClB,UAAU;GACV,SAAS;GACZ;EAEmB;EAAW;EAAO;EAAQ;;;;AClIlD,SAAS,EAAe,GAAoD;AAExE,QADK,IACE;EAAC,KAAK,EAAK;EAAK,KAAK,EAAK;EAAU,GADzB;;AAQtB,SAAgB,EAAgB,GAA2B,IAAyB,EAAE,EAAsB;CACxG,IAAM,EACF,aAAU,IACV,iBAAc,GACd,mBAAgB,IAChB,mBACA,iBAAc,MACd,uBACA,GAEE,CAAC,GAAO,KAAY,EAAc,EAAE,CAAC,EACrC,CAAC,GAAO,KAAY,EAAS,EAAE,EAC/B,CAAC,GAAM,KAAW,EAAS,EAAY,EACvC,CAAC,GAAQ,KAAa,EAAS,EAAc,EAC7C,CAAC,GAAS,KAAc,EAAmC,KAAkB,EAAE,CAAC,EAChF,CAAC,GAAM,KAAW,EACnB,KAAuD,KAC3D,EACK,CAAC,GAAW,KAAgB,EAAS,GAAM,EAC3C,CAAC,GAAO,KAAY,EAAuB,KAAK,EAChD,CAAC,GAAM,KAAW,EAAS,EAAE,EAE7B,IAAa,EAAO,EAAQ;AAClC,GAAW,UAAU;CAErB,IAAM,IAAQ,SACH;EAAC;EAAM;EAAS;EAAQ;EAAS,MAAM,EAAY,EAAK;EAAC,GAChE;EAAC;EAAM;EAAS;EAAQ;EAAS;EAAK,CACzC;AAED,SAAgB;EACZ,IAAM,IAAa,OAAO,kBAAoB,MAAc,IAAI,iBAAiB,GAAG,KAAA,GAChF,IAAY;AAkBhB,SAjBA,EAAa,GAAK,EAClB,EAAS,KAAK,EACd,EACK,QAAQ,GAAO,GAAY,OAAO,CAClC,MAAM,MAAgC;AAC/B,SACJ,EAAS,EAAS,KAAK,EACvB,EAAS,EAAS,KAAK,MAAM;IAC/B,CACD,OAAO,MAAiB;AACjB,QACA,aAAe,SAAS,EAAI,SAAS,gBACzC,EAAS,aAAe,QAAQ,IAAU,MAAM,OAAO,EAAI,CAAC,CAAC;IAC/D,CACD,cAAc;AACX,GAAK,KAAW,EAAa,GAAM;IACrC,QACO;AAET,GADA,IAAY,IACZ,GAAY,OAAO;;IAExB;EAAC;EAAO;EAAiB;EAAK,CAAC;CAElC,IAAM,IAAqB,GAAa,MAAiB;AAErD,EADA,EAAU,EAAK,EACf,EAAQ,EAAE;IACX,EAAE,CAAC,EACA,IAAsB,GAAa,MAAmC;AAExE,EADA,EAAW,EAAK,EAChB,EAAQ,EAAE;IACX,EAAE,CAAC,EACA,IAAmB,GAAa,MAAkC;AAEpE,EADA,EAAQ,EAAK,EACb,EAAQ,EAAE;IACX,EAAE,CAAC,EAEA,IAAU,QAAkB,GAAS,MAAU,IAAQ,EAAE,EAAE,EAAE,CAAC;AAqBpE,QAAO;EAAC,WAnB6B;GACjC;GACA;GACA;GACA,cAAc;GACd;GACA,cAAc;GACd;GACA,gBAAgB;GAChB;GACA,iBAAiB;GACjB,cAAc;GACd,eAAe;GACf,YAAY;GACZ,kBAAkB;GAClB,UAAU;GACV,SAAS;GACZ;EAEkB;EAAW;EAAO;EAAQ"}
@@ -1,2 +0,0 @@
1
- const e=require(`./icons-BxurYyW-.cjs`),t=require(`./cn-CU5TNITO.cjs`),n=require(`./MPopover-DI_7niwe.cjs`),r=require(`./MText-CDDEGjBx.cjs`),i=require(`./MHeading-7yt1C6oS.cjs`),a=require(`./MSubText-WixraICV.cjs`),o=require(`./MButton-CMbmWmMI.cjs`),s=require(`./MCheckbox-stBujis6.cjs`),c=require(`./MLoader-DELAIhz5.cjs`),l=require(`./MStack-BOOciEts.cjs`),u=require(`./MInputSearch-BfPPgEGZ.cjs`),d=require(`./MTooltip-BWqyv6QU.cjs`),f=require(`./MPagination-C2lpvPqC.cjs`);require(`./core-CLRD6sG4.cjs`);let p=require(`react`),m=require(`react/jsx-runtime`);function h(e,t,n){return typeof n==`function`?n(e,t):String(typeof n==`string`?e[n]:e.id??t)}function g(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 _({columns:r,data:i,rowKey:a,sortable:l=!1,filterable:d=!1,selectable:_=!1,pagination:v=!1,pageSize:y=10,striped:b=!1,compact:x=!1,stickyHeader:S=!1,loading:C=!1,loadingLabel:w=`Loading`,scrollOffset:T,sort:E,onSortChange:D,search:O,onSearchChange:k,searchKeys:A,filterKeys:j=[],filters:M,onFiltersChange:N,sortKeys:P=[],page:F,onPageChange:ee,total:te,manualSearch:ne=!1,manualFilters:I=!1,manualSort:L=!1,manualPagination:R=!1,selectedKeys:z,onSelectionChange:B,emptyText:re=`No data`,filterPlaceholder:V=`Search...`,className:ie,style:H,...ae}){let[oe,se]=(0,p.useState)(null),[ce,le]=(0,p.useState)([]),[ue,de]=(0,p.useState)(``),[fe,pe]=(0,p.useState)({}),[me,U]=(0,p.useState)(1),[he,W]=(0,p.useState)(!1),[ge,G]=(0,p.useState)(!1),_e=(0,p.useRef)(null),ve=(0,p.useRef)(null),K=E===void 0?oe:E,q=O===void 0?ue:O,J=M===void 0?fe:M,Y=F===void 0?me:F,X=z??ce,ye=B??le,be=(0,p.useCallback)(e=>{O===void 0&&de(e),!R&&F===void 0&&U(1),k?.(e)},[O,F,R,k]),xe=(0,p.useCallback)(e=>{M===void 0&&pe(e),!R&&F===void 0&&U(1),N?.(e)},[M,F,R,N]),Se=(0,p.useCallback)(e=>{E===void 0&&se(e),!R&&F===void 0&&U(1),D?.(e)},[E,F,R,D]),Ce=(0,p.useRef)(null),we=(0,p.useCallback)(e=>{F===void 0&&U(e),ee?.(e),Ce.current?.scrollIntoView({block:`start`,behavior:`smooth`})},[F,ee]);function Te(e){let t;t=K?.key===e?K.dir===`asc`?{key:e,dir:`desc`}:null:{key:e,dir:`asc`},Se(t)}function Ee(e,t){let n=J[e]??[],r=n.includes(t)?n.filter(e=>e!==t):[...n,t];xe({...J,[e]:r})}let De=(0,p.useMemo)(()=>{let e={};for(let t of j){if(t.options){e[t.key]=t.options;continue}let n=new Set;for(let e of i){let r=g(e,t.key);r!=null&&n.add(String(r))}e[t.key]=Array.from(n).sort()}return e},[i,j]),Z=(0,p.useMemo)(()=>{let e=i;if(!ne&&d&&q.trim()){let t=q.toLowerCase();e=A&&A.length>0?e.filter(e=>A.some(n=>{let r=g(e,n);return r!=null&&String(r).toLowerCase().includes(t)})):e.filter(e=>r.some(n=>{if(n.filterable===!1)return!1;let r=e[n.key];return r!=null&&String(r).toLowerCase().includes(t)}))}if(!I)for(let[t,n]of Object.entries(J))!n||n.length===0||(e=e.filter(e=>{let r=g(e,t);return r!=null&&n.includes(String(r))}));return e},[i,ne,I,d,q,A,r,J]),Q=(0,p.useMemo)(()=>{if(L||!K)return Z;let e=r.find(e=>e.key===K.key),t=P.some(e=>e.key===K.key);if(!e?.sortable&&!l&&!t)return Z;let n=K.dir===`asc`?1:-1;return[...Z].sort((e,t)=>{let r=e[K.key],i=t[K.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})},[Z,K,r,l,P,L]),Oe=R?te??Q.length:Q.length,ke=v?Math.max(1,Math.ceil(Oe/y)):1,Ae=(0,p.useMemo)(()=>{if(!v||R)return Q;let e=(Y-1)*y;return Q.slice(e,e+y)},[Q,v,R,Y,y]),$=Ae.map((e,t)=>h(e,(Y-1)*y+t,a)),je=$.length>0&&$.every(e=>X.includes(e));function Me(){ye(je?X.filter(e=>!$.includes(e)):[...new Set([...X,...$])])}function Ne(e){ye(X.includes(e)?X.filter(t=>t!==e):[...X,e])}function Pe(e,t){t.target.closest(`button, a, [data-no-row-select]`)||Ne(e)}let Fe=(0,p.useCallback)(()=>{W(e=>!e),G(!1)},[]),Ie=(0,p.useCallback)(()=>{G(e=>!e),W(!1)},[]),Le=P.find(e=>e.key===K?.key),Re=d||j.length>0||P.length>0;return(0,m.jsxs)(`div`,{ref:Ce,className:t.t(`data-table`,ie),style:T===void 0?H:{scrollMarginTop:T,...H},...ae,children:[Re&&(0,m.jsxs)(`div`,{className:`toolbar`,children:[d&&(0,m.jsx)(u.t,{className:`filter-search`,size:`sm`,fullWidth:!0,placeholder:V,value:q,onChange:e=>be(e.target.value),onClear:()=>be(``)}),(j.length>0||P.length>0)&&(0,m.jsxs)(`div`,{className:`toolbar-actions`,children:[j.length>0&&(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)(o.t,{ref:_e,variant:`outlined`,size:`sm`,startIcon:(0,m.jsx)(e.Jn,{}),"aria-expanded":he,onClick:Fe,children:`Filter`}),(0,m.jsx)(n.t,{open:he,anchorRef:_e,onClose:()=>W(!1),placement:`bottom-end`,className:`data-table-dropdown`,children:j.map(e=>(0,m.jsxs)(`div`,{className:`data-table-filter-group`,children:[(0,m.jsx)(`span`,{className:`data-table-filter-label`,children:e.label}),(De[e.key]??[]).map(t=>(0,m.jsx)(`div`,{className:`data-table-filter-option`,children:(0,m.jsx)(s.t,{size:`sm`,clickEffect:`none`,checked:J[e.key]?.includes(t)??!1,onChange:()=>Ee(e.key,t),label:t})},t))]},e.key))})]}),P.length>0&&(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)(o.t,{ref:ve,variant:`outlined`,size:`sm`,startIcon:K?K.dir===`asc`?(0,m.jsx)(e.Hi,{}):(0,m.jsx)(e.Vi,{}):(0,m.jsx)(e.qn,{}),"aria-expanded":ge,onClick:Ie,children:Le?`Sort: ${Le.label}`:`Sort`}),(0,m.jsx)(n.t,{open:ge,anchorRef:ve,onClose:()=>G(!1),placement:`bottom-end`,className:`data-table-dropdown`,children:P.map(n=>(0,m.jsxs)(`button`,{type:`button`,className:t.t(`data-table-sort-item`,K?.key===n.key&&`active`),onClick:()=>{K?.key===n.key?Se({key:n.key,dir:K.dir===`asc`?`desc`:`asc`}):Se({key:n.key,dir:`asc`})},children:[n.label,K?.key===n.key&&(0,m.jsx)(`span`,{className:`data-table-sort-dir`,children:K.dir===`asc`?(0,m.jsx)(e.Hi,{className:`data-table-sort-icon`}):(0,m.jsx)(e.Vi,{className:`data-table-sort-icon`})})]},n.key))})]})]})]}),(0,m.jsxs)(`div`,{className:t.t(`data-table-body`,C&&`loading`),"aria-busy":C||void 0,children:[(0,m.jsx)(`div`,{className:`scroll`,children:(0,m.jsxs)(`table`,{className:t.t(`root`,b&&`striped`,x&&`compact`),children:[(0,m.jsx)(`thead`,{className:t.t(`head`,S&&`sticky`),children:(0,m.jsxs)(`tr`,{children:[_&&(0,m.jsx)(`th`,{className:`th check-col`,children:(0,m.jsx)(s.t,{checked:je,onChange:Me,size:`sm`,clickEffect:`none`})}),r.map(n=>{let r=n.sortable??l,i=K?.key===n.key;return(0,m.jsx)(`th`,{className:t.t(`th`,r&&`sortable`,i&&`sorted-${K.dir}`),style:{width:n.width,textAlign:n.align},onClick:r?()=>Te(n.key):void 0,children:(0,m.jsxs)(`span`,{className:`th-content`,children:[n.label,r&&(0,m.jsx)(`span`,{className:`sort-icon`,children:i?K.dir===`asc`?(0,m.jsx)(e.Hi,{"aria-hidden":`true`}):(0,m.jsx)(e.Vi,{"aria-hidden":`true`}):(0,m.jsx)(e.Bi,{"aria-hidden":`true`})})]})},n.key)})]})}),(0,m.jsxs)(`tbody`,{children:[Ae.length===0&&(0,m.jsx)(`tr`,{children:(0,m.jsx)(`td`,{className:`empty`,colSpan:r.length+ +!!_,children:re})}),Ae.map((e,n)=>{let i=h(e,(Y-1)*y+n,a),o=X.includes(i);return(0,m.jsxs)(`tr`,{className:t.t(`row`,o&&`selected`,_&&`selectable`),onClick:_?e=>Pe(i,e):void 0,children:[_&&(0,m.jsx)(`td`,{className:`td check-col`,children:(0,m.jsx)(s.t,{checked:o,onChange:()=>{},size:`sm`,clickEffect:`none`})}),r.map(t=>(0,m.jsx)(`td`,{className:`td`,style:{textAlign:t.align},children:t.render?t.render(e[t.key],e,(Y-1)*y+n):e[t.key]},t.key))]},i)})]})]})}),C&&(0,m.jsx)(`div`,{className:`data-table-loading`,role:`status`,"aria-live":`polite`,children:(0,m.jsx)(c.t,{center:!1,minHeight:`auto`,label:w})})]}),v&&ke>1&&(0,m.jsx)(f.t,{total:Oe,page:Y,pageSize:y,onChange:we})]})}function v({items:e,color:n=`primary`,size:r=`md`,strikethrough:i=!0,onChange:a,className:o,...c}){return(0,m.jsx)(`div`,{className:t.t(`task list`,`color-${n}`,`size-${r}`,o),role:`list`,...c,children:e.map(e=>(0,m.jsxs)(`div`,{className:t.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,m.jsx)(s.t,{className:`task control`,checked:e.checked??!1,color:n,size:r,disabled:e.disabled,onChange:t=>a?.(e.id,t.target.checked),clickEffect:`ripple`}),(0,m.jsx)(`span`,{className:t.t(`task label`,e.checked&&i&&`done`),children:e.label})]},e.id))})}var y=7,b=24,x=[`Sun`,`Mon`,`Tue`,`Wed`,`Thu`,`Fri`,`Sat`],S=[`None`,`Few`,`Some`,`Many`];function C(e,t){if(t<=0||e<=0)return 0;let n=e/t;return n>=.66?3:n>=.33?2:1}function w(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 T(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 E(e,t,n){return n&&n.length>=e?Array.from({length:e},(e,t)=>({label:n[t],calendarDay:t})):e===7?(t===1?[1,2,3,4,5,6,0]:[0,1,2,3,4,5,6]).map(e=>({label:x[e],calendarDay:e})):Array.from({length:e},(e,t)=>({label:String(t+1),calendarDay:t}))}function D(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 O(e){return e.value>0?e.value:``}function k(e,t,n){return`${t} ${n} — ${e.value}`}function A({data:e,max:n,days:o=y,slots:s=b,dayLabels:c,slotLabels:u,weekStart:f=1,color:h=`warning`,title:g,description:_,hint:v,peakLabel:x,renderCell:A,renderTooltip:j,onCellClick:M,showLegend:N=!0,bandLabels:P=S,legendUnit:F,rowLabelWidth:ee=48,cellHeight:te=24,cellMinWidth:ne=24,className:I,style:L,...R}){let z=(0,p.useMemo)(()=>w(e,o,s),[e,o,s]),B=(0,p.useMemo)(()=>T(z,n),[z,n]),re=(0,p.useMemo)(()=>E(o,f,c),[o,f,c]),V=(0,p.useMemo)(()=>D(s,u),[s,u]),ie={gridTemplateColumns:`${ee}px repeat(${s}, minmax(${ne}px, 1fr))`},H={"--mineral-week-grid-color":`var(--mineral-${h})`,...L},ae=g!=null||_!=null||v!=null||x!=null;return(0,m.jsxs)(`div`,{className:t.t(`mineral-week-grid`,I),style:H,...R,children:[ae&&(0,m.jsxs)(l.t,{spacing:`xs`,children:[(0,m.jsxs)(`div`,{className:`mineral-week-grid__title-row`,children:[(0,m.jsxs)(`div`,{className:`mineral-week-grid__title-text`,children:[g!=null&&(typeof g==`string`?(0,m.jsx)(i.t,{level:5,children:g}):g),_!=null&&(typeof _==`string`?(0,m.jsx)(a.t,{tone:`muted`,children:_}):_)]}),x!=null&&(0,m.jsx)(r.t,{size:`sm`,tone:`muted`,children:x})]}),v!=null&&(0,m.jsx)(a.t,{size:`xs`,tone:`muted`,children:v})]}),(0,m.jsxs)(`div`,{className:`mineral-week-grid__matrix`,style:ie,children:[(0,m.jsx)(`div`,{}),V.map((e,t)=>(0,m.jsx)(`div`,{className:`mineral-week-grid__col-header`,children:(0,m.jsx)(a.t,{size:`xs`,tone:`muted`,children:e})},`col-${t}`)),re.map(({label:e,calendarDay:n},r)=>(0,m.jsxs)(p.Fragment,{children:[(0,m.jsx)(`div`,{className:`mineral-week-grid__row-label`,children:(0,m.jsx)(a.t,{size:`xs`,tone:`muted`,children:e})}),V.map((i,a)=>{let o=z[n]?.[a]??0,s=C(o,B),c={day:n,slot:a,value:o,band:s},l=A?A(c):O(c),u=j?j(c):k(c,e,i),f=(0,m.jsx)(`div`,{className:t.t(`mineral-week-grid__cell`,`mineral-week-grid__cell--band-${s}`,M&&`mineral-week-grid__cell--interactive`,!M&&u!=null&&`mineral-week-grid__cell--tooltip`),style:{height:te},onClick:M?()=>M(c):void 0,role:M?`button`:void 0,tabIndex:M?0:void 0,children:l});return u==null?(0,m.jsx)(p.Fragment,{children:f},`cell-${r}-${a}`):(0,m.jsx)(d.t,{content:u,children:f},`cell-${r}-${a}`)})]},`row-${r}-${n}`))]}),N&&(0,m.jsxs)(`div`,{className:`mineral-week-grid__legend`,children:[(0,m.jsx)(a.t,{size:`xs`,tone:`muted`,children:`Scale: 0 — ${B}${F?` ${F}`:``}`}),(0,m.jsx)(`div`,{className:`mineral-week-grid__legend-bands`,children:[0,1,2,3].map(e=>(0,m.jsxs)(`div`,{className:`mineral-week-grid__legend-band`,children:[(0,m.jsx)(`span`,{className:t.t(`mineral-week-grid__legend-swatch`,`mineral-week-grid__cell--band-${e}`)}),(0,m.jsx)(a.t,{size:`xs`,tone:`muted`,children:P[e]})]},`legend-${e}`))})]})]})}function j(e,t={}){let{perPage:n=20,initialPage:r=1,initialSearch:i=``,initialFilters:a,initialSort:o=null,invalidationKey:s}=t,[c,l]=(0,p.useState)([]),[u,d]=(0,p.useState)(0),[f,m]=(0,p.useState)(r),[h,g]=(0,p.useState)(i),[_,v]=(0,p.useState)(a??{}),[y,b]=(0,p.useState)(o),[x,S]=(0,p.useState)(!1),[C,w]=(0,p.useState)(null),[T,E]=(0,p.useState)(0),D=(0,p.useRef)(e);D.current=e;let O=(0,p.useMemo)(()=>({page:f,perPage:n,search:h,filters:_,sort:y}),[f,n,h,_,y]);(0,p.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,p.useCallback)(e=>{g(e),m(1)},[]),A=(0,p.useCallback)(e=>{v(e),m(1)},[]),j=(0,p.useCallback)(e=>{b(e),m(1)},[]),M=(0,p.useCallback)(()=>E(e=>e+1),[]);return{tableProps:{data:c,total:u,page:f,onPageChange:m,sort:y,onSortChange:j,search:h,onSearchChange:k,filters:_,onFiltersChange:A,manualSearch:!0,manualFilters:!0,manualSort:!0,manualPagination:!0,pageSize:n,loading:x},isLoading:x,error:C,refetch:M}}function M(e){return e?{key:e.key,dir:e.direction}:null}function N(e,t={}){let{perPage:n=12,initialPage:r=1,initialSearch:i=``,initialFilters:a,initialSort:o=null,invalidationKey:s}=t,[c,l]=(0,p.useState)([]),[u,d]=(0,p.useState)(0),[f,m]=(0,p.useState)(r),[h,g]=(0,p.useState)(i),[_,v]=(0,p.useState)(a??{}),[y,b]=(0,p.useState)(o??null),[x,S]=(0,p.useState)(!1),[C,w]=(0,p.useState)(null),[T,E]=(0,p.useState)(0),D=(0,p.useRef)(e);D.current=e;let O=(0,p.useMemo)(()=>({page:f,perPage:n,search:h,filters:_,sort:M(y)}),[f,n,h,_,y]);(0,p.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,p.useCallback)(e=>{g(e),m(1)},[]),A=(0,p.useCallback)(e=>{v(e),m(1)},[]),j=(0,p.useCallback)(e=>{b(e),m(1)},[]),N=(0,p.useCallback)(()=>E(e=>e+1),[]);return{gridProps:{items:c,total:u,page:f,onPageChange:m,sort:y,onSortChange:j,search:h,onSearchChange:k,filters:_,onFiltersChange:A,manualSearch:!0,manualFilters:!0,manualSort:!0,manualPagination:!0,pageSize:n,loading:x},isLoading:x,error:C,refetch:N}}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return N}});
2
- //# sourceMappingURL=data-Dl6U8Uct.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"data-Dl6U8Uct.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, 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 './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 = 'Loading',\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 = 'No data',\n filterPlaceholder = 'Search...',\n className,\n style,\n ...rest\n}: MDataTableProps<T>) {\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\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}\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-expanded={filterOpen}\n onClick={openFilter}\n >\n Filter\n </MButton>\n <MPopover\n open={filterOpen}\n anchorRef={filterBtnRef}\n onClose={() => setFilterOpen(false)}\n placement=\"bottom-end\"\n className=\"data-table-dropdown\"\n >\n {filterKeys.map((filterKey) => (\n <div key={filterKey.key} className=\"data-table-filter-group\">\n <span className=\"data-table-filter-label\">{filterKey.label}</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-expanded={sortOpen}\n onClick={openSort}\n >\n {activeSortMenuItem ? `Sort: ${activeSortMenuItem.label}` : 'Sort'}\n </MButton>\n <MPopover\n open={sortOpen}\n anchorRef={sortBtnRef}\n onClose={() => setSortOpen(false)}\n placement=\"bottom-end\"\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 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>\n )}\n </button>\n ))}\n </MPopover>\n </>\n )}\n </div>\n )}\n </div>\n )}\n <div className={cn('data-table-body', loading && 'loading')} aria-busy={loading || undefined}>\n <div className=\"scroll\">\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\">\n <MCheckbox\n checked={allSelected}\n onChange={toggleAll}\n size=\"sm\"\n clickEffect=\"none\"\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 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 <span className=\"th-content\">\n {col.label}\n {isSortable && (\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 )}\n </span>\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}\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 />\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\" role=\"status\" aria-live=\"polite\">\n <MLoader center={false} minHeight=\"auto\" label={loadingLabel} />\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, useMemo, type CSSProperties, type ReactNode} from 'react'\n\nimport {MStack} from '../../layout'\nimport {MTooltip} from '../../overlays'\nimport {MHeading, MSubText, MText} from '../../typography'\nimport {cn} from '../../../utils/cn'\n\nimport type {\n MWeekGridBand,\n MWeekGridCell,\n MWeekGridCellContext,\n MWeekGridProps,\n} from './MWeekGrid.types'\n\nimport './MWeekGrid.css'\n\nconst DEFAULT_DAYS = 7\nconst DEFAULT_SLOTS = 24\n\nconst DEFAULT_DAY_LABELS_FROM_SUNDAY = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']\n\nconst DEFAULT_BAND_LABELS: [string, string, string, string] = ['None', 'Few', 'Some', 'Many']\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\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 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: DEFAULT_DAY_LABELS_FROM_SUNDAY[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\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 = DEFAULT_BAND_LABELS,\n legendUnit,\n rowLabelWidth = 48,\n cellHeight = 24,\n cellMinWidth = 24,\n className,\n style,\n ...rest\n}: MWeekGridProps) {\n const grid = useMemo(() => buildGrid(data, days, slots), [data, days, slots])\n const resolvedMax = useMemo(() => resolveMax(grid, max), [grid, max])\n const rows = useMemo(\n () => resolveDayLabels(days, weekStart, dayLabels),\n [days, weekStart, dayLabels]\n )\n const cols = useMemo(() => resolveSlotLabels(slots, slotLabels), [slots, slotLabels])\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\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' ? <MHeading level={5}>{title}</MHeading> : title\n )}\n {description != null && (\n typeof description === 'string' ? (\n <MSubText tone={'muted'}>{description}</MSubText>\n ) : (\n description\n )\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 className={'mineral-week-grid__matrix'} style={matrixStyle}>\n <div />\n {cols.map((label, slot) => (\n <div key={`col-${slot}`} className={'mineral-week-grid__col-header'}>\n <MSubText size={'xs'} tone={'muted'}>\n {label}\n </MSubText>\n </div>\n ))}\n\n {rows.map(({label: dayLabel, calendarDay}, rowIndex) => (\n <Fragment key={`row-${rowIndex}-${calendarDay}`}>\n <div className={'mineral-week-grid__row-label'}>\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 )\n\n const cellNode = (\n <div\n className={cellClasses}\n style={{height: cellHeight}}\n onClick={onCellClick ? () => onCellClick(ctx) : undefined}\n role={onCellClick ? 'button' : undefined}\n tabIndex={onCellClick ? 0 : undefined}\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 </Fragment>\n ))}\n </div>\n\n {showLegend && (\n <div className={'mineral-week-grid__legend'}>\n <MSubText size={'xs'} tone={'muted'}>\n {`Scale: 0 — ${resolvedMax}${legendUnit ? ` ${legendUnit}` : ''}`}\n </MSubText>\n <div className={'mineral-week-grid__legend-bands'}>\n {([0, 1, 2, 3] as const).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 {bandLabels[band]}\n </MSubText>\n </div>\n ))}\n </div>\n </div>\n )}\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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"}
@@ -1,2 +0,0 @@
1
- const e=require(`./icons-BxurYyW-.cjs`),t=require(`./cn-CU5TNITO.cjs`),n=require(`./validators-B6yWdsu2.cjs`),r=require(`./formatters-CNjg_h7-.cjs`),i=require(`./dateUtils-Dq1vaA-D.cjs`),a=require(`./useGhostText-BTPneo4u.cjs`),o=require(`./useKeyboardNav-D_OwIEZp.cjs`),s=require(`./MPopover-DI_7niwe.cjs`),c=require(`./MButton-CMbmWmMI.cjs`),l=require(`./MCheckbox-stBujis6.cjs`),u=require(`./MTag-CgXh2PQC.cjs`),d=require(`./MInput-BSeWCsPi.cjs`),f=require(`./locale-BGLDTJSi.cjs`),p=require(`./frameworkTexts-D3wbwWCu.cjs`);require(`./core-CLRD6sG4.cjs`);let m=require(`react`),h=require(`react/jsx-runtime`);function g({options:n,value:r,defaultValue:i,onChange:a,multiple:d=!1,searchable:f=!1,placeholder:p=`Select...`,disabled:g=!1,name:_,id:ee,variant:te=`outlined`,size:v=`md`,color:y,fullWidth:ne=!1,label:b,helperText:x,errorText:S,error:re=!1,required:ie=!1,loading:ae=!1,clearable:C=!1,maxHeight:w=300,noOptionsText:T=`No options`,renderOption:oe,searchPlaceholder:E=`Search...`,renderValue:D,className:O,style:se}){let[k,A]=(0,m.useState)(!1),[j,ce]=(0,m.useState)(i??(d?[]:``)),[M,le]=(0,m.useState)(``),N=(0,m.useRef)(null),P=r===void 0?j:r,F=re||!!S,I=(0,m.useMemo)(()=>Array.isArray(P)?P:P?[P]:[],[P]),L=(0,m.useMemo)(()=>n.filter(e=>I.includes(e.value)),[n,I]),R=(0,m.useMemo)(()=>{if(!f||!M)return n;let e=M.toLowerCase();return n.filter(t=>t.label.toLowerCase().includes(e))},[n,f,M]),z=(0,m.useMemo)(()=>{let e=new Map;for(let t of R){let n=t.group??``;e.has(n)||e.set(n,[]),e.get(n).push(t)}return e},[R]),B=R,V=(0,m.useCallback)(e=>{let t=B[e];if(!(!t||t.disabled))if(d){let e=Array.isArray(P)?P:[],n=e.includes(t.value)?e.filter(e=>e!==t.value):[...e,t.value];r===void 0&&ce(n),a?.(n)}else r===void 0&&ce(t.value),a?.(t.value),A(!1),le(``)},[B,d,P,r,a]),{activeIndex:H,setActiveIndex:ue,resetIndex:U,onKeyDown:W}=o.t({itemCount:B.length,onSelect:V,onClose:()=>{A(!1),le(``)},isOpen:k}),de=(0,m.useCallback)(()=>{g||(A(e=>!e),U())},[g,U]),fe=(0,m.useCallback)(e=>{e.stopPropagation();let t=d?[]:``;r===void 0&&ce(t),a?.(t)},[d,r,a]),pe=(0,m.useMemo)(()=>D&&L.length>0?D(d?L:L[0]):d&&L.length>0?(0,h.jsx)(`span`,{className:`tags`,children:L.map(e=>(0,h.jsx)(u.t,{label:e.label,color:y,size:v,variant:`solid`},e.value))}):!d&&L.length>0?L[0].label:(0,h.jsx)(`span`,{className:`placeholder`,children:p}),[L,d,D,p,y,v]);return(0,h.jsxs)(`div`,{className:t.t(`select`,y&&`color-${y}`,ne&&`full-width`,O),style:se,children:[b&&(0,h.jsx)(`label`,{htmlFor:ee,className:t.t(`field-label`,k&&`focused`,F&&`error`,ie&&`required`),children:b}),(0,h.jsxs)(`div`,{ref:N,className:t.t(`trigger`,`field-${te}`,`field-${v}`,k&&`focused`,F&&`error`,g&&`disabled`),onClick:de,onKeyDown:W,tabIndex:g?-1:0,role:`combobox`,"aria-expanded":k,"aria-haspopup":`listbox`,"aria-invalid":F||void 0,id:ee,children:[(0,h.jsx)(`span`,{className:`value`,children:pe}),ae&&(0,h.jsx)(c.r,{size:`sm`,color:y}),C&&I.length>0&&!ae&&!g&&(0,h.jsx)(`button`,{type:`button`,className:`clear-btn clear-btn-base`,onClick:fe,tabIndex:-1,"aria-label":`Clear selection`,children:(0,h.jsx)(e.Xi,{})}),(0,h.jsx)(`span`,{className:t.t(`arrow`,k&&`open`),"aria-hidden":`true`,children:(0,h.jsx)(e.Ki,{})})]}),_&&(0,h.jsx)(`input`,{type:`hidden`,name:_,value:Array.isArray(P)?P.join(`,`):P}),(0,h.jsx)(s.t,{className:`select-popover`,open:k,anchorRef:N,onClose:()=>{A(!1),le(``)},matchWidth:!0,placement:`bottom-start`,children:(0,h.jsxs)(`div`,{style:{maxHeight:w},className:`dropdown`,children:[f&&(0,h.jsx)(`div`,{className:`search-box`,children:(0,h.jsx)(`input`,{type:`text`,className:`search-input`,placeholder:E,value:M,onChange:e=>{le(e.target.value),ue(0)},onKeyDown:W,autoFocus:!0})}),B.length===0?(0,h.jsx)(`div`,{className:`no-options`,children:T}):(0,h.jsx)(`div`,{className:`options-list`,role:`listbox`,children:[...z.entries()].map(([e,n])=>(0,h.jsxs)(`div`,{children:[e&&(0,h.jsx)(`div`,{className:`group-header`,children:e}),n.map(e=>{let n=B.indexOf(e),r=n===H,i=I.includes(e.value);return(0,h.jsxs)(`div`,{className:t.t(`option`,r&&`active`,i&&`selected`,e.disabled&&`disabled`),onClick:()=>!e.disabled&&V(n),onMouseEnter:()=>ue(n),role:`option`,"aria-selected":i,"aria-disabled":e.disabled,children:[d&&(0,h.jsx)(l.t,{checked:i,size:`sm`,color:y,clickEffect:`none`,className:`select-check`}),oe?oe(e,r,i):e.label]},e.value)})]},e))})]})}),(S||x)&&(0,h.jsx)(`div`,{className:`bottom-row`,children:S?(0,h.jsx)(`span`,{className:`field-error`,role:`alert`,children:S}):(0,h.jsx)(`span`,{className:`helper-text`,children:x})})]})}function _(e){return typeof e==`string`?e:String(e)}function ee(e){return typeof e==`string`?e:String(e)}function te(e,t,n){if(!t)return e;let r=t.toLowerCase();return e.filter(e=>n(e).toLowerCase().includes(r))}function v({options:n,value:r,onChange:i,getOptionLabel:l=_,getOptionValue:d=ee,filterOptions:f,multiple:p=!1,debounceMs:g=0,onInputChange:v,loading:y=!1,loadingText:ne=`Loading...`,noOptionsText:b=`No options`,placeholder:x=`Type to search...`,disabled:S=!1,name:re,id:ie,variant:ae=`outlined`,size:C=`md`,color:w,fullWidth:T=!1,label:oe,helperText:E,errorText:D,error:O=!1,required:se=!1,clearable:k=!1,maxHeight:A=300,renderOption:j,renderTags:ce,className:M,style:le}){let[N,P]=(0,m.useState)(!1),[F,I]=(0,m.useState)(``),L=(0,m.useRef)(null),R=(0,m.useRef)(null),z=O||!!D,B=(0,m.useMemo)(()=>r==null?[]:Array.isArray(r)?r.filter(e=>e!=null):[r],[r]),V=(0,m.useMemo)(()=>f?f(n,F):te(n,F,l),[n,F,f,l]),H=a.r(e=>v?.(e),g),ue=(0,m.useCallback)(e=>{I(e.target.value),H(e.target.value),N||P(!0)},[N,H]),U=(0,m.useCallback)(e=>{let t=V[e];if(t)if(p){let e=[...B],n=d(t),r=e.findIndex(e=>d(e)===n);r>=0?e.splice(r,1):e.push(t),i?.(e),I(``),R.current?.focus()}else i?.(t),I(l(t)),P(!1)},[V,p,B,d,l,i]),W=(0,m.useCallback)(e=>{let t=[...B];t.splice(e,1),i?.(p?t:t[0]??``)},[B,i,p]),{activeIndex:de,setActiveIndex:fe,resetIndex:pe,onKeyDown:me}=o.t({itemCount:V.length,onSelect:U,onClose:()=>P(!1),isOpen:N}),G=(0,m.useCallback)(e=>{if(e.key===`Backspace`&&p&&!F&&B.length>0){W(B.length-1);return}me(e)},[F,p,B,me,W]),K=(0,m.useCallback)(e=>{e.stopPropagation(),I(``),i?.(p?[]:``),R.current?.focus()},[p,i]);return(0,h.jsxs)(`div`,{className:t.t(`autocomplete`,w&&`color-${w}`,T&&`full-width`,M),style:le,children:[oe&&(0,h.jsx)(`label`,{htmlFor:ie,className:t.t(`field-label`,N&&`focused`,z&&`error`,se&&`required`),children:oe}),(0,h.jsxs)(`div`,{ref:L,className:t.t(`input-wrapper`,`field-${ae}`,`field-${C}`,N&&`focused`,z&&`error`,S&&`disabled`),onClick:()=>R.current?.focus(),children:[p&&B.length>0&&(ce?ce(B,W):(0,h.jsx)(`span`,{className:`tags`,children:B.map((e,t)=>(0,h.jsx)(u.t,{label:l(e),color:w,size:C,variant:`solid`,closable:!0,onClose:()=>W(t)},d(e)))})),(0,h.jsx)(`input`,{ref:R,type:`text`,className:`input`,value:F,onChange:ue,onFocus:()=>{P(!0),pe()},onKeyDown:G,placeholder:B.length>0?``:x,disabled:S,id:ie,"aria-expanded":N,"aria-haspopup":`listbox`,"aria-invalid":z||void 0,autoComplete:`off`}),y&&(0,h.jsx)(c.r,{size:`sm`,color:w}),k&&(B.length>0||F)&&!y&&!S&&(0,h.jsx)(`button`,{type:`button`,className:`clear-btn clear-btn-base`,onClick:K,tabIndex:-1,children:(0,h.jsx)(e.Xi,{})})]}),re&&(0,h.jsx)(`input`,{type:`hidden`,name:re,value:B.map(d).join(`,`)}),(0,h.jsx)(s.t,{className:t.t(`autocomplete-popover`,w&&`color-${w}`),open:N&&(V.length>0||y||!!F),anchorRef:L,onClose:()=>P(!1),matchWidth:!0,placement:`bottom-start`,children:(0,h.jsx)(`div`,{style:{maxHeight:A},className:`dropdown`,children:y?(0,h.jsx)(`div`,{className:`loading-msg`,children:ne}):V.length===0?(0,h.jsx)(`div`,{className:`no-options`,children:b}):(0,h.jsx)(`div`,{className:`options-list`,role:`listbox`,children:V.map((e,n)=>{let r=n===de,i=B.some(t=>d(t)===d(e));return(0,h.jsx)(`div`,{className:t.t(`option`,r&&`active`,i&&`selected`),onClick:()=>U(n),onMouseEnter:()=>fe(n),role:`option`,"aria-selected":i,children:j?j(e,r):l(e)},d(e))})})})}),(D||E)&&(0,h.jsx)(`div`,{className:`bottom-row`,children:D?(0,h.jsx)(`span`,{className:`field-error`,role:`alert`,children:D}):(0,h.jsx)(`span`,{className:`helper-text`,children:E})})]})}var y={primary:`var(--mineral-primary-rgb)`,neutral:`var(--mineral-neutral-rgb)`,success:`var(--mineral-success-rgb)`,error:`var(--mineral-error-rgb)`,warning:`var(--mineral-warning-rgb)`,info:`var(--mineral-info-rgb)`,light:`var(--mineral-light-rgb)`,dark:`var(--mineral-dark-color-rgb)`,news:`var(--mineral-news-rgb)`};function ne(e){return y[e??`primary`]??y.primary}var b=`Date is unavailable`,x=`Invalid time`;function S(e){if(!e)return null;if(e instanceof Date)return isNaN(e.getTime())?null:new Date(e.getTime());let t=new Date(e);return isNaN(t.getTime())?null:t}function re(e){let t=e.replace(/DD/g,`dd`).replace(/YYYY/g,`yyyy`),n=t.match(/dd|MM|yyyy/g),r=t.match(/[^dMy]/)?.[0],i=r===`/`||r===`.`||r===`-`?r:`.`;switch(n?.join(`/`)){case`MM/dd/yyyy`:return{inputFormat:`MM/DD/YYYY`,separator:i};case`yyyy/MM/dd`:return{inputFormat:`YYYY/MM/DD`,separator:i};default:return{inputFormat:`DD/MM/YYYY`,separator:i}}}function ie(e,t){return e===`12h`?t?`hh:mm:ss AM`:`hh:mm AM`:t?`HH:MM:SS`:`HH:MM`}function ae(e,t,n,r,i,a){return e||(n?`${t} ${a??ie(r,i)}`:t)}function C(e,t){if(!e)return``;let n=i.o(i._(e),t.format);return t.withTime?`${n} ${i.l(e.getHours(),e.getMinutes(),e.getSeconds(),t.showSeconds,t.timeFormat)}`:n}function w(e,t){return e?e.length<=2?e:e.length<=4?`${e.slice(0,2)}:${e.slice(2)}`:t?`${e.slice(0,2)}:${e.slice(2,4)}:${e.slice(4,6)}`:`${e.slice(0,2)}:${e.slice(2,4)}`:``}function T(e){let t=e.toUpperCase().replace(/[^APM]/g,``);return t?t.startsWith(`AM`)?`AM`:t.startsWith(`PM`)?`PM`:t.startsWith(`A`)?`A`:t.startsWith(`P`)?`P`:``:``}function oe(e,t){let n=e.trim();if(!n)return{datePart:``,timePart:``};if(!t)return{datePart:n,timePart:``};let r=n.indexOf(` `);return r===-1?{datePart:n,timePart:``}:{datePart:n.slice(0,r).trim(),timePart:n.slice(r+1).trim()}}function E(e,t){let n=e.toUpperCase(),i=r.u(n),a=i.slice(0,8),o=t.withTime?i.slice(8,8+(t.showSeconds?6:4)):``,s=r.i(a,t.inputFormat,t.separator);if(!t.withTime)return{formatted:s,datePart:s,timePart:``};let c=w(o,t.showSeconds),l=t.timeFormat===`12h`?T(n):``,u=`${c}${l?`${c?` `:``}${l}`:``}`.trim();if(!s)return{formatted:u,datePart:``,timePart:u};let d=a.length===8,f=/\s/.test(n.slice(s.length));return{formatted:u||d&&f?`${s} ${u}`:s,datePart:s,timePart:u}}function D(e,t){return e?i.l(e.getHours(),e.getMinutes(),e.getSeconds(),t,`24h`):``}function O(e,t){let{datePart:r,timePart:a}=oe(e,t.withTime);if(!r&&!a)return{status:`empty`};let o=n.a(r,{format:t.inputFormat,minDate:t.minDate??void 0,maxDate:t.maxDate??void 0});if(!o.valid)return o.error===`Incomplete date`?{status:`partial`,datePart:r,timePart:a}:{status:`invalid`,datePart:r,timePart:a,result:o};let s=n.i(r,t.inputFormat);return s?t.isDisabled(s)?{status:`invalid`,datePart:r,timePart:a,result:{valid:!1,error:b}}:t.withTime?a?i.g(a,t.timeFormat)?{status:`valid`,datePart:r,timePart:a,value:i.r(s,a,{format:t.timeFormat,showSeconds:t.showSeconds})}:{status:`invalid`,datePart:r,timePart:a,result:{valid:!1,error:x}}:{status:`valid`,datePart:r,timePart:``,value:i.r(s,``,{format:t.timeFormat,showSeconds:t.showSeconds})}:{status:`valid`,datePart:r,timePart:``,value:i._(s)}:{status:`invalid`,datePart:r,timePart:a,result:{valid:!1,error:`Invalid date`}}}function se(e){let t=e.hours>=12?`PM`:`AM`;return{hours:e.hours%12||12,minutes:e.minutes,seconds:e.seconds,meridiem:t}}function k(e,t){return t===`AM`?e===12?0:e:e===12?12:e+12}function A({value:n,defaultValue:a,onChange:o,format:c=`dd.MM.yyyy`,locale:l,min:u,max:g,disabledDates:_,placeholder:ee,disabled:te=!1,readOnly:v=!1,name:y,id:b,variant:ie=`outlined`,size:w=`md`,color:T,label:oe,helperText:A,errorText:ce,error:M=!1,required:le=!1,clearable:N=!1,withTime:P=!1,validateOnBlur:F=!0,validateOnChange:I=!1,onValidationChange:L,timeFormat:R=`24h`,showSeconds:z=!1,minuteStep:B=1,timePlaceholder:V,inline:H=!1,showTodayButton:ue=!0,firstDayOfWeek:U=1,fullWidth:W=!1,className:de,style:fe}){let pe=f.t(l),me=p.t(),{inputFormat:G,separator:K}=(0,m.useMemo)(()=>re(c),[c]),[he,ge]=(0,m.useState)(!1),[_e,ve]=(0,m.useState)(()=>S(a)),[ye,be]=(0,m.useState)({valid:!0}),[xe,q]=(0,m.useState)(!1),J=n===void 0?_e:S(n),[Se,Ce]=(0,m.useState)(()=>C(J,{format:c,withTime:P,timeFormat:R,showSeconds:z})),[we,Te]=(0,m.useState)(()=>D(J,z)),[Y,Ee]=(0,m.useState)(()=>{let e=J?i._(J):new Date;return new Date(e.getFullYear(),e.getMonth(),1)}),[De,Oe]=(0,m.useState)(`days`),ke=(0,m.useRef)(null),Ae=J?.getTime()??null,je=S(u),Me=S(g),Ne=M||xe&&!ye.valid,Pe=ce||(xe&&!ye.valid?ye.error:void 0),Fe=i.u(pe,U),Ie=i.d(pe);(0,m.useEffect)(()=>{if(Ce(C(J,{format:c,withTime:P,timeFormat:R,showSeconds:z})),Te(D(J,z)),J){let e=i._(J);Ee(new Date(e.getFullYear(),e.getMonth(),1))}},[c,Ae,z,R,P]);let X=(0,m.useCallback)(e=>i.f(e,je,Me)?Array.isArray(_)?_.some(t=>i.p(t,e)):typeof _==`function`?_(e):!1:!0,[_,Me,je]),Z=(0,m.useCallback)(e=>{be(e),L?.(e)},[L]),Q=(0,m.useCallback)(e=>{n===void 0&&ve(e),o?.(e)},[o,n]),Le=(0,m.useMemo)(()=>O(Se,{inputFormat:G,minDate:je,maxDate:Me,withTime:P,timeFormat:R,showSeconds:z,isDisabled:X}),[G,Se,X,Me,je,z,R,P]),Re=(0,m.useMemo)(()=>Le.status===`valid`?i._(Le.value):J?i._(J):null,[Le,J]),$=(0,m.useMemo)(()=>P?i.g(Le.status!==`empty`&&Le.timePart?Le.timePart:we||D(J,z),R)??{hours:0,minutes:0,seconds:0}:null,[we,Le,J,z,R,P]),ze=(0,m.useCallback)(e=>{let t=E(e.target.value,{inputFormat:G,separator:K,withTime:P,timeFormat:R,showSeconds:z});Ce(t.formatted),Te(t.timePart);let n=O(t.formatted,{inputFormat:G,minDate:je,maxDate:Me,withTime:P,timeFormat:R,showSeconds:z,isDisabled:X});if(n.status===`empty`){Z({valid:!0}),Q(null);return}if(n.status===`invalid`&&I)Z(n.result);else if(n.status===`valid`){Z({valid:!0}),Ee(new Date(n.value.getFullYear(),n.value.getMonth(),1));let t=z?6:4,i=P?r.u(e.target.value).slice(8).length:0;(!P||i>=t)&&Q(n.value)}},[Q,Z,G,X,Me,je,K,z,R,I,P]),Be=(0,m.useCallback)(()=>{q(!0);let e=O(Se,{inputFormat:G,minDate:je,maxDate:Me,withTime:P,timeFormat:R,showSeconds:z,isDisabled:X});if(e.status===`empty`){Z({valid:!0});return}if(e.status===`partial`){F&&Z({valid:!1,error:`Incomplete date`});return}if(e.status===`invalid`){if(P&&e.result.error===x&&e.datePart){let t=i.l(0,0,0,z,R),n=O(`${e.datePart} ${t}`,{inputFormat:G,minDate:je,maxDate:Me,withTime:P,timeFormat:R,showSeconds:z,isDisabled:X});if(n.status===`valid`){Z({valid:!0}),Ce(C(n.value,{format:c,withTime:P,timeFormat:R,showSeconds:z})),Te(D(n.value,z)),Q(n.value);return}}F&&Z(e.result);return}Z({valid:!0}),Ce(C(e.value,{format:c,withTime:P,timeFormat:R,showSeconds:z})),Te(D(e.value,z)),Q(e.value)},[Q,Z,c,G,Se,X,Me,je,z,R,F,P]),Ve=(0,m.useCallback)(e=>{[`Backspace`,`Delete`,`Tab`,`ArrowLeft`,`ArrowRight`,`Home`,`End`,`Enter`].includes(e.key)||e.ctrlKey||e.metaKey||(P?/^[0-9\s:./-APMapm]$/:/^[0-9./-]$/).test(e.key)||e.preventDefault()},[P]),He=(0,m.useCallback)(()=>{Ce(``),Te(``),q(!1),Z({valid:!0}),Q(null)},[Q,Z]),Ue=(0,m.useCallback)(e=>{e.preventDefault(),e.stopPropagation(),!(te||v||H)&&ge(e=>!e)},[te,H,v]),We=(0,m.useCallback)(e=>{if(X(e))return;let t=P?we||i.l(0,0,0,z,R):``,n=P?i.r(e,t,{format:R,showSeconds:z}):i._(e);q(!0),Z({valid:!0}),Te(t),Ce(C(n,{format:c,withTime:P,timeFormat:R,showSeconds:z})),Ee(new Date(e.getFullYear(),e.getMonth(),1)),Q(n),!P&&!H&&ge(!1)},[Q,we,Z,c,H,X,z,R,P]),Ge=(0,m.useCallback)(()=>{let e=i._(new Date);X(e)||We(e)},[We,X]),Ke=(0,m.useMemo)(()=>{if(!P)return[];let e=[],t=R===`12h`?12:23,n=+(R===`12h`);for(let r=n;r<=t;r+=1)e.push(r);return e},[R,P]),qe=(0,m.useMemo)(()=>{if(!P)return[];let e=[];for(let t=0;t<60;t+=B)e.push(t);return e},[B,P]),Je=(0,m.useMemo)(()=>{if(!P||!z)return[];let e=[];for(let t=0;t<60;t+=1)e.push(t);return e},[z,P]),Ye=(0,m.useCallback)((e,t,n=0)=>{let r=i.l(e,t,n,z,R),a=Re;if(q(!0),Te(r),!a){Ce(r);return}let o=i.r(a,r,{format:R,showSeconds:z});Z({valid:!0}),Ce(C(o,{format:c,withTime:P,timeFormat:R,showSeconds:z})),Q(o)},[Q,Re,Z,c,z,R,P]),Xe=(0,m.useCallback)(e=>{Ye(k($?se($).hours:12,e),$?.minutes??0,$?.seconds??0)},[$,Ye]),Ze=(0,m.useMemo)(()=>p.s(Y,U).map(e=>({date:e,currentMonth:e.getMonth()===Y.getMonth()})),[U,Y]),Qe=i._(new Date),$e=J?i._(J):Re,et=()=>(0,h.jsxs)(`div`,{className:`calendar`,children:[(0,h.jsxs)(`div`,{className:`calendar-header`,children:[(0,h.jsx)(`button`,{type:`button`,className:`nav-btn`,onClick:()=>Ee(i.t(Y,-1)),"aria-label":me.previousMonth,children:(0,h.jsx)(e.Ji,{})}),(0,h.jsxs)(`button`,{type:`button`,className:`header-title`,onClick:()=>Oe(e=>e===`days`?`months`:`days`),children:[Ie[Y.getMonth()],` `,Y.getFullYear()]}),(0,h.jsx)(`button`,{type:`button`,className:`nav-btn`,onClick:()=>Ee(i.t(Y,1)),"aria-label":me.nextMonth,children:(0,h.jsx)(e.qi,{})})]}),De===`days`?(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(`div`,{className:`day-names`,children:Fe.map(e=>(0,h.jsx)(`span`,{className:`day-name`,children:e},e))}),(0,h.jsx)(`div`,{className:`day-grid`,children:Ze.map(({date:e,currentMonth:n},r)=>{let a=$e?i.p(e,$e):!1,o=i.p(e,Qe),s=X(e);return(0,h.jsx)(`button`,{type:`button`,className:t.t(`day`,!n&&`other-month`,o&&`today`,a&&`selected`,s&&`disabled`),onClick:()=>We(e),disabled:s,tabIndex:-1,children:e.getDate()},`${e.toISOString()}-${r}`)})})]}):(0,h.jsx)(`div`,{className:`month-grid`,children:Ie.map((e,n)=>(0,h.jsx)(`button`,{type:`button`,className:t.t(`month-cell`,Y.getMonth()===n&&`selected`),onClick:()=>{Ee(new Date(Y.getFullYear(),n,1)),Oe(`days`)},children:e.slice(0,3)},e))}),ue&&(0,h.jsx)(`div`,{className:`footer`,children:(0,h.jsx)(`button`,{type:`button`,className:`today-btn`,onClick:Ge,children:me.today})})]}),tt=()=>{if(!P)return null;let e=$?se($):null;return(0,h.jsxs)(`div`,{className:`date-picker-time-panel`,children:[(0,h.jsx)(`div`,{className:`date-picker-time-header`,children:`Time`}),(0,h.jsxs)(`div`,{className:`date-picker-time-columns`,children:[(0,h.jsx)(j,{items:Ke,selected:R===`12h`?e?.hours:$?.hours,onSelect:t=>Ye(R===`12h`?k(t,e?.meridiem??`AM`):t,$?.minutes??0,$?.seconds??0),label:`Hr`}),(0,h.jsx)(j,{items:qe,selected:$?.minutes,onSelect:e=>Ye($?.hours??0,e,$?.seconds??0),label:`Min`}),z&&(0,h.jsx)(j,{items:Je,selected:$?.seconds,onSelect:e=>Ye($?.hours??0,$?.minutes??0,e),label:`Sec`}),R===`12h`&&(0,h.jsx)(j,{items:[`AM`,`PM`],selected:e?.meridiem,onSelect:Xe,label:`AM/PM`})]})]})},nt=()=>(0,h.jsxs)(`div`,{className:t.t(`date-picker-popover-content`,P&&`with-time`),children:[et(),tt()]}),rt=P?R===`12h`?z?22:19:z?19:16:10,it=ae(ee,c,P,R,z,V);return H?(0,h.jsxs)(`div`,{className:t.t(`date-picker`,T&&`color-${T}`,W&&`full-width`,de),style:fe,children:[(0,h.jsx)(d.t,{value:Se,onChange:ze,onBlur:Be,onKeyDown:Ve,onClear:He,type:`text`,inputMode:P?`text`:`numeric`,autoComplete:`off`,maxLength:rt,placeholder:it,disabled:te,readOnly:v,id:b,variant:ie,size:w,color:T,label:oe,helperText:A,error:Ne,errorText:Pe,required:le,clearable:N,fullWidth:W}),nt(),y&&J&&(0,h.jsx)(`input`,{type:`hidden`,name:y,value:i.s(J,P,z)})]}):(0,h.jsxs)(`div`,{className:t.t(`date-picker`,T&&`color-${T}`,W&&`full-width`,de),style:fe,children:[(0,h.jsx)(`div`,{ref:ke,className:`date-picker-input-anchor`,children:(0,h.jsx)(d.t,{value:Se,onChange:ze,onBlur:Be,onKeyDown:Ve,onClear:He,type:`text`,inputMode:P?`text`:`numeric`,autoComplete:`off`,maxLength:rt,placeholder:it,disabled:te,readOnly:v,id:b,variant:ie,size:w,color:T,label:oe,helperText:A,error:Ne,errorText:Pe,required:le,clearable:N,fullWidth:W,endIcon:(0,h.jsx)(`button`,{type:`button`,className:`date-picker-toggle`,onMouseDown:e=>e.preventDefault(),onClick:Ue,"aria-label":`Open calendar`,disabled:te||v,children:(0,h.jsx)(e.Ri,{})})})}),y&&J&&(0,h.jsx)(`input`,{type:`hidden`,name:y,value:i.s(J,P,z)}),(0,h.jsx)(s.t,{className:`date-picker-popover`,style:{"--color-rgb":ne(T)},open:he,anchorRef:ke,onClose:()=>ge(!1),placement:`bottom-start`,children:nt()})]})}function j({items:e,selected:n,onSelect:r,label:i}){let a=(0,m.useRef)(null);(0,m.useEffect)(()=>{if(n===void 0||!a.current)return;let e=a.current.querySelector(`[data-value="${n}"]`);if(e){let t=a.current;t.scrollTop=e.offsetTop-t.clientHeight/2+e.offsetHeight/2}},[n]);let o=e=>typeof e==`number`?e.toString().padStart(2,`0`):e;return(0,h.jsxs)(`div`,{className:`date-picker-time-column`,children:[(0,h.jsx)(`div`,{className:`date-picker-time-column-label`,children:i}),(0,h.jsx)(`div`,{ref:a,className:`date-picker-time-column-list`,children:e.map(e=>(0,h.jsx)(`button`,{type:`button`,"data-value":e,className:t.t(`date-picker-time-column-item`,e===n&&`selected`),onClick:()=>r(e),children:o(e)},e))})]})}function ce(e){let t=e.hours>=12?`PM`:`AM`;return{hours:e.hours%12||12,minutes:e.minutes,seconds:e.seconds,meridiem:t}}function M(e,t){return t===`AM`?e===12?0:e:e===12?12:e+12}function le(e,t,n,r,a){if(a===`24h`)return i.c(e,t,n,r);let o=ce({hours:e,minutes:t,seconds:n}),s=`${o.hours.toString().padStart(2,`0`)}:${o.minutes.toString().padStart(2,`0`)}`;return`${r?`${s}:${o.seconds.toString().padStart(2,`0`)}`:s} ${o.meridiem}`}function N(e,t){if(t===`24h`)return i.h(e);let n=e.trim().toUpperCase().match(/^(\d{1,2}):(\d{2})(?::(\d{2}))?\s*(AM|PM)$/);if(n){let e=parseInt(n[1],10),t=parseInt(n[2],10),r=n[3]?parseInt(n[3],10):0,i=n[4];return e<1||e>12||t>59||r>59?null:{hours:M(e,i),minutes:t,seconds:r}}return i.h(e)}function P(e,t){return e.hours===t.hours?e.minutes===t.minutes?e.seconds-t.seconds:e.minutes-t.minutes:e.hours-t.hours}function F(e,t,n){return(!t||P(e,t)>=0)&&(!n||P(e,n)<=0)}function I({value:n,defaultValue:r,onChange:i,format:a=`24h`,showSeconds:o=!1,minuteStep:c=1,min:l,max:u,placeholder:d,disabled:f=!1,readOnly:p=!1,name:g,id:_,variant:ee=`outlined`,size:te=`md`,color:v,label:y,helperText:ne,errorText:b,error:x=!1,required:S=!1,clearable:re=!1,fullWidth:ie=!1,className:ae,style:C}){let[w,T]=(0,m.useState)(!1),[oe,E]=(0,m.useState)(r??``),D=(0,m.useRef)(null),O=n===void 0?oe:n,se=x||!!b,k=N(O,a),A=N(l??``,a),j=N(u??``,a),P=k?ce(k):null,I=k?le(k.hours,k.minutes,k.seconds,o,a):O,R=(0,m.useMemo)(()=>{let e=[],t=a===`12h`?12:23,n=+(a===`12h`);for(let r=n;r<=t;r++)e.push(r);return e},[a]),z=(0,m.useMemo)(()=>{let e=[];for(let t=0;t<60;t+=c)e.push(t);return e},[c]),B=(0,m.useMemo)(()=>{if(!o)return[];let e=[];for(let t=0;t<60;t++)e.push(t);return e},[o]),V=(0,m.useCallback)((e,t,n=0)=>F({hours:e,minutes:t,seconds:n},A,j),[j,A]),H=(0,m.useCallback)((e,t,r=0)=>{if(!V(e,t,r))return;let s=le(e,t,r,o,a);n===void 0&&E(s),i?.(s)},[a,V,i,o,n]),ue=(0,m.useCallback)(e=>{let t=e.target.value;n===void 0&&E(t)},[n]),U=(0,m.useCallback)(()=>{let e=N(O,a);if(e&&F(e,A,j)){let t=le(e.hours,e.minutes,e.seconds,o,a);n===void 0&&E(t),i?.(t)}},[O,a,j,A,i,o,n]),W=(0,m.useCallback)(e=>{let t=P?.hours??12,n=k?.minutes??0,r=k?.seconds??0;H(M(t,e),n,r)},[P?.hours,H,k?.minutes,k?.seconds]),de=(0,m.useCallback)(e=>{e.stopPropagation(),n===void 0&&E(``),i?.(``)},[i,n]);return(0,h.jsxs)(`div`,{className:t.t(`time picker`,v&&`color-${v}`,ie&&`full-width`,ae),style:C,children:[y&&(0,h.jsx)(`label`,{htmlFor:_,className:t.t(`field-label`,w&&`focused`,se&&`error`,S&&`required`),children:y}),(0,h.jsxs)(`div`,{ref:D,className:t.t(`time trigger`,`field-${ee}`,`field-${te}`,w&&`focused`,se&&`error`,f&&`disabled`),onClick:()=>!f&&!p&&T(!0),children:[(0,h.jsx)(`span`,{className:`time icon`,children:(0,h.jsx)(e.Li,{})}),(0,h.jsx)(`input`,{type:`text`,className:`time input`,value:I,onChange:ue,onBlur:U,placeholder:d??(a===`12h`?o?`hh:mm:ss AM`:`hh:mm AM`:o?`HH:MM:SS`:`HH:MM`),disabled:f,readOnly:p,id:_,"aria-invalid":se||void 0}),re&&O&&!f&&(0,h.jsx)(`button`,{type:`button`,className:`time clear clear-btn-base`,onClick:de,tabIndex:-1,"aria-label":`Clear time`,children:(0,h.jsx)(e.Xi,{})})]}),g&&(0,h.jsx)(`input`,{type:`hidden`,name:g,value:I}),(0,h.jsx)(s.t,{className:`time picker popover`,open:w,anchorRef:D,onClose:()=>T(!1),placement:`bottom-start`,children:(0,h.jsxs)(`div`,{className:`time columns`,children:[(0,h.jsx)(L,{items:R,selected:a===`12h`?P?.hours:k?.hours,onSelect:e=>H(a===`12h`?M(e,P?.meridiem??`AM`):e,k?.minutes??0,k?.seconds??0),isDisabled:e=>!V(a===`12h`?M(e,P?.meridiem??`AM`):e,k?.minutes??0,k?.seconds??0),label:`Hr`}),(0,h.jsx)(L,{items:z,selected:k?.minutes,onSelect:e=>H(k?.hours??0,e,k?.seconds??0),isDisabled:e=>!V(k?.hours??0,e,k?.seconds??0),label:`Min`}),o&&(0,h.jsx)(L,{items:B,selected:k?.seconds,onSelect:e=>H(k?.hours??0,k?.minutes??0,e),isDisabled:e=>!V(k?.hours??0,k?.minutes??0,e),label:`Sec`}),a===`12h`&&(0,h.jsx)(L,{items:[`AM`,`PM`],selected:P?.meridiem,onSelect:W,label:`AM/PM`})]})}),(b||ne)&&(0,h.jsx)(`div`,{className:`time bottom`,children:b?(0,h.jsx)(`span`,{className:`field-error`,role:`alert`,children:b}):(0,h.jsx)(`span`,{className:`time helper`,children:ne})})]})}function L({items:e,selected:n,onSelect:r,isDisabled:i,label:a}){let o=(0,m.useRef)(null);(0,m.useEffect)(()=>{if(n===void 0||!o.current)return;let e=o.current.querySelector(`[data-value="${n}"]`);if(e){let t=o.current;t.scrollTop=e.offsetTop-t.clientHeight/2+e.offsetHeight/2}},[n]);let s=e=>typeof e==`number`?e.toString().padStart(2,`0`):e;return(0,h.jsxs)(`div`,{className:`time column`,children:[(0,h.jsx)(`div`,{className:`time column label`,children:a}),(0,h.jsx)(`div`,{ref:o,className:`time column list`,children:e.map(e=>{let a=i?.(e)??!1;return(0,h.jsx)(`button`,{type:`button`,"data-value":e,className:t.t(`time column item`,e===n&&`selected`,a&&`disabled`),onClick:()=>r(e),disabled:a,children:s(e)},e)})})]})}function R(e){if(!e)return null;if(e instanceof Date)return i._(e);let t=new Date(e);return isNaN(t.getTime())?null:i._(t)}function z(e,t){return e.getTime()<=t.getTime()?{start:e,end:t}:{start:t,end:e}}function B(e,t,n){if(!t||!n)return!1;let r=e.getTime();return r>t.getTime()&&r<n.getTime()}function V(e,t,n){return e&&t?`${i.o(e,n)} - ${i.o(t,n)}`:e?`${i.o(e,n)} - ...`:``}function H(e){return new Date(e.getFullYear(),e.getMonth(),1)}function ue(e){return new Date(e.getFullYear(),e.getMonth()+1,0)}function U(e){let t=i._(new Date);return t.setDate(t.getDate()-(e-1)),t}function W(e){let t=i._(new Date);return new Date(t.getFullYear(),t.getMonth()-e,t.getDate())}function de(e){let t=i._(new Date),n=new Date(t.getFullYear(),t.getMonth()-1,1);return[{label:e.presets.today,value:{start:t,end:t}},{label:e.presets.days2,value:{start:U(2),end:t}},{label:e.presets.days3,value:{start:U(3),end:t}},{label:e.presets.days7,value:{start:U(7),end:t}},{label:e.presets.days14,value:{start:U(14),end:t}},{label:e.presets.days31,value:{start:U(31),end:t}},{label:e.presets.thisMonth,value:{start:H(t),end:ue(t)}},{label:e.presets.previousMonth,value:{start:H(n),end:ue(n)}},{label:e.presets.months2,value:{start:W(2),end:t}},{label:e.presets.months3,value:{start:W(3),end:t}},{label:e.presets.months6,value:{start:W(6),end:t}},{label:e.presets.year1,value:{start:W(12),end:t}}]}function fe(e,t){let n=e.getFullYear(),r=e.getMonth(),a=i.i(n,r),o=i.a(n,r);t===1&&(o=o===0?6:o-1);let s=[],c=r===0?11:r-1,l=r===0?n-1:n,u=i.i(l,c);for(let e=o-1;e>=0;--e)s.push({date:new Date(l,c,u-e),currentMonth:!1});for(let e=1;e<=a;e+=1)s.push({date:new Date(n,r,e),currentMonth:!0});let d=42-s.length,f=r===11?0:r+1,p=r===11?n+1:n;for(let e=1;e<=d;e+=1)s.push({date:new Date(p,f,e),currentMonth:!1});return s}function pe({value:n,defaultValue:r,onChange:a,format:o=`dd.MM.yyyy`,locale:c,min:l,max:u,disabledDates:d,placeholder:g,disabled:_=!1,readOnly:ee=!1,name:te,id:v,variant:y=`outlined`,size:b=`md`,color:x,label:S,helperText:re,errorText:ie,error:ae=!1,required:C=!1,clearable:w=!1,inline:T=!1,showTodayButton:oe=!0,presets:E=!1,presetsSidebar:D=!1,firstDayOfWeek:O=1,fullWidth:se=!1,allowSameDay:k=!0,className:A,style:j}){let ce=f.t(c),M=n?{start:R(n.start),end:R(n.end)}:null,[le,N]=(0,m.useState)(()=>({start:R(r?.start),end:R(r?.end)})),[P,F]=(0,m.useState)(null),[I,L]=(0,m.useState)(!1),H=(0,m.useRef)(null),ue=M??le,U=ue.start,W=ue.end,pe=R(l),me=R(u),G=ae||!!ie,K=p.n(),he=i.u(ce,O),ge=i.d(ce),_e=(0,m.useMemo)(()=>E===!0||D&&!E?de(K):Array.isArray(E)?E:[],[E,D,K]),[ve,ye]=(0,m.useState)(()=>{let e=U??new Date;return new Date(e.getFullYear(),e.getMonth(),1)}),be=U?.getTime()??null;(0,m.useEffect)(()=>{if(!be)return;let e=new Date(be);ye(new Date(e.getFullYear(),e.getMonth(),1))},[be]);let xe=(0,m.useCallback)(e=>i.f(e,pe,me)?Array.isArray(d)?d.some(t=>i.p(t,e)):typeof d==`function`?d(e):!1:!0,[d,me,pe]),q=(0,m.useCallback)(e=>{n===void 0&&N(e),a?.(e)},[a,n]),J=(0,m.useCallback)(e=>{if(!xe(e)){if(!U||U&&W){q({start:e,end:null}),F(null);return}!k&&i.p(e,U)||(q(z(U,e)),F(null),T||L(!1))}},[k,q,W,T,xe,U]),Se=(0,m.useCallback)(e=>{e.stopPropagation(),q({start:null,end:null}),F(null)},[q]),Ce=(0,m.useCallback)(()=>{let e=i._(new Date);xe(e)||(q({start:e,end:e}),ye(new Date(e.getFullYear(),e.getMonth(),1)),F(null),T||L(!1))},[q,T,xe]),we=(0,m.useCallback)(e=>{let t=R(e.value.start),n=R(e.value.end);if(!t||!n)return;let r=z(t,n);xe(r.start)||xe(r.end)||(q(r),ye(new Date(r.start.getFullYear(),r.start.getMonth(),1)),F(null),T||L(!1))},[q,T,xe]),Te=U&&!W?P:null,Y=ve,Ee=i.t(ve,1),De=i._(new Date),Oe=(0,m.useMemo)(()=>V(U,W,o),[W,o,U]),ke=(0,m.useMemo)(()=>[Y,Ee].map(e=>({monthDate:e,days:fe(e,O)})),[O,Y,Ee]),Ae=U&&W?`${i.o(U,o)} - ${i.o(W,o)}`:U?`${i.o(U,o)} - ...`:g??K.defaultRangePlaceholder,je=D&&_e.length>0,Me=!D&&_e.length>0,Ne=()=>(0,h.jsx)(`div`,{className:`presets-sidebar`,children:_e.map(e=>(0,h.jsx)(`button`,{type:`button`,className:`preset-sidebar-btn`,onClick:()=>we(e),children:e.label},e.label))}),Pe=()=>(0,h.jsxs)(`div`,{className:`calendar-body`,children:[(0,h.jsxs)(`div`,{className:`calendar-top`,children:[(0,h.jsxs)(`div`,{className:`calendar-caption`,children:[(0,h.jsxs)(`span`,{className:`caption-title`,children:[ge[Y.getMonth()],` `,Y.getFullYear()]}),(0,h.jsx)(`span`,{className:`caption-subtitle`,children:K.rangeSubtitle})]}),(0,h.jsxs)(`div`,{className:`nav-actions`,children:[(0,h.jsx)(`button`,{type:`button`,className:`nav-btn`,onClick:()=>ye(i.t(ve,-1)),"aria-label":K.previousMonth,children:(0,h.jsx)(e.Ji,{})}),(0,h.jsx)(`button`,{type:`button`,className:`nav-btn`,onClick:()=>ye(i.t(ve,1)),"aria-label":K.nextMonth,children:(0,h.jsx)(e.qi,{})})]})]}),Me&&(0,h.jsx)(`div`,{className:`presets`,children:_e.map(e=>(0,h.jsx)(`button`,{type:`button`,className:`preset-btn`,onClick:()=>we(e),children:e.label},e.label))}),(0,h.jsx)(`div`,{className:`months`,children:ke.map(({monthDate:e,days:n})=>(0,h.jsxs)(`div`,{className:`month-panel`,children:[(0,h.jsxs)(`div`,{className:`month-title`,children:[ge[e.getMonth()],` `,e.getFullYear()]}),(0,h.jsx)(`div`,{className:`day-names`,children:he.map(t=>(0,h.jsx)(`span`,{className:`day-name`,children:t},`${e.toISOString()}-${t}`))}),(0,h.jsx)(`div`,{className:`day-grid`,children:n.map(({date:n,currentMonth:r},a)=>{let o=xe(n),s=U?i.p(n,U):!1,c=W?i.p(n,W):!1,l=B(n,U,W),u=!W&&U&&Te?z(U,Te):null,d=u?B(n,u.start,u.end):!1,f=u?i.p(n,u.start)||i.p(n,u.end):!1;return(0,h.jsx)(`button`,{type:`button`,className:t.t(`day`,!r&&`other-month`,i.p(n,De)&&`today`,s&&`range-start selected`,c&&`range-end selected`,l&&`in-range`,d&&!f&&`preview-range`,o&&`disabled`),onClick:()=>J(n),onMouseEnter:()=>U&&!W&&F(n),onFocus:()=>U&&!W&&F(n),disabled:o,tabIndex:-1,children:n.getDate()},`${e.toISOString()}-${a}`)})})]},e.toISOString()))}),(0,h.jsxs)(`div`,{className:`footer`,children:[(0,h.jsx)(`span`,{className:`summary`,children:Ae}),(0,h.jsxs)(`div`,{className:`footer-actions`,children:[w&&(U||W)&&(0,h.jsx)(`button`,{type:`button`,className:`footer-btn`,onClick:e=>{e.preventDefault(),q({start:null,end:null}),F(null)},children:K.clear}),oe&&(0,h.jsx)(`button`,{type:`button`,className:`footer-btn`,onClick:Ce,children:K.today})]})]})]}),Fe=()=>(0,h.jsxs)(`div`,{className:t.t(`date-range-calendar`,je&&`with-sidebar`),children:[je&&Ne(),Pe()]});return T?(0,h.jsxs)(`div`,{className:t.t(`date-range-picker`,x&&`color-${x}`,se&&`full-width`,A),style:j,children:[S&&(0,h.jsx)(`label`,{className:t.t(`field-label`,G&&`error`,C&&`required`),children:S}),Fe()]}):(0,h.jsxs)(`div`,{className:t.t(`date-range-picker`,x&&`color-${x}`,se&&`full-width`,A),style:j,children:[S&&(0,h.jsx)(`label`,{htmlFor:v,className:t.t(`field-label`,I&&`focused`,G&&`error`,C&&`required`),children:S}),(0,h.jsxs)(`div`,{ref:H,className:t.t(`trigger`,`field-${y}`,`field-${b}`,I&&`focused`,G&&`error`,_&&`disabled`),onClick:()=>!_&&!ee&&L(!0),children:[(0,h.jsx)(`span`,{className:`icon`,children:(0,h.jsx)(e.Ri,{})}),(0,h.jsx)(`input`,{type:`text`,className:`input`,value:Oe,placeholder:g??K.defaultRangePlaceholder,disabled:_,readOnly:!0,id:v,"aria-invalid":G||void 0}),w&&(U||W)&&!_&&(0,h.jsx)(`button`,{type:`button`,className:`clear-btn clear-btn-base`,onClick:Se,tabIndex:-1,"aria-label":K.clear,children:(0,h.jsx)(e.Xi,{})})]}),te&&U&&W&&(0,h.jsx)(`input`,{type:`hidden`,name:te,value:`${U.toISOString().split(`T`)[0]}:${W.toISOString().split(`T`)[0]}`}),(0,h.jsx)(s.t,{className:`date-range-picker-popover`,style:{"--color-rgb":ne(x)},open:I,anchorRef:H,onClose:()=>{L(!1),F(null)},placement:`bottom-start`,children:Fe()}),(ie||re)&&(0,h.jsx)(`div`,{className:`bottom-row`,children:ie?(0,h.jsx)(`span`,{className:`field-error`,role:`alert`,children:ie}):(0,h.jsx)(`span`,{className:`helper-text`,children:re})})]})}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return I}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return pe}});
2
- //# sourceMappingURL=dropdowns-vaj6vhl6.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"frameworkTexts-C1yvIVm4.js","names":[],"sources":["../src/utils/calendarDates.ts","../src/i18n/frameworkTexts.ts"],"sourcesContent":["/**\n * Internal date helpers shared by the calendar family (MCalendarBoard, MTimelineBoard,\n * MMiniCalendar, MScheduler) and MDatePicker. Basic-safe: no Pro imports, not re-exported\n * from the package root. Every helper works in the browser's local time zone.\n */\n\nexport const MS_PER_MINUTE = 60_000\nexport const MS_PER_HOUR = 3_600_000\nexport const MS_PER_DAY = 24 * MS_PER_HOUR\n\nexport type CalendarWeekStart = 0 | 1\n\nexport function toDate(value: Date | string): Date {\n return value instanceof Date ? value : new Date(value)\n}\n\nexport function isValidDate(value: Date): boolean {\n return !Number.isNaN(value.getTime())\n}\n\nexport function parseHmToMinutes(value?: string): number | null {\n if (!value) {\n return null\n }\n const match = /^(\\d{1,2}):(\\d{2})$/.exec(value)\n if (!match) {\n return null\n }\n return Number(match[1]) * 60 + Number(match[2])\n}\n\nexport function startOfDay(date: Date): Date {\n const next = new Date(date)\n next.setHours(0, 0, 0, 0)\n return next\n}\n\nexport function stripTime(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate())\n}\n\nexport function normalizeDate(value?: Date | string | null): Date | null {\n if (!value) {\n return null\n }\n const parsed = toDate(value)\n if (!isValidDate(parsed)) {\n return null\n }\n return stripTime(parsed)\n}\n\n/** Adds calendar days (DST-safe, keeps the wall-clock time). */\nexport function addDays(date: Date, amount: number): Date {\n const next = new Date(date)\n next.setDate(next.getDate() + amount)\n return next\n}\n\nexport function addMinutes(date: Date, amount: number): Date {\n return new Date(date.getTime() + amount * MS_PER_MINUTE)\n}\n\nexport function startOfMonth(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth(), 1)\n}\n\n/** First day of the month `amount` months away from `date`. */\nexport function addMonthsToMonth(date: Date, amount: number): Date {\n return new Date(date.getFullYear(), date.getMonth() + amount, 1)\n}\n\n/** Same day of month `amount` months away, clamped to the target month length. */\nexport function addMonthsClamped(date: Date, amount: number): Date {\n const target = new Date(date.getFullYear(), date.getMonth() + amount, 1)\n const lastDay = new Date(target.getFullYear(), target.getMonth() + 1, 0).getDate()\n target.setDate(Math.min(date.getDate(), lastDay))\n return target\n}\n\nexport function isSameDay(a: Date, b: Date): boolean {\n return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate()\n}\n\nexport function isSameMonth(a: Date, b: Date): boolean {\n return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth()\n}\n\nexport function clamp(value: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, value))\n}\n\nexport function startOfWeek(date: Date, weekStartsOn: CalendarWeekStart = 1): Date {\n const safeDate = stripTime(date)\n const delta = (safeDate.getDay() - weekStartsOn + 7) % 7\n return stripTime(addDays(safeDate, -delta))\n}\n\nexport function getDateKey(date: Date): string {\n const year = date.getFullYear()\n const month = String(date.getMonth() + 1).padStart(2, '0')\n const day = String(date.getDate()).padStart(2, '0')\n return `${year}-${month}-${day}`\n}\n\nexport function isWeekend(date: Date): boolean {\n const day = date.getDay()\n return day === 0 || day === 6\n}\n\n/** Minutes elapsed since local midnight. */\nexport function minutesOfDay(date: Date): number {\n return date.getHours() * 60 + date.getMinutes() + date.getSeconds() / 60\n}\n\n/** Whole calendar days between two dates (b - a), ignoring the time of day. */\nexport function diffCalendarDays(a: Date, b: Date): number {\n return Math.round((stripTime(b).getTime() - stripTime(a).getTime()) / MS_PER_DAY)\n}\n\n/** The 6 x 7 month grid starting on `weekStartsOn`, outside days included. */\nexport function getMonthMatrix(month: Date, weekStartsOn: CalendarWeekStart = 1): Date[] {\n const gridStart = startOfWeek(startOfMonth(month), weekStartsOn)\n return Array.from({length: 42}, (_, index) => stripTime(addDays(gridStart, index)))\n}\n\n/** Localised short weekday names, ordered from `weekStartsOn`. */\nexport function getWeekdayLabels(\n locale: string,\n weekStartsOn: CalendarWeekStart = 1,\n format: 'narrow' | 'short' | 'long' = 'short'\n): string[] {\n const formatter = new Intl.DateTimeFormat(locale, {weekday: format})\n // 2023-01-01 was a Sunday.\n return Array.from({length: 7}, (_, index) => formatter.format(new Date(2023, 0, 1 + ((index + weekStartsOn) % 7))))\n}\n\nexport function formatHourLabel(date: Date, locale: string): string {\n return new Intl.DateTimeFormat(locale, {hour: '2-digit', minute: '2-digit', hour12: false}).format(date)\n}\n\nexport function formatDayLabel(date: Date, locale: string): string {\n return new Intl.DateTimeFormat(locale, {weekday: 'short', day: '2-digit', month: 'short'}).format(date)\n}\n\nexport function formatShortWeekday(date: Date, locale: string): string {\n return new Intl.DateTimeFormat(locale, {weekday: 'short'}).format(date)\n}\n\nexport function formatRangeLabel(start: Date, end: Date, locale: string): string {\n return `${formatHourLabel(start, locale)} – ${formatHourLabel(end, locale)}`\n}\n\nexport function formatFullDate(date: Date, locale: string): string {\n return new Intl.DateTimeFormat(locale, {weekday: 'long', day: 'numeric', month: 'long', year: 'numeric'}).format(\n date\n )\n}\n\nexport function formatMonthTitle(date: Date, locale: string, withYear = true): string {\n return new Intl.DateTimeFormat(locale, withYear ? {month: 'long', year: 'numeric'} : {month: 'long'}).format(date)\n}\n\ntype RangeFormatter = Intl.DateTimeFormat & {formatRange?: (start: Date, end: Date) => string}\n\n/** \"21 – 27 September 2026\", \"28 September – 4 October 2026\", with a plain fallback. */\nexport function formatDateRange(start: Date, endInclusive: Date, locale: string): string {\n const formatter = new Intl.DateTimeFormat(locale, {\n day: 'numeric',\n month: 'long',\n year: 'numeric',\n }) as RangeFormatter\n if (isSameDay(start, endInclusive)) {\n return formatter.format(start)\n }\n if (typeof formatter.formatRange === 'function') {\n return formatter.formatRange(start, endInclusive)\n }\n return `${formatter.format(start)} – ${formatter.format(endInclusive)}`\n}\n\nexport type CalendarPeriodView = 'week' | 'day' | 'timeline' | 'month' | 'agenda'\n\n/**\n * Toolbar title for a period. `end` is exclusive. Month uses the month that holds the\n * middle of the range, so a 6-week grid still reads \"September 2026\".\n */\nexport function formatPeriodTitle(view: CalendarPeriodView, start: Date, end: Date, locale: string): string {\n if (view === 'month') {\n const middle = new Date((start.getTime() + end.getTime()) / 2)\n return formatMonthTitle(middle, locale)\n }\n if (view === 'day' || view === 'timeline') {\n return formatFullDate(start, locale)\n }\n const lastDay = addDays(end, -1)\n return formatDateRange(start, lastDay, locale)\n}\n","import {useCallback, useMemo} from 'react'\nimport {useOptionalMI18n} from './MI18nProvider'\n\nfunction useTranslate() {\n const i18n = useOptionalMI18n()\n\n return useCallback((key: string, fallback: string) => i18n?.t(key, fallback) ?? fallback, [i18n])\n}\n\nexport interface MDatePickerTexts {\n today: string\n clear: string\n previousMonth: string\n nextMonth: string\n}\n\nexport interface MDateRangePickerTexts extends MDatePickerTexts {\n rangeSubtitle: string\n defaultRangePlaceholder: string\n presets: {\n today: string\n days2: string\n days3: string\n days7: string\n days14: string\n days31: string\n thisMonth: string\n previousMonth: string\n months2: string\n months3: string\n months6: string\n year1: string\n }\n}\n\nexport interface MCalendarBoardTexts {\n monthView: string\n weekView: string\n previousWeek: string\n nextWeek: string\n emptyStateText: string\n timelineTitle: string\n timelineEmptyState: string\n allDay: string\n allDayTab: string\n timelineTab: string\n itemsCount: (count: number) => string\n}\n\nexport interface MFileManagerTexts {\n home: string\n searchPlaceholder: string\n emptyText: string\n folders: string\n noFoldersAvailable: string\n currentFolder: string\n filteredBy: (query: string) => string\n listView: string\n gridView: string\n folder: string\n file: string\n preview: string\n path: string\n selectItemToInspect: string\n itemsCount: (count: number) => string\n rename: string\n moveTo: string\n delete: string\n download: string\n newFolder: string\n}\n\nexport function useMDatePickerTexts(): MDatePickerTexts {\n const t = useTranslate()\n\n return useMemo(\n () => ({\n today: t('mineralui.datePicker.today', 'Today'),\n clear: t('mineralui.datePicker.clear', 'Clear'),\n previousMonth: t('mineralui.datePicker.previousMonth', 'Previous month'),\n nextMonth: t('mineralui.datePicker.nextMonth', 'Next month'),\n }),\n [t]\n )\n}\n\nexport function useMDateRangePickerTexts(): MDateRangePickerTexts {\n const t = useTranslate()\n\n return useMemo(\n () => ({\n today: t('mineralui.dateRangePicker.today', 'Today'),\n clear: t('mineralui.dateRangePicker.clear', 'Clear'),\n previousMonth: t('mineralui.dateRangePicker.previousMonth', 'Previous month'),\n nextMonth: t('mineralui.dateRangePicker.nextMonth', 'Next month'),\n rangeSubtitle: t('mineralui.dateRangePicker.rangeSubtitle', 'Select start and end dates in one panel.'),\n defaultRangePlaceholder: t('mineralui.dateRangePicker.defaultRangePlaceholder', 'Select date range...'),\n presets: {\n today: t('mineralui.dateRangePicker.presets.today', 'Today'),\n days2: t('mineralui.dateRangePicker.presets.days2', '2 days'),\n days3: t('mineralui.dateRangePicker.presets.days3', '3 days'),\n days7: t('mineralui.dateRangePicker.presets.days7', '7 days'),\n days14: t('mineralui.dateRangePicker.presets.days14', '14 days'),\n days31: t('mineralui.dateRangePicker.presets.days31', '31 days'),\n thisMonth: t('mineralui.dateRangePicker.presets.thisMonth', 'This month'),\n previousMonth: t('mineralui.dateRangePicker.presets.previousMonth', 'Previous month'),\n months2: t('mineralui.dateRangePicker.presets.months2', '2 months'),\n months3: t('mineralui.dateRangePicker.presets.months3', '3 months'),\n months6: t('mineralui.dateRangePicker.presets.months6', '6 months'),\n year1: t('mineralui.dateRangePicker.presets.year1', '1 year'),\n },\n }),\n [t]\n )\n}\n\nexport function useMCalendarBoardTexts(): MCalendarBoardTexts {\n const t = useTranslate()\n\n return useMemo(\n () => ({\n monthView: t('mineralui.calendarBoard.monthView', 'Month'),\n weekView: t('mineralui.calendarBoard.weekView', 'Week'),\n previousWeek: t('mineralui.calendarBoard.previousWeek', 'Previous week'),\n nextWeek: t('mineralui.calendarBoard.nextWeek', 'Next week'),\n emptyStateText: t('mineralui.calendarBoard.emptyStateText', 'No events for the selected day.'),\n timelineTitle: t('mineralui.calendarBoard.timelineTitle', 'Daily timeline'),\n timelineEmptyState: t('mineralui.calendarBoard.timelineEmptyState', 'No events in this hour.'),\n allDay: t('mineralui.calendarBoard.allDay', 'All day'),\n allDayTab: t('mineralui.calendarBoard.allDayTab', 'All day'),\n timelineTab: t('mineralui.calendarBoard.timelineTab', 'Hourly timeline'),\n itemsCount: (count) =>\n t('mineralui.calendarBoard.itemsCount', '{count} items').replace('{count}', String(count)),\n }),\n [t]\n )\n}\n\nexport function useMFileManagerTexts(): MFileManagerTexts {\n const t = useTranslate()\n\n return useMemo(\n () => ({\n home: t('mineralui.fileManager.home', 'Home'),\n searchPlaceholder: t('mineralui.fileManager.searchPlaceholder', 'Search in folder...'),\n emptyText: t('mineralui.fileManager.emptyText', 'This folder is empty.'),\n folders: t('mineralui.fileManager.folders', 'Folders'),\n noFoldersAvailable: t('mineralui.fileManager.noFoldersAvailable', 'No folders available.'),\n currentFolder: t('mineralui.fileManager.currentFolder', 'Current folder'),\n filteredBy: (query) =>\n t('mineralui.fileManager.filteredBy', 'Filtered by \"{query}\"').replace('{query}', query),\n listView: t('mineralui.fileManager.listView', 'List'),\n gridView: t('mineralui.fileManager.gridView', 'Grid'),\n folder: t('mineralui.fileManager.folder', 'Folder'),\n file: t('mineralui.fileManager.file', 'File'),\n preview: t('mineralui.fileManager.preview', 'Preview'),\n path: t('mineralui.fileManager.path', 'Path'),\n selectItemToInspect: t(\n 'mineralui.fileManager.selectItemToInspect',\n 'Select a file or folder to inspect its details.'\n ),\n itemsCount: (count) =>\n t('mineralui.fileManager.itemsCount', '{count} items').replace('{count}', String(count)),\n rename: t('mineralui.fileManager.rename', 'Rename'),\n moveTo: t('mineralui.fileManager.moveTo', 'Move to...'),\n delete: t('mineralui.fileManager.delete', 'Delete'),\n download: t('mineralui.fileManager.download', 'Download'),\n newFolder: t('mineralui.fileManager.newFolder', 'New folder'),\n }),\n [t]\n )\n}\n\n// Cookie-consent texts moved to @banzamel/honey in mineralui-pro 2.0.0.\n// Consumers that need to retheme cookie copy now pass `texts` directly to\n// `<CookieConsentProvider>` from `@banzamel/honey`.\n\n/** Count-bearing texts accept a `{count}` template or a function, so apps can pluralise. */\nexport type MSchedulerCountText = string | ((count: number) => string)\n\nexport interface MSchedulerTexts {\n today: string\n previous: string\n next: string\n chooseDate: string\n add: string\n viewLabel: string\n viewWeek: string\n viewDay: string\n viewMonth: string\n viewAgenda: string\n showWeekends: string\n filters: string\n filtersActive: MSchedulerCountText\n clearFilters: string\n allOption: string\n searchPlaceholder: string\n noOptions: string\n allDay: string\n more: MSchedulerCountText\n /** `{count}` and `{date}` placeholders. */\n moreAria: string\n eventCount: MSchedulerCountText\n emptyState: string\n loading: string\n now: string\n recurring: string\n cancelled: string\n conflict: string\n eventDetails: string\n eventActions: string\n close: string\n participants: MSchedulerCountText\n /** `{count}` and `{capacity}` placeholders. */\n participantsCapacity: string\n location: string\n /** `{title}` placeholder, announced on every period change. */\n periodAnnouncement: string\n /** `{date}` placeholder — label of a day-number button. */\n openDay: string\n viewTimeline: string\n /** `{view}` and `{set}` placeholders — view-menu entry of a resource set. */\n viewWithSet: string\n move: string\n resize: string\n moveInstructions: string\n /** Announced when the keyboard move mode starts in the month view. */\n moveInstructionsMonth: string\n /** Appended to the native tooltip of a draggable event. */\n dragHint: string\n /** `{title}` and `{when}` placeholders. */\n moved: string\n /** `{title}` and `{time}` placeholders. */\n resized: string\n moveRefused: string\n moveCancelled: string\n unavailable: string\n blocked: string\n /** Caption above the leader row in the event details. */\n leader: string\n /** Visible label of the \"open this day\" action in the month \"+N more\" popover. */\n openDayView: string\n /** Toolbar button shown in the day view after a drill-down from the month view. */\n backToMonth: string\n}\n\nfunction polishPlural(count: number, one: string, few: string, many: string): string {\n const mod10 = count % 10\n const mod100 = count % 100\n if (count === 1) {\n return one\n }\n if (mod10 >= 2 && mod10 <= 4 && (mod100 < 12 || mod100 > 14)) {\n return few\n }\n return many\n}\n\nexport const mineralSchedulerTextsEn: MSchedulerTexts = {\n today: 'Today',\n previous: 'Previous period',\n next: 'Next period',\n chooseDate: 'Choose date',\n add: 'Add',\n viewLabel: 'View',\n viewWeek: 'Week',\n viewDay: 'Day',\n viewMonth: 'Month',\n viewAgenda: 'Agenda',\n showWeekends: 'Show weekends',\n filters: 'Filters',\n filtersActive: 'Filters ({count})',\n clearFilters: 'Clear filters',\n allOption: 'All',\n searchPlaceholder: 'Search…',\n noOptions: 'No results',\n allDay: 'All day',\n more: '+{count} more',\n moreAria: 'Show {count} more events on {date}',\n eventCount: (count) => (count === 1 ? '1 event' : `${count} events`),\n emptyState: 'No events to display',\n loading: 'Loading events',\n now: 'Now',\n recurring: 'Recurring',\n cancelled: 'Cancelled',\n conflict: 'Conflict',\n eventDetails: 'Event details',\n eventActions: 'Event actions',\n close: 'Close',\n participants: 'Participants ({count})',\n participantsCapacity: 'Participants ({count} / {capacity})',\n location: 'Location',\n periodAnnouncement: '{title}',\n openDay: 'Open {date}',\n viewTimeline: 'Timeline',\n viewWithSet: '{view} – {set}',\n move: 'Move',\n resize: 'Resize',\n moveInstructions: 'Arrows move, Shift+arrows move by an hour, Enter drops, Escape cancels.',\n moveInstructionsMonth: 'Left and right arrows move by a day, up and down by a week, Enter drops, Escape cancels.',\n dragHint: 'Drag to move',\n moved: '{title} moved to {when}',\n resized: '{title} now ends at {time}',\n moveRefused: 'Cannot move here',\n moveCancelled: 'Move cancelled',\n unavailable: 'Unavailable',\n blocked: 'Blocked',\n leader: 'Leader',\n openDayView: 'Open day',\n backToMonth: 'Back to month',\n}\n\nexport const mineralSchedulerTextsPl: MSchedulerTexts = {\n today: 'Dzisiaj',\n previous: 'Poprzedni okres',\n next: 'Następny okres',\n chooseDate: 'Wybierz datę',\n add: 'Dodaj',\n viewLabel: 'Widok',\n viewWeek: 'Tydzień',\n viewDay: 'Dzień',\n viewMonth: 'Miesiąc',\n viewAgenda: 'Lista',\n showWeekends: 'Pokaż weekendy',\n filters: 'Filtry',\n filtersActive: 'Filtry ({count})',\n clearFilters: 'Wyczyść filtry',\n allOption: 'Wszystkie',\n searchPlaceholder: 'Szukaj…',\n noOptions: 'Brak wyników',\n allDay: 'Cały dzień',\n more: '+{count} więcej',\n moreAria: 'Pokaż {count} więcej wydarzeń w dniu {date}',\n eventCount: (count) => `${count} ${polishPlural(count, 'wydarzenie', 'wydarzenia', 'wydarzeń')}`,\n emptyState: 'Brak wydarzeń do wyświetlenia',\n loading: 'Wczytywanie wydarzeń',\n now: 'Teraz',\n recurring: 'Cykliczne',\n cancelled: 'Odwołane',\n conflict: 'Konflikt',\n eventDetails: 'Szczegóły wydarzenia',\n eventActions: 'Akcje wydarzenia',\n close: 'Zamknij',\n participants: 'Uczestnicy ({count})',\n participantsCapacity: 'Uczestnicy ({count} / {capacity})',\n location: 'Miejsce',\n periodAnnouncement: '{title}',\n openDay: 'Otwórz {date}',\n viewTimeline: 'Oś czasu',\n viewWithSet: '{view} – {set}',\n move: 'Przenieś',\n resize: 'Zmień długość',\n moveInstructions: 'Strzałki przesuwają, Shift+strzałki o godzinę, Enter upuszcza, Escape anuluje.',\n moveInstructionsMonth:\n 'Strzałki w lewo i w prawo przesuwają o dzień, w górę i w dół o tydzień, Enter upuszcza, Escape anuluje.',\n dragHint: 'Przeciągnij, aby przenieść',\n moved: '{title} przeniesiono na {when}',\n resized: '{title} kończy się o {time}',\n moveRefused: 'Nie można tu przenieść',\n moveCancelled: 'Anulowano przenoszenie',\n unavailable: 'Niedostępne',\n blocked: 'Zablokowane',\n leader: 'Prowadzący',\n openDayView: 'Otwórz dzień',\n backToMonth: 'Wróć do miesiąca',\n}\n\n/** Fills `{name}` placeholders. */\nexport function formatMText(template: string, values: Record<string, string | number>): string {\n return template.replace(/\\{(\\w+)\\}/g, (match, key: string) => (key in values ? String(values[key]) : match))\n}\n\n/** Resolves a count text (template or function) for `count`. */\nexport function formatMCountText(text: MSchedulerCountText, count: number): string {\n return typeof text === 'function' ? text(count) : formatMText(text, {count})\n}\n\nfunction isPolishLocale(locale?: string): boolean {\n return Boolean(locale && locale.toLowerCase().startsWith('pl'))\n}\n\n/**\n * Scheduler texts. Resolution per key: `overrides` → MI18nProvider key\n * `mineralui.scheduler.<key>` → built-in default for `locale` (Polish or English).\n */\nexport function useMSchedulerTexts(locale?: string, overrides?: Partial<MSchedulerTexts>): MSchedulerTexts {\n const t = useTranslate()\n\n return useMemo(() => {\n const defaults = isPolishLocale(locale) ? mineralSchedulerTextsPl : mineralSchedulerTextsEn\n const resolved = {} as Record<keyof MSchedulerTexts, MSchedulerTexts[keyof MSchedulerTexts]>\n ;(Object.keys(defaults) as Array<keyof MSchedulerTexts>).forEach((key) => {\n const override = overrides?.[key]\n if (override !== undefined) {\n resolved[key] = override\n return\n }\n const fallback = defaults[key]\n const i18nKey = `mineralui.scheduler.${key}`\n const translated = t(i18nKey, typeof fallback === 'string' ? fallback : i18nKey)\n resolved[key] = typeof fallback === 'function' && translated === i18nKey ? fallback : translated\n })\n return resolved as MSchedulerTexts\n }, [t, locale, overrides])\n}\n\nexport interface MMiniCalendarTexts {\n previousMonth: string\n nextMonth: string\n}\n\nexport function useMMiniCalendarTexts(locale?: string, overrides?: Partial<MMiniCalendarTexts>): MMiniCalendarTexts {\n const t = useTranslate()\n\n return useMemo(() => {\n const polish = isPolishLocale(locale)\n return {\n previousMonth:\n overrides?.previousMonth ??\n t('mineralui.miniCalendar.previousMonth', polish ? 'Poprzedni miesiąc' : 'Previous month'),\n nextMonth:\n overrides?.nextMonth ??\n t('mineralui.miniCalendar.nextMonth', polish ? 'Następny miesiąc' : 'Next month'),\n }\n }, [t, locale, overrides])\n}\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- const e=require(`./MI18nProvider-Cx4ZaFtv.cjs`);require(`./core-CLRD6sG4.cjs`);let t=require(`react`);function n(e){return e instanceof Date?e:new Date(e)}function r(e){return!Number.isNaN(e.getTime())}function i(e){return new Date(e.getFullYear(),e.getMonth(),e.getDate())}function a(e){if(!e)return null;let t=n(e);return r(t)?i(t):null}function o(e,t){let n=new Date(e);return n.setDate(n.getDate()+t),n}function s(e){return new Date(e.getFullYear(),e.getMonth(),1)}function c(e,t){let n=new Date(e.getFullYear(),e.getMonth()+t,1),r=new Date(n.getFullYear(),n.getMonth()+1,0).getDate();return n.setDate(Math.min(e.getDate(),r)),n}function l(e,t){return e.getFullYear()===t.getFullYear()&&e.getMonth()===t.getMonth()&&e.getDate()===t.getDate()}function u(e,t){return e.getFullYear()===t.getFullYear()&&e.getMonth()===t.getMonth()}function d(e,t=1){let n=i(e);return i(o(n,-((n.getDay()-t+7)%7)))}function f(e){return`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,`0`)}-${String(e.getDate()).padStart(2,`0`)}`}function p(e,t=1){let n=d(s(e),t);return Array.from({length:42},(e,t)=>i(o(n,t)))}function m(e,t=1,n=`short`){let r=new Intl.DateTimeFormat(e,{weekday:n});return Array.from({length:7},(e,n)=>r.format(new Date(2023,0,1+(n+t)%7)))}function h(){let n=e.r();return(0,t.useCallback)((e,t)=>n?.t(e,t)??t,[n])}function g(){let e=h();return(0,t.useMemo)(()=>({today:e(`mineralui.datePicker.today`,`Today`),clear:e(`mineralui.datePicker.clear`,`Clear`),previousMonth:e(`mineralui.datePicker.previousMonth`,`Previous month`),nextMonth:e(`mineralui.datePicker.nextMonth`,`Next month`)}),[e])}function _(){let e=h();return(0,t.useMemo)(()=>({today:e(`mineralui.dateRangePicker.today`,`Today`),clear:e(`mineralui.dateRangePicker.clear`,`Clear`),previousMonth:e(`mineralui.dateRangePicker.previousMonth`,`Previous month`),nextMonth:e(`mineralui.dateRangePicker.nextMonth`,`Next month`),rangeSubtitle:e(`mineralui.dateRangePicker.rangeSubtitle`,`Select start and end dates in one panel.`),defaultRangePlaceholder:e(`mineralui.dateRangePicker.defaultRangePlaceholder`,`Select date range...`),presets:{today:e(`mineralui.dateRangePicker.presets.today`,`Today`),days2:e(`mineralui.dateRangePicker.presets.days2`,`2 days`),days3:e(`mineralui.dateRangePicker.presets.days3`,`3 days`),days7:e(`mineralui.dateRangePicker.presets.days7`,`7 days`),days14:e(`mineralui.dateRangePicker.presets.days14`,`14 days`),days31:e(`mineralui.dateRangePicker.presets.days31`,`31 days`),thisMonth:e(`mineralui.dateRangePicker.presets.thisMonth`,`This month`),previousMonth:e(`mineralui.dateRangePicker.presets.previousMonth`,`Previous month`),months2:e(`mineralui.dateRangePicker.presets.months2`,`2 months`),months3:e(`mineralui.dateRangePicker.presets.months3`,`3 months`),months6:e(`mineralui.dateRangePicker.presets.months6`,`6 months`),year1:e(`mineralui.dateRangePicker.presets.year1`,`1 year`)}}),[e])}function v(e){return!!(e&&e.toLowerCase().startsWith(`pl`))}function y(e,n){let r=h();return(0,t.useMemo)(()=>{let t=v(e);return{previousMonth:n?.previousMonth??r(`mineralui.miniCalendar.previousMonth`,t?`Poprzedni miesiąc`:`Previous month`),nextMonth:n?.nextMonth??r(`mineralui.miniCalendar.nextMonth`,t?`Następny miesiąc`:`Next month`)}},[r,e,n])}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return u}});
2
- //# sourceMappingURL=frameworkTexts-D3wbwWCu.cjs.map